diff options
author | Chris Johnson <jinx6568@sover.net> | 2018-10-22 18:04:06 -0400 |
---|---|---|
committer | Chris Johnson <jinx6568@sover.net> | 2018-10-22 18:04:06 -0400 |
commit | 633be2e22c6648c901f08f3b4cd4e8e14ea86443 (patch) | |
tree | 1e272c3d2b5bd29636b9f9f521af62734e4df012 /plugins/WinVST/ToVinyl4 | |
parent | 057757aa8eb0a463caf0cdfdb5894ac5f723ff3f (diff) | |
download | airwindows-lv2-port-633be2e22c6648c901f08f3b4cd4e8e14ea86443.tar.gz airwindows-lv2-port-633be2e22c6648c901f08f3b4cd4e8e14ea86443.tar.bz2 airwindows-lv2-port-633be2e22c6648c901f08f3b4cd4e8e14ea86443.zip |
Updates (in case my plane crashes)
Diffstat (limited to 'plugins/WinVST/ToVinyl4')
-rwxr-xr-x | plugins/WinVST/ToVinyl4/.vs/Console4Channel64/v14/.suo | bin | 0 -> 32768 bytes | |||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/.vs/VSTProject/v14/.suo | bin | 0 -> 23040 bytes | |||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/ToVinyl4.cpp | 217 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/ToVinyl4.h | 158 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/ToVinyl4Proc.cpp | 981 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/VSTProject.sln | 28 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/VSTProject.vcxproj | 183 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/VSTProject.vcxproj.filters | 48 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/VSTProject.vcxproj.user | 19 | ||||
-rwxr-xr-x | plugins/WinVST/ToVinyl4/vstplug.def | 3 |
10 files changed, 1637 insertions, 0 deletions
diff --git a/plugins/WinVST/ToVinyl4/.vs/Console4Channel64/v14/.suo b/plugins/WinVST/ToVinyl4/.vs/Console4Channel64/v14/.suo Binary files differnew file mode 100755 index 0000000..777b846 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/.vs/Console4Channel64/v14/.suo diff --git a/plugins/WinVST/ToVinyl4/.vs/VSTProject/v14/.suo b/plugins/WinVST/ToVinyl4/.vs/VSTProject/v14/.suo Binary files differnew file mode 100755 index 0000000..33b5837 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/.vs/VSTProject/v14/.suo diff --git a/plugins/WinVST/ToVinyl4/ToVinyl4.cpp b/plugins/WinVST/ToVinyl4/ToVinyl4.cpp new file mode 100755 index 0000000..b0c91f8 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/ToVinyl4.cpp @@ -0,0 +1,217 @@ +/* ======================================== + * ToVinyl4 - ToVinyl4.h + * Copyright (c) 2016 airwindows, All rights reserved + * ======================================== */ + +#ifndef __ToVinyl4_H +#include "ToVinyl4.h" +#endif + +AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new ToVinyl4(audioMaster);} + +ToVinyl4::ToVinyl4(audioMasterCallback audioMaster) : + AudioEffectX(audioMaster, kNumPrograms, kNumParameters) +{ + for(int count = 0; count < 11; count++) { + aMid[count] = 0.0; + bMid[count] = 0.0; + fMid[count] = 0.0; + aSide[count] = 0.0; + bSide[count] = 0.0; + fSide[count] = 0.0; + } + aMidPrev = 0.0; aSidePrev = 0.0; + bMidPrev = 0.0; bSidePrev = 0.0; + ataLastOutL = ataLastOutR = 0.0; + midSampleA = 0.0; + midSampleB = 0.0; + midSampleC = 0.0; + midSampleD = 0.0; + midSampleE = 0.0; + midSampleF = 0.0; + midSampleG = 0.0; + midSampleH = 0.0; + midSampleI = 0.0; + midSampleJ = 0.0; + midSampleK = 0.0; + midSampleL = 0.0; + midSampleM = 0.0; + midSampleN = 0.0; + midSampleO = 0.0; + midSampleP = 0.0; + midSampleQ = 0.0; + midSampleR = 0.0; + midSampleS = 0.0; + midSampleT = 0.0; + midSampleU = 0.0; + midSampleV = 0.0; + midSampleW = 0.0; + midSampleX = 0.0; + midSampleY = 0.0; + midSampleZ = 0.0; + + sideSampleA = 0.0; + sideSampleB = 0.0; + sideSampleC = 0.0; + sideSampleD = 0.0; + sideSampleE = 0.0; + sideSampleF = 0.0; + sideSampleG = 0.0; + sideSampleH = 0.0; + sideSampleI = 0.0; + sideSampleJ = 0.0; + sideSampleK = 0.0; + sideSampleL = 0.0; + sideSampleM = 0.0; + sideSampleN = 0.0; + sideSampleO = 0.0; + sideSampleP = 0.0; + sideSampleQ = 0.0; + sideSampleR = 0.0; + sideSampleS = 0.0; + sideSampleT = 0.0; + sideSampleU = 0.0; + sideSampleV = 0.0; + sideSampleW = 0.0; + sideSampleX = 0.0; + sideSampleY = 0.0; + sideSampleZ = 0.0; + s1L = s2L = s3L = 0.0; + o1L = o2L = o3L = 0.0; + m1L = m2L = desL = 0.0; + s1R = s2R = s3R = 0.0; + o1R = o2R = o3R = 0.0; + m1R = m2R = desR = 0.0; + + A = 0.203419; //22.0 hz = ((A*A)*290)+10 (A*A)*290 = 12 (A*A) = 0.0413793 sqrt() = 0.203419 + B = 0.3424051; //44.0 hz = ((B*B)*290)+10 (B*B)*290 = 34 (B*B) = 0.1172413 sqrt() = 0.3424051 + C = 0.32; + D = 0.064; + fpNShapeLA = 0.0; + fpNShapeLB = 0.0; + fpNShapeRA = 0.0; + fpNShapeRB = 0.0; + fpFlip = true; + //this is reset: values being initialized only once. Startup values, whatever they are. + + _canDo.insert("plugAsChannelInsert"); // plug-in can be used as a channel insert effect. + _canDo.insert("plugAsSend"); // plug-in can be used as a send effect. + _canDo.insert("x2in2out"); + setNumInputs(kNumInputs); + setNumOutputs(kNumOutputs); + setUniqueID(kUniqueId); + canProcessReplacing(); // supports output replacing + canDoubleReplacing(); // supports double precision processing + programsAreChunks(true); + vst_strncpy (_programName, "Default", kVstMaxProgNameLen); // default program name +} + +ToVinyl4::~ToVinyl4() {} +VstInt32 ToVinyl4::getVendorVersion () {return 1000;} +void ToVinyl4::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);} +void ToVinyl4::getProgramName(char *name) {vst_strncpy (name, _programName, kVstMaxProgNameLen);} +//airwindows likes to ignore this stuff. Make your own programs, and make a different plugin rather than +//trying to do versioning and preventing people from using older versions. Maybe they like the old one! + +static float pinParameter(float data) +{ + if (data < 0.0f) return 0.0f; + if (data > 1.0f) return 1.0f; + return data; +} + +VstInt32 ToVinyl4::getChunk (void** data, bool isPreset) +{ + float *chunkData = (float *)calloc(kNumParameters, sizeof(float)); + chunkData[0] = A; + chunkData[1] = B; + chunkData[2] = C; + chunkData[3] = D; + /* Note: The way this is set up, it will break if you manage to save settings on an Intel + machine and load them on a PPC Mac. However, it's fine if you stick to the machine you + started with. */ + + *data = chunkData; + return kNumParameters * sizeof(float); +} + +VstInt32 ToVinyl4::setChunk (void* data, VstInt32 byteSize, bool isPreset) +{ + float *chunkData = (float *)data; + A = pinParameter(chunkData[0]); + B = pinParameter(chunkData[1]); + C = pinParameter(chunkData[2]); + D = pinParameter(chunkData[3]); + /* We're ignoring byteSize as we found it to be a filthy liar */ + + /* calculate any other fields you need here - you could copy in + code from setParameter() here. */ + return 0; +} + +void ToVinyl4::setParameter(VstInt32 index, float value) { + switch (index) { + case kParamA: A = value; break; + case kParamB: B = value; break; + case kParamC: C = value; break; + case kParamD: D = value; break; + default: throw; // unknown parameter, shouldn't happen! + } +} + +float ToVinyl4::getParameter(VstInt32 index) { + switch (index) { + case kParamA: return A; break; + case kParamB: return B; break; + case kParamC: return C; break; + case kParamD: return D; break; + default: break; // unknown parameter, shouldn't happen! + } return 0.0; //we only need to update the relevant name, this is simple to manage +} + +void ToVinyl4::getParameterName(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "Mid HiP", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "SideHiP", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "H Limit", kVstMaxParamStrLen); break; + case kParamD: vst_strncpy (text, "Gv Wear", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this is our labels for displaying in the VST host +} + +void ToVinyl4::getParameterDisplay(VstInt32 index, char *text) { + switch (index) { + case kParamA: float2string (((A*A)*290.0)+10.0, text, kVstMaxParamStrLen); break; + case kParamB: float2string (((B*B)*290.0)+10.0, text, kVstMaxParamStrLen); break; + case kParamC: float2string (C, text, kVstMaxParamStrLen); break; + case kParamD: float2string (D, text, kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this displays the values and handles 'popups' where it's discrete choices +} + +void ToVinyl4::getParameterLabel(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "hz", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "hz", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } +} + +VstInt32 ToVinyl4::canDo(char *text) +{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know + +bool ToVinyl4::getEffectName(char* name) { + vst_strncpy(name, "ToVinyl4", kVstMaxProductStrLen); return true; +} + +VstPlugCategory ToVinyl4::getPlugCategory() {return kPlugCategEffect;} + +bool ToVinyl4::getProductString(char* text) { + vst_strncpy (text, "airwindows ToVinyl4", kVstMaxProductStrLen); return true; +} + +bool ToVinyl4::getVendorString(char* text) { + vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true; +} diff --git a/plugins/WinVST/ToVinyl4/ToVinyl4.h b/plugins/WinVST/ToVinyl4/ToVinyl4.h new file mode 100755 index 0000000..57bffac --- /dev/null +++ b/plugins/WinVST/ToVinyl4/ToVinyl4.h @@ -0,0 +1,158 @@ +/* ======================================== + * ToVinyl4 - ToVinyl4.h + * Created 8/12/11 by SPIAdmin + * Copyright (c) 2011 __MyCompanyName__, All rights reserved + * ======================================== */ + +#ifndef __ToVinyl4_H +#define __ToVinyl4_H + +#ifndef __audioeffect__ +#include "audioeffectx.h" +#endif + +#include <set> +#include <string> +#include <math.h> + +enum { + kParamA = 0, + kParamB = 1, + kParamC = 2, + kParamD = 3, + kNumParameters = 4 +}; // + +const int kNumPrograms = 0; +const int kNumInputs = 2; +const int kNumOutputs = 2; +const unsigned long kUniqueId = 'tovb'; //Change this to what the AU identity is! + +class ToVinyl4 : + public AudioEffectX +{ +public: + ToVinyl4(audioMasterCallback audioMaster); + ~ToVinyl4(); + virtual bool getEffectName(char* name); // The plug-in name + virtual VstPlugCategory getPlugCategory(); // The general category for the plug-in + virtual bool getProductString(char* text); // This is a unique plug-in string provided by Steinberg + virtual bool getVendorString(char* text); // Vendor info + virtual VstInt32 getVendorVersion(); // Version number + virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); + virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames); + virtual void getProgramName(char *name); // read the name from the host + virtual void setProgramName(char *name); // changes the name of the preset displayed in the host + virtual VstInt32 getChunk (void** data, bool isPreset); + virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset); + virtual float getParameter(VstInt32 index); // get the parameter value at the specified index + virtual void setParameter(VstInt32 index, float value); // set the parameter at index to value + virtual void getParameterLabel(VstInt32 index, char *text); // label for the parameter (eg dB) + virtual void getParameterName(VstInt32 index, char *text); // name of the parameter + virtual void getParameterDisplay(VstInt32 index, char *text); // text description of the current value + virtual VstInt32 canDo(char *text); +private: + char _programName[kVstMaxProgNameLen + 1]; + std::set< std::string > _canDo; + + double ataLastOutL; + double ataLastOutR; + + double s1L; + double s2L; + double s3L; + double o1L; + double o2L; + double o3L; + double m1L; + double m2L; + double s1R; + double s2R; + double s3R; + double o1R; + double o2R; + double o3R; + double m1R; + double m2R; + double desL; + double desR; + + double midSampleA; + double midSampleB; + double midSampleC; + double midSampleD; + double midSampleE; + double midSampleF; + double midSampleG; + double midSampleH; + double midSampleI; + double midSampleJ; + double midSampleK; + double midSampleL; + double midSampleM; + double midSampleN; + double midSampleO; + double midSampleP; + double midSampleQ; + double midSampleR; + double midSampleS; + double midSampleT; + double midSampleU; + double midSampleV; + double midSampleW; + double midSampleX; + double midSampleY; + double midSampleZ; + + double sideSampleA; + double sideSampleB; + double sideSampleC; + double sideSampleD; + double sideSampleE; + double sideSampleF; + double sideSampleG; + double sideSampleH; + double sideSampleI; + double sideSampleJ; + double sideSampleK; + double sideSampleL; + double sideSampleM; + double sideSampleN; + double sideSampleO; + double sideSampleP; + double sideSampleQ; + double sideSampleR; + double sideSampleS; + double sideSampleT; + double sideSampleU; + double sideSampleV; + double sideSampleW; + double sideSampleX; + double sideSampleY; + double sideSampleZ; + + double aMid[11]; + double bMid[11]; + double fMid[11]; + double aSide[11]; + double bSide[11]; + double fSide[11]; + double aMidPrev; + double aSidePrev; + double bMidPrev; + double bSidePrev; + + long double fpNShapeLA; + long double fpNShapeLB; + long double fpNShapeRA; + long double fpNShapeRB; + bool fpFlip; + //default stuff + + float A; + float B; + float C; + float D; +}; + +#endif diff --git a/plugins/WinVST/ToVinyl4/ToVinyl4Proc.cpp b/plugins/WinVST/ToVinyl4/ToVinyl4Proc.cpp new file mode 100755 index 0000000..8d9dc0c --- /dev/null +++ b/plugins/WinVST/ToVinyl4/ToVinyl4Proc.cpp @@ -0,0 +1,981 @@ +/* ======================================== + * ToVinyl4 - ToVinyl4.h + * Copyright (c) 2016 airwindows, All rights reserved + * ======================================== */ + +#ifndef __ToVinyl4_H +#include "ToVinyl4.h" +#endif + +void ToVinyl4::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) +{ + float* in1 = inputs[0]; + float* in2 = inputs[1]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + float fpTemp; + long double fpOld = 0.618033988749894848204586; //golden ratio! + long double fpNew = 1.0 - fpOld; + + double fusswithscale = 50000; //corrected + double cutofffreq = ((A*A)*290.0)+10.0; + double resonance = 0.992; + + double midAmount = cutofffreq/fusswithscale; + midAmount /= overallscale; + + double midAmountA = midAmount * resonance; + double midAmountB = midAmountA * resonance; + double midAmountC = midAmountB * resonance; + double midAmountD = midAmountC * resonance; + double midAmountE = midAmountD * resonance; + double midAmountF = midAmountE * resonance; + double midAmountG = midAmountF * resonance; + double midAmountH = midAmountG * resonance; + double midAmountI = midAmountH * resonance; + double midAmountJ = midAmountI * resonance; + double midAmountK = midAmountJ * resonance; + double midAmountL = midAmountK * resonance; + double midAmountM = midAmountL * resonance; + double midAmountN = midAmountM * resonance; + double midAmountO = midAmountN * resonance; + double midAmountP = midAmountO * resonance; + double midAmountQ = midAmountP * resonance; + double midAmountR = midAmountQ * resonance; + double midAmountS = midAmountR * resonance; + double midAmountT = midAmountS * resonance; + double midAmountU = midAmountT * resonance; + double midAmountV = midAmountU * resonance; + double midAmountW = midAmountV * resonance; + double midAmountX = midAmountW * resonance; + double midAmountY = midAmountX * resonance; + double midAmountZ = midAmountY * resonance; + + + double midaltAmountA = 1.0 - midAmountA; + double midaltAmountB = 1.0 - midAmountB; + double midaltAmountC = 1.0 - midAmountC; + double midaltAmountD = 1.0 - midAmountD; + double midaltAmountE = 1.0 - midAmountE; + double midaltAmountF = 1.0 - midAmountF; + double midaltAmountG = 1.0 - midAmountG; + double midaltAmountH = 1.0 - midAmountH; + double midaltAmountI = 1.0 - midAmountI; + double midaltAmountJ = 1.0 - midAmountJ; + double midaltAmountK = 1.0 - midAmountK; + double midaltAmountL = 1.0 - midAmountL; + double midaltAmountM = 1.0 - midAmountM; + double midaltAmountN = 1.0 - midAmountN; + double midaltAmountO = 1.0 - midAmountO; + double midaltAmountP = 1.0 - midAmountP; + double midaltAmountQ = 1.0 - midAmountQ; + double midaltAmountR = 1.0 - midAmountR; + double midaltAmountS = 1.0 - midAmountS; + double midaltAmountT = 1.0 - midAmountT; + double midaltAmountU = 1.0 - midAmountU; + double midaltAmountV = 1.0 - midAmountV; + double midaltAmountW = 1.0 - midAmountW; + double midaltAmountX = 1.0 - midAmountX; + double midaltAmountY = 1.0 - midAmountY; + double midaltAmountZ = 1.0 - midAmountZ; + + cutofffreq = ((B*B)*290.0)+10.0; + double sideAmount = cutofffreq/fusswithscale; + sideAmount /= overallscale; + double sideAmountA = sideAmount * resonance; + double sideAmountB = sideAmountA * resonance; + double sideAmountC = sideAmountB * resonance; + double sideAmountD = sideAmountC * resonance; + double sideAmountE = sideAmountD * resonance; + double sideAmountF = sideAmountE * resonance; + double sideAmountG = sideAmountF * resonance; + double sideAmountH = sideAmountG * resonance; + double sideAmountI = sideAmountH * resonance; + double sideAmountJ = sideAmountI * resonance; + double sideAmountK = sideAmountJ * resonance; + double sideAmountL = sideAmountK * resonance; + double sideAmountM = sideAmountL * resonance; + double sideAmountN = sideAmountM * resonance; + double sideAmountO = sideAmountN * resonance; + double sideAmountP = sideAmountO * resonance; + double sideAmountQ = sideAmountP * resonance; + double sideAmountR = sideAmountQ * resonance; + double sideAmountS = sideAmountR * resonance; + double sideAmountT = sideAmountS * resonance; + double sideAmountU = sideAmountT * resonance; + double sideAmountV = sideAmountU * resonance; + double sideAmountW = sideAmountV * resonance; + double sideAmountX = sideAmountW * resonance; + double sideAmountY = sideAmountX * resonance; + double sideAmountZ = sideAmountY * resonance; + + + double sidealtAmountA = 1.0 - sideAmountA; + double sidealtAmountB = 1.0 - sideAmountB; + double sidealtAmountC = 1.0 - sideAmountC; + double sidealtAmountD = 1.0 - sideAmountD; + double sidealtAmountE = 1.0 - sideAmountE; + double sidealtAmountF = 1.0 - sideAmountF; + double sidealtAmountG = 1.0 - sideAmountG; + double sidealtAmountH = 1.0 - sideAmountH; + double sidealtAmountI = 1.0 - sideAmountI; + double sidealtAmountJ = 1.0 - sideAmountJ; + double sidealtAmountK = 1.0 - sideAmountK; + double sidealtAmountL = 1.0 - sideAmountL; + double sidealtAmountM = 1.0 - sideAmountM; + double sidealtAmountN = 1.0 - sideAmountN; + double sidealtAmountO = 1.0 - sideAmountO; + double sidealtAmountP = 1.0 - sideAmountP; + double sidealtAmountQ = 1.0 - sideAmountQ; + double sidealtAmountR = 1.0 - sideAmountR; + double sidealtAmountS = 1.0 - sideAmountS; + double sidealtAmountT = 1.0 - sideAmountT; + double sidealtAmountU = 1.0 - sideAmountU; + double sidealtAmountV = 1.0 - sideAmountV; + double sidealtAmountW = 1.0 - sideAmountW; + double sidealtAmountX = 1.0 - sideAmountX; + double sidealtAmountY = 1.0 - sideAmountY; + double sidealtAmountZ = 1.0 - sideAmountZ; + double tempMid; + double tempSide; + + double intensity = pow(C,3)*(32/overallscale); + double inputSampleL; + double inputSampleR; + double senseL; + double senseR; + double smoothL; + double smoothR; + double mid; + double side; + + overallscale = (D*9.0)+1.0; + double gain = overallscale; + //mid groove wear + if (gain > 1.0) {fMid[0] = 1.0; gain -= 1.0;} else {fMid[0] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[1] = 1.0; gain -= 1.0;} else {fMid[1] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[2] = 1.0; gain -= 1.0;} else {fMid[2] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[3] = 1.0; gain -= 1.0;} else {fMid[3] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[4] = 1.0; gain -= 1.0;} else {fMid[4] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[5] = 1.0; gain -= 1.0;} else {fMid[5] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[6] = 1.0; gain -= 1.0;} else {fMid[6] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[7] = 1.0; gain -= 1.0;} else {fMid[7] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[8] = 1.0; gain -= 1.0;} else {fMid[8] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[9] = 1.0; gain -= 1.0;} else {fMid[9] = gain; gain = 0.0;} + //there, now we have a neat little moving average with remainders + + if (overallscale < 1.0) overallscale = 1.0; + fMid[0] /= overallscale; + fMid[1] /= overallscale; + fMid[2] /= overallscale; + fMid[3] /= overallscale; + fMid[4] /= overallscale; + fMid[5] /= overallscale; + fMid[6] /= overallscale; + fMid[7] /= overallscale; + fMid[8] /= overallscale; + fMid[9] /= overallscale; + //and now it's neatly scaled, too + + overallscale = (D*4.5)+1.0; + gain = overallscale; + //side groove wear + if (gain > 1.0) {fSide[0] = 1.0; gain -= 1.0;} else {fSide[0] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[1] = 1.0; gain -= 1.0;} else {fSide[1] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[2] = 1.0; gain -= 1.0;} else {fSide[2] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[3] = 1.0; gain -= 1.0;} else {fSide[3] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[4] = 1.0; gain -= 1.0;} else {fSide[4] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[5] = 1.0; gain -= 1.0;} else {fSide[5] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[6] = 1.0; gain -= 1.0;} else {fSide[6] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[7] = 1.0; gain -= 1.0;} else {fSide[7] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[8] = 1.0; gain -= 1.0;} else {fSide[8] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[9] = 1.0; gain -= 1.0;} else {fSide[9] = gain; gain = 0.0;} + //there, now we have a neat little moving average with remainders + + if (overallscale < 1.0) overallscale = 1.0; + fSide[0] /= overallscale; + fSide[1] /= overallscale; + fSide[2] /= overallscale; + fSide[3] /= overallscale; + fSide[4] /= overallscale; + fSide[5] /= overallscale; + fSide[6] /= overallscale; + fSide[7] /= overallscale; + fSide[8] /= overallscale; + fSide[9] /= overallscale; + //and now it's neatly scaled, too + + double tempSample; + double accumulatorSample; + double midCorrection; + double sideCorrection; + double correction; + + + while (--sampleFrames >= 0) + { + inputSampleL = *in1; + inputSampleR = *in2; + if (inputSampleL<1.2e-38 && -inputSampleL<1.2e-38) { + static int noisesource = 0; + //this declares a variable before anything else is compiled. It won't keep assigning + //it to 0 for every sample, it's as if the declaration doesn't exist in this context, + //but it lets me add this denormalization fix in a single place rather than updating + //it in three different locations. The variable isn't thread-safe but this is only + //a random seed and we can share it with whatever. + noisesource = noisesource % 1700021; noisesource++; + int residue = noisesource * noisesource; + residue = residue % 170003; residue *= residue; + residue = residue % 17011; residue *= residue; + residue = residue % 1709; residue *= residue; + residue = residue % 173; residue *= residue; + residue = residue % 17; + double applyresidue = residue; + applyresidue *= 0.00000001; + applyresidue *= 0.00000001; + inputSampleL = applyresidue; + } + if (inputSampleR<1.2e-38 && -inputSampleR<1.2e-38) { + static int noisesource = 0; + noisesource = noisesource % 1700021; noisesource++; + int residue = noisesource * noisesource; + residue = residue % 170003; residue *= residue; + residue = residue % 17011; residue *= residue; + residue = residue % 1709; residue *= residue; + residue = residue % 173; residue *= residue; + residue = residue % 17; + double applyresidue = residue; + applyresidue *= 0.00000001; + applyresidue *= 0.00000001; + inputSampleR = applyresidue; + //this denormalization routine produces a white noise at -300 dB which the noise + //shaping will interact with to produce a bipolar output, but the noise is actually + //all positive. That should stop any variables from going denormal, and the routine + //only kicks in if digital black is input. As a final touch, if you save to 24-bit + //the silence will return to being digital black again. + } + + s3L = s2L; + s2L = s1L; + s1L = inputSampleL; + smoothL = (s3L + s2L + s1L) / 3.0; + m1L = (s1L-s2L)*((s1L-s2L)/1.3); + m2L = (s2L-s3L)*((s1L-s2L)/1.3); + senseL = fabs(m1L-m2L); + senseL = (intensity*intensity*senseL); + o3L = o2L; + o2L = o1L; + o1L = senseL; + if (o2L > senseL) senseL = o2L; + if (o3L > senseL) senseL = o3L; + //sense on the most intense + + s3R = s2R; + s2R = s1R; + s1R = inputSampleR; + smoothR = (s3R + s2R + s1R) / 3.0; + m1R = (s1R-s2R)*((s1R-s2R)/1.3); + m2R = (s2R-s3R)*((s1R-s2R)/1.3); + senseR = fabs(m1R-m2R); + senseR = (intensity*intensity*senseR); + o3R = o2R; + o2R = o1R; + o1R = senseR; + if (o2R > senseR) senseR = o2R; + if (o3R > senseR) senseR = o3R; + //sense on the most intense + + + if (senseL > 1.0) senseL = 1.0; + if (senseR > 1.0) senseR = 1.0; + + inputSampleL *= (1.0-senseL); + inputSampleR *= (1.0-senseR); + + inputSampleL += (smoothL*senseL); + inputSampleR += (smoothR*senseR); + //we need to do the de-ess before anything else, and feed the result into the antialiasing- + //but the trigger runs off just the input samples + + tempMid = mid = inputSampleL + inputSampleR; + tempSide = side = inputSampleL - inputSampleR; + //assign mid and side. + + tempSample = mid; + midSampleA = (midSampleA * midaltAmountA) + (tempSample * midAmountA); tempSample -= midSampleA; + midSampleB = (midSampleB * midaltAmountB) + (tempSample * midAmountB); tempSample -= midSampleB; + midSampleC = (midSampleC * midaltAmountC) + (tempSample * midAmountC); tempSample -= midSampleC; + midSampleD = (midSampleD * midaltAmountD) + (tempSample * midAmountD); tempSample -= midSampleD; + midSampleE = (midSampleE * midaltAmountE) + (tempSample * midAmountE); tempSample -= midSampleE; + midSampleF = (midSampleF * midaltAmountF) + (tempSample * midAmountF); tempSample -= midSampleF; + midSampleG = (midSampleG * midaltAmountG) + (tempSample * midAmountG); tempSample -= midSampleG; + midSampleH = (midSampleH * midaltAmountH) + (tempSample * midAmountH); tempSample -= midSampleH; + midSampleI = (midSampleI * midaltAmountI) + (tempSample * midAmountI); tempSample -= midSampleI; + midSampleJ = (midSampleJ * midaltAmountJ) + (tempSample * midAmountJ); tempSample -= midSampleJ; + midSampleK = (midSampleK * midaltAmountK) + (tempSample * midAmountK); tempSample -= midSampleK; + midSampleL = (midSampleL * midaltAmountL) + (tempSample * midAmountL); tempSample -= midSampleL; + midSampleM = (midSampleM * midaltAmountM) + (tempSample * midAmountM); tempSample -= midSampleM; + midSampleN = (midSampleN * midaltAmountN) + (tempSample * midAmountN); tempSample -= midSampleN; + midSampleO = (midSampleO * midaltAmountO) + (tempSample * midAmountO); tempSample -= midSampleO; + midSampleP = (midSampleP * midaltAmountP) + (tempSample * midAmountP); tempSample -= midSampleP; + midSampleQ = (midSampleQ * midaltAmountQ) + (tempSample * midAmountQ); tempSample -= midSampleQ; + midSampleR = (midSampleR * midaltAmountR) + (tempSample * midAmountR); tempSample -= midSampleR; + midSampleS = (midSampleS * midaltAmountS) + (tempSample * midAmountS); tempSample -= midSampleS; + midSampleT = (midSampleT * midaltAmountT) + (tempSample * midAmountT); tempSample -= midSampleT; + midSampleU = (midSampleU * midaltAmountU) + (tempSample * midAmountU); tempSample -= midSampleU; + midSampleV = (midSampleV * midaltAmountV) + (tempSample * midAmountV); tempSample -= midSampleV; + midSampleW = (midSampleW * midaltAmountW) + (tempSample * midAmountW); tempSample -= midSampleW; + midSampleX = (midSampleX * midaltAmountX) + (tempSample * midAmountX); tempSample -= midSampleX; + midSampleY = (midSampleY * midaltAmountY) + (tempSample * midAmountY); tempSample -= midSampleY; + midSampleZ = (midSampleZ * midaltAmountZ) + (tempSample * midAmountZ); tempSample -= midSampleZ; + correction = midCorrection = mid - tempSample; + mid -= correction; + + tempSample = side; + sideSampleA = (sideSampleA * sidealtAmountA) + (tempSample * sideAmountA); tempSample -= sideSampleA; + sideSampleB = (sideSampleB * sidealtAmountB) + (tempSample * sideAmountB); tempSample -= sideSampleB; + sideSampleC = (sideSampleC * sidealtAmountC) + (tempSample * sideAmountC); tempSample -= sideSampleC; + sideSampleD = (sideSampleD * sidealtAmountD) + (tempSample * sideAmountD); tempSample -= sideSampleD; + sideSampleE = (sideSampleE * sidealtAmountE) + (tempSample * sideAmountE); tempSample -= sideSampleE; + sideSampleF = (sideSampleF * sidealtAmountF) + (tempSample * sideAmountF); tempSample -= sideSampleF; + sideSampleG = (sideSampleG * sidealtAmountG) + (tempSample * sideAmountG); tempSample -= sideSampleG; + sideSampleH = (sideSampleH * sidealtAmountH) + (tempSample * sideAmountH); tempSample -= sideSampleH; + sideSampleI = (sideSampleI * sidealtAmountI) + (tempSample * sideAmountI); tempSample -= sideSampleI; + sideSampleJ = (sideSampleJ * sidealtAmountJ) + (tempSample * sideAmountJ); tempSample -= sideSampleJ; + sideSampleK = (sideSampleK * sidealtAmountK) + (tempSample * sideAmountK); tempSample -= sideSampleK; + sideSampleL = (sideSampleL * sidealtAmountL) + (tempSample * sideAmountL); tempSample -= sideSampleL; + sideSampleM = (sideSampleM * sidealtAmountM) + (tempSample * sideAmountM); tempSample -= sideSampleM; + sideSampleN = (sideSampleN * sidealtAmountN) + (tempSample * sideAmountN); tempSample -= sideSampleN; + sideSampleO = (sideSampleO * sidealtAmountO) + (tempSample * sideAmountO); tempSample -= sideSampleO; + sideSampleP = (sideSampleP * sidealtAmountP) + (tempSample * sideAmountP); tempSample -= sideSampleP; + sideSampleQ = (sideSampleQ * sidealtAmountQ) + (tempSample * sideAmountQ); tempSample -= sideSampleQ; + sideSampleR = (sideSampleR * sidealtAmountR) + (tempSample * sideAmountR); tempSample -= sideSampleR; + sideSampleS = (sideSampleS * sidealtAmountS) + (tempSample * sideAmountS); tempSample -= sideSampleS; + sideSampleT = (sideSampleT * sidealtAmountT) + (tempSample * sideAmountT); tempSample -= sideSampleT; + sideSampleU = (sideSampleU * sidealtAmountU) + (tempSample * sideAmountU); tempSample -= sideSampleU; + sideSampleV = (sideSampleV * sidealtAmountV) + (tempSample * sideAmountV); tempSample -= sideSampleV; + sideSampleW = (sideSampleW * sidealtAmountW) + (tempSample * sideAmountW); tempSample -= sideSampleW; + sideSampleX = (sideSampleX * sidealtAmountX) + (tempSample * sideAmountX); tempSample -= sideSampleX; + sideSampleY = (sideSampleY * sidealtAmountY) + (tempSample * sideAmountY); tempSample -= sideSampleY; + sideSampleZ = (sideSampleZ * sidealtAmountZ) + (tempSample * sideAmountZ); tempSample -= sideSampleZ; + correction = sideCorrection = side - tempSample; + side -= correction; + + + aMid[9] = aMid[8]; aMid[8] = aMid[7]; aMid[7] = aMid[6]; aMid[6] = aMid[5]; + aMid[5] = aMid[4]; aMid[4] = aMid[3]; aMid[3] = aMid[2]; aMid[2] = aMid[1]; + aMid[1] = aMid[0]; aMid[0] = accumulatorSample = (mid-aMidPrev); + + accumulatorSample *= fMid[0]; + accumulatorSample += (aMid[1] * fMid[1]); + accumulatorSample += (aMid[2] * fMid[2]); + accumulatorSample += (aMid[3] * fMid[3]); + accumulatorSample += (aMid[4] * fMid[4]); + accumulatorSample += (aMid[5] * fMid[5]); + accumulatorSample += (aMid[6] * fMid[6]); + accumulatorSample += (aMid[7] * fMid[7]); + accumulatorSample += (aMid[8] * fMid[8]); + accumulatorSample += (aMid[9] * fMid[9]); + //we are doing our repetitive calculations on a separate value + correction = (mid-aMidPrev) - accumulatorSample; + midCorrection += correction; + aMidPrev = mid; + mid -= correction; + + aSide[9] = aSide[8]; aSide[8] = aSide[7]; aSide[7] = aSide[6]; aSide[6] = aSide[5]; + aSide[5] = aSide[4]; aSide[4] = aSide[3]; aSide[3] = aSide[2]; aSide[2] = aSide[1]; + aSide[1] = aSide[0]; aSide[0] = accumulatorSample = (side-aSidePrev); + + accumulatorSample *= fSide[0]; + accumulatorSample += (aSide[1] * fSide[1]); + accumulatorSample += (aSide[2] * fSide[2]); + accumulatorSample += (aSide[3] * fSide[3]); + accumulatorSample += (aSide[4] * fSide[4]); + accumulatorSample += (aSide[5] * fSide[5]); + accumulatorSample += (aSide[6] * fSide[6]); + accumulatorSample += (aSide[7] * fSide[7]); + accumulatorSample += (aSide[8] * fSide[8]); + accumulatorSample += (aSide[9] * fSide[9]); + //we are doing our repetitive calculations on a separate value + correction = (side-aSidePrev) - accumulatorSample; + sideCorrection += correction; + aSidePrev = side; + side -= correction; + + + bMid[9] = bMid[8]; bMid[8] = bMid[7]; bMid[7] = bMid[6]; bMid[6] = bMid[5]; + bMid[5] = bMid[4]; bMid[4] = bMid[3]; bMid[3] = bMid[2]; bMid[2] = bMid[1]; + bMid[1] = bMid[0]; bMid[0] = accumulatorSample = (mid-bMidPrev); + + accumulatorSample *= fMid[0]; + accumulatorSample += (bMid[1] * fMid[1]); + accumulatorSample += (bMid[2] * fMid[2]); + accumulatorSample += (bMid[3] * fMid[3]); + accumulatorSample += (bMid[4] * fMid[4]); + accumulatorSample += (bMid[5] * fMid[5]); + accumulatorSample += (bMid[6] * fMid[6]); + accumulatorSample += (bMid[7] * fMid[7]); + accumulatorSample += (bMid[8] * fMid[8]); + accumulatorSample += (bMid[9] * fMid[9]); + //we are doing our repetitive calculations on a separate value + correction = (mid-bMidPrev) - accumulatorSample; + midCorrection += correction; + bMidPrev = mid; + + bSide[9] = bSide[8]; bSide[8] = bSide[7]; bSide[7] = bSide[6]; bSide[6] = bSide[5]; + bSide[5] = bSide[4]; bSide[4] = bSide[3]; bSide[3] = bSide[2]; bSide[2] = bSide[1]; + bSide[1] = bSide[0]; bSide[0] = accumulatorSample = (side-bSidePrev); + + accumulatorSample *= fSide[0]; + accumulatorSample += (bSide[1] * fSide[1]); + accumulatorSample += (bSide[2] * fSide[2]); + accumulatorSample += (bSide[3] * fSide[3]); + accumulatorSample += (bSide[4] * fSide[4]); + accumulatorSample += (bSide[5] * fSide[5]); + accumulatorSample += (bSide[6] * fSide[6]); + accumulatorSample += (bSide[7] * fSide[7]); + accumulatorSample += (bSide[8] * fSide[8]); + accumulatorSample += (bSide[9] * fSide[9]); + //we are doing our repetitive calculations on a separate value + correction = (side-bSidePrev) - accumulatorSample; + sideCorrection += correction; + bSidePrev = side; + + + mid = tempMid - midCorrection; + side = tempSide - sideCorrection; + inputSampleL = (mid+side)/2.0; + inputSampleR = (mid-side)/2.0; + + senseL /= 2.0; + senseR /= 2.0; + + + accumulatorSample = (ataLastOutL*senseL)+(inputSampleL*(1.0-senseL)); + ataLastOutL = inputSampleL; + inputSampleL = accumulatorSample; + + accumulatorSample = (ataLastOutR*senseR)+(inputSampleR*(1.0-senseR)); + ataLastOutR = inputSampleR; + inputSampleR = accumulatorSample; + //we just re-use accumulatorSample to do this little shuffle + + //noise shaping to 32-bit floating point + if (fpFlip) { + fpTemp = inputSampleL; + fpNShapeLA = (fpNShapeLA*fpOld)+((inputSampleL-fpTemp)*fpNew); + inputSampleL += fpNShapeLA; + fpTemp = inputSampleR; + fpNShapeRA = (fpNShapeRA*fpOld)+((inputSampleR-fpTemp)*fpNew); + inputSampleR += fpNShapeRA; + } + else { + fpTemp = inputSampleL; + fpNShapeLB = (fpNShapeLB*fpOld)+((inputSampleL-fpTemp)*fpNew); + inputSampleL += fpNShapeLB; + fpTemp = inputSampleR; + fpNShapeRB = (fpNShapeRB*fpOld)+((inputSampleR-fpTemp)*fpNew); + inputSampleR += fpNShapeRB; + } + fpFlip = !fpFlip; + //end noise shaping on 32 bit output + + *out1 = inputSampleL; + *out2 = inputSampleR; + + *in1++; + *in2++; + *out1++; + *out2++; + } +} + +void ToVinyl4::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) +{ + double* in1 = inputs[0]; + double* in2 = inputs[1]; + double* out1 = outputs[0]; + double* out2 = outputs[1]; + + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + double fpTemp; + long double fpOld = 0.618033988749894848204586; //golden ratio! + long double fpNew = 1.0 - fpOld; + + double fusswithscale = 50000; //corrected + double cutofffreq = ((A*A)*290.0)+10.0; + double resonance = 0.992; + + double midAmount = cutofffreq/fusswithscale; + midAmount /= overallscale; + + double midAmountA = midAmount * resonance; + double midAmountB = midAmountA * resonance; + double midAmountC = midAmountB * resonance; + double midAmountD = midAmountC * resonance; + double midAmountE = midAmountD * resonance; + double midAmountF = midAmountE * resonance; + double midAmountG = midAmountF * resonance; + double midAmountH = midAmountG * resonance; + double midAmountI = midAmountH * resonance; + double midAmountJ = midAmountI * resonance; + double midAmountK = midAmountJ * resonance; + double midAmountL = midAmountK * resonance; + double midAmountM = midAmountL * resonance; + double midAmountN = midAmountM * resonance; + double midAmountO = midAmountN * resonance; + double midAmountP = midAmountO * resonance; + double midAmountQ = midAmountP * resonance; + double midAmountR = midAmountQ * resonance; + double midAmountS = midAmountR * resonance; + double midAmountT = midAmountS * resonance; + double midAmountU = midAmountT * resonance; + double midAmountV = midAmountU * resonance; + double midAmountW = midAmountV * resonance; + double midAmountX = midAmountW * resonance; + double midAmountY = midAmountX * resonance; + double midAmountZ = midAmountY * resonance; + + + double midaltAmountA = 1.0 - midAmountA; + double midaltAmountB = 1.0 - midAmountB; + double midaltAmountC = 1.0 - midAmountC; + double midaltAmountD = 1.0 - midAmountD; + double midaltAmountE = 1.0 - midAmountE; + double midaltAmountF = 1.0 - midAmountF; + double midaltAmountG = 1.0 - midAmountG; + double midaltAmountH = 1.0 - midAmountH; + double midaltAmountI = 1.0 - midAmountI; + double midaltAmountJ = 1.0 - midAmountJ; + double midaltAmountK = 1.0 - midAmountK; + double midaltAmountL = 1.0 - midAmountL; + double midaltAmountM = 1.0 - midAmountM; + double midaltAmountN = 1.0 - midAmountN; + double midaltAmountO = 1.0 - midAmountO; + double midaltAmountP = 1.0 - midAmountP; + double midaltAmountQ = 1.0 - midAmountQ; + double midaltAmountR = 1.0 - midAmountR; + double midaltAmountS = 1.0 - midAmountS; + double midaltAmountT = 1.0 - midAmountT; + double midaltAmountU = 1.0 - midAmountU; + double midaltAmountV = 1.0 - midAmountV; + double midaltAmountW = 1.0 - midAmountW; + double midaltAmountX = 1.0 - midAmountX; + double midaltAmountY = 1.0 - midAmountY; + double midaltAmountZ = 1.0 - midAmountZ; + + cutofffreq = ((B*B)*290.0)+10.0; + double sideAmount = cutofffreq/fusswithscale; + sideAmount /= overallscale; + double sideAmountA = sideAmount * resonance; + double sideAmountB = sideAmountA * resonance; + double sideAmountC = sideAmountB * resonance; + double sideAmountD = sideAmountC * resonance; + double sideAmountE = sideAmountD * resonance; + double sideAmountF = sideAmountE * resonance; + double sideAmountG = sideAmountF * resonance; + double sideAmountH = sideAmountG * resonance; + double sideAmountI = sideAmountH * resonance; + double sideAmountJ = sideAmountI * resonance; + double sideAmountK = sideAmountJ * resonance; + double sideAmountL = sideAmountK * resonance; + double sideAmountM = sideAmountL * resonance; + double sideAmountN = sideAmountM * resonance; + double sideAmountO = sideAmountN * resonance; + double sideAmountP = sideAmountO * resonance; + double sideAmountQ = sideAmountP * resonance; + double sideAmountR = sideAmountQ * resonance; + double sideAmountS = sideAmountR * resonance; + double sideAmountT = sideAmountS * resonance; + double sideAmountU = sideAmountT * resonance; + double sideAmountV = sideAmountU * resonance; + double sideAmountW = sideAmountV * resonance; + double sideAmountX = sideAmountW * resonance; + double sideAmountY = sideAmountX * resonance; + double sideAmountZ = sideAmountY * resonance; + + + double sidealtAmountA = 1.0 - sideAmountA; + double sidealtAmountB = 1.0 - sideAmountB; + double sidealtAmountC = 1.0 - sideAmountC; + double sidealtAmountD = 1.0 - sideAmountD; + double sidealtAmountE = 1.0 - sideAmountE; + double sidealtAmountF = 1.0 - sideAmountF; + double sidealtAmountG = 1.0 - sideAmountG; + double sidealtAmountH = 1.0 - sideAmountH; + double sidealtAmountI = 1.0 - sideAmountI; + double sidealtAmountJ = 1.0 - sideAmountJ; + double sidealtAmountK = 1.0 - sideAmountK; + double sidealtAmountL = 1.0 - sideAmountL; + double sidealtAmountM = 1.0 - sideAmountM; + double sidealtAmountN = 1.0 - sideAmountN; + double sidealtAmountO = 1.0 - sideAmountO; + double sidealtAmountP = 1.0 - sideAmountP; + double sidealtAmountQ = 1.0 - sideAmountQ; + double sidealtAmountR = 1.0 - sideAmountR; + double sidealtAmountS = 1.0 - sideAmountS; + double sidealtAmountT = 1.0 - sideAmountT; + double sidealtAmountU = 1.0 - sideAmountU; + double sidealtAmountV = 1.0 - sideAmountV; + double sidealtAmountW = 1.0 - sideAmountW; + double sidealtAmountX = 1.0 - sideAmountX; + double sidealtAmountY = 1.0 - sideAmountY; + double sidealtAmountZ = 1.0 - sideAmountZ; + double tempMid; + double tempSide; + + double intensity = pow(C,3)*(32/overallscale); + double inputSampleL; + double inputSampleR; + double senseL; + double senseR; + double smoothL; + double smoothR; + double mid; + double side; + + overallscale = (D*9.0)+1.0; + double gain = overallscale; + //mid groove wear + if (gain > 1.0) {fMid[0] = 1.0; gain -= 1.0;} else {fMid[0] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[1] = 1.0; gain -= 1.0;} else {fMid[1] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[2] = 1.0; gain -= 1.0;} else {fMid[2] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[3] = 1.0; gain -= 1.0;} else {fMid[3] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[4] = 1.0; gain -= 1.0;} else {fMid[4] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[5] = 1.0; gain -= 1.0;} else {fMid[5] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[6] = 1.0; gain -= 1.0;} else {fMid[6] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[7] = 1.0; gain -= 1.0;} else {fMid[7] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[8] = 1.0; gain -= 1.0;} else {fMid[8] = gain; gain = 0.0;} + if (gain > 1.0) {fMid[9] = 1.0; gain -= 1.0;} else {fMid[9] = gain; gain = 0.0;} + //there, now we have a neat little moving average with remainders + + if (overallscale < 1.0) overallscale = 1.0; + fMid[0] /= overallscale; + fMid[1] /= overallscale; + fMid[2] /= overallscale; + fMid[3] /= overallscale; + fMid[4] /= overallscale; + fMid[5] /= overallscale; + fMid[6] /= overallscale; + fMid[7] /= overallscale; + fMid[8] /= overallscale; + fMid[9] /= overallscale; + //and now it's neatly scaled, too + + overallscale = (D*4.5)+1.0; + gain = overallscale; + //side groove wear + if (gain > 1.0) {fSide[0] = 1.0; gain -= 1.0;} else {fSide[0] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[1] = 1.0; gain -= 1.0;} else {fSide[1] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[2] = 1.0; gain -= 1.0;} else {fSide[2] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[3] = 1.0; gain -= 1.0;} else {fSide[3] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[4] = 1.0; gain -= 1.0;} else {fSide[4] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[5] = 1.0; gain -= 1.0;} else {fSide[5] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[6] = 1.0; gain -= 1.0;} else {fSide[6] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[7] = 1.0; gain -= 1.0;} else {fSide[7] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[8] = 1.0; gain -= 1.0;} else {fSide[8] = gain; gain = 0.0;} + if (gain > 1.0) {fSide[9] = 1.0; gain -= 1.0;} else {fSide[9] = gain; gain = 0.0;} + //there, now we have a neat little moving average with remainders + + if (overallscale < 1.0) overallscale = 1.0; + fSide[0] /= overallscale; + fSide[1] /= overallscale; + fSide[2] /= overallscale; + fSide[3] /= overallscale; + fSide[4] /= overallscale; + fSide[5] /= overallscale; + fSide[6] /= overallscale; + fSide[7] /= overallscale; + fSide[8] /= overallscale; + fSide[9] /= overallscale; + //and now it's neatly scaled, too + + double tempSample; + double accumulatorSample; + double midCorrection; + double sideCorrection; + double correction; + + while (--sampleFrames >= 0) + { + inputSampleL = *in1; + inputSampleR = *in2; + if (inputSampleL<1.2e-38 && -inputSampleL<1.2e-38) { + static int noisesource = 0; + //this declares a variable before anything else is compiled. It won't keep assigning + //it to 0 for every sample, it's as if the declaration doesn't exist in this context, + //but it lets me add this denormalization fix in a single place rather than updating + //it in three different locations. The variable isn't thread-safe but this is only + //a random seed and we can share it with whatever. + noisesource = noisesource % 1700021; noisesource++; + int residue = noisesource * noisesource; + residue = residue % 170003; residue *= residue; + residue = residue % 17011; residue *= residue; + residue = residue % 1709; residue *= residue; + residue = residue % 173; residue *= residue; + residue = residue % 17; + double applyresidue = residue; + applyresidue *= 0.00000001; + applyresidue *= 0.00000001; + inputSampleL = applyresidue; + } + if (inputSampleR<1.2e-38 && -inputSampleR<1.2e-38) { + static int noisesource = 0; + noisesource = noisesource % 1700021; noisesource++; + int residue = noisesource * noisesource; + residue = residue % 170003; residue *= residue; + residue = residue % 17011; residue *= residue; + residue = residue % 1709; residue *= residue; + residue = residue % 173; residue *= residue; + residue = residue % 17; + double applyresidue = residue; + applyresidue *= 0.00000001; + applyresidue *= 0.00000001; + inputSampleR = applyresidue; + //this denormalization routine produces a white noise at -300 dB which the noise + //shaping will interact with to produce a bipolar output, but the noise is actually + //all positive. That should stop any variables from going denormal, and the routine + //only kicks in if digital black is input. As a final touch, if you save to 24-bit + //the silence will return to being digital black again. + } + + s3L = s2L; + s2L = s1L; + s1L = inputSampleL; + smoothL = (s3L + s2L + s1L) / 3.0; + m1L = (s1L-s2L)*((s1L-s2L)/1.3); + m2L = (s2L-s3L)*((s1L-s2L)/1.3); + senseL = fabs(m1L-m2L); + senseL = (intensity*intensity*senseL); + o3L = o2L; + o2L = o1L; + o1L = senseL; + if (o2L > senseL) senseL = o2L; + if (o3L > senseL) senseL = o3L; + //sense on the most intense + + s3R = s2R; + s2R = s1R; + s1R = inputSampleR; + smoothR = (s3R + s2R + s1R) / 3.0; + m1R = (s1R-s2R)*((s1R-s2R)/1.3); + m2R = (s2R-s3R)*((s1R-s2R)/1.3); + senseR = fabs(m1R-m2R); + senseR = (intensity*intensity*senseR); + o3R = o2R; + o2R = o1R; + o1R = senseR; + if (o2R > senseR) senseR = o2R; + if (o3R > senseR) senseR = o3R; + //sense on the most intense + + + if (senseL > 1.0) senseL = 1.0; + if (senseR > 1.0) senseR = 1.0; + + inputSampleL *= (1.0-senseL); + inputSampleR *= (1.0-senseR); + + inputSampleL += (smoothL*senseL); + inputSampleR += (smoothR*senseR); + //we need to do the de-ess before anything else, and feed the result into the antialiasing- + //but the trigger runs off just the input samples + + tempMid = mid = inputSampleL + inputSampleR; + tempSide = side = inputSampleL - inputSampleR; + //assign mid and side. + + tempSample = mid; + midSampleA = (midSampleA * midaltAmountA) + (tempSample * midAmountA); tempSample -= midSampleA; + midSampleB = (midSampleB * midaltAmountB) + (tempSample * midAmountB); tempSample -= midSampleB; + midSampleC = (midSampleC * midaltAmountC) + (tempSample * midAmountC); tempSample -= midSampleC; + midSampleD = (midSampleD * midaltAmountD) + (tempSample * midAmountD); tempSample -= midSampleD; + midSampleE = (midSampleE * midaltAmountE) + (tempSample * midAmountE); tempSample -= midSampleE; + midSampleF = (midSampleF * midaltAmountF) + (tempSample * midAmountF); tempSample -= midSampleF; + midSampleG = (midSampleG * midaltAmountG) + (tempSample * midAmountG); tempSample -= midSampleG; + midSampleH = (midSampleH * midaltAmountH) + (tempSample * midAmountH); tempSample -= midSampleH; + midSampleI = (midSampleI * midaltAmountI) + (tempSample * midAmountI); tempSample -= midSampleI; + midSampleJ = (midSampleJ * midaltAmountJ) + (tempSample * midAmountJ); tempSample -= midSampleJ; + midSampleK = (midSampleK * midaltAmountK) + (tempSample * midAmountK); tempSample -= midSampleK; + midSampleL = (midSampleL * midaltAmountL) + (tempSample * midAmountL); tempSample -= midSampleL; + midSampleM = (midSampleM * midaltAmountM) + (tempSample * midAmountM); tempSample -= midSampleM; + midSampleN = (midSampleN * midaltAmountN) + (tempSample * midAmountN); tempSample -= midSampleN; + midSampleO = (midSampleO * midaltAmountO) + (tempSample * midAmountO); tempSample -= midSampleO; + midSampleP = (midSampleP * midaltAmountP) + (tempSample * midAmountP); tempSample -= midSampleP; + midSampleQ = (midSampleQ * midaltAmountQ) + (tempSample * midAmountQ); tempSample -= midSampleQ; + midSampleR = (midSampleR * midaltAmountR) + (tempSample * midAmountR); tempSample -= midSampleR; + midSampleS = (midSampleS * midaltAmountS) + (tempSample * midAmountS); tempSample -= midSampleS; + midSampleT = (midSampleT * midaltAmountT) + (tempSample * midAmountT); tempSample -= midSampleT; + midSampleU = (midSampleU * midaltAmountU) + (tempSample * midAmountU); tempSample -= midSampleU; + midSampleV = (midSampleV * midaltAmountV) + (tempSample * midAmountV); tempSample -= midSampleV; + midSampleW = (midSampleW * midaltAmountW) + (tempSample * midAmountW); tempSample -= midSampleW; + midSampleX = (midSampleX * midaltAmountX) + (tempSample * midAmountX); tempSample -= midSampleX; + midSampleY = (midSampleY * midaltAmountY) + (tempSample * midAmountY); tempSample -= midSampleY; + midSampleZ = (midSampleZ * midaltAmountZ) + (tempSample * midAmountZ); tempSample -= midSampleZ; + correction = midCorrection = mid - tempSample; + mid -= correction; + + tempSample = side; + sideSampleA = (sideSampleA * sidealtAmountA) + (tempSample * sideAmountA); tempSample -= sideSampleA; + sideSampleB = (sideSampleB * sidealtAmountB) + (tempSample * sideAmountB); tempSample -= sideSampleB; + sideSampleC = (sideSampleC * sidealtAmountC) + (tempSample * sideAmountC); tempSample -= sideSampleC; + sideSampleD = (sideSampleD * sidealtAmountD) + (tempSample * sideAmountD); tempSample -= sideSampleD; + sideSampleE = (sideSampleE * sidealtAmountE) + (tempSample * sideAmountE); tempSample -= sideSampleE; + sideSampleF = (sideSampleF * sidealtAmountF) + (tempSample * sideAmountF); tempSample -= sideSampleF; + sideSampleG = (sideSampleG * sidealtAmountG) + (tempSample * sideAmountG); tempSample -= sideSampleG; + sideSampleH = (sideSampleH * sidealtAmountH) + (tempSample * sideAmountH); tempSample -= sideSampleH; + sideSampleI = (sideSampleI * sidealtAmountI) + (tempSample * sideAmountI); tempSample -= sideSampleI; + sideSampleJ = (sideSampleJ * sidealtAmountJ) + (tempSample * sideAmountJ); tempSample -= sideSampleJ; + sideSampleK = (sideSampleK * sidealtAmountK) + (tempSample * sideAmountK); tempSample -= sideSampleK; + sideSampleL = (sideSampleL * sidealtAmountL) + (tempSample * sideAmountL); tempSample -= sideSampleL; + sideSampleM = (sideSampleM * sidealtAmountM) + (tempSample * sideAmountM); tempSample -= sideSampleM; + sideSampleN = (sideSampleN * sidealtAmountN) + (tempSample * sideAmountN); tempSample -= sideSampleN; + sideSampleO = (sideSampleO * sidealtAmountO) + (tempSample * sideAmountO); tempSample -= sideSampleO; + sideSampleP = (sideSampleP * sidealtAmountP) + (tempSample * sideAmountP); tempSample -= sideSampleP; + sideSampleQ = (sideSampleQ * sidealtAmountQ) + (tempSample * sideAmountQ); tempSample -= sideSampleQ; + sideSampleR = (sideSampleR * sidealtAmountR) + (tempSample * sideAmountR); tempSample -= sideSampleR; + sideSampleS = (sideSampleS * sidealtAmountS) + (tempSample * sideAmountS); tempSample -= sideSampleS; + sideSampleT = (sideSampleT * sidealtAmountT) + (tempSample * sideAmountT); tempSample -= sideSampleT; + sideSampleU = (sideSampleU * sidealtAmountU) + (tempSample * sideAmountU); tempSample -= sideSampleU; + sideSampleV = (sideSampleV * sidealtAmountV) + (tempSample * sideAmountV); tempSample -= sideSampleV; + sideSampleW = (sideSampleW * sidealtAmountW) + (tempSample * sideAmountW); tempSample -= sideSampleW; + sideSampleX = (sideSampleX * sidealtAmountX) + (tempSample * sideAmountX); tempSample -= sideSampleX; + sideSampleY = (sideSampleY * sidealtAmountY) + (tempSample * sideAmountY); tempSample -= sideSampleY; + sideSampleZ = (sideSampleZ * sidealtAmountZ) + (tempSample * sideAmountZ); tempSample -= sideSampleZ; + correction = sideCorrection = side - tempSample; + side -= correction; + + + aMid[9] = aMid[8]; aMid[8] = aMid[7]; aMid[7] = aMid[6]; aMid[6] = aMid[5]; + aMid[5] = aMid[4]; aMid[4] = aMid[3]; aMid[3] = aMid[2]; aMid[2] = aMid[1]; + aMid[1] = aMid[0]; aMid[0] = accumulatorSample = (mid-aMidPrev); + + accumulatorSample *= fMid[0]; + accumulatorSample += (aMid[1] * fMid[1]); + accumulatorSample += (aMid[2] * fMid[2]); + accumulatorSample += (aMid[3] * fMid[3]); + accumulatorSample += (aMid[4] * fMid[4]); + accumulatorSample += (aMid[5] * fMid[5]); + accumulatorSample += (aMid[6] * fMid[6]); + accumulatorSample += (aMid[7] * fMid[7]); + accumulatorSample += (aMid[8] * fMid[8]); + accumulatorSample += (aMid[9] * fMid[9]); + //we are doing our repetitive calculations on a separate value + correction = (mid-aMidPrev) - accumulatorSample; + midCorrection += correction; + aMidPrev = mid; + mid -= correction; + + aSide[9] = aSide[8]; aSide[8] = aSide[7]; aSide[7] = aSide[6]; aSide[6] = aSide[5]; + aSide[5] = aSide[4]; aSide[4] = aSide[3]; aSide[3] = aSide[2]; aSide[2] = aSide[1]; + aSide[1] = aSide[0]; aSide[0] = accumulatorSample = (side-aSidePrev); + + accumulatorSample *= fSide[0]; + accumulatorSample += (aSide[1] * fSide[1]); + accumulatorSample += (aSide[2] * fSide[2]); + accumulatorSample += (aSide[3] * fSide[3]); + accumulatorSample += (aSide[4] * fSide[4]); + accumulatorSample += (aSide[5] * fSide[5]); + accumulatorSample += (aSide[6] * fSide[6]); + accumulatorSample += (aSide[7] * fSide[7]); + accumulatorSample += (aSide[8] * fSide[8]); + accumulatorSample += (aSide[9] * fSide[9]); + //we are doing our repetitive calculations on a separate value + correction = (side-aSidePrev) - accumulatorSample; + sideCorrection += correction; + aSidePrev = side; + side -= correction; + + + bMid[9] = bMid[8]; bMid[8] = bMid[7]; bMid[7] = bMid[6]; bMid[6] = bMid[5]; + bMid[5] = bMid[4]; bMid[4] = bMid[3]; bMid[3] = bMid[2]; bMid[2] = bMid[1]; + bMid[1] = bMid[0]; bMid[0] = accumulatorSample = (mid-bMidPrev); + + accumulatorSample *= fMid[0]; + accumulatorSample += (bMid[1] * fMid[1]); + accumulatorSample += (bMid[2] * fMid[2]); + accumulatorSample += (bMid[3] * fMid[3]); + accumulatorSample += (bMid[4] * fMid[4]); + accumulatorSample += (bMid[5] * fMid[5]); + accumulatorSample += (bMid[6] * fMid[6]); + accumulatorSample += (bMid[7] * fMid[7]); + accumulatorSample += (bMid[8] * fMid[8]); + accumulatorSample += (bMid[9] * fMid[9]); + //we are doing our repetitive calculations on a separate value + correction = (mid-bMidPrev) - accumulatorSample; + midCorrection += correction; + bMidPrev = mid; + + bSide[9] = bSide[8]; bSide[8] = bSide[7]; bSide[7] = bSide[6]; bSide[6] = bSide[5]; + bSide[5] = bSide[4]; bSide[4] = bSide[3]; bSide[3] = bSide[2]; bSide[2] = bSide[1]; + bSide[1] = bSide[0]; bSide[0] = accumulatorSample = (side-bSidePrev); + + accumulatorSample *= fSide[0]; + accumulatorSample += (bSide[1] * fSide[1]); + accumulatorSample += (bSide[2] * fSide[2]); + accumulatorSample += (bSide[3] * fSide[3]); + accumulatorSample += (bSide[4] * fSide[4]); + accumulatorSample += (bSide[5] * fSide[5]); + accumulatorSample += (bSide[6] * fSide[6]); + accumulatorSample += (bSide[7] * fSide[7]); + accumulatorSample += (bSide[8] * fSide[8]); + accumulatorSample += (bSide[9] * fSide[9]); + //we are doing our repetitive calculations on a separate value + correction = (side-bSidePrev) - accumulatorSample; + sideCorrection += correction; + bSidePrev = side; + + + mid = tempMid - midCorrection; + side = tempSide - sideCorrection; + inputSampleL = (mid+side)/2.0; + inputSampleR = (mid-side)/2.0; + + senseL /= 2.0; + senseR /= 2.0; + + + accumulatorSample = (ataLastOutL*senseL)+(inputSampleL*(1.0-senseL)); + ataLastOutL = inputSampleL; + inputSampleL = accumulatorSample; + + accumulatorSample = (ataLastOutR*senseR)+(inputSampleR*(1.0-senseR)); + ataLastOutR = inputSampleR; + inputSampleR = accumulatorSample; + //we just re-use accumulatorSample to do this little shuffle + + //noise shaping to 64-bit floating point + if (fpFlip) { + fpTemp = inputSampleL; + fpNShapeLA = (fpNShapeLA*fpOld)+((inputSampleL-fpTemp)*fpNew); + inputSampleL += fpNShapeLA; + fpTemp = inputSampleR; + fpNShapeRA = (fpNShapeRA*fpOld)+((inputSampleR-fpTemp)*fpNew); + inputSampleR += fpNShapeRA; + } + else { + fpTemp = inputSampleL; + fpNShapeLB = (fpNShapeLB*fpOld)+((inputSampleL-fpTemp)*fpNew); + inputSampleL += fpNShapeLB; + fpTemp = inputSampleR; + fpNShapeRB = (fpNShapeRB*fpOld)+((inputSampleR-fpTemp)*fpNew); + inputSampleR += fpNShapeRB; + } + fpFlip = !fpFlip; + //end noise shaping on 64 bit output + + *out1 = inputSampleL; + *out2 = inputSampleR; + + *in1++; + *in2++; + *out1++; + *out2++; + } +}
\ No newline at end of file diff --git a/plugins/WinVST/ToVinyl4/VSTProject.sln b/plugins/WinVST/ToVinyl4/VSTProject.sln new file mode 100755 index 0000000..694b424 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/VSTProject.sln @@ -0,0 +1,28 @@ +
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VSTProject", "VSTProject.vcxproj", "{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x64.ActiveCfg = Debug|x64
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x64.Build.0 = Debug|x64
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x86.ActiveCfg = Debug|Win32
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x86.Build.0 = Debug|Win32
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x64.ActiveCfg = Release|x64
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x64.Build.0 = Release|x64
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x86.ActiveCfg = Release|Win32
+ {16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/plugins/WinVST/ToVinyl4/VSTProject.vcxproj b/plugins/WinVST/ToVinyl4/VSTProject.vcxproj new file mode 100755 index 0000000..cba0113 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/VSTProject.vcxproj @@ -0,0 +1,183 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.cpp" />
+ <ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.cpp" />
+ <ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\vstplugmain.cpp" />
+ <ClCompile Include="ToVinyl4.cpp" />
+ <ClCompile Include="ToVinyl4Proc.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\aeffeditor.h" />
+ <ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.h" />
+ <ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.h" />
+ <ClInclude Include="ToVinyl4.h" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}</ProjectGuid>
+ <RootNamespace>VSTProject</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ <ProjectName>ToVinyl464</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>NotSet</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>false</WholeProgramOptimization>
+ <CharacterSet>NotSet</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>NotSet</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>false</WholeProgramOptimization>
+ <CharacterSet>NotSet</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetExt>.dll</TargetExt>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <ExecutablePath>$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH)</ExecutablePath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <OutDir>$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir>$(Configuration)\</IntDir>
+ <ExecutablePath>$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH)</ExecutablePath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <MinimalRebuild>false</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>false</MinimalRebuild>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <IntrinsicFunctions>false</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;libc.lib;libcd.lib;libcmt.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <AdditionalDependencies>libcmt.lib;uuid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <IntrinsicFunctions>false</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;libc.lib;libcd.lib;libcmt.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <AdditionalDependencies>libcmt.lib;uuid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/plugins/WinVST/ToVinyl4/VSTProject.vcxproj.filters b/plugins/WinVST/ToVinyl4/VSTProject.vcxproj.filters new file mode 100755 index 0000000..e9344f3 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/VSTProject.vcxproj.filters @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\vstplugmain.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ToVinyl4.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ToVinyl4Proc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\aeffeditor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ToVinyl4.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/plugins/WinVST/ToVinyl4/VSTProject.vcxproj.user b/plugins/WinVST/ToVinyl4/VSTProject.vcxproj.user new file mode 100755 index 0000000..2216267 --- /dev/null +++ b/plugins/WinVST/ToVinyl4/VSTProject.vcxproj.user @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
+ <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+ </PropertyGroup>
+</Project>
\ No newline at end of file diff --git a/plugins/WinVST/ToVinyl4/vstplug.def b/plugins/WinVST/ToVinyl4/vstplug.def new file mode 100755 index 0000000..5bf499a --- /dev/null +++ b/plugins/WinVST/ToVinyl4/vstplug.def @@ -0,0 +1,3 @@ +EXPORTS
+ VSTPluginMain
+ main=VSTPluginMain
\ No newline at end of file |