|
- diff --git a/modules/juce_audio_processors/format_types/juce_VSTInterface.h b/modules/juce_audio_processors/format_types/juce_VSTInterface.h
- new file mode 100644
- index 000000000..58179be1a
- --- /dev/null
- +++ b/modules/juce_audio_processors/format_types/juce_VSTInterface.h
- @@ -0,0 +1,532 @@
- +/*
- + ==============================================================================
- +
- + This file is part of the JUCE library.
- + Copyright (c) 2017 - ROLI Ltd.
- +
- + JUCE is an open source library subject to commercial or open-source
- + licensing.
- +
- + By using JUCE, you agree to the terms of both the JUCE 5 End-User License
- + Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
- + 27th April 2017).
- +
- + End User License Agreement: www.juce.com/juce-5-licence
- + Privacy Policy: www.juce.com/juce-5-privacy-policy
- +
- + Or: You may also use this code under the terms of the GPL v3 (see
- + www.gnu.org/licenses).
- +
- + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- + DISCLAIMED.
- +
- + ==============================================================================
- +*/
- +
- +#ifndef JUCE_VSTINTERFACE_H_INCLUDED
- +#define JUCE_VSTINTERFACE_H_INCLUDED
- +
- +using namespace juce;
- +
- +#if JUCE_MSVC
- + #define VSTINTERFACECALL __cdecl
- + #pragma pack(push)
- + #pragma pack(8)
- +#elif JUCE_MAC || JUCE_IOS
- + #define VSTINTERFACECALL
- + #if JUCE_64BIT
- + #pragma options align=power
- + #else
- + #pragma options align=mac68k
- + #endif
- +#else
- + #define VSTINTERFACECALL
- + #pragma pack(push, 8)
- +#endif
- +
- +const int32 juceVstInterfaceVersion = 2400;
- +const int32 juceVstInterfaceIdentifier = 0x56737450; // The "magic" identifier in the SDK is 'VstP'.
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstEffectInterface
- +{
- + int32 interfaceIdentifier;
- + pointer_sized_int (VSTINTERFACECALL* dispatchFunction) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);
- + void (VSTINTERFACECALL* processAudioFunction) (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples);
- + void (VSTINTERFACECALL* setParameterValueFunction) (VstEffectInterface*, int32 parameterIndex, float value);
- + float (VSTINTERFACECALL* getParameterValueFunction) (VstEffectInterface*, int32 parameterIndex);
- + int32 numPrograms;
- + int32 numParameters;
- + int32 numInputChannels;
- + int32 numOutputChannels;
- + int32 flags;
- + pointer_sized_int hostSpace1;
- + pointer_sized_int hostSpace2;
- + int32 latency;
- + int32 deprecated1;
- + int32 deprecated2;
- + float deprecated3;
- + void* effectPointer;
- + void* userPointer;
- + int32 plugInIdentifier;
- + int32 plugInVersion;
- + void (VSTINTERFACECALL* processAudioInplaceFunction) (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples);
- + void (VSTINTERFACECALL* processDoubleAudioInplaceFunction) (VstEffectInterface*, double** inputs, double** outputs, int32 numSamples);
- + char emptySpace[56];
- +};
- +
- +typedef pointer_sized_int (VSTINTERFACECALL* VstHostCallback) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt);
- +
- +enum VstEffectInterfaceFlags
- +{
- + vstEffectFlagHasEditor = 1,
- + vstEffectFlagInplaceAudio = 16,
- + vstEffectFlagDataInChunks = 32,
- + vstEffectFlagIsSynth = 256,
- + vstEffectFlagInplaceDoubleAudio = 4096
- +};
- +
- +//==============================================================================
- +enum VstHostToPlugInOpcodes
- +{
- + plugInOpcodeOpen,
- + plugInOpcodeClose,
- + plugInOpcodeSetCurrentProgram,
- + plugInOpcodeGetCurrentProgram,
- + plugInOpcodeSetCurrentProgramName,
- + plugInOpcodeGetCurrentProgramName,
- + plugInOpcodeGetParameterLabel,
- + plugInOpcodeGetParameterText,
- + plugInOpcodeGetParameterName,
- + plugInOpcodeSetSampleRate = plugInOpcodeGetParameterName + 2,
- + plugInOpcodeSetBlockSize,
- + plugInOpcodeResumeSuspend,
- + plugInOpcodeGetEditorBounds,
- + plugInOpcodeOpenEditor,
- + plugInOpcodeCloseEditor,
- + plugInOpcodeDrawEditor,
- + plugInOpcodeGetMouse,
- + plugInOpcodeEditorIdle = plugInOpcodeGetMouse + 2,
- + plugInOpcodeeffEditorTop,
- + plugInOpcodeSleepEditor,
- + plugInOpcodeIdentify,
- + plugInOpcodeGetData,
- + plugInOpcodeSetData,
- + plugInOpcodePreAudioProcessingEvents,
- + plugInOpcodeIsParameterAutomatable,
- + plugInOpcodeParameterValueForText,
- + plugInOpcodeGetProgramName = plugInOpcodeParameterValueForText + 2,
- + plugInOpcodeConnectInput = plugInOpcodeGetProgramName + 2,
- + plugInOpcodeConnectOutput,
- + plugInOpcodeGetInputPinProperties,
- + plugInOpcodeGetOutputPinProperties,
- + plugInOpcodeGetPlugInCategory,
- + plugInOpcodeSetSpeakerConfiguration = plugInOpcodeGetPlugInCategory + 7,
- + plugInOpcodeSetBypass = plugInOpcodeSetSpeakerConfiguration + 2,
- + plugInOpcodeGetPlugInName,
- + plugInOpcodeGetManufacturerName = plugInOpcodeGetPlugInName + 2,
- + plugInOpcodeGetManufacturerProductName,
- + plugInOpcodeGetManufacturerVersion,
- + plugInOpcodeManufacturerSpecific,
- + plugInOpcodeCanPlugInDo,
- + plugInOpcodeGetTailSize,
- + plugInOpcodeIdle,
- + plugInOpcodeKeyboardFocusRequired = plugInOpcodeIdle + 4,
- + plugInOpcodeGetVstInterfaceVersion,
- + plugInOpcodeGetCurrentMidiProgram = plugInOpcodeGetVstInterfaceVersion + 5,
- + plugInOpcodeGetSpeakerArrangement = plugInOpcodeGetCurrentMidiProgram + 6,
- + plugInOpcodeNextPlugInUniqueID,
- + plugInOpcodeStartProcess,
- + plugInOpcodeStopProcess,
- + plugInOpcodeSetNumberOfSamplesToProcess,
- + plugInOpcodeSetSampleFloatType = plugInOpcodeSetNumberOfSamplesToProcess + 4,
- + pluginOpcodeGetNumMidiInputChannels,
- + pluginOpcodeGetNumMidiOutputChannels,
- + plugInOpcodeMaximum = pluginOpcodeGetNumMidiOutputChannels
- +};
- +
- +
- +enum VstPlugInToHostOpcodes
- +{
- + hostOpcodeParameterChanged,
- + hostOpcodeVstVersion,
- + hostOpcodeCurrentId,
- + hostOpcodeIdle,
- + hostOpcodePinConnected,
- + hostOpcodePlugInWantsMidi = hostOpcodePinConnected + 2,
- + hostOpcodeGetTimingInfo,
- + hostOpcodePreAudioProcessingEvents,
- + hostOpcodeSetTime,
- + hostOpcodeTempoAt,
- + hostOpcodeGetNumberOfAutomatableParameters,
- + hostOpcodeGetParameterInterval,
- + hostOpcodeIOModified,
- + hostOpcodeNeedsIdle,
- + hostOpcodeWindowSize,
- + hostOpcodeGetSampleRate,
- + hostOpcodeGetBlockSize,
- + hostOpcodeGetInputLatency,
- + hostOpcodeGetOutputLatency,
- + hostOpcodeGetPreviousPlugIn,
- + hostOpcodeGetNextPlugIn,
- + hostOpcodeWillReplace,
- + hostOpcodeGetCurrentAudioProcessingLevel,
- + hostOpcodeGetAutomationState,
- + hostOpcodeOfflineStart,
- + hostOpcodeOfflineReadSource,
- + hostOpcodeOfflineWrite,
- + hostOpcodeOfflineGetCurrentPass,
- + hostOpcodeOfflineGetCurrentMetaPass,
- + hostOpcodeSetOutputSampleRate,
- + hostOpcodeGetOutputSpeakerConfiguration,
- + hostOpcodeGetManufacturerName,
- + hostOpcodeGetProductName,
- + hostOpcodeGetManufacturerVersion,
- + hostOpcodeManufacturerSpecific,
- + hostOpcodeSetIcon,
- + hostOpcodeCanHostDo,
- + hostOpcodeGetLanguage,
- + hostOpcodeOpenEditorWindow,
- + hostOpcodeCloseEditorWindow,
- + hostOpcodeGetDirectory,
- + hostOpcodeUpdateView,
- + hostOpcodeParameterChangeGestureBegin,
- + hostOpcodeParameterChangeGestureEnd,
- +};
- +
- +//==============================================================================
- +enum VstProcessingSampleType
- +{
- + vstProcessingSampleTypeFloat,
- + vstProcessingSampleTypeDouble
- +};
- +
- +//==============================================================================
- +// These names must be identical to the Steinberg SDK so JUCE users can set
- +// exactly what they want.
- +enum VstPlugInCategory
- +{
- + kPlugCategUnknown,
- + kPlugCategEffect,
- + kPlugCategSynth,
- + kPlugCategAnalysis,
- + kPlugCategMastering,
- + kPlugCategSpacializer,
- + kPlugCategRoomFx,
- + kPlugSurroundFx,
- + kPlugCategRestoration,
- + kPlugCategOfflineProcess,
- + kPlugCategShell,
- + kPlugCategGenerator
- +};
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstEditorBounds
- +{
- + int16 upper;
- + int16 leftmost;
- + int16 lower;
- + int16 rightmost;
- +};
- +
- +//==============================================================================
- +enum VstMaxStringLengths
- +{
- + vstMaxNameLength = 64,
- + vstMaxParameterOrPinLabelLength = 64,
- + vstMaxParameterOrPinShortLabelLength = 8,
- + vstMaxCategoryLength = 24,
- + vstMaxManufacturerStringLength = 64,
- + vstMaxPlugInNameStringLength = 64
- +};
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstPinInfo
- +{
- + char text[vstMaxParameterOrPinLabelLength];
- + int32 flags;
- + int32 configurationType;
- + char shortText[vstMaxParameterOrPinShortLabelLength];
- + char unused[48];
- +};
- +
- +enum VstPinInfoFlags
- +{
- + vstPinInfoFlagIsActive = 1,
- + vstPinInfoFlagIsStereo = 2,
- + vstPinInfoFlagValid = 4
- +};
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstEvent
- +{
- + int32 type;
- + int32 size;
- + int32 sampleOffset;
- + int32 flags;
- + char content[16];
- +};
- +
- +enum VstEventTypes
- +{
- + vstMidiEventType = 1,
- + vstSysExEventType = 6
- +};
- +
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstEventBlock
- +{
- + int32 numberOfEvents;
- + pointer_sized_int future;
- + VstEvent* events[2];
- +};
- +
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstMidiEvent
- +{
- + int32 type;
- + int32 size;
- + int32 sampleOffset;
- + int32 flags;
- + int32 noteSampleLength;
- + int32 noteSampleOffset;
- + char midiData[4];
- + char tuning;
- + char noteVelocityOff;
- + char future1;
- + char future2;
- +};
- +
- +enum VstMidiEventFlags
- +{
- + vstMidiEventIsRealtime = 1
- +};
- +
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstSysExEvent
- +{
- + int32 type;
- + int32 size;
- + int32 offsetSamples;
- + int32 flags;
- + int32 sysExDumpSize;
- + pointer_sized_int future1;
- + char* sysExDump;
- + pointer_sized_int future2;
- +};
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstTimingInformation
- +{
- + double samplePosition;
- + double sampleRate;
- + double systemTimeNanoseconds;
- + double musicalPosition;
- + double tempoBPM;
- + double lastBarPosition;
- + double loopStartPosition;
- + double loopEndPosition;
- + int32 timeSignatureNumerator;
- + int32 timeSignatureDenominator;
- + int32 smpteOffset;
- + int32 smpteRate;
- + int32 samplesToNearestClock;
- + int32 flags;
- +};
- +
- +enum VstTimingInformationFlags
- +{
- + vstTimingInfoFlagTransportChanged = 1,
- + vstTimingInfoFlagCurrentlyPlaying = 2,
- + vstTimingInfoFlagLoopActive = 4,
- + vstTimingInfoFlagCurrentlyRecording = 8,
- + vstTimingInfoFlagAutomationWriteModeActive = 64,
- + vstTimingInfoFlagAutomationReadModeActive = 128,
- + vstTimingInfoFlagNanosecondsValid = 256,
- + vstTimingInfoFlagMusicalPositionValid = 512,
- + vstTimingInfoFlagTempoValid = 1024,
- + vstTimingInfoFlagLastBarPositionValid = 2048,
- + vstTimingInfoFlagLoopPositionValid = 4096,
- + vstTimingInfoFlagTimeSignatureValid = 8192,
- + vstTimingInfoFlagSmpteValid = 16384,
- + vstTimingInfoFlagNearestClockValid = 32768
- +};
- +
- +//==============================================================================
- +enum VstSmpteRates
- +{
- + vstSmpteRateFps24,
- + vstSmpteRateFps25,
- + vstSmpteRateFps2997,
- + vstSmpteRateFps30,
- + vstSmpteRateFps2997drop,
- + vstSmpteRateFps30drop,
- +
- + vstSmpteRate16mmFilm,
- + vstSmpteRate35mmFilm,
- +
- + vstSmpteRateFps239 = vstSmpteRate35mmFilm + 3,
- + vstSmpteRateFps249 ,
- + vstSmpteRateFps599,
- + vstSmpteRateFps60
- +};
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstIndividualSpeakerInfo
- +{
- + float azimuthalAngle;
- + float elevationAngle;
- + float radius;
- + float reserved;
- + char label[vstMaxNameLength];
- + int32 type;
- + char unused[28];
- +};
- +
- +enum VstIndividualSpeakerType
- +{
- + vstIndividualSpeakerTypeUndefined = 0x7fffffff,
- + vstIndividualSpeakerTypeMono = 0,
- + vstIndividualSpeakerTypeLeft,
- + vstIndividualSpeakerTypeRight,
- + vstIndividualSpeakerTypeCentre,
- + vstIndividualSpeakerTypeLFE,
- + vstIndividualSpeakerTypeLeftSurround,
- + vstIndividualSpeakerTypeRightSurround,
- + vstIndividualSpeakerTypeLeftCentre,
- + vstIndividualSpeakerTypeRightCentre,
- + vstIndividualSpeakerTypeSurround,
- + vstIndividualSpeakerTypeCentreSurround = vstIndividualSpeakerTypeSurround,
- + vstIndividualSpeakerTypeLeftRearSurround,
- + vstIndividualSpeakerTypeRightRearSurround,
- + vstIndividualSpeakerTypeTopMiddle,
- + vstIndividualSpeakerTypeTopFrontLeft,
- + vstIndividualSpeakerTypeTopFrontCentre,
- + vstIndividualSpeakerTypeTopFrontRight,
- + vstIndividualSpeakerTypeTopRearLeft,
- + vstIndividualSpeakerTypeTopRearCentre,
- + vstIndividualSpeakerTypeTopRearRight,
- + vstIndividualSpeakerTypeLFE2
- +};
- +
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct VstSpeakerConfiguration
- +{
- + int32 type;
- + int32 numberOfChannels;
- + VstIndividualSpeakerInfo speakers[8];
- +};
- +
- +enum VstSpeakerConfigurationType
- +{
- + vstSpeakerConfigTypeUser = -2,
- + vstSpeakerConfigTypeEmpty = -1,
- + vstSpeakerConfigTypeMono = 0,
- + vstSpeakerConfigTypeLR,
- + vstSpeakerConfigTypeLsRs,
- + vstSpeakerConfigTypeLcRc,
- + vstSpeakerConfigTypeSlSr,
- + vstSpeakerConfigTypeCLfe,
- + vstSpeakerConfigTypeLRC,
- + vstSpeakerConfigTypeLRS,
- + vstSpeakerConfigTypeLRCLfe,
- + vstSpeakerConfigTypeLRLfeS,
- + vstSpeakerConfigTypeLRCS,
- + vstSpeakerConfigTypeLRLsRs,
- + vstSpeakerConfigTypeLRCLfeS,
- + vstSpeakerConfigTypeLRLfeLsRs,
- + vstSpeakerConfigTypeLRCLsRs,
- + vstSpeakerConfigTypeLRCLfeLsRs,
- + vstSpeakerConfigTypeLRCLsRsCs,
- + vstSpeakerConfigTypeLRLsRsSlSr,
- + vstSpeakerConfigTypeLRCLfeLsRsCs,
- + vstSpeakerConfigTypeLRLfeLsRsSlSr,
- + vstSpeakerConfigTypeLRCLsRsLcRc,
- + vstSpeakerConfigTypeLRCLsRsSlSr,
- + vstSpeakerConfigTypeLRCLfeLsRsLcRc,
- + vstSpeakerConfigTypeLRCLfeLsRsSlSr,
- + vstSpeakerConfigTypeLRCLsRsLcRcCs,
- + vstSpeakerConfigTypeLRCLsRsCsSlSr,
- + vstSpeakerConfigTypeLRCLfeLsRsLcRcCs,
- + vstSpeakerConfigTypeLRCLfeLsRsCsSlSr,
- + vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2
- +};
- +
- +#if JUCE_BIG_ENDIAN
- + #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (a | (((uint32) b) << 8) | (((uint32) c) << 16) | (((uint32) d) << 24))
- +#else
- + #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (d | (((uint32) c) << 8) | (((uint32) b) << 16) | (((uint32) a) << 24))
- +#endif
- +
- +enum PresonusExtensionConstants
- +{
- + presonusVendorID = JUCE_MULTICHAR_CONSTANT ('P', 'r', 'e', 'S'),
- + presonusSetContentScaleFactor = JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's')
- +};
- +
- +//==============================================================================
- +/** Structure used for VSTs
- +
- + @tags{Audio}
- +*/
- +struct vst2FxBank
- +{
- + int32 magic1;
- + int32 size;
- + int32 magic2;
- + int32 version1;
- + int32 fxID;
- + int32 version2;
- + int32 elements;
- + int32 current;
- + char shouldBeZero[124];
- + int32 chunkSize;
- + char chunk[1];
- +};
- +
- +#if JUCE_MSVC
- + #pragma pack(pop)
- +#elif JUCE_MAC || JUCE_IOS
- + #pragma options align=reset
- +#else
- + #pragma pack(pop)
- +#endif
- +
- +#endif // JUCE_VSTINTERFACE_H_INCLUDED
|