aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/WinVST/Wider/vst2.x/audioeffect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/WinVST/Wider/vst2.x/audioeffect.cpp')
-rwxr-xr-xplugins/WinVST/Wider/vst2.x/audioeffect.cpp703
1 files changed, 0 insertions, 703 deletions
diff --git a/plugins/WinVST/Wider/vst2.x/audioeffect.cpp b/plugins/WinVST/Wider/vst2.x/audioeffect.cpp
deleted file mode 100755
index e7440d2..0000000
--- a/plugins/WinVST/Wider/vst2.x/audioeffect.cpp
+++ /dev/null
@@ -1,703 +0,0 @@
-//-------------------------------------------------------------------------------------------------------
-// VST Plug-Ins SDK
-// Version 2.4 $Date: 2006/06/07 08:22:01 $
-//
-// Category : VST 2.x Classes
-// Filename : audioeffect.cpp
-// Created by : Steinberg Media Technologies
-// Description : Class AudioEffect (VST 1.0)
-//
-// © 2006, Steinberg Media Technologies, All Rights Reserved
-//-------------------------------------------------------------------------------------------------------
-
-#include "audioeffect.h"
-#include "aeffeditor.h"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <math.h>
-
-//-------------------------------------------------------------------------------------------------------
-VstIntPtr AudioEffect::dispatchEffectClass (AEffect* e, VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
-{
- AudioEffect* ae = (AudioEffect*)(e->object);
-
- if (opCode == effClose)
- {
- ae->dispatcher (opCode, index, value, ptr, opt);
- delete ae;
- return 1;
- }
-
- return ae->dispatcher (opCode, index, value, ptr, opt);
-}
-
-//-------------------------------------------------------------------------------------------------------
-float AudioEffect::getParameterClass (AEffect* e, VstInt32 index)
-{
- AudioEffect* ae = (AudioEffect*)(e->object);
- return ae->getParameter (index);
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::setParameterClass (AEffect* e, VstInt32 index, float value)
-{
- AudioEffect* ae = (AudioEffect*)(e->object);
- ae->setParameter (index, value);
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::DECLARE_VST_DEPRECATED (processClass) (AEffect* e, float** inputs, float** outputs, VstInt32 sampleFrames)
-{
- AudioEffect* ae = (AudioEffect*)(e->object);
- ae->DECLARE_VST_DEPRECATED (process) (inputs, outputs, sampleFrames);
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::processClassReplacing (AEffect* e, float** inputs, float** outputs, VstInt32 sampleFrames)
-{
- AudioEffect* ae = (AudioEffect*)(e->object);
- ae->processReplacing (inputs, outputs, sampleFrames);
-}
-
-//-------------------------------------------------------------------------------------------------------
-#if VST_2_4_EXTENSIONS
-void AudioEffect::processClassDoubleReplacing (AEffect* e, double** inputs, double** outputs, VstInt32 sampleFrames)
-{
- AudioEffect* ae = (AudioEffect*)(e->object);
- ae->processDoubleReplacing (inputs, outputs, sampleFrames);
-}
-#endif
-
-//-------------------------------------------------------------------------------------------------------
-// Class AudioEffect Implementation
-//-------------------------------------------------------------------------------------------------------
-/*!
- The constructor of your class is passed a parameter of the type \e audioMasterCallback. The actual
- mechanism in which your class gets constructed is not important right now. Effectively your class is
- constructed by the hosting application, which passes an object of type \e audioMasterCallback that
- handles the interaction with the plug-in. You pass this on to the base class' constructor and then
- can forget about it.
-
- \param audioMaster Passed by the Host and handles interaction
- \param numPrograms Pass the number of programs the plug-in provides
- \param numParams Pass the number of parameters the plug-in provides
-
-\code
-MyPlug::MyPlug (audioMasterCallback audioMaster)
-: AudioEffectX (audioMaster, 1, 1) // 1 program, 1 parameter only
-{
- setNumInputs (2); // stereo in
- setNumOutputs (2); // stereo out
- setUniqueID ('MyPl'); // you must change this for other plug-ins!
- canProcessReplacing (); // supports replacing mode
-}
-\endcode
-
- \sa setNumInputs, setNumOutputs, setUniqueID, canProcessReplacing
-*/
-AudioEffect::AudioEffect (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)
-: audioMaster (audioMaster)
-, editor (0)
-, sampleRate (44100.f)
-, blockSize (1024)
-, numPrograms (numPrograms)
-, numParams (numParams)
-, curProgram (0)
-{
- memset (&cEffect, 0, sizeof (cEffect));
-
- cEffect.magic = kEffectMagic;
- cEffect.dispatcher = dispatchEffectClass;
- cEffect.DECLARE_VST_DEPRECATED (process) = DECLARE_VST_DEPRECATED (processClass);
- cEffect.setParameter = setParameterClass;
- cEffect.getParameter = getParameterClass;
- cEffect.numPrograms = numPrograms;
- cEffect.numParams = numParams;
- cEffect.numInputs = 1; // mono input
- cEffect.numOutputs = 2; // stereo output
- cEffect.DECLARE_VST_DEPRECATED (ioRatio) = 1.f;
- cEffect.object = this;
- cEffect.uniqueID = CCONST ('N', 'o', 'E', 'f');
- cEffect.version = 1;
- cEffect.processReplacing = processClassReplacing;
-
-#if VST_2_4_EXTENSIONS
- canProcessReplacing (); // mandatory in VST 2.4!
- cEffect.processDoubleReplacing = processClassDoubleReplacing;
-#endif
-}
-
-//-------------------------------------------------------------------------------------------------------
-AudioEffect::~AudioEffect ()
-{
- if (editor)
- delete editor;
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::setEditor (AEffEditor* editor)
-{
- this->editor = editor;
- if (editor)
- cEffect.flags |= effFlagsHasEditor;
- else
- cEffect.flags &= ~effFlagsHasEditor;
-}
-
-//-------------------------------------------------------------------------------------------------------
-VstIntPtr AudioEffect::dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
-{
- VstIntPtr v = 0;
-
- switch (opcode)
- {
- case effOpen: open (); break;
- case effClose: close (); break;
- case effSetProgram: if (value < numPrograms) setProgram ((VstInt32)value); break;
- case effGetProgram: v = getProgram (); break;
- case effSetProgramName: setProgramName ((char*)ptr); break;
- case effGetProgramName: getProgramName ((char*)ptr); break;
- case effGetParamLabel: getParameterLabel (index, (char*)ptr); break;
- case effGetParamDisplay: getParameterDisplay (index, (char*)ptr); break;
- case effGetParamName: getParameterName (index, (char*)ptr); break;
-
- case effSetSampleRate: setSampleRate (opt); break;
- case effSetBlockSize: setBlockSize ((VstInt32)value); break;
- case effMainsChanged: if (!value) suspend (); else resume (); break;
- #if !VST_FORCE_DEPRECATED
- case effGetVu: v = (VstIntPtr)(getVu () * 32767.); break;
- #endif
-
- //---Editor------------
- case effEditGetRect: if (editor) v = editor->getRect ((ERect**)ptr) ? 1 : 0; break;
- case effEditOpen: if (editor) v = editor->open (ptr) ? 1 : 0; break;
- case effEditClose: if (editor) editor->close (); break;
- case effEditIdle: if (editor) editor->idle (); break;
-
- #if (TARGET_API_MAC_CARBON && !VST_FORCE_DEPRECATED)
- case effEditDraw: if (editor) editor->draw ((ERect*)ptr); break;
- case effEditMouse: if (editor) v = editor->mouse (index, value); break;
- case effEditKey: if (editor) v = editor->key (value); break;
- case effEditTop: if (editor) editor->top (); break;
- case effEditSleep: if (editor) editor->sleep (); break;
- #endif
-
- case DECLARE_VST_DEPRECATED (effIdentify): v = CCONST ('N', 'v', 'E', 'f'); break;
-
- //---Persistence-------
- case effGetChunk: v = getChunk ((void**)ptr, index ? true : false); break;
- case effSetChunk: v = setChunk (ptr, (VstInt32)value, index ? true : false); break;
- }
- return v;
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- Use to ask for the Host's version
- \return The Host's version
-*/
-VstInt32 AudioEffect::getMasterVersion ()
-{
- VstInt32 version = 1;
- if (audioMaster)
- {
- version = (VstInt32)audioMaster (&cEffect, audioMasterVersion, 0, 0, 0, 0);
- if (!version) // old
- version = 1;
- }
- return version;
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \sa AudioEffectX::getNextShellPlugin
-*/
-VstInt32 AudioEffect::getCurrentUniqueId ()
-{
- VstInt32 id = 0;
- if (audioMaster)
- id = (VstInt32)audioMaster (&cEffect, audioMasterCurrentId, 0, 0, 0, 0);
- return id;
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- Give idle time to Host application, e.g. if plug-in editor is doing mouse tracking in a modal loop.
-*/
-void AudioEffect::masterIdle ()
-{
- if (audioMaster)
- audioMaster (&cEffect, audioMasterIdle, 0, 0, 0, 0);
-}
-
-//-------------------------------------------------------------------------------------------------------
-bool AudioEffect::DECLARE_VST_DEPRECATED (isInputConnected) (VstInt32 input)
-{
- VstInt32 ret = 0;
- if (audioMaster)
- ret = (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterPinConnected), input, 0, 0, 0);
- return ret ? false : true; // return value is 0 for true
-}
-
-//-------------------------------------------------------------------------------------------------------
-bool AudioEffect::DECLARE_VST_DEPRECATED (isOutputConnected) (VstInt32 output)
-{
- VstInt32 ret = 0;
- if (audioMaster)
- ret = (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterPinConnected), output, 1, 0, 0);
- return ret ? false : true; // return value is 0 for true
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param index parameter index
- \param float parameter value
-
- \note An important thing to notice is that if the user changes a parameter in your editor, which is
- out of the Host's control if you are not using the default string based interface, you should
- call setParameterAutomated (). This ensures that the Host is notified of the parameter change, which
- allows it to record these changes for automation.
-
- \sa setParameter
-*/
-void AudioEffect::setParameterAutomated (VstInt32 index, float value)
-{
- setParameter (index, value);
- if (audioMaster)
- audioMaster (&cEffect, audioMasterAutomate, index, 0, 0, value); // value is in opt
-}
-
-//-------------------------------------------------------------------------------------------------------
-// Flags
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::DECLARE_VST_DEPRECATED (hasVu) (bool state)
-{
- if (state)
- cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsHasVu);
- else
- cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsHasVu);
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::DECLARE_VST_DEPRECATED (hasClip) (bool state)
-{
- if (state)
- cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsHasClip);
- else
- cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsHasClip);
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::DECLARE_VST_DEPRECATED (canMono) (bool state)
-{
- if (state)
- cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsCanMono);
- else
- cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsCanMono);
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param state Set to \e true if supported
-
- \note Needs to be called in the plug-in's constructor
-*/
-void AudioEffect::canProcessReplacing (bool state)
-{
- if (state)
- cEffect.flags |= effFlagsCanReplacing;
- else
- cEffect.flags &= ~effFlagsCanReplacing;
-}
-
-//-----------------------------------------------------------------------------------------------------------------
-/*!
- \param state Set to \e true if supported
-
- \note Needs to be called in the plug-in's constructor
-*/
-#if VST_2_4_EXTENSIONS
-void AudioEffect::canDoubleReplacing (bool state)
-{
- if (state)
- cEffect.flags |= effFlagsCanDoubleReplacing;
- else
- cEffect.flags &= ~effFlagsCanDoubleReplacing;
-}
-#endif
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param state Set \e true if programs are chunks
-
- \note Needs to be called in the plug-in's constructor
-*/
-void AudioEffect::programsAreChunks (bool state)
-{
- if (state)
- cEffect.flags |= effFlagsProgramChunks;
- else
- cEffect.flags &= ~effFlagsProgramChunks;
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::DECLARE_VST_DEPRECATED (setRealtimeQualities) (VstInt32 qualities)
-{
- cEffect.DECLARE_VST_DEPRECATED (realQualities) = qualities;
-}
-
-//-------------------------------------------------------------------------------------------------------
-void AudioEffect::DECLARE_VST_DEPRECATED (setOfflineQualities) (VstInt32 qualities)
-{
- cEffect.DECLARE_VST_DEPRECATED (offQualities) = qualities;
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- Use to report the Plug-in's latency (Group Delay)
-
- \param delay Plug-ins delay in samples
-*/
-void AudioEffect::setInitialDelay (VstInt32 delay)
-{
- cEffect.initialDelay = delay;
-}
-
-//-------------------------------------------------------------------------------------------------------
-// Strings Conversion
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param value Value to convert
- \param text String up to length char
- \param maxLen Maximal length of the string
-*/
-void AudioEffect::dB2string (float value, char* text, VstInt32 maxLen)
-{
- if (value <= 0)
- vst_strncpy (text, "-oo", maxLen);
- else
- float2string ((float)(20. * log10 (value)), text, maxLen);
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param samples Number of samples
- \param text String up to length char
- \param maxLen Maximal length of the string
-*/
-void AudioEffect::Hz2string (float samples, char* text, VstInt32 maxLen)
-{
- float sampleRate = getSampleRate ();
- if (!samples)
- float2string (0, text, maxLen);
- else
- float2string (sampleRate / samples, text, maxLen);
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param samples Number of samples
- \param text String up to length char
- \param maxLen Maximal length of the string
-*/
-void AudioEffect::ms2string (float samples, char* text, VstInt32 maxLen)
-{
- float2string ((float)(samples * 1000. / getSampleRate ()), text, maxLen);
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param value Value to convert
- \param text String up to length char
- \param maxLen Maximal length of the string
-*/
-void AudioEffect::float2string (float value, char* text, VstInt32 maxLen)
-{
- VstInt32 c = 0, neg = 0;
- char string[32];
- char* s;
- double v, integ, i10, mantissa, m10, ten = 10.;
-
- v = (double)value;
- if (v < 0)
- {
- neg = 1;
- value = -value;
- v = -v;
- c++;
- if (v > 9999999.)
- {
- vst_strncpy (string, "Huge!", 31);
- return;
- }
- }
- else if (v > 99999999.)
- {
- vst_strncpy (string, "Huge!", 31);
- return;
- }
-
- s = string + 31;
- *s-- = 0;
- *s-- = '.';
- c++;
-
- integ = floor (v);
- i10 = fmod (integ, ten);
- *s-- = (char)((VstInt32)i10 + '0');
- integ /= ten;
- c++;
- while (integ >= 1. && c < 8)
- {
- i10 = fmod (integ, ten);
- *s-- = (char)((VstInt32)i10 + '0');
- integ /= ten;
- c++;
- }
- if (neg)
- *s-- = '-';
- vst_strncpy (text, s + 1, maxLen);
- if (c >= 8)
- return;
-
- s = string + 31;
- *s-- = 0;
- mantissa = fmod (v, 1.);
- mantissa *= pow (ten, (double)(8 - c));
- while (c < 8)
- {
- if (mantissa <= 0)
- *s-- = '0';
- else
- {
- m10 = fmod (mantissa, ten);
- *s-- = (char)((VstInt32)m10 + '0');
- mantissa /= 10.;
- }
- c++;
- }
- vst_strncat (text, s + 1, maxLen);
-}
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \param value Value to convert
- \param text String up to length char
- \param maxLen Maximal length of the string
-*/
-void AudioEffect::int2string (VstInt32 value, char* text, VstInt32 maxLen)
-{
- if (value >= 100000000)
- {
- vst_strncpy (text, "Huge!", maxLen);
- return;
- }
-
- if (value < 0)
- {
- vst_strncpy (text, "-", maxLen);
- value = -value;
- }
- else
- vst_strncpy (text, "", maxLen);
-
- bool state = false;
- for (VstInt32 div = 100000000; div >= 1; div /= 10)
- {
- VstInt32 digit = value / div;
- value -= digit * div;
- if (state || digit > 0)
- {
- char temp[2] = {'0' + (char)digit, '\0'};
- vst_strncat (text, temp, maxLen);
- state = true;
- }
- }
-}
-//-------------------------------------------------------------------------------------------------------
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
-
- This process method must be provided. It takes input data, applies its pocessing algorithm, and then puts the
- result to the output by overwriting the output buffer.
-
- \param inputs An array of pointers to the data
- \param outputs An array of pointers to where the data can be written to
- \param sampleFrames Number of sample frames to process
-
- \warning Never call any Mac OS 9 functions (or other functions which call into the OS) inside your
- audio process function! This will crash the system when your plug-in is run in MP (multiprocessor) mode.
- If you must call into the OS, you must use MPRemoteCall () (see Apples' documentation), or
- explicitly use functions which are documented by Apple to be MP safe. On Mac OS X read the system
- header files to be sure that you only call thread safe functions.
-
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setBlockSize (VstInt32 blockSize)
-
- This is called by the Host, and tells the plug-in that the maximum block size passed to
- processReplacing() will be \e blockSize.
-
- \param blockSize Maximum number of sample frames
-
- \warning You <b>must</b> process <b>exactly</b> \e sampleFrames number of samples in inside processReplacing, not more!
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setParameter (VstInt32 index, float value)
-
- Parameters are the individual parameter settings the user can adjust. A VST Host can automate these
- parameters. Set parameter \e index to \e value.
-
- \param index Index of the parameter to change
- \param value A float value between 0.0 and 1.0 inclusive
-
- \note Parameter values, like all VST parameters, are declared as floats with an inclusive range of
- 0.0 to 1.0. How data is presented to the user is merely in the user-interface handling. This is a
- convention, but still worth regarding. Maybe the VST-Host's automation system depends on this range.
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn float AudioEffect::getParameter (VstInt32 index)
-
- Return the \e value of parameter \e index
-
- \param index Index of the parameter
- \return A float value between 0.0 and 1.0 inclusive
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::getParameterLabel (VstInt32 index, char* label)
-
- \param index Index of the parameter
- \param label A string up to 8 char
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::getParameterDisplay (VstInt32 index, char* text)
-
- \param index Index of the parameter
- \param text A string up to 8 char
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn VstInt32 AudioEffect::getProgram ()
-
- \return Index of the current program
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setProgram (VstInt32 program)
-
- \param Program of the current program
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::getParameterName (VstInt32 index, char* text)
-
- \param index Index of the parameter
- \param text A string up to 8 char
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setProgramName (char* name)
-
- The program name is displayed in the rack, and can be edited by the user.
-
- \param name A string up to 24 char
-
- \warning Please be aware that the string lengths supported by the default VST interface are normally
- limited to 24 characters. If you copy too much data into the buffers provided, you will break the
- Host application.
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::getProgramName (char* name)
-
- The program name is displayed in the rack, and can be edited by the user.
-
- \param name A string up to 24 char
-
- \warning Please be aware that the string lengths supported by the default VST interface are normally
- limited to 24 characters. If you copy too much data into the buffers provided, you will break the
- Host application.
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn VstInt32 AudioEffect::getChunk (void** data, bool isPreset)
-
- \param data should point to the newly allocated memory block containg state data. You can savely release it in next suspend/resume call.
- \param isPreset true when saving a single program, false for all programs
-
- \note
- If your plug-in is configured to use chunks (see AudioEffect::programsAreChunks), the Host
- will ask for a block of memory describing the current plug-in state for saving.
- To restore the state at a later stage, the same data is passed back to AudioEffect::setChunk.
- Alternatively, when not using chunk, the Host will simply save all parameter values.
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn VstInt32 AudioEffect::setChunk (void* data, VstInt32 byteSize, bool isPreset)
-
- \param data pointer to state data (owned by Host)
- \param byteSize size of state data
- \param isPreset true when restoring a single program, false for all programs
-
- \sa getChunk
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setNumInputs (VstInt32 inputs)
-
- This number is fixed at construction time and can't change until the plug-in is destroyed.
-
- \param inputs The number of inputs
-
- \sa isInputConnected()
-
- \note Needs to be called in the plug-in's constructor
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setNumOutputs (VstInt32 outputs)
-
- This number is fixed at construction time and can't change until the plug-in is destroyed.
-
- \param outputs The number of outputs
-
- \sa isOutputConnected()
-
- \note Needs to be called in the plug-in's constructor
-*/
-
-//-------------------------------------------------------------------------------------------------------
-/*!
- \fn void AudioEffect::setUniqueID (VstInt32 iD)
-
- Must call this! Set the plug-in's unique identifier. The Host uses this to identify the plug-in, for
- instance when it is loading effect programs and banks. On Steinberg Web Page you can find an UniqueID
- Database where you can record your UniqueID, it will check if the ID is already used by an another
- vendor. You can use CCONST('a','b','c','d') (defined in VST 2.0) to be platform independent to
- initialize an UniqueID.
-
- \param iD Plug-in's unique ID
-
- \note Needs to be called in the plug-in's constructor
-*/