如何在不杀死pulseaudio的情况下运行alsa应用程序?

时间:2015-12-24 11:32:23

标签: alsa pulseaudio

我正在编写一个使用alsa的应用程序。每次运行程序时我都要杀掉pulseaudio,否则我会收到“ressource busy”错误消息。我在我的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
}

2 个答案:

答案 0 :(得分:0)

您的.asoundrc明确绕过PulseAudio。

这些定义的目的是进行软件混合,并默认使用第二张卡。 两者都可以用PulseAudio完成,所以只需删除这个文件。

答案 1 :(得分:0)

要暂停(不杀死也不卸载)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

将脉冲覆盖为默认设备(无需卸载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"
}