以下内容适用于桌面版 Chrome/Safari/Firefox,但不适用于移动设备。
即使在 Chrome 移动设备上,我也可以 1)
SpeechRecognition
完美运行; 2) SpeechSynthesisUtterance
加载正确,我可以检查所有属性,加载声音(通过DevTools远程调试)-只是手机不会说话(iPhone Safari和Android Chrome测试)。
另外,当我在移动设备上尝试这个demo时,它说我的浏览器支持语音合成,我可以从可用的声音中进行选择,但浏览器不会说话。
你知道这里可能出了什么问题吗?
<script>
var u = new SpeechSynthesisUtterance();
u.text = "hello world";
speechSynthesis.speak(u);
</script>
Android Chrome:
我打开了我的“带有java脚本的非常漂亮、精彩和奇妙的Html页面”,我发现我的手机上没有任何功能......(Android)
1.)我用谷歌搜索并发现https://support.google.com/accessibility/android/answer/6006983?hl=en
文本转语音输出 要为您的设备指定文本转语音设置: 打开设备的“设置”应用程序。 选择“辅助功能”,然后选择“文本转语音输出”。 选择您喜欢的引擎、语言、语速和音调。 注意:默认的文本转语音引擎选择因设备而异。选项可以包括 Google 的文本转语音引擎、设备制造商的引擎以及您从 Google Play 商店下载的任何第三方文本转语音引擎。 可选:要收听语音合成的简短演示,请按“播放”。 可选:要安装其他语言的语音数据,请选择“设置”,然后选择“安装语音数据”。选择您要安装的语言。
注意:(选择“辅助功能”,然后选择“文本转语音输出”。)
我激活了“触摸听”,因为我的选项充满了任何内容,但不是上面提到的。相反,“TalkBack”有点太重了,所以我将其保留为“未使用/未选择”......
2.)speechSynthesis.resume()和speechSynthesis.pause();不起作用,目前没有其他解决方案,除了在检测到移动浏览器/触摸设备时排除它们之外。
听起来可能与:SpeechSynthesisUtterance 在移动浏览器中不起作用有关。看来,在移动浏览器上,语音必须由用户交互至少启动一次,以便随后从 JavaScript 以编程方式启动。
在一个相关问题中,以下代码在 Chrome Android 中运行,但事件监听器似乎没有调用 NextWord 函数,而它在 macOS 上的 Chrome 和 Safari 上运行良好:
speechTextString = "Hello World"
speechText = new SpeechSynthesisUtterance( speechTextString );
speechText.onboundary = function (event) {
if ( event.name == "word" ) { NextWord( event.charIndex ) }
};
您是否尝试过在speechSynthesis前面添加窗口? 代码是 window.speechSynthesis.speak(u) .
当我撰写(2020)时,我已经提交了 Chromium 和 Android 的整个问题。 Android开发者提交了Bug并给出了解决方案。
所以今天它可以工作了,但是!!!!
在 Chromium 中,任何说话者的语言语法都是:
en_UK,演讲者姓名
在许多 Android 设备(我测试过的设备,所以只是很多)中,它变成:
en-UK,发言者姓名
这意味着加载 Android 的网页中预定义的扬声器永远不会与 Chrome、Firefox 等浏览器选择和定义的语言代码、扬声器相匹配。...
解决方法是:
languageSpeaker = 'en-UK,说话者姓名'; <-- stringify it !!!
然后用 (',') 分割:
var langPairs = languageSpeaker.split(',');
然后:
var 语言 = langPairs[0][0] + langPairs[0][1];
var 方言 = langPairs[0][3] + langPairs[0][4];
var 扬声器 = langPairs[1];
有了这些信息,您就可以递归搜索
1.) 是否支持语言? 2.) 是否支持语言和方言? 3.) 是否支持语言、方言和说话者?
避免首先经过说话者,因为说话者称为“Daniel”,无论是法语还是英语都会积极回答。