Răsfoiți Sursa

Launchpad::Launchpad(): select first available launchpad by port name

Fabian Peter Hammerle 11 ani în urmă
părinte
comite
bc5d7b5b74
1 a modificat fișierele cu 33 adăugiri și 2 ștergeri
  1. 33 2
      Launchpad.cpp

+ 33 - 2
Launchpad.cpp

@@ -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)