gpt4 book ai didi

javascript - WebSpeech 语音合成 : Pausing utterance1, 播放另一个话语 2,然后恢复话语 1 - 可能吗?

转载 作者:行者123 更新时间:2023-11-30 16:12:05 26 4
gpt4 key购买 nike

我正在使用 WebSpeech 的 speechSynthesis 模块让网络应用程序说话。但是,您似乎只能将话语添加到队列中,然后对整个队列进行 pause()、resume() 和 cancel()。

我有一种情况,我想有两个话语:

utterance1 = new SpeechSynthesisUtterance(text1);
utterance2 = new SpeechSynthesisUtterance(text2);

我想播放 utterance1,然后在中间暂停,播放 utterance2,然后继续播放 utterance1。在代码中,它看起来像这样:

speechSynthesis.speak(utterance1);
// ... after a while
speechSyntehsis.pause(utterance1);
speechSynthesis.speak(utterance2);
// ... after a long while
speechSynthesis.resume(utterance1);

不幸的是,speechSynthesis 的方法 pause()、resume() 和 cancel() 不采用任何参数,而是作用于整个语音发声队列。有什么办法可以实现这种行为吗?

如果我可以有多个 speechSynthesis 对象,那么我可以为每个话语创建一个,但我相信我只能有一个。

如果我可以跟踪话语“被说到”在字符串中的哪个位置,那么我可以取消它,然后用文本的其余部分创建一个新的话语,但我不知道这是否可能。

有什么建议吗?

最佳答案

我已经在我的图书馆的 speechSynthesis 中工作了几个月 Artyom.js ,并且根据文档(以及我所做的所有测试)暂停单个合成实例并重新更新另一个是不可能的,因为所有实例都与 window.speechSynthesis 相关(如果有一天 API 发生变化,那将是 speechSynthesis 的又一大进步)。当你调用speechSynthesis“实例”的pause方法时,它会申请所有队列,没有其他办法。

根据documentation :

// the only solution would be if the speechSynthesis official API had a constructor like
// and a real NEW instance be created
// var synthRealInstance = new speechSynthesis();
// but till the date ... nope :(

var synthA = window.speechSynthesis;
var synthB = window.speechSynthesis;

var utterance1 = new SpeechSynthesisUtterance('How about we say this now? This is quite a long sentence to say.');
var utterance2 = new SpeechSynthesisUtterance('We should say another sentence too, just to be on the safe side.');

synthA.speak(utterance1);
synthB.speak(utterance2);

synthA.pause();
// or synthB will anyway stop the synthesis of the queue

话语 (onmark) 上有一个属性,但是没有很好的记录并且可能不会工作,因为这个 api 仍处于实验阶段。

The mark event is fired when a ‘mark’ tag is reached in a Speech Synthesis Markup Language (SSML) file. Just know that it’s possible to pass your speech data to an utterance using an XML-based SSML document. The main advantage of this being that it makes it easier to manage speech content when building applications that have large amount of text that need to be synthesised.

Read more about here .

关于javascript - WebSpeech 语音合成 : Pausing utterance1, 播放另一个话语 2,然后恢复话语 1 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091383/

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