1

ユーザーが webaudio シンセサイザーを進化させることができる web アプリを構築しています ( https://gensynth.ou.edu/#/evolve )。ただし、Chrome では、更新を数回クリックmutation amountして進化中に再生すると、アプリが予期せずクラッシュします (タブには「aw snap」クラッシュ画面が表示されるだけです)。

シンセサイザーがロードされると、サイレント ゲイン ノードに接続された scriptProcessor とアナライザー ノードを介して再生されるため、最初のスペクトログラムをレンダリングできます (最初はこれにオフライン コンテキストを使用しようとしましたが、ひどくブレーキがかかるだけです)。次に、ユーザーがインストゥルメントをクリックして再生すると、スクリプト/アナライザー ノードの別のセットを介して再生されます。以降の再生ごとに、オシレーターとフィルターが再生成され、同じスクリプト/アナライザー ノードのセットに接続されます。

古いスクリプト ノードがガベージ コレクションを取得しようとすると、クラッシュするように見えます。これは、ノードへの参照を保持しようとし、そのonaudioprocess関数を null に設定しないと発生する頻度が低くなるためです (これは実際にメモリに大きな打撃を与えます)。これを行うためのより良い、またはより標準的な方法はありますか?

ほとんどの場合、すべてがまとめられたときにのみ問題が発生するため、この投稿にどのコードを入れるかは完全にはわかりません. スクリプト/アナライザー ノードを利用するメイン ウィジェットはこちらです。

Firefox では問題なく動作します。他に役立つ情報があれば教えてください。

編集:このページのビジュアライザー コードのみを分離すると、new x30ボタンを数回クリックすることで (頻度は低くなりますが) クラッシュする可能性があります。

4

1 に答える 1

0

Chrome 40 にアップデートした後、問題が発生することはありませんでした。メモリの破損または修正された webaudio のバグのいずれかが原因であると想定しています ( http://googlechromereleases.blogspot.com/2015/01/stable-update.html )

于 2015-01-30T21:17:59.403 に答える