我最近实现了一个基本的 Web 应用程序,它依靠 Google 的 TTS URL 生成清晰的 MP3 文件以在前端播放。
此后,这需要接受额外的安全检查,这意味着我必须更新代码库才能使用替代方法。
其中一种替代方案是 javascript 的语音合成 API,即 SpeechSynthesisUtterance() 和 window.speechSynthesis.speak('...')。这在我的台式机和笔记本电脑上运行得非常好,但一旦我在 iOS 设备上使用它,音频的速率就会显着加快。
谁能建议我可以做什么来解决这个问题?
请参阅下面的示例代码:
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 不能在网络应用程序中工作,比如播放音频文件。这在 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>');
...该功能将不会被触发。看起来 IOS-Safari 在 domload 之后只注册一次特殊内部函数的事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)