Я использую API синтеза речи в Google Chrome v34.0.1847.131. API реализован в Chrome начиная с версии 33.
Преобразование текста в речь работает по большей части, за исключением случаев, когда обратный вызов назначается для onend
. Например, следующий код:
var message = window.SpeechSynthesisUtterance("Hello world!");
message.onend = function(event) {
console.log('Finished in ' + event.elapsedTime + ' seconds.');
};
window.speechSynthesis.speak(message);
иногда вызывает onend
, а иногда не называет его. Кажется, что время полностью отключено. Когда он вызывается, напечатанный elapsedTime
всегда является временем некоторой эпохи, например 1399237888
.
message
, он будет работать нормально. : D jsfiddle.net/QYw6b - person Muhammad Umer   schedule 12.05.2014event.elapsedTime
все еще койка, но кажется, чтоonend
каждый раз стреляет. - person huu   schedule 12.05.2014setTimeout(function(){speechSynthesis.speak(u);},1);
тоже работает, и его невозможно отличить от простого называть его прямым. Кажется, что API любит жить только внутри обратного вызова. Хотелось бы получить больше информации о том, почему мы наблюдаем такое поведение, но, вероятно, только гуглеры знают наверняка. Если хотите, вы можете написать ответ на этот вопрос, используя предоставленную вами информацию, и я отдаю ей должное :) - person huu   schedule 12.05.2014