为单个单词触发语音合成事件
Fire speech synthesis events for individual words
我一直在修改 JavaScript 中的 SpeechSynthesisUtterance
API 并尝试通过解释器转换为不同的匿名函数。
假设我通过 API 说出以下句子:
var message = new SpeechSynthesisUtterance('one two three');
window.speechSynthesis.speak(message);
它将输出,一二三,虽然速度还可以,但我希望能够附加一个函数,该函数会在每个单词的开头触发,所以:
* function is called with parameter "one" // starts speaking "one"
* function is called with parameter "two" // starts speaking "two"
* function is called with parameter "three" // starts speaking "three"
我尝试将它们分成三个不同的词,例如同时说出:
var message1 = new SpeechSynthesisUtterance('one');
var message2 = new SpeechSynthesisUtterance('two');
var message3 = new SpeechSynthesisUtterance('three');
window.speechSynthesis.speak(message1);
window.speechSynthesis.speak(message2);
window.speechSynthesis.speak(message3);
但这会慢慢输出 "one...... two...... three" - 尽管此设置是理想的,因为我可以附加找到的 onstart
或 onend
触发事件在文档中。
听起来您想使用 SpeechSynthesisUtterance.onboundary
事件:
var message = new SpeechSynthesisUtterance('one two three');
message.onboundary = (e => console.log(e));
window.speechSynthesis.speak(message);
该事件有一个 charIndex
属性 告诉您话语中边界的位置。由你从那个点往前读到下一个词边界来确定这个词:
console.log(e.target.text.substr(e.charIndex).match(/^.+?\b/)[0]);
我一直在修改 JavaScript 中的 SpeechSynthesisUtterance
API 并尝试通过解释器转换为不同的匿名函数。
假设我通过 API 说出以下句子:
var message = new SpeechSynthesisUtterance('one two three');
window.speechSynthesis.speak(message);
它将输出,一二三,虽然速度还可以,但我希望能够附加一个函数,该函数会在每个单词的开头触发,所以:
* function is called with parameter "one" // starts speaking "one"
* function is called with parameter "two" // starts speaking "two"
* function is called with parameter "three" // starts speaking "three"
我尝试将它们分成三个不同的词,例如同时说出:
var message1 = new SpeechSynthesisUtterance('one');
var message2 = new SpeechSynthesisUtterance('two');
var message3 = new SpeechSynthesisUtterance('three');
window.speechSynthesis.speak(message1);
window.speechSynthesis.speak(message2);
window.speechSynthesis.speak(message3);
但这会慢慢输出 "one...... two...... three" - 尽管此设置是理想的,因为我可以附加找到的 onstart
或 onend
触发事件在文档中。
听起来您想使用 SpeechSynthesisUtterance.onboundary
事件:
var message = new SpeechSynthesisUtterance('one two three');
message.onboundary = (e => console.log(e));
window.speechSynthesis.speak(message);
该事件有一个 charIndex
属性 告诉您话语中边界的位置。由你从那个点往前读到下一个词边界来确定这个词:
console.log(e.target.text.substr(e.charIndex).match(/^.+?\b/)[0]);