mirror of
https://github.com/LMMS/lmms.git
synced 2026-02-01 10:13:33 -05:00
This patch should bring VST to host synchronization for LMMS. (e.g. for plugins like dBlue Glitch, TAL Filters). Synchronization is done via shared memory, missing song time positions are reccalculated and added to PPQ position sync values (SHM - common input interface for sync of all VST plugins)
305 lines
7.3 KiB
C++
305 lines
7.3 KiB
C++
/*
|
|
* 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 CCONST(a, b, c, d)( ( ( (int) a ) << 24 ) | \
|
|
( ( (int) b ) << 16 ) | \
|
|
( ( (int) c ) << 8 ) | \
|
|
( ( (int) d ) << 0 ) )
|
|
|
|
const int audioMasterAutomate = 0;
|
|
const int audioMasterVersion = 1;
|
|
const int audioMasterCurrentId = 2;
|
|
const int audioMasterIdle = 3;
|
|
const int audioMasterPinConnected = 4;
|
|
// unsupported? 5
|
|
const int audioMasterWantMidi = 6;
|
|
const int audioMasterGetTime = 7;
|
|
const int audioMasterProcessEvents = 8;
|
|
const int audioMasterSetTime = 9;
|
|
const int audioMasterTempoAt = 10;
|
|
const int audioMasterGetNumAutomatableParameters = 11;
|
|
const int audioMasterGetParameterQuantization = 12;
|
|
const int audioMasterIOChanged = 13;
|
|
const int audioMasterNeedIdle = 14;
|
|
const int audioMasterSizeWindow = 15;
|
|
const int audioMasterGetSampleRate = 16;
|
|
const int audioMasterGetBlockSize = 17;
|
|
const int audioMasterGetInputLatency = 18;
|
|
const int audioMasterGetOutputLatency = 19;
|
|
const int audioMasterGetPreviousPlug = 20;
|
|
const int audioMasterGetNextPlug = 21;
|
|
const int audioMasterWillReplaceOrAccumulate = 22;
|
|
const int audioMasterGetCurrentProcessLevel = 23;
|
|
const int audioMasterGetAutomationState = 24;
|
|
const int audioMasterOfflineStart = 25;
|
|
const int audioMasterOfflineRead = 26;
|
|
const int audioMasterOfflineWrite = 27;
|
|
const int audioMasterOfflineGetCurrentPass = 28;
|
|
const int audioMasterOfflineGetCurrentMetaPass = 29;
|
|
const int audioMasterSetOutputSampleRate = 30;
|
|
// unsupported? 31
|
|
const int audioMasterGetSpeakerArrangement = 31; // deprecated in 2.4?
|
|
const int audioMasterGetVendorString = 32;
|
|
const int audioMasterGetProductString = 33;
|
|
const int audioMasterGetVendorVersion = 34;
|
|
const int audioMasterVendorSpecific = 35;
|
|
const int audioMasterSetIcon = 36;
|
|
const int audioMasterCanDo = 37;
|
|
const int audioMasterGetLanguage = 38;
|
|
const int audioMasterOpenWindow = 39;
|
|
const int audioMasterCloseWindow = 40;
|
|
const int audioMasterGetDirectory = 41;
|
|
const int audioMasterUpdateDisplay = 42;
|
|
const int audioMasterBeginEdit = 43;
|
|
const int audioMasterEndEdit = 44;
|
|
const int audioMasterOpenFileSelector = 45;
|
|
const int audioMasterCloseFileSelector = 46; // currently unused
|
|
const int audioMasterEditFile = 47; // currently unused
|
|
const int audioMasterGetChunkFile = 48; // currently unused
|
|
const int audioMasterGetInputSpeakerArrangement = 49; // currently unused
|
|
|
|
const int effFlagsHasEditor = 1;
|
|
const int effFlagsCanReplacing = 1 << 4; // very likely
|
|
const int effFlagsIsSynth = 1 << 8; // currently unused
|
|
|
|
const int effOpen = 0;
|
|
const int effClose = 1; // currently unused
|
|
const int effSetProgram = 2; // currently unused
|
|
const int effGetProgram = 3; // currently unused
|
|
const int effGetProgramName = 5; // currently unused
|
|
const int effGetParamName = 8; // currently unused
|
|
const int effSetSampleRate = 10;
|
|
const int effSetBlockSize = 11;
|
|
const int effMainsChanged = 12;
|
|
const int effEditGetRect = 13;
|
|
const int effEditOpen = 14;
|
|
const int effEditClose = 15;
|
|
const int effEditIdle = 19;
|
|
const int effEditTop = 20;
|
|
const int effProcessEvents = 25;
|
|
const int effGetEffectName = 45;
|
|
const int effGetParameterProperties = 47; // missing
|
|
const int effGetVendorString = 47;
|
|
const int effGetProductString = 48;
|
|
const int effGetVendorVersion = 49;
|
|
const int effCanDo = 51; // currently unused
|
|
const int effGetVstVersion = 58; // currently unused
|
|
|
|
const int kEffectMagic = CCONST( 'V', 's', 't', 'P' );
|
|
const int kVstLangEnglish = 1;
|
|
const int kVstMidiType = 1;
|
|
const int kVstParameterUsesFloatStep = 1 << 2;
|
|
const int kVstPpqPosValid = 1 << 9;
|
|
const int kVstTempoValid = 1 << 10;
|
|
const int kVstBarsValid = 1 << 11;
|
|
const int kVstCyclePosValid = 1 << 12;
|
|
const int kVstTimeSigValid = 1 << 13;
|
|
const int kVstTransportPlaying = 1 << 1;
|
|
const int kVstTransportCycleActive = 1 << 2;
|
|
const int kVstTransportChanged = 1;
|
|
|
|
|
|
class RemoteVstPlugin;
|
|
|
|
|
|
class VstMidiEvent
|
|
{
|
|
public:
|
|
// 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;
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
class VstEvent
|
|
{
|
|
char dump[sizeof( VstMidiEvent )];
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
class VstEvents
|
|
{
|
|
public:
|
|
// 00
|
|
int numEvents;
|
|
// 04
|
|
void *reserved;
|
|
// 08
|
|
VstEvent * events[];
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
// Not finished, neither really used
|
|
class VstParameterProperties
|
|
{
|
|
public:
|
|
/* float stepFloat;
|
|
char label[64];
|
|
int flags;
|
|
int minInteger;
|
|
int maxInteger;
|
|
int stepInteger;
|
|
char shortLabel[8];
|
|
int category;
|
|
char categoryLabel[24];
|
|
char empty[128];*/
|
|
|
|
float stepFloat;
|
|
float smallStepFloat;
|
|
float largeStepFloat;
|
|
char label[64];
|
|
unsigned int flags;
|
|
unsigned int minInteger;
|
|
unsigned int maxInteger;
|
|
unsigned int stepInteger;
|
|
unsigned int largeStepInteger;
|
|
char shortLabel[8];
|
|
unsigned short displayIndex;
|
|
unsigned short category;
|
|
unsigned short numParametersInCategory;
|
|
unsigned short reserved;
|
|
char categoryLabel[24];
|
|
char future[16];
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
class AEffect
|
|
{
|
|
public:
|
|
// Never use virtual functions!!!
|
|
// 00-03
|
|
int magic;
|
|
// dispatcher 04-07
|
|
intptr_t (* dispatcher)( AEffect * , int , int , intptr_t, void * , float );
|
|
// process, quite sure 08-0b
|
|
void (* process)( AEffect * , float * * , float * * , int );
|
|
// setParameter 0c-0f
|
|
void (* setParameter)( AEffect * , int , float );
|
|
// getParameter 10-13
|
|
float (* getParameter)( 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)( AEffect * , float * * , float * * , int );
|
|
|
|
} ;
|
|
|
|
|
|
|
|
|
|
class VstTimeInfo
|
|
{
|
|
public:
|
|
// 00
|
|
double samplePos;
|
|
// 08
|
|
double sampleRate;
|
|
// unconfirmed 10
|
|
char empty1[8];
|
|
// 18
|
|
double ppqPos;
|
|
// 20?
|
|
double tempo;
|
|
// 28
|
|
double barStartPos;
|
|
// 30?
|
|
double cycleStartPos;
|
|
// 38?
|
|
double cycleEndPos;
|
|
// 40?
|
|
int timeSigNumerator;
|
|
// 44?
|
|
int timeSigDenominator;
|
|
// unconfirmed 48 4c 50
|
|
char empty3[4 + 4 + 4];
|
|
// 54
|
|
int flags;
|
|
|
|
} ;
|
|
|
|
|
|
|
|
typedef intptr_t (* audioMasterCallback)( AEffect * , int32_t, int32_t, intptr_t, void * , float );
|
|
|
|
|
|
#endif
|