Intente varias veces configurar audio 5.1 usando solo ALSA, pero siempre me encontraba con alguna incompatibilidad con alguna aplicación. A decir verdad ALSA es un componente de bajo nivel, que hace un buen trabajo tratando de abstraer el hardware. Por otro lado muchas aplicaciones solo quieren usar el audio sin tener que preocuparse demasiado por toda la variedad de hardware existente. Si uno tiene mala suerte puede caer en ese pequeño limbo donde ciertas características del hardware son soportadas por ALSA pero no todas las aplicaciones funcionan correctamente sin hacer ajustes. Que es mi caso de sonido 5.1 por HDMI.
Pulseaudio es un intermediario entre las aplicaciones y la parte de bajo nivel (es decir ALSA). Provee una API de alto nivel. Y brinda diferentes implementaciones de bajo nivel para permitir reproducir en diferentes dispositivos, por ejemplo una salida de audio local, un servidor de audio remoto.
Este es un resumen de los pasos que seguí para configurar la salida correctamente.
- Primero instalamos pulseaudio: sudo aptitude install pulseaudio.
- Ahora averiguamos cual es la salida HDMI: aplay -l.
En la salida de ese comando buscamos alguna linea donde aparezca HDMI, en mi caso aparece
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
anotamos la placa (0 en el caso de arriba), y el dispositivo (3 según la salida anterior).
Si no aparece ninguna linea lo más probable es que ALSA necesite algún parámetro para configurar la placa de audio correctamente, o que la salida HDMI no este soportada todavía.
- Configuramos Pulseaudio para que la salida de audio sea por HDMI
Editamos el archivo /etc/pulseaudio/default.pa y agregamos una linea similar a la siguiente
load-module module-alsa-sink device=hw:0,3
donde hw:0,3 hace referencia a los valores encontrados en el punto anterior.
- Reiniciamos Pulseaudio con pulseaudio -k, para comprobar que tome los valores ingresados.
(A veces tuve que esperar algunos segundos hasta que el servidor de Pulseaudio reinicie, o repetir varias veces pulseaudio -k).
- Usamos speaker-test -cNN -twav para comprobar si tenemos salida por todos los canales. Reemplazamos NN por 2 para estéreo, 6 para audio 5.1 y 8 para salida 7.1. Este comando reproduce un archivo de audio con el nombre del canal por cada canal, lo que nos sirve para identificar si todas las salidas funcionan, y si los canales estan configurados correctamente.
- Si todo funciono correctamente entonces terminamos.
- Si solo tenemos salida estéreo entonces editamos /etc/pulseaudio/daemon, y agregamos una linea como la siguiente:
default-sample-channels = 6
Donde reemplazamos 6 por la cantidad correcta de canales que tenemos. Ahora volvermos a reiniciar Pulseaudio y probamos con speaker-test.
- Si llegamos a este punto seguimos sólo con salida estéreo el problema puede estar en que el driver sólo soporte estéreo.
- Si los canales no salen correctamente podemos intentar modificar el mapeo de canales. Editamos /etc/pulseaudio/default.pa, modificamos la linea que agregamos anteriormente para que quede algo asi:
load-module module-alsa-sink device=hw:0,3 channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe
Este ejemplo es para audio 5.1. Reiniciamos pulseaudio y comprobamos con speaker-test las salidas. Si no es la correcta podemos intercambiar los elementos de la lista que sigue a channel_map.
Esto fue todo.