Chamber and Undersampling Bugfix

This commit is contained in:
airwindows 2021-06-25 17:53:13 -04:00
parent 3aac179465
commit f673fe3da3
98 changed files with 13211 additions and 279 deletions

View file

@ -46,6 +46,7 @@ add_airwindows_plugin(C5RawChannel)
add_airwindows_plugin(Calibre)
add_airwindows_plugin(Capacitor)
add_airwindows_plugin(Capacitor2)
add_airwindows_plugin(Chamber)
add_airwindows_plugin(Channel4)
add_airwindows_plugin(Channel5)
add_airwindows_plugin(Channel6)

Binary file not shown.

View file

@ -0,0 +1,196 @@
/* ========================================
* Chamber - Chamber.h
* Copyright (c) 2016 airwindows, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#include "Chamber.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new Chamber(audioMaster);}
Chamber::Chamber(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.35;
B = 0.35;
C = 0.35;
D = 0.35;
E = 0.35;
iirAL = 0.0; iirAR = 0.0;
iirBL = 0.0; iirBR = 0.0;
iirCL = 0.0; iirCR = 0.0;
for(int count = 0; count < 19999; count++) {aEL[count] = 0.0;aER[count] = 0.0;}
for(int count = 0; count < 12360; count++) {aFL[count] = 0.0;aFR[count] = 0.0;}
for(int count = 0; count < 7639; count++) {aGL[count] = 0.0;aGR[count] = 0.0;}
for(int count = 0; count < 4721; count++) {aHL[count] = 0.0;aHR[count] = 0.0;}
for(int count = 0; count < 2915; count++) {aAL[count] = 0.0;aAR[count] = 0.0;}
for(int count = 0; count < 1803; count++) {aBL[count] = 0.0;aBR[count] = 0.0;}
for(int count = 0; count < 1114; count++) {aCL[count] = 0.0;aCR[count] = 0.0;}
for(int count = 0; count < 688; count++) {aDL[count] = 0.0;aDR[count] = 0.0;}
for(int count = 0; count < 425; count++) {aIL[count] = 0.0;aIR[count] = 0.0;}
for(int count = 0; count < 263; count++) {aJL[count] = 0.0;aJR[count] = 0.0;}
for(int count = 0; count < 162; count++) {aKL[count] = 0.0;aKR[count] = 0.0;}
for(int count = 0; count < 100; count++) {aLL[count] = 0.0;aLR[count] = 0.0;}
feedbackAL = 0.0; feedbackAR = 0.0;
feedbackBL = 0.0; feedbackBR = 0.0;
feedbackCL = 0.0; feedbackCR = 0.0;
feedbackDL = 0.0; feedbackDR = 0.0;
previousAL = 0.0; previousAR = 0.0;
previousBL = 0.0; previousBR = 0.0;
previousCL = 0.0; previousCR = 0.0;
previousDL = 0.0; previousDR = 0.0;
for(int count = 0; count < 9; count++) {lastRefL[count] = 0.0;lastRefR[count] = 0.0;}
countI = 1;
countJ = 1;
countK = 1;
countL = 1;
countA = 1;
countB = 1;
countC = 1;
countD = 1;
countE = 1;
countF = 1;
countG = 1;
countH = 1;
cycle = 0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
//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
}
Chamber::~Chamber() {}
VstInt32 Chamber::getVendorVersion () {return 1000;}
void Chamber::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void Chamber::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 Chamber::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
chunkData[3] = D;
chunkData[4] = E;
/* 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 Chamber::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]);
E = pinParameter(chunkData[4]);
/* 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 Chamber::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;
case kParamE: E = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float Chamber::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;
case kParamE: return E; 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 Chamber::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Bigness", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Longness", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Liteness", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Darkness", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Wetness", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void Chamber::getParameterDisplay(VstInt32 index, char *text) {
switch (index) {
case kParamA: float2string (A, text, kVstMaxParamStrLen); break;
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
case kParamC: float2string (C, text, kVstMaxParamStrLen); break;
case kParamD: float2string (D, text, kVstMaxParamStrLen); break;
case kParamE: float2string (E, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void Chamber::getParameterLabel(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 Chamber::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool Chamber::getEffectName(char* name) {
vst_strncpy(name, "Chamber", kVstMaxProductStrLen); return true;
}
VstPlugCategory Chamber::getPlugCategory() {return kPlugCategEffect;}
bool Chamber::getProductString(char* text) {
vst_strncpy (text, "airwindows Chamber", kVstMaxProductStrLen); return true;
}
bool Chamber::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,141 @@
/* ========================================
* Chamber - Chamber.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) 2011 __MyCompanyName__, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#define __Chamber_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA = 0,
kParamB = 1,
kParamC = 2,
kParamD = 3,
kParamE = 4,
kNumParameters = 5
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'cham'; //Change this to what the AU identity is!
class Chamber :
public AudioEffectX
{
public:
Chamber(audioMasterCallback audioMaster);
~Chamber();
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 iirAL;
double iirBL;
double iirCL;
double aEL[20000];
double aFL[12361];
double aGL[7640];
double aHL[4722];
double aAL[2916];
double aBL[1804];
double aCL[1115];
double aDL[689];
double aIL[426];
double aJL[264];
double aKL[163];
double aLL[101];
double feedbackAL;
double feedbackBL;
double feedbackCL;
double feedbackDL;
double previousAL;
double previousBL;
double previousCL;
double previousDL;
double lastRefL[10];
double iirAR;
double iirBR;
double iirCR;
double aER[20000];
double aFR[12361];
double aGR[7640];
double aHR[4722];
double aAR[2916];
double aBR[1804];
double aCR[1115];
double aDR[689];
double aIR[426];
double aJR[264];
double aKR[163];
double aLR[101];
double feedbackAR;
double feedbackBR;
double feedbackCR;
double feedbackDR;
double previousAR;
double previousBR;
double previousCR;
double previousDR;
double lastRefR[10];
int countA, delayA;
int countB, delayB;
int countC, delayC;
int countD, delayD;
int countE, delayE;
int countF, delayF;
int countG, delayG;
int countH, delayH;
int countI, delayI;
int countJ, delayJ;
int countK, delayK;
int countL, delayL;
int cycle; //all these ints are shared across channels, not duplicated
uint32_t fpdL;
uint32_t fpdR;
//default stuff
float A;
float B;
float C;
float D;
float E; //parameters. Always 0-1, and we scale/alter them elsewhere.
};
#endif

View file

@ -0,0 +1,532 @@
/* ========================================
* Chamber - Chamber.h
* Copyright (c) 2016 airwindows, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#include "Chamber.h"
#endif
void Chamber::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();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
double size = (pow(A,2)*0.9)+0.1;
double regen = (1.0-(pow(1.0-B,6)))*0.123;
double highpass = (pow(C,2.0))/sqrt(overallscale);
double lowpass = (1.0-pow(D,2.0))/sqrt(overallscale);
double interpolate = size*0.381966011250105;
double wet = E*2.0;
double dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-37) inputSampleL = fpdL * 1.18e-37;
if (fabs(inputSampleR)<1.18e-37) inputSampleR = fpdR * 1.18e-37;
long double drySampleL = inputSampleL;
long double drySampleR = inputSampleR;
if (fabs(iirCL)<1.18e-37) iirCL = 0.0;
iirCL = (iirCL*(1.0-highpass))+(inputSampleL*highpass); inputSampleL -= iirCL;
if (fabs(iirCR)<1.18e-37) iirCR = 0.0;
iirCR = (iirCR*(1.0-highpass))+(inputSampleR*highpass); inputSampleR -= iirCR;
//initial highpass
if (fabs(iirAL)<1.18e-37) iirAL = 0.0;
iirAL = (iirAL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirAL;
if (fabs(iirAR)<1.18e-37) iirAR = 0.0;
iirAR = (iirAR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirAR;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackAL = (feedbackAL*(1.0-interpolate))+(previousAL*interpolate); previousAL = feedbackAL;
feedbackBL = (feedbackBL*(1.0-interpolate))+(previousBL*interpolate); previousBL = feedbackBL;
feedbackCL = (feedbackCL*(1.0-interpolate))+(previousCL*interpolate); previousCL = feedbackCL;
feedbackDL = (feedbackDL*(1.0-interpolate))+(previousDL*interpolate); previousDL = feedbackDL;
feedbackAR = (feedbackAR*(1.0-interpolate))+(previousAR*interpolate); previousAR = feedbackAR;
feedbackBR = (feedbackBR*(1.0-interpolate))+(previousBR*interpolate); previousBR = feedbackBR;
feedbackCR = (feedbackCR*(1.0-interpolate))+(previousCR*interpolate); previousCR = feedbackCR;
feedbackDR = (feedbackDR*(1.0-interpolate))+(previousDR*interpolate); previousDR = feedbackDR;
aIL[countI] = inputSampleL + (feedbackAL * regen);
aJL[countJ] = inputSampleL + (feedbackBL * regen);
aKL[countK] = inputSampleL + (feedbackCL * regen);
aLL[countL] = inputSampleL + (feedbackDL * regen);
aIR[countI] = inputSampleR + (feedbackAR * regen);
aJR[countJ] = inputSampleR + (feedbackBR * regen);
aKR[countK] = inputSampleR + (feedbackCR * regen);
aLR[countL] = inputSampleR + (feedbackDR * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
double outIL = aIL[countI-((countI > delayI)?delayI+1:0)];
double outJL = aJL[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKL = aKL[countK-((countK > delayK)?delayK+1:0)];
double outLL = aLL[countL-((countL > delayL)?delayL+1:0)];
double outIR = aIR[countI-((countI > delayI)?delayI+1:0)];
double outJR = aJR[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKR = aKR[countK-((countK > delayK)?delayK+1:0)];
double outLR = aLR[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aAL[countA] = (outIL - (outJL + outKL + outLL));
aBL[countB] = (outJL - (outIL + outKL + outLL));
aCL[countC] = (outKL - (outIL + outJL + outLL));
aDL[countD] = (outLL - (outIL + outJL + outKL));
aAR[countA] = (outIR - (outJR + outKR + outLR));
aBR[countB] = (outJR - (outIR + outKR + outLR));
aCR[countC] = (outKR - (outIR + outJR + outLR));
aDR[countD] = (outLR - (outIR + outJR + outKR));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
double outAL = aAL[countA-((countA > delayA)?delayA+1:0)];
double outBL = aBL[countB-((countB > delayB)?delayB+1:0)];
double outCL = aCL[countC-((countC > delayC)?delayC+1:0)];
double outDL = aDL[countD-((countD > delayD)?delayD+1:0)];
double outAR = aAR[countA-((countA > delayA)?delayA+1:0)];
double outBR = aBR[countB-((countB > delayB)?delayB+1:0)];
double outCR = aCR[countC-((countC > delayC)?delayC+1:0)];
double outDR = aDR[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aEL[countE] = (outAL - (outBL + outCL + outDL));
aFL[countF] = (outBL - (outAL + outCL + outDL));
aGL[countG] = (outCL - (outAL + outBL + outDL));
aHL[countH] = (outDL - (outAL + outBL + outCL));
aER[countE] = (outAR - (outBR + outCR + outDR));
aFR[countF] = (outBR - (outAR + outCR + outDR));
aGR[countG] = (outCR - (outAR + outBR + outDR));
aHR[countH] = (outDR - (outAR + outBR + outCR));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
double outEL = aEL[countE-((countE > delayE)?delayE+1:0)];
double outFL = aFL[countF-((countF > delayF)?delayF+1:0)];
double outGL = aGL[countG-((countG > delayG)?delayG+1:0)];
double outHL = aHL[countH-((countH > delayH)?delayH+1:0)];
double outER = aER[countE-((countE > delayE)?delayE+1:0)];
double outFR = aFR[countF-((countF > delayF)?delayF+1:0)];
double outGR = aGR[countG-((countG > delayG)?delayG+1:0)];
double outHR = aHR[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackAL = (outEL - (outFL + outGL + outHL));
feedbackBL = (outFL - (outEL + outGL + outHL));
feedbackCL = (outGL - (outEL + outFL + outHL));
feedbackDL = (outHL - (outEL + outFL + outGL));
feedbackAR = (outER - (outFR + outGR + outHR));
feedbackBR = (outFR - (outER + outGR + outHR));
feedbackCR = (outGR - (outER + outFR + outHR));
feedbackDR = (outHR - (outER + outFR + outGR));
//which we need to feed back into the input again, a bit
inputSampleL = (outEL + outFL + outGL + outHL)/8.0;
inputSampleR = (outER + outFR + outGR + outHR)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRefL[0] = lastRefL[4]; //start from previous last
lastRefL[2] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[1] = (lastRefL[0] + lastRefL[2])/2; //one quarter
lastRefL[3] = (lastRefL[2] + inputSampleL)/2; //three quarters
lastRefL[4] = inputSampleL; //full
lastRefR[0] = lastRefR[4]; //start from previous last
lastRefR[2] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[1] = (lastRefR[0] + lastRefR[2])/2; //one quarter
lastRefR[3] = (lastRefR[2] + inputSampleR)/2; //three quarters
lastRefR[4] = inputSampleR; //full
}
if (cycleEnd == 3) {
lastRefL[0] = lastRefL[3]; //start from previous last
lastRefL[2] = (lastRefL[0]+lastRefL[0]+inputSampleL)/3; //third
lastRefL[1] = (lastRefL[0]+inputSampleL+inputSampleL)/3; //two thirds
lastRefL[3] = inputSampleL; //full
lastRefR[0] = lastRefR[3]; //start from previous last
lastRefR[2] = (lastRefR[0]+lastRefR[0]+inputSampleR)/3; //third
lastRefR[1] = (lastRefR[0]+inputSampleR+inputSampleR)/3; //two thirds
lastRefR[3] = inputSampleR; //full
}
if (cycleEnd == 2) {
lastRefL[0] = lastRefL[2]; //start from previous last
lastRefL[1] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[2] = inputSampleL; //full
lastRefR[0] = lastRefR[2]; //start from previous last
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[7])*0.5;
lastRefL[7] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[7])*0.5;
lastRefR[7] = lastRefR[8]; //continue, do not break
case 3:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[6])*0.5;
lastRefL[6] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[6])*0.5;
lastRefR[6] = lastRefR[8]; //continue, do not break
case 2:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[5])*0.5;
lastRefL[5] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[5])*0.5;
lastRefR[5] = lastRefR[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirBL)<1.18e-37) iirBL = 0.0;
iirBL = (iirBL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirBL;
if (fabs(iirBR)<1.18e-37) iirBR = 0.0;
iirBR = (iirBR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirBR;
//end filter
if (wet < 1.0) {inputSampleL *= wet; inputSampleR *= wet;}
if (dry < 1.0) {drySampleL *= dry; drySampleR *= dry;}
inputSampleL += drySampleL;
inputSampleR += drySampleR;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 32 bit stereo floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
frexpf((float)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
*in1++;
*in2++;
*out1++;
*out2++;
}
}
void Chamber::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();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
double size = (pow(A,2)*0.9)+0.1;
double regen = (1.0-(pow(1.0-B,6)))*0.123;
double highpass = (pow(C,2.0))/sqrt(overallscale);
double lowpass = (1.0-pow(D,2.0))/sqrt(overallscale);
double interpolate = size*0.381966011250105;
double wet = E*2.0;
double dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpdL * 1.18e-43;
if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpdR * 1.18e-43;
long double drySampleL = inputSampleL;
long double drySampleR = inputSampleR;
if (fabs(iirCL)<1.18e-37) iirCL = 0.0;
iirCL = (iirCL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL -= iirCL;
if (fabs(iirCR)<1.18e-37) iirCR = 0.0;
iirCR = (iirCR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR -= iirCR;
//initial highpass
if (fabs(iirAL)<1.18e-37) iirAL = 0.0;
iirAL = (iirAL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirAL;
if (fabs(iirAR)<1.18e-37) iirAR = 0.0;
iirAR = (iirAR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirAR;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackAL = (feedbackAL*(1.0-interpolate))+(previousAL*interpolate); previousAL = feedbackAL;
feedbackBL = (feedbackBL*(1.0-interpolate))+(previousBL*interpolate); previousBL = feedbackBL;
feedbackCL = (feedbackCL*(1.0-interpolate))+(previousCL*interpolate); previousCL = feedbackCL;
feedbackDL = (feedbackDL*(1.0-interpolate))+(previousDL*interpolate); previousDL = feedbackDL;
feedbackAR = (feedbackAR*(1.0-interpolate))+(previousAR*interpolate); previousAR = feedbackAR;
feedbackBR = (feedbackBR*(1.0-interpolate))+(previousBR*interpolate); previousBR = feedbackBR;
feedbackCR = (feedbackCR*(1.0-interpolate))+(previousCR*interpolate); previousCR = feedbackCR;
feedbackDR = (feedbackDR*(1.0-interpolate))+(previousDR*interpolate); previousDR = feedbackDR;
aIL[countI] = inputSampleL + (feedbackAL * regen);
aJL[countJ] = inputSampleL + (feedbackBL * regen);
aKL[countK] = inputSampleL + (feedbackCL * regen);
aLL[countL] = inputSampleL + (feedbackDL * regen);
aIR[countI] = inputSampleR + (feedbackAR * regen);
aJR[countJ] = inputSampleR + (feedbackBR * regen);
aKR[countK] = inputSampleR + (feedbackCR * regen);
aLR[countL] = inputSampleR + (feedbackDR * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
double outIL = aIL[countI-((countI > delayI)?delayI+1:0)];
double outJL = aJL[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKL = aKL[countK-((countK > delayK)?delayK+1:0)];
double outLL = aLL[countL-((countL > delayL)?delayL+1:0)];
double outIR = aIR[countI-((countI > delayI)?delayI+1:0)];
double outJR = aJR[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKR = aKR[countK-((countK > delayK)?delayK+1:0)];
double outLR = aLR[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aAL[countA] = (outIL - (outJL + outKL + outLL));
aBL[countB] = (outJL - (outIL + outKL + outLL));
aCL[countC] = (outKL - (outIL + outJL + outLL));
aDL[countD] = (outLL - (outIL + outJL + outKL));
aAR[countA] = (outIR - (outJR + outKR + outLR));
aBR[countB] = (outJR - (outIR + outKR + outLR));
aCR[countC] = (outKR - (outIR + outJR + outLR));
aDR[countD] = (outLR - (outIR + outJR + outKR));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
double outAL = aAL[countA-((countA > delayA)?delayA+1:0)];
double outBL = aBL[countB-((countB > delayB)?delayB+1:0)];
double outCL = aCL[countC-((countC > delayC)?delayC+1:0)];
double outDL = aDL[countD-((countD > delayD)?delayD+1:0)];
double outAR = aAR[countA-((countA > delayA)?delayA+1:0)];
double outBR = aBR[countB-((countB > delayB)?delayB+1:0)];
double outCR = aCR[countC-((countC > delayC)?delayC+1:0)];
double outDR = aDR[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aEL[countE] = (outAL - (outBL + outCL + outDL));
aFL[countF] = (outBL - (outAL + outCL + outDL));
aGL[countG] = (outCL - (outAL + outBL + outDL));
aHL[countH] = (outDL - (outAL + outBL + outCL));
aER[countE] = (outAR - (outBR + outCR + outDR));
aFR[countF] = (outBR - (outAR + outCR + outDR));
aGR[countG] = (outCR - (outAR + outBR + outDR));
aHR[countH] = (outDR - (outAR + outBR + outCR));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
double outEL = aEL[countE-((countE > delayE)?delayE+1:0)];
double outFL = aFL[countF-((countF > delayF)?delayF+1:0)];
double outGL = aGL[countG-((countG > delayG)?delayG+1:0)];
double outHL = aHL[countH-((countH > delayH)?delayH+1:0)];
double outER = aER[countE-((countE > delayE)?delayE+1:0)];
double outFR = aFR[countF-((countF > delayF)?delayF+1:0)];
double outGR = aGR[countG-((countG > delayG)?delayG+1:0)];
double outHR = aHR[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackAL = (outEL - (outFL + outGL + outHL));
feedbackBL = (outFL - (outEL + outGL + outHL));
feedbackCL = (outGL - (outEL + outFL + outHL));
feedbackDL = (outHL - (outEL + outFL + outGL));
feedbackAR = (outER - (outFR + outGR + outHR));
feedbackBR = (outFR - (outER + outGR + outHR));
feedbackCR = (outGR - (outER + outFR + outHR));
feedbackDR = (outHR - (outER + outFR + outGR));
//which we need to feed back into the input again, a bit
inputSampleL = (outEL + outFL + outGL + outHL)/8.0;
inputSampleR = (outER + outFR + outGR + outHR)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRefL[0] = lastRefL[4]; //start from previous last
lastRefL[2] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[1] = (lastRefL[0] + lastRefL[2])/2; //one quarter
lastRefL[3] = (lastRefL[2] + inputSampleL)/2; //three quarters
lastRefL[4] = inputSampleL; //full
lastRefR[0] = lastRefR[4]; //start from previous last
lastRefR[2] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[1] = (lastRefR[0] + lastRefR[2])/2; //one quarter
lastRefR[3] = (lastRefR[2] + inputSampleR)/2; //three quarters
lastRefR[4] = inputSampleR; //full
}
if (cycleEnd == 3) {
lastRefL[0] = lastRefL[3]; //start from previous last
lastRefL[2] = (lastRefL[0]+lastRefL[0]+inputSampleL)/3; //third
lastRefL[1] = (lastRefL[0]+inputSampleL+inputSampleL)/3; //two thirds
lastRefL[3] = inputSampleL; //full
lastRefR[0] = lastRefR[3]; //start from previous last
lastRefR[2] = (lastRefR[0]+lastRefR[0]+inputSampleR)/3; //third
lastRefR[1] = (lastRefR[0]+inputSampleR+inputSampleR)/3; //two thirds
lastRefR[3] = inputSampleR; //full
}
if (cycleEnd == 2) {
lastRefL[0] = lastRefL[2]; //start from previous last
lastRefL[1] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[2] = inputSampleL; //full
lastRefR[0] = lastRefR[2]; //start from previous last
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[7])*0.5;
lastRefL[7] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[7])*0.5;
lastRefR[7] = lastRefR[8]; //continue, do not break
case 3:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[6])*0.5;
lastRefL[6] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[6])*0.5;
lastRefR[6] = lastRefR[8]; //continue, do not break
case 2:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[5])*0.5;
lastRefL[5] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[5])*0.5;
lastRefR[5] = lastRefR[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirBL)<1.18e-37) iirBL = 0.0;
iirBL = (iirBL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirBL;
if (fabs(iirBR)<1.18e-37) iirBR = 0.0;
iirBR = (iirBR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirBR;
//end filter
if (wet < 1.0) {inputSampleL *= wet; inputSampleR *= wet;}
if (dry < 1.0) {drySampleL *= dry; drySampleR *= dry;}
inputSampleL += drySampleL;
inputSampleR += drySampleR;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 64 bit stereo floating point dither
int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
*in1++;
*in2++;
*out1++;
*out2++;
}
}

Binary file not shown.

0
plugins/LinuxVST/src/Galactic/Galactic.cpp Executable file → Normal file
View file

0
plugins/LinuxVST/src/Galactic/Galactic.h Executable file → Normal file
View file

12
plugins/LinuxVST/src/Galactic/GalacticProc.cpp Executable file → Normal file
View file

@ -200,7 +200,13 @@ void Galactic::processReplacing(float **inputs, float **outputs, VstInt32 sample
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -430,7 +436,13 @@ void Galactic::processDoubleReplacing(double **inputs, double **outputs, VstInt3
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

View file

View file

View file

@ -356,7 +356,13 @@ void IronOxideClassic2::processReplacing(float **inputs, float **outputs, VstInt
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -762,7 +768,13 @@ void IronOxideClassic2::processDoubleReplacing(double **inputs, double **outputs
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

Binary file not shown.

0
plugins/LinuxVST/src/Verbity/Verbity.cpp Executable file → Normal file
View file

0
plugins/LinuxVST/src/Verbity/Verbity.h Executable file → Normal file
View file

12
plugins/LinuxVST/src/Verbity/VerbityProc.cpp Executable file → Normal file
View file

@ -198,7 +198,13 @@ void Verbity::processReplacing(float **inputs, float **outputs, VstInt32 sampleF
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -428,7 +434,13 @@ void Verbity::processDoubleReplacing(double **inputs, double **outputs, VstInt32
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

View file

@ -0,0 +1,434 @@
/*
* File: Chamber.cpp
*
* Version: 1.0
*
* Created: 6/21/21
*
* Copyright: Copyright © 2021 Airwindows, All Rights Reserved
*
* Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
* consideration of your agreement to the following terms, and your use, installation, modification
* or redistribution of this Apple software constitutes acceptance of these terms. If you do
* not agree with these terms, please do not use, install, modify or redistribute this Apple
* software.
*
* In consideration of your agreement to abide by the following terms, and subject to these terms,
* Apple grants you a personal, non-exclusive license, under Apple's copyrights in this
* original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the
* Apple Software, with or without modifications, in source and/or binary forms; provided that if you
* redistribute the Apple Software in its entirety and without modifications, you must retain this
* notice and the following text and disclaimers in all such redistributions of the Apple Software.
* Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to
* endorse or promote products derived from the Apple Software without specific prior written
* permission from Apple. Except as expressly stated in this notice, no other rights or
* licenses, express or implied, are granted by Apple herein, including but not limited to any
* patent rights that may be infringed by your derivative works or by other works in which the
* Apple Software may be incorporated.
*
* The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR
* IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE
* OR IN COMBINATION WITH YOUR PRODUCTS.
*
* IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
* UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN
* IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*=============================================================================
Chamber.cpp
=============================================================================*/
#include "Chamber.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(Chamber)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::Chamber
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Chamber::Chamber(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_One, kDefaultValue_ParamOne );
SetParameter(kParam_Two, kDefaultValue_ParamTwo );
SetParameter(kParam_Three, kDefaultValue_ParamThree );
SetParameter(kParam_Four, kDefaultValue_ParamFour );
SetParameter(kParam_Five, kDefaultValue_ParamFive );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult Chamber::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult Chamber::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_One:
AUBase::FillInParameterName (outParameterInfo, kParameterOneName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamOne;
break;
case kParam_Two:
AUBase::FillInParameterName (outParameterInfo, kParameterTwoName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamTwo;
break;
case kParam_Three:
AUBase::FillInParameterName (outParameterInfo, kParameterThreeName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamThree;
break;
case kParam_Four:
AUBase::FillInParameterName (outParameterInfo, kParameterFourName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamFour;
break;
case kParam_Five:
AUBase::FillInParameterName (outParameterInfo, kParameterFiveName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamFive;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult Chamber::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult Chamber::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// Chamber::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult Chamber::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____ChamberEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::ChamberKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Chamber::ChamberKernel::Reset()
{
iirA = 0.0;
iirB = 0.0;
iirC = 0.0;
for(int count = 0; count < 19999; count++) {aE[count] = 0.0;}
for(int count = 0; count < 12360; count++) {aF[count] = 0.0;}
for(int count = 0; count < 7639; count++) {aG[count] = 0.0;}
for(int count = 0; count < 4721; count++) {aH[count] = 0.0;}
for(int count = 0; count < 2915; count++) {aA[count] = 0.0;}
for(int count = 0; count < 1803; count++) {aB[count] = 0.0;}
for(int count = 0; count < 1114; count++) {aC[count] = 0.0;}
for(int count = 0; count < 688; count++) {aD[count] = 0.0;}
for(int count = 0; count < 425; count++) {aI[count] = 0.0;}
for(int count = 0; count < 263; count++) {aJ[count] = 0.0;}
for(int count = 0; count < 162; count++) {aK[count] = 0.0;}
for(int count = 0; count < 100; count++) {aL[count] = 0.0;}
feedbackA = 0.0;
feedbackB = 0.0;
feedbackC = 0.0;
feedbackD = 0.0;
previousA = 0.0;
previousB = 0.0;
previousC = 0.0;
previousD = 0.0;
for(int count = 0; count < 9; count++) {lastRef[count] = 0.0;}
countI = 1;
countJ = 1;
countK = 1;
countL = 1;
countA = 1;
countB = 1;
countC = 1;
countD = 1;
countE = 1;
countF = 1;
countG = 1;
countH = 1;
cycle = 0;
fpd = 1.0; while (fpd < 16386) fpd = rand()*UINT32_MAX;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Chamber::ChamberKernel::Process
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Chamber::ChamberKernel::Process( const Float32 *inSourceP,
Float32 *inDestP,
UInt32 inFramesToProcess,
UInt32 inNumChannels,
bool &ioSilence )
{
UInt32 nSampleFrames = inFramesToProcess;
const Float32 *sourceP = inSourceP;
Float32 *destP = inDestP;
long double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= GetSampleRate();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
Float64 size = (pow(GetParameter( kParam_One ),2)*0.9)+0.1;
Float64 regen = (1.0-(pow(1.0-GetParameter( kParam_Two ),6)))*0.123;
Float64 highpass = (pow(GetParameter( kParam_Three ),2.0))/sqrt(overallscale);
Float64 lowpass = (1.0-pow(GetParameter( kParam_Four ),2.0))/sqrt(overallscale);
Float64 interpolate = size*0.381966011250105;
Float64 wet = GetParameter( kParam_Five )*2.0;
Float64 dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (nSampleFrames-- > 0) {
long double inputSample = *sourceP;
if (fabs(inputSample)<1.18e-37) inputSample = fpd * 1.18e-37;
double drySample = inputSample;
if (fabs(iirC)<1.18e-37) iirC = 0.0;
iirC = (iirC*(1.0-highpass))+(inputSample*highpass); inputSample -= iirC;
//initial highpass
if (fabs(iirA)<1.18e-37) iirA = 0.0;
iirA = (iirA*(1.0-lowpass))+(inputSample*lowpass); inputSample = iirA;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackA = (feedbackA*(1.0-interpolate))+(previousA*interpolate); previousA = feedbackA;
feedbackB = (feedbackB*(1.0-interpolate))+(previousB*interpolate); previousB = feedbackB;
feedbackC = (feedbackC*(1.0-interpolate))+(previousC*interpolate); previousC = feedbackC;
feedbackD = (feedbackD*(1.0-interpolate))+(previousD*interpolate); previousD = feedbackD;
aI[countI] = inputSample + (feedbackA * regen);
aJ[countJ] = inputSample + (feedbackB * regen);
aK[countK] = inputSample + (feedbackC * regen);
aL[countL] = inputSample + (feedbackD * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
Float64 outI = aI[countI-((countI > delayI)?delayI+1:0)];
Float64 outJ = aJ[countJ-((countJ > delayJ)?delayJ+1:0)];
Float64 outK = aK[countK-((countK > delayK)?delayK+1:0)];
Float64 outL = aL[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aA[countA] = (outI - (outJ + outK + outL));
aB[countB] = (outJ - (outI + outK + outL));
aC[countC] = (outK - (outI + outJ + outL));
aD[countD] = (outL - (outI + outJ + outK));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
Float64 outA = aA[countA-((countA > delayA)?delayA+1:0)];
Float64 outB = aB[countB-((countB > delayB)?delayB+1:0)];
Float64 outC = aC[countC-((countC > delayC)?delayC+1:0)];
Float64 outD = aD[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aE[countE] = (outA - (outB + outC + outD));
aF[countF] = (outB - (outA + outC + outD));
aG[countG] = (outC - (outA + outB + outD));
aH[countH] = (outD - (outA + outB + outC));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
Float64 outE = aE[countE-((countE > delayE)?delayE+1:0)];
Float64 outF = aF[countF-((countF > delayF)?delayF+1:0)];
Float64 outG = aG[countG-((countG > delayG)?delayG+1:0)];
Float64 outH = aH[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackA = (outE - (outF + outG + outH));
feedbackB = (outF - (outE + outG + outH));
feedbackC = (outG - (outE + outF + outH));
feedbackD = (outH - (outE + outF + outG));
//which we need to feed back into the input again, a bit
inputSample = (outE + outF + outG + outH)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRef[0] = lastRef[4]; //start from previous last
lastRef[2] = (lastRef[0] + inputSample)/2; //half
lastRef[1] = (lastRef[0] + lastRef[2])/2; //one quarter
lastRef[3] = (lastRef[2] + inputSample)/2; //three quarters
lastRef[4] = inputSample; //full
}
if (cycleEnd == 3) {
lastRef[0] = lastRef[3]; //start from previous last
lastRef[2] = (lastRef[0]+lastRef[0]+inputSample)/3; //third
lastRef[1] = (lastRef[0]+inputSample+inputSample)/3; //two thirds
lastRef[3] = inputSample; //full
}
if (cycleEnd == 2) {
lastRef[0] = lastRef[2]; //start from previous last
lastRef[1] = (lastRef[0] + inputSample)/2; //half
lastRef[2] = inputSample; //full
}
if (cycleEnd == 1) lastRef[0] = inputSample;
cycle = 0; //reset
inputSample = lastRef[cycle];
} else {
inputSample = lastRef[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRef[8] = inputSample; inputSample = (inputSample+lastRef[7])*0.5;
lastRef[7] = lastRef[8]; //continue, do not break
case 3:
lastRef[8] = inputSample; inputSample = (inputSample+lastRef[6])*0.5;
lastRef[6] = lastRef[8]; //continue, do not break
case 2:
lastRef[8] = inputSample; inputSample = (inputSample+lastRef[5])*0.5;
lastRef[5] = lastRef[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirB)<1.18e-37) iirB = 0.0;
iirB = (iirB*(1.0-lowpass))+(inputSample*lowpass); inputSample = iirB;
//end filter
if (wet < 1.0) inputSample *= wet;
if (dry < 1.0) drySample *= dry;
inputSample += drySample;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 32 bit floating point dither
int expon; frexpf((float)inputSample, &expon);
fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
inputSample += ((double(fpd)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit floating point dither
*destP = inputSample;
sourceP += inNumChannels; destP += inNumChannels;
}
}

View file

@ -0,0 +1 @@
_ChamberEntry

View file

@ -0,0 +1,189 @@
/*
* File: Chamber.h
*
* Version: 1.0
*
* Created: 6/21/21
*
* Copyright: Copyright © 2021 Airwindows, All Rights Reserved
*
* Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
* consideration of your agreement to the following terms, and your use, installation, modification
* or redistribution of this Apple software constitutes acceptance of these terms. If you do
* not agree with these terms, please do not use, install, modify or redistribute this Apple
* software.
*
* In consideration of your agreement to abide by the following terms, and subject to these terms,
* Apple grants you a personal, non-exclusive license, under Apple's copyrights in this
* original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the
* Apple Software, with or without modifications, in source and/or binary forms; provided that if you
* redistribute the Apple Software in its entirety and without modifications, you must retain this
* notice and the following text and disclaimers in all such redistributions of the Apple Software.
* Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to
* endorse or promote products derived from the Apple Software without specific prior written
* permission from Apple. Except as expressly stated in this notice, no other rights or
* licenses, express or implied, are granted by Apple herein, including but not limited to any
* patent rights that may be infringed by your derivative works or by other works in which the
* Apple Software may be incorporated.
*
* The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR
* IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE
* OR IN COMBINATION WITH YOUR PRODUCTS.
*
* IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
* UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN
* IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "AUEffectBase.h"
#include "ChamberVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __Chamber_h__
#define __Chamber_h__
#pragma mark ____Chamber Parameters
// parameters
static const float kDefaultValue_ParamOne = 0.35;
static const float kDefaultValue_ParamTwo = 0.35;
static const float kDefaultValue_ParamThree = 0.35;
static const float kDefaultValue_ParamFour = 0.35;
static const float kDefaultValue_ParamFive = 0.35;
static CFStringRef kParameterOneName = CFSTR("Bigness");
static CFStringRef kParameterTwoName = CFSTR("Longness");
static CFStringRef kParameterThreeName = CFSTR("Liteness");
static CFStringRef kParameterFourName = CFSTR("Darkness");
static CFStringRef kParameterFiveName = CFSTR("Wetness");
//Alter the name if desired, but using the plugin name is a start
enum {
kParam_One =0,
kParam_Two =1,
kParam_Three =2,
kParam_Four =3,
kParam_Five =4,
//Add your parameters here...
kNumberOfParameters=5
};
#pragma mark ____Chamber
class Chamber : public AUEffectBase
{
public:
Chamber(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~Chamber () { delete mDebugDispatcher; }
#endif
virtual AUKernelBase * NewKernel() { return new ChamberKernel(this); }
virtual ComponentResult GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings);
virtual ComponentResult GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo);
virtual ComponentResult GetPropertyInfo(AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable );
virtual ComponentResult GetProperty(AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData);
virtual ComponentResult Initialize();
virtual bool SupportsTail () { return true; }
virtual Float64 GetTailTime() {return (1.0/GetSampleRate())*0.0;} //in SECONDS! gsr * a number = in samples
virtual Float64 GetLatency() {return (1.0/GetSampleRate())*0.0;} // in SECONDS! gsr * a number = in samples
/*! @method Version */
virtual ComponentResult Version() { return kChamberVersion; }
protected:
class ChamberKernel : public AUKernelBase // most of the real work happens here
{
public:
ChamberKernel(AUEffectBase *inAudioUnit )
: AUKernelBase(inAudioUnit)
{
}
// *Required* overides for the process method for this effect
// processes one channel of interleaved samples
virtual void Process( const Float32 *inSourceP,
Float32 *inDestP,
UInt32 inFramesToProcess,
UInt32 inNumChannels,
bool &ioSilence);
virtual void Reset();
private:
Float64 iirA;
Float64 iirB;
Float64 iirC;
Float64 aE[20000];
Float64 aF[12361];
Float64 aG[7640];
Float64 aH[4722];
Float64 aA[2916];
Float64 aB[1804];
Float64 aC[1115];
Float64 aD[689];
Float64 aI[426];
Float64 aJ[264];
Float64 aK[163];
Float64 aL[101];
Float64 feedbackA;
Float64 feedbackB;
Float64 feedbackC;
Float64 feedbackD;
Float64 previousA;
Float64 previousB;
Float64 previousC;
Float64 previousD;
long double lastRef[10];
int countA, delayA;
int countB, delayB;
int countC, delayC;
int countD, delayD;
int countE, delayE;
int countF, delayF;
int countG, delayG;
int countH, delayH;
int countI, delayI;
int countJ, delayJ;
int countK, delayK;
int countL, delayL;
int cycle;
uint32_t fpd;
};
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: Chamber.r
*
* Version: 1.0
*
* Created: 6/21/21
*
* Copyright: Copyright © 2021 Airwindows, All Rights Reserved
*
* Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
* consideration of your agreement to the following terms, and your use, installation, modification
* or redistribution of this Apple software constitutes acceptance of these terms. If you do
* not agree with these terms, please do not use, install, modify or redistribute this Apple
* software.
*
* In consideration of your agreement to abide by the following terms, and subject to these terms,
* Apple grants you a personal, non-exclusive license, under Apple's copyrights in this
* original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the
* Apple Software, with or without modifications, in source and/or binary forms; provided that if you
* redistribute the Apple Software in its entirety and without modifications, you must retain this
* notice and the following text and disclaimers in all such redistributions of the Apple Software.
* Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to
* endorse or promote products derived from the Apple Software without specific prior written
* permission from Apple. Except as expressly stated in this notice, no other rights or
* licenses, express or implied, are granted by Apple herein, including but not limited to any
* patent rights that may be infringed by your derivative works or by other works in which the
* Apple Software may be incorporated.
*
* The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR
* IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE
* OR IN COMBINATION WITH YOUR PRODUCTS.
*
* IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
* UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN
* IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include <AudioUnit/AudioUnit.r>
#include "ChamberVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_Chamber 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Chamber~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_Chamber
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE Chamber_COMP_SUBTYPE
#define COMP_MANUF Chamber_COMP_MANF
#define VERSION kChamberVersion
#define NAME "Airwindows: Chamber"
#define DESCRIPTION "Chamber AU"
#define ENTRY_POINT "ChamberEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,159 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* Chamber */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
292,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
252,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 646267665;
PBXWorkspaceStateSaveDate = 646267665;
};
perUserProjectItems = {
8B6087C6268400E40032D630 /* PlistBookmark */ = 8B6087C6268400E40032D630 /* PlistBookmark */;
8B608839268541860032D630 /* PBXTextBookmark */ = 8B608839268541860032D630 /* PBXTextBookmark */;
8B60883A268541860032D630 /* PBXTextBookmark */ = 8B60883A268541860032D630 /* PBXTextBookmark */;
8B6088722685431C0032D630 /* PBXTextBookmark */ = 8B6088722685431C0032D630 /* PBXTextBookmark */;
8B6088732685431C0032D630 /* PBXTextBookmark */ = 8B6088732685431C0032D630 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B6087C6268400E40032D630 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/Chamber/Info.plist;
rLen = 0;
rLoc = 9223372036854775808;
};
8B608839268541860032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* ChamberVersion.h */;
name = "ChamberVersion.h: 54";
rLen = 0;
rLoc = 2881;
rType = 0;
vrLen = 230;
vrLoc = 2713;
};
8B60883A268541860032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* Chamber.h */;
name = "Chamber.h: 155";
rLen = 0;
rLoc = 5836;
rType = 0;
vrLen = 418;
vrLoc = 3011;
};
8B6088722685431C0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Chamber.cpp */;
name = "Chamber.cpp: 259";
rLen = 0;
rLoc = 11026;
rType = 0;
vrLen = 338;
vrLoc = 10831;
};
8B6088732685431C0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Chamber.cpp */;
name = "Chamber.cpp: 259";
rLen = 0;
rLoc = 11026;
rType = 0;
vrLen = 338;
vrLoc = 10831;
};
8BA05A660720730100365D66 /* Chamber.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {840, 7866}}";
sepNavSelRange = "{11026, 0}";
sepNavVisRange = "{10831, 338}";
sepNavWindowFrame = "{{534, 43}, {906, 835}}";
};
};
8BA05A690720730100365D66 /* ChamberVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1098}}";
sepNavSelRange = "{2881, 0}";
sepNavVisRange = "{2713, 230}";
sepNavWindowFrame = "{{15, 42}, {906, 835}}";
};
};
8BC6025B073B072D006C4272 /* Chamber.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 3186}}";
sepNavSelRange = "{5836, 0}";
sepNavVisRange = "{3011, 418}";
sepNavWindowFrame = "{{922, 43}, {906, 835}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* Chamber */ = {
activeExec = 0;
};
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,490 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
3EEA126E089847F5002C6BFC /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA126B089847F5002C6BFC /* CAVectorUnit.cpp */; };
3EEA126F089847F5002C6BFC /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEA126C089847F5002C6BFC /* CAVectorUnit.h */; };
3EEA1270089847F5002C6BFC /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEA126D089847F5002C6BFC /* CAVectorUnitTypes.h */; };
8B4119B70749654200361ABE /* Chamber.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* Chamber.r */; };
8BA05A6B0720730100365D66 /* Chamber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* Chamber.cpp */; };
8BA05A6E0720730100365D66 /* ChamberVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* ChamberVersion.h */; };
8BA05AAE072073D300365D66 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A7F072073D200365D66 /* AUBase.cpp */; };
8BA05AAF072073D300365D66 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A80072073D200365D66 /* AUBase.h */; };
8BA05AB0072073D300365D66 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A81072073D200365D66 /* AUDispatch.cpp */; };
8BA05AB1072073D300365D66 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A82072073D200365D66 /* AUDispatch.h */; };
8BA05AB2072073D300365D66 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A83072073D200365D66 /* AUInputElement.cpp */; };
8BA05AB3072073D300365D66 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A84072073D200365D66 /* AUInputElement.h */; };
8BA05AB4072073D300365D66 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A85072073D200365D66 /* AUOutputElement.cpp */; };
8BA05AB5072073D300365D66 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A86072073D200365D66 /* AUOutputElement.h */; };
8BA05AB7072073D300365D66 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A88072073D200365D66 /* AUScopeElement.cpp */; };
8BA05AB8072073D300365D66 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A89072073D200365D66 /* AUScopeElement.h */; };
8BA05AB9072073D300365D66 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A8A072073D200365D66 /* ComponentBase.cpp */; };
8BA05ABA072073D300365D66 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A8B072073D200365D66 /* ComponentBase.h */; };
8BA05AC6072073D300365D66 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */; };
8BA05AC7072073D300365D66 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A9B072073D200365D66 /* AUEffectBase.h */; };
8BA05AD2072073D300365D66 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AA7072073D200365D66 /* AUBuffer.cpp */; };
8BA05AD3072073D300365D66 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AA8072073D200365D66 /* AUBuffer.h */; };
8BA05AD4072073D300365D66 /* AUDebugDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */; };
8BA05AD5072073D300365D66 /* AUDebugDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */; };
8BA05AD6072073D300365D66 /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */; };
8BA05AD7072073D300365D66 /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */; };
8BA05AD8072073D300365D66 /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */; };
8BA05AE50720742100365D66 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */; };
8BA05AE60720742100365D66 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */; };
8BA05AE70720742100365D66 /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AE10720742100365D66 /* CAMutex.cpp */; };
8BA05AE80720742100365D66 /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE20720742100365D66 /* CAMutex.h */; };
8BA05AE90720742100365D66 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */; };
8BA05AEA0720742100365D66 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */; };
8BA05AFC072074E100365D66 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BA05AF9072074E100365D66 /* AudioToolbox.framework */; };
8BA05AFD072074E100365D66 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BA05AFA072074E100365D66 /* AudioUnit.framework */; };
8BA05B02072074F900365D66 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BA05B01072074F900365D66 /* CoreServices.framework */; };
8BA05B070720754400365D66 /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05B050720754400365D66 /* CAAUParameter.cpp */; };
8BA05B080720754400365D66 /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05B060720754400365D66 /* CAAUParameter.h */; };
8BC6025C073B072D006C4272 /* Chamber.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* Chamber.h */; };
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
F7C347F00ECE5AF8008ADFB6 /* AUBaseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7C347EE0ECE5AF8008ADFB6 /* AUBaseHelper.cpp */; };
F7C347F10ECE5AF8008ADFB6 /* AUBaseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C347EF0ECE5AF8008ADFB6 /* AUBaseHelper.h */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
3EEA126B089847F5002C6BFC /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = "<group>"; };
3EEA126C089847F5002C6BFC /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = "<group>"; };
3EEA126D089847F5002C6BFC /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; };
8B5C7FBF076FB2C200A15F61 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
8BA05A660720730100365D66 /* Chamber.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Chamber.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* Chamber.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = Chamber.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* Chamber.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = Chamber.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* ChamberVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ChamberVersion.h; sourceTree = "<group>"; };
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; };
8BA05A80072073D200365D66 /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; };
8BA05A81072073D200365D66 /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; };
8BA05A82072073D200365D66 /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; };
8BA05A83072073D200365D66 /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; };
8BA05A84072073D200365D66 /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; };
8BA05A85072073D200365D66 /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; };
8BA05A86072073D200365D66 /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; };
8BA05A87072073D200365D66 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; };
8BA05A88072073D200365D66 /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; };
8BA05A89072073D200365D66 /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; };
8BA05A8A072073D200365D66 /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; };
8BA05A8B072073D200365D66 /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; };
8BA05A9A072073D200365D66 /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; };
8BA05A9B072073D200365D66 /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; };
8BA05AA7072073D200365D66 /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
8BA05AA8072073D200365D66 /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; };
8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUDebugDispatcher.cpp; sourceTree = "<group>"; };
8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUDebugDispatcher.h; sourceTree = "<group>"; };
8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = "<group>"; };
8BA05AAC072073D200365D66 /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = "<group>"; };
8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = "<group>"; };
8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
8BA05AE10720742100365D66 /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAMutex.cpp; sourceTree = "<group>"; };
8BA05AE20720742100365D66 /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAMutex.h; sourceTree = "<group>"; };
8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
8BA05AF9072074E100365D66 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
8BA05AFA072074E100365D66 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
8BA05B01072074F900365D66 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
8BA05B050720754400365D66 /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = "<group>"; };
8BA05B060720754400365D66 /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = "<group>"; };
8BC6025B073B072D006C4272 /* Chamber.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Chamber.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* Chamber.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Chamber.component; sourceTree = BUILT_PRODUCTS_DIR; };
F7C347EE0ECE5AF8008ADFB6 /* AUBaseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUBaseHelper.cpp; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUBaseHelper.cpp; sourceTree = SYSTEM_DEVELOPER_DIR; };
F7C347EF0ECE5AF8008ADFB6 /* AUBaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUBaseHelper.h; path = Extras/CoreAudio/AudioUnits/AUPublic/Utility/AUBaseHelper.h; sourceTree = SYSTEM_DEVELOPER_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D01CCCD0486CAD60068D4B7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05AFC072074E100365D66 /* AudioToolbox.framework in Frameworks */,
8BA05AFD072074E100365D66 /* AudioUnit.framework in Frameworks */,
8BA05B02072074F900365D66 /* CoreServices.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
089C166AFE841209C02AAC07 /* Chamber */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = Chamber;
sourceTree = "<group>";
};
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
8B5C7FBF076FB2C200A15F61 /* CoreAudio.framework */,
8BA05B01072074F900365D66 /* CoreServices.framework */,
8BA05AF9072074E100365D66 /* AudioToolbox.framework */,
8BA05AFA072074E100365D66 /* AudioUnit.framework */,
);
name = "External Frameworks and Libraries";
sourceTree = "<group>";
};
089C167CFE841241C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
8D01CCD10486CAD60068D4B7 /* Info.plist */,
089C167DFE841241C02AAC07 /* InfoPlist.strings */,
);
name = Resources;
sourceTree = "<group>";
};
08FB77ADFE841716C02AAC07 /* Source */ = {
isa = PBXGroup;
children = (
8BA05A56072072A900365D66 /* AU Source */,
8BA05AEB0720742700365D66 /* PublicUtility */,
8BA05A7D072073D200365D66 /* AUPublic */,
);
name = Source;
sourceTree = "<group>";
};
19C28FB4FE9D528D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D01CCD20486CAD60068D4B7 /* Chamber.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* Chamber.h */,
8BA05A660720730100365D66 /* Chamber.cpp */,
8BA05A670720730100365D66 /* Chamber.exp */,
8BA05A680720730100365D66 /* Chamber.r */,
8BA05A690720730100365D66 /* ChamberVersion.h */,
);
name = "AU Source";
sourceTree = "<group>";
};
8BA05A7D072073D200365D66 /* AUPublic */ = {
isa = PBXGroup;
children = (
8BA05A7E072073D200365D66 /* AUBase */,
8BA05A99072073D200365D66 /* OtherBases */,
8BA05AA6072073D200365D66 /* Utility */,
);
name = AUPublic;
path = Extras/CoreAudio/AudioUnits/AUPublic;
sourceTree = SYSTEM_DEVELOPER_DIR;
};
8BA05A7E072073D200365D66 /* AUBase */ = {
isa = PBXGroup;
children = (
8BA05A7F072073D200365D66 /* AUBase.cpp */,
8BA05A80072073D200365D66 /* AUBase.h */,
8BA05A81072073D200365D66 /* AUDispatch.cpp */,
8BA05A82072073D200365D66 /* AUDispatch.h */,
8BA05A83072073D200365D66 /* AUInputElement.cpp */,
8BA05A84072073D200365D66 /* AUInputElement.h */,
8BA05A85072073D200365D66 /* AUOutputElement.cpp */,
8BA05A86072073D200365D66 /* AUOutputElement.h */,
8BA05A87072073D200365D66 /* AUResources.r */,
8BA05A88072073D200365D66 /* AUScopeElement.cpp */,
8BA05A89072073D200365D66 /* AUScopeElement.h */,
8BA05A8A072073D200365D66 /* ComponentBase.cpp */,
8BA05A8B072073D200365D66 /* ComponentBase.h */,
);
path = AUBase;
sourceTree = "<group>";
};
8BA05A99072073D200365D66 /* OtherBases */ = {
isa = PBXGroup;
children = (
8BA05A9A072073D200365D66 /* AUEffectBase.cpp */,
8BA05A9B072073D200365D66 /* AUEffectBase.h */,
);
path = OtherBases;
sourceTree = "<group>";
};
8BA05AA6072073D200365D66 /* Utility */ = {
isa = PBXGroup;
children = (
F7C347EE0ECE5AF8008ADFB6 /* AUBaseHelper.cpp */,
F7C347EF0ECE5AF8008ADFB6 /* AUBaseHelper.h */,
8BA05AA7072073D200365D66 /* AUBuffer.cpp */,
8BA05AA8072073D200365D66 /* AUBuffer.h */,
8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */,
8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */,
8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */,
8BA05AAC072073D200365D66 /* AUSilentTimeout.h */,
8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */,
);
path = Utility;
sourceTree = "<group>";
};
8BA05AEB0720742700365D66 /* PublicUtility */ = {
isa = PBXGroup;
children = (
8BA05B050720754400365D66 /* CAAUParameter.cpp */,
8BA05B060720754400365D66 /* CAAUParameter.h */,
8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */,
8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */,
8BA05AE10720742100365D66 /* CAMutex.cpp */,
8BA05AE20720742100365D66 /* CAMutex.h */,
8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */,
8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */,
3EEA126D089847F5002C6BFC /* CAVectorUnitTypes.h */,
3EEA126B089847F5002C6BFC /* CAVectorUnit.cpp */,
3EEA126C089847F5002C6BFC /* CAVectorUnit.h */,
);
name = PublicUtility;
path = Extras/CoreAudio/PublicUtility;
sourceTree = SYSTEM_DEVELOPER_DIR;
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8D01CCC70486CAD60068D4B7 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6E0720730100365D66 /* ChamberVersion.h in Headers */,
8BA05AAF072073D300365D66 /* AUBase.h in Headers */,
8BA05AB1072073D300365D66 /* AUDispatch.h in Headers */,
8BA05AB3072073D300365D66 /* AUInputElement.h in Headers */,
8BA05AB5072073D300365D66 /* AUOutputElement.h in Headers */,
8BA05AB8072073D300365D66 /* AUScopeElement.h in Headers */,
8BA05ABA072073D300365D66 /* ComponentBase.h in Headers */,
8BA05AC7072073D300365D66 /* AUEffectBase.h in Headers */,
8BA05AD3072073D300365D66 /* AUBuffer.h in Headers */,
8BA05AD5072073D300365D66 /* AUDebugDispatcher.h in Headers */,
8BA05AD6072073D300365D66 /* AUInputFormatConverter.h in Headers */,
8BA05AD7072073D300365D66 /* AUSilentTimeout.h in Headers */,
8BA05AD8072073D300365D66 /* AUTimestampGenerator.h in Headers */,
8BA05AE60720742100365D66 /* CAAudioChannelLayout.h in Headers */,
8BA05AE80720742100365D66 /* CAMutex.h in Headers */,
8BA05AEA0720742100365D66 /* CAStreamBasicDescription.h in Headers */,
8BA05B080720754400365D66 /* CAAUParameter.h in Headers */,
8BC6025C073B072D006C4272 /* Chamber.h in Headers */,
3EEA126F089847F5002C6BFC /* CAVectorUnit.h in Headers */,
3EEA1270089847F5002C6BFC /* CAVectorUnitTypes.h in Headers */,
F7C347F10ECE5AF8008ADFB6 /* AUBaseHelper.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* Chamber */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "Chamber" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = Chamber;
productInstallPath = "$(HOME)/Library/Bundles";
productName = Chamber;
productReference = 8D01CCD20486CAD60068D4B7 /* Chamber.component */;
productType = "com.apple.product-type.bundle";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
089C1669FE841209C02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 3E4BA247089833B7007656EC /* Build configuration list for PBXProject "Chamber" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* Chamber */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* Chamber */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D01CCC90486CAD60068D4B7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXRezBuildPhase section */
8D01CCCF0486CAD60068D4B7 /* Rez */ = {
isa = PBXRezBuildPhase;
buildActionMask = 2147483647;
files = (
8B4119B70749654200361ABE /* Chamber.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* Chamber.cpp in Sources */,
8BA05AAE072073D300365D66 /* AUBase.cpp in Sources */,
8BA05AB0072073D300365D66 /* AUDispatch.cpp in Sources */,
8BA05AB2072073D300365D66 /* AUInputElement.cpp in Sources */,
8BA05AB4072073D300365D66 /* AUOutputElement.cpp in Sources */,
8BA05AB7072073D300365D66 /* AUScopeElement.cpp in Sources */,
8BA05AB9072073D300365D66 /* ComponentBase.cpp in Sources */,
8BA05AC6072073D300365D66 /* AUEffectBase.cpp in Sources */,
8BA05AD2072073D300365D66 /* AUBuffer.cpp in Sources */,
8BA05AD4072073D300365D66 /* AUDebugDispatcher.cpp in Sources */,
8BA05AE50720742100365D66 /* CAAudioChannelLayout.cpp in Sources */,
8BA05AE70720742100365D66 /* CAMutex.cpp in Sources */,
8BA05AE90720742100365D66 /* CAStreamBasicDescription.cpp in Sources */,
8BA05B070720754400365D66 /* CAAUParameter.cpp in Sources */,
3EEA126E089847F5002C6BFC /* CAVectorUnit.cpp in Sources */,
F7C347F00ECE5AF8008ADFB6 /* AUBaseHelper.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C167EFE841241C02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
3E4BA244089833B7007656EC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
EXPORTED_SYMBOLS_FILE = Chamber.exp;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GENERATE_PKGINFO_FILE = YES;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
LIBRARY_STYLE = Bundle;
OTHER_LDFLAGS = "-bundle";
OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Examples/CoreAudio/AudioUnits/AUPublic/AUBase\"";
PRODUCT_NAME = Chamber;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = Chamber.exp;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GENERATE_PKGINFO_FILE = YES;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
LIBRARY_STYLE = Bundle;
MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_LDFLAGS = "-bundle";
OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Examples/CoreAudio/AudioUnits/AUPublic/AUBase\"";
PRODUCT_NAME = Chamber;
SDKROOT = macosx10.5;
STRIP_INSTALLED_PRODUCT = YES;
STRIP_STYLE = all;
WRAPPER_EXTENSION = component;
};
name = Release;
};
3E4BA248089833B7007656EC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = c99;
SDKROOT = macosx10.6;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Debug;
};
3E4BA249089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = c99;
SDKROOT = macosx10.6;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "Chamber" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "Chamber" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA248089833B7007656EC /* Debug */,
3E4BA249089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 089C1669FE841209C02AAC07 /* Project object */;
}

View file

@ -0,0 +1,58 @@
/*
* File: ChamberVersion.h
*
* Version: 1.0
*
* Created: 6/21/21
*
* Copyright: Copyright © 2021 Airwindows, All Rights Reserved
*
* Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
* consideration of your agreement to the following terms, and your use, installation, modification
* or redistribution of this Apple software constitutes acceptance of these terms. If you do
* not agree with these terms, please do not use, install, modify or redistribute this Apple
* software.
*
* In consideration of your agreement to abide by the following terms, and subject to these terms,
* Apple grants you a personal, non-exclusive license, under Apple's copyrights in this
* original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the
* Apple Software, with or without modifications, in source and/or binary forms; provided that if you
* redistribute the Apple Software in its entirety and without modifications, you must retain this
* notice and the following text and disclaimers in all such redistributions of the Apple Software.
* Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to
* endorse or promote products derived from the Apple Software without specific prior written
* permission from Apple. Except as expressly stated in this notice, no other rights or
* licenses, express or implied, are granted by Apple herein, including but not limited to any
* patent rights that may be infringed by your derivative works or by other works in which the
* Apple Software may be incorporated.
*
* The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR
* IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE
* OR IN COMBINATION WITH YOUR PRODUCTS.
*
* IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
* REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER
* UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN
* IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef __ChamberVersion_h__
#define __ChamberVersion_h__
#ifdef DEBUG
#define kChamberVersion 0xFFFFFFFF
#else
#define kChamberVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define Chamber_COMP_MANF 'Dthr'
#define Chamber_COMP_SUBTYPE 'cham'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

Binary file not shown.

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.airwindows.audiounit.${PRODUCT_NAME:identifier}</string>
<key>CFBundleName</key>
<string>${PROJECTNAMEASIDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>DthX</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildVersion</key>
<string>3</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>ProjectName</key>
<string>${EXECUTABLE_NAME}</string>
<key>SourceVersion</key>
<string>590000</string>
</dict>
</plist>

View file

@ -49,23 +49,43 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 640814523;
PBXWorkspaceStateSaveDate = 640814523;
PBXPerProjectTemplateStateSaveDate = 646169166;
PBXWorkspaceStateSaveDate = 646169166;
};
perUserProjectItems = {
8B6087502683C5550032D630 /* PBXTextBookmark */ = 8B6087502683C5550032D630 /* PBXTextBookmark */;
8B6087512683C5550032D630 /* PBXTextBookmark */ = 8B6087512683C5550032D630 /* PBXTextBookmark */;
8BD3C08C2632107800F96FC5 /* PlistBookmark */ = 8BD3C08C2632107800F96FC5 /* PlistBookmark */;
8BD3C08D2632107800F96FC5 /* PBXBookmark */ = 8BD3C08D2632107800F96FC5 /* PBXBookmark */;
8BD3C08E2632107800F96FC5 /* PBXTextBookmark */ = 8BD3C08E2632107800F96FC5 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B6087502683C5550032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Channel9.cpp */;
name = "Channel9.cpp: 273";
rLen = 48;
rLoc = 11879;
rType = 0;
vrLen = 227;
vrLoc = 11860;
};
8B6087512683C5550032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Channel9.cpp */;
name = "Channel9.cpp: 273";
rLen = 48;
rLoc = 11879;
rType = 0;
vrLen = 227;
vrLoc = 11860;
};
8BA05A660720730100365D66 /* Channel9.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1353, 6210}}";
sepNavIntBoundsRect = "{{0, 0}, {1128, 6174}}";
sepNavSelRange = "{11879, 48}";
sepNavVisRange = "{11857, 234}";
sepNavVisRange = "{11860, 227}";
sepNavWindowFrame = "{{125, 78}, {1296, 800}}";
};
};
@ -103,21 +123,7 @@
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/Channel9/Info.plist;
rLen = 0;
rLoc = 9223372036854775807;
};
8BD3C08D2632107800F96FC5 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A660720730100365D66 /* Channel9.cpp */;
};
8BD3C08E2632107800F96FC5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Channel9.cpp */;
name = "Channel9.cpp: 273";
rLen = 48;
rLoc = 11879;
rType = 0;
vrLen = 234;
vrLoc = 11857;
rLoc = 9223372036854775808;
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;

View file

@ -354,11 +354,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BD3C08E2632107800F96FC5</string>
<string>8B6087512683C5550032D630</string>
<key>history</key>
<array>
<string>8BD3C08C2632107800F96FC5</string>
<string>8BD3C08D2632107800F96FC5</string>
<string>8B6087502683C5550032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -372,18 +372,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {531, 126}}</string>
<string>{{0, 0}, {531, 109}}</string>
<key>RubberWindowFrame</key>
<string>582 209 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>126pt</string>
<string>109pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>482pt</string>
<string>499pt</string>
<key>Tabs</key>
<array>
<dict>
@ -397,7 +397,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 455}}</string>
<string>{{10, 27}, {531, 472}}</string>
<key>RubberWindowFrame</key>
<string>582 209 841 654 0 0 1440 878 </string>
</dict>
@ -481,11 +481,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8BD3C08F2632107800F96FC5</string>
<string>8B6087522683C5550032D630</string>
<string>1CA23ED40692098700951B8B</string>
<string>8BD3C0902632107800F96FC5</string>
<string>8B6087532683C5550032D630</string>
<string>8BD7274A1D46E5A5000176F0</string>
<string>8BD3C0912632107800F96FC5</string>
<string>8B6087542683C5550032D630</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -658,7 +658,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>640815224.12460995</real>
<real>646169941.05831003</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -675,7 +675,6 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8BD3C0922632107800F96FC5</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/Channel9/Channel9.xcodeproj</string>
</array>
<key>WindowString</key>

View file

@ -458,7 +458,13 @@ OSStatus Galactic::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlag
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

View file

@ -49,43 +49,43 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 638391813;
PBXWorkspaceStateSaveDate = 638391813;
PBXPerProjectTemplateStateSaveDate = 646168146;
PBXWorkspaceStateSaveDate = 646168146;
};
perUserProjectItems = {
8B626004260D2F3E0000E92F /* PBXTextBookmark */ = 8B626004260D2F3E0000E92F /* PBXTextBookmark */;
8B626005260D2F3E0000E92F /* PBXTextBookmark */ = 8B626005260D2F3E0000E92F /* PBXTextBookmark */;
8B6086832683BE890032D630 /* PBXTextBookmark */ = 8B6086832683BE890032D630 /* PBXTextBookmark */;
8B6086842683BE890032D630 /* PBXTextBookmark */ = 8B6086842683BE890032D630 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B626004260D2F3E0000E92F /* PBXTextBookmark */ = {
8B6086832683BE890032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Galactic.cpp */;
name = "Galactic.cpp: 310";
rLen = 64;
rLoc = 13024;
rType = 0;
vrLen = 152;
vrLoc = 20304;
vrLen = 126;
vrLoc = 20489;
};
8B626005260D2F3E0000E92F /* PBXTextBookmark */ = {
8B6086842683BE890032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Galactic.cpp */;
name = "Galactic.cpp: 310";
rLen = 64;
rLoc = 13024;
rType = 0;
vrLen = 152;
vrLoc = 20304;
vrLen = 126;
vrLoc = 20489;
};
8BA05A660720730100365D66 /* Galactic.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1029, 9306}}";
sepNavIntBoundsRect = "{{0, 0}, {660, 9180}}";
sepNavSelRange = "{13024, 64}";
sepNavVisRange = "{20304, 152}";
sepNavWindowFrame = "{{42, 42}, {1000, 836}}";
sepNavVisRange = "{20489, 126}";
sepNavWindowFrame = "{{405, 42}, {1000, 836}}";
};
};
8BA05A690720730100365D66 /* GalacticVersion.h */ = {

View file

@ -352,10 +352,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B626005260D2F3E0000E92F</string>
<string>8B6086842683BE890032D630</string>
<key>history</key>
<array>
<string>8B626004260D2F3E0000E92F</string>
<string>8B6086832683BE890032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -369,18 +369,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 132}}</string>
<string>{{0, 0}, {603, 102}}</string>
<key>RubberWindowFrame</key>
<string>7 353 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>132pt</string>
<string>102pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>309pt</string>
<string>339pt</string>
<key>Tabs</key>
<array>
<dict>
@ -394,7 +394,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 282}}</string>
<string>{{10, 27}, {603, 312}}</string>
<key>RubberWindowFrame</key>
<string>7 353 810 487 0 0 1440 878 </string>
</dict>
@ -450,7 +450,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 414}}</string>
<string>{{10, 27}, {603, 297}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -478,11 +478,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B626006260D2F3E0000E92F</string>
<string>8B6086852683BE890032D630</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B626007260D2F3E0000E92F</string>
<string>8B6086862683BE890032D630</string>
<string>8BD3269426069AFF006981A2</string>
<string>8B626008260D2F3E0000E92F</string>
<string>8B6086872683BE890032D630</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -635,7 +635,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>638398270.44402003</real>
<real>646168201.24675095</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -652,7 +652,6 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B626009260D2F3E0000E92F</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/Galactic/Galactic.xcodeproj</string>
</array>
<key>WindowString</key>

View file

@ -406,7 +406,9 @@ void IronOxideClassic2::IronOxideClassic2Kernel::Process( const Float32 *inSou
lastRef[1] = (lastRef[0] + inputSample)/2; //half
lastRef[2] = inputSample; //full
}
if (cycleEnd == 1) lastRef[0] = inputSample;
cycle = 0; //reset
inputSample = lastRef[cycle];
} else {
inputSample = lastRef[cycle];
//we are going through our references now

View file

@ -51,26 +51,62 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 639858976;
PBXWorkspaceStateSaveDate = 639858976;
PBXPerProjectTemplateStateSaveDate = 646167048;
PBXWorkspaceStateSaveDate = 646167048;
};
perUserProjectItems = {
8B60863A2683BA0A0032D630 /* PBXBookmark */ = 8B60863A2683BA0A0032D630 /* PBXBookmark */;
8B6086492683BDDC0032D630 /* PBXTextBookmark */ = 8B6086492683BDDC0032D630 /* PBXTextBookmark */;
8B60864E2683BDED0032D630 /* PBXTextBookmark */ = 8B60864E2683BDED0032D630 /* PBXTextBookmark */;
8B6086542683BDED0032D630 /* PBXTextBookmark */ = 8B6086542683BDED0032D630 /* PBXTextBookmark */;
8BA23F9E25FD6E5700C915DA /* PlistBookmark */ = 8BA23F9E25FD6E5700C915DA /* PlistBookmark */;
8BA23FA025FD6E5700C915DA /* PBXTextBookmark */ = 8BA23FA025FD6E5700C915DA /* PBXTextBookmark */;
8BA23FA125FD6E5700C915DA /* PBXTextBookmark */ = 8BA23FA125FD6E5700C915DA /* PBXTextBookmark */;
8BA2406B25FD854300C915DA /* PBXTextBookmark */ = 8BA2406B25FD854300C915DA /* PBXTextBookmark */;
8BA629BA2623768700483AAF /* PBXTextBookmark */ = 8BA629BA2623768700483AAF /* PBXTextBookmark */;
8BA62A192623793400483AAF /* PBXTextBookmark */ = 8BA62A192623793400483AAF /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B60863A2683BA0A0032D630 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A660720730100365D66 /* IronOxideClassic2.cpp */;
};
8B6086492683BDDC0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* IronOxideClassic2.cpp */;
name = "IronOxideClassic2.cpp: 424";
rLen = 0;
rLoc = 16259;
rType = 0;
vrLen = 288;
vrLoc = 3829;
};
8B60864E2683BDED0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* IronOxideClassic2.cpp */;
name = "IronOxideClassic2.cpp: 424";
rLen = 0;
rLoc = 16259;
rType = 0;
vrLen = 288;
vrLoc = 3829;
};
8B6086542683BDED0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* IronOxideClassic2.cpp */;
name = "IronOxideClassic2.cpp: 412";
rLen = 0;
rLoc = 15805;
rType = 0;
vrLen = 1340;
vrLoc = 14800;
};
8BA05A660720730100365D66 /* IronOxideClassic2.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1353, 7902}}";
sepNavSelRange = "{16178, 0}";
sepNavVisRange = "{3736, 381}";
sepNavIntBoundsRect = "{{0, 0}, {930, 8100}}";
sepNavSelRange = "{16259, 0}";
sepNavVisRange = "{3829, 288}";
sepNavWindowFrame = "{{57, 42}, {1127, 836}}";
};
};
@ -131,26 +167,6 @@
vrLen = 115;
vrLoc = 3311;
};
8BA629BA2623768700483AAF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* IronOxideClassic2.cpp */;
name = "IronOxideClassic2.cpp: 422";
rLen = 0;
rLoc = 16178;
rType = 0;
vrLen = 428;
vrLoc = 3689;
};
8BA62A192623793400483AAF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* IronOxideClassic2.cpp */;
name = "IronOxideClassic2.cpp: 422";
rLen = 0;
rLoc = 16178;
rType = 0;
vrLen = 381;
vrLoc = 3736;
};
8BC6025B073B072D006C4272 /* IronOxideClassic2.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 3222}}";

View file

@ -222,7 +222,48 @@
</dict>
</array>
<key>OpenEditors</key>
<array/>
<array>
<dict>
<key>Content</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8B6086522683BDED0032D630</string>
<key>PBXProjectModuleLabel</key>
<string>IronOxideClassic2.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8B6086532683BDED0032D630</string>
<key>PBXProjectModuleLabel</key>
<string>IronOxideClassic2.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B6086542683BDED0032D630</string>
<key>history</key>
<array>
<string>8B60863A2683BA0A0032D630</string>
</array>
</dict>
<key>SplitCount</key>
<string>1</string>
</dict>
<key>StatusBarVisibility</key>
<true/>
</dict>
<key>Geometry</key>
<dict>
<key>Frame</key>
<string>{{0, 20}, {1127, 739}}</string>
<key>PBXModuleWindowStatusBarHidden2</key>
<false/>
<key>RubberWindowFrame</key>
<string>57 98 1127 780 0 0 1440 878 </string>
</dict>
</dict>
</array>
<key>PerspectiveWidths</key>
<array>
<integer>841</integer>
@ -256,8 +297,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -354,14 +393,14 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BA62A192623793400483AAF</string>
<string>8B60864E2683BDED0032D630</string>
<key>history</key>
<array>
<string>8BA23F9E25FD6E5700C915DA</string>
<string>8BA23FA025FD6E5700C915DA</string>
<string>8BA23FA125FD6E5700C915DA</string>
<string>8BA2406B25FD854300C915DA</string>
<string>8BA629BA2623768700483AAF</string>
<string>8B6086492683BDDC0032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -375,18 +414,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {531, 126}}</string>
<string>{{0, 0}, {531, 109}}</string>
<key>RubberWindowFrame</key>
<string>27 181 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>126pt</string>
<string>109pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>482pt</string>
<string>499pt</string>
<key>Tabs</key>
<array>
<dict>
@ -400,9 +439,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 455}}</string>
<key>RubberWindowFrame</key>
<string>27 181 841 654 0 0 1440 878 </string>
<string>{{10, 27}, {531, 472}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -456,7 +493,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 339}}</string>
<string>{{10, 27}, {531, 472}}</string>
<key>RubberWindowFrame</key>
<string>27 181 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -484,11 +523,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8BA62A1A2623793400483AAF</string>
<string>8B60864F2683BDED0032D630</string>
<string>1CA23ED40692098700951B8B</string>
<string>8BA62A1B2623793400483AAF</string>
<string>8B6086502683BDED0032D630</string>
<string>8BD7274A1D46E5A5000176F0</string>
<string>8BA62A1C2623793400483AAF</string>
<string>8B6086512683BDED0032D630</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -661,7 +700,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>639858996.94936705</real>
<real>646168045.54700398</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -678,7 +717,7 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8BA62A1D2623793400483AAF</string>
<string>8B6086522683BDED0032D630</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/IronOxideClassic2/IronOxideClassic2.xcodeproj</string>
</array>
<key>WindowString</key>

View file

@ -49,23 +49,43 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 631157683;
PBXWorkspaceStateSaveDate = 631157683;
PBXPerProjectTemplateStateSaveDate = 646180963;
PBXWorkspaceStateSaveDate = 646180963;
};
perUserProjectItems = {
8B60879C2683F1000032D630 /* PBXTextBookmark */ = 8B60879C2683F1000032D630 /* PBXTextBookmark */;
8B60879D2683F1000032D630 /* PBXTextBookmark */ = 8B60879D2683F1000032D630 /* PBXTextBookmark */;
8BE20B38259EB5CB00009ECB /* PlistBookmark */ = 8BE20B38259EB5CB00009ECB /* PlistBookmark */;
8BE20B39259EB5CB00009ECB /* PBXBookmark */ = 8BE20B39259EB5CB00009ECB /* PBXBookmark */;
8BE20B3A259EB5CB00009ECB /* PBXTextBookmark */ = 8BE20B3A259EB5CB00009ECB /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B60879C2683F1000032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Reverb.cpp */;
name = "Reverb.cpp: 457";
rLen = 0;
rLoc = 19185;
rType = 0;
vrLen = 489;
vrLoc = 18989;
};
8B60879D2683F1000032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Reverb.cpp */;
name = "Reverb.cpp: 457";
rLen = 0;
rLoc = 19185;
rType = 0;
vrLen = 489;
vrLoc = 18989;
};
8BA05A660720730100365D66 /* Reverb.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1209, 8514}}";
sepNavIntBoundsRect = "{{0, 0}, {1209, 8442}}";
sepNavSelRange = "{19185, 0}";
sepNavVisRange = "{19009, 448}";
sepNavVisRange = "{18989, 489}";
sepNavWindowFrame = "{{6, 64}, {1195, 813}}";
};
};
@ -109,21 +129,7 @@
);
name = /Users/christopherjohnson/Desktop/Plugins/MacAU/Reverb/Info.plist;
rLen = 0;
rLoc = 9223372036854775807;
};
8BE20B39259EB5CB00009ECB /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A660720730100365D66 /* Reverb.cpp */;
};
8BE20B3A259EB5CB00009ECB /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Reverb.cpp */;
name = "Reverb.cpp: 458";
rLen = 0;
rLoc = 19185;
rType = 0;
vrLen = 448;
vrLoc = 19009;
rLoc = 9223372036854775808;
};
8D01CCC60486CAD60068D4B7 /* Reverb */ = {
activeExec = 0;

View file

@ -354,11 +354,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BE20B3A259EB5CB00009ECB</string>
<string>8B60879D2683F1000032D630</string>
<key>history</key>
<array>
<string>8BE20B38259EB5CB00009ECB</string>
<string>8BE20B39259EB5CB00009ECB</string>
<string>8B60879C2683F1000032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -372,18 +372,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {531, 188}}</string>
<string>{{0, 0}, {531, 173}}</string>
<key>RubberWindowFrame</key>
<string>12 224 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>188pt</string>
<string>173pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>420pt</string>
<string>435pt</string>
<key>Tabs</key>
<array>
<dict>
@ -397,7 +397,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 393}}</string>
<string>{{10, 27}, {531, 408}}</string>
<key>RubberWindowFrame</key>
<string>12 224 841 654 0 0 1440 878 </string>
</dict>
@ -481,11 +481,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8BE20B3B259EB5CB00009ECB</string>
<string>8B60879E2683F1000032D630</string>
<string>1CA23ED40692098700951B8B</string>
<string>8BE20B3C259EB5CB00009ECB</string>
<string>8B60879F2683F1000032D630</string>
<string>8BD7274A1D46E5A5000176F0</string>
<string>8BE20B3D259EB5CB00009ECB</string>
<string>8B6087A02683F1000032D630</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -658,7 +658,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>631158219.40404105</real>
<real>646181120.44026196</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -675,7 +675,7 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>/Users/christopherjohnson/Desktop/Plugins/MacAU/Reverb/Reverb.xcodeproj</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/Reverb/Reverb.xcodeproj</string>
</array>
<key>WindowString</key>
<string>12 224 841 654 0 0 1440 878 </string>

View file

@ -377,7 +377,9 @@ void Verbity::VerbityKernel::Process( const Float32 *inSourceP,
lastRef[1] = (lastRef[0] + inputSample)/2; //half
lastRef[2] = inputSample; //full
}
if (cycleEnd == 1) lastRef[0] = inputSample;
cycle = 0; //reset
inputSample = lastRef[cycle];
} else {
inputSample = lastRef[cycle];
//we are going through our references now

View file

@ -51,14 +51,14 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 637364622;
PBXWorkspaceStateSaveDate = 637364622;
PBXPerProjectTemplateStateSaveDate = 646180927;
PBXWorkspaceStateSaveDate = 646180927;
};
perUserProjectItems = {
8B2B365525E9E7BF00B37117 /* PlistBookmark */ = 8B2B365525E9E7BF00B37117 /* PlistBookmark */;
8BA23DF125F9672800C915DA /* PBXTextBookmark */ = 8BA23DF125F9672800C915DA /* PBXTextBookmark */;
8BA23E7525FD5BC700C915DA /* PBXTextBookmark */ = 8BA23E7525FD5BC700C915DA /* PBXTextBookmark */;
8BA23F7125FD699D00C915DA /* PBXTextBookmark */ = 8BA23F7125FD699D00C915DA /* PBXTextBookmark */;
8B6086072683B5470032D630 /* PBXTextBookmark */ = 8B6086072683B5470032D630 /* PBXTextBookmark */;
8B6087892683F04E0032D630 /* PBXTextBookmark */ = 8B6087892683F04E0032D630 /* PBXTextBookmark */;
8B60878A2683F04E0032D630 /* PBXTextBookmark */ = 8B60878A2683F04E0032D630 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
@ -76,12 +76,42 @@
rLen = 0;
rLoc = 9223372036854775808;
};
8B6086072683B5470032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* Verbity.h */;
name = "Verbity.h: 152";
rLen = 0;
rLoc = 5636;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B6087892683F04E0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Verbity.cpp */;
name = "Verbity.cpp: 294";
rLen = 0;
rLoc = 12108;
rType = 0;
vrLen = 212;
vrLoc = 24;
};
8B60878A2683F04E0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Verbity.cpp */;
name = "Verbity.cpp: 294";
rLen = 0;
rLoc = 12108;
rType = 0;
vrLen = 212;
vrLoc = 24;
};
8BA05A660720730100365D66 /* Verbity.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1047, 7758}}";
sepNavSelRange = "{12040, 39}";
sepNavVisRange = "{11428, 1476}";
sepNavWindowFrame = "{{425, 47}, {1015, 831}}";
sepNavIntBoundsRect = "{{0, 0}, {1029, 7596}}";
sepNavSelRange = "{12108, 0}";
sepNavVisRange = "{24, 212}";
sepNavWindowFrame = "{{16, 47}, {1015, 831}}";
};
};
8BA05A690720730100365D66 /* VerbityVersion.h */ = {
@ -92,41 +122,11 @@
sepNavWindowFrame = "{{656, 42}, {1021, 836}}";
};
};
8BA23DF125F9672800C915DA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* Verbity.cpp */;
name = "Verbity.cpp: 293";
rLen = 0;
rLoc = 12108;
rType = 0;
vrLen = 71;
vrLoc = 11770;
};
8BA23E7525FD5BC700C915DA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* Verbity.h */;
name = "Verbity.h: 152";
rLen = 0;
rLoc = 5636;
rType = 0;
vrLen = 33;
vrLoc = 5342;
};
8BA23F7125FD699D00C915DA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* Verbity.h */;
name = "Verbity.h: 152";
rLen = 0;
rLoc = 5636;
rType = 0;
vrLen = 30;
vrLoc = 5345;
};
8BC6025B073B072D006C4272 /* Verbity.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {482, 3492}}";
sepNavIntBoundsRect = "{{0, 0}, {482, 3384}}";
sepNavSelRange = "{5636, 0}";
sepNavVisRange = "{5345, 30}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{19, 42}, {910, 836}}";
};
};

View file

@ -326,7 +326,7 @@
<real>288</real>
</array>
<key>RubberWindowFrame</key>
<string>32 104 841 654 0 0 1440 878 </string>
<string>127 224 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -342,7 +342,7 @@
<key>PBXProjectModuleGUID</key>
<string>8BD7274A1D46E5A5000176F0</string>
<key>PBXProjectModuleLabel</key>
<string>Verbity.h</string>
<string>Verbity.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -350,16 +350,16 @@
<key>PBXProjectModuleGUID</key>
<string>8BD7274B1D46E5A5000176F0</string>
<key>PBXProjectModuleLabel</key>
<string>Verbity.h</string>
<string>Verbity.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BA23F7125FD699D00C915DA</string>
<string>8B60878A2683F04E0032D630</string>
<key>history</key>
<array>
<string>8B2B365525E9E7BF00B37117</string>
<string>8BA23DF125F9672800C915DA</string>
<string>8BA23E7525FD5BC700C915DA</string>
<string>8B6086072683B5470032D630</string>
<string>8B6087892683F04E0032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -373,18 +373,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {531, 56}}</string>
<string>{{0, 0}, {531, 167}}</string>
<key>RubberWindowFrame</key>
<string>32 104 841 654 0 0 1440 878 </string>
<string>127 224 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>56pt</string>
<string>167pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>552pt</string>
<string>441pt</string>
<key>Tabs</key>
<array>
<dict>
@ -398,9 +398,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 525}}</string>
<string>{{10, 27}, {531, 414}}</string>
<key>RubberWindowFrame</key>
<string>32 104 841 654 0 0 1440 878 </string>
<string>127 224 841 654 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -454,7 +454,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 489}}</string>
<string>{{10, 27}, {531, 564}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -482,11 +482,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8BA23F7225FD699D00C915DA</string>
<string>8B60878B2683F04E0032D630</string>
<string>1CA23ED40692098700951B8B</string>
<string>8BA23F7325FD699D00C915DA</string>
<string>8B60878C2683F04E0032D630</string>
<string>8BD7274A1D46E5A5000176F0</string>
<string>8BA23F7425FD699D00C915DA</string>
<string>8B60878D2683F04E0032D630</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -659,7 +659,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>637364637.99237299</real>
<real>646180942.73300302</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -676,11 +676,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8BA23F7525FD699D00C915DA</string>
<string>/Users/christopherjohnson/Desktop/Plugins/MacAU/Verbity/Verbity.xcodeproj</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/Verbity/Verbity.xcodeproj</string>
</array>
<key>WindowString</key>
<string>32 104 841 654 0 0 1440 878 </string>
<string>127 224 841 654 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -0,0 +1,108 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* Chamber */;
codeSenseManager = 8B02375F1D42B1C400E1E8C8 /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
364,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
324,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 646267594;
PBXWorkspaceStateSaveDate = 646267594;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
};
};
2407DEB6089929BA00EB68BF /* Chamber.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {948, 3546}}";
sepNavSelRange = "{1863, 0}";
sepNavVisRange = "{5744, 1672}";
sepNavWindowFrame = "{{12, 47}, {895, 831}}";
};
};
245463B80991757100464AD3 /* Chamber.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1110, 2034}}";
sepNavSelRange = "{3156, 0}";
sepNavVisRange = "{0, 1063}";
sepNavWindowFrame = "{{20, 47}, {895, 831}}";
};
};
24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {859, 20267}}";
sepNavSelRange = "{10616, 0}";
sepNavVisRange = "{9653, 2414}";
sepNavWindowFrame = "{{15, 42}, {895, 831}}";
};
};
24D8286F09A914000093AEF8 /* ChamberProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {966, 9612}}";
sepNavSelRange = "{2728, 0}";
sepNavVisRange = "{1960, 2115}";
sepNavWindowFrame = "{{313, 47}, {895, 831}}";
};
};
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8B02375F1D42B1C400E1E8C8 /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* Chamber */ = {
activeExec = 0;
};
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:Sample.xcodeproj">
</FileRef>
</Workspace>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,143 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* Gain */;
codeSenseManager = 91857D95148EF55400AAA11B /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
829,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
789,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 345089498;
PBXWorkspaceStateSaveDate = 345089498;
};
perUserProjectItems = {
911C2A9D1491A5F600A430AF /* PBXTextBookmark */ = 911C2A9D1491A5F600A430AF /* PBXTextBookmark */;
915DCCBB1491A5B8008574E6 /* PBXTextBookmark */ = 915DCCBB1491A5B8008574E6 /* PBXTextBookmark */;
};
sourceControlManager = 91857D94148EF55400AAA11B /* Source Control */;
userBuildSettings = {
};
};
2407DEB6089929BA00EB68BF /* Gain.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {992, 1768}}";
sepNavSelRange = "{247, 0}";
sepNavVisRange = "{0, 1657}";
};
};
245463B80991757100464AD3 /* Gain.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {992, 975}}";
sepNavSelRange = "{1552, 0}";
sepNavVisRange = "{796, 1857}";
sepNavWindowFrame = "{{15, 465}, {750, 558}}";
};
};
24A2FF9A0F90D1DD003BB5A7 /* adelaymain.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {992, 488}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 798}";
};
};
24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {859, 19825}}";
sepNavSelRange = "{10641, 0}";
sepNavVisRange = "{10076, 1095}";
};
};
24D8286F09A914000093AEF8 /* GainProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {992, 482}}";
sepNavSelRange = "{239, 0}";
sepNavVisRange = "{0, 950}";
};
};
24D8287E09A9164A0093AEF8 /* xcode_vst_prefix.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {992, 493}}";
sepNavSelRange = "{249, 0}";
sepNavVisRange = "{0, 249}";
};
};
8D01CCC60486CAD60068D4B7 /* Gain */ = {
activeExec = 0;
};
911C2A9D1491A5F600A430AF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* Gain.cpp */;
name = "Gain.cpp: 10";
rLen = 0;
rLoc = 247;
rType = 0;
vrLen = 1657;
vrLoc = 0;
};
915DCCBB1491A5B8008574E6 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* Gain.cpp */;
name = "Gain.cpp: 10";
rLen = 0;
rLoc = 247;
rType = 0;
vrLen = 1625;
vrLoc = 0;
};
91857D94148EF55400AAA11B /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
91857D95148EF55400AAA11B /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
}

View file

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0720"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D01CCC60486CAD60068D4B7"
BuildableName = "Gain.vst"
BlueprintName = "Gain"
ReferencedContainer = "container:Gain.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D01CCC60486CAD60068D4B7"
BuildableName = "Gain.vst"
BlueprintName = "Gain"
ReferencedContainer = "container:Gain.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D01CCC60486CAD60068D4B7"
BuildableName = "Gain.vst"
BlueprintName = "Gain"
ReferencedContainer = "container:Gain.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>Gain.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>8</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>8D01CCC60486CAD60068D4B7</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>«PROJECTNAME».xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>8D01CCC60486CAD60068D4B7</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D01CCC60486CAD60068D4B7"
BuildableName = "&#171;PROJECTNAME&#187;.vst"
BlueprintName = "&#171;PROJECTNAME&#187;"
ReferencedContainer = "container:Sample.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
</Testables>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Chamber</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>com.airwindows.Chamber</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>Dthr</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1 @@
BNDL????

View file

@ -0,0 +1,17 @@
#define MAC 1
#define MACX 1
#define USE_NAMESPACE 0
#define TARGET_API_MAC_CARBON 1
#define USENAVSERVICES 1
#define __CF_USE_FRAMEWORK_INCLUDES__
#if __MWERKS__
#define __NOEXTENSIONS__
#endif
#define QUARTZ 1
#include <AvailabilityMacros.h>

View file

@ -0,0 +1,196 @@
/* ========================================
* Chamber - Chamber.h
* Copyright (c) 2016 airwindows, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#include "Chamber.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new Chamber(audioMaster);}
Chamber::Chamber(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.35;
B = 0.35;
C = 0.35;
D = 0.35;
E = 0.35;
iirAL = 0.0; iirAR = 0.0;
iirBL = 0.0; iirBR = 0.0;
iirCL = 0.0; iirCR = 0.0;
for(int count = 0; count < 19999; count++) {aEL[count] = 0.0;aER[count] = 0.0;}
for(int count = 0; count < 12360; count++) {aFL[count] = 0.0;aFR[count] = 0.0;}
for(int count = 0; count < 7639; count++) {aGL[count] = 0.0;aGR[count] = 0.0;}
for(int count = 0; count < 4721; count++) {aHL[count] = 0.0;aHR[count] = 0.0;}
for(int count = 0; count < 2915; count++) {aAL[count] = 0.0;aAR[count] = 0.0;}
for(int count = 0; count < 1803; count++) {aBL[count] = 0.0;aBR[count] = 0.0;}
for(int count = 0; count < 1114; count++) {aCL[count] = 0.0;aCR[count] = 0.0;}
for(int count = 0; count < 688; count++) {aDL[count] = 0.0;aDR[count] = 0.0;}
for(int count = 0; count < 425; count++) {aIL[count] = 0.0;aIR[count] = 0.0;}
for(int count = 0; count < 263; count++) {aJL[count] = 0.0;aJR[count] = 0.0;}
for(int count = 0; count < 162; count++) {aKL[count] = 0.0;aKR[count] = 0.0;}
for(int count = 0; count < 100; count++) {aLL[count] = 0.0;aLR[count] = 0.0;}
feedbackAL = 0.0; feedbackAR = 0.0;
feedbackBL = 0.0; feedbackBR = 0.0;
feedbackCL = 0.0; feedbackCR = 0.0;
feedbackDL = 0.0; feedbackDR = 0.0;
previousAL = 0.0; previousAR = 0.0;
previousBL = 0.0; previousBR = 0.0;
previousCL = 0.0; previousCR = 0.0;
previousDL = 0.0; previousDR = 0.0;
for(int count = 0; count < 9; count++) {lastRefL[count] = 0.0;lastRefR[count] = 0.0;}
countI = 1;
countJ = 1;
countK = 1;
countL = 1;
countA = 1;
countB = 1;
countC = 1;
countD = 1;
countE = 1;
countF = 1;
countG = 1;
countH = 1;
cycle = 0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
//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
}
Chamber::~Chamber() {}
VstInt32 Chamber::getVendorVersion () {return 1000;}
void Chamber::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void Chamber::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 Chamber::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
chunkData[3] = D;
chunkData[4] = E;
/* 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 Chamber::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]);
E = pinParameter(chunkData[4]);
/* 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 Chamber::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;
case kParamE: E = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float Chamber::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;
case kParamE: return E; 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 Chamber::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Bigness", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Longness", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Liteness", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Darkness", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Wetness", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void Chamber::getParameterDisplay(VstInt32 index, char *text) {
switch (index) {
case kParamA: float2string (A, text, kVstMaxParamStrLen); break;
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
case kParamC: float2string (C, text, kVstMaxParamStrLen); break;
case kParamD: float2string (D, text, kVstMaxParamStrLen); break;
case kParamE: float2string (E, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void Chamber::getParameterLabel(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 Chamber::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool Chamber::getEffectName(char* name) {
vst_strncpy(name, "Chamber", kVstMaxProductStrLen); return true;
}
VstPlugCategory Chamber::getPlugCategory() {return kPlugCategEffect;}
bool Chamber::getProductString(char* text) {
vst_strncpy (text, "airwindows Chamber", kVstMaxProductStrLen); return true;
}
bool Chamber::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,141 @@
/* ========================================
* Chamber - Chamber.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) 2011 __MyCompanyName__, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#define __Chamber_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA = 0,
kParamB = 1,
kParamC = 2,
kParamD = 3,
kParamE = 4,
kNumParameters = 5
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'cham'; //Change this to what the AU identity is!
class Chamber :
public AudioEffectX
{
public:
Chamber(audioMasterCallback audioMaster);
~Chamber();
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 iirAL;
double iirBL;
double iirCL;
double aEL[20000];
double aFL[12361];
double aGL[7640];
double aHL[4722];
double aAL[2916];
double aBL[1804];
double aCL[1115];
double aDL[689];
double aIL[426];
double aJL[264];
double aKL[163];
double aLL[101];
double feedbackAL;
double feedbackBL;
double feedbackCL;
double feedbackDL;
double previousAL;
double previousBL;
double previousCL;
double previousDL;
double lastRefL[10];
double iirAR;
double iirBR;
double iirCR;
double aER[20000];
double aFR[12361];
double aGR[7640];
double aHR[4722];
double aAR[2916];
double aBR[1804];
double aCR[1115];
double aDR[689];
double aIR[426];
double aJR[264];
double aKR[163];
double aLR[101];
double feedbackAR;
double feedbackBR;
double feedbackCR;
double feedbackDR;
double previousAR;
double previousBR;
double previousCR;
double previousDR;
double lastRefR[10];
int countA, delayA;
int countB, delayB;
int countC, delayC;
int countD, delayD;
int countE, delayE;
int countF, delayF;
int countG, delayG;
int countH, delayH;
int countI, delayI;
int countJ, delayJ;
int countK, delayK;
int countL, delayL;
int cycle; //all these ints are shared across channels, not duplicated
uint32_t fpdL;
uint32_t fpdR;
//default stuff
float A;
float B;
float C;
float D;
float E; //parameters. Always 0-1, and we scale/alter them elsewhere.
};
#endif

View file

@ -0,0 +1,532 @@
/* ========================================
* Chamber - Chamber.h
* Copyright (c) 2016 airwindows, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#include "Chamber.h"
#endif
void Chamber::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();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
double size = (pow(A,2)*0.9)+0.1;
double regen = (1.0-(pow(1.0-B,6)))*0.123;
double highpass = (pow(C,2.0))/sqrt(overallscale);
double lowpass = (1.0-pow(D,2.0))/sqrt(overallscale);
double interpolate = size*0.381966011250105;
double wet = E*2.0;
double dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-37) inputSampleL = fpdL * 1.18e-37;
if (fabs(inputSampleR)<1.18e-37) inputSampleR = fpdR * 1.18e-37;
long double drySampleL = inputSampleL;
long double drySampleR = inputSampleR;
if (fabs(iirCL)<1.18e-37) iirCL = 0.0;
iirCL = (iirCL*(1.0-highpass))+(inputSampleL*highpass); inputSampleL -= iirCL;
if (fabs(iirCR)<1.18e-37) iirCR = 0.0;
iirCR = (iirCR*(1.0-highpass))+(inputSampleR*highpass); inputSampleR -= iirCR;
//initial highpass
if (fabs(iirAL)<1.18e-37) iirAL = 0.0;
iirAL = (iirAL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirAL;
if (fabs(iirAR)<1.18e-37) iirAR = 0.0;
iirAR = (iirAR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirAR;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackAL = (feedbackAL*(1.0-interpolate))+(previousAL*interpolate); previousAL = feedbackAL;
feedbackBL = (feedbackBL*(1.0-interpolate))+(previousBL*interpolate); previousBL = feedbackBL;
feedbackCL = (feedbackCL*(1.0-interpolate))+(previousCL*interpolate); previousCL = feedbackCL;
feedbackDL = (feedbackDL*(1.0-interpolate))+(previousDL*interpolate); previousDL = feedbackDL;
feedbackAR = (feedbackAR*(1.0-interpolate))+(previousAR*interpolate); previousAR = feedbackAR;
feedbackBR = (feedbackBR*(1.0-interpolate))+(previousBR*interpolate); previousBR = feedbackBR;
feedbackCR = (feedbackCR*(1.0-interpolate))+(previousCR*interpolate); previousCR = feedbackCR;
feedbackDR = (feedbackDR*(1.0-interpolate))+(previousDR*interpolate); previousDR = feedbackDR;
aIL[countI] = inputSampleL + (feedbackAL * regen);
aJL[countJ] = inputSampleL + (feedbackBL * regen);
aKL[countK] = inputSampleL + (feedbackCL * regen);
aLL[countL] = inputSampleL + (feedbackDL * regen);
aIR[countI] = inputSampleR + (feedbackAR * regen);
aJR[countJ] = inputSampleR + (feedbackBR * regen);
aKR[countK] = inputSampleR + (feedbackCR * regen);
aLR[countL] = inputSampleR + (feedbackDR * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
double outIL = aIL[countI-((countI > delayI)?delayI+1:0)];
double outJL = aJL[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKL = aKL[countK-((countK > delayK)?delayK+1:0)];
double outLL = aLL[countL-((countL > delayL)?delayL+1:0)];
double outIR = aIR[countI-((countI > delayI)?delayI+1:0)];
double outJR = aJR[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKR = aKR[countK-((countK > delayK)?delayK+1:0)];
double outLR = aLR[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aAL[countA] = (outIL - (outJL + outKL + outLL));
aBL[countB] = (outJL - (outIL + outKL + outLL));
aCL[countC] = (outKL - (outIL + outJL + outLL));
aDL[countD] = (outLL - (outIL + outJL + outKL));
aAR[countA] = (outIR - (outJR + outKR + outLR));
aBR[countB] = (outJR - (outIR + outKR + outLR));
aCR[countC] = (outKR - (outIR + outJR + outLR));
aDR[countD] = (outLR - (outIR + outJR + outKR));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
double outAL = aAL[countA-((countA > delayA)?delayA+1:0)];
double outBL = aBL[countB-((countB > delayB)?delayB+1:0)];
double outCL = aCL[countC-((countC > delayC)?delayC+1:0)];
double outDL = aDL[countD-((countD > delayD)?delayD+1:0)];
double outAR = aAR[countA-((countA > delayA)?delayA+1:0)];
double outBR = aBR[countB-((countB > delayB)?delayB+1:0)];
double outCR = aCR[countC-((countC > delayC)?delayC+1:0)];
double outDR = aDR[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aEL[countE] = (outAL - (outBL + outCL + outDL));
aFL[countF] = (outBL - (outAL + outCL + outDL));
aGL[countG] = (outCL - (outAL + outBL + outDL));
aHL[countH] = (outDL - (outAL + outBL + outCL));
aER[countE] = (outAR - (outBR + outCR + outDR));
aFR[countF] = (outBR - (outAR + outCR + outDR));
aGR[countG] = (outCR - (outAR + outBR + outDR));
aHR[countH] = (outDR - (outAR + outBR + outCR));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
double outEL = aEL[countE-((countE > delayE)?delayE+1:0)];
double outFL = aFL[countF-((countF > delayF)?delayF+1:0)];
double outGL = aGL[countG-((countG > delayG)?delayG+1:0)];
double outHL = aHL[countH-((countH > delayH)?delayH+1:0)];
double outER = aER[countE-((countE > delayE)?delayE+1:0)];
double outFR = aFR[countF-((countF > delayF)?delayF+1:0)];
double outGR = aGR[countG-((countG > delayG)?delayG+1:0)];
double outHR = aHR[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackAL = (outEL - (outFL + outGL + outHL));
feedbackBL = (outFL - (outEL + outGL + outHL));
feedbackCL = (outGL - (outEL + outFL + outHL));
feedbackDL = (outHL - (outEL + outFL + outGL));
feedbackAR = (outER - (outFR + outGR + outHR));
feedbackBR = (outFR - (outER + outGR + outHR));
feedbackCR = (outGR - (outER + outFR + outHR));
feedbackDR = (outHR - (outER + outFR + outGR));
//which we need to feed back into the input again, a bit
inputSampleL = (outEL + outFL + outGL + outHL)/8.0;
inputSampleR = (outER + outFR + outGR + outHR)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRefL[0] = lastRefL[4]; //start from previous last
lastRefL[2] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[1] = (lastRefL[0] + lastRefL[2])/2; //one quarter
lastRefL[3] = (lastRefL[2] + inputSampleL)/2; //three quarters
lastRefL[4] = inputSampleL; //full
lastRefR[0] = lastRefR[4]; //start from previous last
lastRefR[2] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[1] = (lastRefR[0] + lastRefR[2])/2; //one quarter
lastRefR[3] = (lastRefR[2] + inputSampleR)/2; //three quarters
lastRefR[4] = inputSampleR; //full
}
if (cycleEnd == 3) {
lastRefL[0] = lastRefL[3]; //start from previous last
lastRefL[2] = (lastRefL[0]+lastRefL[0]+inputSampleL)/3; //third
lastRefL[1] = (lastRefL[0]+inputSampleL+inputSampleL)/3; //two thirds
lastRefL[3] = inputSampleL; //full
lastRefR[0] = lastRefR[3]; //start from previous last
lastRefR[2] = (lastRefR[0]+lastRefR[0]+inputSampleR)/3; //third
lastRefR[1] = (lastRefR[0]+inputSampleR+inputSampleR)/3; //two thirds
lastRefR[3] = inputSampleR; //full
}
if (cycleEnd == 2) {
lastRefL[0] = lastRefL[2]; //start from previous last
lastRefL[1] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[2] = inputSampleL; //full
lastRefR[0] = lastRefR[2]; //start from previous last
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[7])*0.5;
lastRefL[7] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[7])*0.5;
lastRefR[7] = lastRefR[8]; //continue, do not break
case 3:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[6])*0.5;
lastRefL[6] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[6])*0.5;
lastRefR[6] = lastRefR[8]; //continue, do not break
case 2:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[5])*0.5;
lastRefL[5] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[5])*0.5;
lastRefR[5] = lastRefR[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirBL)<1.18e-37) iirBL = 0.0;
iirBL = (iirBL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirBL;
if (fabs(iirBR)<1.18e-37) iirBR = 0.0;
iirBR = (iirBR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirBR;
//end filter
if (wet < 1.0) {inputSampleL *= wet; inputSampleR *= wet;}
if (dry < 1.0) {drySampleL *= dry; drySampleR *= dry;}
inputSampleL += drySampleL;
inputSampleR += drySampleR;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 32 bit stereo floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
frexpf((float)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
*in1++;
*in2++;
*out1++;
*out2++;
}
}
void Chamber::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();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
double size = (pow(A,2)*0.9)+0.1;
double regen = (1.0-(pow(1.0-B,6)))*0.123;
double highpass = (pow(C,2.0))/sqrt(overallscale);
double lowpass = (1.0-pow(D,2.0))/sqrt(overallscale);
double interpolate = size*0.381966011250105;
double wet = E*2.0;
double dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpdL * 1.18e-43;
if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpdR * 1.18e-43;
long double drySampleL = inputSampleL;
long double drySampleR = inputSampleR;
if (fabs(iirCL)<1.18e-37) iirCL = 0.0;
iirCL = (iirCL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL -= iirCL;
if (fabs(iirCR)<1.18e-37) iirCR = 0.0;
iirCR = (iirCR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR -= iirCR;
//initial highpass
if (fabs(iirAL)<1.18e-37) iirAL = 0.0;
iirAL = (iirAL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirAL;
if (fabs(iirAR)<1.18e-37) iirAR = 0.0;
iirAR = (iirAR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirAR;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackAL = (feedbackAL*(1.0-interpolate))+(previousAL*interpolate); previousAL = feedbackAL;
feedbackBL = (feedbackBL*(1.0-interpolate))+(previousBL*interpolate); previousBL = feedbackBL;
feedbackCL = (feedbackCL*(1.0-interpolate))+(previousCL*interpolate); previousCL = feedbackCL;
feedbackDL = (feedbackDL*(1.0-interpolate))+(previousDL*interpolate); previousDL = feedbackDL;
feedbackAR = (feedbackAR*(1.0-interpolate))+(previousAR*interpolate); previousAR = feedbackAR;
feedbackBR = (feedbackBR*(1.0-interpolate))+(previousBR*interpolate); previousBR = feedbackBR;
feedbackCR = (feedbackCR*(1.0-interpolate))+(previousCR*interpolate); previousCR = feedbackCR;
feedbackDR = (feedbackDR*(1.0-interpolate))+(previousDR*interpolate); previousDR = feedbackDR;
aIL[countI] = inputSampleL + (feedbackAL * regen);
aJL[countJ] = inputSampleL + (feedbackBL * regen);
aKL[countK] = inputSampleL + (feedbackCL * regen);
aLL[countL] = inputSampleL + (feedbackDL * regen);
aIR[countI] = inputSampleR + (feedbackAR * regen);
aJR[countJ] = inputSampleR + (feedbackBR * regen);
aKR[countK] = inputSampleR + (feedbackCR * regen);
aLR[countL] = inputSampleR + (feedbackDR * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
double outIL = aIL[countI-((countI > delayI)?delayI+1:0)];
double outJL = aJL[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKL = aKL[countK-((countK > delayK)?delayK+1:0)];
double outLL = aLL[countL-((countL > delayL)?delayL+1:0)];
double outIR = aIR[countI-((countI > delayI)?delayI+1:0)];
double outJR = aJR[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKR = aKR[countK-((countK > delayK)?delayK+1:0)];
double outLR = aLR[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aAL[countA] = (outIL - (outJL + outKL + outLL));
aBL[countB] = (outJL - (outIL + outKL + outLL));
aCL[countC] = (outKL - (outIL + outJL + outLL));
aDL[countD] = (outLL - (outIL + outJL + outKL));
aAR[countA] = (outIR - (outJR + outKR + outLR));
aBR[countB] = (outJR - (outIR + outKR + outLR));
aCR[countC] = (outKR - (outIR + outJR + outLR));
aDR[countD] = (outLR - (outIR + outJR + outKR));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
double outAL = aAL[countA-((countA > delayA)?delayA+1:0)];
double outBL = aBL[countB-((countB > delayB)?delayB+1:0)];
double outCL = aCL[countC-((countC > delayC)?delayC+1:0)];
double outDL = aDL[countD-((countD > delayD)?delayD+1:0)];
double outAR = aAR[countA-((countA > delayA)?delayA+1:0)];
double outBR = aBR[countB-((countB > delayB)?delayB+1:0)];
double outCR = aCR[countC-((countC > delayC)?delayC+1:0)];
double outDR = aDR[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aEL[countE] = (outAL - (outBL + outCL + outDL));
aFL[countF] = (outBL - (outAL + outCL + outDL));
aGL[countG] = (outCL - (outAL + outBL + outDL));
aHL[countH] = (outDL - (outAL + outBL + outCL));
aER[countE] = (outAR - (outBR + outCR + outDR));
aFR[countF] = (outBR - (outAR + outCR + outDR));
aGR[countG] = (outCR - (outAR + outBR + outDR));
aHR[countH] = (outDR - (outAR + outBR + outCR));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
double outEL = aEL[countE-((countE > delayE)?delayE+1:0)];
double outFL = aFL[countF-((countF > delayF)?delayF+1:0)];
double outGL = aGL[countG-((countG > delayG)?delayG+1:0)];
double outHL = aHL[countH-((countH > delayH)?delayH+1:0)];
double outER = aER[countE-((countE > delayE)?delayE+1:0)];
double outFR = aFR[countF-((countF > delayF)?delayF+1:0)];
double outGR = aGR[countG-((countG > delayG)?delayG+1:0)];
double outHR = aHR[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackAL = (outEL - (outFL + outGL + outHL));
feedbackBL = (outFL - (outEL + outGL + outHL));
feedbackCL = (outGL - (outEL + outFL + outHL));
feedbackDL = (outHL - (outEL + outFL + outGL));
feedbackAR = (outER - (outFR + outGR + outHR));
feedbackBR = (outFR - (outER + outGR + outHR));
feedbackCR = (outGR - (outER + outFR + outHR));
feedbackDR = (outHR - (outER + outFR + outGR));
//which we need to feed back into the input again, a bit
inputSampleL = (outEL + outFL + outGL + outHL)/8.0;
inputSampleR = (outER + outFR + outGR + outHR)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRefL[0] = lastRefL[4]; //start from previous last
lastRefL[2] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[1] = (lastRefL[0] + lastRefL[2])/2; //one quarter
lastRefL[3] = (lastRefL[2] + inputSampleL)/2; //three quarters
lastRefL[4] = inputSampleL; //full
lastRefR[0] = lastRefR[4]; //start from previous last
lastRefR[2] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[1] = (lastRefR[0] + lastRefR[2])/2; //one quarter
lastRefR[3] = (lastRefR[2] + inputSampleR)/2; //three quarters
lastRefR[4] = inputSampleR; //full
}
if (cycleEnd == 3) {
lastRefL[0] = lastRefL[3]; //start from previous last
lastRefL[2] = (lastRefL[0]+lastRefL[0]+inputSampleL)/3; //third
lastRefL[1] = (lastRefL[0]+inputSampleL+inputSampleL)/3; //two thirds
lastRefL[3] = inputSampleL; //full
lastRefR[0] = lastRefR[3]; //start from previous last
lastRefR[2] = (lastRefR[0]+lastRefR[0]+inputSampleR)/3; //third
lastRefR[1] = (lastRefR[0]+inputSampleR+inputSampleR)/3; //two thirds
lastRefR[3] = inputSampleR; //full
}
if (cycleEnd == 2) {
lastRefL[0] = lastRefL[2]; //start from previous last
lastRefL[1] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[2] = inputSampleL; //full
lastRefR[0] = lastRefR[2]; //start from previous last
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[7])*0.5;
lastRefL[7] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[7])*0.5;
lastRefR[7] = lastRefR[8]; //continue, do not break
case 3:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[6])*0.5;
lastRefL[6] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[6])*0.5;
lastRefR[6] = lastRefR[8]; //continue, do not break
case 2:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[5])*0.5;
lastRefL[5] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[5])*0.5;
lastRefR[5] = lastRefR[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirBL)<1.18e-37) iirBL = 0.0;
iirBL = (iirBL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirBL;
if (fabs(iirBR)<1.18e-37) iirBR = 0.0;
iirBR = (iirBR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirBR;
//end filter
if (wet < 1.0) {inputSampleL *= wet; inputSampleR *= wet;}
if (dry < 1.0) {drySampleL *= dry; drySampleR *= dry;}
inputSampleL += drySampleL;
inputSampleR += drySampleR;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 64 bit stereo floating point dither
int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
*in1++;
*in2++;
*out1++;
*out2++;
}
}

View file

@ -2,7 +2,7 @@
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* AudioUnit */;
activeTarget = 8D01CCC60486CAD60068D4B7 /* Galactic */;
codeSenseManager = 8B02375F1D42B1C400E1E8C8 /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
@ -49,8 +49,8 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 638118036;
PBXWorkspaceStateSaveDate = 638118036;
PBXPerProjectTemplateStateSaveDate = 646345627;
PBXWorkspaceStateSaveDate = 646345627;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@ -82,10 +82,10 @@
};
24D8286F09A914000093AEF8 /* GalacticProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {903, 2304}}";
sepNavSelRange = "{1178, 0}";
sepNavVisRange = "{0, 1333}";
sepNavWindowFrame = "{{31, 42}, {895, 831}}";
sepNavIntBoundsRect = "{{0, 0}, {1020, 8514}}";
sepNavSelRange = "{18709, 0}";
sepNavVisRange = "{8332, 1458}";
sepNavWindowFrame = "{{335, 47}, {895, 831}}";
};
};
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
@ -102,7 +102,7 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* AudioUnit */ = {
8D01CCC60486CAD60068D4B7 /* Galactic */ = {
activeExec = 0;
};
}

View file

@ -300,7 +300,7 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>7</integer>
<integer>6</integer>
<integer>4</integer>
<integer>0</integer>
</array>
@ -469,11 +469,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B625EED2608E8A30000E92F</string>
<string>8BDC4C57268673CD0000E649</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B625EEE2608E8A30000E92F</string>
<string>8BDC4C58268673CD0000E649</string>
<string>8B0237581D42B1C400E1E8C8</string>
<string>8B625EEF2608E8A30000E92F</string>
<string>8BDC4C59268673CD0000E649</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -626,7 +626,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>638118051.81092703</real>
<real>646345677.28317499</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -643,7 +643,8 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>/Users/christopherjohnson/Desktop/Galactic/Galactic.xcodeproj</string>
<string>8BDC4C5A268673CD0000E649</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/Galactic/Galactic.xcodeproj</string>
</array>
<key>WindowString</key>
<string>255 318 810 487 0 0 1440 878 </string>

View file

@ -1894,7 +1894,7 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* AudioUnit */ = {
8D01CCC60486CAD60068D4B7 /* Galactic */ = {
isa = PBXNativeTarget;
buildConfigurationList = 24BEAAED08919AE700E695F9 /* Build configuration list for PBXNativeTarget "Galactic" */;
buildPhases = (
@ -1947,7 +1947,7 @@
);
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* AudioUnit */,
8D01CCC60486CAD60068D4B7 /* Galactic */,
);
};
/* End PBXProject section */

View file

@ -200,7 +200,13 @@ void Galactic::processReplacing(float **inputs, float **outputs, VstInt32 sample
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -430,7 +436,13 @@ void Galactic::processDoubleReplacing(double **inputs, double **outputs, VstInt3
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

View file

@ -51,13 +51,13 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 639859010;
PBXWorkspaceStateSaveDate = 639859010;
PBXPerProjectTemplateStateSaveDate = 646345686;
PBXWorkspaceStateSaveDate = 646345686;
};
perUserProjectItems = {
8B60872E2683C22F0032D630 /* PBXTextBookmark */ = 8B60872E2683C22F0032D630 /* PBXTextBookmark */;
8BA2406425FD854100C915DA /* PBXTextBookmark */ = 8BA2406425FD854100C915DA /* PBXTextBookmark */;
8BA629A92623765600483AAF /* PBXTextBookmark */ = 8BA629A92623765600483AAF /* PBXTextBookmark */;
8BA62A3D26237B1B00483AAF /* PBXTextBookmark */ = 8BA62A3D26237B1B00483AAF /* PBXTextBookmark */;
8BDC4C74268673F80000E649 /* PBXTextBookmark */ = 8BDC4C74268673F80000E649 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@ -89,9 +89,9 @@
};
24D8286F09A914000093AEF8 /* IronOxideClassic2Proc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {554, 14976}}";
sepNavIntBoundsRect = "{{0, 0}, {554, 15174}}";
sepNavSelRange = "{1239, 0}";
sepNavVisRange = "{1211, 84}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{461, 47}, {895, 831}}";
};
};
@ -109,6 +109,16 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8B60872E2683C22F0032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* IronOxideClassic2Proc.cpp */;
name = "IronOxideClassic2Proc.cpp: 38";
rLen = 0;
rLoc = 1239;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8BA2406425FD854100C915DA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* IronOxideClassic2.h */;
@ -119,25 +129,15 @@
vrLen = 183;
vrLoc = 0;
};
8BA629A92623765600483AAF /* PBXTextBookmark */ = {
8BDC4C74268673F80000E649 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* IronOxideClassic2Proc.cpp */;
name = "IronOxideClassic2Proc.cpp: 38";
rLen = 0;
rLoc = 1239;
rType = 0;
vrLen = 138;
vrLoc = 1211;
};
8BA62A3D26237B1B00483AAF /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* IronOxideClassic2Proc.cpp */;
name = "IronOxideClassic2Proc.cpp: 38";
rLen = 0;
rLoc = 1239;
rType = 0;
vrLen = 84;
vrLoc = 1211;
vrLen = 0;
vrLoc = 0;
};
8D01CCC60486CAD60068D4B7 /* IronOxideClassic2 */ = {
activeExec = 0;

View file

@ -300,7 +300,7 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>5</integer>
<integer>6</integer>
<integer>4</integer>
<integer>0</integer>
</array>
@ -351,11 +351,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BA62A3D26237B1B00483AAF</string>
<string>8BDC4C74268673F80000E649</string>
<key>history</key>
<array>
<string>8BA2406425FD854100C915DA</string>
<string>8BA629A92623765600483AAF</string>
<string>8B60872E2683C22F0032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -369,18 +369,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 69}}</string>
<string>{{0, 0}, {603, 13}}</string>
<key>RubberWindowFrame</key>
<string>567 266 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>69pt</string>
<string>13pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>372pt</string>
<string>428pt</string>
<key>Tabs</key>
<array>
<dict>
@ -394,7 +394,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 345}}</string>
<string>{{10, 27}, {603, 401}}</string>
<key>RubberWindowFrame</key>
<string>567 266 810 487 0 0 1440 878 </string>
</dict>
@ -478,11 +478,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8BA62A3E26237B1B00483AAF</string>
<string>8BDC4C75268673F80000E649</string>
<string>1CA23ED40692098700951B8B</string>
<string>8BA62A3F26237B1B00483AAF</string>
<string>8BDC4C76268673F80000E649</string>
<string>8B0237581D42B1C400E1E8C8</string>
<string>8BA62A4026237B1B00483AAF</string>
<string>8BDC4C77268673F80000E649</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -655,7 +655,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>639859483.66546798</real>
<real>646345720.36536205</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -672,7 +672,7 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8BA62A4126237B1B00483AAF</string>
<string>8BDC4C78268673F80000E649</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/IronOxideClassic2/IronOxideClassic2.xcodeproj</string>
</array>
<key>WindowString</key>

View file

@ -356,7 +356,13 @@ void IronOxideClassic2::processReplacing(float **inputs, float **outputs, VstInt
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -762,7 +768,13 @@ void IronOxideClassic2::processDoubleReplacing(double **inputs, double **outputs
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

View file

@ -49,13 +49,13 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 643464419;
PBXWorkspaceStateSaveDate = 643464419;
PBXPerProjectTemplateStateSaveDate = 646345570;
PBXWorkspaceStateSaveDate = 646345570;
};
perUserProjectItems = {
8B60883026853FA50032D630 /* PBXTextBookmark */ = 8B60883026853FA50032D630 /* PBXTextBookmark */;
8B7FF461265A7CF400EA6425 /* PBXTextBookmark */ = 8B7FF461265A7CF400EA6425 /* PBXTextBookmark */;
8B7FF462265A7CF400EA6425 /* PBXTextBookmark */ = 8B7FF462265A7CF400EA6425 /* PBXTextBookmark */;
8B7FF463265A7CF400EA6425 /* PBXTextBookmark */ = 8B7FF463265A7CF400EA6425 /* PBXTextBookmark */;
8BDC4C392686738E0000E649 /* PBXTextBookmark */ = 8BDC4C392686738E0000E649 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@ -65,15 +65,15 @@
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {948, 3456}}";
sepNavSelRange = "{482, 1611}";
sepNavVisRange = "{1921, 1439}";
sepNavVisRange = "{171, 1628}";
sepNavWindowFrame = "{{73, 47}, {895, 831}}";
};
};
245463B80991757100464AD3 /* Verbity.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {678, 3078}}";
sepNavIntBoundsRect = "{{0, 0}, {1110, 2574}}";
sepNavSelRange = "{2417, 1261}";
sepNavVisRange = "{3013, 56}";
sepNavVisRange = "{2680, 632}";
sepNavWindowFrame = "{{438, 47}, {895, 831}}";
};
};
@ -87,10 +87,10 @@
};
24D8286F09A914000093AEF8 /* VerbityProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {669, 8532}}";
sepNavIntBoundsRect = "{{0, 0}, {795, 8748}}";
sepNavSelRange = "{3554, 0}";
sepNavVisRange = "{3447, 173}";
sepNavWindowFrame = "{{181, 42}, {1127, 836}}";
sepNavVisRange = "{68, 144}";
sepNavWindowFrame = "{{313, 42}, {1127, 836}}";
};
};
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
@ -107,6 +107,16 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8B60883026853FA50032D630 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* VerbityProc.cpp */;
name = "VerbityProc.cpp: 90";
rLen = 0;
rLoc = 3554;
rType = 0;
vrLen = 168;
vrLoc = 44;
};
8B7FF461265A7CF400EA6425 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* Verbity.h */;
@ -117,25 +127,15 @@
vrLen = 56;
vrLoc = 3013;
};
8B7FF462265A7CF400EA6425 /* PBXTextBookmark */ = {
8BDC4C392686738E0000E649 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* VerbityProc.cpp */;
name = "VerbityProc.cpp: 90";
rLen = 0;
rLoc = 3554;
rType = 0;
vrLen = 173;
vrLoc = 3447;
};
8B7FF463265A7CF400EA6425 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* VerbityProc.cpp */;
name = "VerbityProc.cpp: 90";
rLen = 0;
rLoc = 3554;
rType = 0;
vrLen = 173;
vrLoc = 3447;
vrLen = 144;
vrLoc = 68;
};
8D01CCC60486CAD60068D4B7 /* Verbity */ = {
activeExec = 0;

View file

@ -323,7 +323,7 @@
<real>185</real>
</array>
<key>RubberWindowFrame</key>
<string>40 293 810 487 0 0 1440 878 </string>
<string>485 310 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -351,11 +351,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B7FF463265A7CF400EA6425</string>
<string>8BDC4C392686738E0000E649</string>
<key>history</key>
<array>
<string>8B7FF461265A7CF400EA6425</string>
<string>8B7FF462265A7CF400EA6425</string>
<string>8B60883026853FA50032D630</string>
</array>
</dict>
<key>SplitCount</key>
@ -369,18 +369,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 69}}</string>
<string>{{0, 0}, {603, 117}}</string>
<key>RubberWindowFrame</key>
<string>40 293 810 487 0 0 1440 878 </string>
<string>485 310 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>69pt</string>
<string>117pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>372pt</string>
<string>324pt</string>
<key>Tabs</key>
<array>
<dict>
@ -394,9 +394,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 345}}</string>
<string>{{10, 27}, {603, 297}}</string>
<key>RubberWindowFrame</key>
<string>40 293 810 487 0 0 1440 878 </string>
<string>485 310 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -478,11 +478,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B7FF464265A7CF400EA6425</string>
<string>8BDC4C3A2686738E0000E649</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B7FF465265A7CF400EA6425</string>
<string>8BDC4C3B2686738E0000E649</string>
<string>8B0237581D42B1C400E1E8C8</string>
<string>8B7FF466265A7CF400EA6425</string>
<string>8BDC4C3C2686738E0000E649</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -635,7 +635,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>643464436.48884499</real>
<real>646345614.85112798</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -652,11 +652,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B7FF467265A7CF400EA6425</string>
<string>8BDC4C3D2686738E0000E649</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/Verbity/Verbity.xcodeproj</string>
</array>
<key>WindowString</key>
<string>40 293 810 487 0 0 1440 878 </string>
<string>485 310 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -198,7 +198,13 @@ void Verbity::processReplacing(float **inputs, float **outputs, VstInt32 sampleF
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -428,7 +434,13 @@ void Verbity::processDoubleReplacing(double **inputs, double **outputs, VstInt32
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,196 @@
/* ========================================
* Chamber - Chamber.h
* Copyright (c) 2016 airwindows, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#include "Chamber.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new Chamber(audioMaster);}
Chamber::Chamber(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.35;
B = 0.35;
C = 0.35;
D = 0.35;
E = 0.35;
iirAL = 0.0; iirAR = 0.0;
iirBL = 0.0; iirBR = 0.0;
iirCL = 0.0; iirCR = 0.0;
for(int count = 0; count < 19999; count++) {aEL[count] = 0.0;aER[count] = 0.0;}
for(int count = 0; count < 12360; count++) {aFL[count] = 0.0;aFR[count] = 0.0;}
for(int count = 0; count < 7639; count++) {aGL[count] = 0.0;aGR[count] = 0.0;}
for(int count = 0; count < 4721; count++) {aHL[count] = 0.0;aHR[count] = 0.0;}
for(int count = 0; count < 2915; count++) {aAL[count] = 0.0;aAR[count] = 0.0;}
for(int count = 0; count < 1803; count++) {aBL[count] = 0.0;aBR[count] = 0.0;}
for(int count = 0; count < 1114; count++) {aCL[count] = 0.0;aCR[count] = 0.0;}
for(int count = 0; count < 688; count++) {aDL[count] = 0.0;aDR[count] = 0.0;}
for(int count = 0; count < 425; count++) {aIL[count] = 0.0;aIR[count] = 0.0;}
for(int count = 0; count < 263; count++) {aJL[count] = 0.0;aJR[count] = 0.0;}
for(int count = 0; count < 162; count++) {aKL[count] = 0.0;aKR[count] = 0.0;}
for(int count = 0; count < 100; count++) {aLL[count] = 0.0;aLR[count] = 0.0;}
feedbackAL = 0.0; feedbackAR = 0.0;
feedbackBL = 0.0; feedbackBR = 0.0;
feedbackCL = 0.0; feedbackCR = 0.0;
feedbackDL = 0.0; feedbackDR = 0.0;
previousAL = 0.0; previousAR = 0.0;
previousBL = 0.0; previousBR = 0.0;
previousCL = 0.0; previousCR = 0.0;
previousDL = 0.0; previousDR = 0.0;
for(int count = 0; count < 9; count++) {lastRefL[count] = 0.0;lastRefR[count] = 0.0;}
countI = 1;
countJ = 1;
countK = 1;
countL = 1;
countA = 1;
countB = 1;
countC = 1;
countD = 1;
countE = 1;
countF = 1;
countG = 1;
countH = 1;
cycle = 0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
//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
}
Chamber::~Chamber() {}
VstInt32 Chamber::getVendorVersion () {return 1000;}
void Chamber::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void Chamber::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 Chamber::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
chunkData[3] = D;
chunkData[4] = E;
/* 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 Chamber::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]);
E = pinParameter(chunkData[4]);
/* 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 Chamber::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;
case kParamE: E = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float Chamber::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;
case kParamE: return E; 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 Chamber::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Bigness", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Longness", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Liteness", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Darkness", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Wetness", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void Chamber::getParameterDisplay(VstInt32 index, char *text) {
switch (index) {
case kParamA: float2string (A, text, kVstMaxParamStrLen); break;
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
case kParamC: float2string (C, text, kVstMaxParamStrLen); break;
case kParamD: float2string (D, text, kVstMaxParamStrLen); break;
case kParamE: float2string (E, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void Chamber::getParameterLabel(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 Chamber::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool Chamber::getEffectName(char* name) {
vst_strncpy(name, "Chamber", kVstMaxProductStrLen); return true;
}
VstPlugCategory Chamber::getPlugCategory() {return kPlugCategEffect;}
bool Chamber::getProductString(char* text) {
vst_strncpy (text, "airwindows Chamber", kVstMaxProductStrLen); return true;
}
bool Chamber::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,141 @@
/* ========================================
* Chamber - Chamber.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) 2011 __MyCompanyName__, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#define __Chamber_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA = 0,
kParamB = 1,
kParamC = 2,
kParamD = 3,
kParamE = 4,
kNumParameters = 5
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'cham'; //Change this to what the AU identity is!
class Chamber :
public AudioEffectX
{
public:
Chamber(audioMasterCallback audioMaster);
~Chamber();
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 iirAL;
double iirBL;
double iirCL;
double aEL[20000];
double aFL[12361];
double aGL[7640];
double aHL[4722];
double aAL[2916];
double aBL[1804];
double aCL[1115];
double aDL[689];
double aIL[426];
double aJL[264];
double aKL[163];
double aLL[101];
double feedbackAL;
double feedbackBL;
double feedbackCL;
double feedbackDL;
double previousAL;
double previousBL;
double previousCL;
double previousDL;
double lastRefL[10];
double iirAR;
double iirBR;
double iirCR;
double aER[20000];
double aFR[12361];
double aGR[7640];
double aHR[4722];
double aAR[2916];
double aBR[1804];
double aCR[1115];
double aDR[689];
double aIR[426];
double aJR[264];
double aKR[163];
double aLR[101];
double feedbackAR;
double feedbackBR;
double feedbackCR;
double feedbackDR;
double previousAR;
double previousBR;
double previousCR;
double previousDR;
double lastRefR[10];
int countA, delayA;
int countB, delayB;
int countC, delayC;
int countD, delayD;
int countE, delayE;
int countF, delayF;
int countG, delayG;
int countH, delayH;
int countI, delayI;
int countJ, delayJ;
int countK, delayK;
int countL, delayL;
int cycle; //all these ints are shared across channels, not duplicated
uint32_t fpdL;
uint32_t fpdR;
//default stuff
float A;
float B;
float C;
float D;
float E; //parameters. Always 0-1, and we scale/alter them elsewhere.
};
#endif

View file

@ -0,0 +1,532 @@
/* ========================================
* Chamber - Chamber.h
* Copyright (c) 2016 airwindows, All rights reserved
* ======================================== */
#ifndef __Chamber_H
#include "Chamber.h"
#endif
void Chamber::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();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
double size = (pow(A,2)*0.9)+0.1;
double regen = (1.0-(pow(1.0-B,6)))*0.123;
double highpass = (pow(C,2.0))/sqrt(overallscale);
double lowpass = (1.0-pow(D,2.0))/sqrt(overallscale);
double interpolate = size*0.381966011250105;
double wet = E*2.0;
double dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-37) inputSampleL = fpdL * 1.18e-37;
if (fabs(inputSampleR)<1.18e-37) inputSampleR = fpdR * 1.18e-37;
long double drySampleL = inputSampleL;
long double drySampleR = inputSampleR;
if (fabs(iirCL)<1.18e-37) iirCL = 0.0;
iirCL = (iirCL*(1.0-highpass))+(inputSampleL*highpass); inputSampleL -= iirCL;
if (fabs(iirCR)<1.18e-37) iirCR = 0.0;
iirCR = (iirCR*(1.0-highpass))+(inputSampleR*highpass); inputSampleR -= iirCR;
//initial highpass
if (fabs(iirAL)<1.18e-37) iirAL = 0.0;
iirAL = (iirAL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirAL;
if (fabs(iirAR)<1.18e-37) iirAR = 0.0;
iirAR = (iirAR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirAR;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackAL = (feedbackAL*(1.0-interpolate))+(previousAL*interpolate); previousAL = feedbackAL;
feedbackBL = (feedbackBL*(1.0-interpolate))+(previousBL*interpolate); previousBL = feedbackBL;
feedbackCL = (feedbackCL*(1.0-interpolate))+(previousCL*interpolate); previousCL = feedbackCL;
feedbackDL = (feedbackDL*(1.0-interpolate))+(previousDL*interpolate); previousDL = feedbackDL;
feedbackAR = (feedbackAR*(1.0-interpolate))+(previousAR*interpolate); previousAR = feedbackAR;
feedbackBR = (feedbackBR*(1.0-interpolate))+(previousBR*interpolate); previousBR = feedbackBR;
feedbackCR = (feedbackCR*(1.0-interpolate))+(previousCR*interpolate); previousCR = feedbackCR;
feedbackDR = (feedbackDR*(1.0-interpolate))+(previousDR*interpolate); previousDR = feedbackDR;
aIL[countI] = inputSampleL + (feedbackAL * regen);
aJL[countJ] = inputSampleL + (feedbackBL * regen);
aKL[countK] = inputSampleL + (feedbackCL * regen);
aLL[countL] = inputSampleL + (feedbackDL * regen);
aIR[countI] = inputSampleR + (feedbackAR * regen);
aJR[countJ] = inputSampleR + (feedbackBR * regen);
aKR[countK] = inputSampleR + (feedbackCR * regen);
aLR[countL] = inputSampleR + (feedbackDR * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
double outIL = aIL[countI-((countI > delayI)?delayI+1:0)];
double outJL = aJL[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKL = aKL[countK-((countK > delayK)?delayK+1:0)];
double outLL = aLL[countL-((countL > delayL)?delayL+1:0)];
double outIR = aIR[countI-((countI > delayI)?delayI+1:0)];
double outJR = aJR[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKR = aKR[countK-((countK > delayK)?delayK+1:0)];
double outLR = aLR[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aAL[countA] = (outIL - (outJL + outKL + outLL));
aBL[countB] = (outJL - (outIL + outKL + outLL));
aCL[countC] = (outKL - (outIL + outJL + outLL));
aDL[countD] = (outLL - (outIL + outJL + outKL));
aAR[countA] = (outIR - (outJR + outKR + outLR));
aBR[countB] = (outJR - (outIR + outKR + outLR));
aCR[countC] = (outKR - (outIR + outJR + outLR));
aDR[countD] = (outLR - (outIR + outJR + outKR));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
double outAL = aAL[countA-((countA > delayA)?delayA+1:0)];
double outBL = aBL[countB-((countB > delayB)?delayB+1:0)];
double outCL = aCL[countC-((countC > delayC)?delayC+1:0)];
double outDL = aDL[countD-((countD > delayD)?delayD+1:0)];
double outAR = aAR[countA-((countA > delayA)?delayA+1:0)];
double outBR = aBR[countB-((countB > delayB)?delayB+1:0)];
double outCR = aCR[countC-((countC > delayC)?delayC+1:0)];
double outDR = aDR[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aEL[countE] = (outAL - (outBL + outCL + outDL));
aFL[countF] = (outBL - (outAL + outCL + outDL));
aGL[countG] = (outCL - (outAL + outBL + outDL));
aHL[countH] = (outDL - (outAL + outBL + outCL));
aER[countE] = (outAR - (outBR + outCR + outDR));
aFR[countF] = (outBR - (outAR + outCR + outDR));
aGR[countG] = (outCR - (outAR + outBR + outDR));
aHR[countH] = (outDR - (outAR + outBR + outCR));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
double outEL = aEL[countE-((countE > delayE)?delayE+1:0)];
double outFL = aFL[countF-((countF > delayF)?delayF+1:0)];
double outGL = aGL[countG-((countG > delayG)?delayG+1:0)];
double outHL = aHL[countH-((countH > delayH)?delayH+1:0)];
double outER = aER[countE-((countE > delayE)?delayE+1:0)];
double outFR = aFR[countF-((countF > delayF)?delayF+1:0)];
double outGR = aGR[countG-((countG > delayG)?delayG+1:0)];
double outHR = aHR[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackAL = (outEL - (outFL + outGL + outHL));
feedbackBL = (outFL - (outEL + outGL + outHL));
feedbackCL = (outGL - (outEL + outFL + outHL));
feedbackDL = (outHL - (outEL + outFL + outGL));
feedbackAR = (outER - (outFR + outGR + outHR));
feedbackBR = (outFR - (outER + outGR + outHR));
feedbackCR = (outGR - (outER + outFR + outHR));
feedbackDR = (outHR - (outER + outFR + outGR));
//which we need to feed back into the input again, a bit
inputSampleL = (outEL + outFL + outGL + outHL)/8.0;
inputSampleR = (outER + outFR + outGR + outHR)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRefL[0] = lastRefL[4]; //start from previous last
lastRefL[2] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[1] = (lastRefL[0] + lastRefL[2])/2; //one quarter
lastRefL[3] = (lastRefL[2] + inputSampleL)/2; //three quarters
lastRefL[4] = inputSampleL; //full
lastRefR[0] = lastRefR[4]; //start from previous last
lastRefR[2] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[1] = (lastRefR[0] + lastRefR[2])/2; //one quarter
lastRefR[3] = (lastRefR[2] + inputSampleR)/2; //three quarters
lastRefR[4] = inputSampleR; //full
}
if (cycleEnd == 3) {
lastRefL[0] = lastRefL[3]; //start from previous last
lastRefL[2] = (lastRefL[0]+lastRefL[0]+inputSampleL)/3; //third
lastRefL[1] = (lastRefL[0]+inputSampleL+inputSampleL)/3; //two thirds
lastRefL[3] = inputSampleL; //full
lastRefR[0] = lastRefR[3]; //start from previous last
lastRefR[2] = (lastRefR[0]+lastRefR[0]+inputSampleR)/3; //third
lastRefR[1] = (lastRefR[0]+inputSampleR+inputSampleR)/3; //two thirds
lastRefR[3] = inputSampleR; //full
}
if (cycleEnd == 2) {
lastRefL[0] = lastRefL[2]; //start from previous last
lastRefL[1] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[2] = inputSampleL; //full
lastRefR[0] = lastRefR[2]; //start from previous last
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[7])*0.5;
lastRefL[7] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[7])*0.5;
lastRefR[7] = lastRefR[8]; //continue, do not break
case 3:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[6])*0.5;
lastRefL[6] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[6])*0.5;
lastRefR[6] = lastRefR[8]; //continue, do not break
case 2:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[5])*0.5;
lastRefL[5] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[5])*0.5;
lastRefR[5] = lastRefR[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirBL)<1.18e-37) iirBL = 0.0;
iirBL = (iirBL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirBL;
if (fabs(iirBR)<1.18e-37) iirBR = 0.0;
iirBR = (iirBR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirBR;
//end filter
if (wet < 1.0) {inputSampleL *= wet; inputSampleR *= wet;}
if (dry < 1.0) {drySampleL *= dry; drySampleR *= dry;}
inputSampleL += drySampleL;
inputSampleR += drySampleR;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 32 bit stereo floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
frexpf((float)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
*in1++;
*in2++;
*out1++;
*out2++;
}
}
void Chamber::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();
int cycleEnd = floor(overallscale);
if (cycleEnd < 1) cycleEnd = 1;
if (cycleEnd > 4) cycleEnd = 4;
//this is going to be 2 for 88.1 or 96k, 3 for silly people, 4 for 176 or 192k
if (cycle > cycleEnd-1) cycle = cycleEnd-1; //sanity check
double size = (pow(A,2)*0.9)+0.1;
double regen = (1.0-(pow(1.0-B,6)))*0.123;
double highpass = (pow(C,2.0))/sqrt(overallscale);
double lowpass = (1.0-pow(D,2.0))/sqrt(overallscale);
double interpolate = size*0.381966011250105;
double wet = E*2.0;
double dry = 2.0 - wet;
if (wet > 1.0) wet = 1.0;
if (wet < 0.0) wet = 0.0;
if (dry > 1.0) dry = 1.0;
if (dry < 0.0) dry = 0.0;
//this reverb makes 50% full dry AND full wet, not crossfaded.
//that's so it can be on submixes without cutting back dry channel when adjusted:
//unless you go super heavy, you are only adjusting the added verb loudness.
delayE = 19900*size;
delayF = delayE*0.618033988749894848204586;
delayG = delayF*0.618033988749894848204586;
delayH = delayG*0.618033988749894848204586;
delayA = delayH*0.618033988749894848204586;
delayB = delayA*0.618033988749894848204586;
delayC = delayB*0.618033988749894848204586;
delayD = delayC*0.618033988749894848204586;
delayI = delayD*0.618033988749894848204586;
delayJ = delayI*0.618033988749894848204586;
delayK = delayJ*0.618033988749894848204586;
delayL = delayK*0.618033988749894848204586;
//initially designed around the Fibonnaci series, Chamber uses
//delay coefficients that are all related to the Golden Ratio,
//Turns out that as you continue to sustain them, it turns from a
//chunky slapback effect into a smoother reverb tail that can
//sustain infinitely.
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpdL * 1.18e-43;
if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpdR * 1.18e-43;
long double drySampleL = inputSampleL;
long double drySampleR = inputSampleR;
if (fabs(iirCL)<1.18e-37) iirCL = 0.0;
iirCL = (iirCL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL -= iirCL;
if (fabs(iirCR)<1.18e-37) iirCR = 0.0;
iirCR = (iirCR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR -= iirCR;
//initial highpass
if (fabs(iirAL)<1.18e-37) iirAL = 0.0;
iirAL = (iirAL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirAL;
if (fabs(iirAR)<1.18e-37) iirAR = 0.0;
iirAR = (iirAR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirAR;
//initial filter
cycle++;
if (cycle == cycleEnd) { //hit the end point and we do a reverb sample
feedbackAL = (feedbackAL*(1.0-interpolate))+(previousAL*interpolate); previousAL = feedbackAL;
feedbackBL = (feedbackBL*(1.0-interpolate))+(previousBL*interpolate); previousBL = feedbackBL;
feedbackCL = (feedbackCL*(1.0-interpolate))+(previousCL*interpolate); previousCL = feedbackCL;
feedbackDL = (feedbackDL*(1.0-interpolate))+(previousDL*interpolate); previousDL = feedbackDL;
feedbackAR = (feedbackAR*(1.0-interpolate))+(previousAR*interpolate); previousAR = feedbackAR;
feedbackBR = (feedbackBR*(1.0-interpolate))+(previousBR*interpolate); previousBR = feedbackBR;
feedbackCR = (feedbackCR*(1.0-interpolate))+(previousCR*interpolate); previousCR = feedbackCR;
feedbackDR = (feedbackDR*(1.0-interpolate))+(previousDR*interpolate); previousDR = feedbackDR;
aIL[countI] = inputSampleL + (feedbackAL * regen);
aJL[countJ] = inputSampleL + (feedbackBL * regen);
aKL[countK] = inputSampleL + (feedbackCL * regen);
aLL[countL] = inputSampleL + (feedbackDL * regen);
aIR[countI] = inputSampleR + (feedbackAR * regen);
aJR[countJ] = inputSampleR + (feedbackBR * regen);
aKR[countK] = inputSampleR + (feedbackCR * regen);
aLR[countL] = inputSampleR + (feedbackDR * regen);
countI++; if (countI < 0 || countI > delayI) countI = 0;
countJ++; if (countJ < 0 || countJ > delayJ) countJ = 0;
countK++; if (countK < 0 || countK > delayK) countK = 0;
countL++; if (countL < 0 || countL > delayL) countL = 0;
double outIL = aIL[countI-((countI > delayI)?delayI+1:0)];
double outJL = aJL[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKL = aKL[countK-((countK > delayK)?delayK+1:0)];
double outLL = aLL[countL-((countL > delayL)?delayL+1:0)];
double outIR = aIR[countI-((countI > delayI)?delayI+1:0)];
double outJR = aJR[countJ-((countJ > delayJ)?delayJ+1:0)];
double outKR = aKR[countK-((countK > delayK)?delayK+1:0)];
double outLR = aLR[countL-((countL > delayL)?delayL+1:0)];
//first block: now we have four outputs
aAL[countA] = (outIL - (outJL + outKL + outLL));
aBL[countB] = (outJL - (outIL + outKL + outLL));
aCL[countC] = (outKL - (outIL + outJL + outLL));
aDL[countD] = (outLL - (outIL + outJL + outKL));
aAR[countA] = (outIR - (outJR + outKR + outLR));
aBR[countB] = (outJR - (outIR + outKR + outLR));
aCR[countC] = (outKR - (outIR + outJR + outLR));
aDR[countD] = (outLR - (outIR + outJR + outKR));
countA++; if (countA < 0 || countA > delayA) countA = 0;
countB++; if (countB < 0 || countB > delayB) countB = 0;
countC++; if (countC < 0 || countC > delayC) countC = 0;
countD++; if (countD < 0 || countD > delayD) countD = 0;
double outAL = aAL[countA-((countA > delayA)?delayA+1:0)];
double outBL = aBL[countB-((countB > delayB)?delayB+1:0)];
double outCL = aCL[countC-((countC > delayC)?delayC+1:0)];
double outDL = aDL[countD-((countD > delayD)?delayD+1:0)];
double outAR = aAR[countA-((countA > delayA)?delayA+1:0)];
double outBR = aBR[countB-((countB > delayB)?delayB+1:0)];
double outCR = aCR[countC-((countC > delayC)?delayC+1:0)];
double outDR = aDR[countD-((countD > delayD)?delayD+1:0)];
//second block: four more outputs
aEL[countE] = (outAL - (outBL + outCL + outDL));
aFL[countF] = (outBL - (outAL + outCL + outDL));
aGL[countG] = (outCL - (outAL + outBL + outDL));
aHL[countH] = (outDL - (outAL + outBL + outCL));
aER[countE] = (outAR - (outBR + outCR + outDR));
aFR[countF] = (outBR - (outAR + outCR + outDR));
aGR[countG] = (outCR - (outAR + outBR + outDR));
aHR[countH] = (outDR - (outAR + outBR + outCR));
countE++; if (countE < 0 || countE > delayE) countE = 0;
countF++; if (countF < 0 || countF > delayF) countF = 0;
countG++; if (countG < 0 || countG > delayG) countG = 0;
countH++; if (countH < 0 || countH > delayH) countH = 0;
double outEL = aEL[countE-((countE > delayE)?delayE+1:0)];
double outFL = aFL[countF-((countF > delayF)?delayF+1:0)];
double outGL = aGL[countG-((countG > delayG)?delayG+1:0)];
double outHL = aHL[countH-((countH > delayH)?delayH+1:0)];
double outER = aER[countE-((countE > delayE)?delayE+1:0)];
double outFR = aFR[countF-((countF > delayF)?delayF+1:0)];
double outGR = aGR[countG-((countG > delayG)?delayG+1:0)];
double outHR = aHR[countH-((countH > delayH)?delayH+1:0)];
//third block: final outputs
feedbackAL = (outEL - (outFL + outGL + outHL));
feedbackBL = (outFL - (outEL + outGL + outHL));
feedbackCL = (outGL - (outEL + outFL + outHL));
feedbackDL = (outHL - (outEL + outFL + outGL));
feedbackAR = (outER - (outFR + outGR + outHR));
feedbackBR = (outFR - (outER + outGR + outHR));
feedbackCR = (outGR - (outER + outFR + outHR));
feedbackDR = (outHR - (outER + outFR + outGR));
//which we need to feed back into the input again, a bit
inputSampleL = (outEL + outFL + outGL + outHL)/8.0;
inputSampleR = (outER + outFR + outGR + outHR)/8.0;
//and take the final combined sum of outputs
if (cycleEnd == 4) {
lastRefL[0] = lastRefL[4]; //start from previous last
lastRefL[2] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[1] = (lastRefL[0] + lastRefL[2])/2; //one quarter
lastRefL[3] = (lastRefL[2] + inputSampleL)/2; //three quarters
lastRefL[4] = inputSampleL; //full
lastRefR[0] = lastRefR[4]; //start from previous last
lastRefR[2] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[1] = (lastRefR[0] + lastRefR[2])/2; //one quarter
lastRefR[3] = (lastRefR[2] + inputSampleR)/2; //three quarters
lastRefR[4] = inputSampleR; //full
}
if (cycleEnd == 3) {
lastRefL[0] = lastRefL[3]; //start from previous last
lastRefL[2] = (lastRefL[0]+lastRefL[0]+inputSampleL)/3; //third
lastRefL[1] = (lastRefL[0]+inputSampleL+inputSampleL)/3; //two thirds
lastRefL[3] = inputSampleL; //full
lastRefR[0] = lastRefR[3]; //start from previous last
lastRefR[2] = (lastRefR[0]+lastRefR[0]+inputSampleR)/3; //third
lastRefR[1] = (lastRefR[0]+inputSampleR+inputSampleR)/3; //two thirds
lastRefR[3] = inputSampleR; //full
}
if (cycleEnd == 2) {
lastRefL[0] = lastRefL[2]; //start from previous last
lastRefL[1] = (lastRefL[0] + inputSampleL)/2; //half
lastRefL[2] = inputSampleL; //full
lastRefR[0] = lastRefR[2]; //start from previous last
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
//we are going through our references now
}
switch (cycleEnd) //multi-pole average using lastRef[] variables
{
case 4:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[7])*0.5;
lastRefL[7] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[7])*0.5;
lastRefR[7] = lastRefR[8]; //continue, do not break
case 3:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[6])*0.5;
lastRefL[6] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[6])*0.5;
lastRefR[6] = lastRefR[8]; //continue, do not break
case 2:
lastRefL[8] = inputSampleL; inputSampleL = (inputSampleL+lastRefL[5])*0.5;
lastRefL[5] = lastRefL[8]; //continue, do not break
lastRefR[8] = inputSampleR; inputSampleR = (inputSampleR+lastRefR[5])*0.5;
lastRefR[5] = lastRefR[8]; //continue, do not break
case 1:
break; //no further averaging
}
if (fabs(iirBL)<1.18e-37) iirBL = 0.0;
iirBL = (iirBL*(1.0-lowpass))+(inputSampleL*lowpass); inputSampleL = iirBL;
if (fabs(iirBR)<1.18e-37) iirBR = 0.0;
iirBR = (iirBR*(1.0-lowpass))+(inputSampleR*lowpass); inputSampleR = iirBR;
//end filter
if (wet < 1.0) {inputSampleL *= wet; inputSampleR *= wet;}
if (dry < 1.0) {drySampleL *= dry; drySampleR *= dry;}
inputSampleL += drySampleL;
inputSampleR += drySampleR;
//this is our submix verb dry/wet: 0.5 is BOTH at FULL VOLUME
//purpose is that, if you're adding verb, you're not altering other balances
//begin 64 bit stereo floating point dither
int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
*in1++;
*in2++;
*out1++;
*out2++;
}
}

View file

@ -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

View file

@ -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="Chamber.cpp" />
<ClCompile Include="ChamberProc.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="Chamber.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}</ProjectGuid>
<RootNamespace>VSTProject</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<ProjectName>Chamber64</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>

View file

@ -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="Chamber.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ChamberProc.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="Chamber.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View file

@ -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>

View file

@ -0,0 +1,3 @@
EXPORTS
VSTPluginMain
main=VSTPluginMain

View file

@ -200,7 +200,13 @@ void Galactic::processReplacing(float **inputs, float **outputs, VstInt32 sample
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -430,7 +436,13 @@ void Galactic::processDoubleReplacing(double **inputs, double **outputs, VstInt3
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

View file

@ -356,7 +356,13 @@ void IronOxideClassic2::processReplacing(float **inputs, float **outputs, VstInt
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -762,7 +768,13 @@ void IronOxideClassic2::processDoubleReplacing(double **inputs, double **outputs
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

0
plugins/WinVST/Verbity/.vs/Console4Channel64/v14/.suo Executable file → Normal file
View file

BIN
plugins/WinVST/Verbity/.vs/VSTProject/v14/.suo Executable file → Normal file

Binary file not shown.

0
plugins/WinVST/Verbity/VSTProject.sln Executable file → Normal file
View file

0
plugins/WinVST/Verbity/VSTProject.vcxproj Executable file → Normal file
View file

0
plugins/WinVST/Verbity/VSTProject.vcxproj.filters Executable file → Normal file
View file

0
plugins/WinVST/Verbity/VSTProject.vcxproj.user Executable file → Normal file
View file

0
plugins/WinVST/Verbity/Verbity.cpp Executable file → Normal file
View file

0
plugins/WinVST/Verbity/Verbity.h Executable file → Normal file
View file

12
plugins/WinVST/Verbity/VerbityProc.cpp Executable file → Normal file
View file

@ -198,7 +198,13 @@ void Verbity::processReplacing(float **inputs, float **outputs, VstInt32 sampleF
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
@ -428,7 +434,13 @@ void Verbity::processDoubleReplacing(double **inputs, double **outputs, VstInt32
lastRefR[1] = (lastRefR[0] + inputSampleR)/2; //half
lastRefR[2] = inputSampleR; //full
}
if (cycleEnd == 1) {
lastRefL[0] = inputSampleL;
lastRefR[0] = inputSampleR;
}
cycle = 0; //reset
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];
} else {
inputSampleL = lastRefL[cycle];
inputSampleR = lastRefR[cycle];

0
plugins/WinVST/Verbity/vstplug.def Executable file → Normal file
View file