vestige-based VST support, back-ported from 2.0-ongoing
[ardour.git] / libs / fst / vestige / aeffectx.h
diff --git a/libs/fst/vestige/aeffectx.h b/libs/fst/vestige/aeffectx.h
new file mode 100644 (file)
index 0000000..790c93e
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+ * aeffectx.h - simple header to allow VeSTige compilation and eventually work
+ *
+ * Copyright (c) 2006 Javier Serrano Polo <jasp00/at/users.sourceforge.net>
+ * 
+ * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program (see COPYING); if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ */
+
+
+#ifndef _AEFFECTX_H
+#define _AEFFECTX_H
+
+
+#define audioMasterAutomate 0
+#define audioMasterVersion 1
+#define audioMasterCurrentId 2
+#define audioMasterIdle 3
+#define audioMasterPinConnected 4
+// unsupported? 5
+#define audioMasterWantMidi 6
+#define audioMasterGetTime 7
+#define audioMasterProcessEvents 8
+#define audioMasterSetTime 9
+#define audioMasterTempoAt 10
+#define audioMasterGetNumAutomatableParameters 11
+#define audioMasterGetParameterQuantization 12
+#define audioMasterIOChanged 13
+#define audioMasterNeedIdle 14
+#define audioMasterSizeWindow 15
+#define audioMasterGetSampleRate 16
+#define audioMasterGetBlockSize 17
+#define audioMasterGetInputLatency 18
+#define audioMasterGetOutputLatency 19
+#define audioMasterGetPreviousPlug 20
+#define audioMasterGetNextPlug 21
+#define audioMasterWillReplaceOrAccumulate 22
+#define audioMasterGetCurrentProcessLevel 23
+#define audioMasterGetAutomationState 24
+#define audioMasterOfflineStart 25
+#define audioMasterOfflineRead 26
+#define audioMasterOfflineWrite 27
+#define audioMasterOfflineGetCurrentPass 28
+#define audioMasterOfflineGetCurrentMetaPass 29
+#define audioMasterSetOutputSampleRate 30
+// unsupported? 31
+#define audioMasterGetSpeakerArrangement 31 // deprecated in 2.4?
+#define audioMasterGetVendorString 32
+#define audioMasterGetProductString 33
+#define audioMasterGetVendorVersion 34
+#define audioMasterVendorSpecific 35
+#define audioMasterSetIcon 36
+#define audioMasterCanDo 37
+#define audioMasterGetLanguage 38
+#define audioMasterOpenWindow 39
+#define audioMasterCloseWindow 40
+#define audioMasterGetDirectory 41
+#define audioMasterUpdateDisplay 42
+#define audioMasterBeginEdit 43
+#define audioMasterEndEdit 44
+#define audioMasterOpenFileSelector 45
+#define audioMasterCloseFileSelector 46// currently unused
+#define audioMasterEditFile 47// currently unused
+#define audioMasterGetChunkFile 48// currently unused
+#define audioMasterGetInputSpeakerArrangement 49 // currently unused
+
+#define effFlagsHasEditor 1
+// very likely
+#define effFlagsCanReplacing (1 << 4)
+// currently unused
+#define effFlagsIsSynth (1 << 8)
+
+#define effOpen 0
+//currently unused
+#define effClose 1
+// currently unused
+#define effSetProgram 2
+// currently unused
+#define effGetProgram 3
+// currently unused
+#define effGetProgramName 5
+#define effGetParamLabel 6
+// currently unused
+#define effGetParamName 8
+// this is a guess
+#define effSetSampleRate 10
+#define effSetBlockSize 11
+#define effMainsChanged 12
+#define effEditGetRect 13
+#define effEditOpen 14
+#define effEditClose 15
+#define effEditIdle 19
+#define effProcessEvents 25
+#define effGetEffectName 45
+// missing
+#define effGetParameterProperties 47
+#define effGetVendorString 47
+#define effGetProductString 48
+#define effGetVendorVersion 49
+// currently unused
+#define effCanDo 51
+// currently unused
+#define effGetVstVersion 58
+
+#ifdef WORDS_BIGENDIAN
+// "VstP"
+#define kEffectMagic 0x50747356
+#else
+// "PtsV"
+#define kEffectMagic 0x56737450
+#endif
+
+#define kVstLangEnglish 1
+#define kVstMidiType 1
+#define kVstTransportPlaying (1 << 1)
+#define kVstParameterUsesFloatStep (1 << 2)
+#define kVstTempoValid (1 << 10)
+#define kVstBarsValid (1 << 11)
+#define kVstTransportChanged 1
+
+typedef struct VstMidiEvent
+{
+       // 00
+       int type;
+       // 04
+       int byteSize;
+       // 08
+       int deltaFrames;
+       // 0c?
+       int flags;
+       // 10?
+       int noteLength;
+       // 14?
+       int noteOffset;
+       // 18
+       char midiData[4];
+       // 1c?
+       char detune;
+       // 1d?
+       char noteOffVelocity;
+       // 1e?
+       char reserved1;
+       // 1f?
+       char reserved2;
+
+} VstMidiEvent;
+
+
+
+
+typedef struct VstEvent
+{
+       char dump[sizeof( VstMidiEvent )];
+
+} VstEvent ;
+
+
+
+
+typedef struct VstEvents
+{
+       // 00
+       int numEvents;
+       // 04
+       int reserved;
+       // 08
+       VstEvent * events[];
+} VstEvents;
+
+
+
+
+// Not finished, neither really used
+typedef struct VstParameterProperties
+{
+       float stepFloat;
+       char label[64];
+       int flags;
+       int minInteger;
+       int maxInteger;
+       int stepInteger;
+       char shortLabel[8];
+       int category;
+       char categoryLabel[24];
+       char empty[128];
+
+} VstParameterProperties;
+
+
+
+
+typedef struct AEffect
+{
+       // Never use c++!!!
+       // 00-03
+       int magic;
+       // dispatcher 04-07
+       int (* dispatcher)( struct AEffect * , int , int , int , void * , float );
+       // process, quite sure 08-0b
+       void (* process)( struct AEffect * , float * * , float * * , int );
+       // setParameter 0c-0f
+       void (* setParameter)( struct AEffect * , int , float );
+       // getParameter 10-13
+       float (* getParameter)( struct AEffect * , int );
+       // programs 14-17
+       int numPrograms;
+       // Params 18-1b
+       int numParams;
+       // Input 1c-1f
+       int numInputs;
+       // Output 20-23
+       int numOutputs;
+       // flags 24-27
+       int flags;
+       // Fill somewhere 28-2b
+        void * user;
+       // Zeroes 2c-2f 30-33 34-37 38-3b
+       char empty3[4 + 4 + 4 + 4];
+       // 1.0f 3c-3f
+       float unkown_float;
+       // An object? pointer 40-43
+       char empty4[4];
+       // Zeroes 44-47
+       char empty5[4];
+       // Id 48-4b
+       char unused_id[4];
+       // Don't know 4c-4f
+       char unknown1[4];
+       // processReplacing 50-53
+       void (* processReplacing)( struct AEffect * , float * * , float * * , int );
+
+ int uniqueID;
+
+} AEffect;
+
+
+
+
+typedef struct VstTimeInfo
+{
+       // 00
+       double samplePos;
+       // 08
+       double sampleRate;
+       // unconfirmed 10 18
+       char empty1[8 + 8];
+       // 20?
+       double tempo;
+       // unconfirmed 28 30 38
+       char empty2[8 + 8 + 8];
+       // 40?
+       int timeSigNumerator;
+       // 44?
+       int timeSigDenominator;
+       // unconfirmed 48 4c 50
+       char empty3[4 + 4 + 4];
+       // 54
+       int flags;
+
+} VstTimeInfo;
+
+
+
+
+typedef long int (* audioMasterCallback)( AEffect * , long int , long int ,
+                                               long int , void * , float );
+// we don't use it, may be noise
+#define VSTCALLBACK
+
+
+
+
+#endif