(
{
    var sound, warped, degraded, flutter, hiss;

    // Load your WAV file
    sound = PlayBuf.ar(1, Buffer.read(s, "/Users/lcoogan/snd/releases/desolation-mountain/mono.wav"), loop: 0);

    // Wow & flutter (pitch modulation)
   flutter = SinOsc.kr(0.2).range(0.98, 1.02) + LFNoise1.kr(0.5).range(0.99, 1.01);

	//    flutter = SinOsc.kr(0.2).range(0.4, 0.6) + LFNoise1.kr(0.5).range(-0.05, 0.05);

	warped = Warp1.ar(1, Buffer.readChannel(s, "/Users/lcoogan/snd/releases/desolation-mountain/mono.wav", channels:[0]), SinOsc.ar(0), 1, 0.2);



    // Add tape-style hiss
    hiss = WhiteNoise.ar(0.01);

    // Filter for muffling
    warped = LPF.ar(warped, 6000); // Adjust to taste

    // Bit reduction
    warped = Decimator.ar(warped, rate: 44100, bits: 8);

    // Combine and output
    (warped + hiss) * 0.5;
}.play;
)


Buffer.read(s, "/Users/lcoogan/snd/releases/desolation-mountain/mono.wav");



// Load buffer once
~buf = Buffer.readChannel(s, "/Users/lcoogan/snd/releases/desolation-mountain/mono.wav", channels:[0]);

~buf = Buffer.read(s, "/Users/lcoogan/snd/releases/desolation-mountain/02 - crawling and quietly seething was the figure of the trees.wav");

// Then:
(
{
    var rate, sig, hiss;

    // Create pitch flutter by modulating playback rate
	rate = PinkNoise.ar(3).range(0.4, 0.42) + PinkNoise.kr(0.2).range(0.4, 0.42);

    // Normal playback with flutter
    sig = PlayBuf.ar(1, ~buf, rate, doneAction: 2); // doneAction: 2 frees the synth when finishede
    // Add hiss
	// hiss = BrownNoise.ar(0.01);

    // Filter + degrade
	// sound = LPF.ar(sound, 100000);
	// sig = Decimator.ar(sig, rate: 44100, bits: 8);
	// sig = PitchShift.ar(sig, windowSize:0.2, pitchRatio:1.0, pitchDispersion:0, timeDispersion:0.8, mul:1.0, add:0.0)[;

	sig = Fold.ar(sig, -20, 20); // EMF: wavefolding only happens if the input signal amplitude exceeds the bounds provided. osc has a pretty normal range and won't ever exceed ±20. You can see in the previous line (LFDNoise3) I'm only amplifying it by a maximum factor of 1.5. It's actually small boundary values with Fold that cause audible results (change to the folding min/max to -0.1, +0.1 and you'll notice the sound changes significantly)
	sig = Splay.ar(sig, spread: 10); // EMF: spread caps out at 1, larger values don't do anything extra
	sig = sig.tanh * \amp.ir(0.25);
			sig = sig + CombL.ar(sig, maxdelaytime:0.2, delaytime:0.2, decaytime: 1.0, mul: 0.3) * 0.4;




    sig!2 * 4;
}.play;
)



(
{
    var rate, sig, hiss, wowFlutter, dirt, stereo, folded, degraded, roomy;

    // Wow & Flutter via modulated rate
    wowFlutter = LFNoise1.kr(0.2).range(0.97, 1.03) + LFNoise2.kr(0.1).range(0.98, 1.02);

    // Use PlayBuf for natural file playback with flutter
    rate = wowFlutter;
    sig = PlayBuf.ar(1, ~buf, rate, doneAction: 2);

    // Tape hiss / noise floor
    hiss = BrownNoise.ar(0.005);

    // Bitcrushing and sample rate crunch (optional!)
    sig = Decimator.ar(sig, rate: 8000, bits: 6); // go lo-fi

    // Saturation and nonlinearities
    folded = Fold.ar(sig, -0.1, 0.1); // tight fold = audible grit
    dirt = (folded * 5).tanh;

    // Slight stereo spread
    stereo = Splay.ar(dirt + hiss, spread: 0.7);

    // Subtle comb echo / fake reverb tail
    roomy = stereo + CombL.ar(stereo, 0.3, 0.2, 2.5, 0.2);

    // Optional: small dropouts
    roomy = roomy * LFNoise2.kr(0.5).range(0.7, 1.0);

    // Final output level
    roomy * \amp.ir(0.3);
}.play;
)
