在多个应用程序之间共享多声道声卡?

在多个应用程序之间共享多声道声卡?

我在 OBS 论坛上有一个问题,关于如何让该应用程序与其他应用程序共享但我的问题网站从不同的角度来解决这个问题。除了让某个特定应用程序不独占之外,我可以让 Ubuntu 本身从多通道卡中分配特定通道给不同的应用程序,否则这些应用程序将像 OBS 那样独占整个卡的控制权?

Lubuntu 20.04,所讨论的卡是 Behringer X32 数字声卡的 32 通道 USB 接口。我可以将 X32 内的任何信号路由到 USB“声卡”的任何通道,这样路由就可以在需要时绕过一些其他要求。

我需要 OBS 来接收立体声对,另一个录音机来接收 1 个通道作为单声道(可能是 ffmpeg,但不一定,因为该录音也需要视频,与 OBS 分开),以及 Ardour(DAW)来接收 24 个通道作为多轨。全部同时进行。

目前,我的路由在上面 24 个(# 9-32)上有多轨,在 1&2 上是立体声对,剩下的 6 个(# 3-8)是静音的,这样 OBS 坚持的 7.1 下混器就不会混淆。(除了“低音炮”音轨,下混器会忽略它,所以我暂时把单声道辅助音轨放在那上面)同样,如果需要,我可以重新排列所有这些通道分配,但它们必须都位于同一张 32 通道 USB 卡上。

在此处输入图片描述

我可以将这些频道拆分到需要它们的各个应用程序,以便每个应用程序都可以“独家”控制它认为分配给其的卡,并且只具有所需的频道数?

  • OBS 看到了立体声卡并且不再坚持 7.1 混音。
  • ffmpeg 或其他任何能看到单声道卡的程序不需要在其自己的命令行上过滤频道。
  • Ardour 可以看到 24 声道多轨录音,如果解决方案允许我这样合并,则可以看到 28-29 个声道。(将辅助音轨放在第 3 个声道上,将其余的声道交给 Ardour)如果 Ardour 可以看到全部 32 个声道,那么也可以,但这不是必需的,但我不想依靠在 Ardour 上使其他功能正常工作。因此,即使从技术上来说它可以解决问题,Ardour 中也没有直通。

更新2020-11-08:

我已经做到了这一点,到目前为止它似乎可以正常工作,但要使它成为 OBS 中的永久源,而不是与特定场景绑定(并忘记将其添加到一个关键场景),似乎我需要它是一个 PulseAudio 设备。那么我怎样才能让 Jack 进入像其他 PA 设备一样枚举的 PA 环回呢?

在此处输入图片描述

答案1

这正是我所缺少的!
https://www.youtube.com/watch?v=6J-RQudJx30

显然,Google 认为告诉我 PulseAudio 现在可以直接与 Jack 配合使用并不重要。论坛上有很多关于这个问题的问题,但都没有答案……

无论如何,按照视频进行设置,PA 会创建一个环回设备供 Jack 连接。然后 Jack 会像往常一样进行连接。


本质上,步骤如下:

  1. 如果尚未安装 Jack,请安装。
    sudo apt install jackd

  2. 为其安装 PulseAudio 模块。
    sudo apt install pulseaudio-module-jack

  3. 编辑 PA 的配置文件。
    sudo nano /etc/pulse/default.pa
    (视频中使用了 vim,我更喜欢 nano,您可以使用自己喜欢的)

  4. 添加一些行### Load audio drivers statically...
    load-module module-jack-sink
    load-module module-jack-source

  5. 在下面添加一些行### Make some devices default
    set-default-sink jack_out
    set-default-source jack_in

  6. 保存并关闭文件。

  7. 重启 PulseAudio。重启整个机器可能是最简单的方法,这也是“重启生存”测试,在完全依赖它之前,你确实应该这样做。

现在,当系统启动并且 PulseAudio 启动时,它也会启动 Jack 并使其成为默认设置。(熟悉的 GUI 控件中的“后备”)

您现在还听不到任何声音,因为 Jack 默认不连接任何设备。因此,打开“连接”窗口,单击两侧的单个通道,然后单击底部的“连接”。现在您应该有声音了!您的连接选项现在在 Jack 中,非常灵活。

在此处输入图片描述

如果您希望让您的连接在重启后仍然有效,您可以定义一个连接文件并在启动时加载(激活 Patchbay 持久性):

在此处输入图片描述

如何创建该文件如下所示,但它并不是直观的:
https://www.rncbc.org/drupal/node/76

您需要使用 Patchbay,而不是 Connect 窗口。我不知道为什么它们如此相似但又如此独立,也不知道为什么易于使用的 Connect 窗口不只是有一个 Save 按钮来为您完成所有这些操作。但无论如何,至少可能的,具体方法如下:

在此处输入图片描述

您可能会注意到,这里的连接不再是单个通道之间的连接,而是设备之间的连接,而且并非所有设备都拥有它们应有的所有通道。这是此工具与另一个工具相比乍一看不直观的区别。

要设置持久补丁,首先单击左上角的“新建”按钮,不要让它创建现有连接的快照。它不是那么智能,而且会出错。相反,从一张白纸开始,创建一组自定义设备,每个设备都有您想要作为一个组连接的特定通道。

每侧的添加按钮都会弹出以下窗口:

在此处输入图片描述

给这个新设备命名,并选择它使用的客户端。(多个设备可以使用同一个客户端,所以不必担心锁定自己)然后只添加此特定设备将要使用的通道(“插头”)。所有这些通道都将按照它们在此处出现的顺序连接到另一个设备的所有通道。您还可以重命名每个通道,但我认为如果您对其进行如此自定义,很容易忘记哪个是哪个。

以这种方式在每一侧创建所有设备或“通道组”,然后在设备级别上连接它们,方法是单击每一侧的设备,然后单击底部的连接按钮。
(我还有一些全计数设备,它们哪儿也不去,只是为了提醒我正在使用什么。)

在此处输入图片描述

现在您可以在“激活 Patchbay 持久性”中保存设置窗口所需的 .xml 文件。

在此处输入图片描述

并设置qjackctl为在启动时运行,以便它可以依次加载该文件。用户空间就可以了;它不需要是 root。

相关内容