我是PortAudio的新手。我的目的是从我的电脑上的输入输入连续捕获数据并实时处理数据。
我使用的采样率为44100,缓冲区大小(frameCount)为11025.我已成功完成此操作,但我正在进行portAudio引擎调用的回调函数内的所有处理。此回调函数的通用原型:
int recordCallback(const void* inputBuffer, void* outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void* userData);
在回调中对音频数据进行所有处理是不是很糟糕?
由于执行回调函数所花费的时间,我也在丢失数据。
我考虑过实现一个合适大小的全局循环缓冲区,以便回调连续填充此缓冲区并在准备就绪时设置一个标志。我的主要功能可以轮询此标志,然后在主函数中进行处理。
我担心的是,回调是否有可能写入此环形缓冲区,而我的主要功能也是从另一部分读取它。
有没有人能为我想要达到的目标找到更好的解决方案?非常感谢提前
答案 0 :(得分:0)
在回调中对音频数据进行所有处理是不是很糟糕?
由于执行回调函数所花费的时间,我也在丢失数据。
我认为你在那里回答了你自己的问题。 尝试将其推送到缓冲区,然后让另一个线程进行后期处理(注意 - 如果你没有足够快地处理它,你必须将它转储到磁盘上,否则你将最终运行内存不足)
你说你关注并发性 - 这是合理的,但试一试,然后在你试一试的时候再发一个关于这个问题的问题。