Audio

El problema del sonido en Linux

Tradicionalmente el sonido ha sido complicado en Linux debido a la coexistencia de varios sistemas.

El sistema de sonido de Linux para los kernel 2.6 es ALSA, que ha reemplazado al que fuera el primer sistema de sonido para GNU Linux, OSS. El problema de OSS es que creaba una capa de lectura/escritura directa en el dispositivo de audio que permitía a los programas escribir en /dev/dsp pero que no permitía compartir el dispositivo de sonido a varias fuentes de audio. Por ejemplo, el editor de sonido Audacity se adueña de /dev/dsp e impide que otro escriba en él y si otro programa ha bloqueado ya el dispositivo da error.

Para los kernel 2.6 no instalaremos los módulos OSS sino los módulos ALSA (con emulación OSS ya que algunos programas esperan que OSS esté instalado).

Por encima de la capa de lectura/escritura de los dispositivos se ejecutan diversos servidores de sonido: esound (de Enlightenment y GNOME), artsd (de KDE), JACK (que utiliza ALSA como back-end) y PulseAudio.

Tantos servidores de sonido muchas veces dan problemas, ya que si tenemos ejecutables compilados para diferentes bibliotecas tendremos varios demonios compitiendo por la salida de audio.

Audio en Linux

Veamos el procedimiento a seguir para tener sonido en Linux:

  1. Soporte en el kernel.
  2. Cargar los módulos.
  3. Comprobar el dispositivo /dev/dsp.
  4. Soporte para formatos de audio propietarios.

Soporte en el kernel

El kernel tiene que tener soporte para:

  1. el dispositivo que usa la tarjeta de sonido (PCI, ISAPnP, Puente PCI-ISA…).

    Si la tarjeta es ISAPnP (por ejemplo, Avance Logic ALS100), se tiene que activar at boot time, antes de cargar el módulo ALSA.

    En la BIOS, ¿El sistema operativo es PnP? No.

    Instalar el paquete isapnptools. Esto creará el script /etc/init.d/isapnp y el enlace /etc/rcS.d/S15isapnp, que se encargarán de configurar la tarjeta ISAPnP al iniciar.

    Con pnpdump sabremos los datos de la tarjeta y del puerto en que está conectada. Ejecutar:

    # pnpdump > /etc/isapnp.conf

    Editar /etc/isapnp.conf y descomentar las líneas adecuadas:

    io=0x03e8
    irq=5
    dma0=1
    dma1=0

    Activar la tarjeta ISAPnP ejecutando el comando:

    # /etc/init.d/isapnp start

    Recursos

  2. sonido genérico, soporte ALSA y compatibilidad ALSA-OSS (no instalar los módulos OSS).
  3. el módulo ALSA (Advanced Linux Sound Architecture) de nuestra tarjeta de sonido. Averiguaremos cuál es el módulo ALSA que necesitamos, así como la sintaxis de los parámetros necesarios para cargarlo, en la página alsa-project.org/alsa-doc/, por ejemplo:
    • Avance Logic ALS100 (ISAPnP): snd-als100
    • Yamaha OPL3-SA2 (Puente PCI-ISA): snd-opl3sa2

Cargar los módulos

Cargaremos los módulos con modconf para que se actualice el archivo /etc/modules y se carguen al iniciar, pasándole los parámetros necesarios, por ejemplo:

  • Avance Logic ALS100 (ISAPnP):

    port=0×0220 irq=5 dma8=1 dma16=0

  • Yamaha OPL3-SA2 (Puente PCI-ISA): consultar los parámetros en la BIOS:

    sb_port=0×220 irq=5 dma1=1 dma2=0 fm_port=0×388 midi_port=0×330 port=0×538 wss_port=0×530 isapnp=0

Comprobar el dispositivo /dev/dsp

Instalaremos las Herramientas ALSA (paquete alsa-utils) y se creará /etc/init.d/alsa y el enlace /etc/rc2.d/S12alsa, por lo que al iniciar se cargará la configuración ALSA (entre otras cosas, restaurará los valores del volumen). Por defecto el sonido suele estar mute, por lo que ejecutaremos alsamixer para hacer unmute:

# alsamixer

alsamixer mute

MM significa que el canal está silenciado: quitaremos la MM con la tecla <m> y subiremos el volumen de la tarjeta a un nivel audible:

alsamixer unmute

En este punto, ya deberíamos tener sonido. Para comprobarlo:

  • la forma irritante de comprobar la tarjeta de sonido es ver si se puede escuchar estática en los altavoces. Esto nos confirmará si está configurada y funcionando. Haremos:
    # cat /dev/urandom > /dev/dsp

    Si todo está correcto se escuchará estática. Detenerlo con <Ctrl+C>.

  • información sobre la tarjeta de sonido:
    # cat /proc/asound/cards
    0 [Live]: EMU10K1 - Sound Blaster Live!
              Sound Blaster Live! (rev.6) at 0xb800, irq 11
  • versión de ALSA que se usa:
    # cat /proc/asound/version
    Advanced Linux Sound Architecture Driver Version 1.0.8
  • el usuario debe pertenecer al grupo audio para utilizar el sonido, ya que los permisos del dispositivo de sonido /dev/dsp suelen ser:
    • Propietario (root): leer y escribir.
    • Grupo (audio): leer y escribir.
    • Otros: prohibido.

Soporte de formatos de audio propietarios en Linux

Todos los reproductores linuxeros de audio y vídeo incluyen el decoder y reproducen MP3 pero ninguna distro trae el encoder ya que las patentes impiden distribuir binarios. El encoder para Linux es Lame (lame.sourceforge.net, paquete lame), pero en su web sólo encontraremos el código fuente, que sí es legal distribuirlo, por lo tendremos que compilarlo o buscar un repositorio que lo distribuya compilado.

Si al instalarlo no se instala libmp3lame.so, la librería que buscan algunos programas (como Audacity), sino libmp3lame.so.0, lo solucionaremos creando el enlace:

# ln -s /usr/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so

El encoder para Linux para AAC es FAAD (Freeware Advanced Audio Decoder, sourceforge.net/projects/faac/, paquete faad).

Mezclador de audio en Linux

El mezclador de audio en Linux es alsamixer:

  • Herramientas ALSA (paquete alsa-utils): alsamixer es el mezclador de audio por defecto en Linux.
    # alsamixer

    alsamixer mute

Existen numerosos mezcladores de audio gráficos, frontales de alsamixer:

  • alsamixergui (paquete alsamixergui): es una de las herramientas ALSA.
  • GNOME-alsamixer (paquete gnome-alsamixer): mezclador de GNOME.
  • Kmix (paquete kmix): mezclador de KDE.

    Kmix

Artículos en la categoría "Audio"

  1. Reproductor de audio en Linux
  2. iPod e iTunes en Linux
  3. Editor de audio en Linux
  4. Editor de etiquetas ID3 en Linux
  5. Ripear CD en Linux
  6. Música digital MIDI en Linux
  7. Música digital MOD en Linux
  8. Editor de partituras en Linux
  9. Sintonizador de radio en Linux

6 Comments:

  1. Una pregunta ya estoy instalando el sonido en mi laptop, las caracteristicas son:
    Toshiba A215-s7414 con amd 62X2 ati radeon graphics y realtek
    Toda la semana estuve tratando de levantar el audio y nada, lo que hice fue instalar este paquete: realtek-linux-audiopack-4.07a.tar.bz2
    Tambien instale todos los paquetes mas actuales de ALSA, y aun no tngo audio.
    Al ejecutar los comandos que sugieres me aparece esto:
    root @ primitivo-laptop:~# cat /proc/asound/card0/codec#* | grep Codec
    Codec: Generic 11c1 Si3054
    Codec: Realtek ALC268
    root @ primitivo-laptop:~# cat /proc/asound/cards
    0 [SB]: HDA-Intel – HDA ATI SB
    HDA ATI SB at 0xf8600000 irq 16
    root @ primitivo-laptop:~# cat /proc/asound/version
    Advanced Linux Sound Architecture Driver Version 1.0.15 (Tue Oct 16 14:57:44 2007 UTC).
    Queria ver si me podrias orientar, espero que este cerca de conseguir levantar el audio, o si estoy muy mal tal ves me puedas decir cuales fueron mis errores.

  2. Primi, si tradicionalmente en Linux el sonido ha sido complicado, en algunos portátiles puede ser una odisea. Por suerte tenemos http://www.linux-laptop.net, donde está todo sobre portátiles en Linux. Concretamente veo que figura tu Toshiba A215-s4747 y funciona bien con Ubuntu, aunque parece que les costó activar el sonido. También te puede ayudar nuestro artículo sobre hardware en Linux.
    Ánimo.

  3. Muchas gracias, ya encontre la solucion, te paso el link por si alguien mas se interesa en instalarle un mejor sistema operativo a su lap:
    lddubeau.com/avaktavyam/linux-on-a-compal-ifl90/
    De todos modos voy a postear en mi blog: trixmontero.blogspot.com
    Gracias por tu respuesta rapida y me da gusto que alla gente como tu que comparte sus conocimientos.
    Ahora si voy a disfrutar programando en mi Ubuntu escuchando mi musica favorita.

  4. bueno, yo tengo un problemilla no tan grave pero que me pone idiota al momento de trabajar en el
    laptop, cuando conecto en jack a el input se escuha por los audifonos pero los parlantes
    del laptop no se mutean

    estoy trabajando con debian eth 4.0

    ayuda!

  5. Sánchez Jiménez José Gabriel

    Saludos desde Costa Rica.

    Tengo una consulta, por favor, si me pueden sugerir cómo obtener sonido en UBUNTU 9.04, que me dejó de sonar, a pesar de que tengo una partición y otro SO sí suena.

  6. aristobulo pinzon

    Exelente explicación
    no sabia de esos procesos
    Muchas gracias y animo!
    siempre adelante
    y no te vayas a estrellar por favor!