diff options
author | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-04 20:27:21 -0800 |
---|---|---|
committer | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-04 20:34:52 -0800 |
commit | 464d7441ca821166619e4750e205a06845b0fe67 (patch) | |
tree | 64bc0e082b22229694421f1ab2ca98d10c733444 /src/com/pheelicks/visualizer/VisualizerView.java | |
parent | 650eea7332c1181aba05f39b9b6826ec7ee3dc90 (diff) | |
download | android_external_android-visualizer-464d7441ca821166619e4750e205a06845b0fe67.tar.gz android_external_android-visualizer-464d7441ca821166619e4750e205a06845b0fe67.tar.bz2 android_external_android-visualizer-464d7441ca821166619e4750e205a06845b0fe67.zip |
Move renderers to separate package & clean up
Diffstat (limited to 'src/com/pheelicks/visualizer/VisualizerView.java')
-rw-r--r-- | src/com/pheelicks/visualizer/VisualizerView.java | 92 |
1 files changed, 42 insertions, 50 deletions
diff --git a/src/com/pheelicks/visualizer/VisualizerView.java b/src/com/pheelicks/visualizer/VisualizerView.java index 5a80797..1ef50ff 100644 --- a/src/com/pheelicks/visualizer/VisualizerView.java +++ b/src/com/pheelicks/visualizer/VisualizerView.java @@ -1,8 +1,5 @@ package com.pheelicks.visualizer; -// WARNING!!! This file has more magic numbers in it than you could shake a -// stick at - import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; @@ -14,29 +11,28 @@ import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.media.audiofx.Visualizer; -import android.os.SystemClock; import android.util.AttributeSet; import android.view.View; +import com.pheelicks.visualizer.renderer.BarGraphRenderer; +import com.pheelicks.visualizer.renderer.CircleRenderer; +import com.pheelicks.visualizer.renderer.LineRenderer; + /** * A class that draws visualizations of data received from a - * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture } + * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture } and + * {@link Visualizer.OnDataCaptureListener#onFftDataCapture } */ public class VisualizerView extends View { private static final String TAG = "VisualizerView"; private byte[] mBytes; private byte[] mFFTBytes; - private float[] mPoints; private Rect mRect = new Rect(); - private Paint mLinePaint = new Paint(); - private Paint mSpecialLinePaint = new Paint(); - private Paint mProgressLinePaint = new Paint(); private Paint mFlashPaint = new Paint(); private Paint mFadePaint = new Paint(); - // Usual BS of 3 constructors public VisualizerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); @@ -55,37 +51,43 @@ public class VisualizerView extends View { private void init() { mBytes = null; - - mProgressLinePaint.setStrokeWidth(4f); - mProgressLinePaint.setAntiAlias(true); - mProgressLinePaint.setColor(Color.argb(255, 22, 131, 255)); - + mFFTBytes = null; mFlashPaint.setColor(Color.argb(122, 255, 255, 255)); - mFadePaint.setColor(Color.argb(238, 255, 255, 255)); // Adjust alpha to change how quickly the image fades mFadePaint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY)); } + /** + * Pass data to the visualizer. Typically this will be obtained from the + * Android Visualizer.OnDataCaptureListener call back. See + * {@link Visualizer.OnDataCaptureListener#onWaveFormDataCapture } + * @param bytes + */ public void updateVisualizer(byte[] bytes) { mBytes = bytes; invalidate(); } + /** + * Pass FFT data to the visualizer. Typically this will be obtained from the + * Android Visualizer.OnDataCaptureListener call back. See + * {@link Visualizer.OnDataCaptureListener#onFftDataCapture } + * @param bytes + */ + public void updateVisualizerFFT(byte[] bytes) { + mFFTBytes = bytes; + invalidate(); + } + boolean mFlash = false; - long mFlashTime = 0; - long mFlashPeriod = 4000; + /** + * Call this to make the visualizer flash. Useful for flashing at the start + * of a song/loop etc... + */ public void flash() { mFlash = true; - long now = SystemClock.currentThreadTimeMillis(); - mFlashPeriod = now - mFlashTime; - mFlashTime = now; - invalidate(); - } - - public void updateVisualizerFFT(byte[] bytes) { - mFFTBytes = bytes; invalidate(); } @@ -101,17 +103,9 @@ public class VisualizerView extends View { protected void onDraw(Canvas canvas) { super.onDraw(canvas); - if (mBytes == null) { - return; - } - - if (mPoints == null || mPoints.length < mBytes.length * 4) { - mPoints = new float[mBytes.length * 4]; - } - + // Create canvas & renderers once we're ready to draw mRect.set(0, 0, getWidth(), getHeight()); - if(mCanvasBitmap == null) { mCanvasBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Config.ARGB_8888); @@ -119,6 +113,8 @@ public class VisualizerView extends View { if(mCanvas == null) { mCanvas = new Canvas(mCanvasBitmap); + + // Now that we have a Canvas, can create Renderers Paint paint = new Paint(); paint.setStrokeWidth(50f); paint.setAntiAlias(true); @@ -149,22 +145,19 @@ public class VisualizerView extends View { mLineRenderer = new LineRenderer(mCanvas, linePaint, lineFlashPaint, true); } - - - - AudioData audioData = new AudioData(mBytes); - mCircleRenderer.render(audioData, mRect); - mLineRenderer.render(audioData, mRect); - - // FFT time!!!! - if (mFFTBytes == null) { - return; + if (mBytes != null) { + // Render all audio renderers + AudioData audioData = new AudioData(mBytes); + mCircleRenderer.render(audioData, mRect); + mLineRenderer.render(audioData, mRect); } - FFTData fftData = new FFTData(mFFTBytes); - - mBarGraphRendererTop.render(fftData, mRect); - mBarGraphRendererBottom.render(fftData, mRect); + if (mFFTBytes != null) { + // Render all FFT renderers + FFTData fftData = new FFTData(mFFTBytes); + mBarGraphRendererTop.render(fftData, mRect); + mBarGraphRendererBottom.render(fftData, mRect); + } // Fade out old contents mCanvas.drawPaint(mFadePaint); @@ -177,5 +170,4 @@ public class VisualizerView extends View { canvas.drawBitmap(mCanvasBitmap, new Matrix(), null); } - }
\ No newline at end of file |