Configurar Linux para que soporte sonido implica los siguientes pasos:
La siguiente sección cubre cada uno de estos pasos en detalle.
Siga las instrucciones del fabricante para instalar el hardware o encárgueselo a su vendedor.
Las tarjetas de sonido antiguas suelen tener microinterruptores o "jumpers" para ajustar el canal DMA, IRQ, etc; apunte los valores utilizados. Si no está seguro, utilice los valores por defecto. Intente evitar conflictos con otros dispositivos como tarjetas ethernet, controladores SCSI, puertos serie y paralelo, si es posible.
Normalmente debería utilizar el mismo puerto E/S, IRQ y DMA que bajo DOS. En algunos casos (particularmente con tarjetas PnP) puede necesitar utilizar ajustes distintos para conseguir que las cosas funcionen correctamente bajo Linux. Puede que requiera experimentar un poco.
Cuando inicialmente instala Linux, está usando el núcleo precompilado. estos núcleos generalmente no soportan sonido. Lo mejor es recompilar el núcleo con los controladores que necesite. También puede querer recompilar el núcleo para actualizar hacia una nueva versión o para liberar recursos de memoria minimizando el tamaño del mismo.
El Linux Kernel HOWTO
Linux Kernel HOWTO
puede ser consultado para más detalles acerca de la construcción del núcleo. Sólo
mencionaré los aspectos que son específicos a las tarjetas de sonido.
Si nunca ha configurado el núcleo para soporte de sonido, es una buena
idea leer todos los ficheros Readme incluidos con los controladores de sonido
del núcleo, particularmente aquellos que se refieren a su tipo de tarjeta.
Los siguientes ficheros de documentación se pueden encontrar en el directorio
de sonido del núcleo, generalmente instalado en
/usr/src/linux/drivers/sound
:
CHANGELOG - Descripción de los cambios en cada versión. COPYING - Restricciones de copia y copyright. Readme - Últimas y más importantes noticias. Readme.aedsp16 - Información sobre la tarjeta Audio Excel DSP 16. Readme.cards - Notas de configuración de tarjetas específicas. Readme.linux - Notas de instalación separada de controladores de sonido. Readme.modules - Cómo construir un controlador como un módulo del núcleo cargable. Readme.v30 - Nuevas características de la versión 3.0 del controlador de sonido. experimental.txt - Notas de características experimentales.Siga el procedimiento usual de construcción del núcleo. Hay tres formas de ejecutar el proceso de configuración. Un interfaz gráfico de usuario que se ejecuta bajo X11 puede ser llamado usando
make xconfig
, un sistema
basado en menús que sólo requiere un display de texto está disponible como
make menuconfig
y el método original, utilizando make config
,
que ofrece un simple interfaz basado en texto.
Hay que ser especialmente cuidadosos cuando se emplee "make xconfig" o "make menuconfig". Todas las preguntas de Sí/No deben ser examinadas cuidadosamente. La respuesta proporcionada por defecto para estas preguntas es siempre No, lo cual no es lo adecuado en todos los casos. en particular, la opción "/dev/dsp and /dev/audio support" (CONFIG_AUDIO) debe ser habilitada normalmente.
En este documento asumiré que usted utiliza el método tradicional de configuración en línea de comandos invocado utilizando "make config", aunque el proceso es similar en todos los casos.
Hay también dos maneras distintas de configurar el sonido. La primera es la manera "antigua" (la única ofrecida antes del núcleo 2.0.0). Utiliza un programa de configuración independiente que es parte del controlador de sonido. Este método funciona con la mayoría de las tarjetas de sonido excepto con las pocas que requieren controladores adicionales de bajo nivel (miroSOUND, AWE32, y AEDSP16).
El segundo es el "nuevo" método que está mejor integrado con la configuración basada en menús utilizada para el resto del kernel. Este método no funciona bien con las tarjetas de sonido que requieren un fichero descargado de la propia empresa. Esto afecta a las tarjetas PSS, SM Wave, AudioTrix Pro y TurtleBeach Tropez/Maui. Con estas tarjetas debe usarse el método antiguo.
El método "nuevo" se utiliza siempre al hacer "make xconfig". Cuando se utiliza "make menuconfig" puede elegir entre los métodos nuevo y viejo en la submenú de sonido. Cuando utilice "make config" se usará el método viejo por defecto. Sin embargo, si usted ha utilizado el método "nuevo" alguna vez, "make config" lo utilizará también. Puede volver al método "viejo" ejecutando "make menuconfig" y eligiendo el metodo "antiguo".
El método recomendado es utilizar "make menuconfig" junto con el método de configuración de sonido "antiguo". Muchos problemas de configuración son causados (al menos en parte) por el uso incorrecto del método "nuevo".
También es posible construir el controlador de sonido como un módulo cargable del núcleo. Yo recomiendo construir, en un principio, el controlador dentro del núcleo. Una vez que ha comprobado que funciona, si lo desea puede probar usando la opción de módulo del núcleo.
Cuando ejecute make config
, active el soporte de sonido contestando "y" a la
pregunta
Sound card support (CONFIG_SOUND) [M/n/y/?]
Al final de las preguntas de configuración un programa de configuración de sonido será compilado, ejecutado y te preguntará qué opciones de sonido quieres. Tenga cuidado al contestar estas preguntas, ya que si contesta incorrectamente a alguna, repercutirá en preguntas posteriores. Por ejemplo, no conteste "yes" (sí) a la primera pregunta (PAS16) si realmente no tiene una PAS16. No active más tarjetas de las que realmente tiene, ya que consumen memoria. Además algunos controladores (como el MPU401) pueden entrar en conflicto con el controlador SCSI e impedir la arranque del núcleo.
Aquí listo una pequeña descripción de cada una de las opciones del diálogo de configuración. Conteste "y" (sí) o "n" (no) en cada pregunta. La respuesta por defecto es mostrada en primer lugar y en mayúsculas, de tal forma que "Y/n/? significa "y" (sí) por defecto, y "N/y/? significa "n" (no). Para usar el valor por defecto basta con pulsar return, pero hay que recordar que el valor por defecto no significa que sea necesariamente correcto.
Si introduce como respuesta una interrogación (?) saldrá un corto mensaje describiéndote esa opción de configuración.
Debe fijarse en que no todas las preguntas serán respondidas. El programa de configuración desactivará algunas preguntas dependiendo de las respuestas anteriores. Además él también elegirá algunas opciones automáticamente.
Si previamente ha compilado el núcleo para soporte de sonido entonces la configuración anterior se puede salvar. Si desea usar los valores anteriores conteste "y" (sí). Si está probando una configuración diferente o ha actualizado a un núcleo nuevo, debe contestar "n" (no) e ir a través del proceso de configuración.
Conteste "y" (sí) sólo si tiene una Pro Audio Spectrum 16, Pro Audio Studio 16 o Logitech SoundMan 16. No conteste "y" (sí) si tiene otra tarjeta de Media Visión o Logitech ya que no son compatibles con PAS16.
Conteste "y" (sí) sólamente si posee una SoundBlaster original de Creative Labs o una clónica 100% compatible a nivel hardware como por ejemplo una Thunderboard o una SM Games. Si su tarjeta estaba en la lista de tarjetas soportadas busque las instrucciones específicas en el fichero Readme.cards antes de contestar a la pregunta. Para una tarjeta desconocida puede contestar "y" (sí) si la tarjeta presume de ser compatible con SoundBlaster.
Conteste "y" (sí) si tienes una GUS o una GUS MAX. Conteste "n" (no) en caso contrario ya que el controlador consume mucha memoria.
Tenga cuidado con esta pregunta. El interfaz MPU401 es soportado
por casi todas las tarjetas de sonido, aunque algunas tarjetas
tienen su propio controlador MPU401. Activar la opción MPU401 con esas
tarjetas causará un conflicto. También el activar MPU401 en un
sistema que realmente no tiene un MPU401 puede causar algún problema.
Si su tarjeta estaba en la lista de tarjetas soportadas busque las
instrucciones específicas en el fichero Readme.cards
.
Es seguro contestar "y" (sí) si posee una verdadera tarjeta interfaz
MPU401 MIDI.
Lo mejor es contestar "n" (no) siempre. El interfaz UART 6850 raramente es usado.
Conteste "y" (sí) solamente si tiene una Orchid SW32, Cardinal DSP16 o alguna otra tarjeta basada en el juego de chips PSS (AD1848 codec + ADSP-2115 DSP chip + Echo ESC614 ASIC CHIP).
Conteste "y" (si) si tiene instalada una tarjeta hija de 16 bits en su GUS. Conteste "n" (no) si tiene una GUS MAX. Activando esta opción se desactiva el soporte GUS MAX.
Conteste "y" (sí) sólo si tiene una GUS MAX.
Piense otra vez cuidadosamente antes de contestar "y" (sí) a
esta pregunta. Lo mejor es contestar sí cuando se tenga una tarjeta
original Windows Sound System fabricada por Microsoft o una
Aztech SG16 Pro (o una NX16 Pro). También puede contestar
"y" (sí) en el caso de que su tarjeta no estuviera en la lista
anterior. Para las tarjetas que tienen soporte del controlador, consulte
las instrucciones específicas en el fichero Readme.cards
. Algunos
controladores tienen su propio soporte MSS y por lo tanto activar esta
opción causará un conflicto.
Conteste "y" (sí) si tiene una tarjeta basada en el juego de chips Ensoniq Soundscape. Estas tarjetas son fabricadas, al menos, por Ensoniq, Spea y Reveal (Reveal hace otras tarjetas también).
Conteste "y" (sí) si tiene una AudioTriX Pro.
Conteste "y" (sí) si su tarjeta tiene un chip de interfaz de audio Mozart (OAK OTI-601) o un MAD16 (OPTI 82C928 o 82C929). Estos chips son actualmente muy comunes por lo que es posible que algunas tarjetas "sin nombre" tengan alguno de ellos. Además el chip MAD16 es usado en algunas tarjetas fabricadas por fabricantes como Turtle Beach (Tropez), Reveal (algunos modelos) y Diamond (modelos más recientes).
Conteste "y" (sí) si su tarjeta está basada en el juego de chips Crystal CS4232.
Conteste "y" (sí) si tiene algunas de estas tarjetas.
Active esta opción si su tarjeta es una SoundBlaster Pro o SoundBlaster 16. Activela también con cualquier clónico de la SoundBaster Pro. Contestar "n" (no) ahorra algo de memoria pero contestar "y" (sí) es la mejor opción.
Actívela si tiene una SoundBlaster 16 (incluída la AWE32 o AWE64).
Active esta opción si tiene una tarjeta Audio Excel DSP 16.
Mire el fichero readme.aedsp16
para más información.
Después el programa de configuración hace algunas preguntas de servicios de alto nivel. La contestación recomendada es "y" (sí) para cada una de las preguntas. Conteste "n" (no) solamente si sabe que no va a utilizar esa opción.
Conteste "y" (sí). Si contesta "n" (no) desactivará los dispositivos de los conversores A/D y D/A: /dev/dsp y /dev/audio.
Si contesta "n" (no) desactivará los dispositivos /dev/midixx
y el acceso a cualquier puerto MIDI usando /dev/sequencer
y
/dev/music
.
Esta opción también afecta a los dispositivos compatibles con el MPU401 y/o General MIDI.
Conteste "y" (sí) aquí.
Contestar "n" (no) desactivará /dev/sequencer
y /dev/music
.
Conteste "y" (sí) si tiene una tarjeta Sound Galaxy NX Pro y quieres soporte para sus funciones extra del mezclador.
Conteste "y" (sí) si tiene una tarjeta MV Jazz16.
Conteste "y" (sí) si tiene una tarjeta Logitech SoundMan Games.
Después de las preguntas anteriores, el programa de configuración pregunta
por la información específica de la tarjeta. Generalmente es indicar la
dirección I/O, IRQ y el DMA. Con algunas tarjetas el programa pregunta por los
ficheros que van a ser usados durante la inicialización de la tarjeta. Son
las tarjetas que tienen un chip o un microprocesador DSP el cual debe ser
inicializado bajando un programa (microcódigo) a la tarjeta. En algunos casos
este fichero es escrito a un fichero de cabecera .h por el programa de
configuración y ya es incluido en el controlador durante la compilación. Lea de nuevo
la información concerniente a su tarjeta en el fichero Readme.cards
.
Por último se le preguntará:
The sound driver is now configured.
Save copy of this configuration to /etc/soundconf [Y/n/?]
Normalmente debe contestar "y" (sí) de manera que si más tarde necesita recompilar el núcleo tendrá la opción de usar la misma configuración del controlador de sonido.
Si estás actualizando un controlador anterior de sonido, asegúrese de que los
ficheros /usr/include/sys/soundcard.h
y /usr/include/sys/ultrasound.h
son
enlaces simbólicos a los ficheros correspondientes en /usr/include/linux
o
que simplemente contienen las líneas #include <linux/soundcard.h>
y #include
<linux/ultrasound.h>
, respectivamente.
Ahora está preparado para compilar e instalar el nuevo núcleo.
Para operar correctamente, deben crearse los ficheros de dispositivos de sonido. Normalmente, estos se crean durante la instalación de su sistema Linux. Puede efectuarse un chequeo rápido utilizando el comando listado más abajo. Si el comando responde de la manera mostrada (la fecha puede variar), entonces los ficheros de dispositivo son, casi seguro, correctos.
% ls -l /dev/sdnstat
crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat
Dése cuenta de que tener los ficheros de dispositivo correctos no garantiza nada de por sí. El controlador del núcleo debe también estar cargado y compilado antes de que los dispositivos funcionen (se hablará más de ello más tarde).
En algunos casos, si usted cree que los ficheros de dispositivo son erróneos, puede
crearlos de nuevo utilizando el script que viene al final del fichero Readme.linux
en el
directorio /usr/src/linux/drivers/sound
, ejecutándolo como root. De manera
alternativa, la mayor parte de las distribuciones Linux tienen el script /dev/MAKEDEV
el cual puede ser utilizado para este propósito.
Si está utilizando el controlador del altavoz del PC, lea la documentación que adjunta al paquete para determinar qué ficheros de dispositivo necesita crear.
Ahora debe estar preparado para inicializar el núcleo y comprobar los controladores de sonido. Siga el procedimiento habitual para instalar y reinicializar el nuevo núcleo (por supuesto tenga a mano el anterior núcleo por si hay problemas)
Durante la inicialización, compruebe si se da un mensaje como el siguiente durante
el arranque (si las líneas aparecen muy rápido y no las puede leer,
utilice el comando dmesg
):
Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> at 0x388
Sound initialization complete
Éste debe coincidir con el tipo de tu tarjeta de sonido y con los parámetros determinados por los jumpers que tenga (si es que tiene alguno).
Tenga en cuenta que los mensajes de más arriba no se muestran cuando se usa el módulo cargable del controlador del sonido (a menos que lo habilite, utilizando "insmod sound trace_init=1).
Cuando el controlador de sonido está compilado dentro del núcleo, deberían mostrarse los mensajes "Sound initialization started" y "Sound initialization complete". Si no se muestran, es que no hay controlador de sonido presente en el núcleo. En ese caso, debería comprobar que usted instaló realmente el núcleo que compiló tras habilitar el soporte de sonido.
Si no se muestra nada entre las líneas de "Sound initialization started" y "Sound initialization complete", quiere decir que no se detectaron dispositivos de sonido. Lo más probable es que usted no tenga habilitado el controlador correcto, que la tarjeta no esté soportada, que el puerto E/S no es el correcto, o que tiene una tarjeta PnP que no ha sido configurada.
El controlador también puede mostrar mensajes de error y advertencias durante el inicio. Esté atento para localizar alguno cuando inicie por primera vez después de haber configurado el controlador de sonido.
Lo siguiente que debe comprobar es el fichero de dispositivo /dev/sndstat
.
Leer el fichero de dispositivo del estado del controlador de sonido debería proporcionar
información adicional acerca de si se inicializó correctamente el controlador de la tarjeta.
Un ejemplo de esta información sería el siguiente:
% cat /dev/sndstat
Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root,
Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586)
Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586
Config options: 0
Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401
Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0
Audio devices:
0: Sound Blaster 16 (4.13)
Synth devices:
0: Yamaha OPL-3
Midi devices:
0: Sound Blaster 16
Timers:
0: System clock
Mixers:
0: Sound Blaster
El comando de más arriba puede devolver algunos mensajes de error. "No such file or directory" indica que necesita crear los ficheros de dispositivo (vea sección 4.3). "No such device" indica que el controlador de sonido no está cargado o enlazado con el núcleo. Vuelva a la sección 4.2 para corregir esto.
Si las líneas dentro de la sección "Card config:" de /dev/sndstat están listadas entre paréntesis (tal como (SoundBlaster at 0x220 irq 5 drq 1,5)"), significa que el dispositivo fue configurado pero no detectado.
Ahora debe estar preparado para reproducir un fichero de sonido. Consiga un fichero de ejemplo y envíelo al dispositivo de sonido para comprobar la salida de sonido. Por ejemplo:
% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio
(Asegúrese de que no omitir el ">" en estos comandos)
Fíjese de que, en general, usar cat
no es la manera correcta de reproducir archivos de sonido,
esto es sólo una prueba rápida. Deseará conseguir un reproductor de sonido en regla (descrito más
tarde) que hará un mejor trabajo.
Este comando sólo funcionará si existe, al menos, un dispositivo listado en la sección "audio devices" de /dev/sndstat. Si esa sección está vacía debería comprobar por qué no fue detectado el dispositivo.
Si los comandos de arriba devuelven "I/O error", debería mirar al final de los mensajes del núcleo listados utilizando dmesg. Lo mas probable es que allí se muestre un mensaje de error. Muy a menudo el mensaje es: "Sound: DMA (output) timed out - IRQ/DRQ config error?". Este mensaje siginifica que el controlador no pudo conectar con la tarjeta de sonido en la IRQ esperada. En la mayor parte de los casos esto quiere decir que el IRQ o el canal DMA configurados en el controlador no funcionan. La manera más sencilla de conseguir que funcione es intentar con todas las posibles DMAs e IRQs soportados por el dispositivo.
Otra posible razón es que el dispositivo no sea compatible con el dispositivo hacia el cual está configurado el controlador. Esto es casi cierto en el caso de una supuesta "SoundBlaster (Pro/16) compatible" que no funciona con el controlador SoundBlaste. En ese caso debería intentar averiguar el dispositivo con el que su tarjeta es compatible (enviando un mensaje al foro de noticias comp.os.linux.hardware, por ejemplo).
Algunos ficheros de sonido de ejemplo se pueden obtener de: ftp://tsx-11.mit.edu
Ahora puede comprobar la grabación de sonido. Si tiene una tarjeta de sonido con capacidad de entrada, puede realizar una prueba rápida con utilizando los siguientes comandos.
# graba 4 segundos de audio desde el micrófono
EDT% dd bs=8k count=4 < /dev/audio > sample.au
4+0 records in
4+0 records out
# play back sound
% cat sample.au > /dev/audio
Obviamente para que esto funcione necesita tener un micrófono conectado a la tarjeta de sonido. También necesita un programa mezclador (mixer) para seleccionar al micrófono como dispositivo de entrada y ajustar el nivel de grabación.
Si supera estas pruebas, puede confiar razonablemente en que el hardware y el software D/A y A/D funciona. Si tiene problema, mire la siguiente sección de este documento.
Si después de seguir las instrucciones de este documento todavía tiene problemas, aquí hay algunas cosas que debe comprobar. Las comprobaciones están listadas en orden ascendente de complejidad. Si una comprobación falla, resuelve el problema antes de pasar al siguiente punto.
Puede comprobar la fecha del kernel para ver si está ejecutando el que
compiló con soporte para sonido. Para comprobarlo, utilice el comando uname
:
% uname -a
Linux fizzbin 2.0.0 #1 Tue Jun 4 16:57:55 EDT 1996 i386
o imprimiendo por pantalla el archivo /proc/version
:
% cat /proc/version
Linux version 2.0.0 (root@fizzbin) (gcc version 2.7.0) #1 Tue Jun 4 16:57:55 EDT 1996
Si la fecha no se corresponde con la que era cuando compiló el núcleo por última vez,
entonces usted está ejecutando un núcleo anterior. ¿Reinicializó Linux? Si usa
LILO, ¿lo reinstaló (ejecutando, normalmente, /etc/lilo/install
)?. Si arranca desde
disquete, ¿creó un nuevo disco de inicio y lo usó al arrancar?.
La manera más facil de hacer esto es comprobar la salida de "dev/sndstat" tal y como se describió más arriba. Si la salida no es como se esperaba, entonces ocurrió algo con la configuración o construcción del núcleo. Comience de nuevo el proceso de instalación, comenzando con la instalación y construyendo el núcleo.
Asegúrese de que la tarjeta de sonido fue detectada cuando rearrancó el núcleo.
Debería haber visto un mensaje durante la inicialización del núcleo.
Si el mensaje desapareció de la pantalla muy pronto,
puede revisarlo usando el comando dmesg
:
% dmesg
o
% tail /var/adm/messages
Si su tarjeta de sonido no fue encontrada entonces algo no funcionó. Asegúrese de que está bien instalada. Si la tarjeta de sonido funciona bajo DOS entonces se puede asegurar que no es debido al hardware por lo que seguramente el problema esté en la configuración del núcleo. Quizá configuró su tarjeta como otra de otro tipo o con parámetros equivocados, o quizás su tarjeta no es compatible con los controladores de tarjeta de sonido del núcleo de Linux.
Una posibilidad es que su tarjeta sea una del tipo "compatible" que requiere
inicialización por el controlador del DOS. Intente arrancar DOS
y cargar el controlador suministrado por el vendedor de la tarjeta de sonido.
Después reinicie Linux "en caliente" pulsando Control-Alt-Supr. Asegúrese
de que la dirección E/S, el DMA y el IRQ para Linux son los mismos que los
usados bajo DOS. Lea el fichero Readme.cards
para configurar su tipo de
tarjeta.
Si su tarjeta de sonido no está listada en este documento, es posible que los controladores de Linux no la soporten. Compruebe las referencias listadas al final de este documento.
Intente leer desde el dispositivo /dev/audio
usando el comando dd
listado anteriormente en este documento. El comando se debe ejecutar sin errores.
Si esto no va bien, entonces es posible que el problema sea un conflicto IRQ o DMA o algun tipo de incompatibilidad hardware (el dispositivo no está soportado por Linux o el controlador está configurado para un dispositivo incorrecto).
Una posibilidad remota es que sea problema del hardware. Intente comprobar el controlador bajo DOS, si es posible, para eliminar esta posibilidad.
Si todavía tiene problemas, aquí van unas sugerencias finales:
emacs
y teclee Esc-x doctor
:-)