2014-07-19 3 views
1

Я воссоздаю медиаплеер каждого трека с выпуском и новым. Но как воссоздать визуализатор? Когда я вызываю выпуск и создаю новый визуализатор, у меня есть новый визуализатор потока, потому что старый поток не завершается автоматически. Если я не воссоздаю визуализатор, тогда у него неправильный AudioSessionId. Как использовать визуализатор ??? С медиаплеером, если медиаплеер действительно воссоздает каждый трек?Как установить AudioSessionId для визуализатора?

Некоторый код для примера (из моего большого приложения):

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: I'am переписывают визуализатор для финализации вызова, но это мне не помогло:

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; 
     } 
     } 

И у меня есть многие визуализаторы: my problem

ответ

0

решил эту проблему. Когда я устанавливаю mVisualizer.setEnabled (false); до визуализации визуализатора завершается автоматически:

public void release() 
    { 
    if (mVisualizer!=null) { 
    mVisualizer.setEnabled(false); 
    mVisualizer.release(); 
    mVisualizer=null; 
    } 
    } 
Смежные вопросы