|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- //-----------------------------------------------------------------------------
- // Project : VST SDK
- //
- // Category : Interfaces
- // Filename : pluginterfaces/vst/ivstcomponent.h
- // Created by : Steinberg, 04/2005
- // Description : Basic VST 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/ipluginbase.h"
- #include "pluginterfaces/vst/vsttypes.h"
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpush.h"
- //------------------------------------------------------------------------
-
- namespace Steinberg {
- class IBStream;
-
- //------------------------------------------------------------------------
- /** All VST specific interfaces are located in Vst namespace */
- namespace Vst {
-
- /** Standard value for PFactoryInfo::flags */
- const int32 kDefaultFactoryFlags = PFactoryInfo::kUnicode;
-
- #define BEGIN_FACTORY_DEF(vendor,url,email) using namespace Steinberg; \
- SMTG_EXPORT_SYMBOL IPluginFactory* PLUGIN_API GetPluginFactory () { \
- if (!gPluginFactory) \
- { \
- static PFactoryInfo factoryInfo (vendor, url, email, Vst::kDefaultFactoryFlags); \
- gPluginFactory = new CPluginFactory (factoryInfo);
-
- //------------------------------------------------------------------------
- /** \defgroup vstBus VST busses
- Bus Description
-
- A bus can be understood as a "collection of data channels" belonging together.
- It describes a data input or a data output of the plug-in.
- A VST component can define any desired number of busses.
- Dynamic usage of busses is handled in the host by activating and deactivating busses.
- All busses are initially inactive.
- The component has to define the maximum number of supported busses and it has to
- define which of them have to be activated by default after instantiation of the plug-in (This is
- only a wish, the host is allow to not follow it, and only activate the first bus for example).
- A host that can handle multiple busses, allows the user to activate busses which are initially all inactive.
- The kMain busses have to place before any others kAux busses.
-
- See also: IComponent::getBusInfo, IComponent::activateBus
- */
- /*@{*/
-
- //------------------------------------------------------------------------
- /** Bus media types */
- enum MediaTypes
- {
- kAudio = 0, ///< audio
- kEvent, ///< events
- kNumMediaTypes
- };
-
- //------------------------------------------------------------------------
- /** Bus directions */
- enum BusDirections
- {
- kInput = 0, ///< input bus
- kOutput ///< output bus
- };
-
- //------------------------------------------------------------------------
- /** Bus types */
- enum BusTypes
- {
- kMain = 0, ///< main bus
- kAux ///< auxiliary bus (sidechain)
- };
-
- //------------------------------------------------------------------------
- /** BusInfo:
- This is the structure used with getBusInfo, informing the host about what is a specific given bus.
- \n See also: Steinberg::Vst::IComponent::getBusInfo
- */
- struct BusInfo
- {
- MediaType mediaType; ///< Media type - has to be a value of \ref MediaTypes
- BusDirection direction; ///< input or output \ref BusDirections
- int32 channelCount; ///< number of channels (if used then need to be recheck after \ref
- /// IAudioProcessor::setBusArrangements is called).
- /// For a bus of type MediaTypes::kEvent the channelCount corresponds
- /// to the number of supported MIDI channels by this bus
- String128 name; ///< name of the bus
- BusType busType; ///< main or aux - has to be a value of \ref BusTypes
- uint32 flags; ///< flags - a combination of \ref BusFlags
- enum BusFlags
- {
- /** The bus should be activated by the host per default on instantiation (activateBus call is requested).
- By default a bus is inactive. */
- kDefaultActive = 1 << 0,
- /** The bus does not contain ordinary audio data, but data used for control changes at sample rate.
- The data is in the same format as the audio data [-1..1].
- A host has to prevent unintended routing to speakers to prevent damage.
- Only valid for audio media type busses.
- [released: 3.7.0] */
- kIsControlVoltage = 1 << 1
- };
- };
-
- /*@}*/
-
- //------------------------------------------------------------------------
- /** I/O modes */
- enum IoModes
- {
- kSimple = 0, ///< 1:1 Input / Output. Only used for Instruments. See \ref vst3IoMode
- kAdvanced, ///< n:m Input / Output. Only used for Instruments.
- kOfflineProcessing ///< plug-in used in an offline processing context
- };
-
- //------------------------------------------------------------------------
- /** Routing Information:
- When the plug-in supports multiple I/O busses, a host may want to know how the busses are related. The
- relation of an event-input-channel to an audio-output-bus in particular is of interest to the host
- (in order to relate MIDI-tracks to audio-channels)
- \n See also: IComponent::getRoutingInfo, \ref vst3Routing
- */
- struct RoutingInfo
- {
- MediaType mediaType; ///< media type see \ref MediaTypes
- int32 busIndex; ///< bus index
- int32 channel; ///< channel (-1 for all channels)
- };
-
- //------------------------------------------------------------------------
- // IComponent Interface
- //------------------------------------------------------------------------
- /** Component base interface: Vst::IComponent
- \ingroup vstIPlug vst300
- - [plug imp]
- - [released: 3.0.0]
- - [mandatory]
-
- This is the basic interface for a VST component and must always be supported.
- It contains the common parts of any kind of processing class. The parts that
- are specific to a media type are defined in a separate interface. An implementation
- component must provide both the specific interface and IComponent.
- \see IPluginBase
- */
- class IComponent : public IPluginBase
- {
- public:
- //------------------------------------------------------------------------
- /** Called before initializing the component to get information about the controller class. */
- virtual tresult PLUGIN_API getControllerClassId (TUID classId) = 0;
-
- /** Called before 'initialize' to set the component usage (optional). See \ref IoModes */
- virtual tresult PLUGIN_API setIoMode (IoMode mode) = 0;
-
- /** Called after the plug-in is initialized. See \ref MediaTypes, BusDirections */
- virtual int32 PLUGIN_API getBusCount (MediaType type, BusDirection dir) = 0;
-
- /** Called after the plug-in is initialized. See \ref MediaTypes, BusDirections */
- virtual tresult PLUGIN_API getBusInfo (MediaType type, BusDirection dir, int32 index, BusInfo& bus /*out*/) = 0;
-
- /** Retrieves routing information (to be implemented when more than one regular input or output bus exists).
- The inInfo always refers to an input bus while the returned outInfo must refer to an output bus! */
- virtual tresult PLUGIN_API getRoutingInfo (RoutingInfo& inInfo, RoutingInfo& outInfo /*out*/) = 0;
-
- /** Called upon (de-)activating a bus in the host application. The plug-in should only processed
- an activated bus, the host could provide less see \ref AudioBusBuffers in the process call
- (see \ref IAudioProcessor::process) if last busses are not activated. An already activated bus
- does not need to be reactivated after a IAudioProcessor::setBusArrangements call. */
- virtual tresult PLUGIN_API activateBus (MediaType type, BusDirection dir, int32 index,
- TBool state) = 0;
-
- /** Activates / deactivates the component. */
- virtual tresult PLUGIN_API setActive (TBool state) = 0;
-
- /** Sets complete state of component. */
- virtual tresult PLUGIN_API setState (IBStream* state) = 0;
-
- /** Retrieves complete state of component. */
- virtual tresult PLUGIN_API getState (IBStream* state) = 0;
-
- //------------------------------------------------------------------------
- static const FUID iid;
- };
-
- DECLARE_CLASS_IID (IComponent, 0xE831FF31, 0xF2D54301, 0x928EBBEE, 0x25697802)
-
- //------------------------------------------------------------------------
- } // namespace Vst
- } // namespace Steinberg
-
- //------------------------------------------------------------------------
- #include "pluginterfaces/base/falignpop.h"
- //------------------------------------------------------------------------
|