Browser-native Web Audio API for WASM applications.
A Rust library providing a high-level interface to the Web Audio API, designed for WASM applications that need microphone input and speaker output.
- Async device enumeration with permission handling
- Input/output device selection
- Real-time audio processing with interleaved f32 samples
- Automatic context management and resource cleanup
Add to your Cargo.toml:
[dependencies]
web-audio = { git = "https://github.com/neodsp/web-audio" }use web_audio::WebAudio;
// Request microphone permission
WebAudio::request_permission().await?;
// Enumerate available devices
let (inputs, outputs) = WebAudio::enumerate_devices().await?;
// Create audio context
let mut audio = WebAudio::new().await?;
// Configure devices (optional)
audio.set_input_device(Some(inputs[0].device_id.clone()));
audio.set_output_device(Some(outputs[0].device_id.clone())).await?;
// Start processing
// Input/output are interleaved f32: [L0, R0, L1, R1, ...] for stereo
audio.start(1024, 2, |input, output| {
// Process audio - this example creates a feedback loop
output.copy_from_slice(input);
}).await?;
// Audio runs in background until stopped
audio.stop()?;- AudioContext support
- getUserMedia for microphone access
- User interaction before audio playback (browser security requirement)
See the example/ directory for a complete working example with device selection UI.
Install wasm-pack:
cargo install wasm-packwasm-pack build example --target web --out-dir pkgpython3 -m http.server 8080 --directory exampleThen open http://localhost:8080 in your browser.
MIT OR Apache-2.0
