初めてここにいるので、フォーマットが乱雑になっていることを事前に申し訳ありません。
ですから、私はDSPにまったく慣れていないので、フーリエ変換についてはごく一般的な理解しかありません。android.media.audiofx.Visualizerhttp : //developer.android.com/reference/android/media/audiofx/Visualizer.htmlにVisualizerクラスを含むAndroidSDK9用のビジュアライザーアプリを構築しようとしてい ます。
getFft()メソッドのjavadocは、私が使用しているものです。
"現在再生中のオーディオコンテンツの周波数キャプチャを返します。キャプチャは8ビットの大きさのFFTです。FFTのサイズは指定されたキャプチャサイズの半分ですが、スペクトルの両側が返され、等しいバイト数になります。キャプチャサイズに合わせて」
まず、「スペクトルの両側」とはどういう意味ですか?この出力は標準のFFTとどのように異なりますか?
これがバイト配列の出力例です。getFft()は単純にするために124ポイントが与えられ、最初の31個のビンを取得しました。最初の31個のビンの大きさは次のとおりです。
{123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16, 11, -12, 12}
どんな助けや説明も大歓迎です!
編集: それで、たくさんのグラフを見つめた後、私の問題の一部は、Googleがどの単位が使用されているかを指定していないことのように見えます。他のほとんどすべての測定はmHzで行われますが、FTT出力もmHzであると想定するのは公平でしょうか?Visualizerクラスのソースコードを見ることができる場所はありますか?それで、内部で実際に何が起こっているのかを理解できるかもしれませんか?
私は先に進み、getFft()のすべての出力を取得しました
93, -2, -28, -16, -21, 19, 44, -16, 3, 16, -9, -4, 0, -2, 21, 16, -3, 1, 2, 4, -3, 5, 5, 10, 6, 4, -9, 7, -2, -1, 2, 11, -1, 5, -8, -2, -1, 4, -5, 5, 1, 3, -6, -1, -5, 0, 0, 0, -3, 5, -4, -6, -2, -2, -1, 2, -3, 0, 1, -3, -4, -3, 1, 1, 0, -2, -1, -1, 0, -5, 0, 4, -1, 1, 1, -1, 1, -1, -3, 2, 1, 2, -2, 1, 0, -1, -2, 2, -3, 4, -2, -2, 0, 1, -4, 0, -4, 2, -1, 0, -3, -1, -1, -1, -5, 2, -2, -2, 0, -3, -2, 1, -5, -2, 0, 0, 0, -2, -2, -1, -1, -1, -2, 0, 3, -3, -1, 0
したがって、これを正しく理解すると、ここでの出力は-Nから0からNになります。-Nから0は、0からNのようになります。しかし、これらの振幅を見ると、ミラーリングされたデータは表示されません。グーグルは、出力がスペクトルのちょうど両側で0からNでなければならないことを示しているようです。したがって、(output.length-1)/2からoutput.length-1にデータを取得できるはずです。負の振幅はサンプルレートより速く移動し、正の振幅はサンプルレートより遅く移動します。私はこれを正しく理解しましたか?