gpt4 book ai didi

javascript - iOS 上的 JS 语音合成问题

转载 作者:可可西里 更新时间:2023-11-01 05:40:36 24 4
gpt4 key购买 nike

我最近实现了一个基本的网络应用程序,该应用程序依赖 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之后为特殊的内部函数注册一次事件。

关于javascript - iOS 上的 JS 语音合成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com