web-dev-qa-db-ja.com

'AudioContext'の構築に失敗しました:ハードウェアコンテキストの数が最大に達しました

作成後にAudioContextを削除する方法はありますか?

_var analyzers = [];
var contexts = [];

try {
   for(var i = 0; i<20; i++) {
      contexts[i] = new AudioContext();
      analyzers[i] = contexts[i].createAnalyser();
   }
}catch(e) {
   console.log(e);
   // too many contexts created -- how do I remove them?
}
_

これを試しましたが、事後に新しいコンテキストを作成できません:analyzers.forEach(function(analyzer){analyzer.disconnect(analyzer.context.destination)})

Ubuntu Linux14.04でChrome 36を使用しています。

19
Ian Hunter

実際には、ページにAudioContextを1つだけ含める必要があります。

ドキュメントから:「ほとんどのユースケースでは、ドキュメントごとに1つのAudioContextのみが使用されます。」

私はあなたが今までに必要 1つ以上になる理由を本当に考えることができません。複数のコンテキストを作成する原因となった特定の問題が発生しましたか?

18
Kevin Ennis

AudioContext.close()はコンテキストのハードウェアを解放しますが、それがchromeおよびfirefoxの最近のバージョンでのみ使用可能であることを確認してください。IEどうやら。ドキュメントを確認してください: https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/close

30
Julian

それを変数に参照します。
var myAudioCtx = new AudioContext();
次に、電話して破壊する
myAudioCtx.close();
それでおしまい。

6
Omar Attia

1つのページに5つ以上が埋め込まれるとすぐに、Chrome(Firefoxではない)で機能するメディアプレーヤーウィジェットに取り組んでいました。

単一のAudioContextを作成してグローバルに保存し、各インスタンスで共有AudioContextを使用できることを発見しました。動作は同じように見えます。複数のバッファと複数の宛先を接続すると、オーディオがすべてミックスされます。

タイミングに使用する場合はさらに手間がかかる可能性がありますが、JSコードを使用してオンザフライで生成された1つ以上のオーディオストリームを再生する場合は、単一のAudioContextを共有すると問題なく機能します。

0
Malvineous