gpt4 book ai didi

c++ - PortAudio 实时串流和处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:17 24 4
gpt4 key购买 nike

我是 PortAudio 的新手。我的目的是不断从我的电脑上的线路输入中捕获数据并实时处理数据。

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

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

在此回调中对音频数据进行所有处理是否不好?

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

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

然而,我担心的是,回调是否可能写入此环形缓冲区,而我的主要功能也在不同的部分从中读取。

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

最佳答案

Is it bad to do all of my processing of the audio data inside this callback?

I am also loosing data because of the time taken to execute my callback function.

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

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

关于c++ - PortAudio 实时串流和处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com