{
   "author" : "emergent",
   "name" : "Meandering Sines",
   "ancestor_list" : [],
   "description" : "8 sine waves, each with a slightly meandering frequency, random phase, slowly varying amplitude, slowly wandering through the stereo field; pitches are chosen from a given chord that is changing at intervals between 18 and 20 seconds.",
   "labels" : [
      "ambient",
      "drone",
      "low"
   ],
   "is_private" : null,
   "id" : "1-5eE",
   "code" : "// Meandering Sines\r\n(\r\n// chord choosing function\r\n~chords = Dictionary.new;\r\n~chords.add(\\fifth -> [1, 1.5, 2]);\r\n~chords.add(\\maj6 -> [1, 1.2, 1.6, 2]);\r\n~chords.add(\\min6 -> [1, 1.25, 1.666, 2]);\r\n~chords.add(\\maj7 -> [1, 1.25, 1.875, 2]);\r\n\r\n// write pitches into array\r\n~dronenotes = [\r\n\t{~chords[\\fifth].choose}!8 * 44.midicps,\r\n\t{~chords[\\maj6].choose}!8 * 41.midicps,\r\n\t{~chords[\\fifth].choose}!8 * 44.midicps,\r\n\t{~chords[\\min6].choose}!8 * 40.midicps\r\n];\r\n\r\ns.waitForBoot({\r\n\ts.sync;\r\n\r\n\t// instrument definition\r\n\tSynthDef.new(\\sine, {\r\n\t\tvar sig, env;\r\n\t\tenv = Env.asr(\\atk.ir(0.05), 0.75, \\rel.ir(2)).kr(2, \\gate.kr(1));\r\n\t\tsig = SinOsc.ar(\r\n\t\t\t\\freq.kr(220, \\freqlag.kr(1.2)) + SinOsc.kr({Rand(0.02, 0.06)}, 0, {Rand(0.1, 2.0)}), // frequency: slowly meandering a bit\r\n\t\t\t{Rand(0.0, 2pi)}, // phase\r\n\t\t\tSinOsc.kr({Rand(1/60, 3/60)}).range(0.2, 0.5));  // meandering amplitude\r\n\t\tsig = sig * env * \\amp.kr(0.2, 0.2);\r\n\t\tsig = Pan2.ar(sig, SinOsc.kr(\\panfreq.ir(1/10), {Rand(0.0, pi)}, {Rand(0.1, 0.99)})); // meandering panning\r\n\t\tOut.ar(\\out.kr(0), sig);\r\n\t}).add;\r\n\ts.sync;\r\n\r\n\tPbindef(\\drones,\r\n\t\t\\instrument, \\sine,\r\n\t\t\\freq, Pseq(~dronenotes,inf),\r\n\t\t\\amp, 0.06,\r\n\t\t\\dur, Pwhite(18, 30),\r\n\t\t\\atk, Pwhite(3.2, 4),\r\n\t\t\\legato, 1.1,\r\n\t\t\\out, 0\r\n\t);\r\n\ts.sync;\r\n\t\"done\".postln;\r\n});\r\n)\r\n// start performance\r\nPbindef(\\drones).play;\r\n\r\n// finish performance\r\nPbindef(\\drones).stop;\r\n\r\n// wait until sound is off\r\n(\r\nPbindef(\\drones).clear;\r\ns.quit;\r\n)"
}
