AAX SDK  2.4.1
Avid Audio Extensions Development Kit
AAX_MIDIUtilities.h
Go to the documentation of this file.
1 /*================================================================================================*/
2 /*
3  * Copyright 2015 by Avid Technology, Inc.
4  * All rights reserved.
5  *
6  * CONFIDENTIAL: This document contains confidential information. Do not
7  * read or examine this document unless you are an Avid Technology employee
8  * or have signed a non-disclosure agreement with Avid Technology which protects
9  * the confidentiality of this document. DO NOT DISCLOSE ANY INFORMATION
10  * CONTAINED IN THIS DOCUMENT TO ANY THIRD-PARTY WITHOUT THE PRIOR WRITTEN CONSENT
11  * OF Avid Technology, INC.
12  */
13 
20 /*================================================================================================*/
22 #ifndef AAX_MIDIUtilities_h
23 #define AAX_MIDIUtilities_h
25 
26 // AAX Includes
27 #include "AAX.h"
28 
29 namespace AAX
30 {
31  //
32  // Some MIDI defines
33  //
34 
37  {
48  };
49 
52  {
65  };
66 
69  {
78  };
79 
82  {
85  };
86 
87 
88  //
89  // Basic MIDI utility functions
90  //
91 
93  inline bool IsNoteOn(const AAX_CMidiPacket* inPacket)
94  {
95  if (!inPacket) { return false; }
96  const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
97  const uint8_t data2 = inPacket->mData[2];
98  return ((eStatusNibble_NoteOn == sn) &&
99  (0x00 != data2));
100  }
101 
103  inline bool IsNoteOff(const AAX_CMidiPacket* inPacket)
104  {
105  if (!inPacket) { return false; }
106  const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
107  const uint8_t data2 = inPacket->mData[2];
108  return ((eStatusNibble_NoteOff == sn) || ((eStatusNibble_NoteOn == sn) && (0x00 == data2)));
109  }
110 
112  inline bool IsAllNotesOff(const AAX_CMidiPacket* inPacket)
113  {
114  if (!inPacket) { return false; }
115  const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
116  const uint8_t data1 = inPacket->mData[1];
117  const uint8_t data2 = inPacket->mData[2];
118  if (eStatusNibble_ChannelMode == sn)
119  {
120  if (eChannelModeData_PolyOff == data1)
121  {
122  return true;
123  }
124  else if ((eChannelModeData_AllSoundOff == data1) ||
125  (eChannelModeData_AllNotesOff == data1) ||
126  (eChannelModeData_OmniOff == data1) ||
127  (eChannelModeData_OmniOn == data1) ||
128  (eChannelModeData_PolyOn == data1))
129  {
130  return (0x00 == data2);
131  }
132  }
133 
134  return false;
135  }
136 
138  inline bool IsAccentedClick(const AAX_CMidiPacket* inPacket)
139  {
140  return ((inPacket) &&
141  (eStatusNibble_NoteOn == (inPacket->mData[0] & 0xF0)) &&
142  (0x00 == (inPacket->mData[0] & 0x0F)) &&
143  (eSpecialData_AccentedClick == inPacket->mData[1]));
144  }
145 
147  inline bool IsUnaccentedClick(const AAX_CMidiPacket* inPacket)
148  {
149  return ((inPacket) &&
150  (eStatusNibble_NoteOn == (inPacket->mData[0] & 0xF0)) &&
151  (0x00 == (inPacket->mData[0] & 0x0F)) &&
152  (eSpecialData_UnaccentedClick == inPacket->mData[1]));
153  }
154 
156  inline bool IsClick(const AAX_CMidiPacket* inPacket)
157  {
158  return (IsAccentedClick(inPacket) || IsUnaccentedClick(inPacket));
159  }
160 } // namespace AAX
161 
163 #endif // AAX_MIDIUtilities_h
Various utility definitions for AAX.
Definition: AAX_Exception.h:42
EStatusByte
Values for the status byte in a MIDI packet.
Definition: AAX_MIDIUtilities.h:52
@ eStatusByte_MTCQuarterFrame
Definition: AAX_MIDIUtilities.h:54
@ eStatusByte_Continue
Definition: AAX_MIDIUtilities.h:61
@ eStatusByte_TuneRequest
Definition: AAX_MIDIUtilities.h:57
@ eStatusByte_ActiveSensing
Definition: AAX_MIDIUtilities.h:63
@ eStatusByte_SongSelect
Definition: AAX_MIDIUtilities.h:56
@ eStatusByte_Stop
Definition: AAX_MIDIUtilities.h:62
@ eStatusByte_SongPosition
Definition: AAX_MIDIUtilities.h:55
@ eStatusByte_TimingClock
Definition: AAX_MIDIUtilities.h:59
@ eStatusByte_Reset
Definition: AAX_MIDIUtilities.h:64
@ eStatusByte_SysExEnd
Definition: AAX_MIDIUtilities.h:58
@ eStatusByte_Start
Definition: AAX_MIDIUtilities.h:60
@ eStatusByte_SysExBegin
Definition: AAX_MIDIUtilities.h:53
EStatusNibble
Values for the status nibble in a MIDI packet.
Definition: AAX_MIDIUtilities.h:37
@ eStatusNibble_SystemCommon
Definition: AAX_MIDIUtilities.h:46
@ eStatusNibble_ChannelPressure
Definition: AAX_MIDIUtilities.h:44
@ eStatusNibble_PitchBend
Definition: AAX_MIDIUtilities.h:45
@ eStatusNibble_NoteOff
Definition: AAX_MIDIUtilities.h:38
@ eStatusNibble_ControlChange
Definition: AAX_MIDIUtilities.h:41
@ eStatusNibble_SystemRealTime
Definition: AAX_MIDIUtilities.h:47
@ eStatusNibble_NoteOn
Definition: AAX_MIDIUtilities.h:39
@ eStatusNibble_KeyPressure
Definition: AAX_MIDIUtilities.h:40
@ eStatusNibble_ChannelMode
Definition: AAX_MIDIUtilities.h:42
@ eStatusNibble_ProgramChange
Definition: AAX_MIDIUtilities.h:43
bool IsNoteOn(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a Note On message.
Definition: AAX_MIDIUtilities.h:93
bool IsUnaccentedClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools unaccented click message.
Definition: AAX_MIDIUtilities.h:147
bool IsAllNotesOff(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is an All Sound Off or All Notes Off message.
Definition: AAX_MIDIUtilities.h:112
EChannelModeData
Values for the first data byte in a Channel Mode Message MIDI packet.
Definition: AAX_MIDIUtilities.h:69
@ eChannelModeData_OmniOn
Definition: AAX_MIDIUtilities.h:75
@ eChannelModeData_ResetControllers
Definition: AAX_MIDIUtilities.h:71
@ eChannelModeData_OmniOff
Definition: AAX_MIDIUtilities.h:74
@ eChannelModeData_AllSoundOff
Definition: AAX_MIDIUtilities.h:70
@ eChannelModeData_PolyOff
Definition: AAX_MIDIUtilities.h:76
@ eChannelModeData_PolyOn
Definition: AAX_MIDIUtilities.h:77
@ eChannelModeData_LocalControl
Definition: AAX_MIDIUtilities.h:72
@ eChannelModeData_AllNotesOff
Definition: AAX_MIDIUtilities.h:73
ESpecialData
Special message data for the first data byte in a message.
Definition: AAX_MIDIUtilities.h:82
@ eSpecialData_UnaccentedClick
For use when the high status nibble is eStatusNibble_NoteOn and the low status nibble is zero.
Definition: AAX_MIDIUtilities.h:84
@ eSpecialData_AccentedClick
For use when the high status nibble is eStatusNibble_NoteOn and the low status nibble is zero.
Definition: AAX_MIDIUtilities.h:83
bool IsClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools click message.
Definition: AAX_MIDIUtilities.h:156
bool IsNoteOff(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a Note Off message, or a Note On message with velocity zero.
Definition: AAX_MIDIUtilities.h:103
bool IsAccentedClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools accented click message.
Definition: AAX_MIDIUtilities.h:138
Packet structure for MIDI data.
Definition: AAX.h:637
unsigned char mData[4]
The MIDI message itself. Each array element is one byte of the message, with the 0th element being th...
Definition: AAX.h:640