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 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()
};
let wav_cfg = || {
SnapshotConfigBuilder::default()
.num_samples(ONE_SECOND_SAMPLES)
.output_mode(WavOutput::Wav16)
.build()
.unwrap()
};
let clip_proc = mul(2.0) >> clip_to(-0.5, 0.5);
assert_audio_unit_snapshot!(
"util_clip_to_m0_5_p0_5_mul2_sine440",
clip_proc.clone(),
InputSource::Unit(Box::new(sine_hz::<f32>(440.0))),
chart_cfg_inputs("util_clip_to_m0_5_p0_5_mul2_sine440")
);
assert_audio_unit_snapshot!(
"util_clip_to_m0_5_p0_5_mul2_sine440",
clip_proc,
InputSource::Unit(Box::new(sine_hz::<f32>(440.0))),
wav_cfg()
);
let softcrush_chain = sine_hz::<f32>(220.0) >> shape(SoftCrush(0.5));
assert_audio_unit_snapshot!(
"util_shape_softcrush0_5_sine220",
softcrush_chain.clone(),
InputSource::None,
chart_cfg("util_shape_softcrush0_5_sine220")
);
assert_audio_unit_snapshot!(
"util_shape_softcrush0_5_sine220",
softcrush_chain,
InputSource::None,
wav_cfg()
);
let abs_map = map(|frame: &Frame<f32, U1>| frame[0].abs());
assert_audio_unit_snapshot!(
"util_map_abs_sine110",
abs_map.clone(),
InputSource::Unit(Box::new(sine_hz::<f32>(110.0))),
chart_cfg_inputs("util_map_abs_sine110")
);
assert_audio_unit_snapshot!(
"util_map_abs_sine110",
abs_map,
InputSource::Unit(Box::new(sine_hz::<f32>(110.0))),
wav_cfg()
);
let oversampled = oversample(sine_hz::<f32>(440.0)); assert_audio_unit_snapshot!(
"util_oversample2x_sine440",
oversampled.clone(),
InputSource::None,
chart_cfg("util_oversample2x_sine440")
);
assert_audio_unit_snapshot!(
"util_oversample2x_sine440",
oversampled,
InputSource::None,
wav_cfg()
);
let speed_node = ramp_hz::<f32>(0.25) >> map(|f: &Frame<f32, U1>| lerp(0.5f32, 1.5f32, f[0]));
let resampler = resample(sine_hz::<f32>(440.0));
assert_audio_unit_snapshot!(
"util_resample_speed_ramp_0_5_to_1_5_sine440",
resampler.clone(),
InputSource::Unit(Box::new(speed_node.clone())),
chart_cfg("util_resample_speed_ramp_0_5_to_1_5_sine440")
);
assert_audio_unit_snapshot!(
"util_resample_speed_ramp_0_5_to_1_5_sine440",
resampler,
InputSource::Unit(Box::new(speed_node)),
wav_cfg()
);
}