2 unstable releases

new 0.2.0 Oct 29, 2024
0.1.0 Jan 29, 2024

#151 in Audio

Download history 5/week @ 2024-07-14 1/week @ 2024-07-21 6/week @ 2024-07-28 4/week @ 2024-08-04 1/week @ 2024-08-11 1/week @ 2024-09-01 7/week @ 2024-09-08 7/week @ 2024-09-15 21/week @ 2024-09-22 4/week @ 2024-09-29 82/week @ 2024-10-13 270/week @ 2024-10-20 195/week @ 2024-10-27

547 downloads per month
Used in 4 crates

MIT license

31KB
412 lines

dynwave

Build status dependency status license Crates.io dynwave docs.rs 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:

  1. Run emulation for a frame.
  2. Extract the collected audio samples for that frame.
  3. Queue the samples for playing (using dynwave).
  4. Take video frame and display it.
  5. 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–29MB
~435K SLoC