如何从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返回得更快。虽然这个观察值平均为18ms,但我需要每次调用snd_pcm_readn()时持续18ms的阻塞行为。
(无论如何,平均阅读时间是18毫秒 - 我不想要平均行为 - 每次阅读都应该精确到18毫秒)
如何使用ALSA实现这一目标?