You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
2.4 KiB
Plaintext

b = Buffer.read(s, "/home/lcoogan/snd/demos/springverb.wav")
s.prepareForRecord;
s.record("~/snd/releases/desolation-mountain/springverb.wav");
(
s.waitForBoot {
s.record(
"~/snd/releases/desolation-mountain/springverb.wav",
2
);
};
)
s.stopRecording;
(
{
PlayBuf.ar(2, b, 1, loop: 0) * 0.3
}.play;
)
(
~echo = Synth(\springverb, [
\length, TempoClock.default.tempo * (3/8),
\fb, 0.1,
\sep, 0.0014
], addAction: \addToTail);
)
(
~echo.free;
~springverb.free;
)
(
~springverb = Synth(\springverb, [
\decay, 1.8,
\boing, 0.025,
\mix, 0.5,
\tone, 3000,
\drive, 1.2
], addAction: \addToTail);
)
(
~springverb = Synth(\springverb, [
\decay, 1.8,
\boing, 0.025,
\mix, 0.5,
\tone, 3000,
\drive, 1.2
], addAction: \addToTail);
(
~echo = Synth(\springverb, [
\length, TempoClock.default.tempo * (3/8),
\fb, 0.1,
\sep, 0.0014
], addAction: \addToTail);
)
)
(
SynthDef(\echo, { |length = 1, fb = 0.8, sep = 0.012|
var input = In.ar(0, 2);
var output = input + Fb({ |feedback|
var left, right, spring, magic;
magic = LeakDC.ar(feedback * fb + input);
magic = HPF.ar(magic, 400);
magic = LPF.ar(magic, 5000);
magic = magic.tanh;
// Simulate spring reverb inside the feedback loop
spring = CombL.ar(magic, 0.1, 0.03, 1.5); // short decay, boingy
spring = AllpassL.ar(spring, 0.1, [0.022, 0.027], 1.5);
magic = magic + spring * 0.4; // mix in some splash
#left, right = magic;
magic = [
DelayC.ar(left, 1, LFNoise2.ar(12).range(0, sep)),
DelayC.ar(right, 1, LFNoise2.ar(12).range(sep, 0))
];
}, length);
ReplaceOut.ar(0, output);
}).store;
)
(
SynthDef(\springverb, { |inBus = 0, outBus = 0, decay = 1.2, boing = 0.03, mix = 0.4, tone = 5000, drive = 1.0|
var dry = In.ar(inBus, 2);
var verb, spring, wet;
// Pre-emphasize and drive the input (mimics spring preamp)
spring = dry * drive;
spring = spring.tanh;
// Simulate springy tail
spring = CombL.ar(spring, 0.1, boing, decay);
spring = AllpassL.ar(spring, 0.1, [0.025, 0.030], decay);
spring = LPF.ar(spring, tone); // darken the tail
spring = spring * mix;
// Mix dry and wet
verb = XFade2.ar(dry, spring, mix * 2 - 1); // Crossfade between dry and wet
Out.ar(outBus, verb);
}).store;
)