Before you begin, you should know the model of the card you have, the chip it uses, and whether it is a PCI or ISA card. FreeBSD supports a wide variety of both PCI and ISA cards. Check the supported audio devices list of the Hardware Notes to see if your card is supported. This document will also mention which driver supports your card.
To use your sound device, you will need to load the proper device driver. This may be accomplished in one of two ways. The easiest way is to simply load a kernel module for your sound card with kldload(8) which can either be done from the command line:
#
kldload snd_emu10k1
or by adding the appropriate line to the file
/boot/loader.conf
like this:
snd_emu10k1_load="YES"
These examples are for a Creative SoundBlaster® Live! sound
card. Other available loadable sound modules are listed in
/boot/defaults/loader.conf
.
If you are not sure which driver to use, you may try to load
the snd_driver
module:
#
kldload snd_driver
This is a metadriver loading the most common device drivers
at once. This speeds up the search for the correct driver. It
is also possible to load all sound drivers via the
/boot/loader.conf
facility.
If you wish to find out the driver selected for your
soundcard after loading the snd_driver
metadriver, you may check the /dev/sndstat
file with the cat /dev/sndstat
command.
A second method is to statically compile in support for your sound card in your kernel. The section below provides the information you need to add support for your hardware in this manner. For more information about recompiling your kernel, please see Rozdział 8, Konfiguracja jądra FreeBSD.
The first thing to do is adding the generic audio driver sound(4) to the kernel, for that you will need to add the following line to the kernel configuration file:
device sound
Then we have to add the support for our sound card. Therefore, we need to know which driver supports the card. Check the supported audio devices list of the Hardware Notes, to determine the correct driver for your sound card. For example, a Creative SoundBlaster® Live! sound card is supported by the snd_emu10k1(4) driver. To add the support for this card, use the following:
device snd_emu10k1
Be sure to read the manual page of the driver for the
syntax to use. Information regarding the syntax of sound
drivers in the kernel configuration can also be found in the
/usr/src/sys/conf/NOTES
file.
Non-PnP ISA cards may require you to provide the kernel
with information on the sound card settings (IRQ, I/O port,
etc). This is done via the
/boot/device.hints
file. At system boot,
the loader(8) will read this file and pass the settings
to the kernel. For example, an old
Creative SoundBlaster® 16 ISA non-PnP card will use the
snd_sbc(4) driver in conjunction with snd_sb16(4). For this card the following lines have to be added to
the kernel configuration file:
device snd_sbc device snd_sb16
as well as the following in
/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"
In this case, the card uses the 0x220
I/O port and the IRQ 5
.
The syntax used in the
/boot/device.hints
file is covered in the
sound driver manual page. On FreeBSD 4.X, these settings
are directly written in the kernel configuration file.
The settings shown above are the defaults. In some cases, you may need to change the IRQ or the other settings to match your card. See the snd_sbc(4) manual page for more information.
After rebooting with the modified kernel, or after loading the required module, the sound card should appear in your system message buffer (dmesg(8)) as something like:
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>
The status of the sound card may be checked via the
/dev/sndstat
file:
#
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)
The output from your system may vary. If no
pcm
devices show up, go back and review
what was done earlier. Go through your kernel
configuration file again and make sure the correct
device is chosen. Common problems are listed in Sekcja 7.2.2.1, „Common Problems”.
If all goes well, you should now have a functioning sound card. If your CD-ROM or DVD-ROM drive is properly coupled to your sound card, you can put a CD in the drive and play it with cdcontrol(1):
%
cdcontrol -f /dev/acd0 play 1
Various applications, such as audio/workman can provide a friendlier
interface. You may want to install an application such as
audio/mpg123 to listen to
MP3 audio files. A quick way to test the card is sending data
to the /dev/dsp
, like this:
%
cat filename > /dev/dsp
where filename
can be any file.
This command line should produce some noise, confirming the
sound card is actually working.
Sound card mixer levels can be changed via the mixer(8) command. More details can be found in the mixer(8) manual page.
Error | Solution |
---|---|
unsupported subdevice XX | One or more of the device nodes was not created correctly. Repeat the steps above. |
sb_dspwr(XX) timed out | The I/O port is not set correctly. |
bad irq XX | The IRQ is set incorrectly. Make sure that the set IRQ and the sound IRQ are the same. |
xxx: gus pcm not attached, out of memory | There is not enough available memory to use the device. |
xxx: can't open /dev/dsp! | Check with |
It is often desirable to have multiple sources of sound that are able to play simultaneously, such as when esound or artsd do not support sharing of the sound device with a certain application.
FreeBSD lets you do this through Virtual Sound Channels, which can be set with the sysctl(8) facility. Virtual channels allow you to multiplex your sound card's playback channels by mixing sound in the kernel.
To set the number of virtual channels, there are two sysctl
knobs which, if you are the root
user, can
be set like this:
#
sysctl hw.snd.pcm0.vchans=4
#
sysctl hw.snd.maxautovchans=4
The above example allocates four virtual channels, which is a
practical number for everyday use. hw.snd.pcm0.vchans
is the number of virtual channels pcm0
has, and is configurable
once a device has been attached.
hw.snd.maxautovchans
is the number of virtual channels
a new audio device is given when it is attached using
kldload(8). Since the pcm
module
can be loaded independently of the hardware drivers,
hw.snd.maxautovchans
can store how many
virtual channels any devices which are attached later will be
given.
You cannot change the number of virtual channels for a device while it is in use. First close any programs using the device, such as music players or sound daemons.
If you are not using devfs(5), you will have to point
your applications at
/dev/dsp0
.x
,
where x
is 0 to 3 if
hw.snd.pcm.0.vchans
is set to 4 as in the
above example. On a system using devfs(5), the above will
automatically be allocated transparently to the user.
This is only supported in FreeBSD 5.3-RELEASE and later.
The default values for the different mixer channels are
hardcoded in the sourcecode of the pcm(4) driver. There are
a lot of different applications and daemons that allow
you to set values for the mixer they remember and set
each time they are started, but this is not a clean
solution, we want to have default values at the driver
level. This is accomplished by defining the appropriate
values in /boot/device.hints
. E.g.:
hint.pcm.0.vol="100"
This will set the volume channel to a default value of 100, when the pcm(4) module is loaded.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.