我已经从事这个工作大约一个月了,并且尝试了十几种不同的方法来优化/自动化该过程。基本上希望能够进行类似于语音计(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 作为管道线的接口。