PortAudio:如何从麦克风获取记录(获取数据)

时间:2011-07-12 03:14:05

标签: c portaudio

我正在尝试使用portaudio(跨平台功能),从麦克风读入,然后我想通过FFT放置该数据,但我不太确定如何做到这一点。 很多人告诉我:1。获取数据,2。应用fft, 但问题是我不太确定如何获取数据,portaudio没有太多关于从麦克风获取输入的教程,如果你知道任何代码,教程或任何其他资源,那将是非常充分的。我一直在搜索这个问题。请帮忙

1 个答案:

答案 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 */
 }

同样,这是简化的,但你明白了。有相当数量的簿记,示例代码不是最干净,但很容易适应您的目的。