在 systemd 或 xsession 上启动时,PulseAudio 模块未正确配置,但从终端启动时工作正常

在 systemd 或 xsession 上启动时,PulseAudio 模块未正确配置,但从终端启动时工作正常

我正在尝试创建一些虚拟源,以便我几乎可以拥有一个在所有无法直接从虚拟接收器获取“.monitor”的应用程序上可接受的麦克风。

基本上这就是我计划创建的内容:

For System Audio recording :
Any Application Audio -> PulseEffects(apps) -> A_SINK -> alsa-card......

A virtual mic so I can pass an output as a input :
FFMPEG -> MIC_IN -> MIC_OUT

Combined 
A_SINK ==========\
                  |=> Mixed -> Mixed_OUT
MIC_OUT =========/

到目前为止一切顺利,经过一些测试,这就是我想出的:

For System Audio recording :
Application -> module-null-sink("TIRTAGT_SINK") -> module-loopback("alsa_output.pci.analog-stereo")



For virtual mic :
FFMPEG -> module-null-sink("TIRTAGT_MIC_IN") -> module-remap-source(master="TIRTAGT_MIC_IN.monitor", source_name="TIRTAGT_MIC_OUT")



For Combined Mic and System Audio :
module-loopback(source="TIRTAGT_SINK.monitor") =====\
                                                     |==> module-null-sink("TIRTAGT_Mixed")
module-loopback(source="TIRTAGT_MIC_OUT") ==========/                  ||
                                                                       \/
module-remap-source(master="TIRTAGT_Mixed.monitor" source_name="TIRTAGT_Mixed_OUT")


一切都工作得很好,所以我然后修改/home/matthewtirta/.config/pulse/default.pa以在文件末尾添加此行:

### Import addon for additional configuration
.nofail
.include /home/matthewtirta/.config/pulse/presets

以及我放入目录中的相应命令/home/matthewtirta/.config/pulse/presets

  • 对于系统音频录制(00-TIRTAGT_SINK.pa):
load-module module-null-sink sink_name='TIRTAGT_SINK' sink_properties=device.description='TIRTAGT_SINK'

load-module module-loopback source="TIRTAGT_SINK.monitor" sink="alsa_output.pci-0000_05_00.6.analog-stereo" latency_msec=25

set-default-sink TIRTAGT_SINK
  • 对于虚拟麦克风:
load-module module-null-sink sink_name="TIRTAGT_MIC_IN" sink_properties=device.description='TIRTAGT_MIC_IN'

load-module module-remap-source master="TIRTAGT_MIC_IN.monitor" source_name="TIRTAGT_MIC_OUT" source_properties=device.description='TIRTAGT_MIC_OUT'

set-default-source TIRTAGT_MIC_OUT
  • 对于组合麦克风和系统音频 (02-TIRTAGT_Mixed.pa):
load-module module-null-sink sink_name="TIRTAGT_Mixed" sink_properties=device.description='TIRTAGT_Mixed'

load-module module-loopback source="TIRTAGT_SINK.monitor" sink="TIRTAGT_Mixed" latency_msec=25
load-module module-loopback source="TIRTAGT_MIC_OUT" sink="TIRTAGT_Mixed" latency_msec=25

load-module module-remap-source master="TIRTAGT_Mixed.monitor" source_name="TIRTAGT_Mixed_OUT" source_properties=device.description='TIRTAGT_Mixed_OUT'

pulseaudio -k为了进行测试,我然后以普通用户身份运行来停止pulseaudio服务器。此时,pulseaudio 停止并由管理的 systemd 重新启动pulseaudio.socket,然后我运行pavucontrol,这是输出:

Pavucontrol 播放选项卡

Pavucontrol 录制选项卡

Pavucontrol 输出设备

Pavucontrol 输入设备

它们似乎与加载模块命令配置的内容不正确。

然而,我太感兴趣了,想看看结果,所以无论如何我还是开始测试,即使 pavucontrol 显示环回和重映射与它们应该指向的方向不一致。

这次体验非常令人失望,虚拟麦克风输出(TIRTAGT_MIC_OUT)现在可以在我的扬声器上听到,这意味着它以某种方式循环/重定向到 TIRTAGT_SINK ......然后我再看一眼pavucontrol,看起来像它确实被重定向到 TIRTAGT_SINK :

为什么麦克风要连接到扬声器?

所以我很好奇尝试再次重新启动pulseaudio -k,此时 systemd 会立即再次启动pulseaudio 服务器。

不幸的是同样的结果。

所以这一次......我尝试通过使用禁用systemd自动加载systemctl --user stop pulseaudio.socket pulseaudio.service。 Pulseaudio 似乎已经停止运行。然而,为了确保它没有运行,我运行另一个pulseaudio -k,然后手动启动它pulseaudio -D

Pulseaudio 现在再次运行,如下所示pavucontrol在此输入图像描述

在此输入图像描述

*由于信誉度低于 10 的人最多可以有 8 个链接,因此省略了 2 个选项卡,但这与 systemd 场景中的一模一样

环回和重新映射对我来说看起来是正确的,所以我决定再进行一次测试,它的性能正是我所期望的。现在我可以录制桌面音频,同时还可以运行 FFMPEG 并将其指向接收TIRTAGT_MIC_IN器。

屏幕录像机捕捉TIRTAGT_Mixed_OUT,一切正常!

所以我想,让我们保持 systemd 禁用并放入pulseaudio -D &我的~/.xsession文件中,以便在会话登录时启动pulseaudio。

然后我关闭并再次启动我的机器,通过查看顶部面板上的 xfce4-pulseaudio-plugin,pulseaudio 已在线,所以我再次开始测试!

令我惊讶的是,现在一切都变得一团糟,就像 systemd 启动pulseaudio 而不是我在终端上启动时所做的那样。

我不确定这里发生了什么,非常感谢任何帮助!

好吧,我实际上可以在pulseaudio -D &每次会话启动时键入命令,但如果确实可能的话,我宁愿不手动键入它。

相关内容