Огонь речи синтез событий для отдельных слов - PullRequest
0 голосов
/ 30 октября 2018

Я возился с API SpeechSynthesisUtterance в JavaScript и пытался сегментировать каждое устное слово интерпретатором по-разному сработала анонимная функция.

Скажите, что через 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);

Но это медленно выдает "один ...... два ...... три" - хотя эта установка была бы идеальной, потому что я мог бы подключить стрельбу onstart или onend события, найденные в документации.

1 Ответ

0 голосов
/ 30 октября 2018

Звучит так, как будто вы хотите использовать событие 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]);
...