Esta sección contesta algunas de las preguntas que mas comúnmente han aparecido en los grupos de noticias Usenet y en las listas de correo.
Éstos son los nombres de ficheros de dispositivo "estándar", aunque algunas distribuciones de Linux utilizan nombres ligeramente diferentes.
normalmente un enlace a /dev/audio0
Dispositivo de audio compatible con las estaciones de trabajo Sun (solamente una implementación parcial, ya que no soporta el interfaz ioctl y sólo permite formato u-law)
Segundo dispositivo de audio (si es soportado por la tarjeta o si hay más de una tarjeta instalada)
Normalmente un enlace a /dev/dsp0
Primer dispositivo de muestreo digital
Segundo dispositivo de muestreo digital
Normalmente un enlace a /dev/mixer0
Primer mezclador de sonido
Segundo mezclador de sonido
Interfaz del secuenciador de alto nivel
Acceso a bajo nivel MIDI, FM, y GUS
Normalmente un enlace a /dev/music
Primer puerto MIDI directo
Segundo puerto MIDI directo
Tercer puerto MIDI directo
Cuarto puerto MIDI directo
Visualiza el estado del controlador de sonido cuando es leído
El controlador del altavoz del PC incorpora los siguientes dispositivos:
equivalente a /dev/audio
equivalente a /dev/dsp
equivalente a /dev/mixer
Los ficheros de sonido de las estaciones de trabajo Sun (.au) pueden ser
reproducidos enviándolos al dispositivo /dev/audio
. Las muestras pueden
ser enviadas al /dev/dsp
. Es preferible usar un programa como por ejemplo
play
, el cual reconocerá la mayoría de los tipos de ficheros y pasará
a la tarjeta de sonido la correcta frecuencia de muestreo, etc.
Programas como wavplay o vplay (en el paquete snd-util) darán los mejores resultados con archivos WAV. Sin embargo, no reconocen el los archivos WAV con formato de compresión Microsoft ADPCM. Versiones antiguas de play (del paquete Lsox) tampoco funcionarán bien con los archivos WAV de 16 bit.
El comando splay incluido en el paquete snd-util puede utilizarse para reproducir la mayor parte de los archivos de sonido si se introducen manualmente los parámetros adecuados en la línea de comandos.
Leer de /dev/audio
o /dev/dsp
devolverá un muestreo de datos que puede ser
redireccionado a un fichero. Un programa como el vrec
hará más fácil el controlar
la frecuencia de muestreo, la duración, etc. También se necesita un programa
muestreador para seleccionar el dispositivo de entrada adecuado.
Con el controlador actual de sonido es posible tener varias tarjetas SoundBlaster, SoundBlaster Pro, SoundBlaster 16, MPU-401 o MSS en el sistema. Instalar dos SoundBlasters es posible pero requiere definir las macros SB2_BASE, SB2_IRQ, SB2_DMA y (en algunos casos) SB2_DMA2 editando local.h manualmente. También es posible tener una SoundBlaster a la vez que una PAS16.
Con los nuevos núcleos 2.0.x que configure utilizando make config, en lugar del fichero local.h
,
será necesario editar el fichero /usr/incluide/linux/autoconf.h
. Tras la sección que contiene
las líneas:
#define SBC_BASE 0x220
#define SBC_IRQ (5)
#define SBC_DMA (1)
#define SB_DMA2 (5)
#define SB_MPU_BASE 0x0
#define SB_MPU_IRQ (-1)
añada estas otras (con los valores adecuados a su sistema):
#define SB2_BASE 0x330
#define SB2_IRQ (7)
#define SB2_DMA (2)
#define SB2_DMA2 (2)
Los siguientes controladores no permiten instancias múltiples
Necesita crear los ficheros de dispositivo del controlador de sonido. Vea la sección sobre creación de ficheros de dispositivo. Si tiene que crear los ficheros de dispositivo, asegúrase de que tienen los números de dispositivo mayor y menor correcto (algunas distribuciones antiguas en CD-ROM de Linux no crean los ficheros de dispositivo correctos durante la instalación).
No ha arrancado con un núcleo que contenga el controlador de sonido o la dirección de E/S de la configuración no corresponde con su hardware. Compruebe que está ejecutando el núcleo recién compilado y verifique que las opciones introducidas en la configuración del controlador de sonido corresponden con las opciones del hardware.
Esto puede ocurrir si intenta grabar datos a /dev/audio
o /dev/dsp
sin
haber creado los ficheros de dispositivo necesarios. El dispositivo de sonido
ahora es un fichero normal y ocupa espacio en su partición de disco. Necesita ejecutar
el script descrito en la sección sobre creación de ficheros de dispositivo
de este documento.
Esto también puede suceder con Linux 2.0 y posteriores si no hay suficiente memoria RAM libre en el sistema cuando se abre el dispositivo. El controlador de sonido requiere, al menos, dos páginas (8k) de memoria física RAM contiguas para cada canal DMA. Esto sucede, a veces, en máquinas con menos de 16M de RAM o que llevan encendidas durante mucho tiempo. Es posible liberar algo de RAM compilando y ejecutando el siguiente programa en C antes de intentar abrir de nuevo el dispositivo:
main() {
int i;
char mem[500000];
for (i = 0; i < 500000; i++)
mem[i] = 0;
exit(0);
}
Solamente puede abrirse un proceso a la vez en un dispositivo de sonido.
A la mayoría nos gustaría saber si otro proceso está usando el dispositivo
en cuestión. Una forma de averiguar ésto es usar el comando fuser
:
% fuser -v /dev/dsp
/dev/dsp: USER PID ACCESS COMMAND
tranter 265 f.... tracker
En el ejemplo de arriba, el comando fuser
muestra que el proceso 265
tiene el dispositivo abierto. Esperar a que el proceso se complete o matarlo
permitirá que el dispositivo de sonido pueda ser accedido una vez más. Usted
debe ejecutar el comando fuser
como root para recibir un informe de
lo que están utilizando otros usuarios aparte de usted mismo.
De acuerdo con Brian Gough, para las tarjetas SoundBlaster que usan el canal DMA 1 hay un conflicto en potencia con el controlador de la cinta QIC-02, la cual también usa el DMA 1, causando los errores "device busy". Si está usando FTAPE, debe tener este controlador activado. De acuerdo con el FTAPE-HOWTO el controlador QIC-02 no es esencial para el uso de FTAPE; solamente el controlador QIC-117 es necesario. Reconfigurar el núcleo para usar el QIC-117 en vez del QIC-02 permite coexistir a FTAPE y al controlador de sonido.
Generalmente, el síntoma es que una muestra de sonido se reproduce durante un segundo y después se para completamente o devuelve un mensaje de error como "missing IRQ" o "DMA timeout". La mayoría de las veces significa que los parámetros del IRQ o del canal DMA son incorrectos. Verifique que la configuración del núcleo corresponde con los jumpers de la tarjeta de sonido y que no entran en conflicto con otro dispositivo.
Otro síntoma es que la muestra de sonido se "repite". Esto es generalmente causado por un conflicto IRQ.
Reproducir ficheros MOD absorbe gran capacidad de la CPU. Si tiene demasiados procesos ejecutándose en su ordenador, no se podrá reproducir en tiempo real. Las posibles opciones son:
Si tiene una tarjeta Gravis Ultrasound, debe usar uno de los reproductores
de ficheros MOD escritos específicamente para la GUS (por ejemplo gmod
).
El controlador de sonido versión 1.0c y anteriores usaban un esquema ioctl()
diferente e incompatible. Obtenga un código fuente más moderno o haga los
cambios necesarios para adaptarlo al nuevo controlador de sonido. Lea el
fichero del controlador de sonido Readme
para más detalles.
Asegúrese también de que ha usado la última versión del soundcard.h
y
ultrasound.h
cuando compile la aplicación. Lea las instrucciones de
instalación al comienzo de este texto.
Este es probablemente el mismo problema que el descrito en la anterior cuestión.
ftp://nic.funet.fi/pub/Linux/ALPHA/sound/. Hay que señalar que este directorio está "escondido" y no aparece en los listados de directorios. Si usted hace un "cd" al directorio y usa el comando FTP "dir", los ficheros están ahí. En el momento de escribir estas líneas, se puso disponible nueva documentación en la Página Web de 4Front Technologies. Otra fuente de información es la Guía Linux Multimedia, descrita en la sección Referencias.No hay una respuesta fácil para esta pregunta, ya que depende de:
En general, las máquinas 386 deberían ser capaces de reproducir muestras o música sintetizada FM en una tarjeta de sonido de 8 bits sin problemas.
Reproducir ficheros MOD, necesita muchos recursos de la CPU. Algunas medidas experimentales han mostrado que reproducir a 44kHz necesita más del 40% de la velocidad de un 486/50 y un 386/25 ha penas puede reproducir rápidamente más de 22kHz (con una tarjeta de 8 bits como la SoundBlaster). Una tarjeta como la Gravis UltraSound ejecuta más funciones en el hardware y requerirá menos recursos de la CPU.
Todo esto supone que el ordenador no está ejecutando otras tareas intensivas en la CPU.
Convertir ficheros de sonido y añadir efectos usando una utilidad como Sox
es mucho más rápido si tienes un coprocesador matemático (o un procesador
con coprocesador integrado). El controlador del núcleo
por si mismo no hace cálculos de coma flotante.
(La siguiente explicación fue proporcionada por seeker@indirect.com
)
Linux sólo reconoce la 1542 en la dirección 330 (por defecto) o en la 334
y la PAS solamente permite la emulación MPU-401 en la 330. Aunque se desactive
el MPU-401 bajo software, algo todavía entra en conflicto con el 1542 si continúa
con su dirección por defecto. Mover la 1542 a la dirección 334 hace feliz
a ambas.
Además, tanto la 1542 como la PAS16 hacen DMA de 16 bits, por lo que si realiza una muestra a 16 bits 44kHz y en estéreo y guarda el fichero a un dispositivo SCSI se colgará el 1542, por lo que existe un problema. El DMA se solapa y no hay suficiente tiempo para refrescar la RAM, por lo que se obtiene el mensaje "PARITY ERROR-SYSTEM HALTED", sin ninguna pista que indique el motivo que lo causó.
Aún puede ser peor porque los vendedores de unidades de cinta QIC-117 recomiendan
establecer el bus activado/desactivado durante un tiempo tal que la 1542 esté activada
más tiempo del normal. Consiga el programa SCSISEL.EXE
de la BBS de Adaptec
o de cualquier otro lugar de Internet, y reduzca el tiempo del bus activado o incremente
el tiempo del bus desactivado hasta que el problema se solucione. SCSISEL
cambia
los parámetros de la EEPROM, por lo que es más duradero que un parche en el controlador
de DOS desde la línea del CONFIG.SYS
, y funcionará si arranca directamente en Linux
(cosa que no hará el parche de DOS)
El último problema: los viejos juegos de chip Symphony reducen drásticamente
el tiempo de los ciclos de I/O para aumentar los accesos al bus. Ninguna de
las tarjetas de sonido que he probado han dado ningún problema con el tiempo reducido
excepto la PAS16. La BBS de Media Vision tiene el fichero SYMPFIX.EXE
el cual se supone que soluciona el problema añadiendo un bit de diagnóstico en
el controlador del bus del Symphony, pero no da muchas garantías. Usted puede
necesitar:
Young Microsystems actualizará las placas que importaron por 30$ (US); otros vendedores harán lo mismo si puede probar quién hizo o importó la placa madre (buena suerte). El problema está en el chip del interfaz del bus de ProAudio, que yo sepa. Nadie compra una tarjeta de 120$ y la conecta a un AT de 6MHz. La mayoría lo hará en un 386/486 a 25-40MHz, y seguramente podrá manipular al menos frecuencias de bus de 12MHz si los chips están bien diseñados.
El primer problema depende del juego de chips usados en su placa base, de la velocidad del bus y de otros parámetros de la BIOS, y de la fase de la luna. El segundo problema depende del parámetro de la opción de refresco (oculto o sincronizado), de la frecuencia de DMA del 1542 y (posiblemente) de la frecuencia de E/S (entrada/salida) del bus. El tercero se puede determinar llamando a Media Vision y preguntándoles qué chip de Symphony es incompatible con su lento diseño. Atento: 3 de 4 técnicos con los que hablé tenían el cerebro dañado. Asistí atónito a todo lo que hablaron acerca del hardware de los demás, ya que ellos no parece que conozcan el suyo muy bien.
Debido a limitaciones del hardware, esto no es posible con la mayoría de las tarjetas de sonido. Algunas tarjetas nuevas lo soportan. Lea la sección de "modo bidireccional" en la Hacker's Guide To VoxWare para más información.
En los últimos 286, la interrupción IRQ 2 es asignada al segundo controlador de interrupciones. Es equivalente a IRQ 9.
En el pasado, Creative Labs no era partidaria de dar información acerca de la programación de estas tarjetas. Ellos han cambiado su política y en los núcleos Linux 2.1.x se incluye ahora un controlador AWE.
Esto ocurre después de un reinicio en caliente hacia el DOS. Algunas veces el
mensaje de error se refiere engañosamente a que está mal el fichero CONFIG.SYS
.
La mayoría de las tarjetas de sonido tienen los parámetros del IRQ y del DMA programables por Software. Si tu usa parámetros diferentes entre el Linux y el MS-DOS/Windows, esto causará problemas. Algunas tarjetas de sonido no aceptan nuevos parámetros sin una completa inicialización (reset) (por ejemplo corte la corriente o pulse el botón de reset).
La solución más rápida para este problema es llevar a cabo un completo reinicio usando el botón de reset o cortando la energía después de un reinicio en caliente (por ejemplo ctrl-alt-del).
La solución correcta es asegurarse de utilizar los mismos parámetros IRQ y DMA en el MS-DOS y Linux (o no utilizar MS-DOS :-).
Los usuarios del puerto para Linux del juego de ID Software DOOM pueden estar interesados en estas notas.
Para la correcta salida de sonido se necesita la versión 2.90 o posterior del controlador de sonido. Tiene soporte para el "modo DOOM" en tiempo real.
Las muestras de sonido son de 16 bits. Si usted posee una tarjeta de sonido de 8 bits puedes hacer que el sonido funcione usando uno de los muchos programas disponibles en ftp://sunsite.unc.edu
Si la ejecución del DOOM en su sistema es pobre, desactivar el sonido (renombrando
el fichero sndserver
) puede mejorarla.
Por defecto DOOM no soporta música (como en la versión del DOS). El programa
musserver
añadirá soporte para música al DOOM bajo Linux. Lo puede encontrar
en
ftp://pandora.st.hmc.edu
Usar cables con buen aislante y probar la tarjeta de sonido en diferentes ranuras le ayudará a reducir el ruido. Si la tarjeta de sonido tiene control de volumen puede intentar diferentes posiciones (al máximo es probablemente lo mejor).
Usar un programa mezclador le asegurará que las entradas no deseadas (por ejemplo el micrófono) están puestas a cero.
Algunas tarjetas de sonido simplemente no están diseñadas con buen aislante y con toma de tierra y son propensas a generar ruido.
Finalmente, en mi sistema encontré que la opción de línea de comandos del kernel
no-hlt
reduce el nivel de ruido. Esta opción le dice al kernel que no
utilice la instrucción halt cuando ejecuta el bucle de procesos activos. Puede
probar esto al arrancar, o establecerlo utilizando el comando append="no-hlt"
en su fichero de configuración de LILO.
Si puede reproducir sonido pero no puede grabar, siga estos pasos:
A veces, se utiliza un canal DMA distinto al grabar que al reproducir. En este caso la razón más probable es que el DMA de grabación no esté ajustado correctamente.
En la mayoría de los casos una tarjeta "compatible SoundBlaster" funcionará mejor bajo Linux si se configura con un controlador distinto al de la SoundBlaster. La mayoría de las tarjetas de sonido presumen de ser compatibles (como "compatible 16 bit SB Pro" o "SB compatible 16 bit") pero normalmente esta compatibilidad Sound Blaster es sólo un "truco" proporcionado para la compatibilidad con los juegos bajo DOS. La mayoría de las tarjetas tienen un modo nativo 16 bit que probablemente será soportado por las versiones de Linux más recientes (2.0.1 y posteriores).
Las tarjetas de sonido de 16 bits descritas como compatibles SoundBlaster realmente sólo son compatibles con la SoundBlaster Pro de 8 bits. Generalmente tienen un modo de 16 bits que no es compatible con la SoundBlaster 16 y tampoco es compatible con el controlador de sonido del Linux.
Puede conseguir que la tarjeta funcione en modo 16-bits utilizando el controlador MAD16 o MSS/WSS.
Estos son unos buenos sitios para buscar aplicaciones específicas de sonido para Linux:
Con los últimos núcleos el controlador de sonido es soportado como un módulo cargable.
Lea los ficheros /usr/src/linux/drivers/sound/Readme.modules
y
/usr/src/linux/Documentation/modules.txt
(o /usr/src/linux/README
)
para más detalles.
Pruebe con el programa oplbeep
disponible en
ftp://sunsite.unc.edu/pub/Linux/apps/sound/oplbeep-alpha.tar.gz
Una variante es el programa beep
en
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tgz
El paquete modutils
tiene un programa de ejemplo y un parche del
núcleo que soporta llamadas a programas externos para generar los sonidos
del núcleo.
Alternativamente, algunas tarjetas se pueden conectar al altavoz del PC por lo que todos los sonidos van a los altavoces de la tarjeta.
Los controladores de sonido del núcleo soportan diferentes sistemas operativos basados en la arquitectura Intel y compatibles con Unix, y se pueden obtener como un paquete separado del núcleo del Linux. Hasta febrero del 96 el autor había llamado al software "VoxWare". Desafortunadamente este nombre ha sido registrado por VoxWare Incorporated, y no puede ser usado. El nuevo nombre del controlador es OSS/Free.
El Open Sound System es un controlador del sonido del núcleo disponible comercialmente para varios sistemas Unix, vendido por 4Front Technologies. La versión libre, conocida como OSS/Free continuará siendo desarrollada totalmente gratis para los sistemas Linux.
Otros nombres con los que puede encontrarse que han sido usados en el pasado para referirse al mismo controlador de sonido son TASD (Controlador de Sonido Temporalmente Anónimo) y USS (Sistema de Sonido Unix).
Para más información visite la página Web de 4Front Technologies. http://www.4front-tech.com. Escribí una revisión de OSS/Linux para la edición de Junio de 1997 de Linux Journal.
El soporte total de Plug and Play irá desarrollándose en la versión 2.1.x de Linux. En este momento hay un buen número de formas para conseguir que las tarjetas de sonido Plug and Play funcionen.
Si usted posee un sistema Pentium o superior con BIOS Plug and Play, éste ya cuidará de configurar las tarjetas por usted. Asegúrese de que usted configura el controlador de sonido de Linux para usar la misma dirección E/S, IRQ y canal DMA que las configuradas por la BIOS.
Hay un paquete de herramientas Plug and Play para Linux que puede utilizarse para ajustar la tarjeta. Puede encontrarse en el sitio Web de Red Hat http://www.redhat.com/ (puede también estar incluido en su distribución Linux).
Si usa la tarjeta bajo Windows95, puede utilizar el Administrador de Dispositivos para establecer los valores de la tarjeta, y rearrancar Linux en caliente utilizando el programa LOADLIN. Asegúrese de que Linux y Windows95 utilizan los mismos parámetros de configuración de la tarjeta.
Si utiliza la tarjeta bajo DOS, puede utilizar la utilidad icu
que viene con las tarjetas
SoundBlaster16 PnP para configurarlas bajo DOS, y luego rearrancar Linux en caliente utilizando
el programa LOADLIN. De nuevo, asegúrese de que DOS y Linux utilizan los mismos parámetros de
configuración de la tarjeta.
El controlador de sonido comercial OSS da soporte a la tarjeta SoundBlaster16 PnP. Puede adquirir este controlador de 4Front Technologies.
Un cambio en el controlador de sonido de la versión 1.3.67 rompía algunos programas de reproducción de sonido los cuales (incorrectamente) comprobaban que el resultado del ioctl SNDCTL_DSP_GETBLKSIZE era mayor que 4096. Las utilidades incluidas en el último paquete snd-util-3.x.tar.gz (en ftp://ftp.4front-tech.com/ossfree.) ahora manejan esto de manera adecuada. Las últimas versiones del controlador de sonido también han sido arregladas para impedir reservar fragmentos menores de 4096 bytes, lo que resuelve el problema con las utilidades antiguas.
El controlador de sonido soporta diferentes parámetros de configuración. El programa
configure
incluido con el controlador de sonido comprueba las dependencias entre
los parámetros. Las herramientas usadas para configurar el núcleo no soportan
este nivel de funcionabilidad.
Los últimos núcleos permiten usar las herramientas de configuración del núcleo estándar con el controlador de sonido (vea la sección "Configurando el Núcleo").
Puede construir el controlador de sonido como un módulo cargable y usar kerneld
para cargarlo y descargarlo automáticamente. Esto puede presentar un problema:
cuando el módulo se recarga los parámetros del mezclador vuelven a sus valores
por defecto. Para algunas tarjetas de sonido esto puede ser muy ruidoso (por ejemplo
la SB16) o muy silencioso. Markus Gutschke
gutschk@uni-muenster.de
encontró esta solución: use una línea en su fichero /etc/conf.modules
como la
que sigue:
options sound dma_buffsize=65536 && /usr/bin/setmixer igain 0 ogain 0 vol 75
Esto hará que su programa mezclador (en este caso setmixer
) sea ejecutado
inmediatamente después de que su controlador de sonido es cargado. El parámetro dma_buffsize
es sólo un valor "de pega" necesario porque el comando de opción requiere una opción
en la línea de comando. Cambie la línea según corresponda a su programa
mezclador y los parámetros de ganancia.
Si ha compilado el controlador de sonido dentro del núcleo y desea ajustar la ganancia
del mezclador durante el reinicio, puede llamar al programa mezclador en
un fichero de inicio del sistema como por ejemplo /etc/rc.d/rc.local
Por defecto el script que hay en el fichero Readme.linux
que crea
los ficheros de dispositivo de sonido sólo permite que los dispositivos sean
leídos por el root. Esto se hace para aumentar la seguridad. En un entorno
de red, varios usuarios externos pueden conectarse de forma remota a un PC con
Linux con tarjeta de sonido y micrófono y pueden escuchar a escondidas.
Si a usted no le preocupa eso, puede cambiar los permisos usados en el script.
Con la configuración original, los usuarios aún pueden reproducir ficheros de sonido. Esto no es un riesgo para la seguridad, pero es una posibilidad para molestar o ser molestado.
Puede encontrarse información acerca de cómo usar la tarjeta de sonido mwave del ordenador portátil IBM ThinkPad en http://www.screamin.demon.co.uk/.