Launchpad.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "Launchpad.h"
  2. #include "MidiMessage.h"
  3. Launchpad::Launchpad()
  4. : midiin(), midiout(), keyPressedCallback(0), keyReleasedCallback(0)
  5. {
  6. midiin.setCallback(midiMessageCallback, (void*) this);
  7. midiout.openPort(1);
  8. midiin.openPort(0);
  9. }
  10. #include <iostream>
  11. void Launchpad::midiMessageCallback(double timeStamp, MidiMessage &message, void *userData)
  12. {
  13. Launchpad *launchpad = (Launchpad*) userData;
  14. // use runtime type information to check for the message type.
  15. // this requires the specified class to have a virtual member.
  16. NoteMessage *noteMessage = dynamic_cast<NoteMessage*>(&message);
  17. if(noteMessage)
  18. {
  19. unsigned char x = noteMessage->pitch % 16;
  20. unsigned char y = 7 - noteMessage->pitch / 16;
  21. if(dynamic_cast<NoteOnMessage*>(noteMessage))
  22. {
  23. launchpad->keyPressed(x, y);
  24. }
  25. else
  26. {
  27. launchpad->keyReleased(x, y);
  28. }
  29. }
  30. else
  31. {
  32. ControlChangeMessage *controlChangeMessage = dynamic_cast<ControlChangeMessage*>(&message);
  33. if(controlChangeMessage)
  34. {
  35. unsigned char x = controlChangeMessage->control - 104;
  36. unsigned char y = 8;
  37. if(controlChangeMessage->value == 127)
  38. {
  39. launchpad->keyPressed(x, y);
  40. }
  41. else
  42. {
  43. launchpad->keyReleased(x, y);
  44. }
  45. }
  46. }
  47. }
  48. void Launchpad::keyPressed(unsigned char x, unsigned char y)
  49. {
  50. if(keyPressedCallback)
  51. {
  52. keyPressedCallback(x, y);
  53. }
  54. }
  55. void Launchpad::keyReleased(unsigned char x, unsigned char y)
  56. {
  57. if(keyReleasedCallback)
  58. {
  59. keyReleasedCallback(x, y);
  60. }
  61. }