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 ....
データがバッファリングされている場合、APIがより速く戻る場合、snd_pcm_readn()でバッファリングが発生しているようです。この観測値の平均は18ミリ秒ですが、snd_pcm_readn()を呼び出すたびに一定の18ミリ秒のブロッキング動作が必要です。
(とにかく平均読み取り時間は18msです-平均的な動作は必要ありません-読み取りごとに正確に18msである必要があります)
ALSAを使用してこれを達成する方法は?