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

Posted

技术标签:

【中文标题】PortAudio:如何从麦克风获取记录(获取数据)【英文标题】:PortAudio: How to get record from mic (get data) 【发布时间】:2011-07-12 03:14:05 【问题描述】:

我正在尝试使用 portaudio(作为跨平台功能)从麦克风读取数据,然后我想通过 FFT 将该数据放入,但我不太确定该怎么做。 很多人告诉我:1.get the data, 2.apply fft, 但问题是我不太确定如何获取数据,portaudio 没有太多关于从麦克风获取输入的教程,如果你知道任何代码、教程或任何其他资源,它会非常完整。我已经搜索了一段时间了。请帮忙

【问题讨论】:

谁能帮帮我,真的很难。 这是一个可能有帮助的链接:rossbencina.com/static/writings/… 【参考方案1】:

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 */
 

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

【讨论】:

以上是关于PortAudio:如何从麦克风获取记录(获取数据)的主要内容,如果未能解决你的问题,请参考以下文章

Python PyAudio 安装问题(使用 PortAudio)

如何从 Macbook 麦克风获取音频数据?

如何使用 PyAudio 或 PortAudio 获取设备的音频采样率列表?

如何使用 PyAudio 或 PortAudio 获取设备的音频采样率列表?

如何从麦克风实时获取原始音频帧或从 iOS 中保存的音频文件获取原始音频帧?

如何从麦克风输入中获取音量