From 193f972d01658a89d1b1dd3e6f63fbea927e227a Mon Sep 17 00:00:00 2001 From: Recrown Date: Wed, 10 Jan 2018 23:53:51 -0600 Subject: [PATCH 1/2] secondary backed array to get previous windows. Not sure whether or not to use. --- .../graphics/ui/components/Visualizer.java | 51 +++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java b/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java index 1e7287c..643ae11 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java @@ -5,6 +5,7 @@ import static org.lwjgl.openal.AL10.*; import java.nio.ByteBuffer; import java.nio.ShortBuffer; +import org.lwjgl.BufferUtils; import org.lwjgl.openal.AL11; import com.badlogic.gdx.Gdx; @@ -25,6 +26,8 @@ public class Visualizer extends Widget implements Disposable { private boolean updatePositioning = true; private boolean mmSet; private MusicManager mm; + private ShortBuffer prevBuffer; + private ShortBuffer compareBuffer; private ShortBuffer buffer; private int sourceID; private float visRefreshRate = 1f/60f; @@ -81,18 +84,45 @@ public class Visualizer extends Widget implements Disposable { public void calcPCMData() { short chanVal; + int bufferPosOffset = 0; if (mm.playbackIndexUpdate() != readWindowIndex) { - updateBufferPosition(); + bufferPosOffset = updateBufferPosition(); + if (bufferPosOffset < 0) { + prevBuffer.position(prevBuffer.limit()+bufferPosOffset); + } } for (int sid = 0; sid < vis.getAudioPCM().length && sid < buffer.remaining(); sid++) { for (int channel = 0; channel < mm.getChannelCount(); channel ++) { - if (vis.getAudioPCM()[sid] < (chanVal = buffer.get())) { - vis.getAudioPCM()[sid] = chanVal; + if (prevBuffer.position() < prevBuffer.limit()) { + if (vis.getAudioPCM()[sid] < (chanVal = prevBuffer.get())) { + vis.getAudioPCM()[sid] = chanVal; + } + } else { + if (vis.getAudioPCM()[sid] < (chanVal = buffer.get())) { + vis.getAudioPCM()[sid] = chanVal; + } } } vis.getAudioPCM()[sid] /= Short.MAX_VALUE+1f; } + + + int originalPos = buffer.position(); + + + buffer.rewind(); + compareBuffer.rewind(); + if (compareBuffer.compareTo(buffer) != 0) { + prevBuffer.clear(); + prevBuffer.put(compareBuffer); + System.out.println("Buffer switched: " + prevBuffer.get(5) + "-" + buffer.get(5) + "-" + compareBuffer.get(5)); + } else { + } + compareBuffer.clear(); + compareBuffer.put(buffer); + compareBuffer.flip(); + buffer.position(originalPos); readWindowIndex++; } @@ -103,7 +133,6 @@ public class Visualizer extends Widget implements Disposable { buffer.position(pos); } catch (IllegalArgumentException iae) { buffer.position(0); - Gdx.app.error("BufferPosition", iae + " position was " + pos); } return pos; } @@ -116,6 +145,20 @@ public class Visualizer extends Widget implements Disposable { } catch (ReflectionException e) { e.printStackTrace(); } + int originalPos = buffer.position(); + + + prevBuffer = ShortBuffer.allocate(buffer.capacity()); + buffer.rewind(); + prevBuffer.put(buffer); + prevBuffer.flip(); + + compareBuffer = ShortBuffer.allocate(buffer.capacity()); + buffer.rewind(); + compareBuffer.put(buffer); + compareBuffer.flip(); + + buffer.position(originalPos); this.mm = mm; mmSet = false; } From 4d6cbaa652ad929ab7ab751ee0356090c6efb5bd Mon Sep 17 00:00:00 2001 From: Recrown Date: Thu, 11 Jan 2018 00:14:57 -0600 Subject: [PATCH 2/2] added comments --- .../graphics/ui/components/Visualizer.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java b/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java index 643ae11..780bf58 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/Visualizer.java @@ -5,7 +5,6 @@ import static org.lwjgl.openal.AL10.*; import java.nio.ByteBuffer; import java.nio.ShortBuffer; -import org.lwjgl.BufferUtils; import org.lwjgl.openal.AL11; import com.badlogic.gdx.Gdx; @@ -106,30 +105,36 @@ public class Visualizer extends Widget implements Disposable { } vis.getAudioPCM()[sid] /= Short.MAX_VALUE+1f; } + readWindowIndex++; + //Take down original buffer position so we don't need to sync again after... int originalPos = buffer.position(); - + //Begin comparison buffer.rewind(); - compareBuffer.rewind(); if (compareBuffer.compareTo(buffer) != 0) { - prevBuffer.clear(); - prevBuffer.put(compareBuffer); - System.out.println("Buffer switched: " + prevBuffer.get(5) + "-" + buffer.get(5) + "-" + compareBuffer.get(5)); - } else { + bufferChanged(); } + + //Begin copying current buffer to the comparison buffer compareBuffer.clear(); compareBuffer.put(buffer); compareBuffer.flip(); + + //Reset buffer to proper position. buffer.position(originalPos); - readWindowIndex++; + } + + private void bufferChanged() { + prevBuffer.clear(); + prevBuffer.put(compareBuffer); } private int updateBufferPosition() { int pos = (int) ((alGetSourcef(sourceID, AL11.AL_SAMPLE_OFFSET))-mm.getReadWindowSize()*mm.getChannelCount()); try { - readWindowIndex = mm.getPlaybackIndexPosition(); + readWindowIndex = mm.getPlaybackIndexPosition()-1; buffer.position(pos); } catch (IllegalArgumentException iae) { buffer.position(0);