SuperCollider code for 8-channel composition exhibited in 2020 at Steklenik gallery run by CONA institute.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.1 KiB

  1. (
  2. SynthDef(\henonSynth1, {
  3. arg out=0, amp=0.5, gate=1, fadeTime=1, lpff=200, hpff=200;
  4. var sig, freq, env, lpfsig, hpfsig;
  5. freq = HenonN.ar(
  6. freq: 5000,
  7. a: LFNoise2.kr(1, 0.2, 1.2),
  8. b: LFNoise2.kr(1, 0.15, 0.15),
  9. mul: 0.6
  10. );
  11. // used as frequency modulator
  12. sig = Pulse.ar(
  13. freq: freq.range(40, LFNoise2.kr(0.1).range(1000,10000)),
  14. mul: 0.2);
  15. sig = sig.ring3(0.5);
  16. sig = sig.clip2(0.8);
  17. lpfsig = LPF.ar(sig, lpff.max(50));
  18. hpfsig = HPF.ar(sig, hpff.max(50));
  19. sig = lpfsig + hpfsig;
  20. sig = LeakDC.ar(sig);
  21. env = EnvGen.kr( Env([0, 1, 0], [fadeTime, fadeTime], \sin, 1),
  22. gate, doneAction: Done.freeSelf);
  23. sig = sig * env * amp;
  24. Out.ar(out,sig);
  25. }).add;
  26. );
  27. ( // henonN + henonC controlling filter * volume
  28. SynthDef(\henonLsynth1, {
  29. arg out=0, hpfreqmin=100, amp=1;
  30. var snd;
  31. snd = (BrownNoise.ar() + Mix(SinOsc.ar(HenonN.ar(4,a:[1.4,1.1] ).range(200,400)))) * HenonN.ar(freq:1).range(0,0.5);
  32. snd = RHPF.ar(snd, HenonC.ar(freq:1).fold(0,1).exprange(hpfreqmin,7000), rq:1);
  33. snd = snd * HenonC.ar(0.5).range(0.6,1);
  34. Out.ar(out, snd * amp);
  35. }).add;
  36. );
  37. (
  38. // henonLsynth = dark brooding melodic drone-noise
  39. SynthDef(\henonLsynth2, {
  40. arg out, gate=1, fadeTime=1, amp=1;
  41. var sig, sinfreq, env;
  42. env = EnvGen.kr(Env(levels: [0,1,0], times: [fadeTime, fadeTime], curve: \sin, releaseNode: 1),
  43. gate, doneAction: 2);
  44. sinfreq = LFPulse.kr( freq: 0.9, width:0.1);
  45. sinfreq = sinfreq.range(
  46. LFPulse.kr(0.073).range(37).midicps,
  47. [44.midicps,53.3.midicps]
  48. );
  49. sinfreq = sinfreq * SinOsc.kr(1).range(1,1.02);
  50. sig = SinOsc.ar(sinfreq);
  51. sig = sig + (BrownNoise.ar(0.4) * SinOsc.kr(0.1).range(0,1));
  52. sig = sig * HenonN.ar(20).range(0,1).clip(0,1);
  53. sig = RLPF.ar(sig, HenonC.ar(1).fold(0,1).exprange(40,1000), rq:0.4);
  54. sig = sig.clip2(0.5);
  55. sig = sig * HenonC.ar(0.5).range(0,0.5);
  56. // sig = RHPF.ar(sig,5000);
  57. sig = sig + Greyhole.ar(sig * 0.6, feedback: 0.8, diff: 0.7, delayTime: 0.78123);
  58. sig = sig * env * amp;
  59. sig = Mix.new(sig);
  60. Out.ar(out, sig);
  61. }).add;
  62. );
  63. ( // henonSquare being thrown around
  64. SynthDef(\henonSquare, {
  65. arg out=0, gate=1, amp=0.5;
  66. var env = EnvGen.kr(Env([0, 1, 0], [1, 4], \sin, 1), gate);
  67. var trig = HenonTrig.kr();
  68. // wandering attractor into variable 'freq':
  69. var freq = HenonN.ar(
  70. TRand.kr(trig:trig).exprange(1,20),
  71. // parameters:
  72. //a: LFNoise2.kr(0.5).range(0.3,1.6),
  73. //b: LFNoise2.kr(0.5).range(0,0.6)
  74. //a: 1.4,
  75. a: LFTri.kr(0.01,3).range(1,1.5), // ramp up and down, slowly
  76. b: 0.3
  77. ).exprange(40,1000);
  78. // wandering attractor applied as frequency to squarewave:
  79. var sig = Pulse.ar([freq,freq]);
  80. // adding sinwave for more clean deep/soft sound
  81. sig = sig + SinOsc.ar([freq,freq*0.995]);
  82. // back to mono:
  83. sig = Mix(sig);
  84. // fold distortion
  85. sig = sig.fold2(0.5) * 2;
  86. // low pass filter to give sense of closing and opening
  87. sig = LPF.ar(sig, LFNoise2.kr(0.2).exprange(100,20000));
  88. sig = sig * env;
  89. // add space. lots of space
  90. //sig = (sig * 0.5) + Greyhole.ar(sig * 0.5, delayTime:0.6, damp: 0.8, diff: 0, feedback:0.6,);
  91. DetectSilence.ar(sig, doneAction: Done.freeSelf);
  92. sig = sig * amp;
  93. Out.ar(out,sig);
  94. }).add;
  95. );