The FFT data layout is different now, so update the visualization
accordingly.
b/3142852
diff --git a/src/com/android/musicvis/vis3/Visualization3RS.java b/src/com/android/musicvis/vis3/Visualization3RS.java
index f19ba36..0940add 100644
--- a/src/com/android/musicvis/vis3/Visualization3RS.java
+++ b/src/com/android/musicvis/vis3/Visualization3RS.java
@@ -79,8 +79,10 @@
int len = 0;
if (mAudioCapture != null) {
- mVizData = mAudioCapture.getFormattedData(64, 1);
- len = mVizData.length;
+ mVizData = mAudioCapture.getFormattedData(1, 1);
+ // the really high frequencies aren't that interesting for music,
+ // so just chop those off and use only the lower half of the spectrum
+ len = mVizData.length / 2;
}
if (len == 0) {
if (mWorldState.idle == 0) {
@@ -90,6 +92,8 @@
return;
}
+ len /= 2; // the bins are comprised of 2 values each
+
if (len > mAnalyzer.length) len = mAnalyzer.length;
if (mWorldState.idle != 0) {
@@ -97,8 +101,11 @@
mState.data(mWorldState);
}
- for (int i = 0; i < len; i++) {
- short newval = (short)(mVizData[i] * (i/16+2));
+ for (int i = 1; i < len - 1; i++) {
+ int val1 = mVizData[i * 2];
+ int val2 = mVizData[i * 2 + 1];
+ int val = val1 * val1 + val2 * val2;
+ short newval = (short)(val * (i/16+1));
short oldval = mAnalyzer[i];
if (newval >= oldval - 800) {
// use new high value
@@ -116,11 +123,11 @@
int srcidx = 0;
int cnt = 0;
for (int i = 0; i < width; i++) {
- float val = mAnalyzer[srcidx] / 50;
+ float val = mAnalyzer[srcidx] / 8;
if (val < 1f && val > -1f) val = 1;
mPointData[(i + skip) * 8 + 1] = val;
mPointData[(i + skip) * 8 + 5] = -val;
- cnt += mAnalyzer.length;
+ cnt += len;
if (cnt > width) {
srcidx++;
cnt -= width;