C++ PortAudio流媒体和实时处理

C++ PortAudio流媒体和实时处理,c++,multithreading,callback,audio-streaming,portaudio,C++,Multithreading,Callback,Audio Streaming,Portaudio,我是PortAudio的新手。我的目的是从我的pc上输入的线路中连续捕获数据,并实时处理数据 我使用的采样率为44100,缓冲区大小(帧数)为11025。我成功地做到了这一点,但我正在portAudio引擎调用的回调函数中进行所有处理。此回调函数的通用原型: int recordCallback(const void* inputBuffer, void* outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo

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

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

int recordCallback(const void* inputBuffer, void* outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void* userData);
在这个回调中处理所有的音频数据是否不好

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

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

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

对于我想要实现的目标,有谁有更好的解决方案吗?非常感谢

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

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

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


您说您关心并发性-这是合理的,但请尝试一下,然后在尝试后发布关于该特定问题的另一个问题。

Hi@Engineer999,您能找到解决方案吗?事实上,我面临着同样的问题,我无法找到一个很好的解决办法。