Contents

  1. Audio
    1. Basic hardware elements
    2. Supported audio cards
    3. BIOS settings
      1. Note
    4. Configuring the audio device
    5. Multiple audio devices
    6. Configuring the kernel audio devices
      1. Note
    7. Advanced commands
      1. audioctl(1)
      2. mixerctl(1)
      3. audioplay(1)
      4. audiorecord(1)

Audio

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).

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.

Note

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

or

# 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), 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.

Note

When you create a custom kernel it is better to work on a copy of the GENERIC file, as described in Compiling the 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)

audioctl(1) 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.

mixerctl(1)

This command is used to configure the audio mixing and has an interface similar to that of audioctl(1).

audioplay(1)

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.)

audiorecord(1)

Not unsurprisingly this command is used to record audio files.

Add a comment