¿Cómo configuro PulseAudio para 7.1 Surround Sound a través de HDMI?

10

Tengo mi máquina conectada por HDMI a un receptor. Pero cuando trato de usar más de dos canales con PulseAudio, solo obtengo dos. pacmd list cardsmuestra la tarjeta, pero no muestra un perfil HDMI con más de dos canales.

He confirmado que el sonido 7.1 funciona a través de ALSA:

pasuspender -- speaker-test -D hdmi -c 8 -m FL,FC,FR,RR,RRC,RLC,RL,LFE

Produce estática que recorre la habitación.

derobert
fuente

Respuestas:

20

En PulseAudio, cada tarjeta de sonido tiene un conjunto de perfiles asociado. Un conjunto de perfiles contiene varios perfiles, y esos son los perfiles que ve al enumerar las tarjetas (o al buscar en las diversas GUI de PulseAudio).

Hay un defaultperfil, que contiene principalmente cosas útiles para la salida de sonido analógico. También hay un extra-hdmiperfil que se aplica automáticamente a algunas salidas HDMI y dará opciones hasta 5.1. Desafortunadamente /usr/share/pulseaudio/alsa-mixer/profile-sets, ambos perfiles están en , y por lo tanto no puede editarlos ( archivé el error de depuración 736708 sobre esto). De acuerdo con la documentación, podría deshabilitar la detección automática basada en udev y configurar todo manualmente, eso le permite especificar el ruta completa a un perfil. Pero resulta que, si bien no está documentado, udev también puede especificar una ruta completa.

Configure una regla de udev para asignar un conjunto de perfiles

Usted asigna un conjunto de perfiles en una regla de udev configurando la PULSE_PROFILE_SETvariable de entorno udev. Está documentado que solo toma un archivo en el /usrsubdirectorio mencionado anteriormente , pero una ruta completa también funciona. En mi caso, creé esta regla:

# cat /etc/udev/rules.d/95-local-pulseaudio.rules 
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"

Deberá utilizar los números de dispositivo y proveedor de PCI apropiados, que puede obtener fácilmente lspci -nn.

Después de crear la regla udev, puede aplicarla inmediatamente con udevadm trigger -ssound. Probablemente también desee reconstruir sus initramfs ( update-initramfs -u)

Confirme que la regla de udev entró en vigencia con udevadm info --query=all --path /sys/class/sound/card0(use el número de tarjeta apropiado, por supuesto). Deberías ver E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.confen la salida. Si no, no continúes. No va a funcionar Algo está mal con sus reglas de udev (o tal vez no las activó, siempre puede intentar reiniciar).

Cree el archivo /etc/pulse/my-hdmi.conf

Nota: El mapa de canales aparentemente es específico del sistema. Tendrá que experimentar para hacer lo correcto para su sistema. Tuve suerte, mi diseño 7.1 solo implica soltar los elementos finales para compilar 5.1, 4.0, etc. Las instrucciones están a continuación.

Esto es mucho copiar y pegar, principalmente. Cada sección difiere en (a) nombre, (b) descripción, (c) mapa de canales, (d) prioridad [opcional].

[General]
auto-profiles = yes

[Mapping hdmi-stereo]
device-strings = hdmi:%f
channel-map = front-left,front-right
description = Digital Stereo (HDMI)
priority = 4
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-40]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right
description = Digital Quadrophonic (HDMI)
priority = 1
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-51]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
description = Digital Surround 5.1 (HDMI)
priority = 2
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-71]
description = Digital Surround 7.1 (HDMI)
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 3
direction = output
paths-output = hdmi-output-0

Ahora, para probar esto:

  1. Reinicie PulseAudio: pulseaudio -kcomo su usuario normal, suponiendo que esté usando demonios por usuario (el valor predeterminado). Comience de nuevo, incluso un simple aplay -lfuncionará.
  2. Cambie al perfil 7.1. Personalmente, solía pactl set-card-profile 0 "output:hdmi-surround-71"hacer esto, pero una GUI también funcionará perfectamente bien.
  3. Ejecutar speaker-test -c 8 -t w. Debería comenzar a anunciar los nombres de los oradores, con suerte el nombre correcto de cada orador. Si los nombres no provienen del hablante correcto, tendrá que cambiar el mapa de canales para acertar. Después de cada cambio de mapa de canales, debe reiniciar PulseAudio nuevamente.

¡Prima! Configuraciones más útiles

En /etc/pulse/daemon.conf, hay algunas configuraciones que es posible que desee cambiar:

enable-remixing- Si está activado, una señal estéreo tendrá su canal izquierdo reproducido por los tres altavoces izquierdos y su canal derecho por los altavoces derechos. Si está desactivado, solo saldrá entre los dos primeros. Tenga en cuenta que también puede cambiar el perfil a estéreo (para enviar solo sonido estéreo a través del puerto HDMI y dejar que su receptor decida cómo asignarlo a los altavoces).

enable-lfe-remixing - Similar, pero para remezclar al canal LFE (subwoofer).

default-sample-format- Si su configuración HDMI admite audio de más de 16 bits, puede aumentar esto a s32le(de forma predeterminada s16le).

default-sample-rate, alternate-sample-rate- Es posible que desee intercambiar estos (y tal vez incluso deshabilitar 44.1KHz por completo) si utiliza principalmente material de fuente de DVD que generalmente es de 48KHz. O, si su receptor HDMI lo admite, puede llegar hasta 192KHz. Tenga en cuenta que 176KHz tiene la buena propiedad de ser un múltiplo incluso de 44,1 y 48KHz. Consulte a continuación cómo determinar qué admite su receptor

default-sample-channels- Realmente no parece importar. El perfil probablemente lo anula ...

Naturalmente, tendrá que reiniciar PulseAudio después de cambiar este archivo.

Bono de nuevo! Ver lo que admite su receptor

Hay eld.*archivos en los /proc/asoundque se informa qué admite el otro extremo de un enlace HDMI. Por ejemplo:

# cat /proc/asound/card0/eld#3.0 
monitor_present         1
eld_valid               1
monitor_name            TX-SR606
connection_type         HDMI
eld_version             [0x2] CEA-861D or below
edid_version            [0x3] CEA-861-B, C or D
manufacture_id          0xcb3d
product_id              0x863
port_id                 0x0
support_hdcp            0
support_ai              1
audio_sync_delay        0
speakers                [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count               8
sad0_coding_type        [0x1] LPCM
sad0_channels           2
sad0_rates              [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad0_bits               [0xe0000] 16 20 24
sad1_coding_type        [0x1] LPCM
sad1_channels           8
sad1_rates              [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad1_bits               [0xe0000] 16 20 24
sad2_coding_type        [0x2] AC-3
sad2_channels           8
sad2_rates              [0xe0] 32000 44100 48000
sad2_max_bitrate        640000
sad3_coding_type        [0x7] DTS
sad3_channels           8
sad3_rates              [0xc0] 44100 48000
sad3_max_bitrate        1536000
sad4_coding_type        [0x9] DSD (One Bit Audio)
sad4_channels           6
sad4_rates              [0x40] 44100
sad5_coding_type        [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels           8
sad5_rates              [0xc0] 44100 48000
sad6_coding_type        [0xb] DTS-HD
sad6_channels           8
sad6_rates              [0x1ec0] 44100 48000 88200 96000 176400 192000
sad7_coding_type        [0xc] MLP (Dolby TrueHD)
sad7_channels           8
sad7_rates              [0x1480] 48000 96000 192000

Entonces puede ver que mi receptor admite LPCM (PCM lineal, es decir, audio sin comprimir) en hasta 8 canales, 192KHz, sonido de 24 bits. También es compatible con AC3, DTS, DSD, DD +, DTS-HD y Dolby TrueHD. Entonces, si tengo archivos codificados en esos, puedo pasar esos formatos (si mi reproductor multimedia lo admite, por supuesto, mpvprobablemente sí).

derobert
fuente
Un millón de gracias por esto, he estado luchando por un tiempo con la configuración. Para mí, las reglas de udev no se aplicaron primero, tuve que reiniciar la PC para eso. Sin embargo, hay un problema ... @derobert Parece que no puedo pasar X265, transmisión de audio 7.1. Solo tengo que decodificarlo usando la PC y transferir la transmisión de audio. (Mi receptor es un 5.1 sin embargo) ¿Tiene alguna sugerencia? ¡Gracias!
dimuthu
@dimuthu H.265 (x265) es un códec de video, no un códec de audio. Tenga en cuenta que PulseAudio solo tiene un soporte limitado para el paso a través, necesita estar habilitado (lo más fácil con la GUI), y puede necesitar establecerse en estéreo (solo un detalle de implementación de cómo funciona el paso, no un límite real en el recuento de canales ) Me parece recordar una página en el wiki de Kodi con detalles.
derobert
1
@dimuthu (Perdón por el segundo comentario, la aplicación SE falla al intentar editar ...) Supongo que un receptor 5.1 solo es compatible con AC3 y DTS. No, por ejemplo, AAC. A menos que le permita usar algunas funciones en el receptor que no puede usar con PCM multicanal, no tiene mucho sentido pasar. Al menos no sobre HDMI.
derobert
sí, tienes razón, de hecho estoy pasando el audio configurando PulseAudio a HDMI estéreo. Esta es la única forma en que podría llevar audio de flujo de bits al receptor. También investigé sobre AAC y, aunque Yahama no ha mencionado nada sobre sus especificaciones, encontré algunas pruebas en línea para pensar que solo está disponible en modelos de gama alta. ¿Estoy perdiendo tantos detalles al decodificarlos usando HTPC? Lo configuré a 7.1Ch / 192KHz, 24 bits. ¡Gracias!
dimuthu
@dimuthu no deberías perder nada decodificando en la PC siempre que tengas un convertidor de velocidad de calidad razonable configurado en PulseAudio. Bueno, nada excepto algo de tiempo de CPU (especialmente a esa frecuencia de muestreo, que sin duda excede por mucho el material de origen)
derobert