1

release と new で各トラックの mediaplayer を再作成します。しかし、ビジュアライザーをどのように再作成するのでしょうか? リリースを呼び出して新しいビジュアライザーを作成すると、古いスレッドが自動的にファイナライズされないため、新しいスレッド ビジュアライザーが作成されます。ビジュアライザーを再作成しないと、AudioSessionId が間違っています。ビジュアライザーの使い方??? mediaplayerが各トラックを再作成する場合、mediaplayerを使用しますか??

たとえば、いくつかのコード(私の大きなアプリから):

public class VisualizerView extends View {
  private static final String TAG = "VisualizerView";

  private byte[] mBytes;
  private byte[] mFFTBytes;
  private Rect mRect = new Rect();
  private static Visualizer mVisualizer;

  private static Set<Renderer> mRenderers;

  private Paint mFlashPaint = new Paint();
  private Paint mFadePaint = new Paint();

  public VisualizerView(Context context, AttributeSet attrs, int defStyle)
  {
    super(context, attrs);
    init();
  }


public void link(MediaPlayer player)
  {
    if(player == null)
    {
      throw new NullPointerException("Cannot link to null MediaPlayer");
    }
    // Pass through Visualizer data to VisualizerView
    Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener()
    {
      @Override
      public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes,
          int samplingRate)
      {
        updateVisualizer(bytes);
      }

      @Override
      public void onFftDataCapture(Visualizer visualizer, byte[] bytes,
          int samplingRate)
      {
        updateVisualizerFFT(bytes);
      }
    };
    // Create the Visualizer object and attach it to our media player.
    if (mVisualizer==null) {
    mVisualizer = new Visualizer(player.getAudioSessionId());
    mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
   mVisualizer.setDataCaptureListener(captureListener, Visualizer.getMaxCaptureRate() / 2, true, true);
   // Enabled Visualizer and disable when we're done with the stream
    mVisualizer.setEnabled(true);
    addBarGraphRenderers();
  } else {
   mVisualizer.setDataCaptureListener(captureListener,
   Visualizer.getMaxCaptureRate() , true, true);
   mVisualizer.setEnabled(true); 
  }}

Upd1: 呼び出しのファイナライズ用にビジュアライザーを書き直していますが、これは役に立ちません:

public class visualizer1 extends Visualizer {

    public visualizer1(int audioSession) throws UnsupportedOperationException,
            RuntimeException {
        super(audioSession);
    }
    @Override 
    public void finalize() {
            super.finalize();
    }
}

public void release() {
    if (mVisualizer!=null) {
        mVisualizer.release();
        mVisualizer.finalize();
        mVisualizer=null;
    }
}

そして、私は多くのビジュアライザーを持っています: 私の問題

4

1 に答える 1