我正在尝试使用portaudio(跨平台功能),从麦克风读入,然后我想通过FFT放置该数据,但我不太确定如何做到这一点。 很多人告诉我:1。获取数据,2。应用fft, 但问题是我不太确定如何获取数据,portaudio没有太多关于从麦克风获取输入的教程,如果你知道任何代码,教程或任何其他资源,那将是非常充分的。我一直在搜索这个问题。请帮忙
答案 0 :(得分:5)
portaudio发行版以示例C程序的形式提供文档。它们位于test
目录中,通常称为patest_...
。那里有很多好材料,文档包含overview with very short description,
您要查看的是patest_record
,它通过回拨进行异步录制。如果你想做任何严肃的事,恕我直言,这是要走的路。但是还有patest_read_record.c
,它执行同步(阻塞)IO。
代码实际上非常简单,这里是相关部分(遗漏了很多东西): 1 /你malloc缓冲区2 /你在回调中安装回调3 /,你将数据复制到你的缓冲区
/* 1 */
data.recordedSamples = (SAMPLE *) malloc( numBytes );
/* 2 */
err = Pa_OpenStream(
&stream,
&inputParameters,
NULL, /* &outputParameters, */
SAMPLE_RATE,
FRAMES_PER_BUFFER,
paClipOff,
recordCallback,
&data );
/* 3, in recordCallBack with rptr the input data and wptr our buffer */
for( i=0; i<framesLeft; i++ )
{
*wptr++ = *rptr++; /* left */
if( NUM_CHANNELS == 2 ) *wptr++ = *rptr++; /* right */
}
同样,这是简化的,但你明白了。有相当数量的簿记,示例代码不是最干净,但很容易适应您的目的。