为流媒体目的设置永久的额外音频接收器/源?

为流媒体目的设置永久的额外音频接收器/源?

我已经从事这个工作大约一个月了,并且尝试了十几种不同的方法来优化/自动化该过程。基本上希望能够进行类似于语音计(windows),但在 Linux (arch) 中。

我当前的解决方法是在启动时运行以下 pactl 命令:

    { path = "pactl"        args = "load-module module-null-sink sink_name=Virtual1" }
    { path = "pactl"        args = "load-module module-null-sink sink_name=Virtual2" }
    { path = "pactl"        args = "load-module module-loopback sink=Virtual1" }
    { path = "pactl"        args = "load-module module-loopback sink=Virtual1" }
    { path = "pactl"        args = "load-module module-loopback sink=Virtual1" }

接下来,我手动重新路由特定渠道在帕夫控制中。但时不时地(特别是挂起后)路由会重置为完全随机的东西,我必须返回到 pavucontrol 并进行必要的更改(特别是在播放选项卡中)。环回模块的加载顺序有时也会被打乱,这进一步加剧了我每次打开系统时必须执行的手动任务的混乱。

我的要求是将麦克风和应用程序音频结合起来,然后通过麦克风发送(例如:discord)。

有没有什么办法可以让接收器和源不会在每次启动时重置它们/每次都重新分配它们?或者也许是一种自动重新路由通道的过程的方法,以便它们准确地到达我需要的地方(至少是虚拟流)?

答案1

我也遇到过类似的问题。即使我有一个在登录时设置这些接收器的脚本,实际保存线路似乎还没有在诸如此类的工具中实现helvum。维基百科确实提供了一些脚本来为您处理这个问题: pw-savewires

#!/bin/bash

if [[ "$#" -ne 1 ]]; then
    echo
    echo 'usage: pw-savewires filename'
    echo
    exit 0
fi

rm $1 &> /dev/null
while IFS= read -r line; do
    link_on=`echo $line | cut -f 4 -d '"'`
    link_op=`echo $line | cut -f 6 -d '"'`
    link_in=`echo $line | cut -f 8 -d '"'`
    link_ip=`echo $line | cut -f 10 -d '"'`
    echo "Saving: " "'"$link_on:$link_op"','"$link_in:$link_ip"'"
    echo "'"$link_on:$link_op"','"$link_in:$link_ip"'" >> $1
done < <(pw-cli dump short link)

当给定参数文件名时,它将读取您当前的接线并将其保存到文件中:pw-savewires foo创建名为的文件foo

另一个名为 pw-restore 的脚本可用于恢复这些线路: pw-loadwires

#!/bin/python

import sys
import csv
import os

if len(sys.argv) < 2:
    print('\n usage: pw-loadwires filename\n')
    quit()

with open(sys.argv[1], newline='') as csvfile:
    pwwreader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in pwwreader:
        print('Loading:  ' + row[0] + ' --> ' + row[1])
        process = os.popen('pw-link ' + row[0] + ' ' + row[1])

所以pw-loadwires foo应该恢复文件中保存的线路配置foo。希望这有帮助。

答案2

特别是对于不和谐,如果您愿意花精力进行设置,您可以在屏幕共享中完全启用应用程序音频,这里是 github 上的指南: https://github.com/edisonnano/Screenshare-with-audio-on-Discord-with-Linux 至于你更普遍的问题,我也有兴趣得到答案。如果您在当前设置中使用 Pipewire,您可能会发现 helvum 作为 GUI 配线架非常有用。我的一个朋友使用 qjackctl 作为 GUI patchbay 一段时间,它也可以保存和加载配置,但使用 jack 作为管道线的接口。

相关内容