MidiMessage.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include <cstdint>
  3. class MidiMessage
  4. {
  5. public:
  6. static MidiMessage* parseMessage(std::vector<unsigned char> &messageBytes);
  7. virtual void print(std::ostream& stream) const = 0;
  8. };
  9. std::ostream& operator<<(std::ostream& stream, const MidiMessage& message);
  10. class ChannelMessage : public MidiMessage
  11. {
  12. public:
  13. unsigned char channel;
  14. ChannelMessage(unsigned char channel)
  15. : channel(channel)
  16. {
  17. }
  18. };
  19. class NoteMessage : public ChannelMessage
  20. {
  21. public:
  22. unsigned char pitch;
  23. unsigned char velocity;
  24. NoteMessage(unsigned char channel, unsigned char pitch, unsigned char velocity)
  25. : ChannelMessage(channel), pitch(pitch), velocity(velocity)
  26. {
  27. }
  28. };
  29. class NoteOnMessage : public NoteMessage
  30. {
  31. public:
  32. NoteOnMessage(unsigned char channel, unsigned char pitch, unsigned char velocity)
  33. : NoteMessage(channel, pitch, velocity)
  34. {
  35. }
  36. virtual void print(std::ostream& stream) const;
  37. };
  38. class NoteOffMessage : public NoteMessage
  39. {
  40. public:
  41. NoteOffMessage(unsigned char channel, unsigned char pitch, unsigned char velocity)
  42. : NoteMessage(channel, pitch, velocity)
  43. {
  44. }
  45. virtual void print(std::ostream& stream) const;
  46. };
  47. class ControlChangeMessage : public ChannelMessage
  48. {
  49. public:
  50. unsigned char control;
  51. unsigned char value;
  52. ControlChangeMessage(unsigned char channel, unsigned char control, unsigned char value)
  53. : ChannelMessage(channel), control(control), value(value)
  54. {
  55. }
  56. virtual void print(std::ostream& stream) const;
  57. };
  58. class ProgramChangeMessage : public ChannelMessage
  59. {
  60. public:
  61. unsigned char program;
  62. ProgramChangeMessage(unsigned char channel, unsigned char program)
  63. : ChannelMessage(channel), program(program)
  64. {
  65. }
  66. virtual void print(std::ostream& stream) const;
  67. };
  68. class PitchBendChangeMessage : public ChannelMessage
  69. {
  70. public:
  71. uint16_t value;
  72. PitchBendChangeMessage(unsigned char channel, uint16_t value)
  73. : ChannelMessage(channel), value(value)
  74. {
  75. }
  76. virtual void print(std::ostream& stream) const;
  77. };