PortAudio流和实时处理

PortAudio Streaming and processing in real time

本文关键字:实时处理 PortAudio      更新时间:2023-10-16

我是PortAudio新手。我的目的是从我的pc上的行入输入连续捕获数据并实时处理数据。

我使用44100的采样率和11025的缓冲区大小(frameCount)。我成功地做到了这一点,但是我在portAudio引擎调用的回调函数中进行所有处理。这个回调函数的通用原型:

int recordCallback(const void* inputBuffer, void* outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void* userData);

在这个回调中做所有音频数据的处理是不好的吗?

由于执行回调函数所花费的时间,我也丢失了数据。

我考虑实现一个合适大小的全局循环缓冲区,以便回调不断填充这个缓冲区,并在准备好时设置一个标志。我的main函数可以轮询这个标志,然后在main函数中进行处理。

然而,我担心的是,是否有可能回调写入这个环缓冲区,而我的主函数也将从它的不同部分读取。

有没有人有一个更好的解决方案,我正在努力实现什么?提前致谢

在这个回调中做所有音频数据的处理是不好的吗?

由于执行回调函数所花费的时间,我也丢失了数据。

我想你刚才已经回答了你自己的问题。尝试将其推入缓冲区,然后让另一个线程进行后处理(注意-如果处理速度不够快,您将不得不将其转储到磁盘,否则您将最终耗尽内存)

你说你担心并发-这是合理的,但给它一个尝试,然后发布另一个问题,关于具体问题,当你给它一个尝试。