我有一个专用线程,通过snd_pcm_readi()从Alsa获取音频。我会定期得到一个简短的读取,这意味着snd_pcm_readi()返回一个低于我的缓冲区大小的正整数,并且我的音频流中显然有一个“pop”声。然后我将线程优先级设置为实时,这会带来实实在在的好处,而不是短读取,但这并没有解决。
现在的问题是:在走向实时打补丁的Linux内核的坎坷之路之前,我还能做些什么来挤出更多的性能?在专用线程中调用snd_pcm_readi()是从Alsa中提取音频的最佳方法吗?
答案 0 :(得分:1)
对于播放,缓冲区大小决定了延迟。
对于捕获,它没有;只有周期大小才能确定在报告的记录样本可用之前必须等待多长时间。
因此,为防止超出,请尽可能使缓冲区变大(例如,在设置其他参数后调用snd_pcm_hw_params_set_buffer_size_max()
)。