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, Configuración del kernel de FreeBSD.
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, “Problemas habituales”.
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
|
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.
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
<questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a
<doc@FreeBSD.org>.