ユーザーが webaudio シンセサイザーを進化させることができる web アプリを構築しています ( https://gensynth.ou.edu/#/evolve )。ただし、Chrome では、更新を数回クリックmutation amount
して進化中に再生すると、アプリが予期せずクラッシュします (タブには「aw snap」クラッシュ画面が表示されるだけです)。
シンセサイザーがロードされると、サイレント ゲイン ノードに接続された scriptProcessor とアナライザー ノードを介して再生されるため、最初のスペクトログラムをレンダリングできます (最初はこれにオフライン コンテキストを使用しようとしましたが、ひどくブレーキがかかるだけです)。次に、ユーザーがインストゥルメントをクリックして再生すると、スクリプト/アナライザー ノードの別のセットを介して再生されます。以降の再生ごとに、オシレーターとフィルターが再生成され、同じスクリプト/アナライザー ノードのセットに接続されます。
古いスクリプト ノードがガベージ コレクションを取得しようとすると、クラッシュするように見えます。これは、ノードへの参照を保持しようとし、そのonaudioprocess
関数を null に設定しないと発生する頻度が低くなるためです (これは実際にメモリに大きな打撃を与えます)。これを行うためのより良い、またはより標準的な方法はありますか?
ほとんどの場合、すべてがまとめられたときにのみ問題が発生するため、この投稿にどのコードを入れるかは完全にはわかりません. スクリプト/アナライザー ノードを利用するメイン ウィジェットはこちらです。
Firefox では問題なく動作します。他に役立つ情報があれば教えてください。
編集:このページのビジュアライザー コードのみを分離すると、new x30
ボタンを数回クリックすることで (頻度は低くなりますが) クラッシュする可能性があります。