move gui_changed() signal from Route to Stripable
[ardour.git] / libs / ardour / ardour / vestige / aeffectx.h
1 /*
2  * aeffectx.h - simple header to allow VeSTige compilation and eventually work
3  *
4  * Copyright (c) 2006 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
5  *
6  * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public
19  * License along with this program (see COPYING); if not, write to the
20  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301 USA.
22  *
23  */
24 #include <stdint.h>
25 #ifndef _AEFFECTX_H
26 #define _AEFFECTX_H
27
28 #define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) |             \
29                                 ( ( (int) b ) << 16 ) |         \
30                                 ( ( (int) c ) << 8 ) |          \
31                                 ( ( (int) d ) << 0 ) )
32
33 #define audioMasterAutomate 0
34 #define audioMasterVersion 1
35 #define audioMasterCurrentId 2
36 #define audioMasterIdle 3
37 #define audioMasterPinConnected 4
38 // unsupported? 5
39 #define audioMasterWantMidi 6
40 #define audioMasterGetTime 7
41 #define audioMasterProcessEvents 8
42 #define audioMasterSetTime 9
43 #define audioMasterTempoAt 10
44 #define audioMasterGetNumAutomatableParameters 11
45 #define audioMasterGetParameterQuantization 12
46 #define audioMasterIOChanged 13
47 #define audioMasterNeedIdle 14
48 #define audioMasterSizeWindow 15
49 #define audioMasterGetSampleRate 16
50 #define audioMasterGetBlockSize 17
51 #define audioMasterGetInputLatency 18
52 #define audioMasterGetOutputLatency 19
53 #define audioMasterGetPreviousPlug 20
54 #define audioMasterGetNextPlug 21
55 #define audioMasterWillReplaceOrAccumulate 22
56 #define audioMasterGetCurrentProcessLevel 23
57 #define audioMasterGetAutomationState 24
58 #define audioMasterOfflineStart 25
59 #define audioMasterOfflineRead 26
60 #define audioMasterOfflineWrite 27
61 #define audioMasterOfflineGetCurrentPass 28
62 #define audioMasterOfflineGetCurrentMetaPass 29
63 #define audioMasterSetOutputSampleRate 30
64 // unsupported? 31
65 #define audioMasterGetSpeakerArrangement 31 // deprecated in 2.4?
66 #define audioMasterGetVendorString 32
67 #define audioMasterGetProductString 33
68 #define audioMasterGetVendorVersion 34
69 #define audioMasterVendorSpecific 35
70 #define audioMasterSetIcon 36
71 #define audioMasterCanDo 37
72 #define audioMasterGetLanguage 38
73 #define audioMasterOpenWindow 39
74 #define audioMasterCloseWindow 40
75 #define audioMasterGetDirectory 41
76 #define audioMasterUpdateDisplay 42
77 #define audioMasterBeginEdit 43
78 #define audioMasterEndEdit 44
79 #define audioMasterOpenFileSelector 45
80 #define audioMasterCloseFileSelector 46 // currently unused
81 #define audioMasterEditFile 47 // currently unused
82 #define audioMasterGetChunkFile 48 // currently unused
83 #define audioMasterGetInputSpeakerArrangement 49 // currently unused
84
85 #define effFlagsHasEditor 1
86 #define effFlagsCanReplacing (1 << 4) // very likely
87 #define effFlagsIsSynth (1 << 8) // currently unused
88
89 #define effOpen 0
90 #define effClose 1 // currently unused
91 #define effSetProgram 2 // currently unused
92 #define effGetProgram 3 // currently unused
93 #define effGetProgramName 5 // currently unused
94 #define effGetParamName 8 // currently unused
95 #define effSetSampleRate 10
96 #define effSetBlockSize 11
97 #define effMainsChanged 12
98 #define effEditGetRect 13
99 #define effEditOpen 14
100 #define effEditClose 15
101 #define effEditIdle 19
102 #define effEditTop 20
103 #define effProcessEvents 25
104 // the next one from http://asseca.com/vst-24-specs/index.html
105 #define effGetPlugCategory 35
106 #define effGetEffectName 45
107 #define effGetVendorString 47
108 #define effGetProductString 48
109 #define effGetVendorVersion 49
110 #define effCanDo 51 // currently unused
111 /* from http://asseca.com/vst-24-specs/efIdle.html */
112 #define effIdle 53
113 /* from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
114 #define effGetParameterProperties 56
115 #define effGetVstVersion 58 // currently unused
116 /* http://asseca.com/vst-24-specs/efShellGetNextPlugin.html */
117 #define effShellGetNextPlugin  70
118 /* The next two were gleaned from http://www.kvraudio.com/forum/printview.php?t=143587&start=0 */
119 #define effStartProcess 71
120 #define effStopProcess 72
121
122 #define effBeginSetProgram 67
123 #define effEndSetProgram 68
124
125 #ifdef WORDS_BIGENDIAN
126 // "VstP"
127 #define kEffectMagic 0x50747356
128 #else
129 // "PtsV"
130 #define kEffectMagic 0x56737450
131 #endif
132
133 #define kVstLangEnglish 1
134 #define kVstMidiType 1
135
136 struct RemoteVstPlugin;
137
138 #define kVstTransportChanged 1
139 #define kVstTransportPlaying (1 << 1)
140 #define kVstTransportCycleActive (1 << 2)
141 #define kVstTransportRecording (1 << 3)
142
143 #define kVstAutomationWriting (1 << 6)
144 #define kVstAutomationReading (1 << 7)
145
146 #define kVstNanosValid (1 << 8)
147 #define kVstPpqPosValid (1 << 9)
148 #define kVstTempoValid (1 << 10)
149 #define kVstBarsValid (1 << 11)
150 #define kVstCyclePosValid (1 << 12)
151 #define kVstTimeSigValid (1 << 13)
152 #define kVstSmpteValid (1 << 14)
153 #define kVstClockValid (1 << 15)
154
155 struct _VstMidiEvent
156 {
157         // 00
158         int type;
159         // 04
160         int byteSize;
161         // 08
162         int deltaFrames;
163         // 0c?
164         int flags;
165         // 10?
166         int noteLength;
167         // 14?
168         int noteOffset;
169         // 18
170         char midiData[4];
171         // 1c?
172         char detune;
173         // 1d?
174         char noteOffVelocity;
175         // 1e?
176         char reserved1;
177         // 1f?
178         char reserved2;
179 };
180
181 typedef struct _VstMidiEvent VstMidiEvent;
182
183
184 struct _VstEvent
185 {
186         char dump[sizeof (VstMidiEvent)];
187
188 };
189
190 typedef struct _VstEvent VstEvent;
191
192 struct _VstEvents
193 {
194         // 00
195         int numEvents;
196         // 04
197         void *reserved;
198         // 08
199         VstEvent * events[];
200 };
201
202 /* constants from http://www.rawmaterialsoftware.com/juceforum/viewtopic.php?t=3740&sid=183f74631fee71a493316735e2b9f28b */
203
204 enum Vestige2StringConstants
205 {
206         VestigeMaxNameLen       = 64,
207         VestigeMaxLabelLen      = 64,
208         VestigeMaxShortLabelLen = 8,
209         VestigeMaxCategLabelLen = 24,
210         VestigeMaxFileNameLen   = 100
211 };
212
213
214 /* constants from http://asseca.com/vst-24-specs/efGetPlugCategory.html */
215
216 enum VstPlugCategory
217 {
218         kPlugCategUnknown = 0,
219         kPlugCategEffect,
220         kPlugCategSynth,
221         kPlugCategAnalysis,
222         kPlugCategMastering,
223         kPlugCategSpacializer,
224         kPlugCategRoomFx,
225         kPlugSurroundFx,
226         kPlugCategRestoration,
227         kPlugCategOfflineProcess,
228         kPlugCategShell,
229         kPlugCategGenerator,
230         kPlugCategMaxCount
231 };
232
233 typedef struct _VstEvents VstEvents;
234
235 /* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
236 struct _VstParameterProperties
237 {
238         float stepFloat;              /* float step */
239         float smallStepFloat;         /* small float step */
240         float largeStepFloat;         /* large float step */
241         char label[VestigeMaxLabelLen];  /* parameter label */
242         int32_t flags;               /* @see VstParameterFlags */
243         int32_t minInteger;          /* integer minimum */
244         int32_t maxInteger;          /* integer maximum */
245         int32_t stepInteger;         /* integer step */
246         int32_t largeStepInteger;    /* large integer step */
247         char shortLabel[VestigeMaxShortLabelLen]; /* short label, recommended: 6 + delimiter */
248         int16_t displayIndex;        /* index where this parameter should be displayed (starting with 0) */
249         int16_t category;            /* 0: no category, else group index + 1 */
250         int16_t numParametersInCategory; /* number of parameters in category */
251         int16_t reserved;            /* zero */
252         char categoryLabel[VestigeMaxCategLabelLen]; /* category label, e.g. "Osc 1"  */
253         char future[16];              /* reserved for future use */
254 };
255
256 typedef struct _VstParameterProperties VstParameterProperties;
257
258 /* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */
259 enum VstParameterFlags
260 {
261         kVstParameterIsSwitch                = 1 << 0,  /* parameter is a switch (on/off) */
262         kVstParameterUsesIntegerMinMax       = 1 << 1,  /* minInteger, maxInteger valid */
263         kVstParameterUsesFloatStep           = 1 << 2,  /* stepFloat, smallStepFloat, largeStepFloat valid */
264         kVstParameterUsesIntStep             = 1 << 3,  /* stepInteger, largeStepInteger valid */
265         kVstParameterSupportsDisplayIndex    = 1 << 4,  /* displayIndex valid */
266         kVstParameterSupportsDisplayCategory = 1 << 5,  /* category, etc. valid */
267         kVstParameterCanRamp                 = 1 << 6   /* set if parameter value can ramp up/down */
268 };
269
270 struct _AEffect
271 {
272         // Never use virtual functions!!!
273         // 00-03
274         int magic;
275         // dispatcher 04-07
276         intptr_t (* dispatcher) (struct _AEffect *, int, int, intptr_t, void *, float);
277         // process, quite sure 08-0b
278         void (* process) (struct _AEffect *, float **, float **, int);
279         // setParameter 0c-0f
280         void (* setParameter) (struct _AEffect *, int, float);
281         // getParameter 10-13
282         float (* getParameter) (struct _AEffect *, int);
283         // programs 14-17
284         int numPrograms;
285         // Params 18-1b
286         int numParams;
287         // Input 1c-1f
288         int numInputs;
289         // Output 20-23
290         int numOutputs;
291         // flags 24-27
292         int flags;
293         // Fill somewhere 28-2b
294         void *ptr1;
295         void *ptr2;
296         // Zeroes 2c-2f 30-33 34-37 38-3b
297         char empty3[4 + 4 + 4];
298         // 1.0f 3c-3f
299         float unkown_float;
300         // An object? pointer 40-43
301         void *ptr3;
302         // Zeroes 44-47
303         void *user;
304         // Id 48-4b
305         int32_t uniqueID;
306         // Don't know 4c-4f
307         char unknown1[4];
308         // processReplacing 50-53
309         void (* processReplacing) (struct _AEffect *, float **, float **, int);
310 };
311
312 typedef struct _AEffect AEffect;
313
314 typedef struct _VstTimeInfo
315 {
316     /* info from online documentation of VST provided by Steinberg */
317
318     double samplePos;
319     double sampleRate;
320     double nanoSeconds;
321     double ppqPos;
322     double tempo;
323     double barStartPos;
324     double cycleStartPos;
325     double cycleEndPos;
326     int32_t   timeSigNumerator;
327     int32_t   timeSigDenominator;
328     int32_t   smpteOffset;
329     int32_t   smpteFrameRate;
330     int32_t   samplesToNextClock;
331     int32_t   flags;
332
333 } VstTimeInfo;
334
335 typedef intptr_t (* audioMasterCallback) (AEffect *, int32_t, int32_t, intptr_t, void *, float);
336
337 #endif