{
   "ancestor_list" : [],
   "description" : "warm ambient textures with filtered voices, analog-style processing, and evolving pads reminiscent of Boards of Canada",
   "author" : "po",
   "name" : "Nostalgic Memory",
   "id" : "1-5iA",
   "is_private" : null,
   "code" : "SynthDef(\"task_efef68ae-1aef-4dc3-9bc3-274765c62cb1\", {\r\n      arg out=0, gate=1, freq=220, amp=0.3, tempo=1.0;\r\n      var env, warmPad, vocalSim, tapeSat, analogFilt, wobble, pan, sig, time, dust;\r\n      \r\n      // Long evolving envelope\r\n      env = EnvGen.kr(Env([0, 0.7, 1, 0.8, 0], [8, 25, 30, 15] / tempo, [2, -2, 3, -4]), gate, doneAction: 2);\r\n      time = SinOsc.kr(0.02 * tempo);\r\n      \r\n      // Warm analog-style pad\r\n      warmPad = Mix.ar([\r\n          Saw.ar(freq * [0.99, 1.01, 1.503]) * 0.4,\r\n          Pulse.ar(freq * [0.5, 0.752], LFNoise1.kr(0.3).range(0.3, 0.7)) * 0.3\r\n      ]);\r\n      \r\n      // Simulated children's vocal formants\r\n      vocalSim = Formant.ar(\r\n          freq * [0.7, 0.9] + LFNoise1.kr(2).range(-5, 5),\r\n          [800, 1200] + (time * 200),\r\n          [100, 150],\r\n          LFNoise1.kr(0.1).range(0.05, 0.15)\r\n      );\r\n      \r\n      // Analog filter with slow modulation\r\n      wobble = SinOsc.kr([0.07, 0.05] * tempo).range(0.3, 1.2);\r\n      analogFilt = RLPF.ar(warmPad + vocalSim, \r\n          (400 + (time * 600) + LFNoise1.kr(0.3).range(0, 300)) * wobble, \r\n          0.4 + LFNoise1.kr(0.2).range(0, 0.3)\r\n      );\r\n      \r\n      // Tape saturation simulation\r\n      tapeSat = (analogFilt * 2.5).tanh * 0.6;\r\n      \r\n      // Nostalgic dust and crackle\r\n      dust = Dust.ar([0.5, 0.7] * tempo) * Decay.ar(Impulse.ar(0), 0.05) * 0.02;\r\n      \r\n      // Slow stereo movement\r\n      pan = SinOsc.kr(0.03 * tempo);\r\n      sig = Balance2.ar(tapeSat[0] + dust[0], tapeSat[1] + dust[1], pan);\r\n      \r\n      // Final processing\r\n      sig = HPF.ar(sig, 30);\r\n      sig = Compander.ar(sig, sig, 0.3, 1, 0.3, 0.01, 0.3);\r\n      sig = LeakDC.ar(sig * amp * env).clip(-0.95, 0.95);\r\n      \r\n      Out.ar(out, sig);\r\n  });",
   "labels" : []
}
