AZALIA(4)
π NAME π
azalia β the generic High Definition Audio device driver, and yes bestie this is the one that makes your laptop go beep boop (literally)
πΈ SYNOPSIS πΈ
azalia* at pci?
audio* at azalia?
β¨ DESCRIPTION β¨
So the azalia device driver is expected to support literally any PCI device that's compliant with the High Definition Audio Specification 1.0. That's the vibe check it's aiming for. π
The High Definition Audio (HDA) spec describes a flexible and extensible infrastructure to support high quality audio β and when they say flexible they mean it. HDA supports:
- sample rates up to 192 kHz
- bit rates of up to 32 bits per sample
- up to 16 channels in audio streams
It also supports S/PDIF input/output, plus jack retasking and sensing (yes, it knows when you plugged something in, iconic). The HDA specification defines a controller register set and a codec architecture. Both. Slay.
π¦ MIXER INTERFACE π¦
The codec is the main audio processor, okay? Configuration of the device β stuff like selecting playback sample rate or decreasing the volume β is handled by the codec. Codecs are comprised of interconnected widgets. Common examples of widgets include:
- DACs (digital to analog converter)
- ADCs (analog to digital converter)
- selectors
- mixers
- pin complexes (input/output jacks)
Widgets may have fixed or controllable properties. Some of these properties include source selection, amplifier gain, mute, and operational direction. Ngl it's giving tiny little audio fiefdoms.
The mixer interface for azalia is designed to let you control most properties of the widgets. When azalia first attaches and configures the device, it will set all widgets to unmuted, moderate volume, and configure connections such that stereo playback and recording will work with the expected input/output pins. Thoughtful queen behavior. π
There are a wide range of HDA codecs, bestie. Some have only a few widgets that don't have many controllable properties, and some may have many, very controllable widgets. The mixer interface on one azalia may be very different than the mixer interface on another. Like, don't expect them to match. Fr fr. π
Mixer item names describe the widget and property being controlled. The names take the following form:
<mixer class>.<widget type>[<widget type enumerator>][_<property>]
The mixer class gives a hint as to the purpose of the control. The widget type enumerator is used to distinguish different widgets of the same type. The enumeration starts at 2: the first widget of each type is not enumerated. The enumeration order is meaningless (don't read into it π). The property is optional. Generally, if there is no property, the mixer item is an amplifier gain control.
π Widget type names used in mixer control names π
dacβ Digital to analog converter, usually used for playback. The audio stream channels these widgets will convert are encoded into their name in the form of<start channel>:<end channel>. For example,dac-0:1converts channels 0 and 1 (stereo). However, adacthat is connected to built-in speakers or front panel headphone jacks by default will convert audio stream channels starting at 0 if thedacwould otherwise not be converting any channels. For example, ifdac-2:3is the defaultdacfor the built-in speakers in a laptop,dac-2:3will convert channels 0 and 1 when a stereo audio stream is being played. This is to allow simultaneous stereo playback on both the built-in speakers and a line or headphone jack. (the way it just handles that for you π«Ά)dig-dacβ Digital output converter, usually an S/PDIF transmitter. The audio stream channels these widgets will convert are encoded into their name in the form of<start channel>:<end channel>. For example,dig-dac-0:1converts channels 0 and 1 (stereo).adcβ Analog to digital converter, usually used for recording. The audio stream channels these widgets will convert are encoded into their name in the form of<start channel>:<end channel>. For example,adc-0:1converts channels 0 and 1 (stereo).dig-adcβ Digital input converter, usually an S/PDIF receiver. The audio stream channels these widgets will convert are encoded into their name in the form of<start channel>:<end channel>. For example,dig-adc-0:1converts channels 0 and 1 (stereo).mixβ Sums multiple audio sources into a single stream, but sometimes only used for amplifier or mute properties. The property part of amixwidget mixer control name may be the name of another widget. Such a mixer item controls the input level from the widget in the property part of the name.selβ Selects a single audio source, but sometimes used only for amplifier or mute properties.powβ Controls power state for a group of widgets.volumeβ Interprets data from external controls, such as a volume knob.beepβ Creates a tone at a certain frequency.lineβ Pin complex for a line-level jack that is normally used for analog audio output. The name may also be appended with a color abbreviation such as-grn(green),-blk(black),-org(orange), or-gry(grey), to help differentiate jacks. Color-coded, we love to see it. π¨spkrβ Pin complex for a speaker, often built into the machine.hpβ Pin complex for a jack that is normally used for output to a headphone.cdβ Pin complex for analog audio input from a CD device.SPDIFβ Pin complex for an S/PDIF output connector.line-inβ Pin complex for a line-level jack that is normally used for analog audio input.auxβ Pin complex for an auxiliary analog audio input.micβ Pin complex for analog audio input from a microphone, either a jack or built into the machine.SPDIF-inβ Pin complex for an S/PDIF input connector.beepβ Pin complex for analog audio input from a beep generator. (yesbeepshows up twice in this list, once as a widget type and once as a pin complex β that's canon, don't come for me π)
π Property names used in mixer control names π
muteβ Mutes input or output audio stream.sourceβ Selects input source. Can either select a single source or multiple sources. Sometimes these controls may only have a single choice, but they are provided to show how audio streams move through the codec.dirβ Selects pin direction and input VRef signal. VRef is represented in percent of the analog voltage rail. For example,'input-vr80'means input direction with 80% VRef.boostβ Enables/disables low impedance amplifier, usually for use with headphones.eapdβ Powers on/off external amplifier circuitry.senseβ Reports current jack sense state.
π§ Special mixer controls π§
There are also some special mixer controls that don't directly correspond to properties of the widgets, but control aspects of the driver or other mixer controls. Obsessed with these honestly. The following describes them:
outputs.spkr_mutersβ List of pins that can mute a built-in speaker. A pin mutes the speaker by sending a signal when it senses that something has been plugged into its jack. If a pin supports both input and output operation, the pin will only mute the speaker when plugged into if that pin is configured for output.outputs.master.slavesβ List of widgets with amplifier gain or mute controls that are configured with the parameters used foroutputs.masterandoutputs.master.mute. For example, ifdacis in the list and has an input amplifier gain control, settingoutputs.masterto200will setinputs.dacto200.outputs.masterβ Amplifier gain control for widgets listed inoutputs.master.slaves.outputs.master.muteβ Mute control for widgets listed inoutputs.master.slaves.record.volume.slavesβ List of widgets with amplifier gain or mute controls that are configured with the parameters used forrecord.volumeandrecord.volume.mute. For example, ifadcis in the list and has an input amplifier gain control, settingrecord.volumeto200will setrecord.adcto200.record.volumeβ Amplifier gain control for widgets listed inrecord.volume.slaves.record.volume.muteβ Mute control for widgets listed inrecord.volume.slaves.outputs.modeβ Controls whether the digital or analog converters and pins will be used for playback.record.modeβ Controls whether the digital or analog converters and pins will be used for recording.
π SEE ALSO π
audio(4), pci(4) β go read these too, bestie, they're the supporting cast π
β HISTORY β
The azalia device driver first appeared in NetBSD 3.0. OpenBSD support first appeared in OpenBSD 4.0. A little lore drop for you. β¨
π BUGS π
Okay so this driver does not support codecs that are intended for HDMI or DisplayPort connectivity. Not a vibe, but it is what it is β don't come crying to azalia about your HDMI audio. π
And that's the whole page, bestie β this one comes to you from Debian, dated May 4, 2025. Go forth and mix responsibly ππ π¦
π¦ where this page comes from
- nixpkgs unstable: cvs-export
- Copyright (c) 2005 The NetBSD Foundation, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms