Web Speech API 中的 SpeechSynthesis.speak 在 Google Chrome 中总是在几秒钟后停止。

28
在Web Speech API中使用speak函数时,在Chrome浏览器中,播放会在几秒钟后突然停止,停在所给文本的中途,看起来是在随机位置停止(未到达结尾)。 这只在Chrome浏览器中发生(在Firefox中工作良好),我已在两台不同的计算机/系统上进行了测试。
请查看此jsfiddle以查看/听取: https://jsfiddle.net/fv9ochpq/ 您可以看到SpeechSynthesis对象的.speaking标志在停止讲话后保持开启(true)状态。
我没有看到任何关于传递给utterance的文本的文档限制。 这是一个Google Chrome的bug吗? 顺便说一句,我自2014年以来就知道了这个问题-当我试图为我制作的浏览器扩展程序添加语音功能时(当时是可用于Chrome扩展程序的TTS API-同样的问题也发生在那里),但最终由于这个明显的错误而没有这样做。 现在我想克服这个问题-如果这是一个bug,我将感激任何人将我引导到报告它的最佳地方。
编辑:似乎在约15秒后会停止。 每14秒运行.resume()的间隔似乎可以“修复”此问题。 请参见:https://jsfiddle.net/fv9ochpq/1/ 但这是一个hack。
2019年8月更新:自2018年12月以来,Chrome不允许在没有用户交互的情况下触发语音,这是一个更新后的jsfiddle,增加了一个按钮,并将实际的speak调用移动到其onclick中: https://jsfiddle.net/vcmxkwd3/ BUG仍在发生!

嗨,我在这里找到了一个解决方法,并且对我有效。https://stackoverflow.com/questions/57667357/speech-synthesis-problem-with-long-texts-pause-mid-speaking - Márcio Rossato
@Márcio - 你是指我在问题的编辑部分指定的解决方法吗? :) 我简直不敢相信已经过去三年多了,他们仍然没有修复这个问题? - Yuval A.
2
我有Chrome的最新版本(2020年6月),仍然只保持15秒。很抱歉,我没有看到编辑链接。 - Márcio Rossato
似乎在15秒后仍然会出现问题,我在自己的项目中测试了一下,结果也是一样的。 - LTFoReal
1个回答

3
您问在哪里报告这个问题。对于程序员来说,我认为这个论坛是最好的地方。实际上,在Chrome语音合成与更长的文本上已经进行了相当多的讨论。但是我认为很多讨论错误地将重点放在SpeechSynthesis允许的单词数量上,而不是像您这样关注持续时间。事实上,您的解决方案似乎是最实用的。

Google有一个错误报告设施,这个问题已被报告为speechSynthesis fails for long text without warning and blocks the API。目前共有3个报告,给它3颗“星”。我们可以通过向这个Chromium Bug添加报告来引起注意。 (我已经添加了一个)。

这个 Bug 的当前状态是“未分类”,同时还有几个与 Chrome 语音合成相关的其他报告问题也很有意思。

我刚刚使用 Chrome 63.0.3239.132 访问了我的第一个链接,令人惊讶的是它将所有内容都朗读完毕。因此他们可能已经在最新版本的 Chrome 中修复了这个问题! - Yuval A.
@YuvalA,你的第一个fiddle是用英语编写的。这种语言是否已经在你的电脑上安装了?如果是,请使用未安装的语言测试fiddle(在Windows下,我认为这意味着任何与你使用Windows的语言不同的语言)。你需要添加代码到fiddle中来选择外语,例如:synth.cancel();u.lang = 'fr';synth.speak(u);。我发现即使使用上述代码修改,在你使用的Chrome版本中,语音仍然会中断。 - CODE-REaD
你是对的。我刚用法语和法语文本测试了一下,它在几秒钟后就停止工作了 :(。 - Yuval A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接