如何使用PulseAudio同时启用内置音频输出和HDMI音频输出?

如何使用PulseAudio同时启用内置音频输出和HDMI音频输出?

我已经搜索这个问题好几天了,并尝试了各种建议的解决方案,但没有成功。

基本上,我有一台带有内置音频(输出到耳机插孔或内置扬声器)和 HDMI 的笔记本电脑。我正在使用 KDE 运行 Debian 7.5。

以前,我仅运行 ALSA,并且能够将 Skype 配置为在 HDMI 上响铃,但使用耳机进行通话。我想使用 Pulse 实现类似的目标。

我不确定 Skype 在将铃声和呼叫音频发送到 PulseAudio 时是否仍然将它们分开,但由于 Skype 的 Linux 版本可以在事件上运行任意脚本,如果我可以使用egaplay在 HDMI 端口上播放某些内容,我会很高兴。然而,无论我做什么,我总是只看到(并且只能使用)一个输出设备。

aplay -l:

**** 播放硬件设备列表 ****
卡 0:PCH [HDA Intel PCH],设备 0:ALC269VB 模拟 [ALC269VB 模拟]
  子设备:1/1
  子设备#0:子设备#0
卡 0:PCH [HDA Intel PCH],设备 3:HDMI 0 [HDMI 0]
  子设备:1/1
  子设备#0:子设备#0

aplay -L:

默认
    通过 PulseAudio 声音服务器播放/录音
系统默认:CARD=PCH
    HDA 英特尔 PCH、ALC269VB 模拟
    默认音频设备
前面:CARD=PCH,DEV=0
    HDA 英特尔 PCH、ALC269VB 模拟
    前置扬声器
环绕40:卡= PCH,DEV = 0
    HDA 英特尔 PCH、ALC269VB 模拟
    4.0 环绕声输出至前置和后置扬声器
环绕41:卡= PCH,DEV = 0
    HDA 英特尔 PCH、ALC269VB 模拟
    4.1 环绕声输出至前置、后置和低音炮扬声器
环绕50:卡= PCH,DEV = 0
    HDA 英特尔 PCH、ALC269VB 模拟
    5.0 环绕声输出至前置、中置和后置扬声器
环绕51:卡= PCH,DEV = 0
    HDA 英特尔 PCH、ALC269VB 模拟
    5.1 环绕声输出至前置、中置、后置和低音炮扬声器
环绕71:卡= PCH,DEV = 0
    HDA 英特尔 PCH、ALC269VB 模拟
    7.1 环绕声输出至前置、中置、侧置、后置和低音扬声器
hdmi:卡=PCH,DEV=0
    HDA 英特尔 PCH、HDMI 0
    HDMI 音频输出

当我尝试直接使用 hdmi 设备时,出现以下错误:

$ aplay -D hdmi 警报.wav
播放 WAVE 'alert.wav':带符号 16 位 Little Endian,速率 22050 Hz,单声道
aplay: set_params:1087: 通道数不可用

在 中pavucontrol,在“配置”选项卡下,我看到一个Profile包含以下选项的下拉菜单:

模拟立体声双工
模拟立体声输出
模拟立体声 (HDMI) 输出 + 模拟立体声输入
模拟立体声 (HDMI) 输出
模拟立体声输入
离开

据我所知,所有这些都按(可能)预期工作:那些说 HDMI 会将音频输出定向到 HDMI 端口;其他的到内置声卡。无论我选择哪一个,我总是只能在“输出设备”选项卡下看到一个输出设备。

我尝试添加内置设备或 HDMI 设备来/etc/pulse/default.pa使用load-module module-alsa-sink device=hw:0,0-load-module module-alsa-sink device=hw:0,3这些似乎没有效果,或者使pulseaudio根本不显示任何配置文件。

答案1

我刚刚成功配置了这一点,这要归功于ArchLinux wiki 中的说明

设置一个接收器 - HDMI - 在 pavucontrol/Configuration 中,另一个 - 模拟输出 - 您在以下指定default.pa

load-module module-alsa-sink device=hw:0,0
load-module module-combine-sink sink_name=combined
set-default-sink combined

也许您错过了最后两行?

附录:将模拟输出添加到 HDMI 是可以的,但如果您想要相反怎么办? (我想保留模拟输入,Pulse 称之为“双工”...)不幸的是,load-module module-alsa-sink device=hw:0,3没有不是致力于将 HDMI 输出添加到 Pulse 的“模拟立体声双工”配置中。脉冲将启动,但没有 HDMI 输出。

pacmd list-sinks我比较了两种情况下的输出。当我添加 时device=hw:0,3,该选项将显示为没有端口。当pavucontrol中选择HDMI输出时,就会有端口。查看输出详细信息,我想出了设备=hdmi:0

选择“Analog Stereo Duplex”作为您的 pavucontrol 配置,并添加到default.pa

load-module module-alsa-sink device=hdmi:0
load-module module-combine-sink sink_name=combined
set-default-sink combined

奇迹般有效。我保留麦克风输入,在 pavucontrol/输出设备上我有模拟输出的所有选项用于 HDMI。

答案2

PipeWire 于 2023 年达到 1.0 版本,发行版正在逐渐用 PipeWire 取代 PulseAudio。我写了一篇关于拥有PipeWire 中同时存在多个端口。一个简短的总结是:

  1. 编辑9999-自定义.conf文件,位于alsa 卡配置文件目录结构。

  2. 取消注释该文件中的示例,并根据您的需要进行调整:

     [Profile output:analog-stereo+output:hdmi-stereo+input:analog-stereo]
     description = Multiple ports (custom profile)
     output-mappings = analog-stereo hdmi-stereo
     input-mappings = analog-stereo
    
  3. 重新启动 PipeWire。

  4. 根据您的发行版和配置文件位置,每当您的发行版更新已安装的软件包时,您的更改可能会被覆盖。

通过这些更改,HDMI 输出和模拟输出将同时可用。这样,就可以很容易地使用像这样的工具qpw图将应用程序即时路由到每个输出。也可以创建一个虚拟设备这将成为新的默认输出设备,并将音频转发到多个物理设备。

PipeWire 极其灵活,有多种可能性和多种解决方案。旧的基于 PulseAudio 的解决方案应该仍然可以继续工作,但它们也可以迁移到较新的 Pipewire 模块

相关内容