Skip to content

SuperInstance/constraint-audio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

constraint-audio

Rust audio DSP backend for the constraint-theory ecosystem.

What It Does

Lattice-based oscillators where waveshape IS lattice geometry:

  • Sine = continuous (no lattice)
  • Square = Z₂ binary snap
  • Saw = Z linear interpolation
  • Triangle = A₂ snap (Eisenstein 1D)
  • Eisenstein = Full A₂ hexagonal lattice

Every waveform is generated by snapping continuous phase to discrete lattice directions. Different lattices produce different shapes — this isn't metaphor, it's the literal signal generation.

Features

  • LatticeOscillator with 5 shapes + PolyBLEP anti-aliasing
  • BiquadFilter (RBJ Audio EQ Cookbook: LP/HP/BP)
  • ConsonanceFilter emphasizing harmonically consonant intervals
  • ConstraintSynth combining oscillator + ADSR + filter
  • 5 built-in presets
  • Offline rendering to Vec<f64> buffers

Quick Start

use constraint_audio::{ConstraintSynth, SynthPreset};

// Using a preset
let synth = ConstraintSynth::from_preset(SynthPreset::HarmonicBell);
let audio = synth.play_note(60, 100, 2.0); // C4, velocity 100, 2 seconds

// Custom
use constraint_audio::{LatticeOscillator, LatticeShape, BiquadFilter, AdsrEnvelope};

let synth = ConstraintSynth::new(
    LatticeOscillator::new(440.0, 44100)
        .with_shape(LatticeShape::Saw)
        .with_polyblep(true),
    AdsrEnvelope::new(0.01, 0.1, 0.7, 0.3),
    Some(BiquadFilter::lowpass(2000.0, 44100, 0.707)),
);
let audio = synth.play_note(69, 80, 0.5); // A4

Related

License

MIT OR Apache-2.0

About

Rust audio DSP backend for the constraint-theory ecosystem — lattice oscillators, constraint filters, synth engine

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages