我的声卡是 Audigy SE [SB0570]。
我想不仅在扬声器上而且在耳机上同时播放相同的立体声流。
我在我的空 ~/.asoundrc 上尝试这个配置
pcm.quad {
type multi
slaves.a.pcm "hw:0,0" #green hole
slaves.a.channels 2
slaves.b.pcm "hw:0,2" #black hole
slaves.b.channels 2
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}
pcm.!default quad
Run Code Online (Sandbox Code Playgroud)
它就像我想要的那样工作。但是现在许多流之间的共享频道已损坏,我无法同时播放 2 个 mp3 文件。
顺便说一下/etc/asound.conf也是空的。我不知道真正的系统 alsa 配置在哪里,可能是这个/var/lib/alsa/asound.state fat 非常难以理解,有 4705 行和数百个control.##块。
als*_*ser 12
你的想法是正确的。您可以使用“type multi” alsa 模块向两个不同的设备播放声音。您只需要稍微扩展它即可构建完整的链。
卡名。通常最好使用卡片名称而不是索引:“hw:CardName,2”而不是“hw:0,2”,因为卡片索引可能会在重新启动时更改,而名称通常不会更改。您可以在输入cat /proc/asound/cards和aplay -l输出中看到卡片名称。对于您的卡,名称可能是“CA0106”。
混合。要允许多个应用程序同时播放,请在播放链中的“type multi”和“hw”之间放置“type dmix”。“type dmix”模块将多个应用程序混合到同一个硬件缓冲区中。
路线。您的“type multi”模块将输入通道 0,1,2,3 映射到从站“a”的输出通道 0,1 和从站“b”的通道 0,1,这意味着您有 4 个输入通道,而您有只有 2 个通道(立体声)。要将 2 声道立体声转换为 4 声道以进行“type multi”,请先使用“type route” pcm 将声道 0,1 复制到 0,1 和 2,3。
插头。不同的应用程序可能会尝试播放您的硬件不直接支持的格式/速率。因此,将“类型插头”自动转换模块放在播放链链中的首位是一个很好的做法——它将任何输入格式/速率转换为支持的输出。
总体而言,播放链将如下所示:
default = plug -> route -> multi -> (dmix->hw:CA0106,0 + dmix->hw:CA0106,2)
Run Code Online (Sandbox Code Playgroud)
Asym:但这只是播放链。如果您想将“默认” pcm 指向它是不够的,因为“默认”是默认情况下用于播放和捕获的 pcm 。要允许应用从“默认”录制,您需要使用“type asym”模块为其定义不同的播放和捕获链。捕获链可以如下所示:
default = plug <- dsnoop <- hw
Run Code Online (Sandbox Code Playgroud)
(“type dsnoop”是一个类似 dmix 的捕获模块——它允许从同一设备捕获多个应用程序)
您可以手动定义这些 pcms,但我建议走捷径并重用预定义的“plug”、“dmix”和“dsnoop” pcms(在/usr/share/alsa/alsa.conf、/usr/share/alsa/pcm/dmix.conf、 中定义/usr/share/alsa/pcm/dsnoop.conf)。那么整个配置将是:
pcm.quad {
type multi
slaves.a.pcm "dmix:CA0106,0"
slaves.a.channels 2
slaves.b.pcm "dmix:CA0106,2"
slaves.b.channels 2
bindings.0 { slave a; channel 0; }
bindings.1 { slave a; channel 1; }
bindings.2 { slave b; channel 0; }
bindings.3 { slave b; channel 1; }
}
pcm.stereo2quad {
type route
slave.pcm "quad"
ttable.0.0 1
ttable.1.1 1
ttable.0.2 1
ttable.1.3 1
}
pcm.!default {
type asym
playback.pcm "plug:stereo2quad"
capture.pcm "plug:dsnoop:CA0106"
}
Run Code Online (Sandbox Code Playgroud)
将其放入~/.asoundrc(仅限您的用户)或/etc/asound.conf(所有用户)。
PS:人们通常希望在重启后保留他们的卷。许多发行版alsactl store在关机时运行以保存当前的音量控制,并alsactl restore在启动时重新加载这些音量控制。默认情况下,alsactl将这些音量控制保存在/var/lib/alsa/asound.state. 这是该文件的唯一目的。
链接: