diff options
author | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-02 17:10:51 -0800 |
---|---|---|
committer | Felix Palmer <felix.palmer@metaswitch.com> | 2011-12-02 17:10:51 -0800 |
commit | 6fa6928b1e07f0004b05a5aed1634b0e43096054 (patch) | |
tree | 773866a303b8ba641bed83984c02b63377b4ffdd /src/com/pheelicks/visualizer/BarGraphRenderer.java | |
parent | 348bb37f8e8fcb902c9a2f1dd59fd5c8ee3cae4d (diff) | |
download | android_external_android-visualizer-6fa6928b1e07f0004b05a5aed1634b0e43096054.tar.gz android_external_android-visualizer-6fa6928b1e07f0004b05a5aed1634b0e43096054.tar.bz2 android_external_android-visualizer-6fa6928b1e07f0004b05a5aed1634b0e43096054.zip |
Recfactor FFT rendering into separate class
Diffstat (limited to 'src/com/pheelicks/visualizer/BarGraphRenderer.java')
-rw-r--r-- | src/com/pheelicks/visualizer/BarGraphRenderer.java | 62 |
1 files changed, 62 insertions, 0 deletions
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); + } +} |