如何从 snd_pcm_readn() 实现恒定的读取延迟?我试过(读取 144 帧,用于 4 通道麦克风,8000Hz)。
我期望每次调用 snd_pcm_readn() 有 18 毫秒的读取延迟:
18ms, 18ms, 18ms , 18ms, 18ms, 18ms, 18ms , 18ms, 18ms, 18ms, 18ms , 18ms ....
. 但是我在示波器中观察到以下模式:
2ms, 2ms, 2ms ,2ms , 64ms, 2ms, 2ms, 2ms 2ms ,, 64ms, 2ms, 2ms, 2ms, 2ms, 64ms ....
似乎在 snd_pcm_readn() 中发生了一些缓冲,如果数据被缓冲,则 api 返回更快。尽管这个观察平均为 18 毫秒,但每次调用 snd_pcm_readn() 时,我需要一个恒定 18 毫秒的阻塞行为。
(无论如何,平均读取时间是 18 毫秒 - 我不想要平均行为 - 每次读取应该是 18 毫秒)
如何使用 ALSA 实现这一目标?