Skip to content

Instantly share code, notes, and snippets.

@hotwatermorning
Created August 26, 2017 14:59
Show Gist options
  • Save hotwatermorning/b43312c97f07f8cdef58baf1555cca36 to your computer and use it in GitHub Desktop.
Save hotwatermorning/b43312c97f07f8cdef58baf1555cca36 to your computer and use it in GitHub Desktop.
reverb_test
import("stdfaust.lib");
maxdel = 8192;
// value: 0 .. 1
curve_eq_power(value) = cos(ma.PI * (1 - (value * 2 - 1)) / 4.0);
dry_wet = hslider("Dry/Wet", 0.5, 0, 1, 0.01);
wet_gain = curve_eq_power(dry_wet);
dry_gain = curve_eq_power(1 - dry_wet);
// width = hslider("Width", 1, 0, 1, 0.01);
er_delay = hslider("ER Delay", 30, 0, 3000, 1);
er_gain = curve_eq_power(hslider("ER Gain", 0.5, 0, 1, 0.01));
er_dumping = hslider("ER Dumping", 10000, 1000, 16000, 1);
air_absorption = hslider("Air Absorption", 10000, 1000, 20000, 1);
rev_time = hslider("Reverb Time", 1.0, 0.01, 6.0, 0.1);
left_comb_filter_taps = (1687, 1601, 2053, 2251);
right_comb_filter_taps = (1597, 1781, 1771, 2069);
calc_filter_coeff(tap, seconds) = pow(10.0, -3 * (tap / ma.SR) / seconds);
ffbcf(tap, cutoff) = fi.fb_comb(maxdel, tap, 1.0, calc_filter_coeff(tap, rev_time)) : fi.lowpass(3, cutoff);
er_delay_elem(k, gain, er_delay) = de.delay(30000, int(er_delay * k)) * gain;
early_reflection = _ <:
( er_delay_elem(1.0, 0.9, er_delay),
er_delay_elem(1.13, 0.8, er_delay),
er_delay_elem(1.29, 0.76, er_delay),
er_delay_elem(1.37, 0.7, er_delay),
er_delay_elem(1.89, 0.6, er_delay),
er_delay_elem(2.39, 0.55, er_delay),
er_delay_elem(2.79, 0.43, er_delay),
er_delay_elem(3.19, 0.32, er_delay)
) :> (+) : _,er_gain : * : fi.lowpass(3, er_dumping);
comb_filters(cutoff) = _ <:
( ffbcf(1687, cutoff),
ffbcf(1601, cutoff),
ffbcf(2053, cutoff),
ffbcf(2251, cutoff),
ffbcf(1597, cutoff),
ffbcf(1781, cutoff),
ffbcf(1771, cutoff),
ffbcf(2069, cutoff)
) :> (+);
reverberator(tap1, tap2, tap3) =
_ <:
(_ * dry_gain),
(_ <:
early_reflection,
( fi.allpass_comb(maxdel, tap1, 0.7) :
fi.allpass_comb(maxdel, tap2, 0.7) :
fi.allpass_comb(maxdel, tap3, 0.7) :
comb_filters(6000) :
fi.lowpass(3, air_absorption)
)
:> (+) : _,wet_gain : *)
:> (+);
reverberator_left = reverberator(1051, 347, 113);
reverberator_right = reverberator(1027, 361, 157);
process = (reverberator_left, reverberator_right) : (_,_);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment