From 6fa6928b1e07f0004b05a5aed1634b0e43096054 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 2 Dec 2011 17:10:51 -0800 Subject: Recfactor FFT rendering into separate class --- src/com/pheelicks/visualizer/BarGraphRenderer.java | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/com/pheelicks/visualizer/BarGraphRenderer.java (limited to 'src/com/pheelicks/visualizer/BarGraphRenderer.java') diff --git a/src/com/pheelicks/visualizer/BarGraphRenderer.java b/src/com/pheelicks/visualizer/BarGraphRenderer.java new file mode 100644 index 0000000..f1531e9 --- /dev/null +++ b/src/com/pheelicks/visualizer/BarGraphRenderer.java @@ -0,0 +1,62 @@ +package com.pheelicks.visualizer; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; + +public class BarGraphRenderer extends Renderer +{ + private int mDivisions; + private Paint mPaint; + private boolean mTop; + + /** + * Renders the FFT data as a series of lines, in histogram form + * @param canvas + * @param divisions - must be a power of 2. Controls how many lines to draw + * @param paint - Paint to draw lines with + * @param top - whether to draw the lines at the top of the canvas, or the bottom + */ + public BarGraphRenderer(Canvas canvas, + int divisions, + Paint paint, + boolean top) + { + super(canvas); + mDivisions = divisions; + mPaint = paint; + mTop = top; + } + + @Override + public void onRender(AudioData data, Rect rect) + { + // Do nothing, we only display FFT data + } + + @Override + public void onRender(FFTData data, Rect rect) + { + for (int i = 0; i < data.bytes.length / mDivisions; i++) { + mFFTPoints[i * 4] = i * 4 * mDivisions; + mFFTPoints[i * 4 + 2] = i * 4 * mDivisions; + byte rfk = data.bytes[mDivisions * i]; + byte ifk = data.bytes[mDivisions * i + 1]; + float magnitude = (rfk * rfk + ifk * ifk); + int dbValue = (int) (10 * Math.log10(magnitude)); + + if(mTop) + { + mFFTPoints[i * 4 + 1] = 0; + mFFTPoints[i * 4 + 3] = (dbValue * 2 - 10); + } + else + { + mFFTPoints[i * 4 + 1] = rect.height(); + mFFTPoints[i * 4 + 3] = rect.height() - (dbValue * 2 - 10); + } + } + + mCanvas.drawLines(mFFTPoints, mPaint); + } +} -- cgit v1.2.3