2b_rgb_synthdefs.scd 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. (
  2. // RGB-controlled synthesizer with amplitude envelope
  3. SynthDef(\rgbSynth, { |out=0, freq=440, amp=0.5, attack=0.01, release=1, redAmt=0.5, greenAmt=0.5, blueAmt=0.5|
  4. var env, red, green, blue, sig;
  5. // Amplitude envelope
  6. env = EnvGen.kr(Env.perc(attack, release), doneAction: 2);
  7. // Different waveforms for RGB components
  8. red = SinOsc.ar(freq) * redAmt;
  9. green = Saw.ar(freq) * greenAmt;
  10. blue = Pulse.ar(freq, 0.5) * blueAmt;
  11. // Mix the waveforms
  12. sig = (red + green + blue) / 3;
  13. // Apply envelope and output
  14. sig = sig * env * amp;
  15. Out.ar(out, sig!2);
  16. }).add;
  17. // RGB-controlled synthesizer with filter envelope
  18. SynthDef(\rgbFilterSynth, { |out=0, freq=440, amp=0.5, attack=0.01, release=1,
  19. filterAttack=0.01, filterRelease=1, filterMin=200, filterMax=5000,
  20. redAmt=0.5, greenAmt=0.5, blueAmt=0.5|
  21. var ampEnv, filterEnv, red, green, blue, sig;
  22. // Amplitude envelope
  23. ampEnv = EnvGen.kr(Env.perc(attack, release), doneAction: 2);
  24. // Filter envelope
  25. filterEnv = EnvGen.kr(Env.perc(filterAttack, filterRelease));
  26. // Different waveforms for RGB components
  27. red = SinOsc.ar(freq) * redAmt;
  28. green = Saw.ar(freq) * greenAmt;
  29. blue = Pulse.ar(freq, 0.5) * blueAmt;
  30. // Mix the waveforms
  31. sig = (red + green + blue) / 3;
  32. // Apply filter with envelope control
  33. sig = RLPF.ar(sig, filterEnv.linexp(0, 1, filterMin, filterMax), 0.5);
  34. // Apply amplitude envelope and output
  35. sig = sig * ampEnv * amp;
  36. Out.ar(out, sig!2);
  37. }).add;
  38. // RGB-controlled synthesizer with pitch envelope
  39. SynthDef(\rgbPitchSynth, { |out=0, freq=440, amp=0.5, attack=0.01, release=1,
  40. pitchAttack=0.01, pitchRelease=1, pitchRatio=2,
  41. redAmt=0.5, greenAmt=0.5, blueAmt=0.5|
  42. var ampEnv, pitchEnv, red, green, blue, sig;
  43. // Amplitude envelope
  44. ampEnv = EnvGen.kr(Env.perc(attack, release), doneAction: 2);
  45. // Pitch envelope
  46. pitchEnv = EnvGen.kr(Env.perc(pitchAttack, pitchRelease));
  47. // Calculate modulated frequency
  48. freq = freq * (1 + (pitchEnv * (pitchRatio - 1)));
  49. // Different waveforms for RGB components
  50. red = SinOsc.ar(freq) * redAmt;
  51. green = Saw.ar(freq) * greenAmt;
  52. blue = Pulse.ar(freq, 0.5) * blueAmt;
  53. // Mix the waveforms
  54. sig = (red + green + blue) / 3;
  55. // Apply amplitude envelope and output
  56. sig = sig * ampEnv * amp;
  57. Out.ar(out, sig!2);
  58. }).add;
  59. "RGB-controlled synthesizers loaded".postln;
  60. )