Web Speech API 文本转语音功能不适用于移动设备

问题描述 投票:0回答:5

以下内容适用于桌面版 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 google-chrome text-to-speech speech-synthesis
5个回答
2
投票

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();不起作用,目前没有其他解决方案,除了在检测到移动浏览器/触摸设备时排除它们之外。


1
投票

听起来可能与:SpeechSynthesisUtterance 在移动浏览器中不起作用有关。看来,在移动浏览器上,语音必须由用户交互至少启动一次,以便随后从 JavaScript 以编程方式启动。


0
投票

在一个相关问题中,以下代码在 Chrome Android 中运行,但事件监听器似乎没有调用 NextWord 函数,而它在 macOS 上的 Chrome 和 Safari 上运行良好:

speechTextString = "Hello World"
speechText = new SpeechSynthesisUtterance( speechTextString );
    speechText.onboundary = function (event)  {
    if ( event.name == "word" ) { NextWord( event.charIndex ) }
    };

0
投票

您是否尝试过在speechSynthesis前面添加窗口? 代码是 window.speechSynthesis.speak(u) .


0
投票

当我撰写(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”,无论是法语还是英语都会积极回答。

© www.soinside.com 2019 - 2024. All rights reserved.