| 
					
				 | 
			
			
				@@ -1,11 +1,13 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #pragma once 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <cstdint> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <vector> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class MidiMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static MidiMessage* parseMessage(std::vector<unsigned char> &messageBytes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	virtual std::vector<unsigned char> getBytes() const = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	virtual void print(std::ostream& stream) const = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,6 +41,8 @@ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class NoteOnMessage : public NoteMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static const unsigned char messageType = 0x9; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	NoteOnMessage(unsigned char channel, unsigned char pitch, unsigned char velocity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		: NoteMessage(channel, pitch, velocity) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,10 +50,13 @@ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	virtual void print(std::ostream& stream) const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	virtual std::vector<unsigned char> getBytes() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class NoteOffMessage : public NoteMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static const unsigned char messageType = 0x8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	NoteOffMessage(unsigned char channel, unsigned char pitch, unsigned char velocity) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		: NoteMessage(channel, pitch, velocity) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -57,10 +64,13 @@ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	virtual void print(std::ostream& stream) const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	virtual std::vector<unsigned char> getBytes() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class ControlChangeMessage : public ChannelMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static const unsigned char messageType = 0xB; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	unsigned char control; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static const unsigned char controlMaximum = (2 << 7) - 1; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,10 +83,13 @@ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	virtual void print(std::ostream& stream) const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	virtual std::vector<unsigned char> getBytes() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class ProgramChangeMessage : public ChannelMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static const unsigned char messageType = 0xC; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	unsigned char program; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static const unsigned char programMaximum = (2 << 7) - 1; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -87,10 +100,13 @@ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	virtual void print(std::ostream& stream) const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	virtual std::vector<unsigned char> getBytes() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class PitchBendChangeMessage : public ChannelMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static const unsigned char messageType = 0xE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 14 bit integer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	uint16_t value; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -102,4 +118,5 @@ public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	virtual void print(std::ostream& stream) const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	virtual std::vector<unsigned char> getBytes() const; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 |