227 lines
8.3 KiB
C++
227 lines
8.3 KiB
C++
//------------------------------------------------------------------------
|
|
// 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"
|
|
//------------------------------------------------------------------------
|