package com.konka.music.player; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnSeekCompleteListener; import android.media.audiofx.Visualizer; import android.media.audiofx.Visualizer.OnDataCaptureListener; public class MusicPlayEngineImpl extends AbstractMediaPlayEngine { private final String TAG = MusicPlayEngineImpl.class.getSimpleName(); private OnBufferingUpdateListener mBufferingUpdateListener; private OnSeekCompleteListener mSeekCompleteListener; private OnDataCaptureListener mDataCaptureListener; private Visualizer mVisualizer; public MusicPlayEngineImpl() { super(); } public void setOnBuffUpdateListener(OnBufferingUpdateListener listener) { mBufferingUpdateListener = listener; } public void setOnSeekCompleteListener(OnSeekCompleteListener listener) { mSeekCompleteListener = listener; } public void setDataCaptureListener(OnDataCaptureListener listener) { mDataCaptureListener = listener; } public boolean reInitVisualizer(int sID) { releaseVisualizer(); final int maxCR = Visualizer.getMaxCaptureRate(); mVisualizer = new Visualizer(sID); mVisualizer.setCaptureSize(256); if (mDataCaptureListener != null) { mVisualizer.setDataCaptureListener(mDataCaptureListener, maxCR / 2, false, true); } return true; } public void releaseVisualizer() { if (mVisualizer != null) { mVisualizer.setEnabled(false); mVisualizer.release(); mVisualizer = null; } } public void enableVisualizer(boolean flag) { if (mVisualizer != null) { mVisualizer.setEnabled(flag); } } @Override public void play() { super.play(); enableVisualizer(true); } @Override public void pause() { super.pause(); enableVisualizer(false); } @Override public void stop() { super.stop(); enableVisualizer(false); } @Override public void exit() { super.exit(); releaseVisualizer(); } @Override protected boolean prepareSelf() { mMediaPlayer.reset(); // mMediaPlayer.getTrackInfo()[0].getFormat().g try { mMediaPlayer.setDataSource(mMusicInfo.getData()); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); if (mBufferingUpdateListener != null) { mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener); } mMediaPlayer.prepareAsync(); // log.e("mMediaPlayer.prepareAsync path = " + mMediaInfo.getRes()); mPlayState = PlayState.MPS_PARESYNC; performPlayListener(mPlayState); enableVisualizer(true); } catch (Exception e) { e.printStackTrace(); mPlayState = PlayState.MPS_INVALID; performPlayListener(mPlayState); return false; } return true; } @Override protected boolean prepareComplete(MediaPlayer mp) { // log.e("prepareComplete"); mPlayState = PlayState.MPS_PARECOMPLETE; if (mPlayerEngineListener != null) { mPlayerEngineListener.onTrackPrepareComplete(mMusicInfo); } // if(mOnCompletionListener!=null){ // mOnCompletionListener.onCompletion(mp); // } mMediaPlayer.start(); mPlayState = PlayState.MPS_PLAYING; performPlayListener(mPlayState); reInitVisualizer(mMediaPlayer.getAudioSessionId()); enableVisualizer(true); return true; } }