如何使用FFT从PCM获取频率数据

Ben*_*ros 7 java android fft pcm

我有一个传递给读者的音频数据:

 recorder.read(audioData,0,bufferSize); 
Run Code Online (Sandbox Code Playgroud)

实例化如下:

AudioRecord recorder;
short[] audioData;
int bufferSize;
int samplerate = 8000;

//get the buffer size to use with this audio record
bufferSize = AudioRecord.getMinBufferSize(samplerate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT)*3;

//instantiate the AudioRecorder
recorder = new AudioRecord(AudioSource.MIC,samplerate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,bufferSize); 

recording = true; //variable to use start or stop recording
audioData = new short [bufferSize]; //short array that pcm data is put into.
Run Code Online (Sandbox Code Playgroud)

我有一个我在网上找到的FFT课程和一个复杂的课程.我已经尝试了两天在线查看,但无法解决如何循环存储的值audioData并将其传递给FFT.

这是我正在使用的FFT类:http: //www.cs.princeton.edu/introcs/97data/FFT.java ,这是一个复杂的类:http://introcs.cs.princeton.edu /java/97data/Complex.java.html

Ker*_*rry 0

PCM 是一种数据编码技术。它与使用 FFT 获取音频数据的频率分析无关。如果您使用 Java 解码 PCM 编码数据,您将获得原始音频数据,然后将其传递到 FFT 库。