This chapter is a short introduction to the usage of audio devices on NetBSD (who wants a dumb computer, anyway?).
## Basic hardware elements
In order to make audio work on your system you must know what audio card is installed. Sadly it is often not enough to know the brand and model of the card, because many cards use chipsets manufactured from third parties. Therefore knowing the chipset installed on the audio card can sometimes be useful. The NetBSD kernel can recognize many chipsets and a quick look at `dmesg` is enough most of the time.
Therefore, type the following command:
# dmesg | less
and look for the audio card and chipset. If you're lucky you won't need to do anything because NetBSD automatically detects and configures many audio cards.
If you want to explicitly look for detected audio devices, you should watch out for strings like `audio` or `sound`. This might give you a clue about audio devices you don't know the name of.
# dmesg | grep audio
# dmesg | grep sound
Sometimes audio doesn't work because the card is not supported or because you need to do some work in order for the card to be detected by NetBSD. Many audio cards are nowadays very cheap, and it is worth considering buying a different card, but before doing this you can try some simple steps to make the card work with NetBSD.
## Supported audio cards
The number of supported sound cards is ever increasing. The main source for supported audio devices are the manpages. You should have a look at the drivers listed in the *SEE ALSO* section of [audio(4)](http://netbsd.gw.com/cgi-bin/man-cgi?audio+4+NetBSD-current).
## BIOS settings
This section is useful only to the owners of i386 PCs; on other architectures (e.g. Amiga) there are no such features. The most important thing to determine in order to use the audio card with NetBSD is the type of bus supported by the card.
The most common interfaces are PCI, PCI Express and USB.
On many systems everything works fine even if this option is enabled. This is highly system dependent.
## Configuring the audio device
During the installation of NetBSD the devices are created in the `/dev` directory. We are primarily interested in:
If they are not present they can be created like this:
# cd /dev
# ./MAKEDEV all
This command creates all devices, including the audio devices.
The audio card is now probably ready to be used without further work.
You can make a quick test whether output works by sending data to the device (`/dev/sound` or `/dev/audio`). You can send anything to it (e.g., take `/dev/urandom`), maybe a file, maybe even something useful (which might be indicated by the `.au` extension). Be sure to turn your speakers quiet, as it will result in noise!
# cat /dev/urandom > /dev/audio
# cat /dev/urandom > /dev/sound
If you hear something it means that the card is supported by NetBSD and was recognized and configured by the kernel at boot; otherwise you must configure the kernel settings for the audio device installed on the system (assuming the card/chipset is supported.)
## Multiple audio devices
Audio devices are enumerated, starting at 0. If you have multiple audio cards, you will want to switch between the audio devices. By default, `/dev/sound` and `/dev/audio` are symlinks pointing to `/dev/sound0` and `/dev/audio0` resp.
Many applications provide an option to choose the audio device. But if you want to switch the default audio device, you have to change these symlinks. Assuming you want to use the second audio device (determining the numbers as described [[earlier|guide/audio#basic-hardware-elements]]), delete these two symlinks and replace them by the appropriate ones:
# rm /dev/sound
# rm /dev/audio
# ln -s /dev/sound /dev/sound0
# ln -s /dev/audio /dev/audio0
## Configuring the kernel audio devices
NetBSD supports a wide range of audio cards and the GENERIC kernel already enables and configures most of them. For older systems, it might be necessary to manually set up the IRC and DMA for non-PnP ISA cards.
When you create a custom kernel it is better to work on a copy of the GENERIC file, as described in [[Compiling the kernel|guide/kernel]].
If you still have problems you can try enabling all the devices, because some audio cards can be made to work only by emulating another card.
Many chipset make use of the SoundBlaster and OPL compatibility, but a great number of them work with the WSS emulation.
OPL is a MIDI synthesizer produced by Yamaha; there are many OPL variants (e.g. OPL2, OPL3SA, OPL3SA2, etc.). Many audio cards rely on this component or on a compatible one. For example, the chips produced by Crystal (and amongst them the very common CS423x) all have this chipset, and that's why they work with NetBSD.
WSS is not a microchip; it is the acronym of Windows Sound System. WSS is the name of the NetBSD kernel driver which supports the audio system of Microsoft Windows. Many audio cards work with Windows because they adhere to this standard (WSS) and the same holds for NetBSD.
Of the many audio cards that I tested with NetBSD, a good number work only if `opl*` and `wss*` are enabled in the kernel.
When everything works you can disable in the kernel configuration file the devices that you don't need.
## Advanced commands
NetBSD comes with a number of commands that deal with audio devices. They are:
* [audioctl(1)](http://netbsd.gw.com/cgi-bin/man-cgi?audioctl+1+NetBSD-5.0.1+i386) -- is used for setting options of the audio system driver.
* [mixerctl(1)](http://netbsd.gw.com/cgi-bin/man-cgi?mixerctl+1+NetBSD-5.0.1+i386) -- is used for controlling mixing variables, e.g., volume, balance and mute.
* [audioplay(1)](http://netbsd.gw.com/cgi-bin/man-cgi?audioplay+1+NetBSD-5.0.1+i386) -- is used for playing audio files.
* [audiorecord(1)](http://netbsd.gw.com/cgi-bin/man-cgi?audiorecord+1+NetBSD-5.0.1+i386) -- is used for recording audio files.
[audioctl(1)](http://netbsd.gw.com/cgi-bin/man-cgi?audioctl+1+NetBSD-5.0.1+i386) made its appearance in NetBSD 1.3 and is used to manually set some variables regarding audio I/O, like the frequencies for playing and recording. The available parameters can be displayed with the following command:
# audioctl -a | less
For example, to listen to CD quality music you can use the following command.
# audioctl -w play=44100,2,16,slinear_le
This command sets the frequency to 44100Hz, 2 audio channels, 16 bit, slinear\_le encoding.
You can see the supported encodings with:
# audioctl encodings
This command displays the list of all the encodings supported by the audio card on your system.
This command is used to configure the audio mixing and has an interface similar to that of [audioctl(1)](http://netbsd.gw.com/cgi-bin/man-cgi?audioctl+1+NetBSD-5.0.1+i386).
With this command you can play audio files in simple formats like ULAW and WAV. For more sophisticated needs you might want to install one of the many programs available in the package system which let you play audio files in different formats (e.g. MP3, etc.)
Not unsurprisingly this command is used to record audio files.
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb