|
@@ -1,27 +1,7 @@
|
|
|
#include "Launchpad.h"
|
|
|
-#include "RtMidi.h"
|
|
|
-#include "MidiMessage.h"
|
|
|
#include <string>
|
|
|
|
|
|
-LaunchpadColor::LaunchpadColor()
|
|
|
- : red(0), green(0)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-LaunchpadColor::LaunchpadColor(unsigned char r, unsigned char g)
|
|
|
- : red(r), green(g)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-bool LaunchpadColor::operator==(const LaunchpadColor& color) const
|
|
|
-{
|
|
|
- return red == color.red && green == color.green;
|
|
|
-}
|
|
|
-
|
|
|
-bool LaunchpadColor::operator!=(const LaunchpadColor& color) const
|
|
|
-{
|
|
|
- return !operator==(color);
|
|
|
-}
|
|
|
+namespace midi {
|
|
|
|
|
|
Launchpad::Launchpad()
|
|
|
: midiin(), midiout(), keyPressedCallback(0), keyReleasedCallback(0)
|
|
@@ -39,10 +19,7 @@ Launchpad::Launchpad()
|
|
|
}
|
|
|
if(!midiout.isPortOpen())
|
|
|
{
|
|
|
- throw RtMidiError(
|
|
|
- "no launchpad for midi output found",
|
|
|
- RtMidiError::NO_DEVICES_FOUND
|
|
|
- );
|
|
|
+ throw "no launchpad for midi output found";
|
|
|
}
|
|
|
|
|
|
for(unsigned int i=0; i<midiin.getPortCount(); i++)
|
|
@@ -55,14 +32,11 @@ Launchpad::Launchpad()
|
|
|
}
|
|
|
if(!midiin.isPortOpen())
|
|
|
{
|
|
|
- throw RtMidiError(
|
|
|
- "no launchpad for midi input found",
|
|
|
- RtMidiError::NO_DEVICES_FOUND
|
|
|
- );
|
|
|
+ throw "no launchpad for midi input found";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void Launchpad::midiMessageCallback(double timeStamp, MidiMessage &message, void *userData)
|
|
|
+void Launchpad::midiMessageCallback(double timeStamp, Message &message, void *userData)
|
|
|
{
|
|
|
Launchpad *launchpad = (Launchpad*) userData;
|
|
|
|
|
@@ -116,17 +90,11 @@ void Launchpad::setColor(unsigned char x, unsigned char y, const LaunchpadColor&
|
|
|
{
|
|
|
if(x >= width || y >= height || (x == 8 && y == 8))
|
|
|
{
|
|
|
- throw RtMidiError(
|
|
|
- "specified launchpad position is out of range",
|
|
|
- RtMidiError::INVALID_PARAMETER
|
|
|
- );
|
|
|
+ throw "specified launchpad position is out of range";
|
|
|
}
|
|
|
if(color.red > 3 || color.green > 3)
|
|
|
{
|
|
|
- throw RtMidiError(
|
|
|
- "specified launchpad color is out of range",
|
|
|
- RtMidiError::INVALID_PARAMETER
|
|
|
- );
|
|
|
+ throw "specified launchpad color is out of range";
|
|
|
}
|
|
|
|
|
|
unsigned char velocity = (color.green << 4) + color.red;
|
|
@@ -182,104 +150,4 @@ void Launchpad::keyReleased(unsigned char x, unsigned char y)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-void LaunchpadScreen::keyPressed(unsigned char x, unsigned char y)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::keyReleased(unsigned char x, unsigned char y)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-const LaunchpadColor& LaunchpadScreen::getColor(unsigned char x, unsigned char y) const
|
|
|
-{
|
|
|
- return colors[x][y];
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::setColor(unsigned char x, unsigned char y, const LaunchpadColor& color)
|
|
|
-{
|
|
|
- if(active && (!launchpad->issetColor(x, y) || launchpad->getColor(x, y) != color)) {
|
|
|
- launchpad->setColor(x, y, color);
|
|
|
- }
|
|
|
-
|
|
|
- colors[x][y] = color;
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::setColorAll(const LaunchpadColor& color)
|
|
|
-{
|
|
|
- for(unsigned char x = 0; x < Launchpad::width; x++) {
|
|
|
- for(unsigned char y = 0; y < Launchpad::height; y++) {
|
|
|
- if(x != 8 || y != 8)
|
|
|
- {
|
|
|
- setColor(x, y, color);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::sync()
|
|
|
-{
|
|
|
- for(unsigned char x = 0; x < Launchpad::width; x++) {
|
|
|
- for(unsigned char y = 0; y < Launchpad::height; y++) {
|
|
|
- if((x != 8 || y != 8)
|
|
|
- && (!launchpad->issetColor(x, y) || launchpad->getColor(x, y) != colors[x][y])) {
|
|
|
- launchpad->setColor(x, y, colors[x][y]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-LaunchpadScreen::LaunchpadScreen()
|
|
|
- : launchpad(0), active(false)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::enable()
|
|
|
-{
|
|
|
- if(!launchpad) {
|
|
|
- throw RtMidiError(
|
|
|
- "no launchpad set",
|
|
|
- RtMidiError::INVALID_USE
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- launchpad->keyEventCallbackData = (void*)this;
|
|
|
- launchpad->keyPressedCallback = keyPressedCallback;
|
|
|
- launchpad->keyReleasedCallback = keyReleasedCallback;
|
|
|
- sync();
|
|
|
- active = true;
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::disable()
|
|
|
-{
|
|
|
- launchpad->keyPressedCallback = 0;
|
|
|
- launchpad->keyReleasedCallback = 0;
|
|
|
- launchpad->keyEventCallbackData = 0;
|
|
|
- active = false;
|
|
|
-}
|
|
|
-
|
|
|
-bool LaunchpadScreen::enabled() const
|
|
|
-{
|
|
|
- return active;
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::setLaunchpad(Launchpad& l)
|
|
|
-{
|
|
|
- if(enabled()) {
|
|
|
- disable();
|
|
|
- launchpad = &l;
|
|
|
- enable();
|
|
|
- } else {
|
|
|
- launchpad = &l;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::keyPressedCallback(unsigned char x, unsigned char y, void* screen)
|
|
|
-{
|
|
|
- ((LaunchpadScreen*)screen)->keyPressed(x, y);
|
|
|
-}
|
|
|
-
|
|
|
-void LaunchpadScreen::keyReleasedCallback(unsigned char x, unsigned char y, void* screen)
|
|
|
-{
|
|
|
- ((LaunchpadScreen*)screen)->keyReleased(x, y);
|
|
|
-}
|
|
|
+} // namespace
|