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.

41 lines
840B

  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. rgb[0] += m
  17. rgb[1] += m
  18. rgb[2] += m
  19. return rgb
  20. }
  21. var phase = 0
  22. function process(block) {
  23. phase += block.sampleTime * config.frameDivider * 0.5
  24. phase %= 1
  25. for (var i = 0; i < 6; i++) {
  26. var h = (1 - i / 6 + phase) % 1
  27. var rgb = hsvToRgb(h, 1, 1)
  28. block.lights[i] = rgb
  29. block.switchLights[i] = rgb
  30. block.outputs[i][0] = Math.sin(2 * Math.PI * h) * 5 + 5
  31. }
  32. }
  33. display("Hello, world!")
  34. // 12.2us