iOS 9 で WebAudio 使うと音が割れる?
phi-jp opened this issue · 6 comments
phi-jp commented
phina.js の問題か, OS の問題かを深掘りする.
simiraaaa commented
割るというのは具体的に
音が低く再生速度が遅くなる(結果として割れているように聞こえる)
iOS9.2.1で確認
イヤホンをさしながらだと現象未発生
AudioContextを生成し、WebAudioの再生後、AudioContextの破棄後にWebAudio以外の音を再生せずにAudioContextを生成しWebAudioで音を再生すると現象が発生します
phina.jsに関係なくわれる
minimo commented
simiraaaさんのiPhoneは他のアプリ等で音を鳴らすと現象が出ないとの事でしたが、自分の環境では音を鳴らした後でも現象が出ております。
イヤホンに関しては同様です。
色々試しましたが、ロード中にさすと音が出なくなったり、ロード中にイヤホン抜くと音の再生速度が速まったりしてます。(こちらは出る時と出ない時がありますが)
一回音が出なくなると、他アプリで音を出さないとそのままです。
iOS9.2.1で確認しました。
simiraaaa commented
現象発生時の音サンプル
flickarrow_sound.zip
simiraaaa commented
Safariでの再現方法、Safariで一度WebAudioを再生してるページを開く。
Safari終了、再起動して再度開く
Safari上で2回めのAudioContext生成時に現象が解消される
simiraaaa commented
現象回避コード
var f = function(){
var s = Sound();
s.loadFromBuffer();
s.play()
Sound.context = new webkitAudioContext();
s.stop();
var s = Sound();
s.loadFromBuffer();
s.play();
s.stop();
app.domElement.removeEventListener('touchend', f);
};
app.domElement.addEventListener('touchend', f);
simiraaaa commented
スマートな実装
var f = function(e){
dummyPlay();
checkSampleRateBug();
dummyPlay();
app.domElement.removeEventListener('touchend',f);
};
function dummyPlay(){
var s = Sound();
s.loadFromBuffer();
s.play().stop();
}
function checkSampleRateBug(){
if(Sound.getAudioContext().sampleRate!==44100){
// 強制停止。戻り値がtrue かどうかで強制停止されたか判別してください
Sound.context.close();
Sound.context = new webkitAudioContext();
return true;
}
return false;
}
app.domElement.addEventListener('touchend',f);