我正在编写一个使用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
}
答案 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"
}