tuning with other songs

This commit is contained in:
Harrison Deng 2017-07-14 14:37:25 -05:00
parent afd2d1aa41
commit d65b94cd49
5 changed files with 41 additions and 41 deletions

View File

@ -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() {

View File

@ -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));
}
}

View File

@ -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

View File

@ -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();

View File

@ -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.");
}