AAX SDK 2.6.1
Avid Audio Extensions Development Kit
Loading...
Searching...
No Matches
AAX_MIDIUtilities.h
Go to the documentation of this file.
1/*================================================================================================*/
2/*
3 * Copyright 2015, 2023 Avid Technology, Inc.
4 * All rights reserved.
5 *
6 * CONFIDENTIAL: this document contains confidential information of Avid. Do
7 * not disclose to any third party. Use of the information contained in this
8 * document is subject to an Avid SDK license.
9 */
10
17/*================================================================================================*/
19#ifndef AAX_MIDIUtilities_h
20#define AAX_MIDIUtilities_h
22
23// AAX Includes
24#include "AAX.h"
25
26namespace AAX
27{
28 //
29 // Some MIDI defines
30 //
31
34 {
45 };
46
49 {
62 };
63
66 {
75 };
76
79 {
82 };
83
84
85 //
86 // Basic MIDI utility functions
87 //
88
90 inline bool IsNoteOn(const AAX_CMidiPacket* inPacket)
91 {
92 if (!inPacket) { return false; }
93 const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
94 const uint8_t data2 = inPacket->mData[2];
95 return ((eStatusNibble_NoteOn == sn) &&
96 (0x00 != data2));
97 }
98
100 inline bool IsNoteOff(const AAX_CMidiPacket* inPacket)
101 {
102 if (!inPacket) { return false; }
103 const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
104 const uint8_t data2 = inPacket->mData[2];
105 return ((eStatusNibble_NoteOff == sn) || ((eStatusNibble_NoteOn == sn) && (0x00 == data2)));
106 }
107
109 inline bool IsAllNotesOff(const AAX_CMidiPacket* inPacket)
110 {
111 if (!inPacket) { return false; }
112 const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
113 const uint8_t data1 = inPacket->mData[1];
114 const uint8_t data2 = inPacket->mData[2];
116 {
117 if (eChannelModeData_PolyOff == data1)
118 {
119 return true;
120 }
121 else if ((eChannelModeData_AllSoundOff == data1) ||
122 (eChannelModeData_AllNotesOff == data1) ||
123 (eChannelModeData_OmniOff == data1) ||
124 (eChannelModeData_OmniOn == data1) ||
125 (eChannelModeData_PolyOn == data1))
126 {
127 return (0x00 == data2);
128 }
129 }
130
131 return false;
132 }
133
135 inline bool IsAccentedClick(const AAX_CMidiPacket* inPacket)
136 {
137 return ((inPacket) &&
138 (eStatusNibble_NoteOn == (inPacket->mData[0] & 0xF0)) &&
139 (0x00 == (inPacket->mData[0] & 0x0F)) &&
140 (eSpecialData_AccentedClick == inPacket->mData[1]));
141 }
142
144 inline bool IsUnaccentedClick(const AAX_CMidiPacket* inPacket)
145 {
146 return ((inPacket) &&
147 (eStatusNibble_NoteOn == (inPacket->mData[0] & 0xF0)) &&
148 (0x00 == (inPacket->mData[0] & 0x0F)) &&
149 (eSpecialData_UnaccentedClick == inPacket->mData[1]));
150 }
151
153 inline bool IsClick(const AAX_CMidiPacket* inPacket)
154 {
155 return (IsAccentedClick(inPacket) || IsUnaccentedClick(inPacket));
156 }
157} // namespace AAX
158
160#endif // AAX_MIDIUtilities_h
Various utility definitions for AAX.
Definition: AAX_EnvironmentUtilities.h:59
EStatusByte
Values for the status byte in a MIDI packet.
Definition: AAX_MIDIUtilities.h:49
@ eStatusByte_MTCQuarterFrame
Definition: AAX_MIDIUtilities.h:51
@ eStatusByte_Continue
Definition: AAX_MIDIUtilities.h:58
@ eStatusByte_TuneRequest
Definition: AAX_MIDIUtilities.h:54
@ eStatusByte_ActiveSensing
Definition: AAX_MIDIUtilities.h:60
@ eStatusByte_SongSelect
Definition: AAX_MIDIUtilities.h:53
@ eStatusByte_Stop
Definition: AAX_MIDIUtilities.h:59
@ eStatusByte_SongPosition
Definition: AAX_MIDIUtilities.h:52
@ eStatusByte_TimingClock
Definition: AAX_MIDIUtilities.h:56
@ eStatusByte_Reset
Definition: AAX_MIDIUtilities.h:61
@ eStatusByte_SysExEnd
Definition: AAX_MIDIUtilities.h:55
@ eStatusByte_Start
Definition: AAX_MIDIUtilities.h:57
@ eStatusByte_SysExBegin
Definition: AAX_MIDIUtilities.h:50
EStatusNibble
Values for the status nibble in a MIDI packet.
Definition: AAX_MIDIUtilities.h:34
@ eStatusNibble_SystemCommon
Definition: AAX_MIDIUtilities.h:43
@ eStatusNibble_ChannelPressure
Definition: AAX_MIDIUtilities.h:41
@ eStatusNibble_PitchBend
Definition: AAX_MIDIUtilities.h:42
@ eStatusNibble_NoteOff
Definition: AAX_MIDIUtilities.h:35
@ eStatusNibble_ControlChange
Definition: AAX_MIDIUtilities.h:38
@ eStatusNibble_SystemRealTime
Definition: AAX_MIDIUtilities.h:44
@ eStatusNibble_NoteOn
Definition: AAX_MIDIUtilities.h:36
@ eStatusNibble_KeyPressure
Definition: AAX_MIDIUtilities.h:37
@ eStatusNibble_ChannelMode
Definition: AAX_MIDIUtilities.h:39
@ eStatusNibble_ProgramChange
Definition: AAX_MIDIUtilities.h:40
bool IsNoteOn(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a Note On message.
Definition: AAX_MIDIUtilities.h:90
bool IsUnaccentedClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools unaccented click message.
Definition: AAX_MIDIUtilities.h:144
bool IsAllNotesOff(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is an All Sound Off or All Notes Off message.
Definition: AAX_MIDIUtilities.h:109
EChannelModeData
Values for the first data byte in a Channel Mode Message MIDI packet.
Definition: AAX_MIDIUtilities.h:66
@ eChannelModeData_OmniOn
Definition: AAX_MIDIUtilities.h:72
@ eChannelModeData_ResetControllers
Definition: AAX_MIDIUtilities.h:68
@ eChannelModeData_OmniOff
Definition: AAX_MIDIUtilities.h:71
@ eChannelModeData_AllSoundOff
Definition: AAX_MIDIUtilities.h:67
@ eChannelModeData_PolyOff
Definition: AAX_MIDIUtilities.h:73
@ eChannelModeData_PolyOn
Definition: AAX_MIDIUtilities.h:74
@ eChannelModeData_LocalControl
Definition: AAX_MIDIUtilities.h:69
@ eChannelModeData_AllNotesOff
Definition: AAX_MIDIUtilities.h:70
ESpecialData
Special message data for the first data byte in a message.
Definition: AAX_MIDIUtilities.h:79
@ eSpecialData_UnaccentedClick
For use when the high status nibble is eStatusNibble_NoteOn and the low status nibble is zero.
Definition: AAX_MIDIUtilities.h:81
@ eSpecialData_AccentedClick
For use when the high status nibble is eStatusNibble_NoteOn and the low status nibble is zero.
Definition: AAX_MIDIUtilities.h:80
bool IsClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools click message.
Definition: AAX_MIDIUtilities.h:153
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:100
bool IsAccentedClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools accented click message.
Definition: AAX_MIDIUtilities.h:135
Packet structure for MIDI data.
Definition: AAX.h:636
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:639