AAX SDK 2.8.0
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-2024 Avid Technology, Inc.
4 * All rights reserved.
5 *
6 * This file is part of the Avid AAX SDK.
7 *
8 * The AAX SDK is subject to commercial or open-source licensing.
9 *
10 * By using the AAX SDK, you agree to the terms of both the Avid AAX SDK License
11 * Agreement and Avid Privacy Policy.
12 *
13 * AAX SDK License: https://developer.avid.com/aax
14 * Privacy Policy: https://www.avid.com/legal/privacy-policy-statement
15 *
16 * Or: You may also use this code under the terms of the GPL v3 (see
17 * www.gnu.org/licenses).
18 *
19 * THE AAX SDK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 * EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 * DISCLAIMED.
22 */
23
30/*================================================================================================*/
32#ifndef AAX_MIDIUtilities_h
33#define AAX_MIDIUtilities_h
35
36// AAX Includes
37#include "AAX.h"
38
39namespace AAX
40{
41 //
42 // Some MIDI defines
43 //
44
47 {
58 };
59
62 {
75 };
76
79 {
88 };
89
92 {
95 };
96
97
98 //
99 // Basic MIDI utility functions
100 //
101
103 inline bool IsNoteOn(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_NoteOn == sn) &&
109 (0x00 != data2));
110 }
111
113 inline bool IsNoteOff(const AAX_CMidiPacket* inPacket)
114 {
115 if (!inPacket) { return false; }
116 const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
117 const uint8_t data2 = inPacket->mData[2];
118 return ((eStatusNibble_NoteOff == sn) || ((eStatusNibble_NoteOn == sn) && (0x00 == data2)));
119 }
120
122 inline bool IsAllNotesOff(const AAX_CMidiPacket* inPacket)
123 {
124 if (!inPacket) { return false; }
125 const uint8_t sn = (inPacket->mData[0] & 0xF0); // status nibble
126 const uint8_t data1 = inPacket->mData[1];
127 const uint8_t data2 = inPacket->mData[2];
129 {
130 if (eChannelModeData_PolyOff == data1)
131 {
132 return true;
133 }
134 else if ((eChannelModeData_AllSoundOff == data1) ||
135 (eChannelModeData_AllNotesOff == data1) ||
136 (eChannelModeData_OmniOff == data1) ||
137 (eChannelModeData_OmniOn == data1) ||
138 (eChannelModeData_PolyOn == data1))
139 {
140 return (0x00 == data2);
141 }
142 }
143
144 return false;
145 }
146
148 inline bool IsAccentedClick(const AAX_CMidiPacket* inPacket)
149 {
150 return ((inPacket) &&
151 (eStatusNibble_NoteOn == (inPacket->mData[0] & 0xF0)) &&
152 (0x00 == (inPacket->mData[0] & 0x0F)) &&
153 (eSpecialData_AccentedClick == inPacket->mData[1]));
154 }
155
157 inline bool IsUnaccentedClick(const AAX_CMidiPacket* inPacket)
158 {
159 return ((inPacket) &&
160 (eStatusNibble_NoteOn == (inPacket->mData[0] & 0xF0)) &&
161 (0x00 == (inPacket->mData[0] & 0x0F)) &&
162 (eSpecialData_UnaccentedClick == inPacket->mData[1]));
163 }
164
166 inline bool IsClick(const AAX_CMidiPacket* inPacket)
167 {
168 return (IsAccentedClick(inPacket) || IsUnaccentedClick(inPacket));
169 }
170} // namespace AAX
171
173#endif // AAX_MIDIUtilities_h
Various utility definitions for AAX.
Definition: AAX_EnvironmentUtilities.h:72
EStatusByte
Values for the status byte in a MIDI packet.
Definition: AAX_MIDIUtilities.h:62
@ eStatusByte_MTCQuarterFrame
Definition: AAX_MIDIUtilities.h:64
@ eStatusByte_Continue
Definition: AAX_MIDIUtilities.h:71
@ eStatusByte_TuneRequest
Definition: AAX_MIDIUtilities.h:67
@ eStatusByte_ActiveSensing
Definition: AAX_MIDIUtilities.h:73
@ eStatusByte_SongSelect
Definition: AAX_MIDIUtilities.h:66
@ eStatusByte_Stop
Definition: AAX_MIDIUtilities.h:72
@ eStatusByte_SongPosition
Definition: AAX_MIDIUtilities.h:65
@ eStatusByte_TimingClock
Definition: AAX_MIDIUtilities.h:69
@ eStatusByte_Reset
Definition: AAX_MIDIUtilities.h:74
@ eStatusByte_SysExEnd
Definition: AAX_MIDIUtilities.h:68
@ eStatusByte_Start
Definition: AAX_MIDIUtilities.h:70
@ eStatusByte_SysExBegin
Definition: AAX_MIDIUtilities.h:63
EStatusNibble
Values for the status nibble in a MIDI packet.
Definition: AAX_MIDIUtilities.h:47
@ eStatusNibble_SystemCommon
Definition: AAX_MIDIUtilities.h:56
@ eStatusNibble_ChannelPressure
Definition: AAX_MIDIUtilities.h:54
@ eStatusNibble_PitchBend
Definition: AAX_MIDIUtilities.h:55
@ eStatusNibble_NoteOff
Definition: AAX_MIDIUtilities.h:48
@ eStatusNibble_ControlChange
Definition: AAX_MIDIUtilities.h:51
@ eStatusNibble_SystemRealTime
Definition: AAX_MIDIUtilities.h:57
@ eStatusNibble_NoteOn
Definition: AAX_MIDIUtilities.h:49
@ eStatusNibble_KeyPressure
Definition: AAX_MIDIUtilities.h:50
@ eStatusNibble_ChannelMode
Definition: AAX_MIDIUtilities.h:52
@ eStatusNibble_ProgramChange
Definition: AAX_MIDIUtilities.h:53
bool IsNoteOn(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a Note On message.
Definition: AAX_MIDIUtilities.h:103
bool IsUnaccentedClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools unaccented click message.
Definition: AAX_MIDIUtilities.h:157
bool IsAllNotesOff(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is an All Sound Off or All Notes Off message.
Definition: AAX_MIDIUtilities.h:122
EChannelModeData
Values for the first data byte in a Channel Mode Message MIDI packet.
Definition: AAX_MIDIUtilities.h:79
@ eChannelModeData_OmniOn
Definition: AAX_MIDIUtilities.h:85
@ eChannelModeData_ResetControllers
Definition: AAX_MIDIUtilities.h:81
@ eChannelModeData_OmniOff
Definition: AAX_MIDIUtilities.h:84
@ eChannelModeData_AllSoundOff
Definition: AAX_MIDIUtilities.h:80
@ eChannelModeData_PolyOff
Definition: AAX_MIDIUtilities.h:86
@ eChannelModeData_PolyOn
Definition: AAX_MIDIUtilities.h:87
@ eChannelModeData_LocalControl
Definition: AAX_MIDIUtilities.h:82
@ eChannelModeData_AllNotesOff
Definition: AAX_MIDIUtilities.h:83
ESpecialData
Special message data for the first data byte in a message.
Definition: AAX_MIDIUtilities.h:92
@ eSpecialData_UnaccentedClick
For use when the high status nibble is eStatusNibble_NoteOn and the low status nibble is zero.
Definition: AAX_MIDIUtilities.h:94
@ eSpecialData_AccentedClick
For use when the high status nibble is eStatusNibble_NoteOn and the low status nibble is zero.
Definition: AAX_MIDIUtilities.h:93
bool IsClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools click message.
Definition: AAX_MIDIUtilities.h:166
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:113
bool IsAccentedClick(const AAX_CMidiPacket *inPacket)
Returns true if inPacket is a special Pro Tools accented click message.
Definition: AAX_MIDIUtilities.h:148
Packet structure for MIDI data.
Definition: AAX.h:649
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:652