![如何将单个音频通道重定向至不同的设备?](https://linux22.com/image/962758/%E5%A6%82%E4%BD%95%E5%B0%86%E5%8D%95%E4%B8%AA%E9%9F%B3%E9%A2%91%E9%80%9A%E9%81%93%E9%87%8D%E5%AE%9A%E5%90%91%E8%87%B3%E4%B8%8D%E5%90%8C%E7%9A%84%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
我刚买了一个蓝牙立体声音箱,我有一个想法:
能否使用我的蓝牙扬声器作为后置扬声器,并使用两个普通有线立体声扬声器(或另一对蓝牙扬声器)作为前置扬声器,构建 4.0 音频系统?我必须使用哪个程序?
一般来说:是否可以将 4.0 或 5.1 信号分离到单个通道并将其发送到多个设备?
答案1
我通过结合这个帖子的建议让它发挥作用http://forums.gentoo.org/viewtopic-t-859769-start-0.html和这篇文章。http://confignewton.com/?p=211
从 confignewton 文章中,按照其中说明操作,在 default.pa 和 system.pa 中注释掉 module-udev-detect 和 module-detect 行
接下来,我将其添加到 default.pa:
### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
load-module module-alsa-sink sink_name=rear device=hw:0 channels=2 channel_map=rear-left,rear-right tsched=0
load-module module-alsa-sink sink_name=front device=hw:1 channels=2 channel_map=front-left,front-right tsched=0
在 default.pa 的末尾,我添加了一行类似于 gentoo 线程中讨论的内容:
load-module module-combine channels=4 channel_map=front-left,front-right,rear-left,rear-right
编辑:我在每个静态声明的末尾都添加了“tsched=0”。它确实对回声和噼啪声有帮助。
答案2
您可以使用一个名为杰克。它可以让您将源的输出传输到您想要的任何设备的任何通道。
sudo apt-get jack2d jack-tools qjackctl
jack2d:是 Jack 的较新版本
jack-tools:更多 jack 工具
qjackctl:图形用户界面
安装后用于qjackctl
调出 GUI。
使用 jack 可以做的事情的示例;
- 将音频从一个源传输到所有设备以实现同步音频。
- 将左声道发送到一对扬声器的两个声道,将右声道发送到另一对扬声器
可能性是无穷无尽的。以下是 Jack 帮助页面上的一张图片
在左侧,您可以看到您的输出源,在右侧是您可以输出到的设备。
这是 3 个 LR 音频源的图片,其中 2 个通过管道连接到 1 个扬声器,
并将另一个来源发送给另一位发言者。
答案3
严格来说不是。单个声卡处理所有通道的同步数据,并使前左声道增强 x%,后右声道减弱 x%,以便屏幕前左声道的爆炸听起来正确。或者当喷气式飞机从后方飞过时则相反。
您可以进行伪设置,但如果您想要好声音,请购买合适的卡和扬声器。装备精良、设置良好的系统可以发出令人惊叹的声音。我为妻子的电脑买了一个 omega 声卡,因为她看了很多 DVD,即使使用我们现有的 cheezy 扬声器,声音也不错。当我拿到那个 omega 时,我非常惊讶,一张好的声卡能带来如此大的不同。我习惯了 creative labs audigy。
答案4
回答最初的问题,是的,这可以通过 PulseAudio 来实现,但是您无法在蓝牙扬声器和非蓝牙扬声器之间实现完美的同步,因此如果您想将其用于“正常”聆听,您可能不会喜欢这个结果。
然而,是不需要完美同步的情况。在我们的案例中,我们正在播放双语视频,左声道是英语,右声道是另一种语言,我们希望将右声道发送到单独的蓝牙设备,而将左声道发送到默认声音设备(在我们的案例中是来自 Raspberry Pi 400 的 HDMI 音频)。只要音频保持在半秒左右的范围内,我们就不会介意这种情况下的小延迟差异。
当其中一个设备是蓝牙时,尝试执行此load-module module-combine
操作default.pa
不起作用,因为 Pulseaudio 在初始化期间读取该行时尚未完成与蓝牙设备的连接。相反,我们必须先连接到蓝牙设备,然后发出 load-module 命令在运行时,换句话说就是:
pacmd list-sinks | less
并记下接收器名称(如果您的蓝牙接收器不存在,请连接到它并重复此命令),然后
pactl load-module module-combine-sink sink_name=duplicate slaves=alsa_output.platform-fef05700.hdmi.hdmi-stereo,bluez_sink.01_23_45_67_89_AB.a2dp_sink channels=2
将两个接收器名称更改为上面命令列出的名称list-sinks
,然后
pacmd set-default-sink duplicate
现在,如果您播放声音,您会发现它在两个设备上都播放,也许它们之间会有一点延迟(正如我所说,同步可能不是完美的)。要更有选择性地选择哪个通道进入哪个设备,请运行pavucontrol
(如果您没有它,那么就sudo apt install
运行它),然后在“输出设备”选项卡中静音底层设备上您不想要的通道,例如静音 HDMI 设备上的右侧通道,静音蓝牙设备上的左侧通道。