\hypertarget{a00909}{}\doxysection{Parameter Manager}
\label{a00909}\index{Parameter Manager@{Parameter Manager}}


\doxysubsection{ }
Optional (but recommended) system for managing AAX plug-\/in parameters. 


\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth,height=\textheight/2,keepaspectratio=true]{dot_aax_cparammgr_contained}}
\end{DoxyImageNoCaption}


The Parameter Manager is a generic container for a plug-\/in\textquotesingle{}s parameters, which constitute the complete externally-\/facing state of a plug-\/in\textquotesingle{}s data model. Additional internal state data may be stored via settings chunks. The Parameter Manager is owned and operated by the plug-\/in\textquotesingle{}s \mbox{\hyperlink{a00891}{Data model interface}}.

The Parameter Manager provides a convenient and consistent interface by which a plug-\/in\textquotesingle{}s data model implementation may access its parameters. Other plug-\/in components that require access to the data model may also use this interface, or a proxy of it, to view the current state of the plug-\/in.

In the Parameter Manager, implementation-\/specific parameter behaviors such as taper and display formatting are modular and are applied through delegation. Because of this model, it is possible to easily create a wide variety of behavior combinations without additional subclassing; any display behavior may be combined with any taper behavior, and a newly written behavior can be quickly \char`\"{}mixed in\char`\"{} to many parameters.\hypertarget{a00909_concepts}{}\doxysubsection{Parameter concepts}\label{a00909_concepts}
\begin{DoxyItemize}
\item \mbox{\hyperlink{a00909_parameter_value_domains}{Parameter value domains}} \item \mbox{\hyperlink{a00909_taper}{Taper}} \item \mbox{\hyperlink{a00909_delegates}{Delegates}} \item \mbox{\hyperlink{a00909_model_view_controller}{Model-\/\+View-\/\+Controller}}\end{DoxyItemize}
\hypertarget{a00909_parameter_value_domains}{}\doxysubsubsection{Parameter value domains}\label{a00909_parameter_value_domains}
In AAX, parameter values can be represented in one of two \char`\"{}domains\char`\"{}. Developers work with parameters in the {\itshape real} domain, while the host handles parameters in a scaled, {\itshape normalized} format.

\begin{DoxyParagraph}{Real (or \char`\"{}logical\char`\"{}) domain}
AAX plug-\/ins and parameter controllers work with typed parameter values that represent the {\itshape real} (logical) state of the parameter. The type, form, and meaning of this value is dependent on the parameter\textquotesingle{}s implementation and is unknown to the host.
\end{DoxyParagraph}
\begin{DoxyParagraph}{Normalized domain}
The AAX host works with parameter values that have been scaled ({\itshape normalized}) to a type-\/agnostic format. Although normalized values make little logical sense, they provide the host with a consistent means of handling, storing, and communicating parameters\textquotesingle{} values without having to worry about the actual implementation or meaning of the parameters. Normalized parameter values are 64-\/bit floating point and are scaled to a range of \mbox{[}0, 1\mbox{]}.
\end{DoxyParagraph}
For more information about conversion between parameter domains, see \mbox{\hyperlink{a02302}{AAX\+\_\+\+IParameter}}.

\begin{DoxyNote}{Note}
The \mbox{\hyperlink{a02266}{AAX\+\_\+\+IEffect\+Parameters}} interface currently utilizes a secondary normalization to full-\/scale int32\+\_\+t values. In the future, this will be unified with the double precision floating point normalization documented above.
\end{DoxyNote}
\hypertarget{a00909_taper}{}\doxysubsubsection{Taper}\label{a00909_taper}
A {\itshape taper} is the conversion function that translates a parameter\textquotesingle{}s value between its real and normalized forms.

For example, a taper could be created that converts between a normalized value (\mbox{[}0, 1\mbox{]}) and a real frequency value ranging from \mbox{[}20 2000\mbox{]}. The conversion between these two ranges could be linear or logarithmic, or could use any other desired mapping. This mapping, as well as the specific range of the possible logical values, is defined by the taper.

For more information about tapers in AAX, see \mbox{\hyperlink{a02338}{AAX\+\_\+\+ITaper\+Delegate}}.\hypertarget{a00909_delegates}{}\doxysubsubsection{Delegates}\label{a00909_delegates}
In AAX, individual parameters achieve their own unique behavior by being associated with behavioral delegates.

For example, when \mbox{\hyperlink{a01906_ac4f8ae8c5ecb2cd04ebc3aa2523449f7}{AAX\+\_\+\+CParameter\+::\+Set\+Normalized\+Value()}} is called on a particular parameter through its \mbox{\hyperlink{a02302}{AAX\+\_\+\+IParameter}} interface, the \mbox{\hyperlink{a01906}{AAX\+\_\+\+CParameter}} calls into a \mbox{\hyperlink{a02338}{AAX\+\_\+\+ITaper\+Delegate}} that it owns in order to convert the normalized value to its real equivalent. This real value is then set as the parameter\textquotesingle{}s new state.

For more information about how delegates are used to create a parameter\textquotesingle{}s behavior see \mbox{\hyperlink{a01906}{AAX\+\_\+\+CParameter}}\hypertarget{a00909_model_view_controller}{}\doxysubsubsection{Model-\/\+View-\/\+Controller}\label{a00909_model_view_controller}
AAX adheres roughly to a Model-\/\+View-\/\+Controller pattern. The Parameter Manager functions within the context of \mbox{\hyperlink{a02266}{AAX\+\_\+\+IEffect\+Parameters}}, which in turn acts as an AAX plug-\/in\textquotesingle{}s Data Model in an MVC sense. Views, such as the plug-\/in\textquotesingle{}s GUI, attached control surfaces, or the automation facilities in the AAX host, are given access to the Data Model via a central Controller, which is represented by the \mbox{\hyperlink{a02222}{AAX\+\_\+\+IController}} interface.

For more information about how MVC applies to AAX, see the \mbox{\hyperlink{a00891}{Data model interface}} documentation page. \doxysubsection*{Classes}
\begin{DoxyCompactItemize}
\item 
class \mbox{\hyperlink{a01906}{AAX\+\_\+\+CParameter$<$ T $>$}}
\begin{DoxyCompactList}\small\item\em Generic implementation of an \mbox{\hyperlink{a02302}{AAX\+\_\+\+IParameter}}. \end{DoxyCompactList}\item 
class \mbox{\hyperlink{a01914}{AAX\+\_\+\+CParameter\+Manager}}
\begin{DoxyCompactList}\small\item\em A container object for plug-\/in parameters. \end{DoxyCompactList}\item 
class \mbox{\hyperlink{a02302}{AAX\+\_\+\+IParameter}}
\begin{DoxyCompactList}\small\item\em The base interface for all normalizable plug-\/in parameters. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Documents}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{a00910}{Taper delegates}}
\begin{DoxyCompactList}\small\item\em Classes for conversion to and from normalized parameter values. \end{DoxyCompactList}\item 
\mbox{\hyperlink{a00911}{Display delegates}}
\begin{DoxyCompactList}\small\item\em Classes for parameter value string conversion. \end{DoxyCompactList}\end{DoxyCompactItemize}
Collaboration diagram for Parameter Manager\+:
% FIG 0
