Cómo obtener audio de 5.1 canales a través de la salida S/PDIF en Arch Linux

El bus S/PDIF se creó para conectar reproductores de CD a amplificadores de audio sin que la señal se degradara en el camino. En otras palabras, se diseñó para transportar audio estereo sin comprimir. Utilizando los codecs DTS y Dolby Digital es posible transportar audio en formato de 5.1 canales. Requisitos:

  • Ordenador con GNU/Linux y salida de video HDMI (debería funcionar con una salida S/PDIF integrada en la tarjeta de sonido, pero no lo he probado)
  • Un receptor A/V multicanal (en mi caso utilizo un receptor Pioneer VSX-D510 con un separador de audio HDMI y un cable TOSLINK)

Si no tenemos instalado pavucontrol, lo instalaremos. Al abrirlo nos vamos a la sección “Dispositivos de Salida” y abrimos las opciones avanzadas de la salida de audio digital. Si no están habilitados los codecs de audio comprimido que soporta nuestro receptor A/V, los habilitamos manualmente (en mi caso AC-3 y DTS)

Ahora instalamos un reproductor multimedia que soporte el paso directo de audio a través de S/PDIF. En el caso de MPV abrimos el archivo de configuración

nano ~/.config/mpv/mpv.conf

Y le agregamos el siguiente contenido

audio-spdif=ac3,dts
audio-channels=5.1

Esto nos dará soporte para los codecs AC-3 (Dolby Digital) y DTS

En el caso de VLC nos vamos a preferencias, habilitamos la configuración avanzada y en la sección audio habilitamos “Forzar soporte S/PDIF”

Ahora probamos con un archivo de audio en formato Dolby Digital o DTS (pueden probar con el soundtrack de Midori in the Magic School, el cual tiene una versión en Dolby Digital). Si lo hemos hecho correctamente, la pantalla de nuestro receptor A/V debería mostrarnos que estamos repoduciendo audio en formato Dolby Digital o DTS, según sea el caso, mientras que el mezclador de Pulseaudio no nos debería mostrar ningún flujo de audio correspondiente al archivo de audio que estamos reproduciendo debido a que el trabajo de decodificación de audio lo está haciendo el receptor A/V en lugar del PC

Receptor A/V reproduciendo audio en formato Dolby Digital

En los casos donde no podamos enviar el audio de esta manera (por ejemplo en los juegos) existe otra posibilidad, la cual consiste en codificar el audio del pc en formato DTS para que cualquier aplicación pueda enviar audio de 5.1 canales. Para ello instalaremos “dcaenc”, el cual se puede instalar en Arch Linux a través de AUR y en Gentoo desde los repositorios oficiales como “media-sound/dcaenc” (es necesario habilitar “alsa” en USE). Editamos el archivo de configuración de ALSA

sudo nano /etc/asound.conf

Y agregamos lo siguiente

<confdir:pcm/dca.conf>

Al reiniciar pulseaudio (o pipewire-pulse) la salida de audio digital deberia tener un modo de salida DTS. Si todo va bien, el receptor A/V debería mostrar que estamos reproduciendo audio en formato DTS

Es recomendable utilizar esta opción cuando la reproducción directa no es posible

En caso de que el receptor AV esté conectado al ordenador a través de un Televisor inteligente (Como un Roku TV), es posible que el mismo no sea capaz de reconocer el flujo de audio creado por dcaenc y se escuche ruido en los altavoces. En este caso utilizaremos el codec Dolby Digital en su lugar. Es necesario instalar el paquete “alsa-plugins” y habilitar la etiqueta USE “ffmpeg” para el mismo en caso de utilizar Gentoo. Listamos los dispositivos de audio de la siguiente manera

aplay -l

Nos mostrará algo parecido a lo siguiente

card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [RTK FHD]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 7: HDMI 1 [Roku TV]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic_1 [HD-Audio Generic], device 0: ALC897 Analog [ALC897 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

En mi caso el dispositivo que me interesa aparece como HDMI 1 en la tarjeta 0, por lo que nuestro dispositivo sería “hdmi:CARD=0,DEV=1”. Agregamos lo siguiente al archivo asound.conf

pcm.a52 {
    slavepcm "hdmi:CARD=0,DEV=1"
}

En caso de que la salida a utilizar sea diferente, será necesario ajustarlo

El codificador para Dolby Digital está mejor pulido que el de DTS

Dejar un comentario