123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #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);
- }
- 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::setColor(unsigned char x, unsigned char y, unsigned char red, unsigned char green)
- {
- unsigned char velocity = (green << 4) + red;
- if(y == 8)
- {
- midiout.sendMessage(ControlChangeMessage(
- 0,
- 104 + x,
- velocity
- ));
- }
- else
- {
- midiout.sendMessage(NoteOnMessage(
- 0,
- ((7 - y) << 4) + x,
- velocity
- ));
- }
- }
- 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);
- }
- }
|