소스 검색

MidiMessage::parseMessage(): use messageType constants to determine type of midi message

Fabian Peter Hammerle 11 년 전
부모
커밋
417585c3a9
2개의 변경된 파일22개의 추가작업 그리고 7개의 파일을 삭제
  1. 7 7
      MidiMessage.cpp
  2. 15 0
      MidiMessage.h

+ 7 - 7
MidiMessage.cpp

@@ -20,12 +20,12 @@ MidiMessage* MidiMessage::parseMessage(std::vector<unsigned char> &messageBytes)
 
 		switch(messageType)
 		{
-			case 0x8:
-			case 0x9:
+			case NoteOnMessage::messageType:
+			case NoteOffMessage::messageType:
 			{
 				unsigned char pitch = messageBytes[1];
 				unsigned char velocity = messageBytes[2];
-				if(messageType == 0x8 || velocity == 0)
+				if(messageType == NoteOffMessage::messageType || velocity == 0)
 				{
 					return new NoteOffMessage(channel, pitch, velocity);
 				}
@@ -34,11 +34,11 @@ MidiMessage* MidiMessage::parseMessage(std::vector<unsigned char> &messageBytes)
 					return new NoteOnMessage(channel, pitch, velocity);
 				}
 			}
-			case 0xB:
+			case ControlChangeMessage::messageType:
 				return new ControlChangeMessage(channel, messageBytes[1], messageBytes[2]);
-			case 0xC:
+			case ProgramChangeMessage::messageType:
 				return new ProgramChangeMessage(channel, messageBytes[1]);
-			case 0xE:
+			case PitchBendChangeMessage::messageType:
 				// messageBytes[1] are the least significant 7 bits. 
 				// messageBytes[2] are the most significant 7 bits.
 				return new PitchBendChangeMessage(
@@ -95,7 +95,7 @@ std::vector<unsigned char> PitchBendChangeMessage::getBytes() const
 	bytes[0] = messageType << 4 | channel;
 	// bytes[1] are the seven least significant bits. 
 	// bytes[2] are the seven most significant bits.
-	bytes[1] = value & (1 << 7 - 1);
+	bytes[1] = value & ((1 << 7) - 1);
 	bytes[2] = value >> 7;
 	return bytes;
 }

+ 15 - 0
MidiMessage.h

@@ -41,6 +41,9 @@ public:
 
 class NoteOnMessage : public NoteMessage
 {
+	friend class MidiMessage;
+
+protected:
 	static const unsigned char messageType = 0x9;
 
 public:
@@ -55,6 +58,9 @@ public:
 
 class NoteOffMessage : public NoteMessage
 {
+	friend class MidiMessage;
+
+protected:
 	static const unsigned char messageType = 0x8;
 
 public:
@@ -69,6 +75,9 @@ public:
 
 class ControlChangeMessage : public ChannelMessage
 {
+	friend class MidiMessage;
+
+protected:
 	static const unsigned char messageType = 0xB;
 
 public:
@@ -88,6 +97,9 @@ public:
 
 class ProgramChangeMessage : public ChannelMessage
 {
+	friend class MidiMessage;
+
+protected:
 	static const unsigned char messageType = 0xC;
 
 public:
@@ -105,6 +117,9 @@ public:
 
 class PitchBendChangeMessage : public ChannelMessage
 {
+	friend class MidiMessage;
+
+protected:
 	static const unsigned char messageType = 0xE;
 
 public: