p-fields:
/* FOLLOWER - a simple envelope follower FOLLOWER applies the amplitude envelope of the modulator to the carrier. The carrier is supplied as the "left" channel, the modulator as the "right" channel. (See below.) p0 = output start time p1 = input start time (must be 0 for aux bus -- see below) p2 = duration p3 = carrier amplitude multiplier p4 = modulator amplitude multiplier p5 = power gauge window length (in samples; try 100) p6 = smoothness -- how much to smooth the power gauge output (0-1; try .8) p7 = percent to left channel [optional, default is .5] Function table 1 is the overall amplitude envelope. NOTES: - The "left" input channel comes from the bus with the lower number; the "right" input channel from the bus with the higher number. - Currently in RTcmix it's not possible for an instrument to take input from both an "in" bus and an "aux in" bus at the same time. So, for example, if you want the modulator to come from a microphone, which must enter via an "in" bus, and the carrier to come from a WAVETABLE instrument via an "aux" bus, then you must route the mic into the MIX instrument as a way to convert it from "in" to "aux in". If you want the carrier to come from a file, then it must first go through MIX (or some other instrument) to send it into an aux bus. Since the instrument is usually taking input from an aux bus, the input start time for this instrument must be zero. The only exception would be if you're taking the carrier and modulator signals from the left and right channels of the same sound file. - The envelope follower consists of a power gauge that measures the average power of the modulator signal. The window length (p5) is the number of samples to average. Large values (> 1000) track only gross amplitude changes; small values (< 10) track very minute changes. If the power level changes abruptly, as it does especially with long windows, you'll hear zipper noise. Reduce this by increasing the smoothness (p6). This applies a low-pass filter to the power gauge signal, smoothing any abrupt changes. - You'll probably always need to boost the modulator amplitude multiplier (p4) beyond what you'd expect, because we're using the RMS power of the modulator to affect the carrier, and this is always lower than the peak amplitude of the modulator signal. */Sample scorefile:
rtsetparams(44100, 2) load("WAVETABLE") load("FOLLOWER") source_listen = 0 /* set to 1 to hear carrier and modulator separately */ dur = 20 /* play carrier to bus 0 */ bus_config("WAVETABLE", "aux 0 out") makegen(2, 10, 1000, 1, .5, .2) amp = 15000 WAVETABLE(0, dur, amp, freq = 440) WAVETABLE(0, dur, amp, freq * 1.02) /* play modulator to bus 1 */ bus_config("WAVETABLE", "aux 1 out") setline(0,0, 1,1, 19,1, 20,0) reset(20000) incr = base_incr = 0.15 notedur = base_incr * 0.3 freq = 1000 for (st = 0; st < dur; st = st + incr) { amp = irand(5000, 30000) WAVETABLE(st, notedur, amp, freq) incr = base_incr * irand(0.5, 2) } reset(1000) /* apply modulator's amp envelope to carrier */ bus_config("FOLLOWER", "aux 0-1 in", "out 0-1") setline(0,0, 1,1, 10,1, 20,0) caramp = 1.0 modamp = 4.0 winlen = 10 /* number of samples for power gauge to average */ smooth = 0.5 /* how much to smooth the power gauge curve */ pctleft = 0.5 if (source_listen) { bus_config("MIX", "aux 0-1 in", "out 0-1") MIX(0, 0, dur, 1, 0, 1) } else FOLLOWER(0, inskip = 0, dur, caramp, modamp, winlen, smooth, pctleft)