openGL オーディオ ビジュアライザーが音楽に遅れをとっているという問題があります。最近、マルチスレッドのアプローチに変更しました。Samsung S3 ではすべてがうまく機能しますが、HTC Evo ではオーディオ ビジュアライザーが音楽に遅れをとっています。
オーディオ入力から視覚化までのパイプラインの 4 つのスレッド (AudioIn -> AudioProc -> UI -> openGL)。問題はopenGLにあるのではないかと思いましたが、requestRender()メソッドに新しいメッセージを追加する前に、メッセージキューをクリアし始めました。役に立ちませんでした。
問題は AudioIn と AudioProc の間にあると思います。つまり、AudioProc に時間がかかりすぎて que が構築されているということです。GC_CONCURRENT ~43ms の Logcat を継続的に取得しています。これは 60Hz で約 2 または 3 フレームです。DDMS の割り当てトラッカーは、AudioProc スレッドで多くの割り当てを提案します。そこで、割り当てを削除し、DSP クラスのプライベート float[] オブジェクトに置き換えました。
しかし、その後、割り当てに「java Reflect array」への呼び出しが表示されるようになり、GC_CONCURRENT 呼び出しが少し長くなりました。UI スレッドで DSP クラス ref オブジェクトを宣言し、それを AudioProc スレッドで使用していることが原因ではないかと考えたので、AudioProc スレッドで割り当て mDSP を呼び出すようにコードを変更しましたが、logcat に "JIT unchain all" 呼び出しを AudioProc スレッドに実行し、GC_CONCURRENT に 700+ms の時間を費やします。
明らかに、私は何か基本的なことを見逃しています。推測してください。コードを投稿できます。