我有一个执行以下操作的程序:
程序将定期播放它收到的任何声音请求,但偶尔打开会失败并返回“设备或资源忙”错误。这通常发生在有很多声音文件时。但是,近距离通话总是成功的。我认为,如果关闭成功,PCM将立即可供其他人使用。我还要补充一点,系统中没有其他任何东西使用声音。
ALSA是否仍有可能在收盘后需要清理一些资源? PCM接口是不是经常设计为打开和关闭? Internet上的大多数示例在启动时打开PCM流并在关闭时关闭它。
答案 0 :(得分:2)
不要经常关闭和打开它。你可以用
snd_pcm_open()
和snd_pcm_close()
只需一次(应用程序的开始和结束),并在您要重置流时使用此功能:
snd_pcm_drop()
和
snd_pcm_prepare()
通常这应该不是问题,因为dmix可以处理多个流。但是,如果您正在使用直接hw:0访问,则close()步骤可能在某种程度上是异步的,即立即open()可能无法正常工作。