Wir werden sehen. Ich habe keine Ahnung von Java-Klassen oder der Art der Unterstützung für die Signalverarbeitung, aber ich werde Ihnen einige Richtlinien geben. Die besonderen Details der Implementierung in der Sprache müssen Sie herausfinden.
Für jede Art der Verarbeitung einer Audiodatei benötigen Sie die "Rohdaten", dh eine Audiodatei mit unkomprimierten Audiobeispielen. Zum Beispiel das WAV-Format, das normalerweise Samples im 16-Bit-2-Komplement mit Vorzeichen enthält.
Wenn Sie einen Computer verwenden und eine Offline-Verarbeitung durchführen, ist es möglicherweise eine gute Idee, diesen Wert in ein Doppel umzuwandeln (was in den meisten Prozessoren heutzutage eine 64-Bit-Gleitkommazahl bedeutet).
Daher haben Sie einen kontinuierlichen Strom von doppelten Zahlen aus der Datei. Dann müssen Sie einen Weg definieren, um mit den kontinuierlichen Daten umzugehen. Eine weit verbreitete Standardmethode ist die Verwendung eines Ringpuffers (auch wenn dieser offline ist, gehe ich davon aus, dass Ihr Code effizient sein soll und das Laden der gesamten Datei in den Speicher als Array nicht die beste Lösung ist). Entweder das oder nur ein normaler Puffer ist Ihre Wahl. Die Pufferlänge sollte eine Potenz von 2 sein (Do zur Effizienz des Cooley-Tukey-Radix-2-Algorithmus).
Jetzt müssen Sie die eigentliche FFT durchführen. Dies ist lediglich eine Multiplikation des Puffers (der mathematisch ein Vektor ist) mit der FFT-Matrix. Wie diese Operation tatsächlich in Java ausgeführt wird, ist keine Ahnung. In C wäre es nur, den Zeiger an das Array und die Länge an eine FFT-Routine zu übergeben, die entweder einen Zeiger auf den dinamisch zugewiesenen Speicher zurückgibt oder das Ergebnis in einem Array belässt, das Sie an dieses übergeben.
Schließlich gelangen Sie zu einem Array von M komplexen Zahlen (Angenommen, die Länge des Arrays / Puffers / Vektors mit dem Signal ist M). Und dann machst du damit, was du willst.
Zum Beispiel könnten Sie die Größe jeder der komplexen Zahlen nehmen und das Maximum finden, um zu erkennen, wo die Grundfrequenz sein könnte (allerdings sehr ungefähr).
Extras: Fortgeschrittenere zu verarbeitende Techniken umfassen eine Vorfensterung, um Leckagen zu vermeiden, Null-Padding, um eine höhere Auflösung des Fensterspektrums zu erzielen usw.
Ich hoffe es hilft.