• 文字转语音:语音合成(Speech Synthesis) 数组文字循环播放


    前言:
    HTML5中和Web Speech相关的API实际上有两类,一类是“语音识别(Speech Recognition)”,另外一个就是“语音合成(Speech Synthesis)”, 这两个名词实际上指的分别是“语音转文字”,和“文字变语音”。

    speak() – 只能接收SpeechSynthesisUtterance作为唯一的参数,作用是读合成的话语。 stop() – 立即终止合成过程。 pause() – 暂停合成过程。 resume() – 重新开始合成过程。 getVoices() – 此方法不接受任何参数,用来返回浏览器支持的语音包列表,是个数组。 speechSynthesis.getVoices()返回因每个浏览器不同及版本的不同返回不太一样,大致是这样:

    注意:语言包获取不稳定,有时候返回为空,可以用定时器多试几次。

    • SpeechSynthesisUtterance主要用来构建语音合成实例,
    • speechSynthesis大概用来触发浏览器语音模块,让浏览器把内容读出来。 想要浏览器开口说话,只需要:
       
      1. let speechInstance = new SpeechSynthesisUtterance('大家好,我是渣渣辉。');
      2. speechSynthesis.speak(speechInstance);`
      3. 就是这么简单,不妨copy进浏览器试一下?
      4. // 更换语言
      5. var msg = new SpeechSynthesisUtterance();
      6. var voices = window.speechSynthesis.getVoices(); // 获取语言包
      7. msg.voice = voices[18]; // 18:普通话
      8. msg.text = "Hello World";
      9. speechSynthesis.speak(msg); //

      SpeechSynthesisUtterance实例有以下属性,可以通过设置一下属性调整发音:

    • text – 要合成的文字内容,字符串。

    • lang – 使用的语言,字符串, 例如:"zh-cn"

    • voiceURI – 指定希望使用的声音和服务,字符串。

    • volume – 声音的音量,区间范围是0到1,默认是1。

    • rate – 语速,数值,默认值是1,范围是0.1到10,表示语速的倍数,例如2表示正常语速的两倍。

    • pitch – 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。


      还有一些方法:

    • onstart – 语音合成开始时候的回调。
    • onpause – 语音合成暂停时候的回调。
    • onresume – 语音合成重新开始时候的回调。
    • onend – 语音合成结束时候的回调。
    • speechSynthesis对象有以下方法:

     一、原生写法

    代码如下: 

    1. <script>
    2. const synth = window.speechSynthesis
    3. const msg = new window.SpeechSynthesisUtterance()
    4. export default {
    5. data() {
    6. return {
    7. currentMsgIndex: 0,
    8. text: "",
    9. status: "",
    10. tableData: [
    11. { text: '切换后基站BCCH与TCH电平不一致' },
    12. { text: '切换带异常' },
    13. { text: '切换后TA偏大' },
    14. { text: '切换后基站BCCH与TCH电平不一致' },
    15. { text: '切换带异常' },
    16. { text: '切换后TA偏大' },
    17. { text: '切换后基站BCCH与TCH电平不一致' },
    18. { text: '切换带异常' },
    19. { text: '切换后TA偏大' }
    20. ]
    21. }
    22. },
    23. created() {
    24. this.playVoice()
    25. },
    26. mounted() {
    27. msg.onstart = e => {
    28. // this.currentMsgIndex = 0
    29. this.status = '开始播放'
    30. console.log(this.status)
    31. }
    32. msg.onend = e => {
    33. this.status = '结束播放'
    34. console.log(this.status)
    35. this.currentMsgIndex++
    36. if (this.currentMsgIndex < this.tableData.length) {
    37. this.playVoice()
    38. } else {
    39. this.currentMsgIndex = 0
    40. }
    41. console.log(this.currentMsgIndex)
    42. }
    43. msg.onpause = e => {
    44. this.status = "暂停播放"
    45. console.log('onpause:', this.status)
    46. }
    47. },
    48. destroyed() {
    49. this.stopVoice()
    50. },
    51. methods: {
    52. //播放
    53. playVoice() {
    54. this.handleSpeak(this.tableData[this.currentMsgIndex].text)
    55. },
    56. //暂停
    57. pauseVoice() {
    58. this.handlePause()
    59. },
    60. //继续
    61. resumeVoice() {
    62. this.handleResume()
    63. },
    64. //停止
    65. stopVoice() {
    66. this.handleStop()
    67. },
    68. handleSpeak(TEXT) {
    69. console.log('TEXT:', TEXT)
    70. // if (!this.text) return alert('请输入文本!')
    71. msg.text = TEXT // this.text
    72. msg.lang = 'zh-CN' // 语言
    73. msg.volume = 1 // 音量:0~1,默认1
    74. msg.rate = 1 // 语速:0.1~10,默认1
    75. msg.pitch = 1 // 音高:0~2,默认1
    76. // msg.voiceURI=''// 希望使用的声音
    77. synth.speak(msg)
    78. },
    79. handleStop(e) {
    80. synth.cancel(msg)
    81. },
    82. handlePause(e) {
    83. synth.pause(this.tableData[this.currentMsgIndex].text)
    84. },
    85. handleResume(e) {
    86. synth.resume(msg)
    87. }
    88. }
    89. }
    90. script>
    二、vue安装依赖写法: 

    speak-tts

    1. // 下载依赖包
    2. npm install speak-tts
    3. // 引入
    4. import Speech from 'speak-tts'

     html:

    1. <el-button type="success" @click="speakTtsSpeech">语音播报el-button>
    2. <el-button @click="paused">tts暂停el-button>
    3. <el-button @click="goahead">tts继续播放el-button>

    js:

    1. data () {
    2. return {
    3. speech: null,
    4. tableData: [
    5. { text: '切换后基站BCCH与TCH电平不一致' },
    6. { text: '切换带异常' },
    7. { text: '切换后TA偏大' },
    8. { text: '切换后基站BCCH与TCH电平不一致' },
    9. { text: '切换带异常' },
    10. { text: '切换后TA偏大' },
    11. { text: '切换后基站BCCH与TCH电平不一致' },
    12. { text: '切换带异常' },
    13. { text: '切换后TA偏大' }
    14. ]
    15. }
    16. },
    17. mounted(){
    18. this.speechInit() // 需要初始化
    19. this.speakTtsSpeech()
    20. },
    21. methods:{
    22. speechInit(){
    23. this.speech = new Speech()
    24. this.speech.setLanguage('zh-CN')
    25. this.speech.init().then(()=>{})
    26. },
    27. // 播放函数
    28. speakTtsSpeech(textContent){
    29. for (let i = 0; i < this.tableData.length; i++) {
    30. this.speech.speak({
    31. text: this.tableData[i].text// 播放的文本内容
    32. listeners: {
    33. // 开始播放
    34. onstart: () => { console.log("Start utterance")},
    35. // 判断播放是否完毕
    36. onend: () => { console.log("End utterance")},
    37. // 恢复播放
    38. onresume: () => { console.log("Resume utterance") },
    39. },
    40. }).then(()=>{console.log("读取成功")})
    41. }
    42. },
    43. // 暂停
    44. paused() {
    45. this.speech.pause();
    46. },
    47. // 从暂停处继续播放
    48. goahead() {
    49. this.speech.resume();
    50. },
    51. },
    52. //离开页面取消语音,不取消可能会造成奇妙的bug
    53. destroyed() {
    54. this.speech.cancel();
    55. },

  • 相关阅读:
    linux安装jdk1.8
    女孩姓管取独特的名字大全
    Python游戏篇:细节之大型游戏爆炸效果(附代码)
    抖音实战~分享模块~复制短视频链接
    EasyNLP 中文文图生成模型带你秒变艺术家
    kangle一键安装脚本
    WebDAV之π-Disk派盘 + 恒星播放器
    Jmeter使用Linux做负载机测试时报错 Cannot assign requested address (Address not available)
    PCL点云处理之Pcd文件读取、法线与曲率计算、多线程加速、属性字段合并 (二百零八)
    在阿里云 ACK 上部署 EMQX MQTT 服务器集群
  • 原文地址:https://blog.csdn.net/qq_41646249/article/details/133641181