gpt4 book ai didi

android - 在 Android 的 TarsosDSP 库中使用 FFT

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:22 27 4
gpt4 key购买 nike

我刚开始使用 TarsosDSP对于 android,我不知道如何使用 FFT。谁能给我提供 sample ?我只想读取一个文件并获取它的 FFT 输出。

最佳答案

试试这段代码:

    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 Manual (第 12 页)并为外部存储(SD 卡)上的 440.mp3 文件(测试 440Hz 音调)的每个 bufferSize 计算并显示在对数 FFT 中。您应该从 here 添加 TarsosDSP-Android-2.3.jar(或更新版本)到项目的 libs 文件夹(并将其添加为库)并对应于来自 here 的设备 ffmpeg 库(armeabi-v7a_ffmpeg、armeabi-v7a-neon_ffmpeg 或 x86_ffmpeg)到项目的 assets 文件夹。

别忘了添加

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

AndroidManifest.xml(并且还为高于 21 的 targetSdkVersion 提供运行时权限)

附言。如果 bufferSize 等于源文件中的样本数(或更大),您可以对整个文件进行 FFT。

关于android - 在 Android 的 TarsosDSP 库中使用 FFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40105872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com