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()
);
}