rae 0.1.12

Renderer-neutral widget, layout, sanitization, and GLSL shader primitives for Rust desktop tools.
Documentation
use rae::{
    demo_mixer_strips, standard_meter_segments, AudioKnobModel, AudioPluginControl,
    AudioPluginPanel, AudioTransportModel, AudioTransportState, AudioWaveformModel,
};

fn main() {
    let transport = AudioTransportModel {
        state: AudioTransportState::Playing,
        bpm: 128.0,
        position_seconds: 93.25,
        ..Default::default()
    }
    .sanitized();

    println!(
        "transport: {:?} {:.1} bpm @ {} Hz",
        transport.state, transport.bpm, transport.sample_rate
    );

    println!("meter segments:");
    for segment in standard_meter_segments() {
        println!("- {:+.0}..{:+.0} dB", segment.from_db, segment.to_db);
    }

    println!("mixer strips:");
    for strip in demo_mixer_strips() {
        println!(
            "- {:<10} role={} fader={:+.1} dB plugins={}",
            strip.label,
            strip.role.label(),
            strip.fader.value_db,
            strip.plugins.len()
        );
    }

    let cutoff =
        AudioKnobModel::new("filter.cutoff", "Cutoff", 20.0, 20_000.0, "Hz").with_value(2_400.0);
    println!("knob: {} = {}", cutoff.label, cutoff.display_value());

    let plugin = AudioPluginPanel::new(
        "synth.filter",
        "Ladder Filter",
        [
            AudioPluginControl::new("cutoff", "Cutoff", rae::AudioControlKind::Knob)
                .with_value(0.62, "Hz"),
            AudioPluginControl::new("resonance", "Resonance", rae::AudioControlKind::Knob)
                .with_value(0.48, "%"),
        ],
    );
    println!(
        "plugin: {} controls={}",
        plugin.title,
        plugin.controls.len()
    );

    let waveform = AudioWaveformModel::new(
        "clip.wave",
        "Clip Waveform",
        (0..256).map(|index| ((index as f32 * 0.08).sin() * 0.82).clamp(-1.0, 1.0)),
    );
    println!(
        "waveform: peak={:.2} rms={:.2}",
        waveform.peak(),
        waveform.rms()
    );
}