如何将独特的音频输出到 PulseAudio 卡的多个端口/配置文件?

mpr*_*mpr 3 pulseaudio

假设我有一张具有以下属性的卡片:

index: 1
name: <alsa_card.pci-0000_00_1f.3>
driver: <module-alsa-card.c>
owner module: 7
properties:
    alsa.card = "0"
    alsa.card_name = "HDA Intel PCH"
    alsa.long_card_name = "HDA Intel PCH at 0xf7240000 irq 129"
    alsa.driver_name = "snd_hda_intel"
    device.bus_path = "pci-0000:00:1f.3"
    sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
    device.bus = "pci"
    device.vendor.id = "8086"
    device.vendor.name = "Intel Corporation"
    device.product.id = "a170"
    device.form_factor = "internal"
    device.string = "0"
    device.description = "Built-in Audio"
    module-udev-detect.discovered = "1"
    device.icon_name = "audio-card-pci"
profiles:
    input:analog-stereo: Analog Stereo Input (priority 60, available: unknown)
    output:analog-stereo: Analog Stereo Output (priority 6000, available: unknown)
    output:analog-stereo+input:analog-stereo: Analog Stereo Duplex (priority 6060, available: unknown)
    output:hdmi-stereo: Digital Stereo (HDMI) Output (priority 5400, available: unknown)
    output:hdmi-stereo+input:analog-stereo: Digital Stereo (HDMI) Output + Analog Stereo Input (priority 5460, available: unknown)
    output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (priority 300, available: unknown)
    output:hdmi-surround+input:analog-stereo: Digital Surround 5.1 (HDMI) Output + Analog Stereo Input (priority 360, available: unknown)
    output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (priority 300, available: unknown)
    output:hdmi-surround71+input:analog-stereo: Digital Surround 7.1 (HDMI) Output + Analog Stereo Input (priority 360, available: unknown)
    output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (priority 5200, available: unknown)
    output:hdmi-stereo-extra1+input:analog-stereo: Digital Stereo (HDMI 2) Output + Analog Stereo Input (priority 5260, available: unknown)
    output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (priority 5200, available: unknown)
    output:hdmi-stereo-extra2+input:analog-stereo: Digital Stereo (HDMI 3) Output + Analog Stereo Input (priority 5260, available: unknown)
    output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (priority 100, available: unknown)
    output:hdmi-surround-extra2+input:analog-stereo: Digital Surround 5.1 (HDMI 3) Output + Analog Stereo Input (priority 160, available: unknown)
    output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (priority 100, available: unknown)
    output:hdmi-surround71-extra2+input:analog-stereo: Digital Surround 7.1 (HDMI 3) Output + Analog Stereo Input (priority 160, available: unknown)
    off: Off (priority 0, available: unknown)
active profile: <output:hdmi-stereo-extra1+input:analog-stereo>
sinks:
    alsa_output.pci-0000_00_1f.3.hdmi-stereo-extra1/#1: Built-in Audio Digital Stereo (HDMI 2)
sources:
    alsa_output.pci-0000_00_1f.3.hdmi-stereo-extra1.monitor/#1: Monitor of Built-in Audio Digital Stereo (HDMI 2)
    alsa_input.pci-0000_00_1f.3.analog-stereo/#2: Built-in Audio Analog Stereo
ports:
    analog-input-headphone-mic: Microphone (priority 8700, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-input-microphone"
    analog-input-headset-mic: Headset Microphone (priority 8700, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-input-microphone"
    analog-output-lineout: Line Out (priority 9900, latency offset 0 usec, available: no)
        properties:

    analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-speakers"
    analog-output-headphones: Headphones (priority 9000, latency offset 0 usec, available: yes)
        properties:
            device.icon_name = "audio-headphones"
    hdmi-output-0: HDMI / DisplayPort (priority 5900, latency offset 0 usec, available: no)
        properties:
            device.icon_name = "video-display"
    hdmi-output-1: HDMI / DisplayPort 2 (priority 5800, latency offset 0 usec, available: yes)
        properties:
            device.icon_name = "video-display"
            device.product.name = "Inspiron 7459"
    hdmi-output-2: HDMI / DisplayPort 3 (priority 5700, latency offset 0 usec, available: no)
        properties:
            device.icon_name = "video-display"
Run Code Online (Sandbox Code Playgroud)

我想将独特的音频流输出到模拟输出线路输出以及可能的所有 (hdmi-output-0, hdmi-output-1, hdmi-output2): 端口。有没有办法在 PulseAudio 中同时做到这一点?我知道在 ALSA 中我可以执行以下操作:

gst-launch-1.0 audiotestsrc ! alsasink device="hw:0,0" gst-launch-1.0 audiotestsrc ! alsasink device="hw:0,3"

但是我在 Pulse 中看到的表明我必须为“卡”设置一个“配置文件”,并且所有配置文件似乎都绑定到一个输出端口。

有没有办法做到这一点,或者Pulse在这方面只是从根本上受到限制?

dir*_*rkt 6

您必须编写一个自定义配置文件,将您需要的所有 HDMI 输出公开为单独的接收器。

看一看轮廓在pulseaudio的文档,在文件中/usr/share/pulseaudio/alsa-mixer/paths/,ESP。中的评论analog-output.conf.common

可悲的是,所有这些都没有充分记录。


尝试使其工作:

修改/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf并附加如下内容:

[Profile output:analog-stereo+output:hdmi-stereo+output:hdmi-stereo+output:hdmi-stereo]
description = Foobar
output-mappings = analog-stereo hdmi-stereo hdmi-stereo-extra1 hdmi-stereo-extra2
input-mappings = 
Run Code Online (Sandbox Code Playgroud)

然后以普通桌面用户身份重新启动pulse:

pulseaudio --kill; sleep 1; pulseaudio --start
Run Code Online (Sandbox Code Playgroud)

将卡设置为使用新配置文件:

pacmd set-card-profile 0 output:analog-stereo+output:hdmi-stereo+output:hdmi-stereo+output:hdmi-stereo
Run Code Online (Sandbox Code Playgroud)

现在pacmd list-sinks为新配置文件中标识的每个端口显示一个不同的接收器。

需要做的最后一件事是弄清楚如何不弄乱系统文件。~/.config/pulse如果可能的话,最好通过一个文件来做到这一点。


编辑

是如何为 M-Audio USB 设备设置新配置文件的说明。升级):

我添加了一个/etc/udev/rules.d/91-pulseaudio.rules包含以下内容的新文件:

# Custom Profile for onboard Intel 8086:12c0

SUBSYSTEM!="sound", GOTO="xpulseaudio_end"
ACTION!="change", GOTO="xpulseaudio_end"
KERNEL!="card*", GOTO="xpulseaudio_end"

SUBSYSTEMS=="pci", ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="my-personal.conf"

LABEL="xpulseaudio_end"
Run Code Online (Sandbox Code Playgroud)

这主要是从/lib/udev/rules.d/90-pulseaudio.rules.

由于这是一个板载声卡,这些规则必须在启动时执行,因此它们应该在initrd您的内核使用的程序中。我编译我自己的内核,并make-kpkg复制这些规则,所以这对我来说不是问题。

然后添加 make 一个新文件/usr/share/pulseaudio/alsa-mixer/profile-sets/my-personal.conf,您可以在其中列出所需的配置(从其他配置文件复制和修改)。