diff options
-rw-r--r-- | src/com/pheelicks/app/MainActivity.java | 93 | ||||
-rw-r--r-- | src/com/pheelicks/visualizer/VisualizerView.java | 60 |
2 files changed, 97 insertions, 56 deletions
diff --git a/src/com/pheelicks/app/MainActivity.java b/src/com/pheelicks/app/MainActivity.java index 88b0032..66c2576 100644 --- a/src/com/pheelicks/app/MainActivity.java +++ b/src/com/pheelicks/app/MainActivity.java @@ -2,86 +2,73 @@ package com.pheelicks.app; import android.app.Activity; import android.media.MediaPlayer; -import android.media.audiofx.Visualizer; import android.os.Bundle; import android.view.View; import com.pheelicks.visualizer.R; import com.pheelicks.visualizer.VisualizerView; +/** + * Basic demo to show how to use VisualizerView + * + */ public class MainActivity extends Activity { private MediaPlayer mPlayer; - private Visualizer mVisualizer; + private VisualizerView mVisualizerView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); + init(); + } + private void init() + { mPlayer = MediaPlayer.create(this, R.raw.test); mPlayer.setLooping(true); mPlayer.start(); - linkVisualizer(mPlayer); + mVisualizerView = (VisualizerView) findViewById(R.id.visualizerView); + mVisualizerView.link(mPlayer); } - /** - * Links the visualizer to a player - * TODO Refactor this into visualizer - * @param player - */ - private void linkVisualizer(MediaPlayer player) + // Cleanup + private void cleanUp() { - - final VisualizerView visualizerView = (VisualizerView) findViewById(R.id.visualizerView); - - // Create the Visualizer object and attach it to our media player. - mVisualizer = new Visualizer(player.getAudioSessionId()); - mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); - - // Pass through Visualizer data to VisualizerView - Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() + if (mPlayer != null) { - @Override - public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, - int samplingRate) - { - visualizerView.updateVisualizer(bytes); - } - - @Override - public void onFftDataCapture(Visualizer visualizer, byte[] bytes, - int samplingRate) - { - visualizerView.updateVisualizerFFT(bytes); - } - }; - - mVisualizer.setDataCaptureListener(captureListener, - Visualizer.getMaxCaptureRate() / 2, true, true); + mVisualizerView.release(); + mPlayer.release(); + mPlayer = null; + } + } - // Enabled Visualizer and disable when we're done with the stream - mVisualizer.setEnabled(true); - mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() + @Override + protected void onResume() + { + super.onResume(); + if(mPlayer == null) { - @Override - public void onCompletion(MediaPlayer mediaPlayer) - { - mVisualizer.setEnabled(false); - } - }); + init(); + } + else + { + mPlayer.start(); + } } - // Cleanup @Override protected void onPause() { - if (isFinishing() && (mPlayer != null)) + if (isFinishing()) { - mVisualizer.release(); - mPlayer.release(); - mPlayer = null; + cleanUp(); + } + else + { + mPlayer.pause(); } super.onPause(); @@ -90,13 +77,7 @@ public class MainActivity extends Activity { @Override protected void onDestroy() { - if (mPlayer != null) - { - mPlayer.stop(); - mPlayer.release(); - mPlayer = null; - } - + cleanUp(); super.onDestroy(); } diff --git a/src/com/pheelicks/visualizer/VisualizerView.java b/src/com/pheelicks/visualizer/VisualizerView.java index 1ef50ff..8bdf30d 100644 --- a/src/com/pheelicks/visualizer/VisualizerView.java +++ b/src/com/pheelicks/visualizer/VisualizerView.java @@ -10,6 +10,7 @@ import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; +import android.media.MediaPlayer; import android.media.audiofx.Visualizer; import android.util.AttributeSet; import android.view.View; @@ -29,6 +30,7 @@ public class VisualizerView extends View { private byte[] mBytes; private byte[] mFFTBytes; private Rect mRect = new Rect(); + private Visualizer mVisualizer; private Paint mFlashPaint = new Paint(); private Paint mFadePaint = new Paint(); @@ -59,6 +61,64 @@ public class VisualizerView extends View { } /** + * Links the visualizer to a player + * @param player - MediaPlayer instance to link to + */ + public void link(MediaPlayer player) + { + if(player == null) + { + throw new NullPointerException("Cannot link to null MediaPlayer"); + } + + // Create the Visualizer object and attach it to our media player. + mVisualizer = new Visualizer(player.getAudioSessionId()); + mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]); + + // 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); + } + }; + + mVisualizer.setDataCaptureListener(captureListener, + Visualizer.getMaxCaptureRate() / 2, true, true); + + // Enabled Visualizer and disable when we're done with the stream + mVisualizer.setEnabled(true); + player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() + { + @Override + public void onCompletion(MediaPlayer mediaPlayer) + { + mVisualizer.setEnabled(false); + } + }); + } + + /** + * Call to release the resources used by VisualizerView. Like with the + * MediaPlayer it is good practice to call this method + */ + public void release() + { + mVisualizer.release(); + } + + + /** * Pass data to the visualizer. Typically this will be obtained from the * Android Visualizer.OnDataCaptureListener call back. See * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture } |