|
- // Rainbow RGB LED example
- // by Andrew Belt
- // adapted for SC by Brian Heim
-
- // Call process() every 256 audio samples
- ~vcv_frameDivider = 256;
- ~vcv_bufferSize = 1;
-
- // From https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
- ~hsvToRgb = { |h, s, v|
- var c, x, rgb, m;
- h = h * 6;
- c = v * s;
- x = c * (1 - abs(h % 2 - 1));
- rgb = case
- { h < 1 } { [c, x, 0] }
- { h < 2 } { [x, c, 0] }
- { h < 3 } { [0, c, x] }
- { h < 4 } { [0, x, c] }
- { h < 5 } { [x, 0, c] }
- { [c, 0, x] };
-
- rgb + (v - c);
- };
-
- ~phase = 0;
- ~vcv_process = { |block|
- ~phase = ~phase + block.sampleTime * ~vcv_frameDivider * 0.5;
- ~phase = ~phase % 1.0;
-
- VcvPrototypeProcessBlock.numRows.do { |i|
- var h = (1 - i / 6 + ~phase) % 1;
- var rgb = ~hsvToRgb.value(h, 1, 1);
- 3.do { |c|
- block.lights[i][c] = rgb[c];
- block.switchLights[i][c] = rgb[c];
- };
- block.outputs[i][0] = sin(2pi * h) * 5 + 5;
- };
-
- block
- }
|