particles are now smarter

This commit is contained in:
Harrison Deng 2018-09-06 19:02:55 -05:00
parent 93939da1aa
commit 84b6a69dff
3 changed files with 28 additions and 22 deletions

View File

@ -21,9 +21,11 @@ public class DoubleHorizontalVisualizer implements Disposable {
private int binsPerBar; private int binsPerBar;
private float offset; private float offset;
private int boundaryThickness; private int boundaryThickness;
private boolean debug = false;
private boolean significantBeat; private boolean significantBeat;
private float dynamicAverageAmplitude; private float maxAverageAmplitude;
private byte significantFrames; private byte significantFrames;
private byte requiredSignificantFrames;
private float targetDelta; private float targetDelta;
private float significantThreshold = 0.5f; private float significantThreshold = 0.5f;
private float spacePercentage = 0.7f; private float spacePercentage = 0.7f;
@ -60,7 +62,8 @@ public class DoubleHorizontalVisualizer implements Disposable {
public void act(float delta) { public void act(float delta) {
if (pcm.hasAudioChanged()) { if (pcm.hasAudioChanged()) {
dynamicAverageAmplitude = 0; maxAverageAmplitude = 0;
averageAmplitude = 0;
significantBeat = false; significantBeat = false;
} }
float[] freqBins = pcm.getFrequencyBins(); float[] freqBins = pcm.getFrequencyBins();
@ -76,21 +79,24 @@ public class DoubleHorizontalVisualizer implements Disposable {
} }
averageAmplitude /= amplitudes.length; averageAmplitude /= amplitudes.length;
if (averageAmplitude < dynamicAverageAmplitude) { if (averageAmplitude > maxAverageAmplitude) {
dynamicAverageAmplitude -= 0.01f; maxAverageAmplitude = averageAmplitude;
} else {
dynamicAverageAmplitude = averageAmplitude;
} }
if (averageAmplitude > dynamicAverageAmplitude*significantThreshold && !significantBeat) { if (averageAmplitude > maxAverageAmplitude*significantThreshold && !significantBeat) {
if (dynamicAverageAmplitude > 0) { if (maxAverageAmplitude > 0) {
significantFrames++; significantFrames++;
if (significantFrames >= 16) { if (significantFrames >= requiredSignificantFrames) {
significantFrames = 0; significantFrames = 0;
significantBeat = true; significantBeat = true;
} }
} }
} else { } else {
if (significantBeat) {
significantBeat = false; significantBeat = false;
requiredSignificantFrames = 16;
} else {
requiredSignificantFrames = 4;
}
significantFrames = 0; significantFrames = 0;
} }
@ -145,8 +151,9 @@ public class DoubleHorizontalVisualizer implements Disposable {
shapeRenderer.rect(offset + (spaceBetweenBars+barWidth)*bar, y+height, barWidth, barHeights[bar]); shapeRenderer.rect(offset + (spaceBetweenBars+barWidth)*bar, y+height, barWidth, barHeights[bar]);
shapeRenderer.rect(offset + (spaceBetweenBars+barWidth)*bar, y, barWidth, -barHeights[barHeights.length - 1 - bar]); shapeRenderer.rect(offset + (spaceBetweenBars+barWidth)*bar, y, barWidth, -barHeights[barHeights.length - 1 - bar]);
} }
if (debug) {
shapeRenderer.setColor(Color.RED); shapeRenderer.setColor(Color.RED);
shapeRenderer.rect(0, dynamicAverageAmplitude+y, width, 1); shapeRenderer.rect(0, maxAverageAmplitude+y, width, 1);
if (significantBeat) { if (significantBeat) {
shapeRenderer.setColor(Color.GREEN); shapeRenderer.setColor(Color.GREEN);
} else { } else {
@ -154,7 +161,8 @@ public class DoubleHorizontalVisualizer implements Disposable {
} }
shapeRenderer.rect(0, averageAmplitude+y, width, 1); shapeRenderer.rect(0, averageAmplitude+y, width, 1);
shapeRenderer.setColor(Color.YELLOW); shapeRenderer.setColor(Color.YELLOW);
shapeRenderer.rect(0, dynamicAverageAmplitude*significantThreshold + y, width, 1); shapeRenderer.rect(0, maxAverageAmplitude*significantThreshold + y, width, 1);
}
shapeRenderer.end(); shapeRenderer.end();
Gdx.gl.glDisable(GL20.GL_BLEND); Gdx.gl.glDisable(GL20.GL_BLEND);
batch.begin(); batch.begin();

View File

@ -159,8 +159,6 @@ public class ScrollingText extends Widget {
coords.x = getX(); coords.x = getX();
coords.y = getY(); coords.y = getY();
getStage().stageToScreenCoordinates(coords);
clipBounds.setX(coords.x+1); clipBounds.setX(coords.x+1);
clipBounds.setY(coords.y - 0.5f*getHeight()); clipBounds.setY(coords.y - 0.5f*getHeight());

View File

@ -125,7 +125,7 @@ public class PCMObtainer implements Observer, PCMSystem {
@Override @Override
public void loadMusic() { public void loadMusic() {
Gdx.app.debug("PCMObtainer", "music set."); Gdx.app.debug("PCMObtainer", "music loaded.");
sourceID = -1; sourceID = -1;
channelCount = mc.getCurrentMusicHeader().getChannelCount(); channelCount = mc.getCurrentMusicHeader().getChannelCount();