Ver código fonte

launchpad class working again

Fabian Peter Hammerle 10 anos atrás
pai
commit
096a538335
8 arquivos alterados com 67 adições e 186 exclusões
  1. 1 0
      .gitignore
  2. 1 1
      CMakeLists.txt
  3. 7 139
      Launchpad.cpp
  4. 7 39
      Launchpad.h
  5. 25 0
      LaunchpadColor.cpp
  6. 17 0
      LaunchpadColor.h
  7. 3 0
      tests/CMakeLists.txt
  8. 6 7
      tests/launchpad.cpp

+ 1 - 0
.gitignore

@@ -1 +1,2 @@
 /lib
+.*.swp

+ 1 - 1
CMakeLists.txt

@@ -7,5 +7,5 @@ include_directories("${CMAKE_SOURCE_DIR}/include")
 add_definitions(-pthread)
 add_definitions(-std=c++11)
 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
-add_library(midi Input.cpp Output.cpp Message.cpp)
+add_library(midi Input.cpp Output.cpp Message.cpp Launchpad.cpp LaunchpadColor.cpp)
 # target_link_libraries(midi /usr/local/lib/librtmidi.so.2.1.0) 

+ 7 - 139
Launchpad.cpp

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

+ 7 - 39
Launchpad.h

@@ -1,18 +1,10 @@
 #pragma once
-#include "Midi.h"
+#include "Input.h"
+#include "Output.h"
+#include "LaunchpadColor.h"
 #include <utility>
 
-class LaunchpadColor
-{
-public:
-	unsigned char red, green;
-
-	LaunchpadColor();
-	LaunchpadColor(unsigned char r, unsigned char g);
-
-	bool operator==(const LaunchpadColor& color) const;
-	bool operator!=(const LaunchpadColor& color) const;
-};
+namespace midi {
 
 class Launchpad
 {
@@ -27,8 +19,8 @@ private:
 	bool colorSet[width][height];
 
 protected:
-	MidiIn midiin;
-	MidiOut midiout;
+	Input midiin;
+	Output midiout;
 
 public:
 	KeyEventCallback keyPressedCallback;
@@ -47,31 +39,7 @@ protected:
 	void keyReleased(unsigned char x, unsigned char y);
 
 private:
-	static void midiMessageCallback(double timeStamp, MidiMessage &message, void *launchpad);
+	static void midiMessageCallback(double timeStamp, Message &message, void *launchpad);
 };
 
-class LaunchpadScreen
-{
-    LaunchpadColor colors[Launchpad::width][Launchpad::height];
-    Launchpad* launchpad;
-    bool active;
-
-public:
-    LaunchpadScreen();
-    virtual void enable();
-    virtual void disable();
-    bool enabled() const;
-    void setLaunchpad(Launchpad& launchpad);
-
-protected:
-	virtual void keyPressed(unsigned char x, unsigned char y);
-	virtual void keyReleased(unsigned char x, unsigned char y);
-	const LaunchpadColor& getColor(unsigned char x, unsigned char y) const;
-	void setColor(unsigned char x, unsigned char y, const LaunchpadColor& color);
-	void setColorAll(const LaunchpadColor& color);
-    void sync();
-
-private:
-    static void keyPressedCallback(unsigned char x, unsigned char y, void* screen);
-    static void keyReleasedCallback(unsigned char x, unsigned char y, void* screen);
 };

+ 25 - 0
LaunchpadColor.cpp

@@ -0,0 +1,25 @@
+#include "LaunchpadColor.h"
+
+namespace midi {
+
+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

+ 17 - 0
LaunchpadColor.h

@@ -0,0 +1,17 @@
+#pragma once
+
+namespace midi {
+
+class LaunchpadColor
+{
+public:
+	unsigned char red, green;
+
+	LaunchpadColor();
+	LaunchpadColor(unsigned char r, unsigned char g);
+
+	bool operator==(const LaunchpadColor& color) const;
+	bool operator!=(const LaunchpadColor& color) const;
+};
+
+} // namespace

+ 3 - 0
tests/CMakeLists.txt

@@ -7,3 +7,6 @@ link_directories("${CMAKE_SOURCE_DIR}/../lib")
 
 add_executable(midiout midiout.cpp)
 target_link_libraries(midiout midi /usr/local/lib/librtmidi.so.2) 
+
+add_executable(launchpad launchpad.cpp)
+target_link_libraries(launchpad midi /usr/local/lib/librtmidi.so.2) 

+ 6 - 7
tests/launchpad.cpp

@@ -1,9 +1,10 @@
 #include <iostream>
 #include <cstdlib>
-#include "RtMidi.h"
-#include "MidiMessage.h"
 #include "Launchpad.h"
 
+using namespace std;
+using namespace midi;
+
 // Platform-dependent sleep routines.
 #if defined(__WINDOWS_MM__)
   #include <windows.h>
@@ -28,10 +29,8 @@ int main()
 
     l.setColorAll(LaunchpadColor(0, 1));
 
-    while(true) 
-    {
-        SLEEP(1);
-    }
-
+    cout << "Press a button to stop... " << endl;
+    cin.ignore();
+    
     return 0;
 }