Android 用のTarsosDSPを使い始めたばかりで、FFT の使い方がわかりません。誰でもサンプルを提供できますか? ファイルを読み込んで、その FFT 出力を取得したいだけです。
質問する
1734 次
1 に答える
7
このコードを試してください:
new AndroidFFMPEGLocator(this);
new Thread(new Runnable() {
@Override
public void run() {
File externalStorage = Environment.getExternalStorageDirectory();
File sourceFile = new File(externalStorage.getAbsolutePath() , "/440.mp3");
final int bufferSize = 4096;
final int fftSize = bufferSize / 2;
final int sampleRate = 44100;
AudioDispatcher audioDispatcher;
audioDispatcher = AudioDispatcherFactory.fromPipe(sourceFile.getAbsolutePath(), sampleRate, bufferSize, 0);
audioDispatcher.addAudioProcessor(new AudioProcessor() {
FFT fft = new FFT(bufferSize);
final float[] amplitudes = new float[fftSize];
@Override
public boolean process(AudioEvent audioEvent) {
float[] audioBuffer = audioEvent.getFloatBuffer();
fft.forwardTransform(audioBuffer);
fft.modulus(audioBuffer, amplitudes);
for (int i = 0; i < amplitudes.length; i++) {
Log.d(TAG, String.format("Amplitude at %3d Hz: %8.3f", (int) fft.binToHz(i, sampleRate) , amplitudes[i]));
}
return true;
}
@Override
public void processingFinished() {
}
});
audioDispatcher.run();
}
}).start();
TarsosDSPマニュアル(12ページ)に基づきbufferSize
、外部ストレージ(SDカード)上の440.mp3ファイル(テスト440Hz音)ごとにlog FFTを計算して表示します。ここからTarsosDSP-Android-2.3.jar (またはそれ以降) をlibs
プロジェクトのフォルダーに追加 (およびライブラリとして追加) し、デバイスの ffmpeg ライブラリ (armeabi-v7a_ffmpeg、armeabi-v7a-neon_ffmpeg または x86_ffmpeg) に対応する必要があります。ここにassets
あなたのプロジェクトのフォルダがあります。
そして、追加を忘れないでください
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
に(また、21 以上AndroidManifest.xml
のランタイム権限を付与します)targetSdkVersion
PS。bufferSize
ソース ファイル内のサンプル数と同じ (またはそれ以上) の場合は、ファイル全体に FFT を指定できます。
于 2016-10-18T13:46:15.467 に答える