SafariでもDecodeAudioDataでPromise処理をしたい…
あるプロジェクトでdecodeAudioDataを用いてオーディオデータの変換を行っております。
このdecodeAudioDataをPromiseチェーンで繋ぎ、正常なデコードが完了したことを知りたいです。
現在、Chromeでは以下のようにやっています。
typescript
1 public static decodeAudioWithPromise(binary: any, callback: (buf: AudioBuffer) => void): Promise<void> { 2 return new Promise((resolve) => { 3 if (SoundManager.sharedContext) { 4 SoundManager.sharedContext 5 .decodeAudioData(binary) 6 .then(callback) 7 .then(() => { 8 resolve(); 9 }); 10 } 11 });
これを受けて、decodeAudioWithPromiseをthen()で繋ぐことで、デコードの完了が通知されます。
ですがSafariのdecodeAudioDataはPromiseを持たないので、上記のようにできません。
仕方なく、setTimeoutでわずかに遅延させて対応しています。
typescript
1 public static decodeAudio(binary: any, callback: (buf: AudioBuffer) => void): Promise<void> { 2 return new Promise((resolve) => { 3 if (SoundManager.sharedContext) { 4 SoundManager.sharedContext.decodeAudioData(binary, callback); 5 setTimeout(() => { 6 resolve(); 7 }, 500); 8 } 9 }); 10 }
Chromeと同様にSafariでもデコードの終了を待つことはできないでしょうか?
なにとぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー