4 releases
0.0.4 | Nov 24, 2024 |
---|---|
0.0.3 | Nov 15, 2024 |
0.0.2 | Nov 9, 2024 |
0.0.1 | Nov 8, 2024 |
#247 in Audio
384 downloads per month
3.5MB
8K
SLoC
raug
raug is a library for writing and running digital audio processors and signal flow graphs in Rust.
Design Goals
- Fast, lightweight, zero-copy where possible
- Stack memory >>> Heap memory
- No allocations on the realtime audio thread
- Do as much work ahead of time as possible
Features
- Two main APIs:
processor
API for writing high-performance raw audio processorsbuilder
API for ergonomically building signal flow graphs
- Runtime capable of running signal flow graphs, either in realtime or offline
- Save rendered audio to WAV files
- Uses
f64
audio samples by default (can be set tof32
with cargo featuref32_samples
) - Safe API: Very few
unsafe
blocks (currently only 1)
Examples
See examples/processor.rs for a simple example of writing a raw audio processor.
See examples/demo.rs for a simple example of building a signal flow graph.
Optional Cargo Feature Flags
f32_samples
: Usef32
audio samples instead of the defaultf64
.serde
: Enable serde v1 support for most relevant structures.expr
: Enable parsing mathematical expressions withevalexpr
.fft
: Enable FFT support for frequency-domain processing usingrealfft
.jack
: Enable JACK support for realtime audio processing on Linux.
Related Projects
- Python bindings: raug-python
- GUI using iced (WIP): raug-iced
Roadmap
- More built-in processors
- More examples
- More tests
- More optimizations
- More bindings (JavaScript?)
Contributing
This is a personal project, but I'm happy to accept contributions. Please open an issue or PR if you have any ideas or feedback.
Versioning
This project is in early development and does not yet follow semantic versioning. Breaking changes may occur at any time.
The goal is to reach a somewhat-stable starting point and release version 0.1.0 on crates.io soon(tm).
License
MIT OR Apache 2.0
Dependencies
~5–34MB
~525K SLoC