smoothed out bar height changes, used locks to better remedy song transition bar height issue

This commit is contained in:
Harrison Deng 2017-10-07 01:01:29 -05:00
parent 087b709a02
commit 8cbefb1f0f
5 changed files with 38 additions and 8 deletions

View File

@ -70,7 +70,7 @@ public class BasicVisualizer extends VisualizerCore {
//Averaging bins together //Averaging bins together
for (int i = 0; i < barCount; i++) { for (int i = 0; i < barCount; i++) {
float barHeight = 2; float barHeight = 0;
for (int j = 0; j < binsPerBar; j++) { for (int j = 0; j < binsPerBar; j++) {
barHeight += Math.abs(audioPCM[j+i*binsPerBar]); barHeight += Math.abs(audioPCM[j+i*binsPerBar]);
} }
@ -92,7 +92,11 @@ public class BasicVisualizer extends VisualizerCore {
avg /= smoothRange*2; avg /= smoothRange*2;
barHeights[i] = avg; barHeights[i] = avg;
bars[i].setSize(barWidth, bars[i].getHeight() <= barHeights[i] ? barHeights[i] : bars[i].getHeight() - 1.1f*Gdx.graphics.getHeight()*delta); if (bars[i].getHeight() > barHeights[i]) {
bars[i].setSize(barWidth, bars[i].getHeight() - (20f*delta*(bars[i].getHeight()-barHeights[i])));
} else {
bars[i].setSize(barWidth, bars[i].getHeight() + (27f*delta*(barHeights[i] - bars[i].getHeight())));
}
} }
} }
@ -140,6 +144,9 @@ public class BasicVisualizer extends VisualizerCore {
for (int i = 0; i < bars.length; i++) { for (int i = 0; i < bars.length; i++) {
bars[i].setColor(color); bars[i].setColor(color);
} }
for (int i = 0; i < mirrors.size; i++) {
mirrors.get(i).setColor(color);
}
} }
public void setColor(float r, float g, float b, float a) { public void setColor(float r, float g, float b, float a) {

View File

@ -1,5 +1,6 @@
package zero1hd.rhythmbullet.audio.visualizer; package zero1hd.rhythmbullet.audio.visualizer;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.MathUtils;
@ -47,6 +48,12 @@ public class MirrorVisualizer {
} }
} }
public void setColor(Color color) {
for (int i = 0; i < bars.length; i++) {
bars[i].setColor(color);
}
}
public float getRotation() { public float getRotation() {
return rotation; return rotation;
} }

View File

@ -1,5 +1,7 @@
package zero1hd.rhythmbullet.audio.visualizer; package zero1hd.rhythmbullet.audio.visualizer;
import java.util.concurrent.locks.ReentrantLock;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Disposable;
@ -13,28 +15,39 @@ public class VisualizerCore implements Disposable {
protected float width, height; protected float width, height;
protected float xPos, yPos; protected float xPos, yPos;
protected int barCount; protected int barCount;
private boolean calc;
private ReentrantLock lock;
public VisualizerCore(int width, int height, int x, int y) { public VisualizerCore(int width, int height, int x, int y) {
this.height = height; this.height = height;
this.width = width; this.width = width;
this.xPos = x; this.xPos = x;
this.yPos = y; this.yPos = y;
lock = new ReentrantLock();
} }
public void calculate() { public void calculate() {
if (mm != null) { if (mm != null) {
mm.playbackIndexUpdate(); mm.playbackIndexUpdate();
while (mm.isPlaying() && mm.getPlaybackIndexPosition() > mm.getCurrentReadWindowIndex()) { while (calc && mm.isPlaying() && mm.getPlaybackIndexPosition() > mm.getCurrentReadWindowIndex()) {
lock.lock();
mm.readSamples(audioPCM); mm.readSamples(audioPCM);
fft.realForward(audioPCM); fft.realForward(audioPCM);
lock.unlock();
} }
} }
} }
public void setMM(MusicManager mm) { public void setMM(MusicManager mm) {
if (audioPCM == null || audioPCM.length != mm.getReadWindowSize()) {
calc = false;
lock.lock();
fft = new FloatFFT_1D(mm.getReadWindowSize());
audioPCM = new float[mm.getReadWindowSize()];
lock.unlock();
}
this.mm = mm; this.mm = mm;
fft = new FloatFFT_1D(mm.getReadWindowSize()); calc = true;
audioPCM = new float[mm.getReadWindowSize()];
} }
public void render(Batch batch, float parentAlpha) { public void render(Batch batch, float parentAlpha) {

View File

@ -42,6 +42,7 @@ public class TitleBarVisualizer extends Group implements Disposable {
pixmap.fill(); pixmap.fill();
bgTexture = new Texture(pixmap); bgTexture = new Texture(pixmap);
pixmap.dispose(); pixmap.dispose();
setColor(0.451f, 0, 0, 1f);
bg = new Image(bgTexture); bg = new Image(bgTexture);
bg.setSize(getWidth(), getHeight()); bg.setSize(getWidth(), getHeight());
@ -68,6 +69,8 @@ public class TitleBarVisualizer extends Group implements Disposable {
@Override @Override
public void setColor(Color color) { public void setColor(Color color) {
bg.setColor(getColor());
visual.setColor(getColor());
super.setColor(color); super.setColor(color);
} }

View File

@ -131,7 +131,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter {
@Override @Override
public void render(float delta) { public void render(float delta) {
Gdx.gl.glClearColor(0f, 0f, 0f, 1f); Gdx.gl.glClearColor(0.212f, 0.094f, 0f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(); stage.act();
stage.draw(); stage.draw();