让你的网页会说话:用 SpeechSynthesis 让文本变成声音的魔法

前言

你有没有想过,如果你的网页能说话,它会说些什么?是"欢迎光临,我是你最好的朋友!"还是"快来看看我的新功能!"无论如何,今天我们要聊的就是如何让你的网页拥有这种超能力------通过 SpeechSynthesis 接口,让文本瞬间变成声音,仿佛你的网页突然变成了一个有声有色的播音员。

代码实战

js 复制代码
if('speechSynthesis' in window){
       var voices = [];
       var synth = window.speechSynthesis;
       synth.onvoiceschanged = () => {
            voices = synth.getVoices();
        };
       const utterance = new SpeechSynthesisUtterance('测试文字');
        // const utterance = new SpeechSynthesisUtterance('测试文字');
        // utterance.text ='测试文字'
        // BCP 47标准的语言标签
        // 可设置的常见语言及解释:
        // "zh-CN" - 简体中文(中国大陆)
        // "en-US" - 美式英语 
        // "en-GB" - 英式英语 
        // "zh-HK" - 繁体中文(香港)
        // "zh-TW" - 繁体中文(台湾)
        // "fr-FR" - 法语(法国)
        // "de-DE" - 德语(德国)
        // "es-ES" - 西班牙语(西班牙)
        // "it-IT" - 意大利语(意大利)
        // "ja-JP" - 日语(日本)
        // "ko-KR" - 韩语(韩国)
        // "ru-RU" - 俄语(俄罗斯)
        // "pt-BR" - 葡萄牙语(巴西)
        utterance.lang = 'zh-CN';

        // 设置语音参数
        utterance.volume = 1; // 音量 (0.0 到 1.0)
        utterance.rate = 1;   // 语速 (0.1 到 10)
        utterance.pitch = 1;  // 音调 (0 到 2)
        // 重要!
        utterance.voice = voices.filter(item => item.lang === lang && item.localService)[0]

        synth.speak(utterance);
}

以上代码就是可运行的代码,记得要传给它的文字最好是与lang相同的文字,这样播报效果更好。查看MDN发现兼容性可以满足大部分人需求,但用于生产环境的话还需谨慎,毕竟是实验性功能。 MDN示例:mdn.github.io/dom-example...

问题

选择除中文外的其它语言播放没反应

如果你的需求是支持多语言,那大概率会遇到这个问题。首先可能疑惑是voice属性没设置,voice属性MDN的解释是获取和设置将用于说出话语的声音。那这个属性就显得尤为重要,我们通过监听onvoiceschanged事件得出本机支持的语音列表,打印语音列表(安装完需要语音之后的打印列表)重点关注localService属性

localService:指示语音是由本地语音合成器服务(true)还是远程语音合成器服务提供(false)

问题基本明确,是因为目前localService为true的只有中文选项,其它均需要远程语音合成。那么我们只需要提供支持本地语音合成选项即可。解决方法就是给本机安装你需要的语音

附录 A:支持的语言和语音

按照操作指引,选择你需要的语音选项并下载。下载后需要重启电脑才能生效。以上是windows电脑解决方法,其它系统可同样尝试解决。

Chrome浏览器偶现无声音

调用语音播放一般是由ws或接口接收到数据传入后播放,并不是用户主动触发,由此产生这个奇怪的问题。原因是自v71版用户必须手动点击播放按钮才能播放语音合成内容,用户不主动操作那么直接禁止音频的播放

被垃圾广告滥用后谷歌浏览器71将限制语音合成自动播放

解决办法就是可以创建一个隐藏的按钮或其它元素,如果不是主动触发就需调用按钮的点击事件来触发语音播放

相关推荐
passerby606130 分钟前
完成前端时间处理的另一块版图
前端·github·web components
掘了37 分钟前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅40 分钟前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅1 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅1 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment2 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅2 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊2 小时前
jwt介绍
前端
爱敲代码的小鱼2 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte2 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc