2016-05-21 16 views
0

Ich versuche, einen Code zu schreiben, der a. nehmen Sie den Ton vom Mikrofon meines Computers auf und b. gib aus, welche Frequenz (dh Tonhöhe) der Klang ist. Es muss nicht sehr präzise sein, muss aber funktionieren. Ich habe viele Stunden damit verbracht, verschiedene Foren zu diesem Thema zu lesen, und ich habe festgestellt, dass sie alle sehr nützlich sein sollten, außer es wäre auch, wenn ich mehr Wissen zu diesem Thema hätte. Ich bin jedoch kein besonders erfahrener Programmierer und die meisten Antworten, die ich gesehen habe, gehen mir über den Kopf. Ich verstehe, dass ich vielleicht mehr abgebissen habe, als ich kauen kann, wenn ich meinen Novizen betrachte, aber wenn jemand eine wirklich bodenständige, leicht verständliche Anleitung geben könnte, wie ich das umsetzen sollte, wäre ich sehr dankbar. Bitte verzeih meine Grundfrage :).FFT Sound-Analyse

Ich wollte es in Java schreiben, habe aber auch Erfahrung in Python und Swift.

+1

Werfen Sie einen Blick auf JTransforms für eine Java-Lösung - suchen Sie auch SO für das 'jtransforms' Tag für ähnliche Fragen (es gibt eine Menge). –

+1

Bitte werfen Sie einen Blick auf vorherige Fragen zu SO - Varianten werden häufig gestellt. – marko

Antwort

1

Es gibt viele Lösungen für Ihr Problem. Wenn Sie gut in Mathe sind, können Sie sich die Definition einer FFT ansehen und die Formel implementieren.

Dieser Auftrag wurde jedoch bereits von anderen Programmierern ausgeführt, und es gibt viele verschiedene Bibliotheken, die die FFT-Funktion implementieren.

In Python können Sie numpy verwenden. Oder, wenn Sie Java bevorzugen, können Sie diese Schnipsel verwenden: http://introcs.cs.princeton.edu/java/97data/FFT.java.html

vom Mikrofon zu lesen, können Sie: https://docs.oracle.com/javase/tutorial/sound/capturing.html

(eine Probe ist für den Erwerb von Audio von Mikrofon hier: Java Sound API - capturing microphone)

Also, Sie müssen nur den zweiten Code verwenden, lesen Sie die Daten als 16Bits PCM Big Endian und Weiterleiten an die FFT-Funktion.

+1

Wenn der Autor die FFT selbst schreiben könnte, hätte es die Frage auf andere Weise gestellt. Aus diesem Grund habe ich einen Link zu einer Referenz-FFT-Implementierung bereitgestellt. Princeton-Codes werden immer überprüft und funktionieren korrekt. Der zweite Link ist ein Verweis auf die Sound Capture API von Oracle. Er kann die beiden Code-Schnipsel einfach kombinieren, um sein Problem zu lösen. Ich denke, dass der Zweck dieses Forums nicht darin besteht, einen funktionierenden Code zu geben, indem ich das Problem selbst gelöst habe. Das sind nur gute Hinweise. –

1

Ich benutze seit einer Weile Processing und es hat ein paar nette Audio-Bibliotheken mit FFT-Unterstützung. Standardmäßig ist die Verarbeitung eine Java-Bibliothek, daher sollten Sie es ausprobieren (Sie können es in eclipse/netbeans/etc verwenden, wenn die standardmäßige minimale IDE nicht geeignet ist).

Sie müssen nicht Verarbeitung mit diesen Bibliotheken obwohl, sie sind schließlich Java-Bibliotheken.

Minim hat eine FFT-Klasse mit forward() und logAverages()

Beads hat auch eine FFT class und es gibt eine book available, die mehr ins Detail auf die Analyse der Fall ist.

Beide Bibliotheken bieten auch Unterstützung für die Toneingabe.