課題
Web Audioで、音が鳴らなかったことを検知したい。
- ユーザー操作が行われていない時に起こる警告で鳴らない
- その他何らかの理由で鳴らない
この1個目ってキャッチする方法ないのかな?
解決
今回は再生する音声データが短かったので、ended
イベントが時間内に呼ばれたかどうかで判断した。実際に再生されていないのに、ended
が呼ばれることはない模様。
play(context: AudioContext, err?: () => void, success?: () => void) {
const audioBuffer = ; //任意の音声データ
const audioBufferDuration = ; //その秒数
const waitTime = (audioBufferDuration * 1000) + 500;
const errorFeedback = setTimeout(() => {
err?.();
}, waitTime);
const src = context.createBufferSource();
src.addEventListener('ended', (e) => {
clearTimeout(errorFeedback);
success?.();
});
src.buffer = audioBuffer;
src.connect(context.destination);
src.start();
// どこかでstop, disconnectすること
}