我正在尝试使用以下 ALSA API 录制刚刚向扬声器播放的内容:
snd_pcm_mmap_writei()
snd_pcm_mmap_readi()
这两个函数在同一个线程中被一个接一个地调用。writei() 函数快速返回(我相信它会在播放缓冲区可用时返回),而 readi() 会返回直到捕获指定的样本。但捕获的样本并不是刚刚播出的。我猜ALSA不是双工模式,也就是说,它必须先完成播放,然后开始录制,它没有任何意义,只是点击。扬声器仍能正确播放声音。
所有硬件/软件参数均已正确设置。如果我只做音频捕捉,我会得到一个很好的声波。PCM 句柄以正常模式(非非阻塞,非异步)打开。
有人对如何使这项工作提出建议吗?