Antes de nada tendrá que saber a ciencia cierta el modelo de tarjeta que tiene, qué chip utiliza y si es PCI o ISA. FreeBSD admite una amplia variedad de tarjetas, tanto PCI como ISA. Consulte la lista de dispositivos de sonido que puede usar en FreeBSD en las Hardware Notes. Las «Hardware Notes» le dirán también qué controlador es el que hace funcionar su tarjeta.
Para poder usar su dispositivo de sonido en FreeBSD tiene que cargar el controlador de dispositivo adecuado, cosa que puede hacerse de dos maneras. La forma más fácil es cargar el módulo del kernel correspondiente a su tarjeta de sonido mediante kldload(8). Puede hacerlo en su shell con la siguiente orden
# kldload snd_emu10k1
o añadiendo la línea apropiada al fichero /boot/loader.conf:
snd_emu10k1_load="YES"
Ambos ejemplos son para una tarjeta de sonido Creative SoundBlaster® Live!. Encontrará una lista de módulos de sonido que puede cargar del mismo modo en /boot/defaults/loader.conf. Si no está del todo seguro sobre el controlador que debe usar pruebe con el módulo snd_driver:
# kldload snd_driver
Se trata de un «metacontrolador» que carga en memoria todos los controladores más habituales. De este modo acelerará notablemente el proceso de detectar cuál es el controlador perfecto para su hardware. También puede cargar todos los controladores de sonido desde /boot/loader.conf.
Si quiere saber qué controlador se corresponde con su tarjeta de sonido una vez cargado el «metadriver» snd_driver debe comprobar el contenido de /dev/sndstat mediante la orden cat /dev/sndstat.
El segundo método es compilar de forma estática el soporte para su tarjeta de sonido dentro de un kernel personalizado. En la siguiente sección encontrará la información necesaria para añadir a su kernel el soporte que necesita su hardware. Para más información sobre la compilación de un kernel consulte el Capítulo 8.
Lo primero que hay que hacer es añadir el controlador del «framework» de sonido sound(4) al kernel; tendrá que añadir la siguiente línea a su fichero de configuración del kernel:
device sound
Una vez hecho esto tiene que añadir el soporte para su tarjeta de sonido. Evidentemente tendrá que saber exactamente qué controlador es el que hace funcionar su tarjeta. Consulte la lista de dispositivos de sonido soportados que encontrará en las Hardware Notes y elija el controlador perfecto para su tarjeta. Por ejemplo una una tarjeta de sonido Creative SoundBlaster Live! usará el controlador snd_emu10k1(4). Siguiendo con el ejemplo, si queremos añadir soporte para esta tarjeta agregaremos lo siguiente:
device snd_emu10k1
Por favor, lea la página de manual del controlador si tiene dudas con la sintaxis. La sintaxis específica para la configuración en el kernel de cada tarjeta de sonido soportada existente puede encontrarse también en /usr/src/sys/conf/NOTES.
Las tarjetas ISA no PnP pueden requerir que se le facilite al kernel la información de la configuración de la tarjeta (IRQ, puerto de E/S, etc). Esto se hace modificando el fichero /boot/device.hints. Durante el proceso de arranque loader(8) leerá este fichero y le pasará los parámetros al kernel. Veamos un ejemplo: una vieja tarjeta Creative SoundBlaster 16 ISA no PnP utilizará el controlador snd_sbc(4) junto con snd_sb16. En el caso de esta tarjeta habrá que añadir las siguientes líneas al fichero de configuración del kernel
device snd_sbc device snd_sb16
y añadir lo siguiente a /boot/device.hints:
hint.sbc.0.at="isa" hint.sbc.0.port="0x220" hint.sbc.0.irq="5" hint.sbc.0.drq="1" hint.sbc.0.flags="0x15"
La tarjeta del ejemplo usa el puerto de E/S 0x220 I/O port y la IRQ 5.
La sintaxis a utilizar en /boot/device.hints se explica en la página de manual de sound(4) y en la del controlador en cuestión.
En el ejemplo se muestran los parámetros por omisión. En ciertos casos habrá que usar otra IRQ o usar otros parámetros para hacer funcionar la tarjeta de sonido. Consulte la página de manual de snd_sbc(4) para más información sobre esta tarjeta.
Una vez que haya reiniciado con su kernel personalizado, o tras cargar el mólo del kernel necesario la tarjeta de sonido aparecerá en el búfer de mensajes del sistema (dmesg(8)); deberí ser algo muy parecido a esto:
pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0 pcm0: [GIANT-LOCKED] pcm0: <Cirrus Logic CS4205 AC97 Codec>
Puede comprobar el estado de la tarjeta de sonido en el fichero /dev/sndstat:
# cat /dev/sndstat FreeBSD Audio Driver (newpcm) Installed devices: pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384 kld snd_ich (1p/2r/0v channels duplex default)
El resultado en su sistema seguramente será distinto. Si no aparecen dispositivos pcm revise todo el proceso a ver dónde está el error. Revise su fichero de configuración del kernel nuevamente y compruebe que eligió el controlador de dispositivo adecuado. Tiene una lista de problemas habituales en la Sección 7.2.2.1.
Si todo ha ido bien ya tiene una tarjeta de sonido funcionando en su sistema. Si los pins de salida de sonido de su CD-ROM o DVD-ROM están colocados correctamente puede poner un CD en la unidad y reproducirlo con cdcontrol(1).
% cdcontrol -f /dev/acd0 play 1
Hay muchas aplicaciones como audio/workman que le ofrecerán un interfaz más amigable. Si quiere escuchar ficheros MP3 puede instalar, por ejemplo, audio/mpg123.
Hay otra via aún más rápida de probar su tarjeta de sonido. Envíe datos a to /dev/dsp del siguiente modo:
% cat fichero > /dev/dsp
donde fichero puede ser cualquier fichero. Esta orden producirá ruido, lo que confirmará que la tarjeta de sonido funciona.
Puede manejar los niveles de la tarjeta de sonido con mixer(8). Tiene todos los detalles en la página de manual de mixer(8).
Error | Solution |
---|---|
“sb_dspwr(XX) timed out” |
El puerto de E/S no ha sido configurado correctamente. |
“bad irq XX” |
No ha elegido correctamente la IRQ. Asegúrese de que la IRQ que ha elegido y la IRQ del sonido son la misma. |
“xxx: gus pcm not attached, out of memory” |
No queda memoria suficiente en el sistema para poder usar el dispositivo. |
“xxx: can't open /dev/dsp!” |
Compruebe si hay otra aplicación utilizando (y por tanto ocupando) el dispositivo. Escriba fstat | grep dsp. Los sospechosos habituales son esound y el sistema de sonido de KDE. |
Disponer de múltiples fuentes de sonido puede ser muy útil, por ejemplo cuando esound o artsd no permiten compartir el dispositivo de sonido con otra aplicación.
FreeBSD permite hacerlo gracias a los Virtual Sound Channels (canales virtuales de sonido), que se activan mediante sysctl(8). Los canales virtuales permiten multiplexar la reproducción de sonido de su tarjeta mezclando el sonido en el kernel.
El número de canales virtuales se configura utilizando dos sysctl; como root escriba lo siguiente:
# sysctl hw.snd.pcm0.vchans=4 # sysctl hw.snd.maxautovchans=4
En el ejemplo anterior se han creado cuatro canales virtuales, una cantidad muy
razonable para el uso normal. hw.snd.pcm0.vchans
es el
número de canales virtuales de que dispone pcm0; puede
configurarlo en cuanto el dispositivo sea reconocido por el sistema. hw.snd.maxautovchans es el número de canales virtuales que se le
asignan a un nuevo dispositivo de audio cuando se conecta al sistema mediante kldload(8). Puesto que
el módulo pcm puede cargarse independientemente de los
controladores de hardware hw.snd.maxautovchans
puede
almacenar cuántos canales virtuales tienen asignados los dispositivos que se vayan
conectando al sistema.
Nota: No es posible modificar el número de canales virtuales de un dispositivo que esté en marcha. Cierre antes todos los programas que estén utilizando el dispositivo, como reproductores de música o dæmons de sonido.
Si no usa
devfs(5) tendrá
que configurar sus aplicaciones para que apunten a /dev/dsp0.x, donde x es un número entre 0 y 3 si hw.snd.pcm.0.vchans
tiene un valor de 4 como en el ejemplo
anterior. Si se estuviera usando
devfs(5) en el
ejemplo anterior cualquier programa que pidiera /dev/dsp0 sería
atendido de forma totalmente transparente.
Los valores por defecto de los distintos canales de mezcla están fijados en el código del controlador pcm(4). Hay distintas aplicaciones y dæmons que le permitirán asignar valores al mezclador y que permanezcan entre uso y uso, pero no es una solución demasiado limpia. Puede asignar valores por omisión a las mezclas a nivel de controlador definiendo los valores apropiados en /boot/device.hints. Veamos un ejemplo:
hint.pcm.0.vol="50"
Esto asignará al canal de volumen un valor por omisión de 50 al cargar el módulo pcm(4).
Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista
<[email protected]>.
Envíe sus preguntas sobre la documentación a <[email protected]>.