我是PortAudio的新手。我的意图是继续从我的个人电脑上的输入数据,并处理实时的数据。
我使用的采样率为44100,缓冲器大小(frameCount)为11025。我成功地做到了这一点,但我正在portAudio引擎调用的回调函数中执行所有处理。此回调函数的通用原型:
int recordCallback(const void* inputBuffer, void* outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void* userData);在这个回调中对音频数据进行所有处理是不是很糟糕?
由于执行回调函数所需的时间,我也在丢失数据。
我考虑实现一个适当大小的全局循环缓冲区,这样回调就可以连续地填充这个缓冲区,并在准备就绪时设置一个标志。我的主函数可以轮询此标志,然后在主函数中执行处理。
然而,我担心的是,回调是否可能写到这个环形缓冲区,而我的主要功能也会在另一个部分从它读取。
有没有人有更好的解决方案来解决我想要达到的目标?事先非常感谢
发布于 2016-10-13 12:48:12
在这个回调中对音频数据进行所有处理是不是很糟糕? 由于执行回调函数所需的时间,我也在丢失数据。
我想你刚才回答了你自己的问题。尝试将其推送到缓冲区,然后让另一个线程执行您的后处理(注意--如果处理不够快,您将不得不将其转储到磁盘,否则将导致内存不足)
你说过你关心并发性--这是合理的,但是尝试一下,然后当你尝试的时候,再发布关于这个特定问题的另一个问题。
https://stackoverflow.com/questions/40020850
复制相似问题