我的声卡是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就像我想要的那样。但是现在很多流之间的共享通道被打破了,我不能同时播放两个mp3文件。
顺便说一下,/etc/asound.conf也是空的。我不知道真实的系统在哪里,阿尔萨吐露,可能是这种/var/lib/alsa/asound.state脂肪非常难以理解的4705行和数百个control.##块。
发布于 2017-05-27 14:18:16
你的想法是正确的。您可以使用“类型多”阿尔萨模块来播放声音到两个不同的设备。你只需要稍微扩展一下就可以构建完整的链了。
卡名。通常最好使用卡片名而不是索引:"hw:CardName,2“而不是"hw:0,2”,因为卡索引在重新启动时可能会改变,而名称通常不会改变。您可以在cat /proc/asound/cards和aplay -l输出中看到卡名。对于您的卡,名称可能是"CA0106“。
Dmix.为了允许多个应用同时播放,在你的回放链中放置“类型多”和"hw“之间的”类型dmix“。“类型dmix”模块将多个应用程序混合到同一个硬件缓冲区中。
路。您的“类型多”模块将输入通道0、1、2、3映射到输出通道0,1从"a“和通道0,1从"b",这意味着您有4个输入通道,而您只有2个通道(立体声)。要将2声道立体声转换为4声道,在其前面加上“类型路由”pcm,将0、1和2、3两个频道复制。
插头。不同的应用程序可能尝试播放格式/速率,但硬件不直接支持。因此,将“类型插件”自动转换模块放在回放链的第一位是一个很好的实践--它将将任何输入格式/速率转换为支持的输出。
总的来说,回放链将类似于:
default = plug -> route -> multi -> (dmix->hw:CA0106,0 + dmix->hw:CA0106,2)Asym:但那只是回放链。如果要将“默认”pcm指向它,这是不够的,因为“默认”是默认情况下用于播放和捕获的pcm。要允许应用程序从“默认”记录,您需要定义不同的回放和捕获链,为它使用“类型的异步”模块。捕获链看起来可以是:
default = plug <- dsnoop <- hw("type dsnoop“是一个用于捕获的类似dmix的模块,它允许从同一设备捕获多个应用程序)
您可以手动定义每个pcms,但我建议您采取捷径,重用预定义的“插件”、"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"
}将其放在~/.asoundrc (仅限用户)或/etc/asound.conf (所有用户)中。
PS:人们通常希望在重启过程中保存它们的卷。因此,许多发行版在关闭时运行alsactl store以保存当前的卷控件,在启动时运行alsactl restore以重新加载这些卷控件。默认情况下,alsactl将这些卷控件保存在/var/lib/alsa/asound.state中。那是那个文件的唯一目的。
链接:
https://stackoverflow.com/questions/43939191
复制相似问题