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.
/dev/audio
normalmente un enlace a /dev/audio0
/dev/audio0
Dispositivo de audio compatible con las estaciones de trabajo Sun
(solamente una implementación parcial, ya que no soporta el
interfase ioctl)
/dev/audio1
Segundo dispositivo de audio (si es soportado por la tarjeta)
/dev/dsp
Normalmente un enlace a /dev/dsp0
/dev/dsp0
Primer dispositivo de rastreo digital
/dev/dsp1
Segundo dispositivo de rastreo digital
/dev/mixer
Mezclador de sonido
/dev/mixer1
Segundo mezclador de sonido
/dev/music
Interfase del secuenciador de alto nivel
/dev/patmgr0
Manager de parches
/dev/patmgr1
Manager de parches
/dev/sequencer
Acceso a bajo nivel MIDI, FM, y GUS
/dev/sequencer2
Normalmente un enlace a /dev/music
/dev/midi00
Primer puerto "crudo" MIDI
/dev/midi01
Segundo puerto "crudo" MIDI
/dev/midi02
Tercer puerto "crudo" MIDI
/dev/midi03
Cuarto puerto "crudo" MIDI
/dev/sndstat
Visualiza el estado del driver de sonido cuando es leído
El driver del altavoz del PC incorpora los siguientes dispositivos:
/dev/pcaudio
equivalente a /dev/audio
/dev/pcsp
equivalente a /dev/dsp
/dev/pcmixer
equivalente a /dev/mixer
Los ficheros de sonido de las estaciones de trabajo Sun (.au) pueden ser
reproducidos enviándoles 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.
Leer /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 necesitas un programa
muestrador para seleccionar el dispositivo de entrada adecuado.
Se soportan hasta dos tarjetas. Es posible instalar una Gravis UltraSound o una MPU-401 con una SoundBlaster, SoundBlaster Pro, SoundBlaster16 o ProAudioSpectrum16. No es posible tener una ProAudioSpectrum16 y SoundBlaster a la vez (la PAS16 tiene un emulador SB en ella). Tampoco es posible tener más de una tarjeta del mismo tipo a la vez (por ejemplo la combinación GUS + GUS no es posible.
Puedes cambiar los parámetros de configuración de la tarjeta de sonido al
inicializar usando las opciones de la línea de comandos desde el cargador
de inicio como el LILO. Lee el fichero Readme.linux
para más detalles.
Necesitas crear los ficheros de dispositivo del driver de sonido. Mira la sección sobre creación de ficheros de dispositivo. Si tienes que hacer los ficheros de dispositivo, asegúrate 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 has inicializado con un núcleo que contiene el driver de sonido o la dirección de I/O de la configuración no corresponde con tu hardware. Comprueba que estás ejecutando el nuevo núcleo compilado y verifica que las opciones introducidas en la configuración del driver de sonido corresponden con las opciones del hardware.
Esto puede ocurrir si intentas 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 tu partición de disco. Necesitas ejecutar
el script descrito en la sección sobre creación de ficheros de dispositivo
de este documento.
Solamente un proceso puede ser abierto en un dispositivo de sonido a la
vez. A la mayoría nos gusta 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 que el proceso se complete o matarlo
permitirá que el dispositivo de sonido pueda ser accedido una vez más.
De acuerdo con Brian Gough, para las tarjetas SoundBlaster que usan el canal DMA 1 hay un conflicto en potencia con el driver de la cinta QIC-02, la cual también usa el DMA 1, causando los errores "device busy". Si estás usando FTAPE, debes tener este driver activado. De acuerdo con el FTAPE-HOWTO el driver QIC-02 no es esencial para el uso de FTAPE; solamente el driver QIC-117 es necesario. Reconfigurar el núcleo para usar el QIC-117 en vez del QIC-02 permite coexistir a FTAPE y al driver de sonido.
(la siguiente explicación fue aportada por Harald Albrecht
albrecht@igpm.rwth-aachen.de)
Algunos soportes de tarjetas de sonido usan el canal DMA 0. El programa de configuración del driver de sonido permite esto, y el núcleo compila correctamente, pero el acceso al dispositivo de sonido nos devuelve un mensaje de error "device busy" (dispositivo ocupado).
La razón es que el núcleo de Linux reserva el canal DMA 0 para el
refresco de la DRAM. Esto no es del todo verdad para las placas modernas
386/486 las cuales usan su propia lógica de refresco. Lo puedes corregir
cambiando esta línea en el fichero /usr/src/linux/kernel/dma.c
:
static volatile unsigned int dma_chan_busy[MAX_DMA_CHANNELS] = {
1, 0, 0, 0, 1, 0, 0, 0
};
Reemplaza el primer 1 con un 0; esto activa el canal DMA 0. No hagas lo mismo con el canal DMA 4. El código debe parecerse a ésto:
static volatile unsigned int dma_chan_busy[MAX_DMA_CHANNELS] = {
0, 0, 0, 0, 1, 0, 0, 0
};
Recompila y reinicia con el nuevo núcleo.
El síntoma generalmente 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 tienes los parámetros del IRQ o del canal DMA incorrectos. Verifica que la configuración del núcleo corresponde con los puentes 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 requiere gran capacidad de la CPU. Si tienes algunos procesos más ejecutándose en tu ordenador, el reproducir en tiempo real será muy lento. Tus opciones son:
Si tienes una tarjeta Gravis Ultrasound, debes usar uno de los reproductores
de ficheros MOD escritos específicamente para la GUS (por ejemplo gmod
).
La versión 1.0c y el driver de sonido anterior usaban un esquema ioctl()
diferente e incompatible. Obtén un código fuente más moderno o haz los
cambios necesarios para adaptarlo al nuevo driver de sonido. Mira el
fichero del driver de sonido Readme para más detalles.
Asegúrate también de que has usado la última versión del soundcard.h y ultrasound.h cuando compiles la aplicación. Lee las instrucciones de instalación del principio de este texto.
Este es probablemente el mismo problema que el descrito en la anterior cuestión.
Lee los ficheros Readme
y CHANGELOG
incluidos con el fuente del driver de
sonido del núcleo.
Durante la configuración del driver de sonido, un programa de configuración
es compilado y ejecutado. Este programa te hace algunas preguntas y después
genera el fichero cabecera local.h
que define la configuración de la
tarjeta de sonido.
El fichero de configuración define (o "undefine") lo siguientes símbolos:
Símbolo Significado
====== ===========
KERNEL_SOUNDCARD activa/desactiva el driver de sonido
EXCLUDE_PAS soporte de ProAudioSpectrum
EXCLUDE_SB soporte de SoundBlaster
EXCLUDE_ADLIB soporte de AdLib
EXCLUDE_GUS soporte de Gravis UltraSound
EXCLUDE_MPU401 soporte del interfase MPU-401 MIDI
EXCLUDE_UART6850 soporte de la UART 6850 MIDI
EXCLUDE_PSS soporte de Professional Sound System
EXCLUDE_GUS16 soporte de Gravis UltraSound
EXCLUDE_GUSMAX soporte de Gravis UltraSound Max
EXCLUDE_MSS soporte de Microsoft Sound System
EXCLUDE_SBPRO soporte de SoundBlaster Pro
EXCLUDE_SB16 soporte SoundBlaster 16
EXCLUDE_AUDIO soporte de voz digitaliza
EXCLUDE_MIDI soporte de interfase MIDI
EXCLUDE_YM3812 soporte de sintetizador FM (YM3812/OPL-3)
EXCLUDE_SEQUENCER soporte del secuenciador MIDI
EXCLUDE_PRO_MIDI soporte de SoundBlaster Pro MIDI
EXCLUDE_CHIP_MIDI soporte de MIDI on CHIP
SBC_BASE 0x220 dirección base de I/O de la SoundBlaster
SBC_IRQ número de IRQ de la SoundBlaster
SBC_DMA canal DMA de la SoundBlaster
SB16_DMA canal DMA de la SoundBlaster 16
SB16_MIDI_BASE dirección base del puerto MIDI de la SoundBlaster 16
PAS_IRQ número de IRQ de la ProAudioSpectrum
PAS_DMA canal DMS de la ProAudioSpectrum
GUS_IRQ número IRQ de la Gravis UltraSound
GUS_DMA canal DMA de la Gravis UltraSound DMA
GUS_BASE dirección base de la Gravis UltraSound
MPU_IRQ número IRQ del MPU-401
MPU_BASE dirección base del puerto del MPU-401
DSP_BUFFSIZE tamaño del buffer del DMA
También se definen otras cosas, como por ejemplo nivel de revisión del driver de sonido y el día y la hora en que la configuración fue hecha.
Hay otros parámetros que no son seleccionados por el programa de
configuración. Si necesitas cambiarlos, edita el fichero sound_config.h
.
Para desactivar el driver de sonido, ejecuta make config
y contesta no a
la pregunta "Sound card support?"
.
ioctls()
del driver de sonido?Están parcialmente documentados en la Hacker's Guide to VoxWare,
actualmente disponible en formato borrador. La última versión es el borrador
2, y se puede encontrar en
ftp://nic.funet.fi
.
Nota que es un directorio oculto y que no saldrá en el listado de
directorios. Si tú "cd" al directorio y usas el "dir" del FTP, los ficheros
estarán ahí.
No hay una respuesta fácil para esta pregunta, ya que depende de:
En general, las máquinas 386 deberían 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. El driver del núcleo
por si mismo no hace cálculos en punto flotante.
(La siguiente explicación fue dada por seeker@indirect.com)
Linux solamente reconoce el 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 desactives el MPU-401 bajo software, algo todavía entra en conflicto con el 1542 si él está con su dirección por defecto. Mover el 1542 a la dirección 334 hace feliz a todos.
Además, tanto el 1542 como la PAS16 hacen DMA de 16 bits, por lo que si haces
una muestra a 16 bits 44kHz y en estéreo y salvas el fichero a un dispositivo
SCSI cuelgas el 1542, por lo que tienes un problema. El DMA traslapa y no hay
suficiente tiempo para refrescar la RAM, por lo que obtienes el mensaje "PARITY ERROR-SYSTEM HALTED",
sin ningún motivo que lo cause. Hay algo peor porque los vendedores de unidades
de cinta QIC-117 recomiendan cambiar el bus en on/off las veces que el 1542 sea
más largo de lo normal. Consigue el programa SCSISEL.EXE
de la BBS de Adaptec
o de cualquier otro lugar de Internet, y reduce el tiempo del bus en on o incrementa
el tiempo del bus en off 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 driver
del DOS desde una línea del CONFIG.SYS
, y funcionará si inicias bien en
Linux (en vez del parche en el 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 tablas que yo he probado han ningún problema con el tiempo de reducción
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. Lo que tú
necesitas es:
Young Microsystems actualizará las placas que importan por 30$ (US); otros vendedores harán lo mismo si puedes probar quién hizo o importó la placa madre (buena suerte). El problema está en el chip del interfase 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 tu placa madre, 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 I/O (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.
La nueva SoundBlaster Pro tiene un chip OPL-3, pero la antigua versión 1 usaba el OPL-2. El driver de sonido asume la presencia de un OPL-3. La versión 2.5 y posteriores del driver de sonido corrigen este problema.
Debido a limitaciones del hardware, esto no es posible con la mayoría de las tarjetas de sonido. Algunas tarjetas nuevas lo soportan. Mira 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.
Estas tarjetas traen chips especiales (ASP y Emu) que soportan características adicionales como síntesis de onda de tabla, aunque Creative Labs no colabora aportando información sobre su programación. A menos que ellos cambien su política no puede haber soporte bajo Linux de este hardware especial. Las tarjetas son soportadas como tarjetas SoundBlaster 16 normales bajo Linux.
La tarjeta Gravis Ultrasound tiene capacidades similares a la AW32, y es soportada bajo Linux. Las tarjetas basadas en otros DSPs como Dispositivos Analógicos ADSP-21xx serán soportados en el futuro.
Esto ocurre después de un reinicio suave 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 programable por software los parámetros del IRQ y del DMA. Si tu usas 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 corta la corriente o pulsa 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 suave (por ejemplo ctrl-alt-del).
La solución correcta es que usas los mismos parámetros IRQ y DMA con el MS-DOS y con el Linux (o no uses MS-DOS).
Para la correcta salida de sonido necesitas la versión 2.90 o posterior del driver de sonido. Tiene soporte para el "modo DOOM" en tiempo real.
Las muestras de sonido son de 16 bits. Si tú tienes una tarjeta de sonido de 16 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 tu sistema es pobre, desactiva el sonido (renombrando
el fichero sndserver
).
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 puedes encontrar
en
ftp://pandora.st.hmc.edu
Usar cables con buen aislante y probar la tarjeta de sonido en diferentes slots te ayudará a reducir el ruido. Si la tarjeta de sonido tiene control de volumen puedes intentar diferentes posiciones (al máximo es probablemente lo mejor.
Usar un programa mezclador te 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.
Si tu puedes reproducir sonido pero no puedes grabar, sigue estos pasos:
Algunos clónicos de tarjeta de sonido no son verdaderamente 100% compatibles. Algunas veces contienen circuitería extra como por ejemplo mezcladores. La puedes usar bajo Linux si primero la inicializas bajo MS-DOS y después haces un inicio suave de Linux (por ejemplo Ctrl-alt-del).
Un usuario me informó el obtenía mejores resultados si él usaba LOADLIN en vez de LILO para inicializar Linux después de inicializar su tarjeta de sonido bajo MS-DOS (esto era con una tarjeta de sonido Diamond).
La verdadera solución es obtener del fabricante cuáles son las diferencias y añadir soporte al driver de sonido. Esto ha sido hecho, por ejemplo, con la Sound Galaxy NX Pro.
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 driver de sonido del Linux.
Si tú tarjeta está listada como compatible con el Microsoft Windows Sound System, puedes hacerla funcionar en el modo 16 bits si tienes activado el WSS en el driver de sonido del Linux. Probablemente tendrás que hacer también el truco de inicializarla bajo el DOS para que la tarjeta funcione.
Estos son unos buenos sites para buscar aplicaciones específicas de sonido para Linux:
Con los últimos núcleos el driver de sonido es soportado como un módulo cargable.
Mira 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.
Intenta el programa oplbeep
en
ftp://sunsite.unc.edu
Una variante es el programa beep
en
ftp://sunsite.unc.edu
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 drivers 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 Incorporate, y no puede ser usado. El 29 de marzo de 1996 Hannu Savolainen anunció que el nuevo nombre era Unix Sound System (USS).
El Unix Sound System (USS) va a ser un driver del sonido del núcleo disponible comercialmente para varios sistemas Unix, vendido por 4Front Technologies. Una versión libre, conocida como USS/Lite continuará siendo disponible con total libertad para los sistemas Linux.
Para más información mira la página Web de 4Front Technologies. http://www.4front-tech.com
Linux todavía no soporta Plug-and-Play (enchufar y funcionar), pero se está trabajando en ello. De un tiempo para acá algunos usuarios han obtenido éxito quitando las opciones Plug-and-Play de su BIOS, o inicializando los dispositivos bajo Windows 95 antes de hacer un inicio suave de Linux.
Un cambio en el driver de sonido de la versión 1.3.67 rompía algunos programas
de reproducción de sonido el cual (incorrectamente) chequeaba que el resultado
del ioctl SNDCTL_DSP_GETBLKSIZE era mayor que 4096. Debes tener una versión más
nueva del programa (si es posible) o arreglarlo tú mismo. Para el programa Sox
ftp://sunsite.unc.edu
el siguiente parche funciona:
--- sbdsp.c.orig Thu Feb 22 22:46:00 1996
+++ sbdsp.c Thu Feb 22 22:51:18 1996
@@ -176,7 +176,7 @@
}
ioctl (dspfd, SNDCTL_DSP_GETBLKSIZE, &abuf_size);
- if (abuf_size < 4096 || abuf_size > 65536) {
+ if (abuf_size < 1) {
if (abuf_size == -1)
perror (dspname);
else
El driver de sonido soporta diferentes parámetros de configuración. El programa de configuración incluído con el driver de sonido comprueba las dependencias entre los parámetros. Las herramientas usadas para configurar el núcleo no soportan este nivel de funcionabilidad.
Los núcleos recientes 1.3.x opcionalmente permiten usar las herramientas de
configuración del núcleo estándar con el driver de sonido. Lee las notas en
el fichero CHANGELOG
para el driver de sonido. Esto es todavía
experimental y algunas opciones no pueden ser seleccionadas de esta forma.
Puedes construir el driver 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 de recargado 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: usa una línea en tu 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 tú programa mezclador (en este caso setmixer
) sea ejecutado
inmediatamente después de que tú driver de sonido es cargado. El parámetro dma_buffsize
es sólo un valor arbitrario necesario porque el comando de opción requiere una opción
en la línea de comando. Cambia la línea según como necesites corresponder tu programa
mezclador y los parámetros de ganancia.
Si tú has compilado el driver de sonido dentro de tu núcleo y queres seleccionar
que el mezclador gane cuando inicias, tú puedes llamar a tú 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, usuarios externos se pueden conectar de forma remota a un PC con
Linux, y con tarjeta de sonido y micrófono, y te pueden escuchar a escondidas.
Si a ti no te preocupa eso, puedes cambiar los permisos usados en el script.