domingo, 13 de diciembre de 2009

Organización y control de tarjetas de audio

#########################
Notas de revisiones:
Revisión 0: 13 diciembre 2009. Publicado.
Revisión 1: 8 febrero 2010. Corregido. No 'alsabase' sino 'alsa-base' y otros detalles.
Revisión 2: 8 junio 2010. Mejor usar en jack la identificación alfanumérica que da alsa

#########################

Advertencia: Esta entrada asume que las tarjetas de audio están soportadas por ALSA. Para comprobar el soporte en Linux de tu tarjeta de audio, ver (TODO).


Aunque existen herramientas gráficas para configurar el audio, nada es tan fiable, potente e informativo como nuestra vieja amiga la terminal de comandos.

¿Qué tenemos por ahí?


Hagamos en la terminal:

lspci | grep -i audio

Nos saldrán los dispositios de audio que tenemos en el bus pci.

En mi caso:

pablo@Desktop:~$ lspci | grep -i audio
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)
05:00.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08)
05:01.0 Multimedia audio controller: VIA Technologies Inc. ICE1712 [Envy24] PCI Multi-Channel I/O Controller (rev 02)

La primera es la integrada, la segunda una SB Live! y la tercera una m-audio 2496.

Además, he enchufado una UCA202 de Behringer en un puerto USB. Si hago:

lsusb

Veo, entre otras líneas:

Bus 002 Device 003: ID 08bb:2902 Texas Instruments Japan

ALSA es un projecto mantenido por voluntarios que escriben drivers para tarjetas de audio y los integran en el kernel de Linux. Estas cuatro tarjetas están soportadas por ALSA. Vamos a ver cómo las ve ALSA, con el comando:

cat /proc/asound/cards

En mi caso:
pablo@Desktop:~$ cat /proc/asound/cards
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0xfebf8000 irq 22
1 [Live ]: EMU10K1 - SB Live! Value [CT4870]
SB Live! Value [CT4870] (rev.8, serial:0x80281102) at 0xb880, irq 21
2 [M2496 ]: ICE1712 - M Audio Audiophile 24/96
M Audio Audiophile 24/96 at 0xb800, irq 22
3 [default ]: USB-Audio - USB Audio CODEC
Burr-Brown from TI USB Audio CODEC at usb-0000:00:1d.1-1, full s

Y qué modulos o drivers las manejan, con

cat /proc/asound/modules

Para mí:

pablo@Desktop:~$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_emu10k1
2 snd_ice1712
3 snd_usb_audio

El módulo de la tarjeta integrada es snd_hda_intel, el de la SB Live!, snd_emu10k1, el de la m-audio 2496, snd_ice1712 y el de la UCA 202, snd_usb_audio.

Acerca de la tarjeta integrada, si no la vamos a usar, lo mejor es deshabilitarla desde la BIOS. Si nos fijamos, está compartiendo número de IRQ con la m-audio (irq 22). Eso no es bueno. Queremos que nuestra tarjeta principal no comparta número de IRQ con ningún otro dispositivo. Echaremos un vistazo a la salida de

cat /proc/interrupts

Si tenemos un kernel RT, podemos levantar la prioridad de nuestra tarjeta de audio para mejorar la latencia. Esto se explica en esta entrada

Un poco de orden

Pronto volveré a guardar en el cajón la SB Live! y entraré en la BIOS para deshabilitar la integrada, pero de momento tengo un pequeño problema; cuando reinicio el ordenador el orden de las tarjetas en 'cat /proc/asound/cards' ya no es el mismo.

Esto puede crear un problema con jack si en el setup de qjackctl elegimos la interfaz con su identificación numérica (hw:0 por ejemplo).

Para solucionar esto, podemos hacer dos cosas. Una de ellas, es darles números de orden fijos como se explica a continuación pero existe otra forma mucho más sencilla e infalible que he aprendido recientemente. Si queréis ahorrar tiempo, saltar hasta % y seguir leyendo...

Editamos el archivo '/etc/modprobe.d/alsa-base.conf' (nos debemos asegurar que este archivo existe, es posible que su nombre sea 'alsa-base' en lugar de 'alsa-base.conf'):

gksudo gedit /etc/modprobe.d/alsa-base.conf

Y añadimos al final:

#Dar números de orden fijos a la tarjetas de audio
alias snd-card-0 snd-ice1712
options snd-ice1712 index=0
alias snd-card-1 snd-emu10k1
options snd-emu10k1 index=1
alias snd-card-2 snd-hda-intel
options snd-hda-intel index=2
alias snd-card-3 snd-usb-audio
options snd-usb-audio index=3

Fijaros que he tomado los nombres de los módulos, pero hay que sustituir el guión bajo por un guión normal.

Para que este cambio tenga efecto debemos, bien reiniciar el ordenador, o bien, más rápido, recargar los módulos de alsa con el comando:

sudo alsa force-reload

%

Poner en jack la identificación alfanumérica, que es lo que encontramos entre corchetes en la salida de "cat /proc/asound/cards", precedido de "hw:". Por ejemplo, si quiero que jack arranque con la m-audio escribiré en el campo interfaz (aunque no aparezca en el menú desplegable):

hw:M2496

Mezcladores de alsa

ALSA nos da acceso al mezclador hardware, con el cual podemos interactuar con los niveles, las rutas del audio y otros parámetros fundamentales de nuestras tarjetas.

El más elemental es 'alsamixer', de línea de comandos. El manejo es con el teclado:

[TAB] para cambiar Playback, Capture, All. Para reproducción, lo dejamos en Playback.
Flechas izquierda/derecha para movernos por los parámetros (Items)
Flechas arriba/abajo para cambiar valor.
Tecla [M] para silenciar/activar. (MM indica silenciado, OO activado)
[Ctrl] + [C] para salir.

Hay otros mezcladores gráficos como gnome-alsamixer o gamix (en ubuntu / ubuntustudio, en synaptic). gamix está muy bien porque los controles están ordenados. Para las integradas o para las comerciales tipo SB es mucho más claro que alsamixer o gnome-alsamixer.

gamix sobre la tarjeta integrada en un Acer Aspire One

El controlador recomendado para la m-audio 2496 y similares (m-audio 1010LT por ejemplo; en general, las que usen el módulo snd_ice1712) es 'envy24control'. Se lanza desde terminal. Es necesario que tengamos instalado el paquete 'alsa-tools-gui'.

Envy24control sobre una m-audio 2496. Pestaña Analog Volume

Para algunas tarjetas RME, el controlador adecuado es hdspmixer (también en el paquete alsa-tools-gui).


Problemas comunes


1. No suena o no captura audio
Si no suena, lo primero será comprobar que los cables están conectados correctamente. Después comprobaremos los niveles de nuestro mezclador ALSA favorito (alsamixer. gamix, gnome-alsamixer...)

2. Mi tarjeta de audio integrada sigue sin sonar o sin capturar audio
En ocasiones, y sobretodo en laptops, las tarjetas de audio integradas que utilizan el módulo snd_hda_intel tienen algunos problemillas. Aquí hay una orientación para intentar arreglarlos:
http://www.ubuntu-es.org/?q=node/115147

3. Mi tarjeta m-audio no suena ni captura.
Si es una tarjeta que usa el módulo snd_ice1712, lo primero será comprobar la pestaña Analog Volume de Envy24control. Los convertidores DAC (para reproducción) y ADC (para captura) no deben de estar bajados.

3. Mi tarjeta de audio funciona pero Jack no arranca.
Ver (TODO)


Créditos y para saber más


User FAQ nº 13 de www.64tudio.com
Los créditos en http://www.ubuntu-es.org/?q=node/115147
ALSA wiki sobre los mezcladores de ALSA, http://alsa.opensrc.org/index.php/AlsaMixers

5 comentarios:

  1. Muy bueno tio... Gracias

    ResponderEliminar
  2. te debo la vida gracias por la "M" XD

    ResponderEliminar
  3. Hola .. saludos...
    tengo un problema con la interface UCA202 y esque cuando la conecto a mi ordenador portatil la UCA no funciona, es decir no se escucha lo que estoy reproduciendo con Rhythmbox . Necesito algun controlador para UBUNTU ?

    ResponderEliminar
  4. Hola Mario, no. Esa tarjeta debería funcionar sin más. Si la ves, haciendo en terminal:
    "cat /proc/asound/cards"
    Y ves el módulo snd-usb-audio cargado en la salida de:
    "cat /proc/asound/modules"
    la tienes funcional. Lo que puede ocurrir es que la tengas como segundo dispositivo. Tendrás que elegirla en las preferencias de sonido como tarjeta determinada. Busca en sistema-> preferencias o por ahí. Si no ves claro, instalar pavucontrol también puede ser de ayuda (Pulse Audio Volume Control). Creo que no lo he dicho aquí, pero esta entrada, como todas las de mi blog, presuponen que nuestro servidor de audio es Jack, no pulseaudio (pero no te molestes con jack si no usas el ordenador para producir música).

    ResponderEliminar
  5. Eternamente agradecido.
    Ahora entiendo por que tenía que seleccionar la tarjeta con QAMIx casi cada vez que reiniciaba.

    De paso agradecerte tus aportaciones sobre Rakarrack ( Que divertido el "jugar" con los midis ), me costó un poco hacerlo sonar pero lo conseguí.

    Gracias por hacer este mundo mejor

    Mucha Salud!


    Javi

    ResponderEliminar