2b_rgb_synthdefs.scd 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. (
  2. // RGB-controlled synthesizer with amplitude envelope
  3. SynthDef(\rgbSynth, { |out=0, freq=440, amp=0.5, ampAttack=0.01, ampRelease=1,
  4. filterAttack=0, filterRelease=0, filterMin=200, filterMax=5000,
  5. pitchAttack=0, pitchRelease=0, pitchRatio=2,
  6. redAmt=0.5, greenAmt=0.5, blueAmt=0.5|
  7. var env, gate, filterEnv, pitchEnv, red, green, blue, sig;
  8. gate = \gate.kr(1);
  9. // Amplitude envelope
  10. env = EnvGen.kr(Env.adsr(ampAttack, 0, 1, ampRelease), gate, doneAction: 2);
  11. // Filter envelope
  12. filterEnv = EnvGen.kr(Env.adsr(filterAttack, 0, 1, filterRelease), gate);
  13. // Pitch envelope
  14. pitchEnv = EnvGen.kr(Env.adsr(pitchAttack, 0, 1, pitchRelease), gate);
  15. // Calculate modulated frequency
  16. freq = freq * (1 + (pitchEnv * (pitchRatio - 1)));
  17. // Different waveforms for RGB components
  18. red = SinOsc.ar(freq) * redAmt;
  19. green = Saw.ar(freq) * greenAmt;
  20. blue = Pulse.ar(freq, 0.5) * blueAmt;
  21. // Mix the waveforms
  22. sig = (red + green + blue) / 3;
  23. // Apply filter with envelope control
  24. sig = RLPF.ar(sig, filterEnv.linexp(0, 1, filterMin, filterMax), 0.8);
  25. // Apply envelope and output
  26. sig = sig * env * amp;
  27. Out.ar(out, sig!2);
  28. }).add;
  29. "RGB-controlled synthesizer loaded".postln;
  30. )