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.

37 lines
825B

  1. // Call process() every 256 audio samples
  2. config.frameDivider = 256
  3. // From https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
  4. function hsvToRgb(h, s, v) {
  5. h *= 6
  6. var c = v * s
  7. var x = c * (1 - Math.abs(h % 2 - 1))
  8. var rgb;
  9. if (h < 1) rgb = [c, x, 0]
  10. else if (h < 2) rgb = [x, c, 0]
  11. else if (h < 3) rgb = [0, c, x]
  12. else if (h < 4) rgb = [0, x, c]
  13. else if (h < 5) rgb = [x, 0, c]
  14. else rgb = [c, 0, x]
  15. var m = v - c
  16. return {r: rgb[0] + m, g: rgb[1] + m, b: rgb[2] + m}
  17. }
  18. var phase = 0
  19. function process(args) {
  20. phase += args.sampleTime * config.frameDivider * 0.5
  21. phase %= 1
  22. for (var i = 0; i < 6; i++) {
  23. var h = (1 - i / 6 + phase) % 1
  24. var rgb = hsvToRgb(h, 1, 1)
  25. args.lights[i] = rgb
  26. args.switchLights[i] = rgb
  27. args.outputs[i] = Math.sin(2 * Math.PI * h) * 5 + 5
  28. }
  29. }
  30. display("Hello, world!")