JS语音合成问题在iOS上

我最近实现了一个基于Google TTS URL的基本Web应用程序,可以在前端生成清晰的MP3文件供播放。

这已经受到额外的安全检查,这意味着我不得不更新代码库来使用替代方法。

一个这样的select是javascript的语音合成API,即SpeechSynthesisUtterance()和window.speechSynthesis.speak('…')。 这在我的台式机和笔记本电脑上运行得非常好,但只要我在iOS设备上使用它,audio的速度就会显着加快。

任何人都可以build议我能做些什么来解决这个问题?

见下面的例子代码:

var msg = new SpeechSynthesisUtterance(); msg.text = item.title; msg.voice = "Google UK English Male"; msg.rate = 0.7; msg.onend = function(){ console.log('message has ended'); $('.word-img').removeClass('img-isplaying'); }; msg.onerror = function(){ console.log('ERROR WITH SPEECH API'); $('.word-img').removeClass('img-isplaying'); }; window.speechSynthesis.speak(msg); 

IOS不允许以编程方式使用新的SpeechSynthesis-Api。 用户必须明确地触发该动作。 我可以理解这个决定。 但我不明白,为什么Api不能在webapps中工作,就像播放audio文件。 这不是在IOS的默认Safari浏览器,但它的webapps工作。

这是一个小窍门:

 <a id="trigger_me" onclick="speech_text()"></a> <script> function speech_text() { var msg = new SpeechSynthesisUtterance(); /* ... */ } /* and now you must trigger the event for #trigger_me */ $('#trigger_me').trigger('click'); </script> 

这只适用于本地DOM元素。 如果你添加一个新的标签编程像dom …

 $('body').append('<a id="trigger_me" onclick="speech_text()"></a>'); 

…该function不会被触发。 似乎IOS-Safari在domload之后只注册一次特殊内部函数的事件。

Interesting Posts