如何将单个音频通道重定向至不同的设备?

如何将单个音频通道重定向至不同的设备?

我刚买了一个蓝牙立体声音箱,我有一个想法:

能否使用我的蓝牙扬声器作为后置扬声器,并使用两个普通有线立体声扬声器(或另一对蓝牙扬声器)作为前置扬声器,构建 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 设备上的右侧通道,静音蓝牙设备上的左侧通道。

相关内容