particles are now smarter
This commit is contained in:
parent
93939da1aa
commit
84b6a69dff
@ -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();
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user