# asio-sys
[](https://crates.io/crates/asio-sys)
[](https://docs.rs/asio-sys)
[](https://github.com/RustAudio/cpal/blob/master/LICENSE)
Low-level Rust bindings for the [Steinberg ASIO SDK](https://www.steinberg.net/developers/).
ASIO (Audio Stream Input/Output) is a low-latency audio API for Windows that provides direct hardware access, bypassing the Windows audio stack for minimal latency.
## Overview
`asio-sys` provides raw FFI bindings to the ASIO SDK, automatically generated using [bindgen](https://rust-lang.github.io/rust-bindgen/). This crate is used by [cpal](https://crates.io/crates/cpal)'s ASIO backend to provide low-latency audio on Windows.
**Note:** Most users should use [cpal](https://crates.io/crates/cpal)'s safe, cross-platform API rather than using `asio-sys` directly.
## Features
- Automatic binding generation from ASIO SDK headers
- Low-level access to ASIO driver functionality
- Support for both MSVC and MinGW toolchains
- Automated ASIO SDK download and setup during build
## Requirements
### Windows
- **LLVM/Clang**: Required for bindgen to generate bindings
- Install via [LLVM downloads](https://releases.llvm.org/) or `choco install llvm`
- **ASIO SDK**: Automatically downloaded during build from Steinberg
- Or set `CPAL_ASIO_DIR` environment variable to point to a local SDK
### Build Dependencies
- `bindgen` - Generates Rust bindings from C/C++ headers
- `cc` - Compiles the ASIO SDK C++ files
- `walkdir` - Finds SDK files
## Usage
Add to your `Cargo.toml`:
```toml
[dependencies]
asio-sys = "0.2"
```
### Example
```rust
use asio_sys as sys;
fn main() {
// Load ASIO driver
let driver_name = "ASIO4ALL v2"; // Your ASIO driver name
unsafe {
// Initialize ASIO
let drivers = sys::get_driver_names();
println!("Available drivers: {drivers:?}");
// Load a driver
match sys::load_asio_driver(driver_name) {
Ok(driver) => println!("Loaded driver: {driver_name}"),
Err(e) => eprintln!("Failed to load driver: {e:?}"),
}
}
}
```
## Environment Variables
- `CPAL_ASIO_DIR`: Path to ASIO SDK directory (optional)
- If not set, the SDK is automatically downloaded during build
- Example: `set CPAL_ASIO_DIR=C:\path\to\asiosdk`
## Platform Support
- **Windows** (MSVC and MinGW)
- x86_64 (64-bit)
- i686 (32-bit)
ASIO is Windows-only. This crate will not build on other platforms.
## Safety
This crate provides raw FFI bindings to C++ code. Almost all functions are `unsafe` and require careful handling:
- Memory management is manual
- Callbacks must be properly synchronized
- Driver state must be carefully managed
- See [ASIO SDK documentation](https://www.steinberg.net/developers/) for details
## License
Licensed under the Apache License, Version 2.0. See [LICENSE](../LICENSE) for details.
The ASIO SDK is owned by Steinberg Media Technologies GmbH. Users must comply with Steinberg's licensing terms.
## Contributing
Contributions are welcome! Please submit issues and pull requests to the [cpal repository](https://github.com/RustAudio/cpal).
## Resources
- [ASIO SDK Documentation](https://www.steinberg.net/developers/)
- [cpal Documentation](https://docs.rs/cpal)
- [RustAudio Community](https://github.com/RustAudio)
- [Discord: #cpal Channel](https://discordapp.com/channels/590254806208217089/672897096826748948)