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 */
}
同样,这是简化的,但你明白了。有相当多的簿记,示例代码不是最干净的,但很容易适应您的目的。