1 //-----------------------------------------------------------------------------2 // LICENSE3 // (c) 2005, Steinberg Media Technologies GmbH, All Rights Reserved4 // (c) 2018, Guillaume Piolat (contact@auburnsounds.com)5 //-----------------------------------------------------------------------------6 //7 // This Software Development Kit is licensed under the terms of the General8 // Public License (GPL) Version 3.9 //10 // This source is part of the "Auburn Sounds (Guillaume Piolat) extension to the 11 // Steinberg VST 3 Plug-in SDK".12 //13 // Details of that license can be found at: www.gnu.org/licenses/gpl-3.0.html14 //15 // Dual-licence:16 // 17 // The "Auburn Sounds (Guillaume Piolat) extension to the Steinberg VST 3 Plug-in18 // SDK", hereby referred to as DPLUG:VST3, is a language translation of the VST3 19 // SDK suitable for usage in Dplug. Any Licensee of a currently valid Steinberg 20 // VST 3 Plug-In SDK Licensing Agreement (version 2.2.4 or ulterior, hereby referred21 // to as the AGREEMENT), is granted by Auburn Sounds (Guillaume Piolat) a non-exclusive, 22 // worldwide, nontransferable license during the term the AGREEMENT to use parts23 // of DPLUG:VST3 not covered by the AGREEMENT, as if they were originally 24 // inside the Licensed Software Developer Kit mentionned in the AGREEMENT. 25 // Under this licence all conditions that apply to the Licensed Software Developer 26 // Kit also apply to DPLUG:VST3.27 //28 //-----------------------------------------------------------------------------29 moduledplug.vst3.ivstunit;
30 31 version(VST3):
32 33 importdplug.vst3.ftypes;
34 importdplug.vst3.ibstream;
35 36 37 enumUnitIDkRootUnitId = 0; ///< identifier for the top level unit (root)38 enumUnitIDkNoParentUnitId = -1; ///< used for the root unit which doesn't have a parent.39 40 /** Special ProgramListIDs for UnitInfo */41 enumProgramListIDkNoProgramListId = -1; ///< no programs are used in the unit.42 43 /** Basic Unit Description.
44 \see IUnitInfo */45 structUnitInfo46 {
47 UnitIDid; ///< unit identifier48 UnitIDparentUnitId; ///< identifier of parent unit (kNoParentUnitId: does not apply, this unit is the root)49 String128name; ///< name, optional for the root component, required otherwise50 ProgramListIDprogramListId; ///< id of program list used in unit (kNoProgramListId = no programs used in this unit)51 }
52 53 mixinSMTG_TYPE_SIZE_CHECK!(UnitInfo, 268, 268, 268);
54 55 /** Basic Program List Description.
56 \see IUnitInfo */57 structProgramListInfo58 {
59 ProgramListIDid; ///< program list identifier60 String128name; ///< name of program list61 int32programCount; ///< number of programs in this list62 }
63 64 mixinSMTG_TYPE_SIZE_CHECK!(ProgramListInfo, 264, 264, 264);
65 66 /** Special programIndex value for IUnitHandler::notifyProgramListChange */67 enumint32kAllProgramInvalid = -1; ///< all program information is invalid68 69 /** Host callback for unit support.
70 \ingroup vstIHost vst300
71 - [host imp]
72 - [extends IComponentHandler]
73 - [released: 3.0.0]
74 75 Host callback interface, used with IUnitInfo.
76 Retrieve via queryInterface from IComponentHandler.
77 78 \see \ref vst3Units, IUnitInfo */79 interfaceIUnitHandler: FUnknown80 {
81 public:
82 nothrow:
83 @nogc:
84 /** Notify host when a module is selected in Plug-in GUI. */85 tresultnotifyUnitSelection (UnitIDunitId);
86 87 /** Tell host that the Plug-in controller changed a program list (rename, load, PitchName changes).
88 \param listId is the specified program list ID to inform.
89 \param programIndex : when kAllProgramInvalid, all program information is invalid, otherwise only the program of given index. */90 tresultnotifyProgramListChange (ProgramListIDlistId, int32programIndex);
91 92 __gsharedimmutableTUIDiid = INLINE_UID( 0x4B5147F8, 0x4654486B, 0x8DAB30BA, 0x163A3C56);
93 }
94 95 96 /** Edit controller extension to describe the Plug-in structure.
97 \ingroup vstIPlug vst300
98 - [plug imp]
99 - [extends IEditController]
100 - [released: 3.0.0]
101 102 IUnitInfo describes the internal structure of the Plug-in.
103 - The root unit is the component itself, so getUnitCount must return 1 at least.
104 - The root unit id has to be 0 (kRootUnitId).
105 - Each unit can reference one program list - this reference must not change.
106 - Each unit using a program list, references one program of the list.
107 108 \see \ref vst3Units, IUnitHandler */109 interfaceIUnitInfo: FUnknown110 {
111 public:
112 nothrow:
113 @nogc:
114 /** Returns the flat count of units. */115 int32getUnitCount ();
116 117 /** Gets UnitInfo for a given index in the flat list of unit. */118 tresultgetUnitInfo (int32unitIndex, refUnitInfoinfo/*out*/);
119 120 /** Component intern program structure. */121 /** Gets the count of Program List. */122 int32getProgramListCount ();
123 124 /** Gets for a given index the Program List Info. */125 tresultgetProgramListInfo (int32listIndex, refProgramListInfoinfo/*out*/);
126 127 /** Gets for a given program list ID and program index its program name. */128 tresultgetProgramName (ProgramListIDlistId, int32programIndex, String128* name/*out*/);
129 130 /** Gets for a given program list ID, program index and attributeId the associated attribute value. */131 tresultgetProgramInfo (ProgramListIDlistId, int32programIndex,
132 const(wchar)* attributeId/*in*/, String128* attributeValue/*out*/);
133 134 /** Returns kResultTrue if the given program index of a given program list ID supports PitchNames. */135 tresulthasProgramPitchNames (ProgramListIDlistId, int32programIndex);
136 137 /** Gets the PitchName for a given program list ID, program index and pitch.
138 If PitchNames are changed the Plug-in should inform the host with IUnitHandler::notifyProgramListChange. */139 tresultgetProgramPitchName (ProgramListIDlistId, int32programIndex,
140 int16midiPitch, String128* name/*out*/);
141 142 // units selection --------------------143 /** Gets the current selected unit. */144 UnitIDgetSelectedUnit ();
145 146 /** Sets a new selected unit. */147 tresultselectUnit (UnitIDunitId);
148 149 /** Gets the according unit if there is an unambiguous relation between a channel or a bus and a unit.
150 This method mainly is intended to find out which unit is related to a given MIDI input channel. */151 tresultgetUnitByBus (MediaTypetype, BusDirectiondir, int32busIndex,
152 int32channel, refUnitIDunitId/*out*/);
153 154 /** Receives a preset data stream.
155 - If the component supports program list data (IProgramListData), the destination of the data
156 stream is the program specified by list-Id and program index (first and second parameter)
157 - If the component supports unit data (IUnitData), the destination is the unit specified by the first
158 parameter - in this case parameter programIndex is < 0). */159 tresultsetUnitProgramData (int32listOrUnitId, int32programIndex, IBStreamdata);
160 161 162 __gsharedimmutableTUIDiid = INLINE_UID( 0x3D4BD6B5, 0x913A4FD2, 0xA886E768, 0xA5EB92C1);
163 }
164 165 /+
166 167 /** Component extension to access program list data.
168 \ingroup vstIPlug vst300
169 - [plug imp]
170 - [extends IComponent]
171 - [released: 3.0.0]
172 173 A component can either support program list data via this interface or
174 unit preset data (IUnitData), but not both!
175 176 \see \ref vst3UnitPrograms */
177 178 class IProgramListData: public FUnknown
179 {
180 public:
181 182 /** Returns kResultTrue if the given Program List ID supports Program Data. */
183 virtual tresult PLUGIN_API programDataSupported (ProgramListID listId) = 0;
184 185 /** Gets for a given program list ID and program index the program Data. */
186 virtual tresult PLUGIN_API getProgramData (ProgramListID listId, int32 programIndex, IBStream* data) = 0;
187 188 /** Sets for a given program list ID and program index a program Data. */
189 virtual tresult PLUGIN_API setProgramData (ProgramListID listId, int32 programIndex, IBStream* data) = 0;
190 191 192 static const FUID iid;
193 };
194 195 DECLARE_CLASS_IID (IProgramListData, 0x8683B01F, 0x7B354F70, 0xA2651DEC, 0x353AF4FF)
196 197 198 /** Component extension to access unit data.
199 \ingroup vstIPlug vst300
200 - [plug imp]
201 - [extends IComponent]
202 - [released: 3.0.0]
203 204 A component can either support unit preset data via this interface or
205 program list data (IProgramListData), but not both!
206 207 \see \ref vst3UnitPrograms */
208 209 class IUnitData: public FUnknown
210 {
211 public:
212 213 /** Returns kResultTrue if the specified unit supports export and import of preset data. */
214 virtual tresult PLUGIN_API unitDataSupported (UnitID unitID) = 0;
215 216 /** Gets the preset data for the specified unit. */
217 virtual tresult PLUGIN_API getUnitData (UnitID unitId, IBStream* data) = 0;
218 219 /** Sets the preset data for the specified unit. */
220 virtual tresult PLUGIN_API setUnitData (UnitID unitId, IBStream* data) = 0;
221 222 223 static const FUID iid;
224 };
225 226 DECLARE_CLASS_IID (IUnitData, 0x6C389611, 0xD391455D, 0xB870B833, 0x94A0EFDD)
227 228 +/