ee6325f662
This is as close to usptream as currently possibly. Only a few changes were done to the dependencies: the wasm target was removed and the coremidi dependency was updated to pick up a more recent version so that we don't need to vendor separate versions of the core-foundation and core-foundation-sys crates. This vendors the following crates: * alsa-sys * alsa * coremidi * coremidi-sys * memalloc * midir Overall this adds ~30K lines of code, over half of which is in the alsa bindings alone. Differential Revision: https://phabricator.services.mozilla.com/D124640 |
||
---|---|---|
.. | ||
src | ||
.cargo-checksum.json | ||
Cargo.toml | ||
README.md |
ALSA bindings for Rust
Thin but safe wrappers for ALSA, the most common API for accessing audio devices on Linux.
The ALSA API is rather big, so everything is not covered yet, but expect the following to work:
-
Audio Playback (example in
pcm
module docs) -
Audio Recording
-
Mixer controls
-
HCtl API (jack detection example in
hctl
module docs) -
Raw midi
-
Midi sequencer (most of it)
-
Ctl API
-
Device name hints (example in
device_name
module docs) -
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_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
poll::Descriptors
, to combine with poll or mio. Or just usewait
if you don't need non-blocking functionality.