4

オーディオを介していくつかのグラフィックデータを「視覚化」する予定です。簡単に言うと、いくつかの画像データから一連の周波数と関連する振幅値を取得します。この周波数/振幅テーブル (256 ペアのデータとしましょう) は、関連する正弦波に変換する必要があります。

1 つの解決策は、テーブル エントリごとに異なる周波数の正弦波を生成することです。これは、最大 256 回の正弦波を生成することを意味します。しかし、それはかなり遅いと思います。それで、FFT変換を使用することは、これに対するより良い解決策になるはずですか?

だから私の質問: これに使用できる Android 用の高速で使いやすい FFT 標準はありますか?

4

1 に答える 1

6

私のAndroidプロジェクトでは、Androidで問題なく動作するJTranformsを使用しました。

コード例:

android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);

AudioRecord ar = // initialize AudioRecord here;
ar.startRecording();

// Here's the Fast Fourier Transform from JTransforms
DoubleFFT_1D fft = new DoubleFFT_1D(samples.length);

do {
  // Read audio to 'samples' array and convert it to double[]
  ar.read(samples, 0, samples.length);

  // Will store FFT in 'samplesD'
  fft.realForward(samplesD);

} while ( /* condition */ );

ar.stop();
ar.release();

アップデート:

ここでgithubJTransformsに管理されており、ここでMavenプラグインとして利用できます。

最近のGradleバージョンで使用するには、次のようにします。

dependencies {
    ... 
    implementation 'com.github.wendykierp:JTransforms:3.1'
}
于 2013-03-05T14:57:35.123 に答える