2

У меня есть массив слов, которые я хотел бы сказать вслух, используя Web Speech API.Говорящие слова в массиве

Слова один, два, три, четыре, пять.

Говоря слова на Chrome, сценарий ниже говорит первое слово, а затем повторяет последнее слово, пока итерация не будет завершена, выход речи:

один, пять, пять, пять, пять.

В Firefox, сценарий говорит первое слово, а затем останавливается, выходной сигнал речи:

один.

Я зарегистрировал вещи на консоли, пытаясь понять, что происходит, это результат обоих браузеров.

word: one 
message: one 
word: two 
message: two 
word: three 
message: three 
word: four 
message: four 
word: five 
message: five 

Выход на консоль - это желаемый речевой выход, поэтому я не уверен, что именно происходит.

var msg = new SpeechSynthesisUtterance(); 
 
var words = ['one', 'two', 'three', 'four', 'five']; 
 

 
for (var i = 0; i < words.length; i++) { 
 
    msg.text = words[i]; 
 

 
    console.log('word: ' + words[i]); 
 
    console.log('message: ' + msg.text); 
 

 
    window.speechSynthesis.speak(msg); 
 
}

Что может быть причиной этого и как я могу идти о коррекции его?

+0

любые ошибки в консоли? – ochi

+0

@ochi Нет ошибок в консоли. – mezmi

ответ

4

Каждый раз вам нужно использовать новый экземпляр SpeechSynthesisUtterance.

var words = ['one', 'two', 'three', 'four', 'five']; 

for (var i = 0; i < words.length; i++) { 
    var msg = new SpeechSynthesisUtterance(); 
    msg.text = words[i]; 

    console.log('word: ' + words[i]); 
    console.log('message: ' + msg.text); 

    window.speechSynthesis.speak(msg); 
} 

Речь не играл в нулевой момент времени, и кажется, что последующие SpeechSynthesisUtterance экземпляры помещаются в очереди, пока предыдущая речь не закончил играть. Вы повторно используете один и тот же экземпляр повторно, изменяя значения после того, как они были поставлены в очередь speak(...), но прежде чем они выскочили из очереди и прочитали. Первое высказывание («одно») воспроизводится правильно, потому что в очереди нет ничего, чтобы блокировать его (он читается немедленно), но остальное нужно ждать и в конечном итоге изменить до того, как его прочитают.