use fundsp::prelude::*;
use insta_fun::prelude::*;
fn main() {
const CHART_SAMPLES: usize = 2000;
const ONE_SECOND_SAMPLES: usize = DEFAULT_SR as usize;
let chart_cfg = |title: &str| {
let chart = SvgChartConfigBuilder::default()
.chart_title(title)
.build()
.unwrap();
SnapshotConfigBuilder::default()
.num_samples(CHART_SAMPLES)
.output_mode(chart)
.build()
.unwrap()
};
let wav_cfg = || {
SnapshotConfigBuilder::default()
.num_samples(ONE_SECOND_SAMPLES)
.output_mode(WavOutput::Wav16)
.build()
.unwrap()
};
assert_audio_unit_snapshot!(
"mod_adsr_a10ms_d100ms_s0_70_r200ms",
adsr_live(0.01, 0.10, 0.70, 0.20) * sine_hz::<f32>(220.0),
InputSource::impulse(),
chart_cfg("mod_adsr_a10ms_d100ms_s0_70_r200ms")
);
assert_audio_unit_snapshot!(
"mod_adsr_a10ms_d100ms_s0_70_r200ms",
adsr_live(0.01, 0.10, 0.70, 0.20) * sine_hz::<f32>(220.0),
InputSource::impulse(),
wav_cfg()
);
assert_audio_unit_snapshot!(
"mod_lfo",
lfo(|t: f32| exp(-t)),
InputSource::None,
chart_cfg("mod_lfo")
);
assert_audio_unit_snapshot!(
"mod_lfo",
lfo(|t: f32| exp(-t)),
InputSource::None,
wav_cfg()
);
assert_audio_unit_snapshot!(
"mod_sample_hold_5hz_var0_2",
hold_hz(5.0, 0.2),
InputSource::impulse(),
chart_cfg("mod_sample_hold_5hz_var0_2")
);
assert_audio_unit_snapshot!(
"mod_sample_hold_5hz_var0_2",
hold_hz(5.0, 0.2),
InputSource::impulse(),
wav_cfg()
);
let modulated_source = sine_hz::<f32>(220.0) * (1.0 + 0.5 * sine_hz::<f32>(2.0));
let follower = modulated_source.clone() >> follow(0.10);
let chart_cfg_inputs = |title: &str| {
let chart = SvgChartConfigBuilder::default()
.chart_title(title)
.with_inputs(true)
.build()
.unwrap();
SnapshotConfigBuilder::default()
.num_samples(CHART_SAMPLES)
.output_mode(chart)
.build()
.unwrap()
};
assert_audio_unit_snapshot!(
"mod_follow_attack100ms",
follower.clone(),
InputSource::Unit(Box::new(modulated_source.clone())),
chart_cfg_inputs("mod_follow_attack100ms")
);
assert_audio_unit_snapshot!(
"mod_follow_attack100ms",
follower,
InputSource::Unit(Box::new(modulated_source)),
wav_cfg()
);
}