Table of Contents
audiocfg(1) can be used to list, test and set default audio devices.
All available audio devices can be listed with audiocfg list:
$
audiocfg list
0: [*] audio0 @ hdafg0: Realtek ALC292 playback: 2ch, 48000Hz record: 2ch, 48000Hz (PR) slinear_le 16/16, 2ch, { 32000, 44100, 48000, 88200, 96000, 192000 } (PR) slinear_le 20/32, 2ch, { 32000, 44100, 48000, 88200, 96000, 192000 } (PR) slinear_le 24/32, 2ch, { 32000, 44100, 48000, 88200, 96000, 192000 } ( ) ac3 16/16, 2ch, { 32000, 44100, 48000, 88200, 96000, 192000 } 1: [ ] audio1 @ uaudio0: USB audio playback: 2ch, 48000Hz record: 1ch, 48000Hz (P-) slinear_le 16/16, 2ch, { 48000, 44100 } (-R) slinear_le 16/16, 1ch, { 48000, 44100 }
The asterisk next to the Realtek ALC292 device
indicates it is currently the default device, so if any application writes
or reads to /dev/audio
it will play or record from it.
It is also available as /dev/audio0
,
and for mixer commands, /dev/mixer0
.
The other device, USB audio, is a secondary
device that has been plugged in. Since it isn't the default, it is only
used if specifically selected in an application. It is available as
/dev/audio1
, and for mixer commands,
/dev/mixer1
.
The playback: and record: rows indicate the currently selected hardware audio format. Below this, the other supported formats are listed. Some devices set the playback and recording formats separately, while others set both at the same time. This is indicated by PR.
audiocfg test index
can be used to test playback, and plays a tone of 2 seconds for each
channel of the index
device:
$
audiocfg test 0
0: [*] audio0 @ hdafg0: Realtek ALC292 testing channel 0... done testing channel 1... done
If more than one audio device is available,
audiocfg default index
can be used to change the default one. This persists between reboots.
Please note that unlike other audiocfg(1) commands,
audiocfg default needs to be run as root.
In NetBSD, mixerctl(1) is used to adjust audio mixing, e.g. volume for recording and playback, and the sources and sinks currently in use.
Set the current playback volume:
$
mixerctl -w outputs.master=50
List the available controls and settings:
$
mixerctl -av
outputs.master=255,255 volume inputs.dac=255,255 volume outputs.auto=255,255 volume delta=13 outputs.headphones=0,0 volume delta=13 outputs.hdmi=255,255 volume delta=13 outputs.select=headphones [ auto headphones hdmi ]
Secondary devices can also be configured using mixerctl(1).
For example, if you've just plugged in an USB audio device, it
may have attached as /dev/audio1
and
/dev/mixer1
- this is visible using
audiocfg(1).
You would therefore configure it with
mixerctl -d /dev/mixer1.
Default mixer device settings can be applied on boot by setting
mixerctl=YES
in /etc/rc.conf
,
then providing arguments in /etc/mixerctl.conf
.
For example, this /etc/mixerctl.conf
sets the playback volume and playback sink:
outputs.master=120,120 outputs.select=headphones
To automatically load and save the settings of mixer devices
on boot and shutdown, you can specify each device to save individually
in /etc/rc.conf
:
mixerctl=YES mixerctl_mixers="mixer0 mixer1"
NetBSD's pad(4) device allows feeding back data from an application using a virtual audio device. It can be used to redirect playback elsewhere, or record an application's playback.
/dev/padN
devices produce a raw
stream of audio in a fixed format when opened for reading.
At the time of opening, they also create a
/dev/audioN
device for an
application to use for output. You can observe the device creation
happening with dmesg(8).
The following example records the output of a game,
games/jumpnbump
,
using the program
multimedia/ffmpeg4
for encoding the
data from the pad device to a file and writing it back to the real
audio device simultaneously.
Both are available from the NetBSD Packages Collection.
$
ffmpeg4 -f s16le -ar 44100 -ac 2 -i /dev/pad0 \ -f wav output.wav -f oss /dev/audio
$
SDL_PATH_DSP=/dev/audio1 jumpnbump
NetBSD comes with a number of commands that allow users to play and record audio from scripts or the command-line interface.
With this command you can play audio files in simple formats like ULAW and WAVE. 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.)
Allows recording audio from a microphone or other input to the same simple or raw formats that audioplay(1) supports.
The following command records CD quality audio to a WAVE file from the default audio device. Recording will stop when the process is terminated:
$
audiorecord -d /dev/audio -F wav -e linear -c 2 -P 16 -s 44100 recording.wav
Play the recording back (its format is inferred from the WAVE headers):
$
audioplay recording.wav
audioctl(1) is used to
manually set some variables regarding audio I/O, like the
frequencies for playing and recording.
This is useful when writing raw samples to
/dev/sound
without access to the full
audio(4) API, e.g. from a shell script, but otherwise is not
used during regular operation.
NetBSD includes built-in MIDI support through the machine-independent midi(4) system. This includes support for USB MIDI devices.
Access to MIDI devices is supported through raw access to the
/dev/rmidiX
devices, or through the sequencer
device, /dev/music
.
Digital Audio Workstations and other software with support for
NetBSD MIDI in the Packages Collection include
audio/lmms
and audio/fluidsynth
.
Several MIDI programs are also included with NetBSD:
A program that allows recording MIDI events from a device to files in the Standard MIDI (SMF) format. It can also be used to test a device and verify it works as expected with the -D and -V options.
A program that allows playing Standard MIDI and RMID files to the MIDI sequencer device.
Since the 2010s, most x86 machines have hardware compliant with the Intel HD Audio specification. These use NetBSD's hdaudio(4) driver and require some special consideration.
For hdaudio(4) devices, the currently selected playback
ports (or, e.g. internal speaker and headphone jack on a laptop) are
controlled by selecting a DAC/ADC. The available DACs and ADCs can be
seen in /var/run/dmesg.boot
:
hdafg0 at hdaudio1: Realtek ALC292 hdafg0: DAC00 2ch: Speaker [Built-In], HP Out [Jack] hdafg0: ADC01 2ch: Mic In [Jack] hdafg0: ADC02 2ch: Mic In [Built-In]
Therefore, to use only the built-in mic for recording:
$
mixerctl -w record.source=ADC02
Use all available sources:
$
mixerctl -w record.source=ADC01,ADC02
Some laptops may need outputs.dacsel
changed to only play audio from the headphone jack,
others have hardware speaker mute and there's no need for this.
Currently, HDMI/DisplayPort output with hdaudio(4) is not enabled in the default kernel because it interferes with default device selection. This can be changed by enabling these options in the kernel configuration, and rebuilding. See Chapter 34, Compiling the kernel for more information.
options HDAUDIO_ENABLE_DISPLAYPORT options HDAUDIO_ENABLE_HDMI
With other drivers (e.g. on ARM boards) this is not necessary.