tuning with other songs
This commit is contained in:
parent
afd2d1aa41
commit
d65b94cd49
@ -47,7 +47,7 @@ public class AudioAnalyzer {
|
||||
|
||||
public volatile MiniSender sender;
|
||||
|
||||
private float avgBPS;
|
||||
private float avgSPB;
|
||||
|
||||
int PUID;
|
||||
boolean work;
|
||||
@ -64,17 +64,17 @@ public class AudioAnalyzer {
|
||||
int tasksDone = 0;
|
||||
int totalTasks = audioData.getSampleCount()/audioData.getReadWindowSize();
|
||||
|
||||
bassThresholdMultiplier = 2f;
|
||||
umThresholdMultiplier = 2f;
|
||||
bassThresholdMultiplier = 1.7f;
|
||||
umThresholdMultiplier = 1.5f;
|
||||
|
||||
bassBinBegin = 1;
|
||||
bassBinEnd = 20;
|
||||
bassBinEnd = 25;
|
||||
|
||||
UMBinBegin = 300;
|
||||
UMBinEnd = 450;
|
||||
UMBinEnd = 512;
|
||||
|
||||
bassThresholdCalcRange = thresholdRangeCalc(0.35f);
|
||||
UMThresholdCalcRange = thresholdRangeCalc(0.7f);
|
||||
bassThresholdCalcRange = thresholdRangeCalc(0.3f);
|
||||
UMThresholdCalcRange = thresholdRangeCalc(0.35f);
|
||||
|
||||
Gdx.app.debug("Read freq", String.valueOf(audioData.getFormat().getSampleRate()));
|
||||
Gdx.app.debug("Using following bin ranges", "\nBass freq begin: " + bassBinBegin + "\nBass freq end: " + bassBinEnd + "\nMain freq begin: " + UMBinBegin + "\nMain freq end: " + UMBinEnd);
|
||||
@ -110,13 +110,8 @@ public class AudioAnalyzer {
|
||||
//bass detection
|
||||
fluxVal = 0;
|
||||
for (int i = bassBinBegin; i < bassBinEnd && work; i++) {
|
||||
if (spectrum[i] >= 0) {
|
||||
fluxVal += ((spectrum[i] - lastSpectrum[i])) < 0
|
||||
? 0 : (spectrum[i] - lastSpectrum[i]);
|
||||
} else {
|
||||
fluxVal += ((spectrum[i] - lastSpectrum[i])) < 0
|
||||
? 0 : (spectrum[i] - lastSpectrum[i]);
|
||||
}
|
||||
}
|
||||
bassSpectralFlux.add(fluxVal);
|
||||
|
||||
@ -202,7 +197,7 @@ public class AudioAnalyzer {
|
||||
int lastID = 0;
|
||||
float bassBeats = 0;
|
||||
float umBeats = 0;
|
||||
avgBPS = -1f;
|
||||
avgSPB = -1f;
|
||||
for (int i = 0; i < umPrunned.size-1 && work; i++) {
|
||||
bassPeaks.add((bassPrunned.get(i) > bassPrunned.get(i+1) ? bassPrunned.get(i) : 0f));
|
||||
if (bassPeaks.get(i) > bassMaxValue) {
|
||||
@ -216,21 +211,21 @@ public class AudioAnalyzer {
|
||||
|
||||
//overlapping beats
|
||||
if (bassPeaks.get(i) != 0 && umPeaks.get(i) != 0) {
|
||||
overlappedPeaks.add(bassPeaks.get(i)+umPeaks.get(i)/2);
|
||||
overlappedPeaks.add((bassPeaks.get(i)+umPeaks.get(i))/2f);
|
||||
} else {
|
||||
overlappedPeaks.add(0);
|
||||
}
|
||||
|
||||
|
||||
if (avgBPS != -1) {
|
||||
if (avgSPB != -1) {
|
||||
if (bassPeaks.get(i) == 0) {
|
||||
avgBPS ++;
|
||||
avgSPB ++;
|
||||
} else {
|
||||
bassBeats ++;
|
||||
lastID = i;
|
||||
}
|
||||
} else if (bassPeaks.get(i) != 0) {
|
||||
avgBPS = 0;
|
||||
avgSPB = 0;
|
||||
}
|
||||
|
||||
if (bassPeaks.get(i) != 0) {
|
||||
@ -244,10 +239,10 @@ public class AudioAnalyzer {
|
||||
}
|
||||
|
||||
//then we minus one from the beats so it actually works out
|
||||
avgBPS -= umPrunned.size-lastID;
|
||||
avgBPS *= secondsPerWindow;
|
||||
avgBPS /= bassBeats;
|
||||
Gdx.app.debug("Audio Analyzer", "Avg BPS: " + avgBPS);
|
||||
avgSPB -= umPrunned.size-lastID;
|
||||
avgSPB *= secondsPerWindow;
|
||||
avgSPB /= bassBeats;
|
||||
Gdx.app.debug("Audio Analyzer", "Avg BPS: " + avgSPB);
|
||||
|
||||
bassAvg /= bassBeats;
|
||||
umBeats /= umBeats;
|
||||
@ -357,8 +352,8 @@ public class AudioAnalyzer {
|
||||
return audioData;
|
||||
}
|
||||
|
||||
public float getAvgBPS() {
|
||||
return avgBPS;
|
||||
public float getAvgSPB() {
|
||||
return avgSPB;
|
||||
}
|
||||
|
||||
public float getsecondsPerWindow() {
|
||||
|
@ -22,7 +22,8 @@ public class RhythmMapAlgorithm implements Runnable {
|
||||
|
||||
private float avgBass;
|
||||
private float avgUM;
|
||||
private float avgBPS;
|
||||
private float avgSPB;
|
||||
private float umMax, bassMax;
|
||||
|
||||
private float speedMod, healthMod;
|
||||
|
||||
@ -37,12 +38,14 @@ public class RhythmMapAlgorithm implements Runnable {
|
||||
overlappedPeaks = analyzer.getOverlappedPeaks();
|
||||
map = new GamePlayMap(analyzer.getAudioData());
|
||||
rand = new MersenneTwister(analyzer.getPUID());
|
||||
avgBPS = analyzer.getAvgBPS();
|
||||
avgSPB = analyzer.getAvgSPB();
|
||||
windowPerSecond = 1/analyzer.getsecondsPerWindow();
|
||||
|
||||
this.speedMod = speedMod;
|
||||
this.healthMod = healthMod;
|
||||
|
||||
umMax = analyzer.getUMMaxValue();
|
||||
bassMax = analyzer.getBassMaxValue();
|
||||
avgBass = analyzer.getBassAvg();
|
||||
avgUM = analyzer.getUmAvg();
|
||||
}
|
||||
@ -53,22 +56,22 @@ public class RhythmMapAlgorithm implements Runnable {
|
||||
for (int index = 0; index < bassPeaks.size; index++) {
|
||||
if (bassPeaks.get(index) != 0 || UMPeaks.get(index) != 0) {
|
||||
int warningTime = (int) ((3/speedMod)*windowPerSecond);
|
||||
if ((index+warningTime <= bassPeaks.size) && bassPeaks.get(index + warningTime) >= avgBass) {
|
||||
if ((index+warningTime < bassPeaks.size) && bassPeaks.get(index + warningTime) >= avgBass*3f/4f) {
|
||||
//TODO basic void circle spawning
|
||||
float endRadius = overlappedPeaks.get(index + warningTime)*Polyjet.GAME_AREA_HEIGHT/4;
|
||||
float endRadius = bassPeaks.get(index + warningTime)/bassMax*(Polyjet.GAME_AREA_HEIGHT/4f);
|
||||
|
||||
map.addToMap(Entities.VOID_CIRCLE,
|
||||
endRadius,
|
||||
rand.nextFloat()*Polyjet.GAME_AREA_WIDTH,
|
||||
rand.nextFloat()*Polyjet.GAME_AREA_HEIGHT,
|
||||
endRadius/avgBPS,
|
||||
warningTime
|
||||
endRadius/avgSPB,
|
||||
3f/speedMod
|
||||
);
|
||||
}
|
||||
if (bassPeaks.get(index) != 0) {
|
||||
map.addToMap(Entities.BAR,
|
||||
MathUtils.round(1.5f+rand.nextFloat()*(Polyjet.GAME_AREA_WIDTH-3)),
|
||||
(8f/avgBPS)*speedMod);
|
||||
(8f/avgSPB)*speedMod);
|
||||
} else {
|
||||
if (UMPeaks.get(index) != 0) {
|
||||
float xSpawnLocation = (rand.nextFloat()*(Polyjet.GAME_AREA_WIDTH-2))+1;
|
||||
@ -76,7 +79,7 @@ public class RhythmMapAlgorithm implements Runnable {
|
||||
xSpawnLocation,
|
||||
Polyjet.GAME_AREA_HEIGHT-0.25f,
|
||||
180*rand.nextFloat()+90,
|
||||
speedMod*(1f/avgBPS));
|
||||
speedMod*(1f/avgSPB));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,6 @@ public class Pellet extends Actor implements Entity, Poolable {
|
||||
setSize(0.75f, 0.75f);
|
||||
hitBox.setSize(getWidth(), getHeight());
|
||||
this.rate = rate;
|
||||
setColor(1f, MathUtils.random(), 0f, 1f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -114,10 +114,8 @@ public class GamePlayArea extends Stage {
|
||||
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
if (audioMap != null && time < audioMap.getPlayTime()) {
|
||||
time += delta;
|
||||
}
|
||||
if (audioMap != null) {
|
||||
time = audioMap.getPlayableClip().getPosition();
|
||||
ec.spawnEntity(this, audioMap.safeNextEntity());
|
||||
}
|
||||
collisionDetector.collisionCheck();
|
||||
|
@ -4,6 +4,7 @@ import java.io.DataInputStream;
|
||||
import java.io.IOException;
|
||||
import java.security.InvalidParameterException;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
|
||||
public class WavDecoder {
|
||||
@ -56,10 +57,14 @@ public class WavDecoder {
|
||||
|
||||
String moreInfo = readBytesToString(4);
|
||||
if (moreInfo.equals("LIST")) { // 4
|
||||
readStream.skip(30);
|
||||
if (!readBytesToString(4).equals("data")) {
|
||||
throw new InvalidParameterException("failed to read data with extra info.");
|
||||
while (true) {
|
||||
if (readBytesToString(1).equals("d")) {
|
||||
if (readBytesToString(3).equals("ata")) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else if (!moreInfo.equals("data")) {
|
||||
throw new InvalidParameterException("failed to read data.");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user