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.

42 lines
1.2 KiB
Plaintext

(
{
var sig, noise, crackle, flutter, gritty, dusty, wow, ring, dropout;
// Buffer preload (mono)
// ~buf = Buffer.readChannel(s, "/Users/lcoogan/snd/releases/desolation-mountain/mono.wav", channels:[0]);
// Wow & flutter (slow and loopy like hand-cranked)
wow = SinOsc.kr(0.1).range(0.99, 1.01);
flutter = LFNoise1.kr(6).range(0.98, 1.02);
// Modulated playback rate
sig = PlayBuf.ar(1, ~buf, rate: wow * flutter, doneAction: 2);
// Bandwidth-limited like a wax disc (c. 4kHz max)
sig = HPF.ar(sig, 300); // kill low-end rumble
sig = LPF.ar(sig, 4000); // simulate acoustic horn
// Dropouts (emulate groove wear)
dropout = LFNoise2.kr(0.8).range(0.5, 1.0);
sig = sig * dropout;
// Clicks / crackle (discrete dust pops)
crackle = Dust2.ar(200) * Decay2.ar(Impulse.ar(20), 0.001, 0.02) * 0.2;
// Background hiss / groove rumble
noise = WhiteNoise.ar(0.01) + Crackle.ar(1.5, 0.02);
// Mechanical ring (horn resonance / disc rumble)
ring = Resonz.ar(sig, 900, 0.1) * 0.3;
// Mix everything (all mono!)
gritty = sig + ring + crackle + noise;
// Subtle saturation
gritty = (gritty * 2).tanh;
// Reduce output + normalize
gritty!2* 0.5;
}.play;
)