is a re-implementation of Steinberg's ASIO (Audio Stream Input/Output) protocol.
If you are looking for Rust bindings to the official ASIO SDK by Steinberg, take a look at the asio-sys crate instead.
azo doesn't use the SDK, it instead directly interacts with the underlying COM objects exposed by the drivers.
With azo you can load and interact with multiple drivers at the same time, without limitations.
Technically, ASIO is platform agnostic. However, the spec does not define how drivers are to be discovered on other platforms, and is in general very Windows centric, which is why azo is (at this time) exclusive to Windows.
from examples/hello_world.rs:
fn main() {
let all = azo::discover_drivers().unwrap();
let driver = all[0].create_instance().unwrap();
driver.init(None).unwrap();
let rate = driver.get_sample_rate().unwrap();
println!("current sample rate: {rate}");
}example output:
current sample rate: 44100
More /examples are available.