我正在使用ASLA Audio API在我的嵌入式Linux应用程序中播放声音。我有时观察到snd_pcm_writei
API返回–EPIPE
错误,当发生错误时我调用snd_pcm_prepare
(基本上准备PCM重复使用)。
if ((err = snd_pcm_writei (playback_handle, buf, nframes)) < 0)
{
if ((err = snd_pcm_prepare (playback_handle)) < 0)
return err;
}
我发现一些建议,在这种情况下,使用snd_pcm_prepare
代替snd_pcm_recover
应该是正确的方法。在尝试修复之前,我只是想知道是否有人可以帮助我理解如何设置PCM设备以从写入期间可能发生的欠载或其他错误中恢复。
snd_pcm_recover()
函数处理更多错误代码,因此您应该使用它。但无论如何它最终都会调用snd_pcm_prepare()
(参见source code)。
snd_pcm_prepare()
并没有什么特别之处;这只是重新初始化流的最简单方法。