12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include "Launchpad.h"
- #include "MidiMessage.h"
- Launchpad::Launchpad()
- : midiin(), midiout(), keyPressedCallback(0), keyReleasedCallback(0)
- {
- midiin.setCallback(midiMessageCallback, (void*) this);
- midiout.openPort(1);
- midiin.openPort(0);
- }
- #include <iostream>
- void Launchpad::midiMessageCallback(double timeStamp, MidiMessage &message, void *userData)
- {
- Launchpad *launchpad = (Launchpad*) userData;
- // use runtime type information to check for the message type.
- // this requires the specified class to have a virtual member.
- NoteMessage *noteMessage = dynamic_cast<NoteMessage*>(&message);
- if(noteMessage)
- {
- unsigned char x = noteMessage->pitch % 16;
- unsigned char y = 7 - noteMessage->pitch / 16;
- if(dynamic_cast<NoteOnMessage*>(noteMessage))
- {
- launchpad->keyPressed(x, y);
- }
- else
- {
- launchpad->keyReleased(x, y);
- }
- }
- else
- {
- ControlChangeMessage *controlChangeMessage = dynamic_cast<ControlChangeMessage*>(&message);
- if(controlChangeMessage)
- {
- unsigned char x = controlChangeMessage->control - 104;
- unsigned char y = 8;
- if(controlChangeMessage->value == 127)
- {
- launchpad->keyPressed(x, y);
- }
- else
- {
- launchpad->keyReleased(x, y);
- }
- }
- }
- }
- void Launchpad::keyPressed(unsigned char x, unsigned char y)
- {
- if(keyPressedCallback)
- {
- keyPressedCallback(x, y);
- }
- }
- void Launchpad::keyReleased(unsigned char x, unsigned char y)
- {
- if(keyReleasedCallback)
- {
- keyReleasedCallback(x, y);
- }
- }
|