speak() – 只能接收SpeechSynthesisUtterance作为唯一的参数,作用是读合成的话语。 stop() – 立即终止合成过程。 pause() – 暂停合成过程。 resume() – 重新开始合成过程。 getVoices() – 此方法不接受任何参数,用来返回浏览器支持的语音包列表,是个数组。 speechSynthesis.getVoices()返回因每个浏览器不同及版本的不同返回不太一样,大致是这样:
- let speechInstance = new SpeechSynthesisUtterance('大家好,我是渣渣辉。');
- speechSynthesis.speak(speechInstance);`
- 就是这么简单,不妨copy进浏览器试一下?
- // 更换语言
- var msg = new SpeechSynthesisUtterance();
- var voices = window.speechSynthesis.getVoices(); // 获取语言包
- msg.voice = voices[18]; // 18:普通话
- msg.text = "Hello World";
- speechSynthesis.speak(msg); //
SpeechSynthesisUtterance实例有以下属性,可以通过设置一下属性调整发音:
text – 要合成的文字内容,字符串。
lang – 使用的语言,字符串, 例如:"zh-cn"
voiceURI – 指定希望使用的声音和服务,字符串。
volume – 声音的音量,区间范围是0到1,默认是1。
rate – 语速,数值,默认值是1,范围是0.1到10,表示语速的倍数,例如2表示正常语速的两倍。
pitch – 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。
还有一些方法:
一、原生写法
代码如下:
- <div class="box">
-
- <button @click="playVoice">播放语音button>
- <button @click="pauseVoice" v-if="status === '开始播放'">暂停播放button>
- <button @click="resumeVoice" v-if="status === '暂停播放'">继续播放button>
- <button @click="stopVoice">停止播放button>
- <div>播放状态:{{ status }}div>
- div>
-
- <script>
- const synth = window.speechSynthesis
- const msg = new window.SpeechSynthesisUtterance()
- export default {
- data() {
- return {
- currentMsgIndex: 0,
- text: "",
- status: "",
- tableData: [
- { text: '切换后基站BCCH与TCH电平不一致' },
- { text: '切换带异常' },
- { text: '切换后TA偏大' },
- { text: '切换后基站BCCH与TCH电平不一致' },
- { text: '切换带异常' },
- { text: '切换后TA偏大' },
- { text: '切换后基站BCCH与TCH电平不一致' },
- { text: '切换带异常' },
- { text: '切换后TA偏大' }
- ]
- }
- },
- created() {
- this.playVoice()
- },
- mounted() {
- msg.onstart = e => {
- // this.currentMsgIndex = 0
- this.status = '开始播放'
- console.log(this.status)
- }
- msg.onend = e => {
- this.status = '结束播放'
- console.log(this.status)
- this.currentMsgIndex++
- if (this.currentMsgIndex < this.tableData.length) {
- this.playVoice()
- } else {
- this.currentMsgIndex = 0
- }
- console.log(this.currentMsgIndex)
- }
- msg.onpause = e => {
- this.status = "暂停播放"
- console.log('onpause:', this.status)
- }
- },
- destroyed() {
- this.stopVoice()
- },
- methods: {
- //播放
- playVoice() {
- this.handleSpeak(this.tableData[this.currentMsgIndex].text)
- },
- //暂停
- pauseVoice() {
- this.handlePause()
- },
- //继续
- resumeVoice() {
- this.handleResume()
- },
- //停止
- stopVoice() {
- this.handleStop()
- },
- handleSpeak(TEXT) {
- console.log('TEXT:', TEXT)
- // if (!this.text) return alert('请输入文本!')
- msg.text = TEXT // this.text
- msg.lang = 'zh-CN' // 语言
- msg.volume = 1 // 音量:0~1,默认1
- msg.rate = 1 // 语速:0.1~10,默认1
- msg.pitch = 1 // 音高:0~2,默认1
- // msg.voiceURI=''// 希望使用的声音
- synth.speak(msg)
- },
- handleStop(e) {
- synth.cancel(msg)
- },
- handlePause(e) {
- synth.pause(this.tableData[this.currentMsgIndex].text)
- },
- handleResume(e) {
- synth.resume(msg)
- }
- }
- }
- script>
speak-tts
- // 下载依赖包
- npm install speak-tts
- // 引入
- import Speech from 'speak-tts'
html:
- <el-button type="success" @click="speakTtsSpeech">语音播报el-button>
- <el-button @click="paused">tts暂停el-button>
- <el-button @click="goahead">tts继续播放el-button>
js:
- data () {
- return {
- speech: null,
- tableData: [
- { text: '切换后基站BCCH与TCH电平不一致' },
- { text: '切换带异常' },
- { text: '切换后TA偏大' },
- { text: '切换后基站BCCH与TCH电平不一致' },
- { text: '切换带异常' },
- { text: '切换后TA偏大' },
- { text: '切换后基站BCCH与TCH电平不一致' },
- { text: '切换带异常' },
- { text: '切换后TA偏大' }
- ]
- }
- },
- mounted(){
- this.speechInit() // 需要初始化
- this.speakTtsSpeech()
- },
- methods:{
- speechInit(){
- this.speech = new Speech()
- this.speech.setLanguage('zh-CN')
- this.speech.init().then(()=>{})
- },
- // 播放函数
- speakTtsSpeech(textContent){
- for (let i = 0; i < this.tableData.length; i++) {
- this.speech.speak({
- text: this.tableData[i].text,// 播放的文本内容
- listeners: {
- // 开始播放
- onstart: () => { console.log("Start utterance")},
- // 判断播放是否完毕
- onend: () => { console.log("End utterance")},
- // 恢复播放
- onresume: () => { console.log("Resume utterance") },
- },
- }).then(()=>{console.log("读取成功")})
- }
- },
- // 暂停
- paused() {
- this.speech.pause();
- },
- // 从暂停处继续播放
- goahead() {
- this.speech.resume();
- },
- },
- //离开页面取消语音,不取消可能会造成奇妙的bug
- destroyed() {
- this.speech.cancel();
- },