|
@@ -1,6 +1,7 @@
|
|
|
#include "Launchpad.h"
|
|
|
#include "RtMidi.h"
|
|
|
#include "MidiMessage.h"
|
|
|
+#include <string>
|
|
|
|
|
|
LaunchpadColor::LaunchpadColor()
|
|
|
: red(0), green(0)
|
|
@@ -20,10 +21,40 @@ bool LaunchpadColor::operator==(const LaunchpadColor& color) const
|
|
|
Launchpad::Launchpad()
|
|
|
: midiin(), midiout(), keyPressedCallback(0), keyReleasedCallback(0)
|
|
|
{
|
|
|
+ // define callback before opening port to keep the message queue empty.
|
|
|
midiin.setCallback(midiMessageCallback, (void*) this);
|
|
|
|
|
|
- midiout.openPort(1);
|
|
|
- midiin.openPort(0);
|
|
|
+ for(int i=0; i<midiout.getPortCount(); i++)
|
|
|
+ {
|
|
|
+ if(midiout.getPortName(i).find("Launchpad") != std::string::npos)
|
|
|
+ {
|
|
|
+ midiout.openPort(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!midiout.isPortOpen())
|
|
|
+ {
|
|
|
+ throw RtMidiError(
|
|
|
+ "no launchpad for midi output found",
|
|
|
+ RtMidiError::NO_DEVICES_FOUND
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ for(int i=0; i<midiin.getPortCount(); i++)
|
|
|
+ {
|
|
|
+ if(midiin.getPortName(i).find("Launchpad") != std::string::npos)
|
|
|
+ {
|
|
|
+ midiin.openPort(i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!midiin.isPortOpen())
|
|
|
+ {
|
|
|
+ throw RtMidiError(
|
|
|
+ "no launchpad for midi input found",
|
|
|
+ RtMidiError::NO_DEVICES_FOUND
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void Launchpad::midiMessageCallback(double timeStamp, MidiMessage &message, void *userData)
|