DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit 259ab6369c23b3934fba4eca743da00b68ff8501
parent a4c9398d0841d5bede808f3ef695ac2b2c661925
Author: falkTX <falktx@gmail.com>
Date:   Sat,  4 Aug 2018 10:57:42 +0200

Use new vestige.h
Closes #60

Diffstat:
Mdistrho/src/DistrhoPluginVST.cpp | 45+++++++++++++--------------------------------
Ddistrho/src/vestige/aeffectx.h | 275-------------------------------------------------------------------------------
Adistrho/src/vestige/vestige.h | 336+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 349 insertions(+), 307 deletions(-)

diff --git a/distrho/src/DistrhoPluginVST.cpp b/distrho/src/DistrhoPluginVST.cpp @@ -41,7 +41,7 @@ #include <string> #ifdef VESTIGE_HEADER -# include "vestige/aeffectx.h" +# include "vestige/vestige.h" #define effFlagsProgramChunks (1 << 5) #define effSetProgramName 4 #define effGetParamLabel 6 @@ -51,7 +51,6 @@ #define effCanBeAutomated 26 #define effGetProgramNameIndexed 29 #define effGetPlugCategory 35 -#define effIdle 53 #define effEditKeyDown 59 #define effEditKeyUp 60 #define kPlugCategEffect 1 @@ -1066,17 +1065,10 @@ struct VstObject { PluginVst* plugin; }; -#ifdef VESTIGE_HEADER -# define validObject effect != nullptr && effect->ptr3 != nullptr -# define validPlugin effect != nullptr && effect->ptr3 != nullptr && ((VstObject*)effect->ptr3)->plugin != nullptr -# define vstObjectPtr (VstObject*)effect->ptr3 -#else -# define validObject effect != nullptr && effect->object != nullptr -# define validPlugin effect != nullptr && effect->object != nullptr && ((VstObject*)effect->object)->plugin != nullptr -# define vstObjectPtr (VstObject*)effect->object -#endif - -#define pluginPtr (vstObjectPtr)->plugin +#define validObject effect != nullptr && effect->object != nullptr +#define validPlugin effect != nullptr && effect->object != nullptr && ((VstObject*)effect->object)->plugin != nullptr +#define vstObjectPtr (VstObject*)effect->object +#define pluginPtr (vstObjectPtr)->plugin static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t index, intptr_t value, void* ptr, float opt) { @@ -1144,11 +1136,7 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t /* This code invalidates the object created in VSTPluginMain * Probably not safe against all hosts */ obj->audioMaster = nullptr; -# ifdef VESTIGE_HEADER - effect->ptr3 = nullptr; -# else - vstObjectPtr = nullptr; -# endif + effect->object = nullptr; delete obj; #endif @@ -1172,14 +1160,14 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t return 1; } return 0; - + case effGetParameterProperties: if (ptr != nullptr && index < static_cast<int32_t>(plugin.getParameterCount())) { if (VstParameterProperties* const properties = (VstParameterProperties*)ptr) { memset(properties, 0, sizeof(VstParameterProperties)); - + const uint32_t hints = plugin.getParameterHints(index); if (hints & kParameterIsOutput) @@ -1189,7 +1177,7 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t { properties->flags |= kVstParameterIsSwitch; } - + if (hints & kParameterIsInteger) { properties->flags |= kVstParameterUsesIntegerMinMax; @@ -1208,7 +1196,7 @@ static intptr_t vst_dispatcherCallback(AEffect* effect, int32_t opcode, int32_t } } return 0; - + case effGetPlugCategory: #if DISTRHO_PLUGIN_IS_SYNTH return kPlugCategSynth; @@ -1315,12 +1303,7 @@ const AEffect* VSTPluginMain(audioMasterCallback audioMaster) // vst fields effect->magic = kEffectMagic; effect->uniqueID = plugin->getUniqueId(); -#ifdef VESTIGE_HEADER - int32_t* const version = (int32_t*)&effect->unknown1; - *version = plugin->getVersion(); -#else - effect->version = plugin->getVersion(); -#endif + effect->version = plugin->getVersion(); // VST doesn't support parameter outputs. we can fake them, but it is a hack. Disabled by default. #ifdef DPF_VST_SHOW_PARAMETER_OUTPUTS @@ -1371,11 +1354,9 @@ const AEffect* VSTPluginMain(audioMasterCallback audioMaster) VstObject* const obj(new VstObject()); obj->audioMaster = audioMaster; obj->plugin = nullptr; -#ifdef VESTIGE_HEADER - effect->ptr3 = obj; -#else + + // done effect->object = obj; -#endif return effect; } diff --git a/distrho/src/vestige/aeffectx.h b/distrho/src/vestige/aeffectx.h @@ -1,275 +0,0 @@ -/* - * 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. - * - */ -#include <stdint.h> -#ifndef _AEFFECTX_H -#define _AEFFECTX_H - -#define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \ - ( ( (int) b ) << 16 ) | \ - ( ( (int) c ) << 8 ) | \ - ( ( (int) d ) << 0 ) ) - -#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 -#define effFlagsCanReplacing (1 << 4) // very likely -#define effFlagsIsSynth (1 << 8) // currently unused - -#define effOpen 0 -#define effClose 1 // currently unused -#define effSetProgram 2 // currently unused -#define effGetProgram 3 // currently unused -#define effGetProgramName 5 // currently unused -#define effGetParamName 8 // currently unused -#define effSetSampleRate 10 -#define effSetBlockSize 11 -#define effMainsChanged 12 -#define effEditGetRect 13 -#define effEditOpen 14 -#define effEditClose 15 -#define effEditIdle 19 -#define effEditTop 20 -#define effProcessEvents 25 -#define effGetEffectName 45 -#define effGetVendorString 47 -#define effGetProductString 48 -#define effGetVendorVersion 49 -#define effCanDo 51 // currently unused -/* from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ -#define effGetParameterProperties 56 -#define effGetVstVersion 58 // currently unused - -#define kEffectMagic (CCONST( 'V', 's', 't', 'P' )) -#define kVstLangEnglish 1 -#define kVstMidiType 1 - -struct RemoteVstPlugin; - -#define kVstTransportPlaying (1 << 1) - -#define kVstNanosValid (1 << 8) -#define kVstPpqPosValid (1 << 9) -#define kVstTempoValid (1 << 10) -#define kVstBarsValid (1 << 11) -#define kVstCyclePosValid (1 << 12) -#define kVstTimeSigValid (1 << 13) -#define kVstSmpteValid (1 << 14) -#define kVstClockValid (1 << 15) - -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; -}; - -typedef struct _VstMidiEvent VstMidiEvent; - - -struct _VstEvent -{ - char dump[sizeof (VstMidiEvent)]; - -}; - -typedef struct _VstEvent VstEvent; - -struct _VstEvents -{ - // 00 - int numEvents; - // 04 - void *reserved; - // 08 - VstEvent * events[2]; -}; - -typedef struct _VstEvents VstEvents; - -/* this struct taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ -struct _VstParameterProperties -{ - float stepFloat; - float smallStepFloat; - float largeStepFloat; - char label[64]; - int32_t flags; - int32_t minInteger; - int32_t maxInteger; - int32_t stepInteger; - int32_t largeStepInteger; - char shortLabel[8]; -}; - -typedef struct _VstParameterProperties VstParameterProperties; - -/* this enum taken from http://asseca.com/vst-24-specs/efGetParameterProperties.html */ -enum VstParameterFlags -{ - kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */ - kVstParameterUsesIntegerMinMax = 1 << 1, /* minInteger, maxInteger valid */ - kVstParameterUsesFloatStep = 1 << 2, /* stepFloat, smallStepFloat, largeStepFloat valid */ - kVstParameterUsesIntStep = 1 << 3, /* stepInteger, largeStepInteger valid */ - kVstParameterSupportsDisplayIndex = 1 << 4, /* displayIndex valid */ - kVstParameterSupportsDisplayCategory = 1 << 5, /* category, etc. valid */ - kVstParameterCanRamp = 1 << 6 /* set if parameter value can ramp up/down */ -}; - -struct _AEffect -{ - // Never use virtual functions!!! - // 00-03 - int magic; - // dispatcher 04-07 - intptr_t (* dispatcher) (struct _AEffect *, int, int, intptr_t, 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 *ptr1; - void *ptr2; - // Zeroes 2c-2f 30-33 34-37 38-3b - char empty3[4 + 4 + 4]; - // 1.0f 3c-3f - float unkown_float; - // An object? pointer 40-43 - void *ptr3; - // Zeroes 44-47 - void *user; - // Id 48-4b - int32_t uniqueID; - // Don't know 4c-4f - char unknown1[4]; - // processReplacing 50-53 - void (* processReplacing) (struct _AEffect *, float **, float **, int); -}; - -typedef struct _AEffect AEffect; - -typedef struct _VstTimeInfo -{ - /* info from online documentation of VST provided by Steinberg */ - - double samplePos; - double sampleRate; - double nanoSeconds; - double ppqPos; - double tempo; - double barStartPos; - double cycleStartPos; - double cycleEndPos; - int32_t timeSigNumerator; - int32_t timeSigDenominator; - int32_t smpteOffset; - int32_t smpteFrameRate; - int32_t samplesToNextClock; - int32_t flags; - -} VstTimeInfo; - -typedef intptr_t (* audioMasterCallback) (AEffect *, int32_t, int32_t, intptr_t, void *, float); - -#endif diff --git a/distrho/src/vestige/vestige.h b/distrho/src/vestige/vestige.h @@ -0,0 +1,336 @@ +/* + * IMPORTANT: The author of DPF has no connection with the + * author of the VeSTige VST-compatibility header, has had no + * involvement in its creation. + * + * The VeSTige header is included in this package in the good-faith + * belief that it has been cleanly and legally reverse engineered + * without reference to the official VST SDK and without its + * developer(s) having agreed to the VST SDK license agreement. + */ + +/* + * simple header to allow VeSTige compilation and eventually work + * + * Copyright (c) 2006 Javier Serrano Polo <jasp00/at/users.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. + * + */ +#include <stdint.h> +#ifndef _VESTIGE_H +#define _VESTIGE_H + +#define CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \ + ( ( (int) b ) << 16 ) | \ + ( ( (int) c ) << 8 ) | \ + ( ( (int) d ) << 0 ) ) + +#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 +#define effFlagsCanReplacing (1 << 4) // very likely +#define effFlagsIsSynth (1 << 8) // currently unused + +#define effOpen 0 +#define effClose 1 +#define effSetProgram 2 +#define effGetProgram 3 +#define effGetProgramName 5 +#define effGetParamName 8 +#define effSetSampleRate 10 +#define effSetBlockSize 11 +#define effMainsChanged 12 +#define effEditGetRect 13 +#define effEditOpen 14 +#define effEditClose 15 +#define effEditIdle 19 +#define effEditTop 20 +#define effProcessEvents 25 +#define effGetPlugCategory 35 +#define effGetEffectName 45 +#define effGetVendorString 47 +#define effGetProductString 48 +#define effGetVendorVersion 49 +#define effCanDo 51 +#define effIdle 53 +#define effGetParameterProperties 56 +#define effGetVstVersion 58 +#define effShellGetNextPlugin 70 +#define effStartProcess 71 +#define effStopProcess 72 + +#define effBeginSetProgram 67 +#define effEndSetProgram 68 + +#ifdef WORDS_BIGENDIAN +// "VstP" +#define kEffectMagic 0x50747356 +#else +// "PtsV" +#define kEffectMagic 0x56737450 +#endif + +#define kVstLangEnglish 1 +#define kVstMidiType 1 + +struct RemoteVstPlugin; + +#define kVstTransportChanged 1 +#define kVstTransportPlaying (1 << 1) +#define kVstTransportCycleActive (1 << 2) +#define kVstTransportRecording (1 << 3) + +#define kVstAutomationWriting (1 << 6) +#define kVstAutomationReading (1 << 7) + +#define kVstNanosValid (1 << 8) +#define kVstPpqPosValid (1 << 9) +#define kVstTempoValid (1 << 10) +#define kVstBarsValid (1 << 11) +#define kVstCyclePosValid (1 << 12) +#define kVstTimeSigValid (1 << 13) +#define kVstSmpteValid (1 << 14) +#define kVstClockValid (1 << 15) + +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; +}; + +typedef struct _VstMidiEvent VstMidiEvent; + + +struct _VstEvent +{ + char dump[sizeof (VstMidiEvent)]; + +}; + +typedef struct _VstEvent VstEvent; + +struct _VstEvents +{ + // 00 + int numEvents; + // 04 + void *reserved; + // 08 + VstEvent * events[2]; +}; + +enum Vestige2StringConstants +{ + VestigeMaxNameLen = 64, + VestigeMaxLabelLen = 64, + VestigeMaxShortLabelLen = 8, + VestigeMaxCategLabelLen = 24, + VestigeMaxFileNameLen = 100 +}; + + +enum VstPlugCategory +{ + kPlugCategUnknown = 0, + kPlugCategEffect, + kPlugCategSynth, + kPlugCategAnalysis, + kPlugCategMastering, + kPlugCategSpacializer, + kPlugCategRoomFx, + kPlugSurroundFx, + kPlugCategRestoration, + kPlugCategOfflineProcess, + kPlugCategShell, + kPlugCategGenerator, + kPlugCategMaxCount +}; + +typedef struct _VstEvents VstEvents; + +struct _VstParameterProperties +{ + float stepFloat; /* float step */ + float smallStepFloat; /* small float step */ + float largeStepFloat; /* large float step */ + char label[VestigeMaxLabelLen]; /* parameter label */ + int32_t flags; /* @see VstParameterFlags */ + int32_t minInteger; /* integer minimum */ + int32_t maxInteger; /* integer maximum */ + int32_t stepInteger; /* integer step */ + int32_t largeStepInteger; /* large integer step */ + char shortLabel[VestigeMaxShortLabelLen]; /* short label, recommended: 6 + delimiter */ + int16_t displayIndex; /* index where this parameter should be displayed (starting with 0) */ + int16_t category; /* 0: no category, else group index + 1 */ + int16_t numParametersInCategory; /* number of parameters in category */ + int16_t reserved; /* zero */ + char categoryLabel[VestigeMaxCategLabelLen]; /* category label, e.g. "Osc 1" */ + char future[16]; /* reserved for future use */ +}; + +typedef struct _VstParameterProperties VstParameterProperties; + +enum VstParameterFlags +{ + kVstParameterIsSwitch = 1 << 0, /* parameter is a switch (on/off) */ + kVstParameterUsesIntegerMinMax = 1 << 1, /* minInteger, maxInteger valid */ + kVstParameterUsesFloatStep = 1 << 2, /* stepFloat, smallStepFloat, largeStepFloat valid */ + kVstParameterUsesIntStep = 1 << 3, /* stepInteger, largeStepInteger valid */ + kVstParameterSupportsDisplayIndex = 1 << 4, /* displayIndex valid */ + kVstParameterSupportsDisplayCategory = 1 << 5, /* category, etc. valid */ + kVstParameterCanRamp = 1 << 6 /* set if parameter value can ramp up/down */ +}; + +struct _AEffect +{ + // Never use virtual functions!!! + // 00-03 + int magic; + // dispatcher 04-07 + intptr_t (* dispatcher) (struct _AEffect *, int, int, intptr_t, 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 *ptr1; + void *ptr2; + int initialDelay; + // Zeroes 30-33 34-37 38-3b + char empty2[4 + 4]; + // 1.0f 3c-3f + float unkown_float; + // An object? pointer 40-43 + void *object; + // Zeroes 44-47 + void *user; + // Id 48-4b + int32_t uniqueID; + // plugin version 4c-4f + int32_t version; + // processReplacing 50-53 + void (* processReplacing) (struct _AEffect *, float **, float **, int); +}; + +typedef struct _AEffect AEffect; + +typedef struct _VstTimeInfo +{ + /* info from online documentation of VST provided by Steinberg */ + + double samplePos; + double sampleRate; + double nanoSeconds; + double ppqPos; + double tempo; + double barStartPos; + double cycleStartPos; + double cycleEndPos; + int32_t timeSigNumerator; + int32_t timeSigDenominator; + int32_t smpteOffset; + int32_t smpteFrameRate; + int32_t samplesToNextClock; + int32_t flags; + +} VstTimeInfo; + +typedef intptr_t (* audioMasterCallback) (AEffect *, int32_t, int32_t, intptr_t, void *, float); + +#endif