2016-05-21 13 views
0

私はいくつかのコードを書くつもりです。私のコンピュータのマイクから音を取り、b。その音がどんな周波数(すなわち、ピッチ)で出力されるか。それは非常に正確である必要はありませんが、動作する必要があります。私はこのテーマについて様々なフォーラムを閲覧するのに多くの時間を費やしてきましたが、私がその件についてもっと知識を持っていれば、それらはすべて非常に便利でなければなりません。しかし、私は特に経験豊富なコーダーではなく、私が見た答えのほとんどは私の頭を越えています。私は私の初心者を考慮して、私が噛むことができる以上に噛んでいるかもしれないことを理解しています。しかし、誰かが実際にこれを実装する方法についてわかりやすいウォークスルーを与えることができれば、私は感謝しています。私の基本的な質問を許してください:)。FFTサウンド解析

私はJavaで書こうと思っていましたが、Pythonでも迅速に経験しました。

+1

JavaソリューションのJTransformsを見てください。同様の質問のために 'jtransforms'タグを探してください(たくさんあります)。 –

+1

よくある質問とその回答 - よくある質問 – marko

答えて

1

問題の解決策はたくさんあります。あなたが数学を勉強しているなら、FFTの定義を見て、その式を実装することができます。

しかし、その仕事はすでに他のプログラマーによって行われており、FFT機能を実装する多くの異なるライブラリがあります。

pythonでは、numpyを使用できます。あなたは、Javaを好む場合は、あなたがそのスニペットを使用することができます http://introcs.cs.princeton.edu/java/97data/FFT.java.html

は、マイクからの読み取りには、あなたが使用することができます。

: は https://docs.oracle.com/javase/tutorial/sound/capturing.html

Java Sound API - capturing microphoneここでは、マイクからの音声を取得するためのサンプルがあります)

したがって、2番目のコードを使用して、16ビットのPCMビッグエンディアンとしてデータを読み取り、それをFFT関数に転送するだけで済みます。

+1

著者がFFT自体を書くことができたなら、それは別の方法で質問をしたでしょう。そのため、リファレンスFFT実装へのリンクを提供しました。プリンストンのコードは常にチェックされ、正しく動作します。 2番目のリンクは、OracleのサウンドキャプチャAPIへの参照です。彼はその問題を解決するために2つのコードスニペットを簡単に組み合わせることができます。このフォーラムの目的は、自分自身で問題を解決することによって機能的なコードを与えることではないと私は思う。それはちょうどよいヒントです。 –

1

私はずっとProcessingを使用していましたが、FFTをサポートした素晴らしいオーディオライブラリがいくつかあります。デフォルトではProcessingはJavaライブラリーですので、デフォルトの最小IDEが適切でない場合はeclipse/netbeans/etcなどで使用できます。

これらのライブラリではProcessingを使用する必要はありませんが、結局のところJavaライブラリです。

MinimFFT classがあり、分析に詳しく説明していbook availableあります​​とlogAverages()

BeadsとFFTのクラスを持っています。

両方のライブラリも音声入力をサポートしています。