Hiho Leute 
komm ich direkt mal zu meinem Problem:
ich möchte eine Musik-Datei einlesen und diese genau auslesen,
damit ich die Frequenzen etc. dazu nutzen kann um
eine Lampe nach Beat leuchten zu lassen.
(Hoher Beat -> helles Licht, kleiner Beat -> dunkleres Licht)
Nun hab ich bereits die Musik-Datei (WAV) eingelesen,
per FFT die Teilfrequenzen berechnet (Array mit 32 floats)
und versucht mit diesen Frequenzen ein Licht nach beat leuchten zu lassen.
Einmal per Durchschnitt (größte Frequenz von den Array),
einmal per Höchstenwert (max von den Array)
und dann nochmal beides aber mit einem smootheren Übergang durch Annährung mit ms
Leider ergibt das nicht mein erwünschtes Ergebnis ... :/
Was könnte ich tun damit es besser auf den Beats leuchtet?
Hier nochmal mein Code mit durchschnitt und smoothen Übergang.
PS: da es eig. egal ist ob ich ein Licht oder eine Farbe von einem 3D-Objekt änder habe ich erstmal ein Cube verwendet
komm ich direkt mal zu meinem Problem:
ich möchte eine Musik-Datei einlesen und diese genau auslesen,
damit ich die Frequenzen etc. dazu nutzen kann um
eine Lampe nach Beat leuchten zu lassen.
(Hoher Beat -> helles Licht, kleiner Beat -> dunkleres Licht)
Nun hab ich bereits die Musik-Datei (WAV) eingelesen,
per FFT die Teilfrequenzen berechnet (Array mit 32 floats)
und versucht mit diesen Frequenzen ein Licht nach beat leuchten zu lassen.
Einmal per Durchschnitt (größte Frequenz von den Array),
einmal per Höchstenwert (max von den Array)
und dann nochmal beides aber mit einem smootheren Übergang durch Annährung mit ms
Leider ergibt das nicht mein erwünschtes Ergebnis ... :/
Was könnte ich tun damit es besser auf den Beats leuchtet?
Hier nochmal mein Code mit durchschnitt und smoothen Übergang.
PS: da es eig. egal ist ob ich ein Licht oder eine Farbe von einem 3D-Objekt änder habe ich erstmal ein Cube verwendet
Java:
public void update(long delta) {
cube.update(delta);
double[] values = spectrumSoundThread.getFreqTable();
float testValue = 0;
if (values != null) {
for (double value : values)
testValue += value;
}
Vector3f diffuse = cube.getMaterial().getDiffuse(); //Diffuse-Farbe einholen
float should = 1 - testValue / 32; //Soll-Wert
float difference = should - diffuse.y; //Differenz zum Soll-Wert
// Farbänderung mit Zeitübergang (nur für Grün)
diffuse.y += ((difference / 1000 * delta) * speed); // speed = 25f;
if(diffuse.y > 1.0f)
diffuse.y = 1;
}