Skip to content

Adam-Gleave/opsynth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opsynth

opsynth is a library for simple, composable modular synthesis.

This crate provides a number of small constructs for audio signal processing, that can be composed together to form increasingly complex signal chains.

Example

Here is a basic modulated drone synth:

// Play C3 as base note, with octave and major third.
let vco_a = Sine::oscillator(C3);
let vco_b = Sine::oscillator(C3).v_oct(1.0);
let vco_c = Sine::oscillator(C3).v_oct(4.0 / 12.0);

// Create square wave at the octave, and apply slight frequency modulation.
let fm_lfo = Sine::oscillator(0.05).mul(0.001).add(1.0);
let vco_d = Square::oscillator(C3).v_oct(fm_lfo).mul(0.25);

// Mix oscillators and do some hard clipping.
let voice = vco_a
    .mix(vco_b, 0.75)
    .mix(vco_c, 0.5)
    .mix(vco_d, 0.35)
    .clip(0.8);

// Apply some amplitude modulation to the voice.
let am_lfo = Sine::oscillator(0.02).mul(0.2).add(0.6);
let synth = voice.mul(am_lfo);

The full code needed to render audio from this signal chain is provided in examples/drone.rs

About

Modular synthesis with combinators

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages