summaryrefslogtreecommitdiff
path: root/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'public.sdk/samples/vst2.x/adelay/surrounddelay.cpp')
-rw-r--r--public.sdk/samples/vst2.x/adelay/surrounddelay.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp b/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp
new file mode 100644
index 0000000..d8c5a99
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp
@@ -0,0 +1,172 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : surrounddelay.cpp
+// Created by : Steinberg Media Technologies
+// Description : Simple Surround Delay plugin with Editor using VSTGUI
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __surrounddelay__
+#include "surrounddelay.h"
+#endif
+
+#ifndef __sdeditor__
+#include "editor/sdeditor.h"
+#endif
+
+#include <string.h>
+#include <stdio.h>
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
+{
+ return new SurroundDelay (audioMaster);
+}
+
+//-----------------------------------------------------------------------------
+SurroundDelay::SurroundDelay (audioMasterCallback audioMaster)
+: ADelay (audioMaster)
+, plugInput (0)
+, plugOutput (0)
+{
+
+ // The first buffer is allocated in ADelay's constructor
+ for (int i = 1; i < MAX_CHANNELS; i++)
+ {
+ sBuffers[i] = new float[size];
+ }
+
+ setNumInputs (MAX_CHANNELS);
+ setNumOutputs (MAX_CHANNELS);
+
+ // We initialize the arrangements to default values.
+ // Nevertheless, the host should modify them via
+ // appropriate calls to setSpeakerArrangement.
+ allocateArrangement (&plugInput, MAX_CHANNELS);
+ plugInput->type = kSpeakerArr51;
+
+ allocateArrangement (&plugOutput, MAX_CHANNELS);
+ plugOutput->type = kSpeakerArr51;
+
+ setUniqueID ('SDlE'); // this should be unique, use the Steinberg web page for plugin Id registration
+
+ // create the editor
+ editor = new SDEditor (this);
+
+ resume ();
+}
+
+//-----------------------------------------------------------------------------
+SurroundDelay::~SurroundDelay ()
+{
+ sBuffers[0] = 0;
+ // We let ~ADelay delete "buffer"...
+ for (int i = 1; i < MAX_CHANNELS; i++)
+ {
+ if (sBuffers[i])
+ {
+ delete[] sBuffers[i];
+ }
+ sBuffers[i] = 0;
+ }
+
+ deallocateArrangement (&plugInput);
+ deallocateArrangement (&plugOutput);
+}
+
+//------------------------------------------------------------------------
+void SurroundDelay::resume ()
+{
+ memset (buffer, 0, size * sizeof (float));
+ sBuffers[0] = buffer;
+
+ for (int i = 1; i < MAX_CHANNELS; i++)
+ {
+ memset (sBuffers[i], 0, size * sizeof (float));
+ }
+}
+
+//------------------------------------------------------------------------
+bool SurroundDelay::getSpeakerArrangement (VstSpeakerArrangement** pluginInput, VstSpeakerArrangement** pluginOutput)
+{
+ *pluginInput = plugInput;
+ *pluginOutput = plugOutput;
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool SurroundDelay::setSpeakerArrangement (VstSpeakerArrangement* pluginInput,
+ VstSpeakerArrangement* pluginOutput)
+{
+ if (!pluginOutput || !pluginInput)
+ return false;
+
+ bool result = true;
+
+ // This plug-in can act on any speaker arrangement,
+ // provided that there are the same number of inputs/outputs.
+ if (pluginInput->numChannels > MAX_CHANNELS)
+ {
+ // This plug-in can't have so many channels. So we answer
+ // false, and we set the input arrangement with the maximum
+ // number of channels possible
+ result = false;
+ allocateArrangement (&plugInput, MAX_CHANNELS);
+ plugInput->type = kSpeakerArr51;
+ }
+ else
+ {
+ matchArrangement (&plugInput, pluginInput);
+ }
+
+ if (pluginOutput->numChannels != plugInput->numChannels)
+ {
+ // This plug-in only deals with symetric IO configurations...
+ result = false;
+ matchArrangement (&plugOutput, plugInput);
+ }
+ else
+ {
+ matchArrangement (&plugOutput, pluginOutput);
+ }
+
+ return result;
+}
+
+//------------------------------------------------------------------------
+void SurroundDelay::processReplacing (float** inputs, float** outputs, VstInt32 sampleframes)
+{
+ float* inputs2[1];
+ float* outputs2[2];
+
+ outputs2[1] = NULL;
+
+ long cursorTemp = cursor;
+
+ for (int i = 0; i < plugInput->numChannels; i++)
+ {
+ cursor = cursorTemp;
+
+ buffer = sBuffers[i];
+
+ inputs2[0] = inputs[i];
+ outputs2[0] = outputs[i];
+
+ ADelay::processReplacing (inputs2, outputs2, sampleframes);
+ }
+
+ buffer = sBuffers[0];
+}
+
+//-----------------------------------------------------------------------------
+void SurroundDelay::setParameter (VstInt32 index, float value)
+{
+ ADelay::setParameter (index, value);
+
+ if (editor)
+ ((AEffGUIEditor*)editor)->setParameter (index, value);
+}