|
- // Rainbow RGB LED example
-
- import("stdfaust.lib");
-
- // From https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
- hsvToRgb(h, s, v) = r, g, b
- with {
- h1 = h * 6;
- c1 = v * s;
- v1 = v;
- x = c1 * (1 - abs(h1 % 2 - 1));
-
- r1 = ba.if((h1 < 1), c1,
- ba.if((h1 < 2), x,
- ba.if((h1 < 3), 0,
- ba.if((h1 < 4), 0,
- ba.if((h1 < 5), x, c1)))));
-
- g1 = ba.if((h1 < 1), x,
- ba.if((h1 < 2), c1,
- ba.if((h1 < 3), c1,
- ba.if((h1 < 4), x,
- ba.if((h1 < 5), 0, 0)))));
-
- b1 = ba.if((h1 < 1), 0,
- ba.if((h1 < 2), 0,
- ba.if((h1 < 3), x,
- ba.if((h1 < 4), c1,
- ba.if((h1 < 5), c1, x)))));
-
- m = v1 - c1;
- r = r1 + m;
- g = g1 + m;
- b = b1 + m;
- };
-
- process = par(i, 6, out(i+1))
- with {
- phasor(freq) = freq/ma.SR : (+ : decimal) ~ _ with { decimal(x) = x-int(x); };
- out(i) = (sin(2 * ma.PI * h) * 5 + 5) <: (red(i), green(i), blue(i)) :> _
- with {
- h = (1 - i / 6 + phase) % 1;
- rgb = hsvToRgb(h, 1, 1);
- r = rgb : _,!,!;
- g = rgb : !,_,!;
- b = rgb : !,!,_;
-
- red(i,x) = attach(x, r : hbargraph("r1%i [switchlight_red:%i]", 0, 1) : hbargraph("r2%i [light_red:%i]", 0, 1));
- green(i,x) = attach(x, g : hbargraph("g1%i [switchlight_green:%i]", 0, 1) : hbargraph("g2%i [light_green:%i]", 0, 1));
- blue(i,x) = attach(x, b : hbargraph("b1%i [switchlight_blue:%i]", 0, 1) : hbargraph("b2%i [light_blue:%i]", 0, 1));
-
- phase = phasor(0.5);
- };
- };
|