こんにちは。洋一郎です。
以下のような形でWebページと音声を一緒に返しているのですが、画面が表示された後、3、4秒後に音声が流れ始めます。
その現象を確認しているのがどのデバイスかにもよりますが、何もしなくても完璧に画面表示と音声がぴったり同時に再生される、という感じではなく、確かに少々のズレは常に発生している体感はありますね。3, 4 秒ほどのズレは今まで感じたことはないですが、起き得ないことではないかもしれません。
「音声再生 -> (3, 4 sec) -> 画面表示」だと対応は厳しいと思うのですが、今回のケースは「画面表示 -> (3, 4 sec) -> 音声再生」なので、対応できる(ズレを発生させない)可能性はあるかと思います。その方法は、onTtsMark() コールバック関数をうまく使う方法です。
以下のコードで onTtsMark() コールバック関数を登録しておくと、
assistantCanvas.ready({
onTtsMark(name) {
if (name === 'START' && <something>) {
document.querySelector('<something>').style.display = 'block';
}
}
});
Googleアシスタントが発話したタイミングで onTtsMark() コールバック関数が呼び出されます。その際に、name 引数には "START" が渡されます(発話終了時には "END" が来る)。この "START"が渡されたタイミングで画面表示を動的に行う(例: CSSの操作で div 要素の display を none -> block にする)ことで、音声の発話開始タイミングと画面の表示タイミングを合わせることが可能かと思います。
どうしてもズレが気になる場合は、上記のようにコールバック関数をうまく使って、画面の操作を発話タイミングに合わせて明示的に行ってあげればよいかと思います。試してみてください。
ご参考になれば幸いです。ではでは。
-Yoichiro
2019年7月4日木曜日 21時58分42秒 UTC+9 成谷允: