genodeftest
Erfahrenes Mitglied
Also für die praktische Umsetzung würde ich so vorgehen:
1. mir eine Bibliothek etc. suchen, mit der man auf Audio-Eingänge zugreifen kann. Ein paar Anregungen:
Java Sound, Teil der Java SE API, http://docs.oracle.com/javase/tutorial/sound/TOC.html , http://openjdk.java.net/groups/sound/ , http://onjava.com/pub/a/onjava/excerpt/jenut3_ch17/index.html , http://www.developer.com/java/other...turing-Microphone-Data-into-an-Audio-File.htm , ich weiß nicht, ob das auch auf Mikros oder ähnliche Eingänge in allen Fällen zugreifen kann
Pulseaudio/ALSA/… (auf Linux/Unix) per JNI
Über die Samplelänge muss man sich etwas Gedanken machen: Um eine Schwingung noch sicher detektieren zu können, sollte man wenigstens 10 Perioden dieser Schwingung aufnehmen. Wenn wir also eine Untergrenze von 30Hz erreichen wollen, die wir noch sicher detektieren können, dann brauchen wir eine Samplelänge von 1/3 Sekunde. Um auf Nummer sicher zu gehen nehmen wir lieber 1 Sekunde, also 44.100 oder 48.000 Samples je nach Samplingrate (u.U. wären auch 192 kHz Abtastfrequenz möglich, aber nicht mit jeder Hardware und Software).
2. FFT auf die Sampledaten ausführen. Wäre praktisch, wenn man eine Bibliothek finden würde, die das kann. Die reale Implementierung hat nämlich einige Optimierungsmöglichkeiten, die auch unbedingt nötig sind – man will ja unter Umständen 10 mal pro Sekunde eine FFT auf Sampledaten von 1 Sekunde ausführen. Außerdem werden je nach Implementierung komplexe Zahlen verwendet.
3. FFT analysieren, d.h. auf dem Frequenzspektrum das Maximum suchen (einfache for-Schleife). Eventuell (je nach gewünschter Präzision) werden dazu auch mehrere aufeinander folgende Werte betrachtet, um zu vermeiden, dass ein Peak genau zwischen 2 Frequenzen fällt und somit die Intensität falsch eingeschätzt wird.
4. Frequenz berechnen, bei der das Maximum gefunden wurde. – da kann ich gerade gar nicht weiter helfen.
1. mir eine Bibliothek etc. suchen, mit der man auf Audio-Eingänge zugreifen kann. Ein paar Anregungen:
Java Sound, Teil der Java SE API, http://docs.oracle.com/javase/tutorial/sound/TOC.html , http://openjdk.java.net/groups/sound/ , http://onjava.com/pub/a/onjava/excerpt/jenut3_ch17/index.html , http://www.developer.com/java/other...turing-Microphone-Data-into-an-Audio-File.htm , ich weiß nicht, ob das auch auf Mikros oder ähnliche Eingänge in allen Fällen zugreifen kann
Pulseaudio/ALSA/… (auf Linux/Unix) per JNI
Über die Samplelänge muss man sich etwas Gedanken machen: Um eine Schwingung noch sicher detektieren zu können, sollte man wenigstens 10 Perioden dieser Schwingung aufnehmen. Wenn wir also eine Untergrenze von 30Hz erreichen wollen, die wir noch sicher detektieren können, dann brauchen wir eine Samplelänge von 1/3 Sekunde. Um auf Nummer sicher zu gehen nehmen wir lieber 1 Sekunde, also 44.100 oder 48.000 Samples je nach Samplingrate (u.U. wären auch 192 kHz Abtastfrequenz möglich, aber nicht mit jeder Hardware und Software).
2. FFT auf die Sampledaten ausführen. Wäre praktisch, wenn man eine Bibliothek finden würde, die das kann. Die reale Implementierung hat nämlich einige Optimierungsmöglichkeiten, die auch unbedingt nötig sind – man will ja unter Umständen 10 mal pro Sekunde eine FFT auf Sampledaten von 1 Sekunde ausführen. Außerdem werden je nach Implementierung komplexe Zahlen verwendet.
3. FFT analysieren, d.h. auf dem Frequenzspektrum das Maximum suchen (einfache for-Schleife). Eventuell (je nach gewünschter Präzision) werden dazu auch mehrere aufeinander folgende Werte betrachtet, um zu vermeiden, dass ein Peak genau zwischen 2 Frequenzen fällt und somit die Intensität falsch eingeschätzt wird.
4. Frequenz berechnen, bei der das Maximum gefunden wurde. – da kann ich gerade gar nicht weiter helfen.
Zuletzt bearbeitet: