テキスト読み上げサービス (TTS) を使用して、Yelp API から結果を読み取ります。タイミングの問題が発生しています:
- TTS 関数の呼び出しが速すぎると、音声が中断されます。
私のアイデアは、オーディオが再生されているかどうかを確認し、完了したら次のコマンドのみを赤くするセマフォを作成することでした。不運にも:
- オーディオが再生されなくなるまで待つと (audio.paused == true)、プログラムがハングアップし、while ループから抜け出せなくなります。
2番目の問題に遭遇せずに最初の問題を解決する方法について、誰かアイデアはありますか?
//check if command isn't already queued, and then add command to the queue
function voiceSynth (string, name) {
if(voiceQueue.indexOf(string)== -1){
voiceQueue.push(string)
voiceQueue.push(name) //used to keep track of the current item being read
}
//Iterate over items in the queue
while (voiceQueue.length > 1){
if (voiceBusy == false && audio.paused == true) {
voiceCall.call(undefined, voiceQueue.shift(),voiceQueue.shift())
}
}
}
//ajax call to the TTS service
function voiceCall (string, name) {
voiceBusy = true
console.log('synth called on ' + string)
$.ajax('read/?string=' + string + '&speed=' + speed, {
type: 'GET',
success: function(src) {
audio.setAttribute('src', src)
audio.play()
voiceBusy = false
voiceCursor = name
},
error: function(xhr, ajaxOptions, thrownError) {
console.log(xhr)
console.log(ajaxOptions)
console.log(thrownError)
}
})
}