Thin but safe wrappers for ALSA.
Expect the following to work:
Audio Playback
Audio Recording
Mixer controls
HCtl API (for jack detection)
Raw midi
Midi sequencer API (most of it)
Enumerations of all of the above
Poll and/or wait for all of the above
The following is not yet implemented (mostly because nobody asked for them) :
Separate timer API (sndtimer*)
Config API (sndconfig*)
Plug-in API
Quickstart guide / API design:
Most functions map 1-to-1 to alsa-lib functions, e g, ctl::CardInfo::get_id()
is a wrapper around
snd_ctl_card_info_get_id
and the alsa-lib documentation
can be consulted for additional information.
Structs are RAII and closed/freed on drop, e g, when a PCM
struct is dropped, snd_pcm_close
is called.
To read and write buffers, call the io_*
methods. It will return a separate struct from which you can
read or write, and which can also be used for mmap (if supported by the driver).
Error handling - most alsa-lib functions can return errors, so the return value from these is a Result
.
Enumeration of cards, devices etc is done through structs implementing Iterator
.
Many structs implement Polldescriptors
, to combine with poll or mio. (Or just use wait
if you don't need that functionality.)