Skip to content

Repository files navigation

CAW Logo

Combinatorial Audio Workstation (CAW)

VersionDocumentationtestdependency status

CAW is a framework for building synthesizers as Rust programs.

Here's a simple example that plays a 60Hz saw wave:

# Cargo.toml
[dependencies]
caw = { version = "0.4", features = ["interactive"] }
use caw::prelude::*;fnmain(){// Open a window that can play and visualize an audio signal.let window = Window::builder().build();// Describe the audio signal.let sig = oscillator(Saw,60.0).build();// Play the audio signal, visualizing its waveform in the window.
window.play_mono(sig,Default::default());}

Filters can be applied to audio signals to build up more complex sounds. In this next example the mouse position within the window controls a low-pass filter cutoff and resonance.

use caw::prelude::*;fnmain(){// Open a window that can play and visualize an audio signal.let window = Window::builder().build();// Describe the audio signal.let input = window.input();let sig = oscillator(Saw,60.0).build().filter(
low_pass::default(input.mouse.x_01()*20_000.0).resonance(input.mouse.y_01()),);// Play the audio signal, visualizing its waveform in the window.
window.play_mono(sig,Default::default()).unwrap();}

It's possible to treat your computer keyboard as a musical keyboard in a few more lines of code.

use caw::prelude::*;fnmain(){// Open a window that can play and visualize an audio signal.let window = Window::builder().build();// Describe the audio signal.let input = window.input();letMonoVoice{
note,
key_down_gate,
..
} = input.keyboard.opinionated_key_events(Note::B2).mono_voice();let env = adsr_linear_01(key_down_gate).attack_s(0.1).build();let sig = oscillator(Saw, note.freq_hz()).build().filter(
low_pass::default(env * input.mouse.x_01()*20_000.0).resonance(input.mouse.y_01()),).filter(chorus()).filter(reverb());// Play the audio signal, visualizing its waveform in the window.
window.play_mono(sig,Default::default()).unwrap();}

There's a bunch of effects that can be chained onto signals. Here we'll add a chorus and reverb effect.

See the examples in the caw and caw_interactive crates for more complex examples.

About

Software-defined modular synthesizer

Resources

Stars

98 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages