//------------------------------------------------------------------------ // Project : VST SDK // // Category : Interfaces // Filename : pluginterfaces/vst/ivstchannelcontextinfo.h // Created by : Steinberg, 02/2014 // Description : VST Channel Context Info Interface // //----------------------------------------------------------------------------- // This file is part of a Steinberg SDK. It is subject to the license terms // in the LICENSE file found in the top-level directory of this distribution // and at www.steinberg.net/sdklicenses. // No part of the SDK, including this file, may be copied, modified, propagated, // or distributed except according to the terms contained in the LICENSE file. //----------------------------------------------------------------------------- #pragma once #include "pluginterfaces/vst/vsttypes.h" #include "pluginterfaces/vst/ivstattributes.h" //------------------------------------------------------------------------ #include "pluginterfaces/base/falignpush.h" //------------------------------------------------------------------------ //------------------------------------------------------------------------ namespace Steinberg { namespace Vst { /** For Channel Context Info Interface */ namespace ChannelContext { //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ //------------------------------------------------------------------------ /** Channel Context Interface. \ingroup vstIHost vst365 - [plug imp] - [extends IEditController] - [released: 3.6.5] - [optional] Allows the host to inform the Plug-in about the context in which the Plug-in is instantiated, mainly channel based info (color, name, index,...). Index could be defined inside a namespace (for example index start from 1 to N for Type Input/Output Channel (Index namespace) and index start from 1 to M for Type Audio Channel).\n As soon as the Plug-in provides this IInfoListener interface, the host will call setChannelContextInfos for each change occurring to this channel (new name, new color, new indexation,...) \section IChannelContextExample Example \code tresult PLUGIN_API MyPlugin::setChannelContextInfos (IAttributeList* list) { if (list) { // optional we can ask for the Channel Name Length int64 length; if (list->getInt (ChannelContext::kChannelNameLengthKey, length) == kResultTrue) { ... } // get the Channel Name where we, as Plug-in, are instantiated String128 name; if (list->getString (ChannelContext::kChannelNameKey, name, sizeof (name)) == kResultTrue) { ... } // get the Channel UID if (list->getString (ChannelContext::kChannelUIDKey, name, sizeof (name)) == kResultTrue) { ... } // get Channel Index int64 index; if (list->getInt (ChannelContext::kChannelIndexKey, index) == kResultTrue) { ... } // get the Channel Color int64 color; if (list->getInt (ChannelContext::kChannelColorKey, color) == kResultTrue) { uint32 channelColor = (uint32)color; String str; str.printf ("%x%x%x%x", ChannelContext::GetAlpha (channelColor), ChannelContext::GetRed (channelColor), ChannelContext::GetGreen (channelColor), ChannelContext::GetBlue (channelColor)); String128 string128; Steinberg::UString (string128, 128).fromAscii (str); ... } // get Channel Index Namespace Order of the current used index namespace if (list->getInt (ChannelContext::kChannelIndexNamespaceOrderKey, index) == kResultTrue) { ... } // get the channel Index Namespace Length if (list->getInt (ChannelContext::kChannelIndexNamespaceLengthKey, length) == kResultTrue) { ... } // get the channel Index Namespace String128 namespaceName; if (list->getString (ChannelContext::kChannelIndexNamespaceKey, namespaceName, sizeof (namespaceName)) == kResultTrue) { ... } // get Plug-in Channel Location int64 location; if (list->getInt (ChannelContext::kChannelPluginLocationKey, location) == kResultTrue) { String128 string128; switch (location) { case ChannelContext::kPreVolumeFader: Steinberg::UString (string128, 128).fromAscii ("PreVolFader"); break; case ChannelContext::kPostVolumeFader: Steinberg::UString (string128, 128).fromAscii ("PostVolFader"); break; case ChannelContext::kUsedAsPanner: Steinberg::UString (string128, 128).fromAscii ("UsedAsPanner"); break; default: Steinberg::UString (string128, 128).fromAscii ("unknown!"); break; } } // do not forget to call addRef () if you want to keep this list } } \endcode */ //------------------------------------------------------------------------ class IInfoListener: public FUnknown { public: /** Receive the channel context infos from host. */ virtual tresult PLUGIN_API setChannelContextInfos (IAttributeList* list) = 0; static const FUID iid; }; DECLARE_CLASS_IID (IInfoListener, 0x0F194781, 0x8D984ADA, 0xBBA0C1EF, 0xC011D8D0) //------------------------------------------------------------------------ /** Values used for kChannelPluginLocationKey */ //------------------------------------------------------------------------ enum ChannelPluginLocation { kPreVolumeFader = 0, kPostVolumeFader, kUsedAsPanner }; //------------------------------------------------------------------------ //------------------------------------------------------------------------ // Colors typedef uint32 ColorSpec; ///< ARGB (Alpha-Red-Green-Blue) typedef uint8 ColorComponent; inline ColorComponent GetBlue (ColorSpec cs) {return (ColorComponent)(cs & 0x000000FF); } inline ColorComponent GetGreen (ColorSpec cs) {return (ColorComponent)((cs >> 8) & 0x000000FF); } inline ColorComponent GetRed (ColorSpec cs) {return (ColorComponent)((cs >> 16) & 0x000000FF); } inline ColorComponent GetAlpha (ColorSpec cs) {return (ColorComponent)((cs >> 24) & 0x000000FF); } //------------------------------------------------------------------------ /** Keys used as AttrID (Attribute ID) in the return IAttributeList of * IInfoListener::setChannelContextInfos */ //------------------------------------------------------------------------ /** string (TChar) [optional]: unique id string used to identify a channel */ const CString kChannelUIDKey = "channel uid"; /** integer (int64) [optional]: number of characters in kChannelUIDKey */ const CString kChannelUIDLengthKey = "channel uid length"; /** string (TChar) [optional]: name of the channel like displayed in the mixer */ const CString kChannelNameKey = "channel name"; /** integer (int64) [optional]: number of characters in kChannelNameKey */ const CString kChannelNameLengthKey = "channel name length"; /** color (ColorSpec) [optional]: used color for the channel in mixer or track */ const CString kChannelColorKey = "channel color"; /** integer (int64) [optional]: index of the channel in a channel index namespace, start with 1 not * 0! */ const CString kChannelIndexKey = "channel index"; /** integer (int64) [optional]: define the order of the current used index namespace, start with 1 not 0! For example: index namespace is "Input" -> order 1, index namespace is "Channel" -> order 2, index namespace is "Output" -> order 3 */ const CString kChannelIndexNamespaceOrderKey = "channel index namespace order"; /** string (TChar) [optional]: name of the channel index namespace for example "Input", "Output", "Channel", ... */ const CString kChannelIndexNamespaceKey = "channel index namespace"; /** integer (int64) [optional]: number of characters in kChannelIndexNamespaceKey */ const CString kChannelIndexNamespaceLengthKey = "channel index namespace length"; /** PNG image representation as binary [optional] */ const CString kChannelImageKey = "channel image"; /** integer (int64) [optional]: routing position of the Plug-in in the channel (see ChannelPluginLocation) */ const CString kChannelPluginLocationKey = "channel plugin location"; //------------------------------------------------------------------------ } // namespace ChannelContext } // namespace Vst } // namespace Steinberg //------------------------------------------------------------------------ #include "pluginterfaces/base/falignpop.h" //------------------------------------------------------------------------