message.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "message.h"
  2. /** Returns the data within the MidiEvent as a NoteOffEvent struct */
  3. NoteOffEvent AsNoteOff(MidiEvent* event) {
  4. NoteOffEvent m;
  5. m.channel = event->channel;
  6. m.note = event->data[0];
  7. m.velocity = event->data[1];
  8. return m;
  9. }
  10. /** Returns the data within the MidiEvent as a NoteOnEvent struct */
  11. NoteOnEvent AsNoteOn(MidiEvent* event) {
  12. NoteOnEvent m;
  13. m.channel = event->channel;
  14. m.note = event->data[0];
  15. m.velocity = event->data[1];
  16. return m;
  17. }
  18. /** Returns the data within the MidiEvent as a PolyphonicKeyPressureEvent struct */
  19. PolyphonicKeyPressureEvent AsPolyphonicKeyPressure(MidiEvent* event) {
  20. PolyphonicKeyPressureEvent m;
  21. m.channel = event->channel;
  22. m.note = event->data[0];
  23. m.pressure = event->data[1];
  24. return m;
  25. }
  26. /** Returns the data within the MidiEvent as a ControlChangeEvent struct.*/
  27. ControlChangeEvent AsControlChange(MidiEvent* event) {
  28. ControlChangeEvent m;
  29. m.channel = event->channel;
  30. m.control_number = event->data[0];
  31. m.value = event->data[1];
  32. return m;
  33. }
  34. /** Returns the data within the MidiEvent as a ProgramChangeEvent struct.*/
  35. ProgramChangeEvent AsProgramChange(MidiEvent* event) {
  36. ProgramChangeEvent m;
  37. m.channel = event->channel;
  38. m.program = event->data[0];
  39. return m;
  40. }
  41. /** Returns the data within the MidiEvent as a ProgramChangeEvent struct.*/
  42. ChannelPressureEvent AsChannelPressure(MidiEvent* event) {
  43. ChannelPressureEvent m;
  44. m.channel = event->channel;
  45. m.pressure = event->data[0];
  46. return m;
  47. }
  48. /** Returns the data within the MidiEvent as a PitchBendEvent struct.*/
  49. PitchBendEvent AsPitchBend(MidiEvent* event) {
  50. PitchBendEvent m;
  51. m.channel = event->channel;
  52. m.value = ((uint16_t)(event->data[1]) << 7) + (event->data[0] - 8192);
  53. return m;
  54. }
  55. SystemExclusiveEvent AsSystemExclusive(MidiEvent* event) {
  56. SystemExclusiveEvent m;
  57. m.length = event->sysex_message_len;
  58. for(int i = 0; i < SYSEX_BUFFER_LEN; i++) {
  59. m.data[i] = 0;
  60. if(i < m.length) {
  61. m.data[i] = event->sysex_data[i];
  62. }
  63. }
  64. return m;
  65. }
  66. MTCQuarterFrameEvent AsMTCQuarterFrame(MidiEvent* event) {
  67. MTCQuarterFrameEvent m;
  68. m.message_type = (event->data[0] & 0x70) >> 4;
  69. m.value = (event->data[0]) & 0x0f;
  70. return m;
  71. }
  72. SongPositionPointerEvent AsSongPositionPointer(MidiEvent* event) {
  73. SongPositionPointerEvent m;
  74. m.position = ((uint16_t)(event->data[1]) << 7) | (event->data[0]);
  75. return m;
  76. }
  77. SongSelectEvent AsSongSelect(MidiEvent* event) {
  78. SongSelectEvent m;
  79. m.song = event->data[0];
  80. return m;
  81. }
  82. AllSoundOffEvent AsAllSoundOff(MidiEvent* event) {
  83. AllSoundOffEvent m;
  84. m.channel = event->channel;
  85. return m;
  86. }
  87. ResetAllControllersEvent AsResetAllControllers(MidiEvent* event) {
  88. ResetAllControllersEvent m;
  89. m.channel = event->channel;
  90. m.value = event->data[1];
  91. return m;
  92. }
  93. LocalControlEvent AsLocalControl(MidiEvent* event) {
  94. LocalControlEvent m;
  95. m.channel = event->channel;
  96. m.local_control_off = (event->data[1] == 0);
  97. m.local_control_on = (event->data[1] == 127);
  98. return m;
  99. }
  100. AllNotesOffEvent AsAllNotesOff(MidiEvent* event) {
  101. AllNotesOffEvent m;
  102. m.channel = event->channel;
  103. return m;
  104. }
  105. OmniModeOffEvent AsOmniModeOff(MidiEvent* event) {
  106. OmniModeOffEvent m;
  107. m.channel = event->channel;
  108. return m;
  109. }
  110. OmniModeOnEvent AsOmniModeOn(MidiEvent* event) {
  111. OmniModeOnEvent m;
  112. m.channel = event->channel;
  113. return m;
  114. }
  115. MonoModeOnEvent AsMonoModeOn(MidiEvent* event) {
  116. MonoModeOnEvent m;
  117. m.channel = event->channel;
  118. m.num_channels = event->data[1];
  119. return m;
  120. }
  121. PolyModeOnEvent AsPolyModeOn(MidiEvent* event) {
  122. PolyModeOnEvent m;
  123. m.channel = event->channel;
  124. return m;
  125. }