ALSA:开启和关闭PCM On-The-Fly

时间:2010-12-17 21:22:53

标签: c linux audio alsa

我有一个执行以下操作的程序:

  1. 使用 snd_pcm_open()功能
  2. 打开默认PCM
  3. 发送样本以播放声音
  4. 使用 snd_pcm_close()功能
  5. 关闭PCM

    程序将定期播放它收到的任何声音请求,但偶尔打开会失败并返回“设备或资源忙”错误。这通常发生在有很多声音文件时。但是,近距离通话总是成功的。我认为,如果关闭成功,PCM将立即可供其他人使用。我还要补充一点,系统中没有其他任何东西使用声音。

    ALSA是否仍有可能在收盘后需要清理一些资源? PCM接口是不是经常设计为打开和关闭? Internet上的大多数示例在启动时打开PCM流并在关闭时关闭它。

1 个答案:

答案 0 :(得分:2)

不要经常关闭和打开它。你可以用

snd_pcm_open()snd_pcm_close()只需一次(应用程序的开始和结束),并在您要重置流时使用此功能:

snd_pcm_drop()

snd_pcm_prepare()

通常这应该不是问题,因为dmix可以处理多个流。但是,如果您正在使用直接hw:0访问,则close()步骤可能在某种程度上是异步的,即立即open()可能无法正常工作。