|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- //------------------------------------------------------------------------
- // Project : VST SDK
- //
- // Category : Interfaces
- // Filename : pluginterfaces/vst/ivstnoteexpression.h
- // Created by : Steinberg, 10/2010
- // Description : VST Note Expression Interfaces
- //
- //-----------------------------------------------------------------------------
- // 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/base/funknown.h"
- #include "pluginterfaces/vst/vsttypes.h"
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpush.h"
- //------------------------------------------------------------------------
-
- //------------------------------------------------------------------------
- namespace Steinberg {
- namespace Vst {
-
- //------------------------------------------------------------------------
- /** \defgroup vst3typedef VST 3 Data Types */
- /*@{*/
- //------------------------------------------------------------------------
- /** Note Expression Types */
- typedef uint32 NoteExpressionTypeID;
- /** Note Expression Value */
- typedef double NoteExpressionValue;
- /*@}*/
-
- //------------------------------------------------------------------------
- /** NoteExpressionTypeIDs describes the type of the note expression.
- VST predefines some types like volume, pan, tuning by defining their ranges and curves.
- Used by NoteExpressionEvent::typeId and NoteExpressionTypeID::typeId
- \see NoteExpressionTypeInfo
- */
- enum NoteExpressionTypeIDs : uint32
- {
- kVolumeTypeID = 0, ///< Volume, plain range [0 = -oo , 0.25 = 0dB, 0.5 = +6dB, 1 = +12dB]: plain = 20 * log (4 * norm)
- kPanTypeID, ///< Panning (L-R), plain range [0 = left, 0.5 = center, 1 = right]
- kTuningTypeID, ///< Tuning, plain range [0 = -120.0 (ten octaves down), 0.5 none, 1 = +120.0 (ten octaves up)]
- ///< plain = 240 * (norm - 0.5) and norm = plain / 240 + 0.5
- ///< oneOctave is 12.0 / 240.0; oneHalfTune = 1.0 / 240.0;
- kVibratoTypeID, ///< Vibrato
- kExpressionTypeID, ///< Expression
- kBrightnessTypeID, ///< Brightness
- kTextTypeID, ///< See NoteExpressionTextEvent
- kPhonemeTypeID, ///< TODO:
-
- kCustomStart = 100000, ///< start of custom note expression type ids
- kCustomEnd = 200000, ///< end of custom note expression type ids
-
- kInvalidTypeID = 0xFFFFFFFF ///< indicates an invalid note expression type
- };
-
- //------------------------------------------------------------------------
- /** Description of a Note Expression Type
- This structure is part of the NoteExpressionTypeInfo structure, it describes for given NoteExpressionTypeID its default value
- (for example 0.5 for a kTuningTypeID (kIsBipolar: centered)), its minimum and maximum (for predefined NoteExpressionTypeID the full range is predefined too)
- and a stepCount when the given NoteExpressionTypeID is limited to discrete values (like on/off state).
- \see NoteExpressionTypeInfo
- */
- struct NoteExpressionValueDescription
- {
- NoteExpressionValue defaultValue; ///< default normalized value [0,1]
- NoteExpressionValue minimum; ///< minimum normalized value [0,1]
- NoteExpressionValue maximum; ///< maximum normalized value [0,1]
- int32 stepCount; ///< number of discrete steps (0: continuous, 1: toggle, discrete value otherwise - see \ref vst3ParameterIntro)
- };
-
- #if SMTG_OS_WINDOWS && !SMTG_PLATFORM_64
- #include "pluginterfaces/vst/vstpshpack4.h"
- #endif
- //------------------------------------------------------------------------
- /** Note Expression Value event. Used in \ref Event (union)
- A note expression event affects one single playing note (referring its noteId).
- This kind of event is send from host to the plug-in like other events (NoteOnEvent, NoteOffEvent,...) in \ref ProcessData during the process call.
- Note expression events for a specific noteId can only occur after a NoteOnEvent. The host must take care that the event list (\ref IEventList) is properly sorted.
- Expression events are always absolute normalized values [0.0, 1.0].
- The predefined types have a predefined mapping of the normalized values (see \ref NoteExpressionTypeIDs)
- \sa INoteExpressionController
- */
- struct NoteExpressionValueEvent
- {
- NoteExpressionTypeID typeId; ///< see \ref NoteExpressionTypeID
- int32 noteId; ///< associated note identifier to apply the change
-
- NoteExpressionValue value; ///< normalized value [0.0, 1.0].
- };
-
- //------------------------------------------------------------------------
- /** Note Expression Text event. Used in Event (union)
- A Expression event affects one single playing note. \sa INoteExpressionController
-
- \see NoteExpressionTypeInfo
- */
- struct NoteExpressionTextEvent
- {
- NoteExpressionTypeID typeId; ///< see \ref NoteExpressionTypeID (kTextTypeID or kPhoneticTypeID)
- int32 noteId; ///< associated note identifier to apply the change
-
- uint32 textLen; ///< the number of characters (TChar) between the beginning of text and the terminating
- ///< null character (without including the terminating null character itself)
-
- const TChar* text; ///< UTF-16, null terminated
- };
-
- #if SMTG_OS_WINDOWS && !SMTG_PLATFORM_64
- #include "pluginterfaces/base/falignpop.h"
- #endif
-
- //------------------------------------------------------------------------
- /** NoteExpressionTypeInfo is the structure describing a note expression supported by the plug-in.
- This structure is used by the method \ref INoteExpressionController::getNoteExpressionInfo.
- \see INoteExpressionController
- */
- struct NoteExpressionTypeInfo
- {
- NoteExpressionTypeID typeId; ///< unique identifier of this note Expression type
- String128 title; ///< note Expression type title (e.g. "Volume")
- String128 shortTitle; ///< note Expression type short title (e.g. "Vol")
- String128 units; ///< note Expression type unit (e.g. "dB")
- int32 unitId; ///< id of unit this NoteExpression belongs to (see \ref vst3Units), in order to sort the note expression, it is possible to use unitId like for parameters. -1 means no unit used.
- NoteExpressionValueDescription valueDesc; ///< value description see \ref NoteExpressionValueDescription
- ParamID associatedParameterId; ///< optional associated parameter ID (for mapping from note expression to global (using the parameter automation for example) and back). Only used when kAssociatedParameterIDValid is set in flags.
-
- int32 flags; ///< NoteExpressionTypeFlags (see below)
- enum NoteExpressionTypeFlags
- {
- kIsBipolar = 1 << 0, ///< event is bipolar (centered), otherwise unipolar
- kIsOneShot = 1 << 1, ///< event occurs only one time for its associated note (at begin of the noteOn)
- kIsAbsolute = 1 << 2, ///< This note expression will apply an absolute change to the sound (not relative (offset))
- kAssociatedParameterIDValid = 1 << 3,///< indicates that the associatedParameterID is valid and could be used
- };
- };
-
- //------------------------------------------------------------------------
- /** Extended plug-in interface IEditController for note expression event support: Vst::INoteExpressionController
- \ingroup vstIPlug vst350
- - [plug imp]
- - [extends IEditController]
- - [released: 3.5.0]
- - [optional]
-
- With this plug-in interface, the host can retrieve all necessary note expression information supported by the plug-in.
- Note expression information (\ref NoteExpressionTypeInfo) are specific for given channel and event bus.
-
- Note that there is only one NoteExpressionTypeID per given channel of an event bus.
-
- The method getNoteExpressionStringByValue allows conversion from a normalized value to a string representation
- and the getNoteExpressionValueByString method from a string to a normalized value.
-
- When the note expression state changes (for example when switching presets) the plug-in needs
- to inform the host about it via \ref IComponentHandler::restartComponent (kNoteExpressionChanged).
- */
- class INoteExpressionController : public FUnknown
- {
- public:
- /** Returns number of supported note change types for event bus index and channel. */
- virtual int32 PLUGIN_API getNoteExpressionCount (int32 busIndex, int16 channel) = 0;
-
- /** Returns note change type info. */
- virtual tresult PLUGIN_API getNoteExpressionInfo (int32 busIndex, int16 channel, int32 noteExpressionIndex, NoteExpressionTypeInfo& info /*out*/) = 0;
-
- /** Gets a user readable representation of the normalized note change value. */
- virtual tresult PLUGIN_API getNoteExpressionStringByValue (int32 busIndex, int16 channel, NoteExpressionTypeID id, NoteExpressionValue valueNormalized /*in*/, String128 string /*out*/) = 0;
-
- /** Converts the user readable representation to the normalized note change value. */
- virtual tresult PLUGIN_API getNoteExpressionValueByString (int32 busIndex, int16 channel, NoteExpressionTypeID id, const TChar* string /*in*/, NoteExpressionValue& valueNormalized /*out*/) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (INoteExpressionController, 0xB7F8F859, 0x41234872, 0x91169581, 0x4F3721A3)
-
- //------------------------------------------------------------------------
- //------------------------------------------------------------------------
- /** KeyswitchTypeIDs describes the type of a key switch
- \see KeyswitchInfo
- */
- enum KeyswitchTypeIDs : uint32
- {
- kNoteOnKeyswitchTypeID = 0, ///< press before noteOn is played
- kOnTheFlyKeyswitchTypeID, ///< press while noteOn is played
- kOnReleaseKeyswitchTypeID, ///< press before entering release
- kKeyRangeTypeID ///< key should be maintained pressed for playing
- };
-
- typedef uint32 KeyswitchTypeID;
-
- //------------------------------------------------------------------------
- /** KeyswitchInfo is the structure describing a key switch
- This structure is used by the method \ref IKeyswitchController::getKeyswitchInfo.
- \see IKeyswitchController
- */
- struct KeyswitchInfo
- {
- KeyswitchTypeID typeId; ///< see KeyswitchTypeID
- String128 title; ///< name of key switch (e.g. "Accentuation")
- String128 shortTitle; ///< short title (e.g. "Acc")
-
- int32 keyswitchMin; ///< associated main key switch min (value between [0, 127])
- int32 keyswitchMax; ///< associated main key switch max (value between [0, 127])
- int32 keyRemapped; /** optional remapped key switch (default -1), the plug-in could provide one remapped
- key for a key switch (allowing better location on the keyboard of the key switches) */
-
- int32 unitId; ///< id of unit this key switch belongs to (see \ref vst3Units), -1 means no unit used.
-
- int32 flags; ///< not yet used (set to 0)
- };
-
- //------------------------------------------------------------------------
- /** Extended plug-in interface IEditController for key switches support: Vst::IKeyswitchController
- \ingroup vstIPlug vst350
- - [plug imp]
- - [extends IEditController]
- - [released: 3.5.0]
- - [optional]
-
- When a (instrument) plug-in supports such interface, the host could get from the plug-in the current set
- of used key switches (megatrig/articulation) for a given channel of a event bus and then automatically use them (like in Cubase 6) to
- create VST Expression Map (allowing to associated symbol to a given articulation / key switch).
- */
- class IKeyswitchController : public FUnknown
- {
- public:
- /** Returns number of supported key switches for event bus index and channel. */
- virtual int32 PLUGIN_API getKeyswitchCount (int32 busIndex, int16 channel) = 0;
-
- /** Returns key switch info. */
- virtual tresult PLUGIN_API getKeyswitchInfo (int32 busIndex, int16 channel, int32 keySwitchIndex, KeyswitchInfo& info /*out*/) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IKeyswitchController, 0x1F2F76D3, 0xBFFB4B96, 0xB99527A5, 0x5EBCCEF4)
-
- //------------------------------------------------------------------------
- } // namespace Vst
- } // namespace Steinberg
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpop.h"
- //------------------------------------------------------------------------
|