2 unstable releases
0.2.0 | Oct 29, 2024 |
---|---|
0.1.0 | Jan 29, 2024 |
#145 in Audio
582 downloads per month
Used in 4 crates
31KB
412 lines
dynwave
dynwave is a dynamic audio player based on fixed samples stream, written in Rust.
The purpose of this is to implement a cross platform audio player that plays audio samples stream generated and plays it real-time.
This works as a fusion between rubato and cpal.
This is useful for emulators for example, where an emulation loop will be like this:
- Run emulation for a frame.
- Extract the collected audio samples for that frame.
- Queue the samples for playing (using
dynwave
). - Take video frame and display it.
- Repeat.
Getting Started
You can use dynwave
to play audio streams for your Rust projects.
Cargo
Add it as a dependency in your Cargo.toml
file:
cargo add dynwave
Example usage
use dynwave::{AudioPlayer, BufferSize};
let mut player = AudioPlayer::<f32>::new(44100, BufferSize::OneSecond).unwrap();
// Start playing the audio
player.play().unwrap();
// generate audio samples (can be done in a emulation loop for example)
let samples = generate_samples();
player.queue(&samples);
// pause the audio
player.pause().unwrap();
Minimum Supported Rust Version (MSRV)
The minimum supported Rust version for this crate is 1.70.0
.
Contributing
Contributions are welcome, please open an issue or a PR if you have any suggestions or ideas.
Make sure to:
- Run
cargo fmt
. - Run
cargo clippy
. - Run
cargo test
.
Projects using dynwave
If you are using
dynwave
in your project, please open a PR to add it here.
Project | Description |
---|---|
mizu | A GameBoy emulator written in Rust (this is actually were this library originiated https://github.com/Amjad50/mizu/issues/11) |
trapezoid | PSX emulator powered with Vulkan and Rust |
plastic | NES emulator with TUI and GUI |
License
This project is licensed under the MIT License - see the LICENSE file for details
Dependencies
~1–32MB
~436K SLoC