diff options
| author | pepper <peppersclothescult@gmail.com> | 2015-01-10 21:37:24 -0800 |
|---|---|---|
| committer | pepper <peppersclothescult@gmail.com> | 2015-01-10 21:37:24 -0800 |
| commit | 58f8437f4b8b741ddc8e7bcde21bf983cc618430 (patch) | |
| tree | bfd0a9d601274fe56de15a4eaeb0998f9481419d /vendor/vstsdk2.4/public.sdk/samples/vst2.x/adelay/adelay.cpp | |
| parent | 36773a28ece1641a2d827a29869cdd4c38e87925 (diff) | |
Diffstat (limited to 'vendor/vstsdk2.4/public.sdk/samples/vst2.x/adelay/adelay.cpp')
| -rw-r--r-- | vendor/vstsdk2.4/public.sdk/samples/vst2.x/adelay/adelay.cpp | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/vendor/vstsdk2.4/public.sdk/samples/vst2.x/adelay/adelay.cpp b/vendor/vstsdk2.4/public.sdk/samples/vst2.x/adelay/adelay.cpp new file mode 100644 index 0000000..3e16bad --- /dev/null +++ b/vendor/vstsdk2.4/public.sdk/samples/vst2.x/adelay/adelay.cpp @@ -0,0 +1,216 @@ +//------------------------------------------------------------------------------------------------------- +// VST Plug-Ins SDK +// Version 2.4 $Date: 2006/11/13 09:08:27 $ +// +// Category : VST 2.x SDK Samples +// Filename : adelay.cpp +// Created by : Steinberg Media Technologies +// Description : Simple Delay plugin (Mono->Stereo) +// +// © 2006, Steinberg Media Technologies, All Rights Reserved +//------------------------------------------------------------------------------------------------------- + +#include <stdio.h> +#include <string.h> + +#ifndef __adelay__ +#include "adelay.h" +#endif + +//----------------------------------------------------------------------------- +ADelayProgram::ADelayProgram () +{ + // default Program Values + fDelay = 0.5; + fFeedBack = 0.5; + fOut = 0.75; + + strcpy (name, "Init"); +} + +//----------------------------------------------------------------------------- +ADelay::ADelay (audioMasterCallback audioMaster) + : AudioEffectX (audioMaster, kNumPrograms, kNumParams) +{ + // init + size = 44100; + cursor = 0; + delay = 0; + buffer = new float[size]; + + programs = new ADelayProgram[numPrograms]; + fDelay = fFeedBack = fOut = 0; + + if (programs) + setProgram (0); + + setNumInputs (1); // mono input + setNumOutputs (2); // stereo output + + setUniqueID ('ADly'); // this should be unique, use the Steinberg web page for plugin Id registration + + resume (); // flush buffer +} + +//------------------------------------------------------------------------ +ADelay::~ADelay () +{ + if (buffer) + delete[] buffer; + if (programs) + delete[] programs; +} + +//------------------------------------------------------------------------ +void ADelay::setProgram (VstInt32 program) +{ + ADelayProgram* ap = &programs[program]; + + curProgram = program; + setParameter (kDelay, ap->fDelay); + setParameter (kFeedBack, ap->fFeedBack); + setParameter (kOut, ap->fOut); +} + +//------------------------------------------------------------------------ +void ADelay::setDelay (float fdelay) +{ + fDelay = fdelay; + programs[curProgram].fDelay = fdelay; + cursor = 0; + delay = (long)(fdelay * (float)(size - 1)); +} + +//------------------------------------------------------------------------ +void ADelay::setProgramName (char *name) +{ + strcpy (programs[curProgram].name, name); +} + +//------------------------------------------------------------------------ +void ADelay::getProgramName (char *name) +{ + if (!strcmp (programs[curProgram].name, "Init")) + sprintf (name, "%s %d", programs[curProgram].name, curProgram + 1); + else + strcpy (name, programs[curProgram].name); +} + +//----------------------------------------------------------------------------------------- +bool ADelay::getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text) +{ + if (index < kNumPrograms) + { + strcpy (text, programs[index].name); + return true; + } + return false; +} + +//------------------------------------------------------------------------ +void ADelay::resume () +{ + memset (buffer, 0, size * sizeof (float)); + AudioEffectX::resume (); +} + +//------------------------------------------------------------------------ +void ADelay::setParameter (VstInt32 index, float value) +{ + ADelayProgram* ap = &programs[curProgram]; + + switch (index) + { + case kDelay : setDelay (value); break; + case kFeedBack : fFeedBack = ap->fFeedBack = value; break; + case kOut : fOut = ap->fOut = value; break; + } +} + +//------------------------------------------------------------------------ +float ADelay::getParameter (VstInt32 index) +{ + float v = 0; + + switch (index) + { + case kDelay : v = fDelay; break; + case kFeedBack : v = fFeedBack; break; + case kOut : v = fOut; break; + } + return v; +} + +//------------------------------------------------------------------------ +void ADelay::getParameterName (VstInt32 index, char *label) +{ + switch (index) + { + case kDelay : strcpy (label, "Delay"); break; + case kFeedBack : strcpy (label, "FeedBack"); break; + case kOut : strcpy (label, "Volume"); break; + } +} + +//------------------------------------------------------------------------ +void ADelay::getParameterDisplay (VstInt32 index, char *text) +{ + switch (index) + { + case kDelay : int2string (delay, text, kVstMaxParamStrLen); break; + case kFeedBack : float2string (fFeedBack, text, kVstMaxParamStrLen); break; + case kOut : dB2string (fOut, text, kVstMaxParamStrLen); break; + } +} + +//------------------------------------------------------------------------ +void ADelay::getParameterLabel (VstInt32 index, char *label) +{ + switch (index) + { + case kDelay : strcpy (label, "samples"); break; + case kFeedBack : strcpy (label, "amount"); break; + case kOut : strcpy (label, "dB"); break; + } +} + +//------------------------------------------------------------------------ +bool ADelay::getEffectName (char* name) +{ + strcpy (name, "Delay"); + return true; +} + +//------------------------------------------------------------------------ +bool ADelay::getProductString (char* text) +{ + strcpy (text, "Delay"); + return true; +} + +//------------------------------------------------------------------------ +bool ADelay::getVendorString (char* text) +{ + strcpy (text, "Steinberg Media Technologies"); + return true; +} + +//--------------------------------------------------------------------------- +void ADelay::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) +{ + float* in = inputs[0]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + while (--sampleFrames >= 0) + { + float x = *in++; + float y = buffer[cursor]; + buffer[cursor++] = x + y * fFeedBack; + if (cursor >= delay) + cursor = 0; + *out1++ = y; + if (out2) + *out2++ = y; + } +} |
