다음과 같은 속성을 가진 카드가 있다고 가정해 보겠습니다.
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"
고유한 오디오 스트림을 아날로그 출력 라인 출력 및 가능하면 모든 포트(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가 이와 관련하여 근본적으로 제한되어 있습니까?
답변1
필요한 모든 HDMI 출력을 별도의 싱크로 노출하는 사용자 지정 구성 파일을 작성해야 합니다.
구경하다소개Pulseaudio 문서의 파일 /usr/share/pulseaudio/alsa-mixer/paths/
, 특히. 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 =
그런 다음 일반 데스크탑 사용자로 Pulse를 다시 시작하십시오.
pulseaudio --kill; sleep 1; pulseaudio --start
새 프로필을 사용하도록 카드를 설정합니다.
pacmd set-card-profile 0 output:analog-stereo+output:hdmi-stereo+output:hdmi-stereo+output:hdmi-stereo
이제 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"
이것은 대부분 의 사본입니다 /lib/udev/rules.d/90-pulseaudio.rules
.
이것은 온보드 사운드 카드이기 때문에 이러한 규칙은 부팅 시 실행되어야 하므로 initrd
커널에서 사용하는 규칙 중 하나여야 합니다. 나는 내 자신의 커널을 컴파일하고 make-kpkg
이 규칙을 복사했기 때문에 이것은 나에게 문제가 되지 않습니다.
/usr/share/pulseaudio/alsa-mixer/profile-sets/my-personal.conf
그런 다음 필요한 구성(다른 구성 파일에서 복사 및 수정됨)을 나열할 수 있는 새 파일을 추가합니다 .
답변2
저는 HTC Vive가 연결된 Fedora 32에서 GeForce RTX 2070을 사용하고 있습니다. 누군가가 VR을 플레이할 때 다른 사람들이 모니터로 시청하는 경우가 많습니다. Vive와 모니터 모두에 스트리밍되도록 게임 오디오를 구성했습니다.
먼저 모든 오디오 장치 찾기를 사용한 aplay -L
다음 장치를 테스트하여 어떤 장치가 연결되어 있는지 확인하십시오. 예를 들어, speaker-test -D hdmi:CARD=NVidia,DEV=1 -c2
. 그러나 명령을 실행하면 Nvidia 드라이버에서 이상한 오류가 발생했습니다.
$ speaker-test -D hdmi:CARD=NVidia,DEV=1 -c2
speaker-test 1.2.3
Playback device is hdmi:CARD=NVidia,DEV=1
Stream parameters are 48000Hz, S16_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 64 to 8544000
Period size range from 32 to 4272000
Using max buffer size 8544000
Periods = 4
Unable to set hw params for playback: Cannot allocate memory
Setting of hwparams failed: Cannot allocate memory
더 낮은 버퍼 크기를 명시적으로 설정하면 오류가 해결됩니다.
$ speaker-test -D hdmi:CARD=NVidia,DEV=1 -c2 -b10000
speaker-test 1.2.3
Playback device is hdmi:CARD=NVidia,DEV=1
Stream parameters are 48000Hz, S16_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 64 to 8544000
Period size range from 32 to 4272000
Requested buffer time 10000 us
Periods = 4
was set period_size = 96
was set buffer_size = 480
0 - Front Left
^C 1 - Front Right
Time per period = 0.438162
장치에 유효한 출력을 결정한 후 파일을 생성하여 pulseaudio에 명시적으로 추가하십시오 .config/pulse/default.pa
. 장치 설명은 원하는 대로 설정할 수 있습니다. 이것은 내 파일입니다:
load-module module-alsa-sink device=hdmi:CARD=NVidia,DEV=0 sink_properties="device.description='NVIDIA HDMI Vive'"
load-module module-alsa-sink device=hdmi:CARD=NVidia,DEV=1 sink_properties="device.description='NVIDIA HDMI monitor'"
.include /etc/pulse/default.pa
를 실행하여 pulseaudio를 다시 시작한 다음 systemctl --user restart pulseaudio.service
장치가 나타나는지 확인하십시오 pavucontrol
. 마지막으로 paprefs를 사용하여 모든 오디오 장치에 대한 동시 출력을 활성화하십시오.