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