Огонь речи синтез событий для отдельных слов

1

Я работаю с 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 найденные в документации.

  • 0
    for example being spoken at the same time я считаю невозможным из-за браузера - например. даже из разных вкладок вызов speak приведет к тому, что последняя запущена будет ждать окончания первой, даже если первая находится на совершенно отдельной вкладке. Я думаю, что он никогда не может говорить сам за себя (ну, по крайней мере, в Chrome)
Теги:
speech-synthesis

1 ответ

1
Лучший ответ

Похоже, вы хотите использовать событие 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]);
  • 0
    В настоящее время я работаю над пытаюсь осуществить это, но имеющие проблемы при получении e , чтобы дать мне точное слово он работает в настоящее время.
  • 0
    Я только что обновил способ сделать это, может быть полезно?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню