( { 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; )