3

Web Speech APIを使用して声に出して言いたい言葉がたくさんあります。

単語は、1、2、3、4、5です。

Chrome で言葉を話すとき、以下のスクリプトは最初の言葉を話し、反復が完了するまで最後の言葉を繰り返します。音声出力は次のようになります。

1、5、5、5、5 .

Firefox では、スクリプトは最初の単語を読み上げてから停止します。音声出力は次のようになります。

1つ

何が起こっているのかを把握するためにコンソールにログを記録しました。これは両方のブラウザからの結果です。

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);
}

何が原因で、どうすれば修正できますか?

4

1 に答える 1

5

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(...)、キューから取り出されて読み取られる前に値を変更しています。最初の発話 ("one") は、それをブロックするキューに他に何もないため (すぐに読み取られる) 正しく再生されますが、残りは待機する必要があり、読み取られる前に変更されます。

于 2016-03-15T17:39:01.803 に答える