\hypertarget{a00903}{}\doxysection{MIDI}
\label{a00903}\index{MIDI@{MIDI}}
How to route and process MIDI in AAX plug-\/ins. 

\hypertarget{a00903_additionalFeatures_MIDI_Overview}{}\doxysubsection{MIDI Overview}\label{a00903_additionalFeatures_MIDI_Overview}
AAX plugins create MIDI nodes. MIDI nodes define points where the plugin can send or receive MIDI data. The data at these nodes is represented as a sequence of AAX MIDI packet data structures. The AAX host manages connections between these nodes and other points in the system. The host also performs conversion between raw MIDI data and AAX MIDI packets.\hypertarget{a00903_additionalFeatures_MIDI_NodeTypes}{}\doxysubsection{MIDI node types}\label{a00903_additionalFeatures_MIDI_NodeTypes}
There are four kinds of nodes an AAX plug-\/in can create. See \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4}{AAX\+\_\+\+EMIDINode\+Type}} for additional details about these node types\+: \begin{DoxyItemize}
\item \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4ae57de2b04978fe2e75f5bdeb034bda44}{AAX\+\_\+e\+MIDINode\+Type\+\_\+\+Local\+Input}} \item \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4acc1b5f2109c508b20a65b5e0fdcd643f}{AAX\+\_\+e\+MIDINode\+Type\+\_\+\+Local\+Output}} \item \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4a2be91828f8c1dac20ab5dff136fc1fce}{AAX\+\_\+e\+MIDINode\+Type\+\_\+\+Global}} \item \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4ac2ff856aec0724907dfd95b8e3ccbc20}{AAX\+\_\+e\+MIDINode\+Type\+\_\+\+Transport}}\end{DoxyItemize}
\hypertarget{a00903_additionalFeatures_MIDI_AddingMIDI}{}\doxysubsection{Adding MIDI functionality to a plug-\/in}\label{a00903_additionalFeatures_MIDI_AddingMIDI}
Plug-\/in may access MIDI data in its algorithm or data model. If plug-\/in needs MIDI in both places or just in the algorithm, it should add a MIDI node to the algorithm context, i.\+e. call \mbox{\hyperlink{a02214_a6284dda9ccca898e33075de29dad4e39}{AAX\+\_\+\+IComponent\+Descriptor\+::\+Add\+MIDINode()}} with the appropriate node type.


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{comment}{//==============================================================================}}
\DoxyCodeLine{\textcolor{comment}{//\ Algorithm\ context\ definitions}}
\DoxyCodeLine{\textcolor{comment}{//==============================================================================}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{comment}{//\ Context\ structure}}
\DoxyCodeLine{\textcolor{keyword}{struct\ }SMy\_Alg\_Context}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02290}{AAX\_IMIDINode}}\ \ *\ mMIDIInNodeP;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Local\ input\ MIDI\ node\ pointer}}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02290}{AAX\_IMIDINode}}\ \ *\ mMIDINodeOutP;\ \ \ \ \ \ \ \ \textcolor{comment}{//\ Local\ output\ MIDI\ node\ pointer}}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02290}{AAX\_IMIDINode}}\ \ *\ mMIDINodeTransportP;\ \ \textcolor{comment}{//\ Transport\ node\ }}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{enum}\ EDemoMIDI\_Alg\_PortID}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//}}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Add\ the\ MIDI\ node\ as\ a\ physical\ address\ within\ the\ context\ field}}
\DoxyCodeLine{\ \ \ \ ,eAlgPortID\_MIDINodeIn\ \ \ \ \ \ \ \ \ \ =\ \mbox{\hyperlink{a00542_acf807247ecd6e5899dc9dc31644e9a1d}{AAX\_FIELD\_INDEX}}\ (SDemoMIDI\_Alg\_Context,\ mMIDINodeP)}
\DoxyCodeLine{\ \ \ \ ,eAlgPortID\_MIDINodeOut\ \ \ \ \ \ \ \ \ =\ \mbox{\hyperlink{a00542_acf807247ecd6e5899dc9dc31644e9a1d}{AAX\_FIELD\_INDEX}}\ (SDemoMIDI\_Alg\_Context,\ mMIDINodeOutP)}
\DoxyCodeLine{\ \ \ \ ,eAlgPortID\_MIDINodeTransport\ \ \ =\ \mbox{\hyperlink{a00542_acf807247ecd6e5899dc9dc31644e9a1d}{AAX\_FIELD\_INDEX}}\ (SDemoMIDI\_Alg\_Context,\ mMIDINodeTransportP)}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\};}

\end{DoxyCode}



\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{comment}{//\ ***************************************************************************}}
\DoxyCodeLine{\textcolor{comment}{//\ ROUTINE:\ DescribeAlgorithmComponent}}
\DoxyCodeLine{\textcolor{comment}{//\ Algorithm\ component\ description}}
\DoxyCodeLine{\textcolor{comment}{//\ ***************************************************************************}}
\DoxyCodeLine{\textcolor{keyword}{static}\ \textcolor{keywordtype}{void}\ DescribeAlgorithmComponent(\ \mbox{\hyperlink{a02214}{AAX\_IComponentDescriptor}}\ *\ outDesc\ )}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a00542_a4d8f69a697df7f70c3a8e9b8ee130d2f}{AAX\_Result}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ err;}
\DoxyCodeLine{\ \ \ \ }
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Register\ MIDI\ nodes}}
\DoxyCodeLine{\ \ \ \ err\ =\ outDesc-\/>\mbox{\hyperlink{a02214_a6284dda9ccca898e33075de29dad4e39}{AddMIDINode}}(eAlgPortID\_MIDINodeA,\ \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4ae57de2b04978fe2e75f5bdeb034bda44}{AAX\_eMIDINodeType\_LocalInput}},\ \textcolor{stringliteral}{"{}DemoMIDI"{}},\ 0xffff);\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{a00740_a168ee44fd7a5485ab50160db36fb2988}{AAX\_ASSERT}}\ (err\ ==\ 0);}
\DoxyCodeLine{\ \ \ \ err\ =\ outDesc-\/>\mbox{\hyperlink{a02214_a6284dda9ccca898e33075de29dad4e39}{AddMIDINode}}(eAlgPortID\_MIDINodeOut,\ \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4acc1b5f2109c508b20a65b5e0fdcd643f}{AAX\_eMIDINodeType\_LocalOutput}},\ \textcolor{stringliteral}{"{}DemoMIDIOut"{}},\ 0xffff);\ \ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{a00740_a168ee44fd7a5485ab50160db36fb2988}{AAX\_ASSERT}}\ (err\ ==\ 0);}
\DoxyCodeLine{\ \ \ \ err\ =\ outDesc-\/>\mbox{\hyperlink{a02214_a6284dda9ccca898e33075de29dad4e39}{AddMIDINode}}(eAlgPortID\_MIDINodeTransport,\ \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4ac2ff856aec0724907dfd95b8e3ccbc20}{AAX\_eMIDINodeType\_Transport}},\ \textcolor{stringliteral}{"{}DemoMIDITrnsprt"{}},\ 0xffff);\ \mbox{\hyperlink{a00740_a168ee44fd7a5485ab50160db36fb2988}{AAX\_ASSERT}}\ (err\ ==\ 0);}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\}}

\end{DoxyCode}


If MIDI data is needed in the plug-\/in\textquotesingle{}s data model only, plug-\/in should describe MIDI node with \mbox{\hyperlink{a02254_aa7709de005e0256feb522758ccc5b582}{AAX\+\_\+\+IEffect\+Descriptor\+::\+Add\+Control\+MIDINode()}}.


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{comment}{//\ ***************************************************************************}}
\DoxyCodeLine{\textcolor{comment}{//\ ROUTINE:\ GetPlugInDescription}}
\DoxyCodeLine{\textcolor{comment}{//\ ***************************************************************************}}
\DoxyCodeLine{\textcolor{keyword}{static}\ \mbox{\hyperlink{a00542_a4d8f69a697df7f70c3a8e9b8ee130d2f}{AAX\_Result}}\ GetPlugInDescription(\ \mbox{\hyperlink{a02254}{AAX\_IEffectDescriptor}}\ *\ outDescriptor\ )}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a00542_a4d8f69a697df7f70c3a8e9b8ee130d2f}{AAX\_Result}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ err;}
\DoxyCodeLine{\ \ \ \ }
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Register\ MIDI\ nodes}}
\DoxyCodeLine{\ \ \ \ err\ =\ outDesc-\/>AddControlMIDINode(\textcolor{stringliteral}{'linp'},\ \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4ae57de2b04978fe2e75f5bdeb034bda44}{AAX\_eMIDINodeType\_LocalInput}},\ \textcolor{stringliteral}{"{}DemoMIDI"{}},\ 0xffff);\ \ \ \ \ \ \ \ \mbox{\hyperlink{a00740_a168ee44fd7a5485ab50160db36fb2988}{AAX\_ASSERT}}\ (err\ ==\ 0);}
\DoxyCodeLine{\ \ \ \ err\ =\ outDesc-\/>\ AddControlMIDINode(\textcolor{stringliteral}{'lout'},\ \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4acc1b5f2109c508b20a65b5e0fdcd643f}{AAX\_eMIDINodeType\_LocalOutput}},\ \textcolor{stringliteral}{"{}DemoMIDIOut"{}},\ 0xffff);\ \ \mbox{\hyperlink{a00740_a168ee44fd7a5485ab50160db36fb2988}{AAX\_ASSERT}}\ (err\ ==\ 0);}
\DoxyCodeLine{\ \ \ \ err\ =\ outDesc-\/>\ AddControlMIDINode(\textcolor{stringliteral}{'tran'},\ \mbox{\hyperlink{a00446_a5e1dffce35d05990dbbad651702678e4ac2ff856aec0724907dfd95b8e3ccbc20}{AAX\_eMIDINodeType\_Transport}},\ \textcolor{stringliteral}{"{}DemoMIDITrnsprt"{}},\ 0xffff);\ \ \mbox{\hyperlink{a00740_a168ee44fd7a5485ab50160db36fb2988}{AAX\_ASSERT}}\ (err\ ==\ 0);}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{return}\ err;}
\DoxyCodeLine{\}}

\end{DoxyCode}


\begin{DoxyNote}{Note}
These two types of MIDI nodes can\textquotesingle{}t be used together in the same plug-\/in\textquotesingle{}s effect.
\end{DoxyNote}
\hypertarget{a00903_additionalFeatures_MIDI_Algorithm}{}\doxysubsection{Using MIDI in a plug-\/in algorithm}\label{a00903_additionalFeatures_MIDI_Algorithm}
Like with other algorithm context ports, data in MIDI nodes is directly available in the plug-\/in\textquotesingle{}s algorithm process function. Here is an example from the Demo\+MIDI\+\_\+\+Note\+On sample plug-\/in\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keyword}{template}<\textcolor{keywordtype}{int}\ kNumChannelsIn,\ \textcolor{keywordtype}{int}\ kNumChannelsOut>\ }
\DoxyCodeLine{\textcolor{keywordtype}{void}}
\DoxyCodeLine{\mbox{\hyperlink{a00542_aaa22112139aa627574b1ef562f579d43}{AAX\_CALLBACK}}}
\DoxyCodeLine{DemoMIDI\_AlgorithmProcessFunction\ (}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SDemoMIDI\_Alg\_Context\ *\ \textcolor{keyword}{const}\ \ \ \ inInstancesBegin\ [],}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{void}\ *\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ inInstancesEnd)}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Setup\ MIDI\ In\ node\ pointers\ }}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02290}{AAX\_IMIDINode}}*\ midiNodeIn\ =\ instance-\/>mMIDINodeP;}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a01794}{AAX\_CMidiStream}}*\ midiBufferIn\ =\ midiNodeIn-\/>\mbox{\hyperlink{a02290_a4f113bc195eb107650a516eea898f32a}{GetNodeBuffer}}();}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a01790}{AAX\_CMidiPacket}}*\ midiBufferInPtr\ =\ midiBufferIn-\/>\mbox{\hyperlink{a01794_a5011ea886dce57b382c23b82e56d3000}{mBuffer}};}
\DoxyCodeLine{\ \ \ \ uint32\_t\ packets\_count\_in\ =\ midiBufferIn-\/>\mbox{\hyperlink{a01794_ad93c962a8278977f2a4f07b1e7490a90}{mBufferSize}};}
\DoxyCodeLine{\ \ \ \ }
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Setup\ MIDI\ Out\ node\ pointers\ }}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02290}{AAX\_IMIDINode}}*\ midiNodeOut\ =\ instance-\/>mMIDINodeOutP;}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a01794}{AAX\_CMidiStream}}*\ midiBufferOut\ =\ midiNodeOut-\/>\mbox{\hyperlink{a02290_a4f113bc195eb107650a516eea898f32a}{GetNodeBuffer}}();}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a01790}{AAX\_CMidiPacket}}*\ midiBufferOutPtr\ =\ midiBufferOut-\/>\mbox{\hyperlink{a01794_a5011ea886dce57b382c23b82e56d3000}{mBuffer}};}
\DoxyCodeLine{\ \ \ \ uint32\_t\ packets\_count\_out\ =\ midiBufferOut-\/>\mbox{\hyperlink{a01794_ad93c962a8278977f2a4f07b1e7490a90}{mBufferSize}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ }
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ Setup\ MIDI\ Transport\ node\ pointers}}
\DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ NOTE:\ See\ warning\ at\ AAX\_IMIDINode::GetTransport()\ regarding\ use\ of\ this\ interface}}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02290}{AAX\_IMIDINode}}*\ midiTransport\ =\ instance-\/>mMIDINodeTransportP;}
\DoxyCodeLine{\ \ \ \ \mbox{\hyperlink{a02350}{AAX\_ITransport}}\ *\ transport\ =\ midiTransport-\/>\mbox{\hyperlink{a02290_a329bef6f3ff19206f632c83bc93b90df}{GetTransport}}();}
\DoxyCodeLine{\ \ \ \ \textcolor{keywordtype}{bool}\ transport\_is\_playing\ =\ \textcolor{keyword}{false};}
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{if}\ (transport)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ transport-\/>\mbox{\hyperlink{a02350_a8f7d5b8f65ff9dd456a395838c974715}{IsTransportPlaying}}(\&transport\_is\_playing);}
\DoxyCodeLine{\ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ }
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{if}(transport\_is\_playing)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{comment}{//}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{comment}{//\ While\ there\ are\ packets\ in\ the\ node}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{while}\ (packets\_count\_in\ >\ 0)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ midiBufferOutPtr\ =\ midiBufferInPtr;\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Copy\ the\ packet\ from\ the\ input\ MIDI\ node\ }}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ to\ the\ output\ MIDI\ node}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ midiBufferOutPtr-\/>\mbox{\hyperlink{a01790_a76df0e71968aa1416b93015ebf23ddc5}{mTimestamp}}\ =\ timeStamp;\ \ \ \ \ \textcolor{comment}{//\ Set\ the\ MIDI\ time\ stamp}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ midiNodeOut-\/>\mbox{\hyperlink{a02290_a5e1c5409158164f57376f908c9693a8b}{PostMIDIPacket}}(midiBufferOutPtr);\ \ \ \ \textcolor{comment}{//\ Post\ the\ MIDI\ packet}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ midiBufferOut-\/>\mbox{\hyperlink{a01794_ad93c962a8278977f2a4f07b1e7490a90}{mBufferSize}}\ =\ packets\_count\_in;\ \ \ }
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ midiBufferInPtr++;}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ packets\_count\_in-\/-\/;}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ [...]}
\DoxyCodeLine{\}\ \ \ }

\end{DoxyCode}


Also data from the MIDI nodes that were described with \mbox{\hyperlink{a02214_a6284dda9ccca898e33075de29dad4e39}{AAX\+\_\+\+IComponent\+Descriptor\+::\+Add\+MIDINode()}} can be accessed via \mbox{\hyperlink{a01850_aac6fa72278c0f46aa430cd79bdb2d767}{AAX\+\_\+\+CEffect\+Parameters\+::\+Update\+MIDINodes()}} method. This method provides an \mbox{\hyperlink{a01790}{AAX\+\_\+\+CMidi\+Packet}}. Because the MIDI packet structure does not identify the associated MIDI stream\textquotesingle{}s type (input, output, global, or transport) this method also provides an index into the plug-\/in\textquotesingle{}s algorithm context structure which can be used to identify the semantics of the MIDI packet.\hypertarget{a00903_additionalFeatures_MIDI_DataModel}{}\doxysubsection{Accessing MIDI in the plug-\/in data model}\label{a00903_additionalFeatures_MIDI_DataModel}
A plug-\/in may access MIDI data in its data model via the \mbox{\hyperlink{a01850_aac6fa72278c0f46aa430cd79bdb2d767}{AAX\+\_\+\+CEffect\+Parameters\+::\+Update\+MIDINodes()}} or \mbox{\hyperlink{a01850_ac6720637afc7a87adfd391c4ef59126f}{AAX\+\_\+\+CEffect\+Parameters\+::\+Update\+Control\+MIDINodes()}} methods. Both of these methods provide an \mbox{\hyperlink{a01790}{AAX\+\_\+\+CMidi\+Packet}}. Because the MIDI packet structure does not identify the associated MIDI stream\textquotesingle{}s type (input, output, global, or transport) Update\+MIDINodes method also provides an index into the plug-\/in\textquotesingle{}s algorithm context structure which can be used to identify the semantics of the MIDI packet, while Update\+Control\+MIDINodes provides MIDI node ID for the same reason.


\begin{DoxyCode}{0}
\DoxyCodeLine{\mbox{\hyperlink{a00542_a4d8f69a697df7f70c3a8e9b8ee130d2f}{AAX\_Result}}\ DemoMIDI\_Parameters::UpdateMIDINodes\ (\ \mbox{\hyperlink{a00542_ae807f8986143820cfb5d6da32165c9c7}{AAX\_CFieldIndex}}\ inFieldIndex,\ \ \ \ \mbox{\hyperlink{a01790}{AAX\_CMidiPacket}}\&\ inPacket\ )}
\DoxyCodeLine{\{\ \ \ }
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{if}\ (eAlgPortID\_MIDINodeIn\ ==\ inFieldIndex)}
\DoxyCodeLine{\ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\ (inPacket.\mbox{\hyperlink{a01790_aac7229afc36006bc673eb219b18d8220}{mData}}[0]\ \&\ 0xF0)\ ==\ 0x90\ )}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\ inPacket.\mbox{\hyperlink{a01790_aac7229afc36006bc673eb219b18d8220}{mData}}[2]\ ==\ 0x00\ )}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ \ Note\ Off}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{else}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ Note\ On}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ }
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{a00539_a5f8c7439f3a706c4f8315a9609811937aeddbd1bb67e3a66e6af54a4b4a7a57b3}{AAX\_SUCCESS}};}
\DoxyCodeLine{\}}

\end{DoxyCode}


\begin{DoxyNote}{Note}
Only one of the Update\+MIDINodes and Update\+Control\+MIDINodes can be used in the single plug-\/in\textquotesingle{}s effect at a time. If plug-\/in uses MIDI nodes described with Add\+MIDINode function, then only Update\+MIDINodes method can be used to receive MIDI messages. Otherwise Update\+Control\+MIDINodes should be used.
\end{DoxyNote}
\hypertarget{a00903_additionalFeatures_MIDI_Utilities}{}\doxysubsection{Support functions}\label{a00903_additionalFeatures_MIDI_Utilities}
Additional definitions and support functions for MIDI in AAX are available in \mbox{\hyperlink{a00638}{AAX\+\_\+\+MIDIUtilities.\+h}} Collaboration diagram for MIDI\+:
% FIG 0
