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