【发布时间】:2018-09-19 23:21:32
【问题描述】:
我有一个专用线程通过 snd_pcm_readi() 从 Alsa 捕获音频。定期我得到一个简短的阅读,这意味着 snd_pcm_readi() 返回一个小于我的缓冲区大小的正整数,并且我的音频流中显然有一个“流行”的声音。然后我将线程优先级设置为实时,这带来了实实在在的好处,减少了短读取,但这并没有解决问题。
现在的问题是:在走上实时修补 Linux 内核的崎岖道路之前,我还可以做些什么来提高性能?在专用线程中调用 snd_pcm_readi() 是从 Alsa 中提取音频的最佳方式吗?
【问题讨论】:
-
周期/缓冲区大小是多少?为什么?
-
周期大小为 512 个样本。我故意使用一个糟糕的 USB 音频加密狗来测试我的系统在恶劣的条件下。短读很少见,假设平均每 30 秒一次,所以我想知道是否可以编写更好的代码而不是增加周期大小。
-
缓冲区大小是多少?
-
1024 作为 snd_pcm_dump() 的输出。
-
为什么?缓冲区大小不影响延迟;使其尽可能大。
标签: pthreads audio-recording alsa