【问题标题】:What exactly does ALSA's snd_pcm_delay() return?ALSA 的 snd_pcm_delay() 究竟返回了什么?
【发布时间】:2017-05-06 22:11:06
【问题描述】:
我想使用snd_pcm_delay() 查询延迟,直到我即将写入 ALSA 缓冲区的样本可听到。我希望这个值在各个调用之间会有所不同。但是,在两个系统上,这个值是恒定的。该函数返回一个值,该值在一个平台上始终等于周期大小,而在另一个平台上,它等于缓冲区大小(我的代码中周期大小的两倍)。
我对@987654322@的理解有错吗?是驱动问题吗?
【问题讨论】:
标签:
linux
audio
delay
latency
alsa
【解决方案1】:
延迟与缓冲区中的样本数量成正比(snd_pcm_avail() 的倒数)加上描述将样本从缓冲区移动到扬声器所需的时间的时间。后一部分依赖于驱动程序,可能无法实现。
如果设备一次取出一个完整周期的样本(某些 DMA 控制器没有更好的粒度来报告当前位置),那么延迟值会在一段时间内保持不变,然后跳跃一整个周期.而且您仅在重新填充缓冲区之前才能看到该跳转。