如何同时在 3.5 毫米立体声插孔和 UPnP 流上输出声音?

Dav*_*ave 2 audio music output upnp

想象一下标准的台式计算机。通过普通的 3.5 毫米立体声插孔 (AUX) 连接到这台计算机的是一对扬声器。到目前为止一切正常。


现在我们在大楼的另一个房间里有一个扬声器,它确实支持接收UPnP-streams。

如何配置基于 Debian 的系统以继续在经典立体声插孔上发出声音,同时还通过 流式传输它 UPnP,以便我可以同时为两个扬声器供电?

小智 7

我将发布一个我一直在使用的 hacky 解决方法,直到专家告诉我们如何正确地做到这一点:) 公平警告,我所拥有的大部分内容都来自勤奋的货物培养,因此我很可能没有遵循最好的方法实践,不要把这篇文章作为纠正术语的指南。我的用例是我必须为 MS Teams 找到一个不允许共享系统音频的解决方案,我将描述我当前的设置。

我假设你有pulseaudio,你可以在你的设置中找到支持UPnP的扬声器作为输出设备,你唯一的问题是将音频发送到两个不同的地方。如果情况并非如此,那么下面的答案可能对您没有帮助。

您可以创建一个虚拟设备

pactl load-module module-null-sink sink_name=myduplexsink
Run Code Online (Sandbox Code Playgroud)

这将创建一个空接收器,它就像一个盒子,您可以将音频导入和导出。接收器名称可用于通过设置一些内容以编程方式保留您的设置,~/.pulse/default.pa但我的设置不够可靠,我还没有考虑将其全部自动化。

您还需要两个(我认为)环回,它们的作用类似于连接设备的虚拟电缆:

pactl load-module module-loopback
pactl load-module module-loopback
Run Code Online (Sandbox Code Playgroud)

环回不能命名;据我所知,如果您要自动执行此操作,您会在创建时指定它们的源和接收器。

现在对于交互式解决方案,(安装和)打开pavucontrol这是一个增强的脉冲音频配置面板。它有五个选项卡:

  1. 播放:在这里您应该看到任何程序正在创建您想要共享到两个地方的声音。在我的用例中,这是mplayer,我希望它的音频被引导到一个空接收器(连同我的麦克风的输出)和我的耳机。这也是您指定您创建的每个环回的接收器的选项卡。
  2. 录音:这是需要音频输入的程序出现的地方。在我的用例中,这是 MS Teams,但我认为在你的情况下没有。但是这个选项卡还配置了每个环回的来源。
  3. 输出设备:您应该在这里看到您的扬声器(我希望都是那种)和名为 Null Output 的空接收器。
  4. 输入设备:您应该在这里看到您的麦克风(如果有)以及每个“监视器”设备。对于每个输出设备,您都有一个可以用作输入的“监视器”。如果您的扬声器正在播放蓬勃发展的音乐,那么扬声器的显示器会将音乐作为音频信号传输。
  5. 配置:现在应该忽略它:P

所以我认为你应该做的:

  1. 启动提供音频的程序(例如音乐软件)。在 Playback 选项卡中pavucontrol找到与该程序对应的行,并将其发送到“Null Output”。现在您有一个虚拟设备(空接收器),其中包含您要拆分的音频。
  2. 仍在播放选项卡中设置一个环回以使用您的扬声器(如果我的笔记本电脑有任何指示,称为“内置模拟立体声”),另一个环回将您的 UPnP 扬声器用作接收器。
  3. 在“录制”选项卡中,将两个环回的源设置为“空输出监视器”。

现在,您的输入音频进入空接收器,并将其同时传向本地扬声器和 UPnP 扬声器。希望这正是您所需要的。

我已经根据这篇文章将其中的大部分内容整合在一起。它简要提到,一旦您手动设置了工作配置,您就可以使用pacmd info和挖掘您想要使用的音频设备的名称。这将允许您在 pulseaudio 启动时自动重新创建配置,方法是向~/.pulse/default.pa. 我一直无法让这个工作,但主要是因为我有一套奇怪的耳机,可以根据情况在多个设备名称下识别。这对您来说可能不是问题。所以在这种情况下,你的新行~/.pulse/default.pa看起来像这样:

load-module module-null-sink sink_name=myduplexsink
load-module module-loopback source=myduplexsink.monitor sink=<device ID of your local speakers>
load-module module-loopback source=myduplexsink.monitor sink=<device ID of your UPnP speakers> 
Run Code Online (Sandbox Code Playgroud)

设备 ID 可能列在pacmd info“[n] 个接收器可用”下的输出中。在您的情况下,n可能至少有 3 个:两个扬声器和myduplexsink. 您还可以在输出顶部看到“默认接收器名称”,它可能对应于您的本地扬声器。您可能仍然需要pavucontrol手动将提供音频的软件定向到您的“空输出” 。

如果您的 UPnP 扬声器通过显示在“录音”选项卡中的某个程序馈送,pavucontrol那么它就更容易了:您可以直接告诉它从“空输出监视器”中提取音频,并且您只需要一个环回即可馈送相同的信号到您的本地扬声器。