【问题标题】:how to run alsa application without killing pulseaudio?如何在不杀死pulseaudio的情况下运行alsa应用程序?
【发布时间】:2016-03-30 20:39:33
【问题描述】:

我正在编写一个使用 alsa 的应用程序。每次运行程序时,我都必须终止 pulseaudio,否则我会收到“资源繁忙”错误消息。我在我的 alsa 程序中使用“默认”设备。

这是我的 asoundrc:

pcm.!default {
type plug
slave.pcm "dmixer"
}

pcm.dmixer  {
type dmix
ipc_key 1024
slave {
    pcm "hw:1,0"
    period_time 0
    period_size 1024
    buffer_size 4096
    rate 44100
}
bindings {
    0 0
    1 1
}
}

ctl.dmixer {
type hw
card 1
}

【问题讨论】:

    标签: alsa pulseaudio


    【解决方案1】:

    您的 .asoundrc 明确绕过 PulseAudio。

    这些定义的目的是做软件混合,默认使用第二张卡。 两者都可以使用 PulseAudio 完成,因此只需删除此文件即可。

    【讨论】:

      【解决方案2】:

      要挂起(不杀死也不卸载)pulseaudio 以运行程序,请使用 pasuspender 应用程序。像这样:

      pasuspender -- program args
      

      例如,使用 aplay :

      pasuspender -- aplay music.wav
      

      第二个潜在问题是脉冲音频可以覆盖您的 asoundrc 默认设备。当您想要使用 ~/.asoundrc 文件中的默认设备运行 ALSA 应用程序时,这在某些 Linux 发行版上会出现问题。出于某种原因,ALSA 仍然决定覆盖我们的默认规范(在 ~/.asoundrc 文件中)并改用脉冲。

      在某些发行版上发生这种情况的原因是 alsa.conf 在很多地方搜索配置文件(以及您的 ~/.asoundrc 文件)。它搜索的地方之一是 /etc/alsa/conf.d/。在我的系统 /etc/alsa/conf.d/ 上有文件 99-pulseaudio-default.conf.example 似乎最后处理并覆盖任何个人选择的默认值。 99-pulseaudio-default.conf.example 文件设置如下:

      pcm.!default pulse
      

      将 pulse 覆盖为默认设备的一种方法(无需卸载 pulseaudio)是将负载挂钩放入 ~/.asoundrc 文件中。在 ~/.asoundrc 文件的顶部,指示 ALSA 重新加载配置文件 ~/.asoundrc。一个示例 ~/.asoundrc 文件如下:

      @hooks [
          {
              func load
              files [
                  "~/.asoundrc"
              ]
              errors false
          }
      ]
      
      pcm.!default {
          type hw
          card "AudioInjector.Pro"
      }
      
      ctl.!default {
          type hw
          card "AudioInjector.Pro"
      }
      

      【讨论】:

        猜你喜欢
        • 2022-12-20
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        相关资源
        最近更新 更多