Home

Awesome

<p align="center"><img height="150" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/Icon.png" /></p> <h1 align="center">Augmented Audio Libraries</h1>

CI builds Coverage Status

Note about test coverage


Experiments trying to use Rust for audio programming.

Consider anything in this repository a draft.

<details> <summary>āš ļø <strong>Goals</strong></summary> </details>

License

Most of this repository is published under the MIT LICENSE.

Some directories which contain full applications are licensed under the AGPLv3 license. Check the LICENSE and README.md files.

šŸ“– Documentation

ā¬‡ļø Binary downloads

šŸ’¬ Blog posts


šŸ“ø Screenshots

<p align="center" style="display: flex"> <img alt="Sequencer screenshot" src="https://raw.githubusercontent.com/yamadapc/augmented-audio/master/crates/apps/looper/Sequencer/screenshot.png" width="300" /> </p> <p align="center" style="display: flex;"> <img alt="Metronome screenshot" src="https://github.com/yamadapc/augmented-audio/raw/master/crates/apps/metronome/design/screenshots/single.png" height="200" /> <img alt="Test plugin host screenshot" src="https://github.com/yamadapc/augmented-audio/raw/master/crates/apps/plugin-host/screenshot.png" width="300" /> <img alt="Looper screenshot" src="https://github.com/yamadapc/augmented-audio/raw/master/crates/apps/looper/screenshot.png" width="300" /> </p> <p align="center" style="display: flex;"> <img height="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/volume.png" /> <img width="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/picklist.png" /> <img height="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/menu_list.png" /> <img height="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/button.png" /> <img height="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/knobs.png" /> <img height="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/sliders.png" /> <img width="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/ui/transport.png" /> <img height="100" src="https://github.com/yamadapc/rust-audio-software/raw/master/design/tremolo-screenshot.png" /> </p>

šŸ‘© Web GUI

See docs/misc/WEB_GUI.md.

šŸ›  Rust libraries and tooling

Workspace & Building

The project is set-up with a cargo workspace. Running cargo commands at the root directory should compile all crates sharing caches.

To build the whole project run:

git submodule update --init
cargo build

To run tests:

cargo test

On OSX you might want to run ./scripts/test.sh instead of that command.

Build outputs should be on target/debug or target/release.

Packaging apps and VSTs

Package VSTs using ./scripts/dev.sh build. This will build all the packages, build specific crates' outputs with ./scripts/dev.sh build <path>.

Looper, Metronome and other (flutter / macOS builds)

See instructions on their READMEs under crates/apps.

Building on linux

Since this is bringing in all the possible rust crates, you'll need to install quite a few dependencies.

See .github/workflows/default.yml for a list of what's needed on Ubuntu.

Linting

cargo clippy

Benchmarking

Benchmarks using criterion will be slowly added. In order to run benchmarks use:

cargo bench

Profiling on macOS

https://crates.io/crates/cargo-instruments

cd ./crates/oscillator
cargo instruments -t time --bench sine_oscillator_benchmark -- --bench

Generating flamegraphs from benchmarks

NOTE I couldn't get this to work on macOS

Flamegraphs can be generated using cargo-flamegraph:

cargo install flamegraph

The tool can then be used to run a criterion benchmark and generate a flamegraph:

cargo flamegraph --bench sine_oscillator_benchmark -- --bench

Snapshot testing audio processors

See docs/monorepo-tooling/SNAPSHOT_TESTING.md.

Debugging features