Launchpad.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include "Input.h"
  3. #include "Output.h"
  4. #include "LaunchpadColor.h"
  5. #include <string>
  6. #include <utility>
  7. #include <atomic>
  8. namespace midi {
  9. class Launchpad
  10. {
  11. public:
  12. typedef unsigned char KeyCoordinate;
  13. typedef void (*KeyEventCallback)(unsigned char x, unsigned char y, void* data);
  14. static const unsigned char width = 9;
  15. static const unsigned char height = 9;
  16. private:
  17. LaunchpadColor colors[width][height];
  18. bool colorSet[width][height];
  19. std::atomic<bool> keyBeingPressed[width][height];
  20. protected:
  21. Input midiin;
  22. Output midiout;
  23. public:
  24. KeyEventCallback keyPressedCallback;
  25. KeyEventCallback keyReleasedCallback;
  26. void* keyEventCallbackData;
  27. Launchpad(const std::string clientName = std::string("RtMidi Launchpad"));
  28. bool issetColor(unsigned char x, unsigned char y) const;
  29. const LaunchpadColor& getColor(unsigned char x, unsigned char y) const;
  30. void setColor(unsigned char x, unsigned char y, const LaunchpadColor& color);
  31. void setColorAll(const LaunchpadColor& color);
  32. bool getKeyPressed(KeyCoordinate x, KeyCoordinate y);
  33. protected:
  34. void keyPressed(unsigned char x, unsigned char y);
  35. void keyReleased(unsigned char x, unsigned char y);
  36. private:
  37. static void midiMessageCallback(double timeStamp, Message &message, void *launchpad);
  38. void setKeyPressed(KeyCoordinate x, KeyCoordinate y, bool pressed);
  39. };
  40. class LaunchpadNotFoundError : public std::runtime_error
  41. {
  42. typedef std::runtime_error parent;
  43. public:
  44. LaunchpadNotFoundError(const char* message);
  45. };
  46. };