audio-automation 0.3.0

Generic automation system for audio parameters - works with any audio framework
Documentation

audio-automation

CI Crates.io docs.rs License

Time-based parameter automation with interpolation curves for audio applications.

#![no_std] compatible (requires alloc). Works on embedded, WASM, and standard targets.

Automation Curves

Usage

use audio_automation::prelude::*;

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
enum Param { Volume, Cutoff }

let env = AutomationEnvelope::new(Param::Volume)
    .with_point(AutomationPoint::new(0.0, 0.0))
    .with_point(AutomationPoint::with_curve(4.0, 1.0, CurveType::Exponential))
    .with_range(0.0, 1.0);

let value = env.get_value_at(2.0).unwrap();

Presets

// Fade in over 4 beats
let fade = AutomationEnvelope::fade_in(Param::Volume, 4.0, CurveType::SCurve);

// Pulse: 1 beat attack, 2 beat sustain, 1 beat release
let pulse = AutomationEnvelope::pulse(Param::Volume, 1.0, 2.0, 1.0, CurveType::Linear);

// 2 Hz LFO tremolo
let tremolo = AutomationEnvelope::lfo(Param::Volume, 2.0, 4.0, 0.5, 1.0);

Multiple Parameters

let clip = AutomationClip::new("Intro", 8.0)
    .with_envelope("volume",
        AutomationEnvelope::fade_in(Param::Volume, 4.0, CurveType::Linear))
    .with_envelope("cutoff",
        AutomationEnvelope::new(Param::Cutoff)
            .with_point(AutomationPoint::new(0.0, 0.0))
            .with_point(AutomationPoint::new(8.0, 1.0)));

Curve Types

Linear, Exponential, Logarithmic, SCurve, Stepped, Bezier, Elastic, Bounce, Back, Circular, and polynomial easing variants (QuadIn/Out/InOut, CubicIn/Out/InOut, QuartIn/Out/InOut, QuintIn/Out/InOut).

License

MIT or Apache-2.0