我有一个在 linux 上使用 ALSA 驱动程序的音频应用程序,并且该代码在 intel linux 台式机上运行良好。但是,我还想支持 Raspberry Pi,并且我在该平台上遇到了周期性的音频丢失和缓冲区欠载。公平地说,intel linux 上也会发生欠载,但它们并没有伴随令人讨厌的静态突发,这可能与该平台上的 ALSA 驱动程序有关。
无论如何,我得到两种类型的错误。首先,我的调用snd_pcm_wait()
有时会返回-EPIPE
代码。我捕获了这段代码,然后尝试调用snd_pcm_recover()
then snd_pcm_prepare()
,但是在随后的调用中仍然会出现一些静态失真snd_pcm_writei()
。这是从此类错误中恢复的正确方法吗?有没有办法在没有静电的情况下从中恢复?
当snd_pcm_wait()
成功返回时,我会打电话给snd_pcm_avail_update()
......在成功返回后我是否也应该这样做snd_pcm_recover()
?
我遇到的第二个问题是有时snd_pcm_writei()
也会返回-EPIPE
返回码。同样,我尝试在这种情况下打电话snd_pcm_recover()
,但仍然会听到咔哒声或其他讨厌的声音。有没有办法更优雅地从这个错误中恢复?