vue-文字转语音
vue
SpeechSynthesisUtterance监听事件
onstart 开始合成
onend 合成结束
onerror 合成错误
onpause 暂停
onresume 恢复暂停
onboundary 在句子或单词边界
<template> <div class="language"> <!-- <div class="right-lanage">--> <img src="../../assets/img/zanting.png" alt="" style="float: right; padding-right: 20px; padding-top: 7px" v-if="show" @click="playVoice"> <img src="../../assets/img/bofang.png" alt="" style="float: right; padding-right: 20px; padding-top: 7px" v-else @click="playVoice"> <p>{{text}}</p> </div> <!-- </div>--> </template>
const synth = window.speechSynthesis; const msg = new SpeechSynthesisUtterance();
data() { return { show: false, //显示与隐藏 text:'据盖茨基金会官方微博6月15日消息,比尔及梅琳达' } },
methods: { playVoice() { this.show = !this.show; this.handleSpeak(this.text) if (this.show===false) { this.handleStop() } }, // 语音播报的函数 handleSpeak(text) { msg.text = text; // 文字内容: 小朋友,你是否有很多问号 msg.lang = "zh-TW"; // 使用的语言:中文 msg.volume = 1; // 声音音量:1 msg.rate = 1; // 语速:1 msg.pitch = 1; // 音高:1 synth.speak(msg); // 播放 msg.onend = (event) => { //语音合成结束时候的回调(语音读完后触发) alert('合成结束'); } }, // 语音停止 handleStop(e) { msg.text = e; msg.lang = "zh-CN"; synth.cancel(msg); } },
const speak = (word) => { let msg = new window.SpeechSynthesisUtterance(word); // msg.text = word; //播放文案 msg.volume = '1'; // 声音的音量,区间范围是0到1,默认是1。 msg.rate = 1;// 设置播放语速,范围:0.1 - 10之间 正常为1倍播放 msg.pitch = '0'; // 表示说话的音高,数值,范围从0(最小)到2(最大)。默认值为1。 msg.lang = 'zh-cn'; // 使用的语言,字符串, 例如:"zh-cn" msg.voiceURI = 'Ting-Ting' msg.voiceURI = 'Google 普通话(中国大陆)'; msg.onend = (event) => { //语音合成结束时候的回调(语音读完后触发) console.log('合成结束'); } msg.onstart = (event) => { console.log('合成开始'); } msg.onerror = (event) => { console.log('onerror'); } msg.onpause = (event) => { console.log('暂停'); } msg.onresume = (event) => { console.log('恢复'); } msg.onboundary = (event) => { console.log('在单词或句子边界'); } window.speechSynthesis.speak(msg); return window.speechSynthesis; } let instance = null; ele.addEventListener('click', () => { instance = speak('123456789') console.log(instance.getVoices()); }) pause.addEventListener('click', () => { instance.pause() }) resume.addEventListener('click', () => { instance.resume() }) cancel.addEventListener('click', () => { instance.cancel() })
本文作者:赵刚、
本文链接:https://www.cnblogs.com/zgboy/p/17486137.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现