我想实现以下目标:
USB DAC 连接到 Linux 盒子。目前为止没有任何问题...
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
现在我的目标是使用 alsa 的 dmix 模块播放多个应用程序,并且这些虚拟通道应该使用 alsamixer 独立控制(这甚至可能吗?) - 是否可以将 dmix 通道映射到应用程序?例如,我可以让 mpd 始终播放到 2.1,而让另一个应用程序始终播放到 2.2?
答案1
我知道这是一个老问题……但这里有一个答案。我用一些我在旅行时必须使用的 USB 耳机进行了测试,因为我把好的耳机忘在家里了。
我的实际配置也使用了均衡插件,但已被省略。
使用Debian Sid,没有pulseaudio。据我了解,您只需要拥有多个与从属设备具有相同最终 dmix 输出的 softvol 接收器即可。
定义其中一些,它们都在底部使用相同的 dmix 从属设备,但每个都有唯一的名称(可能是pcm.generic_softvol0
,pcm.generic_softvol1
等等)。也给它们起不同的control
名字(也许soft0
,soft1
或者别的什么)。
我的 USB 输出只是用名称“Device”来标识自己,而不是有意义的名称。这就是您在下面看到的。
# generic headset softvol
pcm.generic_softvol {
type plug;
slave.pcm {
type softvol;
slave {
pcm "dmix:CARD=Device,DEV=0";
}
control {
name "soft"
card "Device"
}
}
}
这样,您应该能够在启动程序之前设置环境变量以更改其输出声音的位置。有了这个,如果您定义了像上面这样的附加软卷,您可以告诉特定程序使用它来播放(ALSA_PCM=generic_softvol0 program_name
例如;如果没有提供,它将使用定义的软卷来default
代替)。
pcm.!default {
type asym
playback.pcm {
@func getenv
vars [ ALSA_PCM ]
default "generic_softvol" # don't prefix with 'plug:' because generic_softvol is already a plug-type as we've defined it.
}
# Put your preferred capture device here for the default.
capture.pcm {
@func getenv
vars [ ALSA_CAPTURE_PCM ]
default "dsnoop:CARD=Loopback,DEV=1"
}
}