sndio is the software layer of the
OpenBSD operating system that manages
sound cards and
MIDI ports. It provides an optional
sound server and a documented
application programming interface to access either the server or the audio and
MIDI hardware in a uniform way.[1]
sndio is designed to work for desktop applications, but pays special attention to synchronization mechanisms and reliability required by music applications.[2]
Features
The sndiod audio and
MIDI server is the main component of sndio. It aims to fill the gap between programs requirements and the bare hardware as exposed by
operating system device drivers.[3] This includes:[4]
perform re-sampling and format conversions; for instance to allow a program that requires 44.1 kHz sample frequency to use a device that supports 48 kHz only.
mix and route the sound of multiple programs; this allows multiple programs to use the audio device concurrently.
split an audio device into sub-devices, for instance allowing one program to use the front speakers and another program to use the rear speakers as they were independent simple stereo devices.
allow one program to record what other programs play.
control the volume.
route audio and
MIDI data through the network; this allows programs running on one computer to use the
sound card of another computer.
route
MIDI data between programs, allowing one program to send
MIDI data to another program as it was a hardware
MIDI port. For instance for a
MIDI sequencer to control a soft synthesizer.
start, stop and relocate synchronously a group of audio programs allowing multiple small programs to work together. This can be controlled through standard
MIDI Machine Control (MMC) protocol, for instance from within a
MIDI sequencer.
expose the
sound card clock as
MIDI timecode (MTC), allowing
MIDI programs (e.g. sequencers) or
MIDI hardware to be synchronized to audio streams.
The last few points are hooks in the
sound server aiming to improve interoperability between audio and
MIDI programs.[5] The use of standard
MIDI protocols for volume and synchronization control enables interoperability with
MIDI software or hardware connected to a
computer.[6]
History
Minimal server capabilities were added to aucat—an audio stream manipulation tool and predecessor to sndiod—in October 2008,[7] shipping with OpenBSD 4.5.[8][9] In December 2011, aucat was renamed to sndiod[10] and later shipped with OpenBSD 5.1 as the default
sound server started at
operating system boot.[11]