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 (snd_timer_*)
-
Config API (snd_config_*)
-
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 aroundsnd_ctl_card_info_get_idand the alsa-lib documentation can be consulted for additional information. -
Structs are RAII and closed/freed on drop, e g, when a
PCMstruct is dropped,snd_pcm_closeis 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 usewaitif you don't need that functionality.)