vestige-based VST support, back-ported from 2.0-ongoing
[ardour.git] / libs / fst / 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
25
26 #ifndef _AEFFECTX_H
27 #define _AEFFECTX_H
28
29
30 #define audioMasterAutomate 0
31 #define audioMasterVersion 1
32 #define audioMasterCurrentId 2
33 #define audioMasterIdle 3
34 #define audioMasterPinConnected 4
35 // unsupported? 5
36 #define audioMasterWantMidi 6
37 #define audioMasterGetTime 7
38 #define audioMasterProcessEvents 8
39 #define audioMasterSetTime 9
40 #define audioMasterTempoAt 10
41 #define audioMasterGetNumAutomatableParameters 11
42 #define audioMasterGetParameterQuantization 12
43 #define audioMasterIOChanged 13
44 #define audioMasterNeedIdle 14
45 #define audioMasterSizeWindow 15
46 #define audioMasterGetSampleRate 16
47 #define audioMasterGetBlockSize 17
48 #define audioMasterGetInputLatency 18
49 #define audioMasterGetOutputLatency 19
50 #define audioMasterGetPreviousPlug 20
51 #define audioMasterGetNextPlug 21
52 #define audioMasterWillReplaceOrAccumulate 22
53 #define audioMasterGetCurrentProcessLevel 23
54 #define audioMasterGetAutomationState 24
55 #define audioMasterOfflineStart 25
56 #define audioMasterOfflineRead 26
57 #define audioMasterOfflineWrite 27
58 #define audioMasterOfflineGetCurrentPass 28
59 #define audioMasterOfflineGetCurrentMetaPass 29
60 #define audioMasterSetOutputSampleRate 30
61 // unsupported? 31
62 #define audioMasterGetSpeakerArrangement 31 // deprecated in 2.4?
63 #define audioMasterGetVendorString 32
64 #define audioMasterGetProductString 33
65 #define audioMasterGetVendorVersion 34
66 #define audioMasterVendorSpecific 35
67 #define audioMasterSetIcon 36
68 #define audioMasterCanDo 37
69 #define audioMasterGetLanguage 38
70 #define audioMasterOpenWindow 39
71 #define audioMasterCloseWindow 40
72 #define audioMasterGetDirectory 41
73 #define audioMasterUpdateDisplay 42
74 #define audioMasterBeginEdit 43
75 #define audioMasterEndEdit 44
76 #define audioMasterOpenFileSelector 45
77 #define audioMasterCloseFileSelector 46// currently unused
78 #define audioMasterEditFile 47// currently unused
79 #define audioMasterGetChunkFile 48// currently unused
80 #define audioMasterGetInputSpeakerArrangement 49 // currently unused
81
82 #define effFlagsHasEditor 1
83 // very likely
84 #define effFlagsCanReplacing (1 << 4)
85 // currently unused
86 #define effFlagsIsSynth (1 << 8)
87
88 #define effOpen 0
89 //currently unused
90 #define effClose 1
91 // currently unused
92 #define effSetProgram 2
93 // currently unused
94 #define effGetProgram 3
95 // currently unused
96 #define effGetProgramName 5
97 #define effGetParamLabel 6
98 // currently unused
99 #define effGetParamName 8
100 // this is a guess
101 #define effSetSampleRate 10
102 #define effSetBlockSize 11
103 #define effMainsChanged 12
104 #define effEditGetRect 13
105 #define effEditOpen 14
106 #define effEditClose 15
107 #define effEditIdle 19
108 #define effProcessEvents 25
109 #define effGetEffectName 45
110 // missing
111 #define effGetParameterProperties 47
112 #define effGetVendorString 47
113 #define effGetProductString 48
114 #define effGetVendorVersion 49
115 // currently unused
116 #define effCanDo 51
117 // currently unused
118 #define effGetVstVersion 58
119
120 #ifdef WORDS_BIGENDIAN
121 // "VstP"
122 #define kEffectMagic 0x50747356
123 #else
124 // "PtsV"
125 #define kEffectMagic 0x56737450
126 #endif
127
128 #define kVstLangEnglish 1
129 #define kVstMidiType 1
130 #define kVstTransportPlaying (1 << 1)
131 #define kVstParameterUsesFloatStep (1 << 2)
132 #define kVstTempoValid (1 << 10)
133 #define kVstBarsValid (1 << 11)
134 #define kVstTransportChanged 1
135
136 typedef struct VstMidiEvent
137 {
138         // 00
139         int type;
140         // 04
141         int byteSize;
142         // 08
143         int deltaFrames;
144         // 0c?
145         int flags;
146         // 10?
147         int noteLength;
148         // 14?
149         int noteOffset;
150         // 18
151         char midiData[4];
152         // 1c?
153         char detune;
154         // 1d?
155         char noteOffVelocity;
156         // 1e?
157         char reserved1;
158         // 1f?
159         char reserved2;
160
161 } VstMidiEvent;
162
163
164
165
166 typedef struct VstEvent
167 {
168         char dump[sizeof( VstMidiEvent )];
169
170 } VstEvent ;
171
172
173
174
175 typedef struct VstEvents
176 {
177         // 00
178         int numEvents;
179         // 04
180         int reserved;
181         // 08
182         VstEvent * events[];
183 } VstEvents;
184
185
186
187
188 // Not finished, neither really used
189 typedef struct VstParameterProperties
190 {
191         float stepFloat;
192         char label[64];
193         int flags;
194         int minInteger;
195         int maxInteger;
196         int stepInteger;
197         char shortLabel[8];
198         int category;
199         char categoryLabel[24];
200         char empty[128];
201
202 } VstParameterProperties;
203
204
205
206
207 typedef struct AEffect
208 {
209         // Never use c++!!!
210         // 00-03
211         int magic;
212         // dispatcher 04-07
213         int (* dispatcher)( struct AEffect * , int , int , int , void * , float );
214         // process, quite sure 08-0b
215         void (* process)( struct AEffect * , float * * , float * * , int );
216         // setParameter 0c-0f
217         void (* setParameter)( struct AEffect * , int , float );
218         // getParameter 10-13
219         float (* getParameter)( struct AEffect * , int );
220         // programs 14-17
221         int numPrograms;
222         // Params 18-1b
223         int numParams;
224         // Input 1c-1f
225         int numInputs;
226         // Output 20-23
227         int numOutputs;
228         // flags 24-27
229         int flags;
230         // Fill somewhere 28-2b
231         void * user;
232         // Zeroes 2c-2f 30-33 34-37 38-3b
233         char empty3[4 + 4 + 4 + 4];
234         // 1.0f 3c-3f
235         float unkown_float;
236         // An object? pointer 40-43
237         char empty4[4];
238         // Zeroes 44-47
239         char empty5[4];
240         // Id 48-4b
241         char unused_id[4];
242         // Don't know 4c-4f
243         char unknown1[4];
244         // processReplacing 50-53
245         void (* processReplacing)( struct AEffect * , float * * , float * * , int );
246
247  int uniqueID;
248
249 } AEffect;
250
251
252
253
254 typedef struct VstTimeInfo
255 {
256         // 00
257         double samplePos;
258         // 08
259         double sampleRate;
260         // unconfirmed 10 18
261         char empty1[8 + 8];
262         // 20?
263         double tempo;
264         // unconfirmed 28 30 38
265         char empty2[8 + 8 + 8];
266         // 40?
267         int timeSigNumerator;
268         // 44?
269         int timeSigDenominator;
270         // unconfirmed 48 4c 50
271         char empty3[4 + 4 + 4];
272         // 54
273         int flags;
274
275 } VstTimeInfo;
276
277
278
279
280 typedef long int (* audioMasterCallback)( AEffect * , long int , long int ,
281                                                 long int , void * , float );
282 // we don't use it, may be noise
283 #define VSTCALLBACK
284
285
286
287
288 #endif