This commit is contained in:
Christopher Johnson 2025-11-28 16:15:14 -05:00
parent 90d4f81642
commit 824cfc024d
376 changed files with 90216 additions and 7470 deletions

View file

@ -35,7 +35,7 @@ Lo-Fi: HipCrush, Flutter2, DeRez3, Pockey2, CrunchyGrooveWear, GrooveWear, Pocke
Noise: Noise, Texturize, TexturizeMS, VoiceOfTheStarship, DarkNoise, ElectroHat, Silhouette, TapeDust
Reverb: kStation, kGuitarHall2, kCathedral5, VerbTiny, kAlienSpaceship, kCathedral4, kBeyond, VerbSixes, kCosmos, Galactic3, kCathedral3, kPlate140, kPlate240, CreamCoat, kGuitarHall, kPlateD, kPlateB, kPlateA, kPlateC, CrunchCoat, kCathedral2, Verbity2, Galactic, Galactic2, Verbity, Chamber2, Chamber, Infinity2, NonlinearSpace, kCathedral, Infinity, MatrixVerb, PocketVerbs, Reverb
Reverb: kStation, kGuitarHall2, kCathedral5, VerbTiny, VerbThic, kAlienSpaceship, kCathedral4, kBeyond, VerbSixes, kCosmos, Galactic3, kCathedral3, kPlate140, kPlate240, CreamCoat, kGuitarHall, kPlateD, kPlateB, kPlateA, kPlateC, CrunchCoat, kCathedral2, Verbity2, Galactic, Galactic2, Verbity, Chamber2, Chamber, Infinity2, NonlinearSpace, kCathedral, Infinity, MatrixVerb, PocketVerbs, Reverb
Saturation: SquareRoot, Hypersoft, Creature, Huge, NCSeventeen, Tube2, Tube, Spiral2, PurestDrive, Focus, Mojo, Dyno, Spiral, UnBox, Desk4, Righteous4
@ -5957,6 +5957,20 @@ Just short of 12 MILLION echoes, even without regen. And they both have regen.
I'll give you more reverbs based on this technique, but enjoy the new bigger-than-Cosmos space :)
############ VerbThic is a classic artificial reverb for being opaque and textured.
Turns out VerbTiny has a sibling! And a secret… but that's for later.
VerbThic is a special case. It's exactly like VerbTiny in every respect, with one difference that may or may not be obvious (I'm hoping it is, but you never can tell). All my other reverbs, very much including VerbTiny, are meant to sound as far back as possible. The whole reason VerbTiny came out is, I stumbled across a reverb algorithm for a 4x4 Householder matrix that had unusually high peak energy relative to RMS.
This is not well understood in a world where everything is about making the RMS be louder no matter what, and where peaks are considered 'unheard' and unimportant, but I've been developing a focus on peak energy for years, and especially with my reverbs where I feel the heightened peak energy makes their spaces feel more distant, rather than 'an up front sound effect'.
So imagine my surprise when I ended up with another algorithm, much like VerbTiny, even a fairly similar room size, except it was the opposite! It produced unusually LOW peak energy. In theory, this would produce a reverb that doesn't sound far away: more like a fog that combines with sounds to thicken them up.
And so, that's VerbThic. Works the same way as VerbTiny, but meant to do the opposite job, spatially. On top of that, I found a way to re-use variables which cut down the size of the plugin considerably… and which very likely improves its memory use in your DAW, so it got more CPU (or at least memory) efficient. And, in the process of making it sound more up-front, I stumbled over a variation of the TapeHack 'altered sin() equation' concept that was all about taking a saturation effect to an extreme: applying a succession of corrections that were ALWAYS scaled through bit-shifting the exponent, even if that was not the correct amount to use. And I got an interesting-sounding saturation effect that sounds very different from TapeHack and also sounds a lot like nothing at all… I'll be exploring that one more in future. VerbThic is there to add body to sounds while seeming to come from the same depth as the sounds, rather than 'distant'. Consider it an interesting twist to try.
Oh, the secret of VerbTiny? The CPU optimization also worked for VerbTiny, running a little more efficiently while not affecting the sound (or saved mixes) the slightest amount. So, I've amended the code and re-uploaded it. Go ahead and redownload it as it's changed since last week, purely in terms of how many variables it uses to do the same thing. Have fun!
############ VerbTiny is a classic artificial reverb that expands reverb shape.
So, why this much simpler reverb? Instead of the more elaborate ones I'm developing starting with the letter k?
@ -5975,7 +5989,7 @@ Because I'd had another idea: yes, it was gonna be 'VerbTiny' because it could s
That would mean a wideness control, because it started out seeming kind of narrow (I can't control this, it's part of the algorithm). If there was a dual mono instance, each side would just feed back into the same side, meaning that stereo would stay as VERY wide stereo, at the cost of destroying the normal stereo image the reverb would have. And running two 4x4 reverbs isn't that demanding.
And then, since the 'normal' stereo reverb was so narrow, that means it had a lot of energy in the mid channel even though it's two stereo channels. So, what if the wideness went from 'normal' to the dual mono one at the center (0.5) and then as you went beyond that, you brought in the original revverb again, but with one channel phase flipped? Then it'd all be side channel energy, against the dual mono.
And then, since the 'normal' stereo reverb was so narrow, that means it had a lot of energy in the mid channel even though it's two stereo channels. So, what if the wideness went from 'normal' to the dual mono one at the center (0.5) and then as you went beyond that, you brought in the original reverb again, but with one channel phase flipped? Then it'd all be side channel energy, against the dual mono.
And so I did.

View file

@ -45,6 +45,7 @@ add_airwindows_plugin(BiquadOneHalf)
add_airwindows_plugin(BiquadStack)
add_airwindows_plugin(BiquadTriple)
add_airwindows_plugin(Bite)
add_airwindows_plugin(BitDualPan)
add_airwindows_plugin(BitGlitter)
add_airwindows_plugin(BitShiftGain)
add_airwindows_plugin(BitShiftPan)
@ -361,9 +362,11 @@ add_airwindows_plugin(PurestConsole2Channel)
add_airwindows_plugin(PurestConsole3Buss)
add_airwindows_plugin(PurestConsole3Channel)
add_airwindows_plugin(PurestDrive)
add_airwindows_plugin(PurestDualPan)
add_airwindows_plugin(PurestEcho)
add_airwindows_plugin(PurestFade)
add_airwindows_plugin(PurestGain)
add_airwindows_plugin(PurestSaturation)
add_airwindows_plugin(PurestSquish)
add_airwindows_plugin(PurestWarm)
add_airwindows_plugin(PurestWarm2)
@ -463,6 +466,7 @@ add_airwindows_plugin(VariMu)
add_airwindows_plugin(Verbity)
add_airwindows_plugin(Verbity2)
add_airwindows_plugin(VerbSixes)
add_airwindows_plugin(VerbThic)
add_airwindows_plugin(VerbTiny)
add_airwindows_plugin(Vibrato)
add_airwindows_plugin(VinylDither)

View file

@ -0,0 +1,142 @@
/* ========================================
* BitDualPan - BitDualPan.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __BitDualPan_H
#include "BitDualPan.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new BitDualPan(audioMaster);}
BitDualPan::BitDualPan(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.5;
B = 0.0;
C = 0.5;
D = 1.0;
//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
}
BitDualPan::~BitDualPan() {}
VstInt32 BitDualPan::getVendorVersion () {return 1000;}
void BitDualPan::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void BitDualPan::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 BitDualPan::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
chunkData[3] = D;
/* Note: The way this is set up, it will break if you manage to save settings on an Intel
machine and load them on a PPC Mac. However, it's fine if you stick to the machine you
started with. */
*data = chunkData;
return kNumParameters * sizeof(float);
}
VstInt32 BitDualPan::setChunk (void* data, VstInt32 byteSize, bool isPreset)
{
float *chunkData = (float *)data;
A = pinParameter(chunkData[0]);
B = pinParameter(chunkData[1]);
C = pinParameter(chunkData[2]);
D = pinParameter(chunkData[3]);
/* We're ignoring byteSize as we found it to be a filthy liar */
/* calculate any other fields you need here - you could copy in
code from setParameter() here. */
return 0;
}
void BitDualPan::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
case kParamB: B = value; break;
case kParamC: C = value; break;
case kParamD: D = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float BitDualPan::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; break;
case kParamB: return B; break;
case kParamC: return C; break;
case kParamD: return D; break;
default: break; // unknown parameter, shouldn't happen!
} return 0.0; //we only need to update the relevant name, this is simple to manage
}
void BitDualPan::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "L Vol", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "L Pan", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "R Vol", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "R Pan", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void BitDualPan::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;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void BitDualPan::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;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 BitDualPan::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool BitDualPan::getEffectName(char* name) {
vst_strncpy(name, "BitDualPan", kVstMaxProductStrLen); return true;
}
VstPlugCategory BitDualPan::getPlugCategory() {return kPlugCategEffect;}
bool BitDualPan::getProductString(char* text) {
vst_strncpy (text, "airwindows BitDualPan", kVstMaxProductStrLen); return true;
}
bool BitDualPan::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,66 @@
/* ========================================
* BitDualPan - BitDualPan.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __BitDualPan_H
#define __BitDualPan_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA =0,
kParamB =1,
kParamC =2,
kParamD =3,
kNumParameters = 4
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'bitd'; //Change this to what the AU identity is!
class BitDualPan :
public AudioEffectX
{
public:
BitDualPan(audioMasterCallback audioMaster);
~BitDualPan();
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;
float A;
float B;
float C;
float D;
//default stuff
};
#endif

View file

@ -0,0 +1,300 @@
/* ========================================
* BitDualPan - BitDualPan.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __BitDualPan_H
#include "BitDualPan.h"
#endif
void BitDualPan::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
double gainControl = (A*0.5)+0.05; //0.0 to 1.0
int gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
int bitshiftL = gainBits - 3;
int bitshiftR = gainBits - 3;
double panControl = (B*2.0)-1.0; //-1.0 to 1.0
double panAttenuation = (1.0-fabs(panControl));
int panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double LgainL = 1.0;
double LgainR = 1.0;
switch (bitshiftL)
{
case 17: LgainL = 0.0; break;
case 16: LgainL = 0.0000152587890625; break;
case 15: LgainL = 0.000030517578125; break;
case 14: LgainL = 0.00006103515625; break;
case 13: LgainL = 0.0001220703125; break;
case 12: LgainL = 0.000244140625; break;
case 11: LgainL = 0.00048828125; break;
case 10: LgainL = 0.0009765625; break;
case 9: LgainL = 0.001953125; break;
case 8: LgainL = 0.00390625; break;
case 7: LgainL = 0.0078125; break;
case 6: LgainL = 0.015625; break;
case 5: LgainL = 0.03125; break;
case 4: LgainL = 0.0625; break;
case 3: LgainL = 0.125; break;
case 2: LgainL = 0.25; break;
case 1: LgainL = 0.5; break;
case 0: LgainL = 1.0; break;
case -1: LgainL = 2.0; break;
case -2: LgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: LgainR = 0.0; break;
case 16: LgainR = 0.0000152587890625; break;
case 15: LgainR = 0.000030517578125; break;
case 14: LgainR = 0.00006103515625; break;
case 13: LgainR = 0.0001220703125; break;
case 12: LgainR = 0.000244140625; break;
case 11: LgainR = 0.00048828125; break;
case 10: LgainR = 0.0009765625; break;
case 9: LgainR = 0.001953125; break;
case 8: LgainR = 0.00390625; break;
case 7: LgainR = 0.0078125; break;
case 6: LgainR = 0.015625; break;
case 5: LgainR = 0.03125; break;
case 4: LgainR = 0.0625; break;
case 3: LgainR = 0.125; break;
case 2: LgainR = 0.25; break;
case 1: LgainR = 0.5; break;
case 0: LgainR = 1.0; break;
case -1: LgainR = 2.0; break;
case -2: LgainR = 4.0; break;
}
gainControl = (C*0.5)+0.05; //0.0 to 1.0
gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
bitshiftL = gainBits - 3;
bitshiftR = gainBits - 3;
panControl = (D*2.0)-1.0; //-1.0 to 1.0
panAttenuation = (1.0-fabs(panControl));
panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double RgainL = 1.0;
double RgainR = 1.0;
switch (bitshiftL)
{
case 17: RgainL = 0.0; break;
case 16: RgainL = 0.0000152587890625; break;
case 15: RgainL = 0.000030517578125; break;
case 14: RgainL = 0.00006103515625; break;
case 13: RgainL = 0.0001220703125; break;
case 12: RgainL = 0.000244140625; break;
case 11: RgainL = 0.00048828125; break;
case 10: RgainL = 0.0009765625; break;
case 9: RgainL = 0.001953125; break;
case 8: RgainL = 0.00390625; break;
case 7: RgainL = 0.0078125; break;
case 6: RgainL = 0.015625; break;
case 5: RgainL = 0.03125; break;
case 4: RgainL = 0.0625; break;
case 3: RgainL = 0.125; break;
case 2: RgainL = 0.25; break;
case 1: RgainL = 0.5; break;
case 0: RgainL = 1.0; break;
case -1: RgainL = 2.0; break;
case -2: RgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: RgainR = 0.0; break;
case 16: RgainR = 0.0000152587890625; break;
case 15: RgainR = 0.000030517578125; break;
case 14: RgainR = 0.00006103515625; break;
case 13: RgainR = 0.0001220703125; break;
case 12: RgainR = 0.000244140625; break;
case 11: RgainR = 0.00048828125; break;
case 10: RgainR = 0.0009765625; break;
case 9: RgainR = 0.001953125; break;
case 8: RgainR = 0.00390625; break;
case 7: RgainR = 0.0078125; break;
case 6: RgainR = 0.015625; break;
case 5: RgainR = 0.03125; break;
case 4: RgainR = 0.0625; break;
case 3: RgainR = 0.125; break;
case 2: RgainR = 0.25; break;
case 1: RgainR = 0.5; break;
case 0: RgainR = 1.0; break;
case -1: RgainR = 2.0; break;
case -2: RgainR = 4.0; break;
}
while (--sampleFrames >= 0)
{
double monoL = *in1;
double monoR = *in2;
*out1 = (monoL*LgainL)+(monoR*RgainL);
*out2 = (monoL*LgainR)+(monoR*RgainR);
in1++;
in2++;
out1++;
out2++;
}
}
void BitDualPan::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
double gainControl = (A*0.5)+0.05; //0.0 to 1.0
int gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
int bitshiftL = gainBits - 3;
int bitshiftR = gainBits - 3;
double panControl = (B*2.0)-1.0; //-1.0 to 1.0
double panAttenuation = (1.0-fabs(panControl));
int panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double LgainL = 1.0;
double LgainR = 1.0;
switch (bitshiftL)
{
case 17: LgainL = 0.0; break;
case 16: LgainL = 0.0000152587890625; break;
case 15: LgainL = 0.000030517578125; break;
case 14: LgainL = 0.00006103515625; break;
case 13: LgainL = 0.0001220703125; break;
case 12: LgainL = 0.000244140625; break;
case 11: LgainL = 0.00048828125; break;
case 10: LgainL = 0.0009765625; break;
case 9: LgainL = 0.001953125; break;
case 8: LgainL = 0.00390625; break;
case 7: LgainL = 0.0078125; break;
case 6: LgainL = 0.015625; break;
case 5: LgainL = 0.03125; break;
case 4: LgainL = 0.0625; break;
case 3: LgainL = 0.125; break;
case 2: LgainL = 0.25; break;
case 1: LgainL = 0.5; break;
case 0: LgainL = 1.0; break;
case -1: LgainL = 2.0; break;
case -2: LgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: LgainR = 0.0; break;
case 16: LgainR = 0.0000152587890625; break;
case 15: LgainR = 0.000030517578125; break;
case 14: LgainR = 0.00006103515625; break;
case 13: LgainR = 0.0001220703125; break;
case 12: LgainR = 0.000244140625; break;
case 11: LgainR = 0.00048828125; break;
case 10: LgainR = 0.0009765625; break;
case 9: LgainR = 0.001953125; break;
case 8: LgainR = 0.00390625; break;
case 7: LgainR = 0.0078125; break;
case 6: LgainR = 0.015625; break;
case 5: LgainR = 0.03125; break;
case 4: LgainR = 0.0625; break;
case 3: LgainR = 0.125; break;
case 2: LgainR = 0.25; break;
case 1: LgainR = 0.5; break;
case 0: LgainR = 1.0; break;
case -1: LgainR = 2.0; break;
case -2: LgainR = 4.0; break;
}
gainControl = (C*0.5)+0.05; //0.0 to 1.0
gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
bitshiftL = gainBits - 3;
bitshiftR = gainBits - 3;
panControl = (D*2.0)-1.0; //-1.0 to 1.0
panAttenuation = (1.0-fabs(panControl));
panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double RgainL = 1.0;
double RgainR = 1.0;
switch (bitshiftL)
{
case 17: RgainL = 0.0; break;
case 16: RgainL = 0.0000152587890625; break;
case 15: RgainL = 0.000030517578125; break;
case 14: RgainL = 0.00006103515625; break;
case 13: RgainL = 0.0001220703125; break;
case 12: RgainL = 0.000244140625; break;
case 11: RgainL = 0.00048828125; break;
case 10: RgainL = 0.0009765625; break;
case 9: RgainL = 0.001953125; break;
case 8: RgainL = 0.00390625; break;
case 7: RgainL = 0.0078125; break;
case 6: RgainL = 0.015625; break;
case 5: RgainL = 0.03125; break;
case 4: RgainL = 0.0625; break;
case 3: RgainL = 0.125; break;
case 2: RgainL = 0.25; break;
case 1: RgainL = 0.5; break;
case 0: RgainL = 1.0; break;
case -1: RgainL = 2.0; break;
case -2: RgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: RgainR = 0.0; break;
case 16: RgainR = 0.0000152587890625; break;
case 15: RgainR = 0.000030517578125; break;
case 14: RgainR = 0.00006103515625; break;
case 13: RgainR = 0.0001220703125; break;
case 12: RgainR = 0.000244140625; break;
case 11: RgainR = 0.00048828125; break;
case 10: RgainR = 0.0009765625; break;
case 9: RgainR = 0.001953125; break;
case 8: RgainR = 0.00390625; break;
case 7: RgainR = 0.0078125; break;
case 6: RgainR = 0.015625; break;
case 5: RgainR = 0.03125; break;
case 4: RgainR = 0.0625; break;
case 3: RgainR = 0.125; break;
case 2: RgainR = 0.25; break;
case 1: RgainR = 0.5; break;
case 0: RgainR = 1.0; break;
case -1: RgainR = 2.0; break;
case -2: RgainR = 4.0; break;
}
while (--sampleFrames >= 0)
{
double monoL = *in1;
double monoR = *in2;
*out1 = (monoL*LgainL)+(monoR*RgainL);
*out2 = (monoL*LgainR)+(monoR*RgainR);
in1++;
in2++;
out1++;
out2++;
}
}

View file

@ -0,0 +1,149 @@
/* ========================================
* PurestDualPan - PurestDualPan.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PurestDualPan_H
#include "PurestDualPan.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new PurestDualPan(audioMaster);}
PurestDualPan::PurestDualPan(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.5;
B = 0.0;
C = 0.5;
D = 1.0;
gainLA = gainLB = 0.5;
panLA = panLB = 0.0;
gainRA = gainRB = 0.5;
panRA = panRB = 1.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
}
PurestDualPan::~PurestDualPan() {}
VstInt32 PurestDualPan::getVendorVersion () {return 1000;}
void PurestDualPan::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void PurestDualPan::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 PurestDualPan::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
chunkData[3] = D;
/* Note: The way this is set up, it will break if you manage to save settings on an Intel
machine and load them on a PPC Mac. However, it's fine if you stick to the machine you
started with. */
*data = chunkData;
return kNumParameters * sizeof(float);
}
VstInt32 PurestDualPan::setChunk (void* data, VstInt32 byteSize, bool isPreset)
{
float *chunkData = (float *)data;
A = pinParameter(chunkData[0]);
B = pinParameter(chunkData[1]);
C = pinParameter(chunkData[2]);
D = pinParameter(chunkData[3]);
/* We're ignoring byteSize as we found it to be a filthy liar */
/* calculate any other fields you need here - you could copy in
code from setParameter() here. */
return 0;
}
void PurestDualPan::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
case kParamB: B = value; break;
case kParamC: C = value; break;
case kParamD: D = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float PurestDualPan::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; break;
case kParamB: return B; break;
case kParamC: return C; break;
case kParamD: return D; break;
default: break; // unknown parameter, shouldn't happen!
} return 0.0; //we only need to update the relevant name, this is simple to manage
}
void PurestDualPan::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "L Vol", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "L Pan", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "R Vol", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "R Pan", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void PurestDualPan::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;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void PurestDualPan::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;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 PurestDualPan::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool PurestDualPan::getEffectName(char* name) {
vst_strncpy(name, "PurestDualPan", kVstMaxProductStrLen); return true;
}
VstPlugCategory PurestDualPan::getPlugCategory() {return kPlugCategEffect;}
bool PurestDualPan::getProductString(char* text) {
vst_strncpy (text, "airwindows PurestDualPan", kVstMaxProductStrLen); return true;
}
bool PurestDualPan::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,73 @@
/* ========================================
* PurestDualPan - PurestDualPan.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PurestDualPan_H
#define __PurestDualPan_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA =0,
kParamB =1,
kParamC =2,
kParamD =3,
kNumParameters = 4
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'pdpn'; //Change this to what the AU identity is!
class PurestDualPan :
public AudioEffectX
{
public:
PurestDualPan(audioMasterCallback audioMaster);
~PurestDualPan();
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;
float A;
float B;
float C;
float D;
double gainLA, gainLB;
double gainRA, gainRB;
double panLA, panLB;
double panRA, panRB;
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,124 @@
/* ========================================
* PurestDualPan - PurestDualPan.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PurestDualPan_H
#include "PurestDualPan.h"
#endif
void PurestDualPan::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
VstInt32 inFramesToProcess = sampleFrames; //vst doesn't give us this as a separate variable so we'll make it
gainLA = gainLB; gainLB = A;
panLA = panLB; panLB = B;
gainRA = gainRB; gainRB = C;
panRA = panRB; panRB = D;
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double temp = (double)sampleFrames/inFramesToProcess;
long double LpanR = ((panLA*temp) + (panLB*(1.0-temp)))*1.57079633;
long double LpanL = 1.57079633 - LpanR;
LpanR = sin(LpanR); LpanL = sin(LpanL);
long double gainL = ((gainLA*temp) + (gainLB*(1.0-temp)))*2.0;
gainL = pow(gainL,gainL + 0.618033988749894848204586);
long double RpanR = ((panRA*temp) + (panRB*(1.0-temp)))*1.57079633;
long double RpanL = 1.57079633 - RpanR;
RpanR = sin(RpanR); RpanL = sin(RpanL);
long double gainR = ((gainRA*temp) + (gainRB*(1.0-temp)))*2.0;
gainR = pow(gainR,gainR + 0.618033988749894848204586);
long double LoutL = LpanL*gainL*inputSampleL;
long double LoutR = LpanR*gainL*inputSampleL;
long double RoutL = RpanL*gainR*inputSampleR;
long double RoutR = RpanR*gainR*inputSampleR;
inputSampleL = LoutL + RoutL;
inputSampleR = LoutR + RoutR;
//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 PurestDualPan::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
VstInt32 inFramesToProcess = sampleFrames; //vst doesn't give us this as a separate variable so we'll make it
gainLA = gainLB; gainLB = A;
panLA = panLB; panLB = B;
gainRA = gainRB; gainRB = C;
panRA = panRB; panRB = D;
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double temp = (double)sampleFrames/inFramesToProcess;
long double LpanR = ((panLA*temp) + (panLB*(1.0-temp)))*1.57079633;
long double LpanL = 1.57079633 - LpanR;
LpanR = sin(LpanR); LpanL = sin(LpanL);
long double gainL = ((gainLA*temp) + (gainLB*(1.0-temp)))*2.0;
gainL = pow(gainL,gainL + 0.618033988749894848204586);
long double RpanR = ((panRA*temp) + (panRB*(1.0-temp)))*1.57079633;
long double RpanL = 1.57079633 - RpanR;
RpanR = sin(RpanR); RpanL = sin(RpanL);
long double gainR = ((gainRA*temp) + (gainRB*(1.0-temp)))*2.0;
gainR = pow(gainR,gainR + 0.618033988749894848204586);
long double LoutL = LpanL*gainL*inputSampleL;
long double LoutR = LpanR*gainL*inputSampleL;
long double RoutL = RpanL*gainR*inputSampleR;
long double RoutR = RpanR*gainR*inputSampleR;
inputSampleL = LoutL + RoutL;
inputSampleR = LoutR + RoutR;
//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,128 @@
/* ========================================
* PurestSaturation - PurestSaturation.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PurestSaturation_H
#include "PurestSaturation.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new PurestSaturation(audioMaster);}
PurestSaturation::PurestSaturation(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.1;
B = 1.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
}
PurestSaturation::~PurestSaturation() {}
VstInt32 PurestSaturation::getVendorVersion () {return 1000;}
void PurestSaturation::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void PurestSaturation::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 PurestSaturation::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
/* 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 PurestSaturation::setChunk (void* data, VstInt32 byteSize, bool isPreset)
{
float *chunkData = (float *)data;
A = pinParameter(chunkData[0]);
B = pinParameter(chunkData[1]);
/* 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 PurestSaturation::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
case kParamB: B = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float PurestSaturation::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; break;
case kParamB: return B; 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 PurestSaturation::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Input", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Output", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void PurestSaturation::getParameterDisplay(VstInt32 index, char *text) {
switch (index) {
case kParamA: float2string (A, text, kVstMaxParamStrLen); break;
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void PurestSaturation::getParameterLabel(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 PurestSaturation::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool PurestSaturation::getEffectName(char* name) {
vst_strncpy(name, "PurestSaturation", kVstMaxProductStrLen); return true;
}
VstPlugCategory PurestSaturation::getPlugCategory() {return kPlugCategEffect;}
bool PurestSaturation::getProductString(char* text) {
vst_strncpy (text, "airwindows PurestSaturation", kVstMaxProductStrLen); return true;
}
bool PurestSaturation::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,64 @@
/* ========================================
* PurestSaturation - PurestSaturation.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PurestSaturation_H
#define __PurestSaturation_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA =0,
kParamB =1,
kNumParameters = 2
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'pusa'; //Change this to what the AU identity is!
class PurestSaturation :
public AudioEffectX
{
public:
PurestSaturation(audioMasterCallback audioMaster);
~PurestSaturation();
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;
float A;
float B;
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,142 @@
/* ========================================
* PurestSaturation - PurestSaturation.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PurestSaturation_H
#include "PurestSaturation.h"
#endif
void PurestSaturation::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
long double inputGain = A*10.0;
long double outputGain = B;
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
if (inputGain != 1.0) {
inputSampleL *= inputGain;
inputSampleR *= inputGain;
}
inputSampleL = fmin(fmax(inputSampleL,-2.032610446872596),2.032610446872596);
long double X = inputSampleL * inputSampleL;
long double temp = inputSampleL * X;
inputSampleL -= (temp*0.125); temp *= X;
inputSampleL += (temp*0.0078125); temp *= X;
inputSampleL -= (temp*0.000244140625); temp *= X;
inputSampleL += (temp*0.000003814697265625); temp *= X;
inputSampleL -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
inputSampleR = fmin(fmax(inputSampleR,-2.032610446872596),2.032610446872596);
X = inputSampleR * inputSampleR;
temp = inputSampleR * X;
inputSampleR -= (temp*0.125); temp *= X;
inputSampleR += (temp*0.0078125); temp *= X;
inputSampleR -= (temp*0.000244140625); temp *= X;
inputSampleR += (temp*0.000003814697265625); temp *= X;
inputSampleR -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
if (outputGain < 1.0) {
inputSampleL *= outputGain;
inputSampleR *= outputGain;
}
//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 PurestSaturation::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
long double inputGain = A*10.0;
long double outputGain = B;
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
long double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
if (inputGain != 1.0) {
inputSampleL *= inputGain;
inputSampleR *= inputGain;
}
inputSampleL = fmin(fmax(inputSampleL,-2.032610446872596),2.032610446872596);
long double X = inputSampleL * inputSampleL;
long double temp = inputSampleL * X;
inputSampleL -= (temp*0.125); temp *= X;
inputSampleL += (temp*0.0078125); temp *= X;
inputSampleL -= (temp*0.000244140625); temp *= X;
inputSampleL += (temp*0.000003814697265625); temp *= X;
inputSampleL -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
inputSampleR = fmin(fmax(inputSampleR,-2.032610446872596),2.032610446872596);
X = inputSampleR * inputSampleR;
temp = inputSampleR * X;
inputSampleR -= (temp*0.125); temp *= X;
inputSampleR += (temp*0.0078125); temp *= X;
inputSampleR -= (temp*0.000244140625); temp *= X;
inputSampleR += (temp*0.000003814697265625); temp *= X;
inputSampleR -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
if (outputGain < 1.0) {
inputSampleL *= outputGain;
inputSampleR *= outputGain;
}
//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,201 @@
/* ========================================
* VerbThic - VerbThic.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __VerbThic_H
#include "VerbThic.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new VerbThic(audioMaster);}
VerbThic::VerbThic(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.5;
B = 1.0;
C = 1.0;
D = 0.0;
E = 1.0;
for(int x = 0; x < d4A+2; x++) {a4AL[x] = 0.0; a4AR[x] = 0.0;}
for(int x = 0; x < d4B+2; x++) {a4BL[x] = 0.0; a4BR[x] = 0.0;}
for(int x = 0; x < d4C+2; x++) {a4CL[x] = 0.0; a4CR[x] = 0.0;}
for(int x = 0; x < d4D+2; x++) {a4DL[x] = 0.0; a4DR[x] = 0.0;}
for(int x = 0; x < d4E+2; x++) {a4EL[x] = 0.0; a4ER[x] = 0.0;}
for(int x = 0; x < d4F+2; x++) {a4FL[x] = 0.0; a4FR[x] = 0.0;}
for(int x = 0; x < d4G+2; x++) {a4GL[x] = 0.0; a4GR[x] = 0.0;}
for(int x = 0; x < d4H+2; x++) {a4HL[x] = 0.0; a4HR[x] = 0.0;}
for(int x = 0; x < d4I+2; x++) {a4IL[x] = 0.0; a4IR[x] = 0.0;}
for(int x = 0; x < d4J+2; x++) {a4JL[x] = 0.0; a4JR[x] = 0.0;}
for(int x = 0; x < d4K+2; x++) {a4KL[x] = 0.0; a4KR[x] = 0.0;}
for(int x = 0; x < d4L+2; x++) {a4LL[x] = 0.0; a4LR[x] = 0.0;}
for(int x = 0; x < d4M+2; x++) {a4ML[x] = 0.0; a4MR[x] = 0.0;}
for(int x = 0; x < d4N+2; x++) {a4NL[x] = 0.0; a4NR[x] = 0.0;}
for(int x = 0; x < d4O+2; x++) {a4OL[x] = 0.0; a4OR[x] = 0.0;}
for(int x = 0; x < d4P+2; x++) {a4PL[x] = 0.0; a4PR[x] = 0.0;}
c4AL = c4BL = c4CL = c4DL = c4EL = c4FL = c4GL = c4HL = 1;
c4IL = c4JL = c4KL = c4LL = c4ML = c4NL = c4OL = c4PL = 1;
c4AR = c4BR = c4CR = c4DR = c4ER = c4FR = c4GR = c4HR = 1;
c4IR = c4JR = c4KR = c4LR = c4MR = c4NR = c4OR = c4PR = 1;
f4AL = f4BL = f4CL = f4DL = 0.0;
f4DR = f4HR = f4LR = f4PR = 0.0;
for(int x = 0; x < d4A+2; x++) {b4AL[x] = 0.0; b4AR[x] = 0.0;}
for(int x = 0; x < d4B+2; x++) {b4BL[x] = 0.0; b4BR[x] = 0.0;}
for(int x = 0; x < d4C+2; x++) {b4CL[x] = 0.0; b4CR[x] = 0.0;}
for(int x = 0; x < d4D+2; x++) {b4DL[x] = 0.0; b4DR[x] = 0.0;}
for(int x = 0; x < d4E+2; x++) {b4EL[x] = 0.0; b4ER[x] = 0.0;}
for(int x = 0; x < d4F+2; x++) {b4FL[x] = 0.0; b4FR[x] = 0.0;}
for(int x = 0; x < d4G+2; x++) {b4GL[x] = 0.0; b4GR[x] = 0.0;}
for(int x = 0; x < d4H+2; x++) {b4HL[x] = 0.0; b4HR[x] = 0.0;}
for(int x = 0; x < d4I+2; x++) {b4IL[x] = 0.0; b4IR[x] = 0.0;}
for(int x = 0; x < d4J+2; x++) {b4JL[x] = 0.0; b4JR[x] = 0.0;}
for(int x = 0; x < d4K+2; x++) {b4KL[x] = 0.0; b4KR[x] = 0.0;}
for(int x = 0; x < d4L+2; x++) {b4LL[x] = 0.0; b4LR[x] = 0.0;}
for(int x = 0; x < d4M+2; x++) {b4ML[x] = 0.0; b4MR[x] = 0.0;}
for(int x = 0; x < d4N+2; x++) {b4NL[x] = 0.0; b4NR[x] = 0.0;}
for(int x = 0; x < d4O+2; x++) {b4OL[x] = 0.0; b4OR[x] = 0.0;}
for(int x = 0; x < d4P+2; x++) {b4PL[x] = 0.0; b4PR[x] = 0.0;}
g4AL = g4BL = g4CL = g4DL = 0.0;
g4DR = g4HR = g4LR = g4PR = 0.0;
for (int x = 0; x < bez_total; x++) {
bez[x] = 0.0;
bezF[x] = 0.0;
}
bez[bez_cycle] = 1.0;
bezF[bez_cycle] = 1.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
}
VerbThic::~VerbThic() {}
VstInt32 VerbThic::getVendorVersion () {return 1000;}
void VerbThic::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void VerbThic::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 VerbThic::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 VerbThic::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 VerbThic::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 VerbThic::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 VerbThic::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Replace", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Derez", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Filter", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Wider", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Dry/Wet", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void VerbThic::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 VerbThic::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 VerbThic::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool VerbThic::getEffectName(char* name) {
vst_strncpy(name, "VerbThic", kVstMaxProductStrLen); return true;
}
VstPlugCategory VerbThic::getPlugCategory() {return kPlugCategEffect;}
bool VerbThic::getProductString(char* text) {
vst_strncpy (text, "airwindows VerbThic", kVstMaxProductStrLen); return true;
}
bool VerbThic::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,165 @@
/* ========================================
* VerbThic - VerbThic.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __VerbThic_H
#define __VerbThic_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 = 'vthc'; //Change this to what the AU identity is!
const int d4A = 1439; const int d4B = 3; const int d4C = 259; const int d4D = 578;
const int d4E = 1562; const int d4F = 1152; const int d4G = 189; const int d4H = 3;
const int d4I = 9; const int d4J = 101; const int d4K = 34; const int d4L = 638;
const int d4M = 719; const int d4N = 1154; const int d4O = 38; const int d4P = 530; //1 to 108 ms, 358 seat club
#define FOURBYFOUR true // 358seat14393259x4 on 2025-11-09 VerbThic
class VerbThic :
public AudioEffectX
{
public:
VerbThic(audioMasterCallback audioMaster);
~VerbThic();
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;
float A;
float B;
float C;
float D;
float E;
double a4AL[d4A+5];
double a4BL[d4B+5];
double a4CL[d4C+5];
double a4DL[d4D+5];
double a4EL[d4E+5];
double a4FL[d4F+5];
double a4GL[d4G+5];
double a4HL[d4H+5];
double a4IL[d4I+5];
double a4JL[d4J+5];
double a4KL[d4K+5];
double a4LL[d4L+5];
double a4ML[d4M+5];
double a4NL[d4N+5];
double a4OL[d4O+5];
double a4PL[d4P+5];
double a4AR[d4A+5];
double a4BR[d4B+5];
double a4CR[d4C+5];
double a4DR[d4D+5];
double a4ER[d4E+5];
double a4FR[d4F+5];
double a4GR[d4G+5];
double a4HR[d4H+5];
double a4IR[d4I+5];
double a4JR[d4J+5];
double a4KR[d4K+5];
double a4LR[d4L+5];
double a4MR[d4M+5];
double a4NR[d4N+5];
double a4OR[d4O+5];
double a4PR[d4P+5];
int c4AL,c4BL,c4CL,c4DL,c4EL,c4FL,c4GL,c4HL;
int c4IL,c4JL,c4KL,c4LL,c4ML,c4NL,c4OL,c4PL;
int c4AR,c4BR,c4CR,c4DR,c4ER,c4FR,c4GR,c4HR;
int c4IR,c4JR,c4KR,c4LR,c4MR,c4NR,c4OR,c4PR;
double f4AL,f4BL,f4CL,f4DL,f4DR,f4HR,f4LR,f4PR;
//base stereo reverb
double b4AL[d4A+5];
double b4BL[d4B+5];
double b4CL[d4C+5];
double b4DL[d4D+5];
double b4EL[d4E+5];
double b4FL[d4F+5];
double b4GL[d4G+5];
double b4HL[d4H+5];
double b4IL[d4I+5];
double b4JL[d4J+5];
double b4KL[d4K+5];
double b4LL[d4L+5];
double b4ML[d4M+5];
double b4NL[d4N+5];
double b4OL[d4O+5];
double b4PL[d4P+5];
double b4AR[d4A+5];
double b4BR[d4B+5];
double b4CR[d4C+5];
double b4DR[d4D+5];
double b4ER[d4E+5];
double b4FR[d4F+5];
double b4GR[d4G+5];
double b4HR[d4H+5];
double b4IR[d4I+5];
double b4JR[d4J+5];
double b4KR[d4K+5];
double b4LR[d4L+5];
double b4MR[d4M+5];
double b4NR[d4N+5];
double b4OR[d4O+5];
double b4PR[d4P+5];
double g4AL,g4BL,g4CL,g4DL,g4DR,g4HR,g4LR,g4PR;
//changed letter is the dual mono, with rearranged grid
enum {
bez_AL,
bez_AR,
bez_BL,
bez_BR,
bez_CL,
bez_CR,
bez_SampL,
bez_SampR,
bez_cycle,
bez_total
}; //the new undersampling. bez signifies the bezier curve reconstruction
double bez[bez_total];
double bezF[bez_total];
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,718 @@
/* ========================================
* VerbThic - VerbThic.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __VerbThic_H
#include "VerbThic.h"
#endif
void VerbThic::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();
double reg4n = 0.03125+((1.0-pow(1.0-A,2.0))*0.03125);
double attenuate = 1.0 - (1.0-pow(1.0-A,2.0));
double derez = pow(B,2.0);
derez = fmin(fmax(derez/overallscale,0.0001),1.0);
int bezFraction = (int)(1.0/derez);
double bezTrim = (double)bezFraction/(bezFraction+1.0);
derez = 1.0 / bezFraction;
bezTrim = 1.0-(derez*bezTrim);
//the revision more accurately connects the bezier curves
double derezFreq = pow(C,2.0);
derezFreq = fmin(fmax(derezFreq/overallscale,0.0001),1.0);
int bezFreqFraction = (int)(1.0/derezFreq);
double bezFreqTrim = (double)bezFreqFraction/(bezFreqFraction+1.0);
derezFreq = 1.0 / bezFreqFraction;
bezFreqTrim = 1.0-(derezFreq*bezFreqTrim);
//the revision more accurately connects the bezier curves
double wider = D*2.0;
double wet = E;
while (--sampleFrames >= 0)
{
double inputSampleL = *in1;
double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double drySampleL = inputSampleL;
double drySampleR = inputSampleR;
bez[bez_cycle] += derez;
bez[bez_SampL] += (inputSampleL*attenuate*derez);
bez[bez_SampR] += (inputSampleR*attenuate*derez);
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
bez[bez_cycle] = 0.0;
double mainSampleL = bez[bez_SampL];
double dualmonoSampleL = bez[bez_SampR];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
//left verbs
a4AL[c4AL] = mainSampleL + (f4DR * reg4n);
a4BL[c4BL] = mainSampleL + (f4HR * reg4n);
a4CL[c4CL] = mainSampleL + (f4LR * reg4n);
a4DL[c4DL] = mainSampleL + (f4PR * reg4n);
b4AL[c4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[c4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[c4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[c4DL] = dualmonoSampleL + (g4DL * reg4n);
c4AL++; if (c4AL < 0 || c4AL > d4A) c4AL = 0;
c4BL++; if (c4BL < 0 || c4BL > d4B) c4BL = 0;
c4CL++; if (c4CL < 0 || c4CL > d4C) c4CL = 0;
c4DL++; if (c4DL < 0 || c4DL > d4D) c4DL = 0;
double hA = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double hB = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double hC = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double hD = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4EL[c4EL] = hA - (hB + hC + hD);
a4FL[c4FL] = hB - (hA + hC + hD);
a4GL[c4GL] = hC - (hA + hB + hD);
a4HL[c4HL] = hD - (hA + hB + hC);
hA = b4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
hB = b4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
hC = b4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
hD = b4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
b4EL[c4EL] = hA - (hB + hC + hD);
b4FL[c4FL] = hB - (hA + hC + hD);
b4GL[c4GL] = hC - (hA + hB + hD);
b4HL[c4HL] = hD - (hA + hB + hC);
c4EL++; if (c4EL < 0 || c4EL > d4E) c4EL = 0;
c4FL++; if (c4FL < 0 || c4FL > d4F) c4FL = 0;
c4GL++; if (c4GL < 0 || c4GL > d4G) c4GL = 0;
c4HL++; if (c4HL < 0 || c4HL > d4H) c4HL = 0;
hA = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4IL[c4IL] = hA - (hB + hC + hD);
a4JL[c4JL] = hB - (hA + hC + hD);
a4KL[c4KL] = hC - (hA + hB + hD);
a4LL[c4LL] = hD - (hA + hB + hC);
hA = b4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = b4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = b4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = b4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
b4IL[c4IL] = hA - (hB + hC + hD);
b4JL[c4JL] = hB - (hA + hC + hD);
b4KL[c4KL] = hC - (hA + hB + hD);
b4LL[c4LL] = hD - (hA + hB + hC);
c4IL++; if (c4IL < 0 || c4IL > d4I) c4IL = 0;
c4JL++; if (c4JL < 0 || c4JL > d4J) c4JL = 0;
c4KL++; if (c4KL < 0 || c4KL > d4K) c4KL = 0;
c4LL++; if (c4LL < 0 || c4LL > d4L) c4LL = 0;
hA = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4ML[c4ML] = hA - (hB + hC + hD);
a4NL[c4NL] = hB - (hA + hC + hD);
a4OL[c4OL] = hC - (hA + hB + hD);
a4PL[c4PL] = hD - (hA + hB + hC);
hA = b4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = b4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = b4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = b4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
b4ML[c4ML] = hA - (hB + hC + hD);
b4NL[c4NL] = hB - (hA + hC + hD);
b4OL[c4OL] = hC - (hA + hB + hD);
b4PL[c4PL] = hD - (hA + hB + hC);
c4ML++; if (c4ML < 0 || c4ML > d4M) c4ML = 0;
c4NL++; if (c4NL < 0 || c4NL > d4N) c4NL = 0;
c4OL++; if (c4OL < 0 || c4OL > d4O) c4OL = 0;
c4PL++; if (c4PL < 0 || c4PL > d4P) c4PL = 0;
hA = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
f4AL = hA - (hB + hC + hD);
f4BL = hB - (hA + hC + hD);
f4CL = hC - (hA + hB + hD);
f4DL = hD - (hA + hB + hC);//not actually crosschannel yet
mainSampleL = (hA + hB + hC + hD)*0.125;
hA = b4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = b4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = b4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = b4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
g4AL = hA - (hB + hC + hD);
g4BL = hB - (hA + hC + hD);
g4CL = hC - (hA + hB + hD);
g4DL = hD - (hA + hB + hC);
dualmonoSampleL = (hA + hB + hC + hD)*0.125;
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleR = bez[bez_SampL];
//right verbs
a4DR[c4DR] = mainSampleR + (f4AL * reg4n);
a4HR[c4HR] = mainSampleR + (f4BL * reg4n);
a4LR[c4LR] = mainSampleR + (f4CL * reg4n);
a4PR[c4PR] = mainSampleR + (f4DL * reg4n);
b4DR[c4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[c4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[c4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[c4PR] = dualmonoSampleR + (g4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
hA = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
a4CR[c4CR] = hA - (hB + hC + hD);
a4GR[c4GR] = hB - (hA + hC + hD);
a4KR[c4KR] = hC - (hA + hB + hD);
a4OR[c4OR] = hD - (hA + hB + hC);
hA = b4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = b4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = b4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = b4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
b4CR[c4CR] = hA - (hB + hC + hD);
b4GR[c4GR] = hB - (hA + hC + hD);
b4KR[c4KR] = hC - (hA + hB + hD);
b4OR[c4OR] = hD - (hA + hB + hC);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
hA = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
a4BR[c4BR] = hA - (hB + hC + hD);
a4FR[c4FR] = hB - (hA + hC + hD);
a4JR[c4JR] = hC - (hA + hB + hD);
a4NR[c4NR] = hD - (hA + hB + hC);
hA = b4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = b4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = b4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = b4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
b4BR[c4BR] = hA - (hB + hC + hD);
b4FR[c4FR] = hB - (hA + hC + hD);
b4JR[c4JR] = hC - (hA + hB + hD);
b4NR[c4NR] = hD - (hA + hB + hC);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
hA = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
a4AR[c4AR] = hA - (hB + hC + hD);
a4ER[c4ER] = hB - (hA + hC + hD);
a4IR[c4IR] = hC - (hA + hB + hD);
a4MR[c4MR] = hD - (hA + hB + hC);
hA = b4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = b4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = b4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = b4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
b4AR[c4AR] = hA - (hB + hC + hD);
b4ER[c4ER] = hB - (hA + hC + hD);
b4IR[c4IR] = hC - (hA + hB + hD);
b4MR[c4MR] = hD - (hA + hB + hC);
c4AR++; if (c4AR < 0 || c4AR > d4A) c4AR = 0;
c4ER++; if (c4ER < 0 || c4ER > d4E) c4ER = 0;
c4IR++; if (c4IR < 0 || c4IR > d4I) c4IR = 0;
c4MR++; if (c4MR < 0 || c4MR > d4M) c4MR = 0;
hA = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
f4DR = hA - (hB + hC + hD);
f4HR = hB - (hA + hC + hD);
f4LR = hC - (hA + hB + hD);
f4PR = hD - (hA + hB + hC);
mainSampleR = (hA + hB + hC + hD)*0.125;
hA = b4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = b4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = b4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = b4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
g4DR = hA - (hB + hC + hD);
g4HR = hB - (hA + hC + hD);
g4LR = hC - (hA + hB + hD);
g4PR = hD - (hA + hB + hC);
dualmonoSampleR = (hA + hB + hC + hD)*0.125;
//dual mono version is wider = 1.0 at the center
//with mainsample 0.0 and 2.0 (only at the edges)
//with mainsample out of phase when over 1.0
//couldn't re-do the arrays perfectly, so instead
//we keep exactly the same cross-matrix,
//but we flip the sides we're using for initial reverb.
//then, dualmono remains totally dualmono, and blend a bit in for wideness.
if (wider < 1.0) {
inputSampleL = (dualmonoSampleR*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleL*wider) + (mainSampleR*(1.0-wider));
} else {
inputSampleL = (dualmonoSampleR*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleL*(2.0-wider)) + (-mainSampleR*(wider-1.0));
}
inputSampleL = fmin(fmax(inputSampleL,-2.032610446872596),2.032610446872596);
long double X = inputSampleL * inputSampleL;
long double temp = inputSampleL * X;
inputSampleL -= (temp*0.125); temp *= X;
inputSampleL += (temp*0.0078125); temp *= X;
inputSampleL -= (temp*0.000244140625); temp *= X;
inputSampleL += (temp*0.000003814697265625); temp *= X;
inputSampleL -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
inputSampleR = fmin(fmax(inputSampleR,-2.032610446872596),2.032610446872596);
X = inputSampleR * inputSampleR;
temp = inputSampleR * X;
inputSampleR -= (temp*0.125); temp *= X;
inputSampleR += (temp*0.0078125); temp *= X;
inputSampleR -= (temp*0.000244140625); temp *= X;
inputSampleR += (temp*0.000003814697265625); temp *= X;
inputSampleR -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
bez[bez_CL] = bez[bez_BL];
bez[bez_BL] = bez[bez_AL];
bez[bez_AL] = inputSampleL;
bez[bez_SampL] = 0.0;
bez[bez_CR] = bez[bez_BR];
bez[bez_BR] = bez[bez_AR];
bez[bez_AR] = inputSampleR;
bez[bez_SampR] = 0.0;
}
double X = bez[bez_cycle]*bezTrim;
double CBL = (bez[bez_CL]*(1.0-X))+(bez[bez_BL]*X);
double CBR = (bez[bez_CR]*(1.0-X))+(bez[bez_BR]*X);
double BAL = (bez[bez_BL]*(1.0-X))+(bez[bez_AL]*X);
double BAR = (bez[bez_BR]*(1.0-X))+(bez[bez_AR]*X);
inputSampleL = (bez[bez_BL]+(CBL*(1.0-X))+(BAL*X))*-0.25;
inputSampleR = (bez[bez_BR]+(CBR*(1.0-X))+(BAR*X))*-0.25;
bezF[bez_cycle] += derezFreq;
bezF[bez_SampL] += (inputSampleL * derezFreq);
bezF[bez_SampR] += (inputSampleR * derezFreq);
if (bezF[bez_cycle] > 1.0) { //hit the end point and we do a filter sample
bezF[bez_cycle] = 0.0;
bezF[bez_CL] = bezF[bez_BL];
bezF[bez_BL] = bezF[bez_AL];
bezF[bez_AL] = bezF[bez_SampL];
bezF[bez_SampL] = 0.0;
bezF[bez_CR] = bezF[bez_BR];
bezF[bez_BR] = bezF[bez_AR];
bezF[bez_AR] = bezF[bez_SampR];
bezF[bez_SampR] = 0.0;
}
X = bezF[bez_cycle]*bezFreqTrim;
double CBLfreq = (bezF[bez_CL]*(1.0-X))+(bezF[bez_BL]*X);
double BALfreq = (bezF[bez_BL]*(1.0-X))+(bezF[bez_AL]*X);
inputSampleL = (bezF[bez_BL]+(CBLfreq*(1.0-X))+(BALfreq*X))*0.5;
double CBRfreq = (bezF[bez_CR]*(1.0-X))+(bezF[bez_BR]*X);
double BARfreq = (bezF[bez_BR]*(1.0-X))+(bezF[bez_AR]*X);
inputSampleR = (bezF[bez_BR]+(CBRfreq*(1.0-X))+(BARfreq*X))*0.5;
//filtering the reverb separately, after making it
inputSampleL = (inputSampleL * wet)+(drySampleL * (1.0-wet));
inputSampleR = (inputSampleR * wet)+(drySampleR * (1.0-wet));
//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 VerbThic::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
double reg4n = 0.03125+((1.0-pow(1.0-A,2.0))*0.03125);
double attenuate = 1.0 - (1.0-pow(1.0-A,2.0));
double derez = pow(B,2.0);
derez = fmin(fmax(derez/overallscale,0.0001),1.0);
int bezFraction = (int)(1.0/derez);
double bezTrim = (double)bezFraction/(bezFraction+1.0);
derez = 1.0 / bezFraction;
bezTrim = 1.0-(derez*bezTrim);
//the revision more accurately connects the bezier curves
double derezFreq = pow(C,2.0);
derezFreq = fmin(fmax(derezFreq/overallscale,0.0001),1.0);
int bezFreqFraction = (int)(1.0/derezFreq);
double bezFreqTrim = (double)bezFreqFraction/(bezFreqFraction+1.0);
derezFreq = 1.0 / bezFreqFraction;
bezFreqTrim = 1.0-(derezFreq*bezFreqTrim);
//the revision more accurately connects the bezier curves
double wider = D*2.0;
double wet = E;
while (--sampleFrames >= 0)
{
double inputSampleL = *in1;
double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double drySampleL = inputSampleL;
double drySampleR = inputSampleR;
bez[bez_cycle] += derez;
bez[bez_SampL] += (inputSampleL*attenuate*derez);
bez[bez_SampR] += (inputSampleR*attenuate*derez);
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
bez[bez_cycle] = 0.0;
double mainSampleL = bez[bez_SampL];
double dualmonoSampleL = bez[bez_SampR];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
//left verbs
a4AL[c4AL] = mainSampleL + (f4DR * reg4n);
a4BL[c4BL] = mainSampleL + (f4HR * reg4n);
a4CL[c4CL] = mainSampleL + (f4LR * reg4n);
a4DL[c4DL] = mainSampleL + (f4PR * reg4n);
b4AL[c4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[c4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[c4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[c4DL] = dualmonoSampleL + (g4DL * reg4n);
c4AL++; if (c4AL < 0 || c4AL > d4A) c4AL = 0;
c4BL++; if (c4BL < 0 || c4BL > d4B) c4BL = 0;
c4CL++; if (c4CL < 0 || c4CL > d4C) c4CL = 0;
c4DL++; if (c4DL < 0 || c4DL > d4D) c4DL = 0;
double hA = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double hB = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double hC = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double hD = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4EL[c4EL] = hA - (hB + hC + hD);
a4FL[c4FL] = hB - (hA + hC + hD);
a4GL[c4GL] = hC - (hA + hB + hD);
a4HL[c4HL] = hD - (hA + hB + hC);
hA = b4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
hB = b4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
hC = b4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
hD = b4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
b4EL[c4EL] = hA - (hB + hC + hD);
b4FL[c4FL] = hB - (hA + hC + hD);
b4GL[c4GL] = hC - (hA + hB + hD);
b4HL[c4HL] = hD - (hA + hB + hC);
c4EL++; if (c4EL < 0 || c4EL > d4E) c4EL = 0;
c4FL++; if (c4FL < 0 || c4FL > d4F) c4FL = 0;
c4GL++; if (c4GL < 0 || c4GL > d4G) c4GL = 0;
c4HL++; if (c4HL < 0 || c4HL > d4H) c4HL = 0;
hA = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4IL[c4IL] = hA - (hB + hC + hD);
a4JL[c4JL] = hB - (hA + hC + hD);
a4KL[c4KL] = hC - (hA + hB + hD);
a4LL[c4LL] = hD - (hA + hB + hC);
hA = b4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = b4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = b4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = b4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
b4IL[c4IL] = hA - (hB + hC + hD);
b4JL[c4JL] = hB - (hA + hC + hD);
b4KL[c4KL] = hC - (hA + hB + hD);
b4LL[c4LL] = hD - (hA + hB + hC);
c4IL++; if (c4IL < 0 || c4IL > d4I) c4IL = 0;
c4JL++; if (c4JL < 0 || c4JL > d4J) c4JL = 0;
c4KL++; if (c4KL < 0 || c4KL > d4K) c4KL = 0;
c4LL++; if (c4LL < 0 || c4LL > d4L) c4LL = 0;
hA = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4ML[c4ML] = hA - (hB + hC + hD);
a4NL[c4NL] = hB - (hA + hC + hD);
a4OL[c4OL] = hC - (hA + hB + hD);
a4PL[c4PL] = hD - (hA + hB + hC);
hA = b4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = b4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = b4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = b4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
b4ML[c4ML] = hA - (hB + hC + hD);
b4NL[c4NL] = hB - (hA + hC + hD);
b4OL[c4OL] = hC - (hA + hB + hD);
b4PL[c4PL] = hD - (hA + hB + hC);
c4ML++; if (c4ML < 0 || c4ML > d4M) c4ML = 0;
c4NL++; if (c4NL < 0 || c4NL > d4N) c4NL = 0;
c4OL++; if (c4OL < 0 || c4OL > d4O) c4OL = 0;
c4PL++; if (c4PL < 0 || c4PL > d4P) c4PL = 0;
hA = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
f4AL = hA - (hB + hC + hD);
f4BL = hB - (hA + hC + hD);
f4CL = hC - (hA + hB + hD);
f4DL = hD - (hA + hB + hC);//not actually crosschannel yet
mainSampleL = (hA + hB + hC + hD)*0.125;
hA = b4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = b4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = b4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = b4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
g4AL = hA - (hB + hC + hD);
g4BL = hB - (hA + hC + hD);
g4CL = hC - (hA + hB + hD);
g4DL = hD - (hA + hB + hC);
dualmonoSampleL = (hA + hB + hC + hD)*0.125;
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleR = bez[bez_SampL];
//right verbs
a4DR[c4DR] = mainSampleR + (f4AL * reg4n);
a4HR[c4HR] = mainSampleR + (f4BL * reg4n);
a4LR[c4LR] = mainSampleR + (f4CL * reg4n);
a4PR[c4PR] = mainSampleR + (f4DL * reg4n);
b4DR[c4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[c4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[c4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[c4PR] = dualmonoSampleR + (g4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
hA = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
a4CR[c4CR] = hA - (hB + hC + hD);
a4GR[c4GR] = hB - (hA + hC + hD);
a4KR[c4KR] = hC - (hA + hB + hD);
a4OR[c4OR] = hD - (hA + hB + hC);
hA = b4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = b4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = b4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = b4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
b4CR[c4CR] = hA - (hB + hC + hD);
b4GR[c4GR] = hB - (hA + hC + hD);
b4KR[c4KR] = hC - (hA + hB + hD);
b4OR[c4OR] = hD - (hA + hB + hC);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
hA = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
a4BR[c4BR] = hA - (hB + hC + hD);
a4FR[c4FR] = hB - (hA + hC + hD);
a4JR[c4JR] = hC - (hA + hB + hD);
a4NR[c4NR] = hD - (hA + hB + hC);
hA = b4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = b4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = b4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = b4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
b4BR[c4BR] = hA - (hB + hC + hD);
b4FR[c4FR] = hB - (hA + hC + hD);
b4JR[c4JR] = hC - (hA + hB + hD);
b4NR[c4NR] = hD - (hA + hB + hC);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
hA = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
a4AR[c4AR] = hA - (hB + hC + hD);
a4ER[c4ER] = hB - (hA + hC + hD);
a4IR[c4IR] = hC - (hA + hB + hD);
a4MR[c4MR] = hD - (hA + hB + hC);
hA = b4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = b4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = b4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = b4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
b4AR[c4AR] = hA - (hB + hC + hD);
b4ER[c4ER] = hB - (hA + hC + hD);
b4IR[c4IR] = hC - (hA + hB + hD);
b4MR[c4MR] = hD - (hA + hB + hC);
c4AR++; if (c4AR < 0 || c4AR > d4A) c4AR = 0;
c4ER++; if (c4ER < 0 || c4ER > d4E) c4ER = 0;
c4IR++; if (c4IR < 0 || c4IR > d4I) c4IR = 0;
c4MR++; if (c4MR < 0 || c4MR > d4M) c4MR = 0;
hA = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
f4DR = hA - (hB + hC + hD);
f4HR = hB - (hA + hC + hD);
f4LR = hC - (hA + hB + hD);
f4PR = hD - (hA + hB + hC);
mainSampleR = (hA + hB + hC + hD)*0.125;
hA = b4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = b4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = b4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = b4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
g4DR = hA - (hB + hC + hD);
g4HR = hB - (hA + hC + hD);
g4LR = hC - (hA + hB + hD);
g4PR = hD - (hA + hB + hC);
dualmonoSampleR = (hA + hB + hC + hD)*0.125;
//dual mono version is wider = 1.0 at the center
//with mainsample 0.0 and 2.0 (only at the edges)
//with mainsample out of phase when over 1.0
//couldn't re-do the arrays perfectly, so instead
//we keep exactly the same cross-matrix,
//but we flip the sides we're using for initial reverb.
//then, dualmono remains totally dualmono, and blend a bit in for wideness.
if (wider < 1.0) {
inputSampleL = (dualmonoSampleR*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleL*wider) + (mainSampleR*(1.0-wider));
} else {
inputSampleL = (dualmonoSampleR*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleL*(2.0-wider)) + (-mainSampleR*(wider-1.0));
}
inputSampleL = fmin(fmax(inputSampleL,-2.032610446872596),2.032610446872596);
long double X = inputSampleL * inputSampleL;
long double temp = inputSampleL * X;
inputSampleL -= (temp*0.125); temp *= X;
inputSampleL += (temp*0.0078125); temp *= X;
inputSampleL -= (temp*0.000244140625); temp *= X;
inputSampleL += (temp*0.000003814697265625); temp *= X;
inputSampleL -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
inputSampleR = fmin(fmax(inputSampleR,-2.032610446872596),2.032610446872596);
X = inputSampleR * inputSampleR;
temp = inputSampleR * X;
inputSampleR -= (temp*0.125); temp *= X;
inputSampleR += (temp*0.0078125); temp *= X;
inputSampleR -= (temp*0.000244140625); temp *= X;
inputSampleR += (temp*0.000003814697265625); temp *= X;
inputSampleR -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
bez[bez_CL] = bez[bez_BL];
bez[bez_BL] = bez[bez_AL];
bez[bez_AL] = inputSampleL;
bez[bez_SampL] = 0.0;
bez[bez_CR] = bez[bez_BR];
bez[bez_BR] = bez[bez_AR];
bez[bez_AR] = inputSampleR;
bez[bez_SampR] = 0.0;
}
double X = bez[bez_cycle]*bezTrim;
double CBL = (bez[bez_CL]*(1.0-X))+(bez[bez_BL]*X);
double CBR = (bez[bez_CR]*(1.0-X))+(bez[bez_BR]*X);
double BAL = (bez[bez_BL]*(1.0-X))+(bez[bez_AL]*X);
double BAR = (bez[bez_BR]*(1.0-X))+(bez[bez_AR]*X);
inputSampleL = (bez[bez_BL]+(CBL*(1.0-X))+(BAL*X))*-0.25;
inputSampleR = (bez[bez_BR]+(CBR*(1.0-X))+(BAR*X))*-0.25;
bezF[bez_cycle] += derezFreq;
bezF[bez_SampL] += (inputSampleL * derezFreq);
bezF[bez_SampR] += (inputSampleR * derezFreq);
if (bezF[bez_cycle] > 1.0) { //hit the end point and we do a filter sample
bezF[bez_cycle] = 0.0;
bezF[bez_CL] = bezF[bez_BL];
bezF[bez_BL] = bezF[bez_AL];
bezF[bez_AL] = bezF[bez_SampL];
bezF[bez_SampL] = 0.0;
bezF[bez_CR] = bezF[bez_BR];
bezF[bez_BR] = bezF[bez_AR];
bezF[bez_AR] = bezF[bez_SampR];
bezF[bez_SampR] = 0.0;
}
X = bezF[bez_cycle]*bezFreqTrim;
double CBLfreq = (bezF[bez_CL]*(1.0-X))+(bezF[bez_BL]*X);
double BALfreq = (bezF[bez_BL]*(1.0-X))+(bezF[bez_AL]*X);
inputSampleL = (bezF[bez_BL]+(CBLfreq*(1.0-X))+(BALfreq*X))*0.5;
double CBRfreq = (bezF[bez_CR]*(1.0-X))+(bezF[bez_BR]*X);
double BARfreq = (bezF[bez_BR]*(1.0-X))+(bezF[bez_AR]*X);
inputSampleR = (bezF[bez_BR]+(CBRfreq*(1.0-X))+(BARfreq*X))*0.5;
//filtering the reverb separately, after making it
inputSampleL = (inputSampleL * wet)+(drySampleL * (1.0-wet));
inputSampleR = (inputSampleR * wet)+(drySampleR * (1.0-wet));
//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

@ -52,298 +52,215 @@ void VerbTiny::processReplacing(float **inputs, float **outputs, VstInt32 sample
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
bez[bez_cycle] = 0.0;
double mainSampleL = bez[bez_SampL];
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleL = bez[bez_SampR];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
a4AL[c4AL] = mainSampleL + (f4AL * reg4n);
a4BL[c4BL] = mainSampleL + (f4BL * reg4n);
a4CL[c4CL] = mainSampleL + (f4CL * reg4n);
a4DL[c4DL] = mainSampleL + (f4DL * reg4n);
//left verbs
a4AL[c4AL] = mainSampleL + (f4DR * reg4n);
a4BL[c4BL] = mainSampleL + (f4HR * reg4n);
a4CL[c4CL] = mainSampleL + (f4LR * reg4n);
a4DL[c4DL] = mainSampleL + (f4PR * reg4n);
b4AL[c4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[c4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[c4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[c4DL] = dualmonoSampleL + (g4DL * reg4n);
c4AL++; if (c4AL < 0 || c4AL > d4A) c4AL = 0;
c4BL++; if (c4BL < 0 || c4BL > d4B) c4BL = 0;
c4CL++; if (c4CL < 0 || c4CL > d4C) c4CL = 0;
c4DL++; if (c4DL < 0 || c4DL > d4D) c4DL = 0;
double o4AL = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double o4BL = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double o4CL = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double o4DL = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4DR[c4DR] = mainSampleR + (f4DR * reg4n);
a4HR[c4HR] = mainSampleR + (f4HR * reg4n);
a4LR[c4LR] = mainSampleR + (f4LR * reg4n);
a4PR[c4PR] = mainSampleR + (f4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
double o4DR = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
double o4HR = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
double o4LR = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
double o4PR = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
//-------- one
a4EL[c4EL] = o4AL - (o4BL + o4CL + o4DL);
a4FL[c4FL] = o4BL - (o4AL + o4CL + o4DL);
a4GL[c4GL] = o4CL - (o4AL + o4BL + o4DL);
a4HL[c4HL] = o4DL - (o4AL + o4BL + o4CL);
double hA = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double hB = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double hC = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double hD = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4EL[c4EL] = hA - (hB + hC + hD);
a4FL[c4FL] = hB - (hA + hC + hD);
a4GL[c4GL] = hC - (hA + hB + hD);
a4HL[c4HL] = hD - (hA + hB + hC);
hA = b4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
hB = b4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
hC = b4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
hD = b4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
b4EL[c4EL] = hA - (hB + hC + hD);
b4FL[c4FL] = hB - (hA + hC + hD);
b4GL[c4GL] = hC - (hA + hB + hD);
b4HL[c4HL] = hD - (hA + hB + hC);
c4EL++; if (c4EL < 0 || c4EL > d4E) c4EL = 0;
c4FL++; if (c4FL < 0 || c4FL > d4F) c4FL = 0;
c4GL++; if (c4GL < 0 || c4GL > d4G) c4GL = 0;
c4HL++; if (c4HL < 0 || c4HL > d4H) c4HL = 0;
double o4EL = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
double o4FL = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
double o4GL = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
double o4HL = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4CR[c4CR] = o4DR - (o4HR + o4LR + o4PR);
a4GR[c4GR] = o4HR - (o4DR + o4LR + o4PR);
a4KR[c4KR] = o4LR - (o4DR + o4HR + o4PR);
a4OR[c4OR] = o4PR - (o4DR + o4HR + o4LR);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
double o4CR = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
double o4GR = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
double o4KR = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
double o4OR = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
//-------- two
a4IL[c4IL] = o4EL - (o4FL + o4GL + o4HL);
a4JL[c4JL] = o4FL - (o4EL + o4GL + o4HL);
a4KL[c4KL] = o4GL - (o4EL + o4FL + o4HL);
a4LL[c4LL] = o4HL - (o4EL + o4FL + o4GL);
hA = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4IL[c4IL] = hA - (hB + hC + hD);
a4JL[c4JL] = hB - (hA + hC + hD);
a4KL[c4KL] = hC - (hA + hB + hD);
a4LL[c4LL] = hD - (hA + hB + hC);
hA = b4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = b4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = b4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = b4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
b4IL[c4IL] = hA - (hB + hC + hD);
b4JL[c4JL] = hB - (hA + hC + hD);
b4KL[c4KL] = hC - (hA + hB + hD);
b4LL[c4LL] = hD - (hA + hB + hC);
c4IL++; if (c4IL < 0 || c4IL > d4I) c4IL = 0;
c4JL++; if (c4JL < 0 || c4JL > d4J) c4JL = 0;
c4KL++; if (c4KL < 0 || c4KL > d4K) c4KL = 0;
c4LL++; if (c4LL < 0 || c4LL > d4L) c4LL = 0;
double o4IL = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
double o4JL = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
double o4KL = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
double o4LL = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4BR[c4BR] = o4CR - (o4GR + o4KR + o4OR);
a4FR[c4FR] = o4GR - (o4CR + o4KR + o4OR);
a4JR[c4JR] = o4KR - (o4CR + o4GR + o4OR);
a4NR[c4NR] = o4OR - (o4CR + o4GR + o4KR);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
double o4BR = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
double o4FR = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
double o4JR = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
double o4NR = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
//-------- three
a4ML[c4ML] = o4IL - (o4JL + o4KL + o4LL);
a4NL[c4NL] = o4JL - (o4IL + o4KL + o4LL);
a4OL[c4OL] = o4KL - (o4IL + o4JL + o4LL);
a4PL[c4PL] = o4LL - (o4IL + o4JL + o4KL);
hA = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4ML[c4ML] = hA - (hB + hC + hD);
a4NL[c4NL] = hB - (hA + hC + hD);
a4OL[c4OL] = hC - (hA + hB + hD);
a4PL[c4PL] = hD - (hA + hB + hC);
hA = b4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = b4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = b4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = b4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
b4ML[c4ML] = hA - (hB + hC + hD);
b4NL[c4NL] = hB - (hA + hC + hD);
b4OL[c4OL] = hC - (hA + hB + hD);
b4PL[c4PL] = hD - (hA + hB + hC);
c4ML++; if (c4ML < 0 || c4ML > d4M) c4ML = 0;
c4NL++; if (c4NL < 0 || c4NL > d4N) c4NL = 0;
c4OL++; if (c4OL < 0 || c4OL > d4O) c4OL = 0;
c4PL++; if (c4PL < 0 || c4PL > d4P) c4PL = 0;
double o4ML = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
double o4NL = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
double o4OL = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
double o4PL = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
hA = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
f4AL = hA - (hB + hC + hD);
f4BL = hB - (hA + hC + hD);
f4CL = hC - (hA + hB + hD);
f4DL = hD - (hA + hB + hC);//not actually crosschannel yet
mainSampleL = (hA + hB + hC + hD)*0.125;
a4AR[c4AR] = o4BR - (o4FR + o4JR + o4NR);
a4ER[c4ER] = o4FR - (o4BR + o4JR + o4NR);
a4IR[c4IR] = o4JR - (o4BR + o4FR + o4NR);
a4MR[c4MR] = o4NR - (o4BR + o4FR + o4JR);
hA = b4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = b4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = b4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = b4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
g4AL = hA - (hB + hC + hD);
g4BL = hB - (hA + hC + hD);
g4CL = hC - (hA + hB + hD);
g4DL = hD - (hA + hB + hC);
dualmonoSampleL = (hA + hB + hC + hD)*0.125;
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleR = bez[bez_SampL];
//right verbs
a4DR[c4DR] = mainSampleR + (f4AL * reg4n);
a4HR[c4HR] = mainSampleR + (f4BL * reg4n);
a4LR[c4LR] = mainSampleR + (f4CL * reg4n);
a4PR[c4PR] = mainSampleR + (f4DL * reg4n);
b4DR[c4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[c4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[c4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[c4PR] = dualmonoSampleR + (g4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
hA = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
a4CR[c4CR] = hA - (hB + hC + hD);
a4GR[c4GR] = hB - (hA + hC + hD);
a4KR[c4KR] = hC - (hA + hB + hD);
a4OR[c4OR] = hD - (hA + hB + hC);
hA = b4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = b4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = b4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = b4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
b4CR[c4CR] = hA - (hB + hC + hD);
b4GR[c4GR] = hB - (hA + hC + hD);
b4KR[c4KR] = hC - (hA + hB + hD);
b4OR[c4OR] = hD - (hA + hB + hC);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
hA = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
a4BR[c4BR] = hA - (hB + hC + hD);
a4FR[c4FR] = hB - (hA + hC + hD);
a4JR[c4JR] = hC - (hA + hB + hD);
a4NR[c4NR] = hD - (hA + hB + hC);
hA = b4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = b4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = b4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = b4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
b4BR[c4BR] = hA - (hB + hC + hD);
b4FR[c4FR] = hB - (hA + hC + hD);
b4JR[c4JR] = hC - (hA + hB + hD);
b4NR[c4NR] = hD - (hA + hB + hC);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
hA = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
a4AR[c4AR] = hA - (hB + hC + hD);
a4ER[c4ER] = hB - (hA + hC + hD);
a4IR[c4IR] = hC - (hA + hB + hD);
a4MR[c4MR] = hD - (hA + hB + hC);
hA = b4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = b4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = b4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = b4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
b4AR[c4AR] = hA - (hB + hC + hD);
b4ER[c4ER] = hB - (hA + hC + hD);
b4IR[c4IR] = hC - (hA + hB + hD);
b4MR[c4MR] = hD - (hA + hB + hC);
c4AR++; if (c4AR < 0 || c4AR > d4A) c4AR = 0;
c4ER++; if (c4ER < 0 || c4ER > d4E) c4ER = 0;
c4IR++; if (c4IR < 0 || c4IR > d4I) c4IR = 0;
c4MR++; if (c4MR < 0 || c4MR > d4M) c4MR = 0;
double o4AR = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
double o4ER = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
double o4IR = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
double o4MR = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
hA = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
f4DR = hA - (hB + hC + hD);
f4HR = hB - (hA + hC + hD);
f4LR = hC - (hA + hB + hD);
f4PR = hD - (hA + hB + hC);
mainSampleR = (hA + hB + hC + hD)*0.125;
//-------- four
f4AL = o4AR - (o4ER + o4IR + o4MR);
f4BL = o4ER - (o4AR + o4IR + o4MR);
f4CL = o4IR - (o4AR + o4ER + o4MR);
f4DL = o4MR - (o4AR + o4ER + o4IR);
f4DR = o4ML - (o4NL + o4OL + o4PL);
f4HR = o4NL - (o4ML + o4OL + o4PL);
f4LR = o4OL - (o4ML + o4NL + o4PL);
f4PR = o4PL - (o4ML + o4NL + o4OL);
mainSampleL = (o4ML + o4NL + o4OL + o4PL)*0.125;
mainSampleR = (o4AR + o4ER + o4IR + o4MR)*0.125;
//we still have an untouched inputsample, turn it into dual mono
//won't need to redeclare any of the o4 temp variables, just re-use
double dualmonoSampleL = bez[bez_SampR];
double dualmonoSampleR = bez[bez_SampL];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
b4AL[e4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[e4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[e4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[e4DL] = dualmonoSampleL + (g4DL * reg4n);
e4AL++; if (e4AL < 0 || e4AL > d4A) e4AL = 0;
e4BL++; if (e4BL < 0 || e4BL > d4B) e4BL = 0;
e4CL++; if (e4CL < 0 || e4CL > d4C) e4CL = 0;
e4DL++; if (e4DL < 0 || e4DL > d4D) e4DL = 0;
o4AL = b4AL[e4AL-((e4AL > d4A)?d4A+1:0)];
o4BL = b4BL[e4BL-((e4BL > d4B)?d4B+1:0)];
o4CL = b4CL[e4CL-((e4CL > d4C)?d4C+1:0)];
o4DL = b4DL[e4DL-((e4DL > d4D)?d4D+1:0)];
b4DR[e4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[e4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[e4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[e4PR] = dualmonoSampleR + (g4PR * reg4n);
e4DR++; if (e4DR < 0 || e4DR > d4D) e4DR = 0;
e4HR++; if (e4HR < 0 || e4HR > d4H) e4HR = 0;
e4LR++; if (e4LR < 0 || e4LR > d4L) e4LR = 0;
e4PR++; if (e4PR < 0 || e4PR > d4P) e4PR = 0;
o4DR = b4DR[e4DR-((e4DR > d4D)?d4D+1:0)];
o4HR = b4HR[e4HR-((e4HR > d4H)?d4H+1:0)];
o4LR = b4LR[e4LR-((e4LR > d4L)?d4L+1:0)];
o4PR = b4PR[e4PR-((e4PR > d4P)?d4P+1:0)];
//-------- one
b4EL[e4EL] = o4AL - (o4BL + o4CL + o4DL);
b4FL[e4FL] = o4BL - (o4AL + o4CL + o4DL);
b4GL[e4GL] = o4CL - (o4AL + o4BL + o4DL);
b4HL[e4HL] = o4DL - (o4AL + o4BL + o4CL);
e4EL++; if (e4EL < 0 || e4EL > d4E) e4EL = 0;
e4FL++; if (e4FL < 0 || e4FL > d4F) e4FL = 0;
e4GL++; if (e4GL < 0 || e4GL > d4G) e4GL = 0;
e4HL++; if (e4HL < 0 || e4HL > d4H) e4HL = 0;
o4EL = b4EL[e4EL-((e4EL > d4E)?d4E+1:0)];
o4FL = b4FL[e4FL-((e4FL > d4F)?d4F+1:0)];
o4GL = b4GL[e4GL-((e4GL > d4G)?d4G+1:0)];
o4HL = b4HL[e4HL-((e4HL > d4H)?d4H+1:0)];
b4CR[e4CR] = o4DR - (o4HR + o4LR + o4PR);
b4GR[e4GR] = o4HR - (o4DR + o4LR + o4PR);
b4KR[e4KR] = o4LR - (o4DR + o4HR + o4PR);
b4OR[e4OR] = o4PR - (o4DR + o4HR + o4LR);
e4CR++; if (e4CR < 0 || e4CR > d4C) e4CR = 0;
e4GR++; if (e4GR < 0 || e4GR > d4G) e4GR = 0;
e4KR++; if (e4KR < 0 || e4KR > d4K) e4KR = 0;
e4OR++; if (e4OR < 0 || e4OR > d4O) e4OR = 0;
o4CR = b4CR[e4CR-((e4CR > d4C)?d4C+1:0)];
o4GR = b4GR[e4GR-((e4GR > d4G)?d4G+1:0)];
o4KR = b4KR[e4KR-((e4KR > d4K)?d4K+1:0)];
o4OR = b4OR[e4OR-((e4OR > d4O)?d4O+1:0)];
//-------- two
b4IL[e4IL] = o4EL - (o4FL + o4GL + o4HL);
b4JL[e4JL] = o4FL - (o4EL + o4GL + o4HL);
b4KL[e4KL] = o4GL - (o4EL + o4FL + o4HL);
b4LL[e4LL] = o4HL - (o4EL + o4FL + o4GL);
e4IL++; if (e4IL < 0 || e4IL > d4I) e4IL = 0;
e4JL++; if (e4JL < 0 || e4JL > d4J) e4JL = 0;
e4KL++; if (e4KL < 0 || e4KL > d4K) e4KL = 0;
e4LL++; if (e4LL < 0 || e4LL > d4L) e4LL = 0;
o4IL = b4IL[e4IL-((e4IL > d4I)?d4I+1:0)];
o4JL = b4JL[e4JL-((e4JL > d4J)?d4J+1:0)];
o4KL = b4KL[e4KL-((e4KL > d4K)?d4K+1:0)];
o4LL = b4LL[e4LL-((e4LL > d4L)?d4L+1:0)];
b4BR[e4BR] = o4CR - (o4GR + o4KR + o4OR);
b4FR[e4FR] = o4GR - (o4CR + o4KR + o4OR);
b4JR[e4JR] = o4KR - (o4CR + o4GR + o4OR);
b4NR[e4NR] = o4OR - (o4CR + o4GR + o4KR);
e4BR++; if (e4BR < 0 || e4BR > d4B) e4BR = 0;
e4FR++; if (e4FR < 0 || e4FR > d4F) e4FR = 0;
e4JR++; if (e4JR < 0 || e4JR > d4J) e4JR = 0;
e4NR++; if (e4NR < 0 || e4NR > d4N) e4NR = 0;
o4BR = b4BR[e4BR-((e4BR > d4B)?d4B+1:0)];
o4FR = b4FR[e4FR-((e4FR > d4F)?d4F+1:0)];
o4JR = b4JR[e4JR-((e4JR > d4J)?d4J+1:0)];
o4NR = b4NR[e4NR-((e4NR > d4N)?d4N+1:0)];
//-------- three
b4ML[e4ML] = o4IL - (o4JL + o4KL + o4LL);
b4NL[e4NL] = o4JL - (o4IL + o4KL + o4LL);
b4OL[e4OL] = o4KL - (o4IL + o4JL + o4LL);
b4PL[e4PL] = o4LL - (o4IL + o4JL + o4KL);
e4ML++; if (e4ML < 0 || e4ML > d4M) e4ML = 0;
e4NL++; if (e4NL < 0 || e4NL > d4N) e4NL = 0;
e4OL++; if (e4OL < 0 || e4OL > d4O) e4OL = 0;
e4PL++; if (e4PL < 0 || e4PL > d4P) e4PL = 0;
o4ML = b4ML[e4ML-((e4ML > d4M)?d4M+1:0)];
o4NL = b4NL[e4NL-((e4NL > d4N)?d4N+1:0)];
o4OL = b4OL[e4OL-((e4OL > d4O)?d4O+1:0)];
o4PL = b4PL[e4PL-((e4PL > d4P)?d4P+1:0)];
b4AR[e4AR] = o4BR - (o4FR + o4JR + o4NR);
b4ER[e4ER] = o4FR - (o4BR + o4JR + o4NR);
b4IR[e4IR] = o4JR - (o4BR + o4FR + o4NR);
b4MR[e4MR] = o4NR - (o4BR + o4FR + o4JR);
e4AR++; if (e4AR < 0 || e4AR > d4A) e4AR = 0;
e4ER++; if (e4ER < 0 || e4ER > d4E) e4ER = 0;
e4IR++; if (e4IR < 0 || e4IR > d4I) e4IR = 0;
e4MR++; if (e4MR < 0 || e4MR > d4M) e4MR = 0;
o4AR = b4AR[e4AR-((e4AR > d4A)?d4A+1:0)];
o4ER = b4ER[e4ER-((e4ER > d4E)?d4E+1:0)];
o4IR = b4IR[e4IR-((e4IR > d4I)?d4I+1:0)];
o4MR = b4MR[e4MR-((e4MR > d4M)?d4M+1:0)];
//-------- four
g4DR = o4AR - (o4ER + o4IR + o4MR);
g4HR = o4ER - (o4AR + o4IR + o4MR);
g4LR = o4IR - (o4AR + o4ER + o4MR);
g4PR = o4MR - (o4AR + o4ER + o4IR);
g4AL = o4ML - (o4NL + o4OL + o4PL);
g4BL = o4NL - (o4ML + o4OL + o4PL);
g4CL = o4OL - (o4ML + o4NL + o4PL);
g4DL = o4PL - (o4ML + o4NL + o4OL);
dualmonoSampleR = (o4ML + o4NL + o4OL + o4PL)*0.125;
dualmonoSampleL = (o4AR + o4ER + o4IR + o4MR)*0.125;
hA = b4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = b4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = b4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = b4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
g4DR = hA - (hB + hC + hD);
g4HR = hB - (hA + hC + hD);
g4LR = hC - (hA + hB + hD);
g4PR = hD - (hA + hB + hC);
dualmonoSampleR = (hA + hB + hC + hD)*0.125;
//dual mono version is wider = 1.0 at the center
//with mainsample 0.0 and 2.0 (only at the edges)
//with mainsample out of phase when over 1.0
@ -353,11 +270,11 @@ void VerbTiny::processReplacing(float **inputs, float **outputs, VstInt32 sample
//then, dualmono remains totally dualmono, and blend a bit in for wideness.
if (wider < 1.0) {
inputSampleL = (dualmonoSampleL*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleR*wider) + (mainSampleR*(1.0-wider));
inputSampleL = (dualmonoSampleR*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleL*wider) + (mainSampleR*(1.0-wider));
} else {
inputSampleL = (dualmonoSampleL*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleR*(2.0-wider)) + (-mainSampleR*(wider-1.0));
inputSampleL = (dualmonoSampleR*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleL*(2.0-wider)) + (-mainSampleR*(wider-1.0));
}
bez[bez_CL] = bez[bez_BL];
@ -468,298 +385,215 @@ void VerbTiny::processDoubleReplacing(double **inputs, double **outputs, VstInt3
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
bez[bez_cycle] = 0.0;
double mainSampleL = bez[bez_SampL];
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleL = bez[bez_SampR];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
a4AL[c4AL] = mainSampleL + (f4AL * reg4n);
a4BL[c4BL] = mainSampleL + (f4BL * reg4n);
a4CL[c4CL] = mainSampleL + (f4CL * reg4n);
a4DL[c4DL] = mainSampleL + (f4DL * reg4n);
//left verbs
a4AL[c4AL] = mainSampleL + (f4DR * reg4n);
a4BL[c4BL] = mainSampleL + (f4HR * reg4n);
a4CL[c4CL] = mainSampleL + (f4LR * reg4n);
a4DL[c4DL] = mainSampleL + (f4PR * reg4n);
b4AL[c4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[c4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[c4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[c4DL] = dualmonoSampleL + (g4DL * reg4n);
c4AL++; if (c4AL < 0 || c4AL > d4A) c4AL = 0;
c4BL++; if (c4BL < 0 || c4BL > d4B) c4BL = 0;
c4CL++; if (c4CL < 0 || c4CL > d4C) c4CL = 0;
c4DL++; if (c4DL < 0 || c4DL > d4D) c4DL = 0;
double o4AL = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double o4BL = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double o4CL = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double o4DL = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4DR[c4DR] = mainSampleR + (f4DR * reg4n);
a4HR[c4HR] = mainSampleR + (f4HR * reg4n);
a4LR[c4LR] = mainSampleR + (f4LR * reg4n);
a4PR[c4PR] = mainSampleR + (f4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
double o4DR = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
double o4HR = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
double o4LR = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
double o4PR = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
//-------- one
a4EL[c4EL] = o4AL - (o4BL + o4CL + o4DL);
a4FL[c4FL] = o4BL - (o4AL + o4CL + o4DL);
a4GL[c4GL] = o4CL - (o4AL + o4BL + o4DL);
a4HL[c4HL] = o4DL - (o4AL + o4BL + o4CL);
double hA = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double hB = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double hC = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double hD = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4EL[c4EL] = hA - (hB + hC + hD);
a4FL[c4FL] = hB - (hA + hC + hD);
a4GL[c4GL] = hC - (hA + hB + hD);
a4HL[c4HL] = hD - (hA + hB + hC);
hA = b4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
hB = b4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
hC = b4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
hD = b4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
b4EL[c4EL] = hA - (hB + hC + hD);
b4FL[c4FL] = hB - (hA + hC + hD);
b4GL[c4GL] = hC - (hA + hB + hD);
b4HL[c4HL] = hD - (hA + hB + hC);
c4EL++; if (c4EL < 0 || c4EL > d4E) c4EL = 0;
c4FL++; if (c4FL < 0 || c4FL > d4F) c4FL = 0;
c4GL++; if (c4GL < 0 || c4GL > d4G) c4GL = 0;
c4HL++; if (c4HL < 0 || c4HL > d4H) c4HL = 0;
double o4EL = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
double o4FL = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
double o4GL = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
double o4HL = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4CR[c4CR] = o4DR - (o4HR + o4LR + o4PR);
a4GR[c4GR] = o4HR - (o4DR + o4LR + o4PR);
a4KR[c4KR] = o4LR - (o4DR + o4HR + o4PR);
a4OR[c4OR] = o4PR - (o4DR + o4HR + o4LR);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
double o4CR = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
double o4GR = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
double o4KR = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
double o4OR = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
//-------- two
a4IL[c4IL] = o4EL - (o4FL + o4GL + o4HL);
a4JL[c4JL] = o4FL - (o4EL + o4GL + o4HL);
a4KL[c4KL] = o4GL - (o4EL + o4FL + o4HL);
a4LL[c4LL] = o4HL - (o4EL + o4FL + o4GL);
hA = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4IL[c4IL] = hA - (hB + hC + hD);
a4JL[c4JL] = hB - (hA + hC + hD);
a4KL[c4KL] = hC - (hA + hB + hD);
a4LL[c4LL] = hD - (hA + hB + hC);
hA = b4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = b4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = b4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = b4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
b4IL[c4IL] = hA - (hB + hC + hD);
b4JL[c4JL] = hB - (hA + hC + hD);
b4KL[c4KL] = hC - (hA + hB + hD);
b4LL[c4LL] = hD - (hA + hB + hC);
c4IL++; if (c4IL < 0 || c4IL > d4I) c4IL = 0;
c4JL++; if (c4JL < 0 || c4JL > d4J) c4JL = 0;
c4KL++; if (c4KL < 0 || c4KL > d4K) c4KL = 0;
c4LL++; if (c4LL < 0 || c4LL > d4L) c4LL = 0;
double o4IL = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
double o4JL = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
double o4KL = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
double o4LL = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4BR[c4BR] = o4CR - (o4GR + o4KR + o4OR);
a4FR[c4FR] = o4GR - (o4CR + o4KR + o4OR);
a4JR[c4JR] = o4KR - (o4CR + o4GR + o4OR);
a4NR[c4NR] = o4OR - (o4CR + o4GR + o4KR);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
double o4BR = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
double o4FR = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
double o4JR = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
double o4NR = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
//-------- three
a4ML[c4ML] = o4IL - (o4JL + o4KL + o4LL);
a4NL[c4NL] = o4JL - (o4IL + o4KL + o4LL);
a4OL[c4OL] = o4KL - (o4IL + o4JL + o4LL);
a4PL[c4PL] = o4LL - (o4IL + o4JL + o4KL);
hA = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4ML[c4ML] = hA - (hB + hC + hD);
a4NL[c4NL] = hB - (hA + hC + hD);
a4OL[c4OL] = hC - (hA + hB + hD);
a4PL[c4PL] = hD - (hA + hB + hC);
hA = b4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = b4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = b4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = b4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
b4ML[c4ML] = hA - (hB + hC + hD);
b4NL[c4NL] = hB - (hA + hC + hD);
b4OL[c4OL] = hC - (hA + hB + hD);
b4PL[c4PL] = hD - (hA + hB + hC);
c4ML++; if (c4ML < 0 || c4ML > d4M) c4ML = 0;
c4NL++; if (c4NL < 0 || c4NL > d4N) c4NL = 0;
c4OL++; if (c4OL < 0 || c4OL > d4O) c4OL = 0;
c4PL++; if (c4PL < 0 || c4PL > d4P) c4PL = 0;
double o4ML = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
double o4NL = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
double o4OL = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
double o4PL = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
hA = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
f4AL = hA - (hB + hC + hD);
f4BL = hB - (hA + hC + hD);
f4CL = hC - (hA + hB + hD);
f4DL = hD - (hA + hB + hC);//not actually crosschannel yet
mainSampleL = (hA + hB + hC + hD)*0.125;
a4AR[c4AR] = o4BR - (o4FR + o4JR + o4NR);
a4ER[c4ER] = o4FR - (o4BR + o4JR + o4NR);
a4IR[c4IR] = o4JR - (o4BR + o4FR + o4NR);
a4MR[c4MR] = o4NR - (o4BR + o4FR + o4JR);
hA = b4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = b4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = b4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = b4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
g4AL = hA - (hB + hC + hD);
g4BL = hB - (hA + hC + hD);
g4CL = hC - (hA + hB + hD);
g4DL = hD - (hA + hB + hC);
dualmonoSampleL = (hA + hB + hC + hD)*0.125;
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleR = bez[bez_SampL];
//right verbs
a4DR[c4DR] = mainSampleR + (f4AL * reg4n);
a4HR[c4HR] = mainSampleR + (f4BL * reg4n);
a4LR[c4LR] = mainSampleR + (f4CL * reg4n);
a4PR[c4PR] = mainSampleR + (f4DL * reg4n);
b4DR[c4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[c4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[c4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[c4PR] = dualmonoSampleR + (g4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
hA = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
a4CR[c4CR] = hA - (hB + hC + hD);
a4GR[c4GR] = hB - (hA + hC + hD);
a4KR[c4KR] = hC - (hA + hB + hD);
a4OR[c4OR] = hD - (hA + hB + hC);
hA = b4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = b4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = b4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = b4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
b4CR[c4CR] = hA - (hB + hC + hD);
b4GR[c4GR] = hB - (hA + hC + hD);
b4KR[c4KR] = hC - (hA + hB + hD);
b4OR[c4OR] = hD - (hA + hB + hC);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
hA = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
a4BR[c4BR] = hA - (hB + hC + hD);
a4FR[c4FR] = hB - (hA + hC + hD);
a4JR[c4JR] = hC - (hA + hB + hD);
a4NR[c4NR] = hD - (hA + hB + hC);
hA = b4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = b4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = b4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = b4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
b4BR[c4BR] = hA - (hB + hC + hD);
b4FR[c4FR] = hB - (hA + hC + hD);
b4JR[c4JR] = hC - (hA + hB + hD);
b4NR[c4NR] = hD - (hA + hB + hC);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
hA = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
a4AR[c4AR] = hA - (hB + hC + hD);
a4ER[c4ER] = hB - (hA + hC + hD);
a4IR[c4IR] = hC - (hA + hB + hD);
a4MR[c4MR] = hD - (hA + hB + hC);
hA = b4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = b4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = b4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = b4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
b4AR[c4AR] = hA - (hB + hC + hD);
b4ER[c4ER] = hB - (hA + hC + hD);
b4IR[c4IR] = hC - (hA + hB + hD);
b4MR[c4MR] = hD - (hA + hB + hC);
c4AR++; if (c4AR < 0 || c4AR > d4A) c4AR = 0;
c4ER++; if (c4ER < 0 || c4ER > d4E) c4ER = 0;
c4IR++; if (c4IR < 0 || c4IR > d4I) c4IR = 0;
c4MR++; if (c4MR < 0 || c4MR > d4M) c4MR = 0;
double o4AR = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
double o4ER = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
double o4IR = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
double o4MR = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
hA = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
f4DR = hA - (hB + hC + hD);
f4HR = hB - (hA + hC + hD);
f4LR = hC - (hA + hB + hD);
f4PR = hD - (hA + hB + hC);
mainSampleR = (hA + hB + hC + hD)*0.125;
//-------- four
f4AL = o4AR - (o4ER + o4IR + o4MR);
f4BL = o4ER - (o4AR + o4IR + o4MR);
f4CL = o4IR - (o4AR + o4ER + o4MR);
f4DL = o4MR - (o4AR + o4ER + o4IR);
f4DR = o4ML - (o4NL + o4OL + o4PL);
f4HR = o4NL - (o4ML + o4OL + o4PL);
f4LR = o4OL - (o4ML + o4NL + o4PL);
f4PR = o4PL - (o4ML + o4NL + o4OL);
mainSampleL = (o4ML + o4NL + o4OL + o4PL)*0.125;
mainSampleR = (o4AR + o4ER + o4IR + o4MR)*0.125;
//we still have an untouched inputsample, turn it into dual mono
//won't need to redeclare any of the o4 temp variables, just re-use
double dualmonoSampleL = bez[bez_SampR];
double dualmonoSampleR = bez[bez_SampL];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
b4AL[e4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[e4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[e4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[e4DL] = dualmonoSampleL + (g4DL * reg4n);
e4AL++; if (e4AL < 0 || e4AL > d4A) e4AL = 0;
e4BL++; if (e4BL < 0 || e4BL > d4B) e4BL = 0;
e4CL++; if (e4CL < 0 || e4CL > d4C) e4CL = 0;
e4DL++; if (e4DL < 0 || e4DL > d4D) e4DL = 0;
o4AL = b4AL[e4AL-((e4AL > d4A)?d4A+1:0)];
o4BL = b4BL[e4BL-((e4BL > d4B)?d4B+1:0)];
o4CL = b4CL[e4CL-((e4CL > d4C)?d4C+1:0)];
o4DL = b4DL[e4DL-((e4DL > d4D)?d4D+1:0)];
b4DR[e4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[e4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[e4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[e4PR] = dualmonoSampleR + (g4PR * reg4n);
e4DR++; if (e4DR < 0 || e4DR > d4D) e4DR = 0;
e4HR++; if (e4HR < 0 || e4HR > d4H) e4HR = 0;
e4LR++; if (e4LR < 0 || e4LR > d4L) e4LR = 0;
e4PR++; if (e4PR < 0 || e4PR > d4P) e4PR = 0;
o4DR = b4DR[e4DR-((e4DR > d4D)?d4D+1:0)];
o4HR = b4HR[e4HR-((e4HR > d4H)?d4H+1:0)];
o4LR = b4LR[e4LR-((e4LR > d4L)?d4L+1:0)];
o4PR = b4PR[e4PR-((e4PR > d4P)?d4P+1:0)];
//-------- one
b4EL[e4EL] = o4AL - (o4BL + o4CL + o4DL);
b4FL[e4FL] = o4BL - (o4AL + o4CL + o4DL);
b4GL[e4GL] = o4CL - (o4AL + o4BL + o4DL);
b4HL[e4HL] = o4DL - (o4AL + o4BL + o4CL);
e4EL++; if (e4EL < 0 || e4EL > d4E) e4EL = 0;
e4FL++; if (e4FL < 0 || e4FL > d4F) e4FL = 0;
e4GL++; if (e4GL < 0 || e4GL > d4G) e4GL = 0;
e4HL++; if (e4HL < 0 || e4HL > d4H) e4HL = 0;
o4EL = b4EL[e4EL-((e4EL > d4E)?d4E+1:0)];
o4FL = b4FL[e4FL-((e4FL > d4F)?d4F+1:0)];
o4GL = b4GL[e4GL-((e4GL > d4G)?d4G+1:0)];
o4HL = b4HL[e4HL-((e4HL > d4H)?d4H+1:0)];
b4CR[e4CR] = o4DR - (o4HR + o4LR + o4PR);
b4GR[e4GR] = o4HR - (o4DR + o4LR + o4PR);
b4KR[e4KR] = o4LR - (o4DR + o4HR + o4PR);
b4OR[e4OR] = o4PR - (o4DR + o4HR + o4LR);
e4CR++; if (e4CR < 0 || e4CR > d4C) e4CR = 0;
e4GR++; if (e4GR < 0 || e4GR > d4G) e4GR = 0;
e4KR++; if (e4KR < 0 || e4KR > d4K) e4KR = 0;
e4OR++; if (e4OR < 0 || e4OR > d4O) e4OR = 0;
o4CR = b4CR[e4CR-((e4CR > d4C)?d4C+1:0)];
o4GR = b4GR[e4GR-((e4GR > d4G)?d4G+1:0)];
o4KR = b4KR[e4KR-((e4KR > d4K)?d4K+1:0)];
o4OR = b4OR[e4OR-((e4OR > d4O)?d4O+1:0)];
//-------- two
b4IL[e4IL] = o4EL - (o4FL + o4GL + o4HL);
b4JL[e4JL] = o4FL - (o4EL + o4GL + o4HL);
b4KL[e4KL] = o4GL - (o4EL + o4FL + o4HL);
b4LL[e4LL] = o4HL - (o4EL + o4FL + o4GL);
e4IL++; if (e4IL < 0 || e4IL > d4I) e4IL = 0;
e4JL++; if (e4JL < 0 || e4JL > d4J) e4JL = 0;
e4KL++; if (e4KL < 0 || e4KL > d4K) e4KL = 0;
e4LL++; if (e4LL < 0 || e4LL > d4L) e4LL = 0;
o4IL = b4IL[e4IL-((e4IL > d4I)?d4I+1:0)];
o4JL = b4JL[e4JL-((e4JL > d4J)?d4J+1:0)];
o4KL = b4KL[e4KL-((e4KL > d4K)?d4K+1:0)];
o4LL = b4LL[e4LL-((e4LL > d4L)?d4L+1:0)];
b4BR[e4BR] = o4CR - (o4GR + o4KR + o4OR);
b4FR[e4FR] = o4GR - (o4CR + o4KR + o4OR);
b4JR[e4JR] = o4KR - (o4CR + o4GR + o4OR);
b4NR[e4NR] = o4OR - (o4CR + o4GR + o4KR);
e4BR++; if (e4BR < 0 || e4BR > d4B) e4BR = 0;
e4FR++; if (e4FR < 0 || e4FR > d4F) e4FR = 0;
e4JR++; if (e4JR < 0 || e4JR > d4J) e4JR = 0;
e4NR++; if (e4NR < 0 || e4NR > d4N) e4NR = 0;
o4BR = b4BR[e4BR-((e4BR > d4B)?d4B+1:0)];
o4FR = b4FR[e4FR-((e4FR > d4F)?d4F+1:0)];
o4JR = b4JR[e4JR-((e4JR > d4J)?d4J+1:0)];
o4NR = b4NR[e4NR-((e4NR > d4N)?d4N+1:0)];
//-------- three
b4ML[e4ML] = o4IL - (o4JL + o4KL + o4LL);
b4NL[e4NL] = o4JL - (o4IL + o4KL + o4LL);
b4OL[e4OL] = o4KL - (o4IL + o4JL + o4LL);
b4PL[e4PL] = o4LL - (o4IL + o4JL + o4KL);
e4ML++; if (e4ML < 0 || e4ML > d4M) e4ML = 0;
e4NL++; if (e4NL < 0 || e4NL > d4N) e4NL = 0;
e4OL++; if (e4OL < 0 || e4OL > d4O) e4OL = 0;
e4PL++; if (e4PL < 0 || e4PL > d4P) e4PL = 0;
o4ML = b4ML[e4ML-((e4ML > d4M)?d4M+1:0)];
o4NL = b4NL[e4NL-((e4NL > d4N)?d4N+1:0)];
o4OL = b4OL[e4OL-((e4OL > d4O)?d4O+1:0)];
o4PL = b4PL[e4PL-((e4PL > d4P)?d4P+1:0)];
b4AR[e4AR] = o4BR - (o4FR + o4JR + o4NR);
b4ER[e4ER] = o4FR - (o4BR + o4JR + o4NR);
b4IR[e4IR] = o4JR - (o4BR + o4FR + o4NR);
b4MR[e4MR] = o4NR - (o4BR + o4FR + o4JR);
e4AR++; if (e4AR < 0 || e4AR > d4A) e4AR = 0;
e4ER++; if (e4ER < 0 || e4ER > d4E) e4ER = 0;
e4IR++; if (e4IR < 0 || e4IR > d4I) e4IR = 0;
e4MR++; if (e4MR < 0 || e4MR > d4M) e4MR = 0;
o4AR = b4AR[e4AR-((e4AR > d4A)?d4A+1:0)];
o4ER = b4ER[e4ER-((e4ER > d4E)?d4E+1:0)];
o4IR = b4IR[e4IR-((e4IR > d4I)?d4I+1:0)];
o4MR = b4MR[e4MR-((e4MR > d4M)?d4M+1:0)];
//-------- four
g4DR = o4AR - (o4ER + o4IR + o4MR);
g4HR = o4ER - (o4AR + o4IR + o4MR);
g4LR = o4IR - (o4AR + o4ER + o4MR);
g4PR = o4MR - (o4AR + o4ER + o4IR);
g4AL = o4ML - (o4NL + o4OL + o4PL);
g4BL = o4NL - (o4ML + o4OL + o4PL);
g4CL = o4OL - (o4ML + o4NL + o4PL);
g4DL = o4PL - (o4ML + o4NL + o4OL);
dualmonoSampleR = (o4ML + o4NL + o4OL + o4PL)*0.125;
dualmonoSampleL = (o4AR + o4ER + o4IR + o4MR)*0.125;
hA = b4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = b4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = b4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = b4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
g4DR = hA - (hB + hC + hD);
g4HR = hB - (hA + hC + hD);
g4LR = hC - (hA + hB + hD);
g4PR = hD - (hA + hB + hC);
dualmonoSampleR = (hA + hB + hC + hD)*0.125;
//dual mono version is wider = 1.0 at the center
//with mainsample 0.0 and 2.0 (only at the edges)
//with mainsample out of phase when over 1.0
@ -769,11 +603,11 @@ void VerbTiny::processDoubleReplacing(double **inputs, double **outputs, VstInt3
//then, dualmono remains totally dualmono, and blend a bit in for wideness.
if (wider < 1.0) {
inputSampleL = (dualmonoSampleL*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleR*wider) + (mainSampleR*(1.0-wider));
inputSampleL = (dualmonoSampleR*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleL*wider) + (mainSampleR*(1.0-wider));
} else {
inputSampleL = (dualmonoSampleL*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleR*(2.0-wider)) + (-mainSampleR*(wider-1.0));
inputSampleL = (dualmonoSampleR*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleL*(2.0-wider)) + (-mainSampleR*(wider-1.0));
}
bez[bez_CL] = bez[bez_BL];

View file

@ -16,7 +16,7 @@ kWoodRoom::kWoodRoom(audioMasterCallback audioMaster) :
B = 0.5;
C = 0.25;
D = 0.5;
E = 0.5;
E = 0.75;
F = 0.5;
for(int x = 0; x < d3A+2; x++) {a3AL[x] = 0.0; a3AR[x] = 0.0;}

View file

@ -184,16 +184,10 @@ private:
bez_BR,
bez_CL,
bez_CR,
bez_InL,
bez_InR,
bez_UnInL,
bez_UnInR,
bez_SampL,
bez_SampR,
bez_AvgInSampL,
bez_AvgInSampR,
bez_AvgOutSampL,
bez_AvgOutSampR,
bez_IIRL,
bez_IIRR,
bez_cycle,
bez_total
}; //the new undersampling. bez signifies the bezier curve reconstruction

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,355 @@
/*
* File: BitDualPan.cpp
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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.
*
*/
/*=============================================================================
BitDualPan.cpp
=============================================================================*/
#include "BitDualPan.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(BitDualPan)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::BitDualPan
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BitDualPan::BitDualPan(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_A:
AUBase::FillInParameterName (outParameterInfo, kParameterAName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 BitDualPan::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// BitDualPan::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____BitDualPanEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::BitDualPanKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus BitDualPan::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
double gainControl = (GetParameter( kParam_A )*0.5)+0.05; //0.0 to 1.0
int gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
int bitshiftL = gainBits - 3;
int bitshiftR = gainBits - 3;
double panControl = (GetParameter( kParam_B )*2.0)-1.0; //-1.0 to 1.0
double panAttenuation = (1.0-fabs(panControl));
int panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double LgainL = 1.0;
double LgainR = 1.0;
switch (bitshiftL)
{
case 17: LgainL = 0.0; break;
case 16: LgainL = 0.0000152587890625; break;
case 15: LgainL = 0.000030517578125; break;
case 14: LgainL = 0.00006103515625; break;
case 13: LgainL = 0.0001220703125; break;
case 12: LgainL = 0.000244140625; break;
case 11: LgainL = 0.00048828125; break;
case 10: LgainL = 0.0009765625; break;
case 9: LgainL = 0.001953125; break;
case 8: LgainL = 0.00390625; break;
case 7: LgainL = 0.0078125; break;
case 6: LgainL = 0.015625; break;
case 5: LgainL = 0.03125; break;
case 4: LgainL = 0.0625; break;
case 3: LgainL = 0.125; break;
case 2: LgainL = 0.25; break;
case 1: LgainL = 0.5; break;
case 0: LgainL = 1.0; break;
case -1: LgainL = 2.0; break;
case -2: LgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: LgainR = 0.0; break;
case 16: LgainR = 0.0000152587890625; break;
case 15: LgainR = 0.000030517578125; break;
case 14: LgainR = 0.00006103515625; break;
case 13: LgainR = 0.0001220703125; break;
case 12: LgainR = 0.000244140625; break;
case 11: LgainR = 0.00048828125; break;
case 10: LgainR = 0.0009765625; break;
case 9: LgainR = 0.001953125; break;
case 8: LgainR = 0.00390625; break;
case 7: LgainR = 0.0078125; break;
case 6: LgainR = 0.015625; break;
case 5: LgainR = 0.03125; break;
case 4: LgainR = 0.0625; break;
case 3: LgainR = 0.125; break;
case 2: LgainR = 0.25; break;
case 1: LgainR = 0.5; break;
case 0: LgainR = 1.0; break;
case -1: LgainR = 2.0; break;
case -2: LgainR = 4.0; break;
}
gainControl = (GetParameter( kParam_C )*0.5)+0.05; //0.0 to 1.0
gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
bitshiftL = gainBits - 3;
bitshiftR = gainBits - 3;
panControl = (GetParameter( kParam_D )*2.0)-1.0; //-1.0 to 1.0
panAttenuation = (1.0-fabs(panControl));
panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double RgainL = 1.0;
double RgainR = 1.0;
switch (bitshiftL)
{
case 17: RgainL = 0.0; break;
case 16: RgainL = 0.0000152587890625; break;
case 15: RgainL = 0.000030517578125; break;
case 14: RgainL = 0.00006103515625; break;
case 13: RgainL = 0.0001220703125; break;
case 12: RgainL = 0.000244140625; break;
case 11: RgainL = 0.00048828125; break;
case 10: RgainL = 0.0009765625; break;
case 9: RgainL = 0.001953125; break;
case 8: RgainL = 0.00390625; break;
case 7: RgainL = 0.0078125; break;
case 6: RgainL = 0.015625; break;
case 5: RgainL = 0.03125; break;
case 4: RgainL = 0.0625; break;
case 3: RgainL = 0.125; break;
case 2: RgainL = 0.25; break;
case 1: RgainL = 0.5; break;
case 0: RgainL = 1.0; break;
case -1: RgainL = 2.0; break;
case -2: RgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: RgainR = 0.0; break;
case 16: RgainR = 0.0000152587890625; break;
case 15: RgainR = 0.000030517578125; break;
case 14: RgainR = 0.00006103515625; break;
case 13: RgainR = 0.0001220703125; break;
case 12: RgainR = 0.000244140625; break;
case 11: RgainR = 0.00048828125; break;
case 10: RgainR = 0.0009765625; break;
case 9: RgainR = 0.001953125; break;
case 8: RgainR = 0.00390625; break;
case 7: RgainR = 0.0078125; break;
case 6: RgainR = 0.015625; break;
case 5: RgainR = 0.03125; break;
case 4: RgainR = 0.0625; break;
case 3: RgainR = 0.125; break;
case 2: RgainR = 0.25; break;
case 1: RgainR = 0.5; break;
case 0: RgainR = 1.0; break;
case -1: RgainR = 2.0; break;
case -2: RgainR = 4.0; break;
}
while (nSampleFrames-- > 0) {
double monoL = *inputL;
double monoR = *inputR;
*outputL = (monoL*LgainL)+(monoR*RgainL);
*outputR = (monoL*LgainR)+(monoR*RgainR);
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1 @@
_BitDualPanEntry

View file

@ -0,0 +1,125 @@
/*
* File: BitDualPan.h
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "BitDualPanVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __BitDualPan_h__
#define __BitDualPan_h__
#pragma mark ____BitDualPan Parameters
// parameters
static const float kDefaultValue_ParamA = 0.5;
static const float kDefaultValue_ParamB = 0.0;
static const float kDefaultValue_ParamC = 0.5;
static const float kDefaultValue_ParamD = 1.0;
static CFStringRef kParameterAName = CFSTR("L Vol");
static CFStringRef kParameterBName = CFSTR("L Pan");
static CFStringRef kParameterCName = CFSTR("R Vol");
static CFStringRef kParameterDName = CFSTR("R Pan");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
//Add your parameters here...
kNumberOfParameters=4
};
#pragma mark ____BitDualPan
class BitDualPan : public AUEffectBase
{
public:
BitDualPan(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~BitDualPan () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
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 kBitDualPanVersion; }
private:
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: BitDualPan.r
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "BitDualPanVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_BitDualPan 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BitDualPan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_BitDualPan
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE BitDualPan_COMP_SUBTYPE
#define COMP_MANUF BitDualPan_COMP_MANF
#define VERSION kBitDualPanVersion
#define NAME "Airwindows: BitDualPan"
#define DESCRIPTION "BitDualPan AU"
#define ENTRY_POINT "BitDualPanEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,147 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* BitDualPan */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* 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,
188,
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 = 785872420;
PBXWorkspaceStateSaveDate = 785872420;
};
perUserProjectItems = {
8B0F89892ECF391400E4B38F /* PBXTextBookmark */ = 8B0F89892ECF391400E4B38F /* PBXTextBookmark */;
8B3D20B22ED777C40020B133 /* PBXTextBookmark */ = 8B3D20B22ED777C40020B133 /* PBXTextBookmark */;
8B3D20B32ED777C40020B133 /* PBXBookmark */ = 8B3D20B32ED777C40020B133 /* PBXBookmark */;
8B3D20B42ED777C40020B133 /* PBXTextBookmark */ = 8B3D20B42ED777C40020B133 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B0F89892ECF391400E4B38F /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* BitDualPan.h */;
name = "BitDualPan.h: 120";
rLen = 0;
rLoc = 5080;
rType = 0;
vrLen = 18;
vrLoc = 5066;
};
8B3D20B22ED777C40020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* BitDualPan.cpp */;
name = "BitDualPan.cpp: 215";
rLen = 0;
rLoc = 9703;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B3D20B32ED777C40020B133 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A690720730100365D66 /* BitDualPanVersion.h */;
};
8B3D20B42ED777C40020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* BitDualPanVersion.h */;
name = "BitDualPanVersion.h: 54";
rLen = 0;
rLoc = 2914;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8BA05A660720730100365D66 /* BitDualPan.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 6408}}";
sepNavSelRange = "{14359, 148}";
sepNavVisRange = "{13573, 1017}";
sepNavWindowFrame = "{{600, 72}, {840, 806}}";
};
};
8BA05A690720730100365D66 /* BitDualPanVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1098}}";
sepNavSelRange = "{2914, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{15, 67}, {840, 806}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {516, 23430}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1336}";
};
};
8BC6025B073B072D006C4272 /* BitDualPan.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 2250}}";
sepNavSelRange = "{5080, 0}";
sepNavVisRange = "{2536, 890}";
sepNavWindowFrame = "{{854, 47}, {840, 806}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* BitDualPan */ = {
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 /* BitDualPan.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* BitDualPan.r */; };
8BA05A6B0720730100365D66 /* BitDualPan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* BitDualPan.cpp */; };
8BA05A6E0720730100365D66 /* BitDualPanVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* BitDualPanVersion.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 /* BitDualPan.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* BitDualPan.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 /* BitDualPan.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = BitDualPan.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* BitDualPan.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = BitDualPan.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* BitDualPan.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = BitDualPan.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* BitDualPanVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BitDualPanVersion.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 /* BitDualPan.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BitDualPan.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* BitDualPan.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BitDualPan.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 /* BitDualPan */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = BitDualPan;
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 /* BitDualPan.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* BitDualPan.h */,
8BA05A660720730100365D66 /* BitDualPan.cpp */,
8BA05A670720730100365D66 /* BitDualPan.exp */,
8BA05A680720730100365D66 /* BitDualPan.r */,
8BA05A690720730100365D66 /* BitDualPanVersion.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 /* BitDualPanVersion.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 /* BitDualPan.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 /* BitDualPan */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "BitDualPan" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = BitDualPan;
productInstallPath = "$(HOME)/Library/Bundles";
productName = BitDualPan;
productReference = 8D01CCD20486CAD60068D4B7 /* BitDualPan.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 "BitDualPan" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* BitDualPan */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* BitDualPan */,
);
};
/* 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 /* BitDualPan.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* BitDualPan.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 = BitDualPan.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 = BitDualPan;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = BitDualPan.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 = BitDualPan;
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 "BitDualPan" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "BitDualPan" */ = {
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: BitDualPanVersion.h
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 __BitDualPanVersion_h__
#define __BitDualPanVersion_h__
#ifdef DEBUG
#define kBitDualPanVersion 0xFFFFFFFF
#else
#define kBitDualPanVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define BitDualPan_COMP_MANF 'Dthr'
#define BitDualPan_COMP_SUBTYPE 'bitd'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#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>Dthr</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,5 @@
//
// Prefix header for all source files of the '«PROJECTNAMEASIDENTIFIER»' target in the '«PROJECTNAMEASIDENTIFIER»' project.
//
#include <CoreServices/CoreServices.h>

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>

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>Dthr</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,273 @@
/*
* File: PurestDualPan.cpp
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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.
*
*/
/*=============================================================================
PurestDualPan.cpp
=============================================================================*/
#include "PurestDualPan.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(PurestDualPan)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::PurestDualPan
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PurestDualPan::PurestDualPan(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_A:
AUBase::FillInParameterName (outParameterInfo, kParameterAName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 PurestDualPan::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// PurestDualPan::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____PurestDualPanEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::PurestDualPanKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
gainLA = gainLB = 0.5;
panLA = panLB = 0.0;
gainRA = gainRB = 0.5;
panRA = panRB = 1.0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus PurestDualPan::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
gainLA = gainLB; gainLB = GetParameter( kParam_A );
panLA = panLB; panLB = GetParameter( kParam_B );
gainRA = gainRB; gainRB = GetParameter( kParam_C );
panRA = panRB; panRB = GetParameter( kParam_D );
while (nSampleFrames-- > 0) {
long double inputSampleL = *inputL;
long double inputSampleR = *inputR;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double temp = (double)nSampleFrames/inFramesToProcess;
long double LpanR = ((panLA*temp) + (panLB*(1.0-temp)))*1.57079633;
long double LpanL = 1.57079633 - LpanR;
LpanR = sin(LpanR); LpanL = sin(LpanL);
long double gainL = ((gainLA*temp) + (gainLB*(1.0-temp)))*2.0;
gainL = pow(gainL,gainL + 0.618033988749894848204586);
long double RpanR = ((panRA*temp) + (panRB*(1.0-temp)))*1.57079633;
long double RpanL = 1.57079633 - RpanR;
RpanR = sin(RpanR); RpanL = sin(RpanL);
long double gainR = ((gainRA*temp) + (gainRB*(1.0-temp)))*2.0;
gainR = pow(gainR,gainR + 0.618033988749894848204586);
long double LoutL = LpanL*gainL*inputSampleL;
long double LoutR = LpanR*gainL*inputSampleL;
long double RoutL = RpanL*gainR*inputSampleR;
long double RoutR = RpanR*gainR*inputSampleR;
inputSampleL = LoutL + RoutL;
inputSampleR = LoutR + RoutR;
//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
*outputL = inputSampleL;
*outputR = inputSampleR;
//direct stereo out
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1 @@
_PurestDualPanEntry

View file

@ -0,0 +1,133 @@
/*
* File: PurestDualPan.h
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "PurestDualPanVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __PurestDualPan_h__
#define __PurestDualPan_h__
#pragma mark ____PurestDualPan Parameters
// parameters
static const float kDefaultValue_ParamA = 0.5;
static const float kDefaultValue_ParamB = 0.0;
static const float kDefaultValue_ParamC = 0.5;
static const float kDefaultValue_ParamD = 1.0;
static CFStringRef kParameterAName = CFSTR("L Vol");
static CFStringRef kParameterBName = CFSTR("L Pan");
static CFStringRef kParameterCName = CFSTR("R Vol");
static CFStringRef kParameterDName = CFSTR("R Pan");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
//Add your parameters here...
kNumberOfParameters=4
};
#pragma mark ____PurestDualPan
class PurestDualPan : public AUEffectBase
{
public:
PurestDualPan(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~PurestDualPan () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
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 kPurestDualPanVersion; }
private:
double gainLA, gainLB;
double gainRA, gainRB;
double panLA, panLB;
double panRA, panRB;
uint32_t fpdL;
uint32_t fpdR;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: PurestDualPan.r
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "PurestDualPanVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_PurestDualPan 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PurestDualPan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_PurestDualPan
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE PurestDualPan_COMP_SUBTYPE
#define COMP_MANUF PurestDualPan_COMP_MANF
#define VERSION kPurestDualPanVersion
#define NAME "Airwindows: PurestDualPan"
#define DESCRIPTION "PurestDualPan AU"
#define ENTRY_POINT "PurestDualPanEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,147 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* PurestDualPan */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* 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,
188,
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 = 785874505;
PBXWorkspaceStateSaveDate = 785874505;
};
perUserProjectItems = {
8B3ABBDB2ECF50C800AF7969 /* PBXTextBookmark */ = 8B3ABBDB2ECF50C800AF7969 /* PBXTextBookmark */;
8B3D20EA2ED77FCE0020B133 /* PBXTextBookmark */ = 8B3D20EA2ED77FCE0020B133 /* PBXTextBookmark */;
8B3D20EB2ED77FCE0020B133 /* PBXBookmark */ = 8B3D20EB2ED77FCE0020B133 /* PBXBookmark */;
8B3D20EC2ED77FCE0020B133 /* PBXTextBookmark */ = 8B3D20EC2ED77FCE0020B133 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B3ABBDB2ECF50C800AF7969 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* PurestDualPanVersion.h */;
name = "PurestDualPanVersion.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
vrLen = 56;
vrLoc = 0;
};
8B3D20EA2ED77FCE0020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* PurestDualPan.cpp */;
name = "PurestDualPan.cpp: 250";
rLen = 0;
rLoc = 11289;
rType = 0;
vrLen = 112;
vrLoc = 11241;
};
8B3D20EB2ED77FCE0020B133 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BC6025B073B072D006C4272 /* PurestDualPan.h */;
};
8B3D20EC2ED77FCE0020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* PurestDualPan.h */;
name = "PurestDualPan.h: 121";
rLen = 92;
rLoc = 5111;
rType = 0;
vrLen = 35;
vrLoc = 3253;
};
8BA05A660720730100365D66 /* PurestDualPan.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {849, 5202}}";
sepNavSelRange = "{10545, 809}";
sepNavVisRange = "{10192, 1444}";
sepNavWindowFrame = "{{614, 101}, {826, 681}}";
};
};
8BA05A690720730100365D66 /* PurestDualPanVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1062}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{1177, 1821}";
sepNavWindowFrame = "{{595, 72}, {840, 806}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {516, 23430}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1336}";
};
};
8BC6025B073B072D006C4272 /* PurestDualPan.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 2718}}";
sepNavSelRange = "{5111, 92}";
sepNavVisRange = "{3253, 35}";
sepNavWindowFrame = "{{807, 72}, {840, 806}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* PurestDualPan */ = {
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 /* PurestDualPan.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* PurestDualPan.r */; };
8BA05A6B0720730100365D66 /* PurestDualPan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* PurestDualPan.cpp */; };
8BA05A6E0720730100365D66 /* PurestDualPanVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* PurestDualPanVersion.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 /* PurestDualPan.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* PurestDualPan.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 /* PurestDualPan.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PurestDualPan.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* PurestDualPan.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = PurestDualPan.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* PurestDualPan.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = PurestDualPan.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* PurestDualPanVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PurestDualPanVersion.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 /* PurestDualPan.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PurestDualPan.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* PurestDualPan.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PurestDualPan.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 /* PurestDualPan */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = PurestDualPan;
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 /* PurestDualPan.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* PurestDualPan.h */,
8BA05A660720730100365D66 /* PurestDualPan.cpp */,
8BA05A670720730100365D66 /* PurestDualPan.exp */,
8BA05A680720730100365D66 /* PurestDualPan.r */,
8BA05A690720730100365D66 /* PurestDualPanVersion.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 /* PurestDualPanVersion.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 /* PurestDualPan.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 /* PurestDualPan */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "PurestDualPan" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = PurestDualPan;
productInstallPath = "$(HOME)/Library/Bundles";
productName = PurestDualPan;
productReference = 8D01CCD20486CAD60068D4B7 /* PurestDualPan.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 "PurestDualPan" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* PurestDualPan */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* PurestDualPan */,
);
};
/* 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 /* PurestDualPan.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* PurestDualPan.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 = PurestDualPan.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 = PurestDualPan;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = PurestDualPan.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 = PurestDualPan;
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 "PurestDualPan" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "PurestDualPan" */ = {
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: PurestDualPanVersion.h
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 __PurestDualPanVersion_h__
#define __PurestDualPanVersion_h__
#ifdef DEBUG
#define kPurestDualPanVersion 0xFFFFFFFF
#else
#define kPurestDualPanVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define PurestDualPan_COMP_MANF 'Dthr'
#define PurestDualPan_COMP_SUBTYPE 'pdpn'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

View file

@ -0,0 +1,5 @@
//
// Prefix header for all source files of the '«PROJECTNAMEASIDENTIFIER»' target in the '«PROJECTNAMEASIDENTIFIER»' project.
//
#include <CoreServices/CoreServices.h>

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

@ -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,218 @@
/*
* File: PurestSaturation.cpp
*
* Version: 1.0
*
* Created: 11/26/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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.
*
*/
/*=============================================================================
PurestSaturation.cpp
=============================================================================*/
#include "PurestSaturation.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(PurestSaturation)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::PurestSaturation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PurestSaturation::PurestSaturation(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestSaturation::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestSaturation::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_A:
AUBase::FillInParameterName (outParameterInfo, kParameterAName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestSaturation::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestSaturation::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// PurestSaturation::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestSaturation::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____PurestSaturationEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::PurestSaturationKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PurestSaturation::PurestSaturationKernel::Reset()
{
fpd = 1.0; while (fpd < 16386) fpd = rand()*UINT32_MAX;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestSaturation::PurestSaturationKernel::Process
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PurestSaturation::PurestSaturationKernel::Process( const Float32 *inSourceP,
Float32 *inDestP,
UInt32 inFramesToProcess,
UInt32 inNumChannels,
bool &ioSilence )
{
UInt32 nSampleFrames = inFramesToProcess;
const Float32 *sourceP = inSourceP;
Float32 *destP = inDestP;
long double inputGain = GetParameter( kParam_A )*10.0;
long double outputGain = GetParameter( kParam_B );
while (nSampleFrames-- > 0) {
long double inputSample = *sourceP;
if (fabs(inputSample)<1.18e-23) inputSample = fpd * 1.18e-17;
if (inputGain != 1.0) inputSample *= inputGain;
inputSample = fmin(fmax(inputSample,-2.032610446872596),2.032610446872596);
long double X = inputSample * inputSample;
long double temp = inputSample * X;
inputSample -= (temp*0.125); temp *= X;
inputSample += (temp*0.0078125); temp *= X;
inputSample -= (temp*0.000244140625); temp *= X;
inputSample += (temp*0.000003814697265625); temp *= X;
inputSample -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
if (outputGain < 1.0) inputSample *= outputGain;
//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 @@
_PurestSaturationEntry

View file

@ -0,0 +1,137 @@
/*
* File: PurestSaturation.h
*
* Version: 1.0
*
* Created: 11/26/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "PurestSaturationVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __PurestSaturation_h__
#define __PurestSaturation_h__
#pragma mark ____PurestSaturation Parameters
// parameters
static const float kDefaultValue_ParamA = 0.1;
static const float kDefaultValue_ParamB = 1.0;
static CFStringRef kParameterAName = CFSTR("Input");
static CFStringRef kParameterBName = CFSTR("Output");
enum {
kParam_A =0,
kParam_B =1,
//Add your parameters here...
kNumberOfParameters=2
};
#pragma mark ____PurestSaturation
class PurestSaturation : public AUEffectBase
{
public:
PurestSaturation(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~PurestSaturation () { delete mDebugDispatcher; }
#endif
virtual AUKernelBase * NewKernel() { return new PurestSaturationKernel(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 kPurestSaturationVersion; }
protected:
class PurestSaturationKernel : public AUKernelBase // most of the real work happens here
{
public:
PurestSaturationKernel(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:
uint32_t fpd;
};
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: PurestSaturation.r
*
* Version: 1.0
*
* Created: 11/26/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "PurestSaturationVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_PurestSaturation 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PurestSaturation~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_PurestSaturation
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE PurestSaturation_COMP_SUBTYPE
#define COMP_MANUF PurestSaturation_COMP_MANF
#define VERSION kPurestSaturationVersion
#define NAME "Airwindows: PurestSaturation"
#define DESCRIPTION "PurestSaturation AU"
#define ENTRY_POINT "PurestSaturationEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,130 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* PurestSaturation */;
breakpoints = (
);
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 = 785876212;
PBXWorkspaceStateSaveDate = 785876212;
};
perUserProjectItems = {
8B3D211E2ED784520020B133 /* PlistBookmark */ = 8B3D211E2ED784520020B133 /* PlistBookmark */;
8B3D21502ED786750020B133 /* PlistBookmark */ = 8B3D21502ED786750020B133 /* PlistBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B3D211E2ED784520020B133 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/PurestSaturation/Info.plist;
rLen = 0;
rLoc = 9223372036854775808;
};
8B3D21502ED786750020B133 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/PurestSaturation/Info.plist;
rLen = 0;
rLoc = 9223372036854775807;
};
8BA05A660720730100365D66 /* PurestSaturation.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {952, 4122}}";
sepNavSelRange = "{8883, 0}";
sepNavVisRange = "{8479, 1346}";
sepNavWindowFrame = "{{586, 70}, {999, 764}}";
};
};
8BA05A690720730100365D66 /* PurestSaturationVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1062}}";
sepNavSelRange = "{2956, 0}";
sepNavVisRange = "{1278, 1741}";
sepNavWindowFrame = "{{670, 86}, {999, 764}}";
};
};
8BC6025B073B072D006C4272 /* PurestSaturation.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 2466}}";
sepNavSelRange = "{4893, 0}";
sepNavVisRange = "{4314, 1025}";
sepNavWindowFrame = "{{694, 91}, {999, 764}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* PurestSaturation */ = {
activeExec = 0;
};
}

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 /* PurestSaturation.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* PurestSaturation.r */; };
8BA05A6B0720730100365D66 /* PurestSaturation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* PurestSaturation.cpp */; };
8BA05A6E0720730100365D66 /* PurestSaturationVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* PurestSaturationVersion.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 /* PurestSaturation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* PurestSaturation.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 /* PurestSaturation.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PurestSaturation.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* PurestSaturation.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = PurestSaturation.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* PurestSaturation.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = PurestSaturation.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* PurestSaturationVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PurestSaturationVersion.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 /* PurestSaturation.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PurestSaturation.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* PurestSaturation.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PurestSaturation.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 /* PurestSaturation */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = PurestSaturation;
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 /* PurestSaturation.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* PurestSaturation.h */,
8BA05A660720730100365D66 /* PurestSaturation.cpp */,
8BA05A670720730100365D66 /* PurestSaturation.exp */,
8BA05A680720730100365D66 /* PurestSaturation.r */,
8BA05A690720730100365D66 /* PurestSaturationVersion.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 /* PurestSaturationVersion.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 /* PurestSaturation.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 /* PurestSaturation */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "PurestSaturation" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = PurestSaturation;
productInstallPath = "$(HOME)/Library/Bundles";
productName = PurestSaturation;
productReference = 8D01CCD20486CAD60068D4B7 /* PurestSaturation.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 "PurestSaturation" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* PurestSaturation */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* PurestSaturation */,
);
};
/* 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 /* PurestSaturation.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* PurestSaturation.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 = PurestSaturation.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 = PurestSaturation;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = PurestSaturation.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 = PurestSaturation;
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 "PurestSaturation" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "PurestSaturation" */ = {
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: PurestSaturationVersion.h
*
* Version: 1.0
*
* Created: 11/26/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 __PurestSaturationVersion_h__
#define __PurestSaturationVersion_h__
#ifdef DEBUG
#define kPurestSaturationVersion 0xFFFFFFFF
#else
#define kPurestSaturationVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define PurestSaturation_COMP_MANF 'Dthr'
#define PurestSaturation_COMP_SUBTYPE 'pusa'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

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>

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>Dthr</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,5 @@
//
// Prefix header for all source files of the '«PROJECTNAMEASIDENTIFIER»' target in the '«PROJECTNAMEASIDENTIFIER»' project.
//
#include <CoreServices/CoreServices.h>

View file

@ -0,0 +1,622 @@
/*
* File: VerbThic.cpp
*
* Version: 1.0
*
* Created: 11/23/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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.
*
*/
/*=============================================================================
VerbThic.cpp
=============================================================================*/
#include "VerbThic.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(VerbThic)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::VerbThic
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VerbThic::VerbThic(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
SetParameter(kParam_E, kDefaultValue_ParamE );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult VerbThic::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult VerbThic::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_A:
AUBase::FillInParameterName (outParameterInfo, kParameterAName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
case kParam_E:
AUBase::FillInParameterName (outParameterInfo, kParameterEName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamE;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult VerbThic::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 VerbThic::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult VerbThic::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// VerbThic::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult VerbThic::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____VerbThicEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::VerbThicKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult VerbThic::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
for(int x = 0; x < d4A+2; x++) {a4AL[x] = 0.0; a4AR[x] = 0.0;}
for(int x = 0; x < d4B+2; x++) {a4BL[x] = 0.0; a4BR[x] = 0.0;}
for(int x = 0; x < d4C+2; x++) {a4CL[x] = 0.0; a4CR[x] = 0.0;}
for(int x = 0; x < d4D+2; x++) {a4DL[x] = 0.0; a4DR[x] = 0.0;}
for(int x = 0; x < d4E+2; x++) {a4EL[x] = 0.0; a4ER[x] = 0.0;}
for(int x = 0; x < d4F+2; x++) {a4FL[x] = 0.0; a4FR[x] = 0.0;}
for(int x = 0; x < d4G+2; x++) {a4GL[x] = 0.0; a4GR[x] = 0.0;}
for(int x = 0; x < d4H+2; x++) {a4HL[x] = 0.0; a4HR[x] = 0.0;}
for(int x = 0; x < d4I+2; x++) {a4IL[x] = 0.0; a4IR[x] = 0.0;}
for(int x = 0; x < d4J+2; x++) {a4JL[x] = 0.0; a4JR[x] = 0.0;}
for(int x = 0; x < d4K+2; x++) {a4KL[x] = 0.0; a4KR[x] = 0.0;}
for(int x = 0; x < d4L+2; x++) {a4LL[x] = 0.0; a4LR[x] = 0.0;}
for(int x = 0; x < d4M+2; x++) {a4ML[x] = 0.0; a4MR[x] = 0.0;}
for(int x = 0; x < d4N+2; x++) {a4NL[x] = 0.0; a4NR[x] = 0.0;}
for(int x = 0; x < d4O+2; x++) {a4OL[x] = 0.0; a4OR[x] = 0.0;}
for(int x = 0; x < d4P+2; x++) {a4PL[x] = 0.0; a4PR[x] = 0.0;}
c4AL = c4BL = c4CL = c4DL = c4EL = c4FL = c4GL = c4HL = 1;
c4IL = c4JL = c4KL = c4LL = c4ML = c4NL = c4OL = c4PL = 1;
c4AR = c4BR = c4CR = c4DR = c4ER = c4FR = c4GR = c4HR = 1;
c4IR = c4JR = c4KR = c4LR = c4MR = c4NR = c4OR = c4PR = 1;
f4AL = f4BL = f4CL = f4DL = 0.0;
f4DR = f4HR = f4LR = f4PR = 0.0;
for(int x = 0; x < d4A+2; x++) {b4AL[x] = 0.0; b4AR[x] = 0.0;}
for(int x = 0; x < d4B+2; x++) {b4BL[x] = 0.0; b4BR[x] = 0.0;}
for(int x = 0; x < d4C+2; x++) {b4CL[x] = 0.0; b4CR[x] = 0.0;}
for(int x = 0; x < d4D+2; x++) {b4DL[x] = 0.0; b4DR[x] = 0.0;}
for(int x = 0; x < d4E+2; x++) {b4EL[x] = 0.0; b4ER[x] = 0.0;}
for(int x = 0; x < d4F+2; x++) {b4FL[x] = 0.0; b4FR[x] = 0.0;}
for(int x = 0; x < d4G+2; x++) {b4GL[x] = 0.0; b4GR[x] = 0.0;}
for(int x = 0; x < d4H+2; x++) {b4HL[x] = 0.0; b4HR[x] = 0.0;}
for(int x = 0; x < d4I+2; x++) {b4IL[x] = 0.0; b4IR[x] = 0.0;}
for(int x = 0; x < d4J+2; x++) {b4JL[x] = 0.0; b4JR[x] = 0.0;}
for(int x = 0; x < d4K+2; x++) {b4KL[x] = 0.0; b4KR[x] = 0.0;}
for(int x = 0; x < d4L+2; x++) {b4LL[x] = 0.0; b4LR[x] = 0.0;}
for(int x = 0; x < d4M+2; x++) {b4ML[x] = 0.0; b4MR[x] = 0.0;}
for(int x = 0; x < d4N+2; x++) {b4NL[x] = 0.0; b4NR[x] = 0.0;}
for(int x = 0; x < d4O+2; x++) {b4OL[x] = 0.0; b4OR[x] = 0.0;}
for(int x = 0; x < d4P+2; x++) {b4PL[x] = 0.0; b4PR[x] = 0.0;}
g4AL = g4BL = g4CL = g4DL = 0.0;
g4DR = g4HR = g4LR = g4PR = 0.0;
for (int x = 0; x < bez_total; x++) {
bez[x] = 0.0;
bezF[x] = 0.0;
}
bez[bez_cycle] = 1.0;
bezF[bez_cycle] = 1.0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// VerbThic::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus VerbThic::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= GetSampleRate();
double reg4n = 0.03125+((1.0-pow(1.0-GetParameter( kParam_A ),2.0))*0.03125);
double attenuate = 1.0 - (1.0-pow(1.0-GetParameter( kParam_A ),2.0));
double derez = pow(GetParameter( kParam_B ),2.0);
derez = fmin(fmax(derez/overallscale,0.0001),1.0);
int bezFraction = (int)(1.0/derez);
double bezTrim = (double)bezFraction/(bezFraction+1.0);
derez = 1.0 / bezFraction;
bezTrim = 1.0-(derez*bezTrim);
//the revision more accurately connects the bezier curves
double derezFreq = pow(GetParameter( kParam_C ),2.0);
derezFreq = fmin(fmax(derezFreq/overallscale,0.0001),1.0);
int bezFreqFraction = (int)(1.0/derezFreq);
double bezFreqTrim = (double)bezFreqFraction/(bezFreqFraction+1.0);
derezFreq = 1.0 / bezFreqFraction;
bezFreqTrim = 1.0-(derezFreq*bezFreqTrim);
//the revision more accurately connects the bezier curves
double wider = GetParameter( kParam_D )*2.0;
double wet = GetParameter( kParam_E );
while (nSampleFrames-- > 0) {
double inputSampleL = *inputL;
double inputSampleR = *inputR;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double drySampleL = inputSampleL;
double drySampleR = inputSampleR;
bez[bez_cycle] += derez;
bez[bez_SampL] += (inputSampleL*attenuate*derez);
bez[bez_SampR] += (inputSampleR*attenuate*derez);
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
bez[bez_cycle] = 0.0;
double mainSampleL = bez[bez_SampL];
double dualmonoSampleL = bez[bez_SampR];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
//left verbs
a4AL[c4AL] = mainSampleL + (f4DR * reg4n);
a4BL[c4BL] = mainSampleL + (f4HR * reg4n);
a4CL[c4CL] = mainSampleL + (f4LR * reg4n);
a4DL[c4DL] = mainSampleL + (f4PR * reg4n);
b4AL[c4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[c4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[c4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[c4DL] = dualmonoSampleL + (g4DL * reg4n);
c4AL++; if (c4AL < 0 || c4AL > d4A) c4AL = 0;
c4BL++; if (c4BL < 0 || c4BL > d4B) c4BL = 0;
c4CL++; if (c4CL < 0 || c4CL > d4C) c4CL = 0;
c4DL++; if (c4DL < 0 || c4DL > d4D) c4DL = 0;
double hA = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double hB = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double hC = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double hD = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4EL[c4EL] = hA - (hB + hC + hD);
a4FL[c4FL] = hB - (hA + hC + hD);
a4GL[c4GL] = hC - (hA + hB + hD);
a4HL[c4HL] = hD - (hA + hB + hC);
hA = b4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
hB = b4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
hC = b4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
hD = b4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
b4EL[c4EL] = hA - (hB + hC + hD);
b4FL[c4FL] = hB - (hA + hC + hD);
b4GL[c4GL] = hC - (hA + hB + hD);
b4HL[c4HL] = hD - (hA + hB + hC);
c4EL++; if (c4EL < 0 || c4EL > d4E) c4EL = 0;
c4FL++; if (c4FL < 0 || c4FL > d4F) c4FL = 0;
c4GL++; if (c4GL < 0 || c4GL > d4G) c4GL = 0;
c4HL++; if (c4HL < 0 || c4HL > d4H) c4HL = 0;
hA = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4IL[c4IL] = hA - (hB + hC + hD);
a4JL[c4JL] = hB - (hA + hC + hD);
a4KL[c4KL] = hC - (hA + hB + hD);
a4LL[c4LL] = hD - (hA + hB + hC);
hA = b4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = b4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = b4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = b4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
b4IL[c4IL] = hA - (hB + hC + hD);
b4JL[c4JL] = hB - (hA + hC + hD);
b4KL[c4KL] = hC - (hA + hB + hD);
b4LL[c4LL] = hD - (hA + hB + hC);
c4IL++; if (c4IL < 0 || c4IL > d4I) c4IL = 0;
c4JL++; if (c4JL < 0 || c4JL > d4J) c4JL = 0;
c4KL++; if (c4KL < 0 || c4KL > d4K) c4KL = 0;
c4LL++; if (c4LL < 0 || c4LL > d4L) c4LL = 0;
hA = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4ML[c4ML] = hA - (hB + hC + hD);
a4NL[c4NL] = hB - (hA + hC + hD);
a4OL[c4OL] = hC - (hA + hB + hD);
a4PL[c4PL] = hD - (hA + hB + hC);
hA = b4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = b4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = b4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = b4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
b4ML[c4ML] = hA - (hB + hC + hD);
b4NL[c4NL] = hB - (hA + hC + hD);
b4OL[c4OL] = hC - (hA + hB + hD);
b4PL[c4PL] = hD - (hA + hB + hC);
c4ML++; if (c4ML < 0 || c4ML > d4M) c4ML = 0;
c4NL++; if (c4NL < 0 || c4NL > d4N) c4NL = 0;
c4OL++; if (c4OL < 0 || c4OL > d4O) c4OL = 0;
c4PL++; if (c4PL < 0 || c4PL > d4P) c4PL = 0;
hA = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
f4AL = hA - (hB + hC + hD);
f4BL = hB - (hA + hC + hD);
f4CL = hC - (hA + hB + hD);
f4DL = hD - (hA + hB + hC);//not actually crosschannel yet
mainSampleL = (hA + hB + hC + hD)*0.125;
hA = b4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = b4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = b4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = b4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
g4AL = hA - (hB + hC + hD);
g4BL = hB - (hA + hC + hD);
g4CL = hC - (hA + hB + hD);
g4DL = hD - (hA + hB + hC);
dualmonoSampleL = (hA + hB + hC + hD)*0.125;
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleR = bez[bez_SampL];
//right verbs
a4DR[c4DR] = mainSampleR + (f4AL * reg4n);
a4HR[c4HR] = mainSampleR + (f4BL * reg4n);
a4LR[c4LR] = mainSampleR + (f4CL * reg4n);
a4PR[c4PR] = mainSampleR + (f4DL * reg4n);
b4DR[c4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[c4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[c4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[c4PR] = dualmonoSampleR + (g4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
hA = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
a4CR[c4CR] = hA - (hB + hC + hD);
a4GR[c4GR] = hB - (hA + hC + hD);
a4KR[c4KR] = hC - (hA + hB + hD);
a4OR[c4OR] = hD - (hA + hB + hC);
hA = b4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = b4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = b4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = b4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
b4CR[c4CR] = hA - (hB + hC + hD);
b4GR[c4GR] = hB - (hA + hC + hD);
b4KR[c4KR] = hC - (hA + hB + hD);
b4OR[c4OR] = hD - (hA + hB + hC);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
hA = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
a4BR[c4BR] = hA - (hB + hC + hD);
a4FR[c4FR] = hB - (hA + hC + hD);
a4JR[c4JR] = hC - (hA + hB + hD);
a4NR[c4NR] = hD - (hA + hB + hC);
hA = b4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = b4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = b4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = b4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
b4BR[c4BR] = hA - (hB + hC + hD);
b4FR[c4FR] = hB - (hA + hC + hD);
b4JR[c4JR] = hC - (hA + hB + hD);
b4NR[c4NR] = hD - (hA + hB + hC);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
hA = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
a4AR[c4AR] = hA - (hB + hC + hD);
a4ER[c4ER] = hB - (hA + hC + hD);
a4IR[c4IR] = hC - (hA + hB + hD);
a4MR[c4MR] = hD - (hA + hB + hC);
hA = b4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = b4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = b4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = b4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
b4AR[c4AR] = hA - (hB + hC + hD);
b4ER[c4ER] = hB - (hA + hC + hD);
b4IR[c4IR] = hC - (hA + hB + hD);
b4MR[c4MR] = hD - (hA + hB + hC);
c4AR++; if (c4AR < 0 || c4AR > d4A) c4AR = 0;
c4ER++; if (c4ER < 0 || c4ER > d4E) c4ER = 0;
c4IR++; if (c4IR < 0 || c4IR > d4I) c4IR = 0;
c4MR++; if (c4MR < 0 || c4MR > d4M) c4MR = 0;
hA = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
f4DR = hA - (hB + hC + hD);
f4HR = hB - (hA + hC + hD);
f4LR = hC - (hA + hB + hD);
f4PR = hD - (hA + hB + hC);
mainSampleR = (hA + hB + hC + hD)*0.125;
hA = b4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = b4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = b4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = b4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
g4DR = hA - (hB + hC + hD);
g4HR = hB - (hA + hC + hD);
g4LR = hC - (hA + hB + hD);
g4PR = hD - (hA + hB + hC);
dualmonoSampleR = (hA + hB + hC + hD)*0.125;
//dual mono version is wider = 1.0 at the center
//with mainsample 0.0 and 2.0 (only at the edges)
//with mainsample out of phase when over 1.0
//couldn't re-do the arrays perfectly, so instead
//we keep exactly the same cross-matrix,
//but we flip the sides we're using for initial reverb.
//then, dualmono remains totally dualmono, and blend a bit in for wideness.
if (wider < 1.0) {
inputSampleL = (dualmonoSampleR*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleL*wider) + (mainSampleR*(1.0-wider));
} else {
inputSampleL = (dualmonoSampleR*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleL*(2.0-wider)) + (-mainSampleR*(wider-1.0));
}
inputSampleL = fmin(fmax(inputSampleL,-2.032610446872596),2.032610446872596);
long double X = inputSampleL * inputSampleL;
long double temp = inputSampleL * X;
inputSampleL -= (temp*0.125); temp *= X;
inputSampleL += (temp*0.0078125); temp *= X;
inputSampleL -= (temp*0.000244140625); temp *= X;
inputSampleL += (temp*0.000003814697265625); temp *= X;
inputSampleL -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
inputSampleR = fmin(fmax(inputSampleR,-2.032610446872596),2.032610446872596);
X = inputSampleR * inputSampleR;
temp = inputSampleR * X;
inputSampleR -= (temp*0.125); temp *= X;
inputSampleR += (temp*0.0078125); temp *= X;
inputSampleR -= (temp*0.000244140625); temp *= X;
inputSampleR += (temp*0.000003814697265625); temp *= X;
inputSampleR -= (temp*0.0000000298023223876953125); temp *= X;
//purestsaturation: sine, except all the corrections
//retain mantissa of a long double increasing power function
bez[bez_CL] = bez[bez_BL];
bez[bez_BL] = bez[bez_AL];
bez[bez_AL] = inputSampleL;
bez[bez_SampL] = 0.0;
bez[bez_CR] = bez[bez_BR];
bez[bez_BR] = bez[bez_AR];
bez[bez_AR] = inputSampleR;
bez[bez_SampR] = 0.0;
}
double X = bez[bez_cycle]*bezTrim;
double CBL = (bez[bez_CL]*(1.0-X))+(bez[bez_BL]*X);
double CBR = (bez[bez_CR]*(1.0-X))+(bez[bez_BR]*X);
double BAL = (bez[bez_BL]*(1.0-X))+(bez[bez_AL]*X);
double BAR = (bez[bez_BR]*(1.0-X))+(bez[bez_AR]*X);
inputSampleL = (bez[bez_BL]+(CBL*(1.0-X))+(BAL*X))*-0.25;
inputSampleR = (bez[bez_BR]+(CBR*(1.0-X))+(BAR*X))*-0.25;
bezF[bez_cycle] += derezFreq;
bezF[bez_SampL] += (inputSampleL * derezFreq);
bezF[bez_SampR] += (inputSampleR * derezFreq);
if (bezF[bez_cycle] > 1.0) { //hit the end point and we do a filter sample
bezF[bez_cycle] = 0.0;
bezF[bez_CL] = bezF[bez_BL];
bezF[bez_BL] = bezF[bez_AL];
bezF[bez_AL] = bezF[bez_SampL];
bezF[bez_SampL] = 0.0;
bezF[bez_CR] = bezF[bez_BR];
bezF[bez_BR] = bezF[bez_AR];
bezF[bez_AR] = bezF[bez_SampR];
bezF[bez_SampR] = 0.0;
}
X = bezF[bez_cycle]*bezFreqTrim;
double CBLfreq = (bezF[bez_CL]*(1.0-X))+(bezF[bez_BL]*X);
double BALfreq = (bezF[bez_BL]*(1.0-X))+(bezF[bez_AL]*X);
inputSampleL = (bezF[bez_BL]+(CBLfreq*(1.0-X))+(BALfreq*X))*0.5;
double CBRfreq = (bezF[bez_CR]*(1.0-X))+(bezF[bez_BR]*X);
double BARfreq = (bezF[bez_BR]*(1.0-X))+(bezF[bez_AR]*X);
inputSampleR = (bezF[bez_BR]+(CBRfreq*(1.0-X))+(BARfreq*X))*0.5;
//filtering the reverb separately, after making it
inputSampleL = (inputSampleL * wet)+(drySampleL * (1.0-wet));
inputSampleR = (inputSampleR * wet)+(drySampleR * (1.0-wet));
//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
*outputL = inputSampleL;
*outputR = inputSampleR;
//direct stereo out
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1 @@
_VerbThicEntry

225
plugins/MacAU/VerbThic/VerbThic.h Executable file
View file

@ -0,0 +1,225 @@
/*
* File: VerbThic.h
*
* Version: 1.0
*
* Created: 11/23/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "VerbThicVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __VerbThic_h__
#define __VerbThic_h__
#pragma mark ____VerbThic Parameters
// parameters
static const float kDefaultValue_ParamA = 0.5;
static const float kDefaultValue_ParamB = 1.0;
static const float kDefaultValue_ParamC = 1.0;
static const float kDefaultValue_ParamD = 0.0;
static const float kDefaultValue_ParamE = 1.0;
static CFStringRef kParameterAName = CFSTR("Replace");
static CFStringRef kParameterBName = CFSTR("Derez");
static CFStringRef kParameterCName = CFSTR("Filter");
static CFStringRef kParameterDName = CFSTR("Wider");
static CFStringRef kParameterEName = CFSTR("Dry/Wet");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
kParam_E =4,
//Add your parameters here...
kNumberOfParameters=5
};
const int d4A = 1439; const int d4B = 3; const int d4C = 259; const int d4D = 578;
const int d4E = 1562; const int d4F = 1152; const int d4G = 189; const int d4H = 3;
const int d4I = 9; const int d4J = 101; const int d4K = 34; const int d4L = 638;
const int d4M = 719; const int d4N = 1154; const int d4O = 38; const int d4P = 530; //1 to 108 ms, 358 seat club
#define FOURBYFOUR true // 358seat14393259x4 on 2025-11-09 VerbThic
#pragma mark ____VerbThic
class VerbThic : public AUEffectBase
{
public:
VerbThic(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~VerbThic () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
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 kVerbThicVersion; }
private:
double a4AL[d4A+5];
double a4BL[d4B+5];
double a4CL[d4C+5];
double a4DL[d4D+5];
double a4EL[d4E+5];
double a4FL[d4F+5];
double a4GL[d4G+5];
double a4HL[d4H+5];
double a4IL[d4I+5];
double a4JL[d4J+5];
double a4KL[d4K+5];
double a4LL[d4L+5];
double a4ML[d4M+5];
double a4NL[d4N+5];
double a4OL[d4O+5];
double a4PL[d4P+5];
double a4AR[d4A+5];
double a4BR[d4B+5];
double a4CR[d4C+5];
double a4DR[d4D+5];
double a4ER[d4E+5];
double a4FR[d4F+5];
double a4GR[d4G+5];
double a4HR[d4H+5];
double a4IR[d4I+5];
double a4JR[d4J+5];
double a4KR[d4K+5];
double a4LR[d4L+5];
double a4MR[d4M+5];
double a4NR[d4N+5];
double a4OR[d4O+5];
double a4PR[d4P+5];
int c4AL,c4BL,c4CL,c4DL,c4EL,c4FL,c4GL,c4HL;
int c4IL,c4JL,c4KL,c4LL,c4ML,c4NL,c4OL,c4PL;
int c4AR,c4BR,c4CR,c4DR,c4ER,c4FR,c4GR,c4HR;
int c4IR,c4JR,c4KR,c4LR,c4MR,c4NR,c4OR,c4PR;
double f4AL,f4BL,f4CL,f4DL,f4DR,f4HR,f4LR,f4PR;
//base stereo reverb
double b4AL[d4A+5];
double b4BL[d4B+5];
double b4CL[d4C+5];
double b4DL[d4D+5];
double b4EL[d4E+5];
double b4FL[d4F+5];
double b4GL[d4G+5];
double b4HL[d4H+5];
double b4IL[d4I+5];
double b4JL[d4J+5];
double b4KL[d4K+5];
double b4LL[d4L+5];
double b4ML[d4M+5];
double b4NL[d4N+5];
double b4OL[d4O+5];
double b4PL[d4P+5];
double b4AR[d4A+5];
double b4BR[d4B+5];
double b4CR[d4C+5];
double b4DR[d4D+5];
double b4ER[d4E+5];
double b4FR[d4F+5];
double b4GR[d4G+5];
double b4HR[d4H+5];
double b4IR[d4I+5];
double b4JR[d4J+5];
double b4KR[d4K+5];
double b4LR[d4L+5];
double b4MR[d4M+5];
double b4NR[d4N+5];
double b4OR[d4O+5];
double b4PR[d4P+5];
double g4AL,g4BL,g4CL,g4DL,g4DR,g4HR,g4LR,g4PR;
//changed letter is the dual mono, with rearranged grid
enum {
bez_AL,
bez_AR,
bez_BL,
bez_BR,
bez_CL,
bez_CR,
bez_SampL,
bez_SampR,
bez_cycle,
bez_total
}; //the new undersampling. bez signifies the bezier curve reconstruction
double bez[bez_total];
double bezF[bez_total];
uint32_t fpdL;
uint32_t fpdR;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: VerbThic.r
*
* Version: 1.0
*
* Created: 11/23/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "VerbThicVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_VerbThic 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VerbThic~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_VerbThic
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE VerbThic_COMP_SUBTYPE
#define COMP_MANUF VerbThic_COMP_MANF
#define VERSION kVerbThicVersion
#define NAME "Airwindows: VerbThic"
#define DESCRIPTION "VerbThic AU"
#define ENTRY_POINT "VerbThicEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,131 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* VerbThic */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* 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,
188,
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 = 785871041;
PBXWorkspaceStateSaveDate = 785871041;
};
perUserProjectItems = {
8B3D201C2ED766730020B133 /* PBXTextBookmark */ = 8B3D201C2ED766730020B133 /* PBXTextBookmark */;
8B3D207B2ED773320020B133 /* PBXTextBookmark */ = 8B3D207B2ED773320020B133 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B3D201C2ED766730020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* VerbThic.h */;
name = "VerbThic.h: 82";
rLen = 0;
rLoc = 3716;
rType = 0;
vrLen = 126;
vrLoc = 6812;
};
8B3D207B2ED773320020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* VerbThic.h */;
name = "VerbThic.h: 82";
rLen = 0;
rLoc = 3716;
rType = 0;
vrLen = 105;
vrLoc = 6812;
};
8BA05A660720730100365D66 /* VerbThic.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {952, 11520}}";
sepNavSelRange = "{14110, 11867}";
sepNavVisRange = "{13175, 1590}";
sepNavWindowFrame = "{{753, 114}, {999, 764}}";
};
};
8BA05A690720730100365D66 /* VerbThicVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1062}}";
sepNavSelRange = "{2900, 0}";
sepNavVisRange = "{1270, 1693}";
sepNavWindowFrame = "{{38, 88}, {999, 764}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {516, 23430}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1336}";
};
};
8BC6025B073B072D006C4272 /* VerbThic.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1038, 4212}}";
sepNavSelRange = "{3716, 0}";
sepNavVisRange = "{6812, 105}";
sepNavWindowFrame = "{{733, 97}, {999, 764}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* VerbThic */ = {
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 /* VerbThic.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* VerbThic.r */; };
8BA05A6B0720730100365D66 /* VerbThic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* VerbThic.cpp */; };
8BA05A6E0720730100365D66 /* VerbThicVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* VerbThicVersion.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 /* VerbThic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* VerbThic.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 /* VerbThic.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = VerbThic.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* VerbThic.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = VerbThic.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* VerbThic.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = VerbThic.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* VerbThicVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VerbThicVersion.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 /* VerbThic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VerbThic.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* VerbThic.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VerbThic.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 /* VerbThic */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = VerbThic;
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 /* VerbThic.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* VerbThic.h */,
8BA05A660720730100365D66 /* VerbThic.cpp */,
8BA05A670720730100365D66 /* VerbThic.exp */,
8BA05A680720730100365D66 /* VerbThic.r */,
8BA05A690720730100365D66 /* VerbThicVersion.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 /* VerbThicVersion.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 /* VerbThic.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 /* VerbThic */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "VerbThic" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = VerbThic;
productInstallPath = "$(HOME)/Library/Bundles";
productName = VerbThic;
productReference = 8D01CCD20486CAD60068D4B7 /* VerbThic.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 "VerbThic" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* VerbThic */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* VerbThic */,
);
};
/* 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 /* VerbThic.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* VerbThic.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 = VerbThic.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 = VerbThic;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = VerbThic.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 = VerbThic;
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 "VerbThic" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "VerbThic" */ = {
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: VerbThicVersion.h
*
* Version: 1.0
*
* Created: 11/23/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 __VerbThicVersion_h__
#define __VerbThicVersion_h__
#ifdef DEBUG
#define kVerbThicVersion 0xFFFFFFFF
#else
#define kVerbThicVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define VerbThic_COMP_MANF 'Dthr'
#define VerbThic_COMP_SUBTYPE 'vthc'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

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

@ -244,10 +244,6 @@ ComponentResult VerbTiny::Reset(AudioUnitScope inScope, AudioUnitElement inElem
for(int x = 0; x < d4N+2; x++) {b4NL[x] = 0.0; b4NR[x] = 0.0;}
for(int x = 0; x < d4O+2; x++) {b4OL[x] = 0.0; b4OR[x] = 0.0;}
for(int x = 0; x < d4P+2; x++) {b4PL[x] = 0.0; b4PR[x] = 0.0;}
e4AL = e4BL = e4CL = e4DL = e4EL = e4FL = e4GL = e4HL = 1;
e4IL = e4JL = e4KL = e4LL = e4ML = e4NL = e4OL = e4PL = 1;
e4AR = e4BR = e4CR = e4DR = e4ER = e4FR = e4GR = e4HR = 1;
e4IR = e4JR = e4KR = e4LR = e4MR = e4NR = e4OR = e4PR = 1;
g4AL = g4BL = g4CL = g4DL = 0.0;
g4DR = g4HR = g4LR = g4PR = 0.0;
@ -313,298 +309,215 @@ OSStatus VerbTiny::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlag
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
bez[bez_cycle] = 0.0;
double mainSampleL = bez[bez_SampL];
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleL = bez[bez_SampR];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
a4AL[c4AL] = mainSampleL + (f4AL * reg4n);
a4BL[c4BL] = mainSampleL + (f4BL * reg4n);
a4CL[c4CL] = mainSampleL + (f4CL * reg4n);
a4DL[c4DL] = mainSampleL + (f4DL * reg4n);
//left verbs
a4AL[c4AL] = mainSampleL + (f4DR * reg4n);
a4BL[c4BL] = mainSampleL + (f4HR * reg4n);
a4CL[c4CL] = mainSampleL + (f4LR * reg4n);
a4DL[c4DL] = mainSampleL + (f4PR * reg4n);
b4AL[c4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[c4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[c4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[c4DL] = dualmonoSampleL + (g4DL * reg4n);
c4AL++; if (c4AL < 0 || c4AL > d4A) c4AL = 0;
c4BL++; if (c4BL < 0 || c4BL > d4B) c4BL = 0;
c4CL++; if (c4CL < 0 || c4CL > d4C) c4CL = 0;
c4DL++; if (c4DL < 0 || c4DL > d4D) c4DL = 0;
double o4AL = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double o4BL = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double o4CL = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double o4DL = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4DR[c4DR] = mainSampleR + (f4DR * reg4n);
a4HR[c4HR] = mainSampleR + (f4HR * reg4n);
a4LR[c4LR] = mainSampleR + (f4LR * reg4n);
a4PR[c4PR] = mainSampleR + (f4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
double o4DR = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
double o4HR = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
double o4LR = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
double o4PR = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
//-------- one
a4EL[c4EL] = o4AL - (o4BL + o4CL + o4DL);
a4FL[c4FL] = o4BL - (o4AL + o4CL + o4DL);
a4GL[c4GL] = o4CL - (o4AL + o4BL + o4DL);
a4HL[c4HL] = o4DL - (o4AL + o4BL + o4CL);
double hA = a4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
double hB = a4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
double hC = a4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
double hD = a4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
a4EL[c4EL] = hA - (hB + hC + hD);
a4FL[c4FL] = hB - (hA + hC + hD);
a4GL[c4GL] = hC - (hA + hB + hD);
a4HL[c4HL] = hD - (hA + hB + hC);
hA = b4AL[c4AL-((c4AL > d4A)?d4A+1:0)];
hB = b4BL[c4BL-((c4BL > d4B)?d4B+1:0)];
hC = b4CL[c4CL-((c4CL > d4C)?d4C+1:0)];
hD = b4DL[c4DL-((c4DL > d4D)?d4D+1:0)];
b4EL[c4EL] = hA - (hB + hC + hD);
b4FL[c4FL] = hB - (hA + hC + hD);
b4GL[c4GL] = hC - (hA + hB + hD);
b4HL[c4HL] = hD - (hA + hB + hC);
c4EL++; if (c4EL < 0 || c4EL > d4E) c4EL = 0;
c4FL++; if (c4FL < 0 || c4FL > d4F) c4FL = 0;
c4GL++; if (c4GL < 0 || c4GL > d4G) c4GL = 0;
c4HL++; if (c4HL < 0 || c4HL > d4H) c4HL = 0;
double o4EL = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
double o4FL = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
double o4GL = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
double o4HL = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4CR[c4CR] = o4DR - (o4HR + o4LR + o4PR);
a4GR[c4GR] = o4HR - (o4DR + o4LR + o4PR);
a4KR[c4KR] = o4LR - (o4DR + o4HR + o4PR);
a4OR[c4OR] = o4PR - (o4DR + o4HR + o4LR);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
double o4CR = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
double o4GR = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
double o4KR = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
double o4OR = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
//-------- two
a4IL[c4IL] = o4EL - (o4FL + o4GL + o4HL);
a4JL[c4JL] = o4FL - (o4EL + o4GL + o4HL);
a4KL[c4KL] = o4GL - (o4EL + o4FL + o4HL);
a4LL[c4LL] = o4HL - (o4EL + o4FL + o4GL);
hA = a4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = a4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = a4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = a4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
a4IL[c4IL] = hA - (hB + hC + hD);
a4JL[c4JL] = hB - (hA + hC + hD);
a4KL[c4KL] = hC - (hA + hB + hD);
a4LL[c4LL] = hD - (hA + hB + hC);
hA = b4EL[c4EL-((c4EL > d4E)?d4E+1:0)];
hB = b4FL[c4FL-((c4FL > d4F)?d4F+1:0)];
hC = b4GL[c4GL-((c4GL > d4G)?d4G+1:0)];
hD = b4HL[c4HL-((c4HL > d4H)?d4H+1:0)];
b4IL[c4IL] = hA - (hB + hC + hD);
b4JL[c4JL] = hB - (hA + hC + hD);
b4KL[c4KL] = hC - (hA + hB + hD);
b4LL[c4LL] = hD - (hA + hB + hC);
c4IL++; if (c4IL < 0 || c4IL > d4I) c4IL = 0;
c4JL++; if (c4JL < 0 || c4JL > d4J) c4JL = 0;
c4KL++; if (c4KL < 0 || c4KL > d4K) c4KL = 0;
c4LL++; if (c4LL < 0 || c4LL > d4L) c4LL = 0;
double o4IL = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
double o4JL = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
double o4KL = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
double o4LL = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4BR[c4BR] = o4CR - (o4GR + o4KR + o4OR);
a4FR[c4FR] = o4GR - (o4CR + o4KR + o4OR);
a4JR[c4JR] = o4KR - (o4CR + o4GR + o4OR);
a4NR[c4NR] = o4OR - (o4CR + o4GR + o4KR);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
double o4BR = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
double o4FR = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
double o4JR = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
double o4NR = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
//-------- three
a4ML[c4ML] = o4IL - (o4JL + o4KL + o4LL);
a4NL[c4NL] = o4JL - (o4IL + o4KL + o4LL);
a4OL[c4OL] = o4KL - (o4IL + o4JL + o4LL);
a4PL[c4PL] = o4LL - (o4IL + o4JL + o4KL);
hA = a4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = a4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = a4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = a4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
a4ML[c4ML] = hA - (hB + hC + hD);
a4NL[c4NL] = hB - (hA + hC + hD);
a4OL[c4OL] = hC - (hA + hB + hD);
a4PL[c4PL] = hD - (hA + hB + hC);
hA = b4IL[c4IL-((c4IL > d4I)?d4I+1:0)];
hB = b4JL[c4JL-((c4JL > d4J)?d4J+1:0)];
hC = b4KL[c4KL-((c4KL > d4K)?d4K+1:0)];
hD = b4LL[c4LL-((c4LL > d4L)?d4L+1:0)];
b4ML[c4ML] = hA - (hB + hC + hD);
b4NL[c4NL] = hB - (hA + hC + hD);
b4OL[c4OL] = hC - (hA + hB + hD);
b4PL[c4PL] = hD - (hA + hB + hC);
c4ML++; if (c4ML < 0 || c4ML > d4M) c4ML = 0;
c4NL++; if (c4NL < 0 || c4NL > d4N) c4NL = 0;
c4OL++; if (c4OL < 0 || c4OL > d4O) c4OL = 0;
c4PL++; if (c4PL < 0 || c4PL > d4P) c4PL = 0;
double o4ML = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
double o4NL = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
double o4OL = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
double o4PL = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
hA = a4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = a4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = a4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = a4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
f4AL = hA - (hB + hC + hD);
f4BL = hB - (hA + hC + hD);
f4CL = hC - (hA + hB + hD);
f4DL = hD - (hA + hB + hC);//not actually crosschannel yet
mainSampleL = (hA + hB + hC + hD)*0.125;
a4AR[c4AR] = o4BR - (o4FR + o4JR + o4NR);
a4ER[c4ER] = o4FR - (o4BR + o4JR + o4NR);
a4IR[c4IR] = o4JR - (o4BR + o4FR + o4NR);
a4MR[c4MR] = o4NR - (o4BR + o4FR + o4JR);
hA = b4ML[c4ML-((c4ML > d4M)?d4M+1:0)];
hB = b4NL[c4NL-((c4NL > d4N)?d4N+1:0)];
hC = b4OL[c4OL-((c4OL > d4O)?d4O+1:0)];
hD = b4PL[c4PL-((c4PL > d4P)?d4P+1:0)];
g4AL = hA - (hB + hC + hD);
g4BL = hB - (hA + hC + hD);
g4CL = hC - (hA + hB + hD);
g4DL = hD - (hA + hB + hC);
dualmonoSampleL = (hA + hB + hC + hD)*0.125;
double mainSampleR = bez[bez_SampR]; //begin primary reverb
double dualmonoSampleR = bez[bez_SampL];
//right verbs
a4DR[c4DR] = mainSampleR + (f4AL * reg4n);
a4HR[c4HR] = mainSampleR + (f4BL * reg4n);
a4LR[c4LR] = mainSampleR + (f4CL * reg4n);
a4PR[c4PR] = mainSampleR + (f4DL * reg4n);
b4DR[c4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[c4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[c4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[c4PR] = dualmonoSampleR + (g4PR * reg4n);
c4DR++; if (c4DR < 0 || c4DR > d4D) c4DR = 0;
c4HR++; if (c4HR < 0 || c4HR > d4H) c4HR = 0;
c4LR++; if (c4LR < 0 || c4LR > d4L) c4LR = 0;
c4PR++; if (c4PR < 0 || c4PR > d4P) c4PR = 0;
hA = a4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = a4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = a4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = a4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
a4CR[c4CR] = hA - (hB + hC + hD);
a4GR[c4GR] = hB - (hA + hC + hD);
a4KR[c4KR] = hC - (hA + hB + hD);
a4OR[c4OR] = hD - (hA + hB + hC);
hA = b4DR[c4DR-((c4DR > d4D)?d4D+1:0)];
hB = b4HR[c4HR-((c4HR > d4H)?d4H+1:0)];
hC = b4LR[c4LR-((c4LR > d4L)?d4L+1:0)];
hD = b4PR[c4PR-((c4PR > d4P)?d4P+1:0)];
b4CR[c4CR] = hA - (hB + hC + hD);
b4GR[c4GR] = hB - (hA + hC + hD);
b4KR[c4KR] = hC - (hA + hB + hD);
b4OR[c4OR] = hD - (hA + hB + hC);
c4CR++; if (c4CR < 0 || c4CR > d4C) c4CR = 0;
c4GR++; if (c4GR < 0 || c4GR > d4G) c4GR = 0;
c4KR++; if (c4KR < 0 || c4KR > d4K) c4KR = 0;
c4OR++; if (c4OR < 0 || c4OR > d4O) c4OR = 0;
hA = a4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = a4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = a4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = a4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
a4BR[c4BR] = hA - (hB + hC + hD);
a4FR[c4FR] = hB - (hA + hC + hD);
a4JR[c4JR] = hC - (hA + hB + hD);
a4NR[c4NR] = hD - (hA + hB + hC);
hA = b4CR[c4CR-((c4CR > d4C)?d4C+1:0)];
hB = b4GR[c4GR-((c4GR > d4G)?d4G+1:0)];
hC = b4KR[c4KR-((c4KR > d4K)?d4K+1:0)];
hD = b4OR[c4OR-((c4OR > d4O)?d4O+1:0)];
b4BR[c4BR] = hA - (hB + hC + hD);
b4FR[c4FR] = hB - (hA + hC + hD);
b4JR[c4JR] = hC - (hA + hB + hD);
b4NR[c4NR] = hD - (hA + hB + hC);
c4BR++; if (c4BR < 0 || c4BR > d4B) c4BR = 0;
c4FR++; if (c4FR < 0 || c4FR > d4F) c4FR = 0;
c4JR++; if (c4JR < 0 || c4JR > d4J) c4JR = 0;
c4NR++; if (c4NR < 0 || c4NR > d4N) c4NR = 0;
hA = a4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = a4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = a4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = a4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
a4AR[c4AR] = hA - (hB + hC + hD);
a4ER[c4ER] = hB - (hA + hC + hD);
a4IR[c4IR] = hC - (hA + hB + hD);
a4MR[c4MR] = hD - (hA + hB + hC);
hA = b4BR[c4BR-((c4BR > d4B)?d4B+1:0)];
hB = b4FR[c4FR-((c4FR > d4F)?d4F+1:0)];
hC = b4JR[c4JR-((c4JR > d4J)?d4J+1:0)];
hD = b4NR[c4NR-((c4NR > d4N)?d4N+1:0)];
b4AR[c4AR] = hA - (hB + hC + hD);
b4ER[c4ER] = hB - (hA + hC + hD);
b4IR[c4IR] = hC - (hA + hB + hD);
b4MR[c4MR] = hD - (hA + hB + hC);
c4AR++; if (c4AR < 0 || c4AR > d4A) c4AR = 0;
c4ER++; if (c4ER < 0 || c4ER > d4E) c4ER = 0;
c4IR++; if (c4IR < 0 || c4IR > d4I) c4IR = 0;
c4MR++; if (c4MR < 0 || c4MR > d4M) c4MR = 0;
double o4AR = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
double o4ER = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
double o4IR = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
double o4MR = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
hA = a4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = a4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = a4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = a4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
f4DR = hA - (hB + hC + hD);
f4HR = hB - (hA + hC + hD);
f4LR = hC - (hA + hB + hD);
f4PR = hD - (hA + hB + hC);
mainSampleR = (hA + hB + hC + hD)*0.125;
//-------- four
f4AL = o4AR - (o4ER + o4IR + o4MR);
f4BL = o4ER - (o4AR + o4IR + o4MR);
f4CL = o4IR - (o4AR + o4ER + o4MR);
f4DL = o4MR - (o4AR + o4ER + o4IR);
f4DR = o4ML - (o4NL + o4OL + o4PL);
f4HR = o4NL - (o4ML + o4OL + o4PL);
f4LR = o4OL - (o4ML + o4NL + o4PL);
f4PR = o4PL - (o4ML + o4NL + o4OL);
mainSampleL = (o4ML + o4NL + o4OL + o4PL)*0.125;
mainSampleR = (o4AR + o4ER + o4IR + o4MR)*0.125;
//we still have an untouched inputsample, turn it into dual mono
//won't need to redeclare any of the o4 temp variables, just re-use
double dualmonoSampleL = bez[bez_SampR];
double dualmonoSampleR = bez[bez_SampL];
//workaround involves keeping the cross-matrix system,
//but for initial layering, each side gets each version
//making blends never quite line up as exactly the same.
b4AL[e4AL] = dualmonoSampleL + (g4AL * reg4n);
b4BL[e4BL] = dualmonoSampleL + (g4BL * reg4n);
b4CL[e4CL] = dualmonoSampleL + (g4CL * reg4n);
b4DL[e4DL] = dualmonoSampleL + (g4DL * reg4n);
e4AL++; if (e4AL < 0 || e4AL > d4A) e4AL = 0;
e4BL++; if (e4BL < 0 || e4BL > d4B) e4BL = 0;
e4CL++; if (e4CL < 0 || e4CL > d4C) e4CL = 0;
e4DL++; if (e4DL < 0 || e4DL > d4D) e4DL = 0;
o4AL = b4AL[e4AL-((e4AL > d4A)?d4A+1:0)];
o4BL = b4BL[e4BL-((e4BL > d4B)?d4B+1:0)];
o4CL = b4CL[e4CL-((e4CL > d4C)?d4C+1:0)];
o4DL = b4DL[e4DL-((e4DL > d4D)?d4D+1:0)];
b4DR[e4DR] = dualmonoSampleR + (g4DR * reg4n);
b4HR[e4HR] = dualmonoSampleR + (g4HR * reg4n);
b4LR[e4LR] = dualmonoSampleR + (g4LR * reg4n);
b4PR[e4PR] = dualmonoSampleR + (g4PR * reg4n);
e4DR++; if (e4DR < 0 || e4DR > d4D) e4DR = 0;
e4HR++; if (e4HR < 0 || e4HR > d4H) e4HR = 0;
e4LR++; if (e4LR < 0 || e4LR > d4L) e4LR = 0;
e4PR++; if (e4PR < 0 || e4PR > d4P) e4PR = 0;
o4DR = b4DR[e4DR-((e4DR > d4D)?d4D+1:0)];
o4HR = b4HR[e4HR-((e4HR > d4H)?d4H+1:0)];
o4LR = b4LR[e4LR-((e4LR > d4L)?d4L+1:0)];
o4PR = b4PR[e4PR-((e4PR > d4P)?d4P+1:0)];
//-------- one
b4EL[e4EL] = o4AL - (o4BL + o4CL + o4DL);
b4FL[e4FL] = o4BL - (o4AL + o4CL + o4DL);
b4GL[e4GL] = o4CL - (o4AL + o4BL + o4DL);
b4HL[e4HL] = o4DL - (o4AL + o4BL + o4CL);
e4EL++; if (e4EL < 0 || e4EL > d4E) e4EL = 0;
e4FL++; if (e4FL < 0 || e4FL > d4F) e4FL = 0;
e4GL++; if (e4GL < 0 || e4GL > d4G) e4GL = 0;
e4HL++; if (e4HL < 0 || e4HL > d4H) e4HL = 0;
o4EL = b4EL[e4EL-((e4EL > d4E)?d4E+1:0)];
o4FL = b4FL[e4FL-((e4FL > d4F)?d4F+1:0)];
o4GL = b4GL[e4GL-((e4GL > d4G)?d4G+1:0)];
o4HL = b4HL[e4HL-((e4HL > d4H)?d4H+1:0)];
b4CR[e4CR] = o4DR - (o4HR + o4LR + o4PR);
b4GR[e4GR] = o4HR - (o4DR + o4LR + o4PR);
b4KR[e4KR] = o4LR - (o4DR + o4HR + o4PR);
b4OR[e4OR] = o4PR - (o4DR + o4HR + o4LR);
e4CR++; if (e4CR < 0 || e4CR > d4C) e4CR = 0;
e4GR++; if (e4GR < 0 || e4GR > d4G) e4GR = 0;
e4KR++; if (e4KR < 0 || e4KR > d4K) e4KR = 0;
e4OR++; if (e4OR < 0 || e4OR > d4O) e4OR = 0;
o4CR = b4CR[e4CR-((e4CR > d4C)?d4C+1:0)];
o4GR = b4GR[e4GR-((e4GR > d4G)?d4G+1:0)];
o4KR = b4KR[e4KR-((e4KR > d4K)?d4K+1:0)];
o4OR = b4OR[e4OR-((e4OR > d4O)?d4O+1:0)];
//-------- two
b4IL[e4IL] = o4EL - (o4FL + o4GL + o4HL);
b4JL[e4JL] = o4FL - (o4EL + o4GL + o4HL);
b4KL[e4KL] = o4GL - (o4EL + o4FL + o4HL);
b4LL[e4LL] = o4HL - (o4EL + o4FL + o4GL);
e4IL++; if (e4IL < 0 || e4IL > d4I) e4IL = 0;
e4JL++; if (e4JL < 0 || e4JL > d4J) e4JL = 0;
e4KL++; if (e4KL < 0 || e4KL > d4K) e4KL = 0;
e4LL++; if (e4LL < 0 || e4LL > d4L) e4LL = 0;
o4IL = b4IL[e4IL-((e4IL > d4I)?d4I+1:0)];
o4JL = b4JL[e4JL-((e4JL > d4J)?d4J+1:0)];
o4KL = b4KL[e4KL-((e4KL > d4K)?d4K+1:0)];
o4LL = b4LL[e4LL-((e4LL > d4L)?d4L+1:0)];
b4BR[e4BR] = o4CR - (o4GR + o4KR + o4OR);
b4FR[e4FR] = o4GR - (o4CR + o4KR + o4OR);
b4JR[e4JR] = o4KR - (o4CR + o4GR + o4OR);
b4NR[e4NR] = o4OR - (o4CR + o4GR + o4KR);
e4BR++; if (e4BR < 0 || e4BR > d4B) e4BR = 0;
e4FR++; if (e4FR < 0 || e4FR > d4F) e4FR = 0;
e4JR++; if (e4JR < 0 || e4JR > d4J) e4JR = 0;
e4NR++; if (e4NR < 0 || e4NR > d4N) e4NR = 0;
o4BR = b4BR[e4BR-((e4BR > d4B)?d4B+1:0)];
o4FR = b4FR[e4FR-((e4FR > d4F)?d4F+1:0)];
o4JR = b4JR[e4JR-((e4JR > d4J)?d4J+1:0)];
o4NR = b4NR[e4NR-((e4NR > d4N)?d4N+1:0)];
//-------- three
b4ML[e4ML] = o4IL - (o4JL + o4KL + o4LL);
b4NL[e4NL] = o4JL - (o4IL + o4KL + o4LL);
b4OL[e4OL] = o4KL - (o4IL + o4JL + o4LL);
b4PL[e4PL] = o4LL - (o4IL + o4JL + o4KL);
e4ML++; if (e4ML < 0 || e4ML > d4M) e4ML = 0;
e4NL++; if (e4NL < 0 || e4NL > d4N) e4NL = 0;
e4OL++; if (e4OL < 0 || e4OL > d4O) e4OL = 0;
e4PL++; if (e4PL < 0 || e4PL > d4P) e4PL = 0;
o4ML = b4ML[e4ML-((e4ML > d4M)?d4M+1:0)];
o4NL = b4NL[e4NL-((e4NL > d4N)?d4N+1:0)];
o4OL = b4OL[e4OL-((e4OL > d4O)?d4O+1:0)];
o4PL = b4PL[e4PL-((e4PL > d4P)?d4P+1:0)];
b4AR[e4AR] = o4BR - (o4FR + o4JR + o4NR);
b4ER[e4ER] = o4FR - (o4BR + o4JR + o4NR);
b4IR[e4IR] = o4JR - (o4BR + o4FR + o4NR);
b4MR[e4MR] = o4NR - (o4BR + o4FR + o4JR);
e4AR++; if (e4AR < 0 || e4AR > d4A) e4AR = 0;
e4ER++; if (e4ER < 0 || e4ER > d4E) e4ER = 0;
e4IR++; if (e4IR < 0 || e4IR > d4I) e4IR = 0;
e4MR++; if (e4MR < 0 || e4MR > d4M) e4MR = 0;
o4AR = b4AR[e4AR-((e4AR > d4A)?d4A+1:0)];
o4ER = b4ER[e4ER-((e4ER > d4E)?d4E+1:0)];
o4IR = b4IR[e4IR-((e4IR > d4I)?d4I+1:0)];
o4MR = b4MR[e4MR-((e4MR > d4M)?d4M+1:0)];
//-------- four
g4DR = o4AR - (o4ER + o4IR + o4MR);
g4HR = o4ER - (o4AR + o4IR + o4MR);
g4LR = o4IR - (o4AR + o4ER + o4MR);
g4PR = o4MR - (o4AR + o4ER + o4IR);
g4AL = o4ML - (o4NL + o4OL + o4PL);
g4BL = o4NL - (o4ML + o4OL + o4PL);
g4CL = o4OL - (o4ML + o4NL + o4PL);
g4DL = o4PL - (o4ML + o4NL + o4OL);
dualmonoSampleR = (o4ML + o4NL + o4OL + o4PL)*0.125;
dualmonoSampleL = (o4AR + o4ER + o4IR + o4MR)*0.125;
hA = b4AR[c4AR-((c4AR > d4A)?d4A+1:0)];
hB = b4ER[c4ER-((c4ER > d4E)?d4E+1:0)];
hC = b4IR[c4IR-((c4IR > d4I)?d4I+1:0)];
hD = b4MR[c4MR-((c4MR > d4M)?d4M+1:0)];
g4DR = hA - (hB + hC + hD);
g4HR = hB - (hA + hC + hD);
g4LR = hC - (hA + hB + hD);
g4PR = hD - (hA + hB + hC);
dualmonoSampleR = (hA + hB + hC + hD)*0.125;
//dual mono version is wider = 1.0 at the center
//with mainsample 0.0 and 2.0 (only at the edges)
//with mainsample out of phase when over 1.0
@ -614,11 +527,11 @@ OSStatus VerbTiny::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlag
//then, dualmono remains totally dualmono, and blend a bit in for wideness.
if (wider < 1.0) {
inputSampleL = (dualmonoSampleL*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleR*wider) + (mainSampleR*(1.0-wider));
inputSampleL = (dualmonoSampleR*wider) + (mainSampleL*(1.0-wider));
inputSampleR = (dualmonoSampleL*wider) + (mainSampleR*(1.0-wider));
} else {
inputSampleL = (dualmonoSampleL*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleR*(2.0-wider)) + (-mainSampleR*(wider-1.0));
inputSampleL = (dualmonoSampleR*(2.0-wider)) + (mainSampleL*(wider-1.0));
inputSampleR = (dualmonoSampleL*(2.0-wider)) + (-mainSampleR*(wider-1.0));
}
bez[bez_CL] = bez[bez_BL];

View file

@ -197,10 +197,6 @@ public:
double b4NR[d4N+5];
double b4OR[d4O+5];
double b4PR[d4P+5];
int e4AL,e4BL,e4CL,e4DL,e4EL,e4FL,e4GL,e4HL;
int e4IL,e4JL,e4KL,e4LL,e4ML,e4NL,e4OL,e4PL;
int e4AR,e4BR,e4CR,e4DR,e4ER,e4FR,e4GR,e4HR;
int e4IR,e4JR,e4KR,e4LR,e4MR,e4NR,e4OR,e4PR;
double g4AL,g4BL,g4CL,g4DL,g4DR,g4HR,g4LR,g4PR;
//changed letter is the dual mono, with rearranged grid

View file

@ -51,42 +51,78 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 785500090;
PBXWorkspaceStateSaveDate = 785500090;
PBXPerProjectTemplateStateSaveDate = 785700848;
PBXWorkspaceStateSaveDate = 785700848;
};
perUserProjectItems = {
8B3D1E0C2ED4D85C0020B133 /* PBXBookmark */ = 8B3D1E0C2ED4D85C0020B133 /* PBXBookmark */;
8B3D1E102ED4D8C60020B133 /* PBXTextBookmark */ = 8B3D1E102ED4D8C60020B133 /* PBXTextBookmark */;
8B3D1E152ED4D8DE0020B133 /* PBXTextBookmark */ = 8B3D1E152ED4D8DE0020B133 /* PBXTextBookmark */;
8B3D1E1B2ED4D8DE0020B133 /* PBXTextBookmark */ = 8B3D1E1B2ED4D8DE0020B133 /* PBXTextBookmark */;
8B8C63E12EC2B04A008CA66C /* PBXTextBookmark */ = 8B8C63E12EC2B04A008CA66C /* PBXTextBookmark */;
8BFFBC6C2ED133D400188089 /* PBXTextBookmark */ = 8BFFBC6C2ED133D400188089 /* PBXTextBookmark */;
8BFFBCBA2ED1D18A00188089 /* PBXTextBookmark */ = 8BFFBCBA2ED1D18A00188089 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B3D1E0C2ED4D85C0020B133 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A660720730100365D66 /* VerbTiny.cpp */;
};
8B3D1E102ED4D8C60020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* VerbTiny.cpp */;
name = "VerbTiny.cpp: 600";
rLen = 0;
rLoc = 25509;
rType = 0;
vrLen = 66;
vrLoc = 3;
};
8B3D1E152ED4D8DE0020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* VerbTiny.cpp */;
name = "VerbTiny.cpp: 600";
rLen = 0;
rLoc = 25509;
rType = 0;
vrLen = 66;
vrLoc = 3;
};
8B3D1E1B2ED4D8DE0020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* VerbTiny.cpp */;
name = "VerbTiny.cpp: 600";
rLen = 0;
rLoc = 25509;
rType = 0;
vrLen = 1484;
vrLoc = 13572;
};
8B8C63E12EC2B04A008CA66C /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* VerbTiny.h */;
name = "VerbTiny.h: 169";
rLen = 0;
rLoc = 7585;
rLoc = 7399;
rType = 0;
vrLen = 35;
vrLoc = 6481;
};
8BA05A660720730100365D66 /* VerbTiny.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {554, 12276}}";
sepNavSelRange = "{27066, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{439, 105}, {999, 764}}";
sepNavIntBoundsRect = "{{0, 0}, {1029, 10980}}";
sepNavSelRange = "{25509, 0}";
sepNavVisRange = "{3, 66}";
sepNavWindowFrame = "{{446, 105}, {999, 764}}";
};
};
8BA05A690720730100365D66 /* VerbTinyVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1062}}";
sepNavSelRange = "{2900, 0}";
sepNavVisRange = "{862, 2101}";
sepNavWindowFrame = "{{15, 38}, {843, 840}}";
sepNavSelRange = "{2608, 0}";
sepNavVisRange = "{761, 2202}";
sepNavWindowFrame = "{{758, 38}, {843, 840}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
@ -98,9 +134,9 @@
};
8BC6025B073B072D006C4272 /* VerbTiny.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 4698}}";
sepNavSelRange = "{7585, 0}";
sepNavVisRange = "{7012, 883}";
sepNavIntBoundsRect = "{{0, 0}, {1146, 4626}}";
sepNavSelRange = "{7222, 0}";
sepNavVisRange = "{6949, 766}";
sepNavWindowFrame = "{{597, 38}, {843, 840}}";
};
};
@ -118,26 +154,6 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8BFFBC6C2ED133D400188089 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* VerbTiny.cpp */;
name = "VerbTiny.cpp: 647";
rLen = 0;
rLoc = 27066;
rType = 0;
vrLen = 49;
vrLoc = 20936;
};
8BFFBCBA2ED1D18A00188089 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* VerbTiny.cpp */;
name = "VerbTiny.cpp: 646";
rLen = 0;
rLoc = 27066;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8D01CCC60486CAD60068D4B7 /* VerbTiny */ = {
activeExec = 0;
};

View file

@ -222,7 +222,48 @@
</dict>
</array>
<key>OpenEditors</key>
<array/>
<array>
<dict>
<key>Content</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8B3D1E192ED4D8DE0020B133</string>
<key>PBXProjectModuleLabel</key>
<string>VerbTiny.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8B3D1E1A2ED4D8DE0020B133</string>
<key>PBXProjectModuleLabel</key>
<string>VerbTiny.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B3D1E1B2ED4D8DE0020B133</string>
<key>history</key>
<array>
<string>8B3D1E0C2ED4D85C0020B133</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}, {999, 667}}</string>
<key>PBXModuleWindowStatusBarHidden2</key>
<false/>
<key>RubberWindowFrame</key>
<string>446 161 999 708 0 0 1440 878 </string>
</dict>
</dict>
</array>
<key>PerspectiveWidths</key>
<array>
<integer>810</integer>
@ -256,8 +297,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -324,7 +363,7 @@
<real>185</real>
</array>
<key>RubberWindowFrame</key>
<string>638 168 810 487 0 0 1440 878 </string>
<string>611 278 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -352,11 +391,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BFFBCBA2ED1D18A00188089</string>
<string>8B3D1E152ED4D8DE0020B133</string>
<key>history</key>
<array>
<string>8B8C63E12EC2B04A008CA66C</string>
<string>8BFFBC6C2ED133D400188089</string>
<string>8B3D1E102ED4D8C60020B133</string>
</array>
</dict>
<key>SplitCount</key>
@ -370,18 +409,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 32}}</string>
<string>{{0, 0}, {603, 132}}</string>
<key>RubberWindowFrame</key>
<string>638 168 810 487 0 0 1440 878 </string>
<string>611 278 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>32pt</string>
<string>132pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>409pt</string>
<string>309pt</string>
<key>Tabs</key>
<array>
<dict>
@ -395,9 +434,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 382}}</string>
<key>RubberWindowFrame</key>
<string>638 168 810 487 0 0 1440 878 </string>
<string>{{10, 27}, {603, 282}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -451,7 +488,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 345}}</string>
<string>{{10, 27}, {603, 282}}</string>
<key>RubberWindowFrame</key>
<string>611 278 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -479,11 +518,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8BFFBC792ED1C7BE00188089</string>
<string>8B3D1E162ED4D8DE0020B133</string>
<string>1CA23ED40692098700951B8B</string>
<string>8BFFBC7A2ED1C7BE00188089</string>
<string>8B3D1E172ED4D8DE0020B133</string>
<string>8B7264FA2EC29D270065D50D</string>
<string>8BFFBC7B2ED1C7BE00188089</string>
<string>8B3D1E182ED4D8DE0020B133</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -656,7 +695,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>785502602.92543697</real>
<real>785701086.95550394</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -673,10 +712,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B3D1E192ED4D8DE0020B133</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/VerbTiny/VerbTiny.xcodeproj</string>
</array>
<key>WindowString</key>
<string>638 168 810 487 0 0 1440 878 </string>
<string>611 278 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -339,7 +339,7 @@ OSStatus kWoodRoom::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFla
bezFreqTrim = 1.0-pow(derezFreq*0.5,1.0/(derezFreq*0.5));
} //the revision more accurately connects the bezier curves
double earlyLoudness = GetParameter( kParam_D )*2.0;
double earlyLoudness = pow(GetParameter( kParam_D ),2.0);
int start = (int)(GetParameter( kParam_E ) * 27.0);
int ld3G = early[start];
int ld3H = early[start+1];
@ -361,17 +361,14 @@ OSStatus kWoodRoom::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFla
double drySampleR = inputSampleR;
bez[bez_cycle] += derez;
bez[bez_SampL] += ((inputSampleL+bez[bez_InL]) * derez);
bez[bez_SampR] += ((inputSampleR+bez[bez_InR]) * derez);
bez[bez_InL] = inputSampleL; bez[bez_InR] = inputSampleR;
bez[bez_SampL] += (inputSampleL * derez);
bez[bez_SampR] += (inputSampleR * derez);
if (bez[bez_cycle] > 1.0) { //hit the end point and we do a reverb sample
if (stepped) bez[bez_cycle] = 0.0;
else bez[bez_cycle] -= 1.0;
inputSampleL = (bez[bez_SampL]+bez[bez_AvgInSampL])*0.5;
bez[bez_AvgInSampL] = bez[bez_SampL];
inputSampleR = (bez[bez_SampR]+bez[bez_AvgInSampR])*0.5;
bez[bez_AvgInSampR] = bez[bez_SampR];
inputSampleL = (bez[bez_SampL]);
inputSampleR = (bez[bez_SampR]);
a3AL[c3AL] = inputSampleL;// + (f3AL * reg3n);
a3BL[c3BL] = inputSampleL;// + (f3BL * reg3n);
@ -381,96 +378,68 @@ OSStatus kWoodRoom::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFla
a3FR[c3FR] = inputSampleR;// + (f3FR * reg3n);
a3IR[c3IR] = inputSampleR;// + (f3IR * reg3n);
c3AL++; if (c3AL < 0 || c3AL > ld3A) c3AL = 0;
c3BL++; if (c3BL < 0 || c3BL > ld3B) c3BL = 0;
c3CL++; if (c3CL < 0 || c3CL > ld3C) c3CL = 0;
c3CR++; if (c3CR < 0 || c3CR > ld3C) c3CR = 0;
c3FR++; if (c3FR < 0 || c3FR > ld3F) c3FR = 0;
c3IR++; if (c3IR < 0 || c3IR > ld3I) c3IR = 0;
c3AL++; if (c3AL > ld3A) c3AL = 0;
c3BL++; if (c3BL > ld3B) c3BL = 0;
c3CL++; if (c3CL > ld3C) c3CL = 0;
c3CR++; if (c3CR > ld3C) c3CR = 0;
c3FR++; if (c3FR > ld3F) c3FR = 0;
c3IR++; if (c3IR > ld3I) c3IR = 0;
double o3AL = a3AL[c3AL-((c3AL > ld3A)?c3AL+1:0)];
double o3BL = a3BL[c3BL-((c3BL > ld3B)?c3BL+1:0)];
double o3CL = a3CL[c3CL-((c3CL > ld3C)?c3CL+1:0)];
double o3CR = a3CR[c3CR-((c3CR > ld3C)?c3CR+1:0)];
double o3FR = a3FR[c3FR-((c3FR > ld3F)?c3FR+1:0)];
double o3IR = a3IR[c3IR-((c3IR > ld3I)?c3IR+1:0)];
double hA = a3AL[c3AL-((c3AL > ld3A)?c3AL+1:0)];
double hB = a3BL[c3BL-((c3BL > ld3B)?c3BL+1:0)];
double hC = a3CL[c3CL-((c3CL > ld3C)?c3CL+1:0)];
double hD = a3CR[c3CR-((c3CR > ld3C)?c3CR+1:0)];
double hE = a3FR[c3FR-((c3FR > ld3F)?c3FR+1:0)];
double hF = a3IR[c3IR-((c3IR > ld3I)?c3IR+1:0)];
a3DL[c3DL] = (((o3BL + o3CL) * -2.0) + o3AL);
a3EL[c3EL] = (((o3AL + o3CL) * -2.0) + o3BL);
a3FL[c3FL] = (((o3AL + o3BL) * -2.0) + o3CL);
a3BR[c3BR] = (((o3FR + o3IR) * -2.0) + o3CR);
a3ER[c3ER] = (((o3CR + o3IR) * -2.0) + o3FR);
a3HR[c3HR] = (((o3CR + o3FR) * -2.0) + o3IR);
a3DL[c3DL] = (((hB + hC) * -2.0) + hA);
a3EL[c3EL] = (((hA + hC) * -2.0) + hB);
a3FL[c3FL] = (((hA + hB) * -2.0) + hC);
a3BR[c3BR] = (((hE + hF) * -2.0) + hD);
a3ER[c3ER] = (((hD + hF) * -2.0) + hE);
a3HR[c3HR] = (((hD + hE) * -2.0) + hF);
c3DL++; if (c3DL < 0 || c3DL > ld3D) c3DL = 0;
c3EL++; if (c3EL < 0 || c3EL > ld3E) c3EL = 0;
c3FL++; if (c3FL < 0 || c3FL > ld3F) c3FL = 0;
c3BR++; if (c3BR < 0 || c3BR > ld3B) c3BR = 0;
c3ER++; if (c3ER < 0 || c3ER > ld3E) c3ER = 0;
c3HR++; if (c3HR < 0 || c3HR > ld3H) c3HR = 0;
c3DL++; if (c3DL > ld3D) c3DL = 0;
c3EL++; if (c3EL > ld3E) c3EL = 0;
c3FL++; if (c3FL > ld3F) c3FL = 0;
c3BR++; if (c3BR > ld3B) c3BR = 0;
c3ER++; if (c3ER > ld3E) c3ER = 0;
c3HR++; if (c3HR > ld3H) c3HR = 0;
double o3DL = a3DL[c3DL-((c3DL > ld3D)?c3DL+1:0)];
double o3EL = a3EL[c3EL-((c3EL > ld3E)?c3EL+1:0)];
double o3FL = a3FL[c3FL-((c3FL > ld3F)?c3FL+1:0)];
double o3BR = a3BR[c3BR-((c3BR > ld3B)?c3BR+1:0)];
double o3ER = a3ER[c3ER-((c3ER > ld3E)?c3ER+1:0)];
double o3HR = a3HR[c3HR-((c3HR > ld3H)?c3HR+1:0)];
hA = a3DL[c3DL-((c3DL > ld3D)?c3DL+1:0)];
hB = a3EL[c3EL-((c3EL > ld3E)?c3EL+1:0)];
hC = a3FL[c3FL-((c3FL > ld3F)?c3FL+1:0)];
hD = a3BR[c3BR-((c3BR > ld3B)?c3BR+1:0)];
hE = a3ER[c3ER-((c3ER > ld3E)?c3ER+1:0)];
hF = a3HR[c3HR-((c3HR > ld3H)?c3HR+1:0)];
a3GL[c3GL] = (((o3EL + o3FL) * -2.0) + o3DL);
a3HL[c3HL] = (((o3DL + o3FL) * -2.0) + o3EL);
a3IL[c3IL] = (((o3DL + o3EL) * -2.0) + o3FL);
a3AR[c3AR] = (((o3ER + o3HR) * -2.0) + o3BR);
a3DR[c3DR] = (((o3BR + o3HR) * -2.0) + o3ER);
a3GR[c3GR] = (((o3BR + o3ER) * -2.0) + o3HR);
a3GL[c3GL] = (((hB + hC) * -2.0) + hA);
a3HL[c3HL] = (((hA + hC) * -2.0) + hB);
a3IL[c3IL] = (((hA + hB) * -2.0) + hC);
a3AR[c3AR] = (((hE + hF) * -2.0) + hD);
a3DR[c3DR] = (((hD + hF) * -2.0) + hE);
a3GR[c3GR] = (((hD + hE) * -2.0) + hF);
c3GL++; if (c3GL < 0 || c3GL > ld3G) c3GL = 0;
c3HL++; if (c3HL < 0 || c3HL > ld3H) c3HL = 0;
c3IL++; if (c3IL < 0 || c3IL > ld3I) c3IL = 0;
c3AR++; if (c3AR < 0 || c3AR > ld3A) c3AR = 0;
c3DR++; if (c3DR < 0 || c3DR > ld3D) c3DR = 0;
c3GR++; if (c3GR < 0 || c3GR > ld3G) c3GR = 0;
c3GL++; if (c3GL > ld3G) c3GL = 0;
c3HL++; if (c3HL > ld3H) c3HL = 0;
c3IL++; if (c3IL > ld3I) c3IL = 0;
c3AR++; if (c3AR > ld3A) c3AR = 0;
c3DR++; if (c3DR > ld3D) c3DR = 0;
c3GR++; if (c3GR > ld3G) c3GR = 0;
double o3GL = a3GL[c3GL-((c3GL > ld3G)?c3GL+1:0)];
double o3HL = a3HL[c3HL-((c3HL > ld3H)?c3HL+1:0)];
double o3IL = a3IL[c3IL-((c3IL > ld3I)?c3IL+1:0)];
double o3AR = a3AR[c3AR-((c3AR > ld3A)?c3AR+1:0)];
double o3DR = a3DR[c3DR-((c3DR > ld3D)?c3DR+1:0)];
double o3GR = a3GR[c3GR-((c3GR > ld3G)?c3GR+1:0)];
hA = a3GL[c3GL-((c3GL > ld3G)?c3GL+1:0)];
hB = a3HL[c3HL-((c3HL > ld3H)?c3HL+1:0)];
hC = a3IL[c3IL-((c3IL > ld3I)?c3IL+1:0)];
hD = a3AR[c3AR-((c3AR > ld3A)?c3AR+1:0)];
hE = a3DR[c3DR-((c3DR > ld3D)?c3DR+1:0)];
hF = a3GR[c3GR-((c3GR > ld3G)?c3GR+1:0)];
double inputSampleL = (o3GL + o3HL + o3IL)*0.03125;
double inputSampleR = (o3AR + o3DR + o3GR)*0.03125;
double earlyReflectionL = (((hB + hC) * -2.0) + hA)*-0.0625;
double earlyReflectionR = (((hE + hF) * -2.0) + hD)*-0.0625;
inputSampleL -= earlyReflectionL;
inputSampleR -= earlyReflectionR;
bezF[bez_cycle] += derezFreq;
bezF[bez_SampL] += ((inputSampleL+bezF[bez_InL]) * derezFreq);
bezF[bez_SampR] += ((inputSampleL+bezF[bez_InR]) * derezFreq);
bezF[bez_InL] = inputSampleL; bezF[bez_InR] = inputSampleR;
if (bezF[bez_cycle] > 1.0) { //hit the end point and we do a filter sample
if (steppedFreq) bezF[bez_cycle] = 0.0;
else bezF[bez_cycle] -= 1.0;
bezF[bez_CL] = bezF[bez_BL];
bezF[bez_BL] = bezF[bez_AL];
bezF[bez_AL] = (bezF[bez_SampL]+bezF[bez_AvgInSampL])*0.5;
bezF[bez_AvgInSampL] = bezF[bez_SampL]; bezF[bez_SampL] = 0.0;
bezF[bez_CR] = bezF[bez_BR];
bezF[bez_BR] = bezF[bez_AR];
bezF[bez_AR] = (bezF[bez_SampR]+bezF[bez_AvgInSampR])*0.5;
bezF[bez_AvgInSampR] = bezF[bez_SampR]; bezF[bez_SampR] = 0.0;
}
double X = bezF[bez_cycle]*bezFreqTrim;
double CBLfreq = (bezF[bez_CL]*(1.0-X))+(bezF[bez_BL]*X);
double BALfreq = (bezF[bez_BL]*(1.0-X))+(bezF[bez_AL]*X);
double CBALfreq = (bezF[bez_BL]+(CBLfreq*(1.0-X))+(BALfreq*X))*0.125;
double CBRfreq = (bezF[bez_CR]*(1.0-X))+(bezF[bez_BR]*X);
double BARfreq = (bezF[bez_BR]*(1.0-X))+(bezF[bez_AR]*X);
double CBARfreq = (bezF[bez_BR]+(CBRfreq*(1.0-X))+(BARfreq*X))*0.125;
inputSampleL = CBALfreq+bezF[bez_AvgOutSampL];
bezF[bez_AvgOutSampL] = CBALfreq;
inputSampleR = CBARfreq+bezF[bez_AvgOutSampR];
bezF[bez_AvgOutSampR] = CBARfreq;
double earlyReflectionL = inputSampleL;
double earlyReflectionR = inputSampleR; //kWoodRoom has filtered early reflections
a6AL[c6AL] = inputSampleL + (f6BL * reg6n);
a6BL[c6BL] = inputSampleL + (f6CL * reg6n);
a6CL[c6CL] = inputSampleL + (f6DL * reg6n);
@ -478,20 +447,6 @@ OSStatus kWoodRoom::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFla
a6EL[c6EL] = inputSampleL + (f6FL * reg6n);
a6FL[c6FL] = inputSampleL + (f6AL * reg6n);
c6AL++; if (c6AL < 0 || c6AL > d6A) c6AL = 0;
c6BL++; if (c6BL < 0 || c6BL > d6B) c6BL = 0;
c6CL++; if (c6CL < 0 || c6CL > d6C) c6CL = 0;
c6DL++; if (c6DL < 0 || c6DL > d6D) c6DL = 0;
c6EL++; if (c6EL < 0 || c6EL > d6E) c6EL = 0;
c6FL++; if (c6FL < 0 || c6FL > d6F) c6FL = 0;
double o6AL = a6AL[c6AL-((c6AL > d6A)?d6A+1:0)];
double o6BL = a6BL[c6BL-((c6BL > d6B)?d6B+1:0)];
double o6CL = a6CL[c6CL-((c6CL > d6C)?d6C+1:0)];
double o6DL = a6DL[c6DL-((c6DL > d6D)?d6D+1:0)];
double o6EL = a6EL[c6EL-((c6EL > d6E)?d6E+1:0)];
double o6FL = a6FL[c6FL-((c6FL > d6F)?d6F+1:0)];
a6FR[c6FR] = inputSampleR + (f6LR * reg6n);
a6LR[c6LR] = inputSampleR + (f6RR * reg6n);
a6RR[c6RR] = inputSampleR + (f6XR * reg6n);
@ -499,262 +454,291 @@ OSStatus kWoodRoom::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFla
a6ZER[c6ZER] = inputSampleR + (f6ZKR * reg6n);
a6ZKR[c6ZKR] = inputSampleR + (f6FR * reg6n);
c6FR++; if (c6FR < 0 || c6FR > d6F) c6FR = 0;
c6LR++; if (c6LR < 0 || c6LR > d6L) c6LR = 0;
c6RR++; if (c6RR < 0 || c6RR > d6R) c6RR = 0;
c6XR++; if (c6XR < 0 || c6XR > d6X) c6XR = 0;
c6ZER++; if (c6ZER < 0 || c6ZER > d6ZE) c6ZER = 0;
c6ZKR++; if (c6ZKR < 0 || c6ZKR > d6ZK) c6ZKR = 0;
//left verb
double o6FR = a6FR[c6FR-((c6FR > d6F)?d6F+1:0)];
double o6LR = a6LR[c6LR-((c6LR > d6L)?d6L+1:0)];
double o6RR = a6RR[c6RR-((c6RR > d6R)?d6R+1:0)];
double o6XR = a6XR[c6XR-((c6XR > d6X)?d6X+1:0)];
double o6ZER = a6ZER[c6ZER-((c6ZER > d6ZE)?d6ZE+1:0)];
double o6ZKR = a6ZKR[c6ZKR-((c6ZKR > d6ZK)?d6ZK+1:0)];
c6AL++; if (c6AL > d6A) c6AL = 0;
c6BL++; if (c6BL > d6B) c6BL = 0;
c6CL++; if (c6CL > d6C) c6CL = 0;
c6DL++; if (c6DL > d6D) c6DL = 0;
c6EL++; if (c6EL > d6E) c6EL = 0;
c6FL++; if (c6FL > d6F) c6FL = 0;
//-------- one
hA = a6AL[c6AL-((c6AL > d6A)?d6A+1:0)];
hB = a6BL[c6BL-((c6BL > d6B)?d6B+1:0)];
hC = a6CL[c6CL-((c6CL > d6C)?d6C+1:0)];
hD = a6DL[c6DL-((c6DL > d6D)?d6D+1:0)];
hE = a6EL[c6EL-((c6EL > d6E)?d6E+1:0)];
hF = a6FL[c6FL-((c6FL > d6F)?d6F+1:0)];
a6GL[c6GL] = ((o6AL*2.0) - (o6BL + o6CL + o6DL + o6EL + o6FL));
a6HL[c6HL] = ((o6BL*2.0) - (o6AL + o6CL + o6DL + o6EL + o6FL));
a6IL[c6IL] = ((o6CL*2.0) - (o6AL + o6BL + o6DL + o6EL + o6FL));
a6JL[c6JL] = ((o6DL*2.0) - (o6AL + o6BL + o6CL + o6EL + o6FL));
a6KL[c6KL] = ((o6EL*2.0) - (o6AL + o6BL + o6CL + o6DL + o6FL));
a6LL[c6LL] = ((o6FL*2.0) - (o6AL + o6BL + o6CL + o6DL + o6EL));
a6GL[c6GL] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6HL[c6HL] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6IL[c6IL] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6JL[c6JL] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6KL[c6KL] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6LL[c6LL] = ((hF*2.0) - (hA + hB + hC + hD + hE));
c6GL++; if (c6GL < 0 || c6GL > d6G) c6GL = 0;
c6HL++; if (c6HL < 0 || c6HL > d6H) c6HL = 0;
c6IL++; if (c6IL < 0 || c6IL > d6I) c6IL = 0;
c6JL++; if (c6JL < 0 || c6JL > d6J) c6JL = 0;
c6KL++; if (c6KL < 0 || c6KL > d6K) c6KL = 0;
c6LL++; if (c6LL < 0 || c6LL > d6L) c6LL = 0;
c6GL++; if (c6GL > d6G) c6GL = 0;
c6HL++; if (c6HL > d6H) c6HL = 0;
c6IL++; if (c6IL > d6I) c6IL = 0;
c6JL++; if (c6JL > d6J) c6JL = 0;
c6KL++; if (c6KL > d6K) c6KL = 0;
c6LL++; if (c6LL > d6L) c6LL = 0;
double o6GL = a6GL[c6GL-((c6GL > d6G)?d6G+1:0)];
double o6HL = a6HL[c6HL-((c6HL > d6H)?d6H+1:0)];
double o6IL = a6IL[c6IL-((c6IL > d6I)?d6I+1:0)];
double o6JL = a6JL[c6JL-((c6JL > d6J)?d6J+1:0)];
double o6KL = a6KL[c6KL-((c6KL > d6K)?d6K+1:0)];
double o6LL = a6LL[c6LL-((c6LL > d6L)?d6L+1:0)];
hA = a6GL[c6GL-((c6GL > d6G)?d6G+1:0)];
hB = a6HL[c6HL-((c6HL > d6H)?d6H+1:0)];
hC = a6IL[c6IL-((c6IL > d6I)?d6I+1:0)];
hD = a6JL[c6JL-((c6JL > d6J)?d6J+1:0)];
hE = a6KL[c6KL-((c6KL > d6K)?d6K+1:0)];
hF = a6LL[c6LL-((c6LL > d6L)?d6L+1:0)];
a6ER[c6ER] = ((o6FR*2.0) - (o6LR + o6RR + o6XR + o6ZER + o6ZKR));
a6KR[c6KR] = ((o6LR*2.0) - (o6FR + o6RR + o6XR + o6ZER + o6ZKR));
a6QR[c6QR] = ((o6RR*2.0) - (o6FR + o6LR + o6XR + o6ZER + o6ZKR));
a6WR[c6WR] = ((o6XR*2.0) - (o6FR + o6LR + o6RR + o6ZER + o6ZKR));
a6ZDR[c6ZDR] = ((o6ZER*2.0) - (o6FR + o6LR + o6RR + o6XR + o6ZKR));
a6ZJR[c6ZJR] = ((o6ZKR*2.0) - (o6FR + o6LR + o6RR + o6XR + o6ZER));
a6ML[c6ML] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6NL[c6NL] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6OL[c6OL] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6PL[c6PL] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6QL[c6QL] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6RL[c6RL] = ((hF*2.0) - (hA + hB + hC + hD + hE));
c6ER++; if (c6ER < 0 || c6ER > d6E) c6ER = 0;
c6KR++; if (c6KR < 0 || c6KR > d6K) c6KR = 0;
c6QR++; if (c6QR < 0 || c6QR > d6Q) c6QR = 0;
c6WR++; if (c6WR < 0 || c6WR > d6W) c6WR = 0;
c6ZDR++; if (c6ZDR < 0 || c6ZDR > d6ZD) c6ZDR = 0;
c6ZJR++; if (c6ZJR < 0 || c6ZJR > d6ZJ) c6ZJR = 0;
c6ML++; if (c6ML > d6M) c6ML = 0;
c6NL++; if (c6NL > d6N) c6NL = 0;
c6OL++; if (c6OL > d6O) c6OL = 0;
c6PL++; if (c6PL > d6P) c6PL = 0;
c6QL++; if (c6QL > d6Q) c6QL = 0;
c6RL++; if (c6RL > d6R) c6RL = 0;
double o6ER = a6ER[c6ER-((c6ER > d6E)?d6E+1:0)];
double o6KR = a6KR[c6KR-((c6KR > d6K)?d6K+1:0)];
double o6QR = a6QR[c6QR-((c6QR > d6Q)?d6Q+1:0)];
double o6WR = a6WR[c6WR-((c6WR > d6W)?d6W+1:0)];
double o6ZDR = a6ZDR[c6ZDR-((c6ZDR > d6ZD)?d6ZD+1:0)];
double o6ZJR = a6ZJR[c6ZJR-((c6ZJR > d6ZJ)?d6ZJ+1:0)];
hA = a6ML[c6ML-((c6ML > d6M)?d6M+1:0)];
hB = a6NL[c6NL-((c6NL > d6N)?d6N+1:0)];
hC = a6OL[c6OL-((c6OL > d6O)?d6O+1:0)];
hD = a6PL[c6PL-((c6PL > d6P)?d6P+1:0)];
hE = a6QL[c6QL-((c6QL > d6Q)?d6Q+1:0)];
hF = a6RL[c6RL-((c6RL > d6R)?d6R+1:0)];
//-------- two
a6SL[c6SL] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6TL[c6TL] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6UL[c6UL] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6VL[c6VL] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6WL[c6WL] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6XL[c6XL] = ((hF*2.0) - (hA + hB + hC + hD + hE));
a6ML[c6ML] = ((o6GL*2.0) - (o6HL + o6IL + o6JL + o6KL + o6LL));
a6NL[c6NL] = ((o6HL*2.0) - (o6GL + o6IL + o6JL + o6KL + o6LL));
a6OL[c6OL] = ((o6IL*2.0) - (o6GL + o6HL + o6JL + o6KL + o6LL));
a6PL[c6PL] = ((o6JL*2.0) - (o6GL + o6HL + o6IL + o6KL + o6LL));
a6QL[c6QL] = ((o6KL*2.0) - (o6GL + o6HL + o6IL + o6JL + o6LL));
a6RL[c6RL] = ((o6LL*2.0) - (o6GL + o6HL + o6IL + o6JL + o6KL));
c6SL++; if (c6SL > d6S) c6SL = 0;
c6TL++; if (c6TL > d6T) c6TL = 0;
c6UL++; if (c6UL > d6U) c6UL = 0;
c6VL++; if (c6VL > d6V) c6VL = 0;
c6WL++; if (c6WL > d6W) c6WL = 0;
c6XL++; if (c6XL > d6X) c6XL = 0;
c6ML++; if (c6ML < 0 || c6ML > d6M) c6ML = 0;
c6NL++; if (c6NL < 0 || c6NL > d6N) c6NL = 0;
c6OL++; if (c6OL < 0 || c6OL > d6O) c6OL = 0;
c6PL++; if (c6PL < 0 || c6PL > d6P) c6PL = 0;
c6QL++; if (c6QL < 0 || c6QL > d6Q) c6QL = 0;
c6RL++; if (c6RL < 0 || c6RL > d6R) c6RL = 0;
hA = a6SL[c6SL-((c6SL > d6S)?d6S+1:0)];
hB = a6TL[c6TL-((c6TL > d6T)?d6T+1:0)];
hC = a6UL[c6UL-((c6UL > d6U)?d6U+1:0)];
hD = a6VL[c6VL-((c6VL > d6V)?d6V+1:0)];
hE = a6WL[c6WL-((c6WL > d6W)?d6W+1:0)];
hF = a6XL[c6XL-((c6XL > d6X)?d6X+1:0)];
double o6ML = a6ML[c6ML-((c6ML > d6M)?d6M+1:0)];
double o6NL = a6NL[c6NL-((c6NL > d6N)?d6N+1:0)];
double o6OL = a6OL[c6OL-((c6OL > d6O)?d6O+1:0)];
double o6PL = a6PL[c6PL-((c6PL > d6P)?d6P+1:0)];
double o6QL = a6QL[c6QL-((c6QL > d6Q)?d6Q+1:0)];
double o6RL = a6RL[c6RL-((c6RL > d6R)?d6R+1:0)];
a6YL[c6YL] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6ZAL[c6ZAL] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6ZBL[c6ZBL] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6ZCL[c6ZCL] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6ZDL[c6ZDL] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZEL[c6ZEL] = ((hF*2.0) - (hA + hB + hC + hD + hE));
a6DR[c6DR] = ((o6ER*2.0) - (o6KR + o6QR + o6WR + o6ZDR + o6ZJR));
a6JR[c6JR] = ((o6KR*2.0) - (o6ER + o6QR + o6WR + o6ZDR + o6ZJR));
a6PR[c6PR] = ((o6QR*2.0) - (o6ER + o6KR + o6WR + o6ZDR + o6ZJR));
a6VR[c6VR] = ((o6WR*2.0) - (o6ER + o6KR + o6QR + o6ZDR + o6ZJR));
a6ZCR[c6ZCR] = ((o6ZDR*2.0) - (o6ER + o6KR + o6QR + o6WR + o6ZJR));
a6ZIR[c6ZIR] = ((o6ZJR*2.0) - (o6ER + o6KR + o6QR + o6WR + o6ZDR));
c6YL++; if (c6YL > d6Y) c6YL = 0;
c6ZAL++; if (c6ZAL > d6ZA) c6ZAL = 0;
c6ZBL++; if (c6ZBL > d6ZB) c6ZBL = 0;
c6ZCL++; if (c6ZCL > d6ZC) c6ZCL = 0;
c6ZDL++; if (c6ZDL > d6ZD) c6ZDL = 0;
c6ZEL++; if (c6ZEL > d6ZE) c6ZEL = 0;
c6DR++; if (c6DR < 0 || c6DR > d6D) c6DR = 0;
c6JR++; if (c6JR < 0 || c6JR > d6J) c6JR = 0;
c6PR++; if (c6PR < 0 || c6PR > d6P) c6PR = 0;
c6VR++; if (c6VR < 0 || c6VR > d6V) c6VR = 0;
c6ZCR++; if (c6ZCR < 0 || c6ZCR > d6ZC) c6ZCR = 0;
c6ZIR++; if (c6ZIR < 0 || c6ZIR > d6ZI) c6ZIR = 0;
hA = a6YL[c6YL-((c6YL > d6Y)?d6Y+1:0)];
hB = a6ZAL[c6ZAL-((c6ZAL > d6ZA)?d6ZA+1:0)];
hC = a6ZBL[c6ZBL-((c6ZBL > d6ZB)?d6ZB+1:0)];
hD = a6ZCL[c6ZCL-((c6ZCL > d6ZC)?d6ZC+1:0)];
hE = a6ZDL[c6ZDL-((c6ZDL > d6ZD)?d6ZD+1:0)];
hF = a6ZEL[c6ZEL-((c6ZEL > d6ZE)?d6ZE+1:0)];
double o6DR = a6DR[c6DR-((c6DR > d6D)?d6D+1:0)];
double o6JR = a6JR[c6JR-((c6JR > d6J)?d6J+1:0)];
double o6PR = a6PR[c6PR-((c6PR > d6P)?d6P+1:0)];
double o6VR = a6VR[c6VR-((c6VR > d6V)?d6V+1:0)];
double o6ZCR = a6ZCR[c6ZCR-((c6ZCR > d6ZC)?d6ZC+1:0)];
double o6ZIR = a6ZIR[c6ZIR-((c6ZIR > d6ZI)?d6ZI+1:0)];
a6ZFL[c6ZFL] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6ZGL[c6ZGL] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6ZHL[c6ZHL] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6ZIL[c6ZIL] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6ZJL[c6ZJL] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZKL[c6ZKL] = ((hF*2.0) - (hA + hB + hC + hD + hE));
//-------- three
c6ZFL++; if (c6ZFL > d6ZF) c6ZFL = 0;
c6ZGL++; if (c6ZGL > d6ZG) c6ZGL = 0;
c6ZHL++; if (c6ZHL > d6ZH) c6ZHL = 0;
c6ZIL++; if (c6ZIL > d6ZI) c6ZIL = 0;
c6ZJL++; if (c6ZJL > d6ZJ) c6ZJL = 0;
c6ZKL++; if (c6ZKL > d6ZK) c6ZKL = 0;
a6SL[c6SL] = ((o6ML*2.0) - (o6NL + o6OL + o6PL + o6QL + o6RL));
a6TL[c6TL] = ((o6NL*2.0) - (o6ML + o6OL + o6PL + o6QL + o6RL));
a6UL[c6UL] = ((o6OL*2.0) - (o6ML + o6NL + o6PL + o6QL + o6RL));
a6VL[c6VL] = ((o6PL*2.0) - (o6ML + o6NL + o6OL + o6QL + o6RL));
a6WL[c6WL] = ((o6QL*2.0) - (o6ML + o6NL + o6OL + o6PL + o6RL));
a6XL[c6XL] = ((o6RL*2.0) - (o6ML + o6NL + o6OL + o6PL + o6QL));
hA = a6ZFL[c6ZFL-((c6ZFL > d6ZF)?d6ZF+1:0)];
hB = a6ZGL[c6ZGL-((c6ZGL > d6ZG)?d6ZG+1:0)];
hC = a6ZHL[c6ZHL-((c6ZHL > d6ZH)?d6ZH+1:0)];
hD = a6ZIL[c6ZIL-((c6ZIL > d6ZI)?d6ZI+1:0)];
hE = a6ZJL[c6ZJL-((c6ZJL > d6ZJ)?d6ZJ+1:0)];
hF = a6ZKL[c6ZKL-((c6ZKL > d6ZK)?d6ZK+1:0)];
c6SL++; if (c6SL < 0 || c6SL > d6S) c6SL = 0;
c6TL++; if (c6TL < 0 || c6TL > d6T) c6TL = 0;
c6UL++; if (c6UL < 0 || c6UL > d6U) c6UL = 0;
c6VL++; if (c6VL < 0 || c6VL > d6V) c6VL = 0;
c6WL++; if (c6WL < 0 || c6WL > d6W) c6WL = 0;
c6XL++; if (c6XL < 0 || c6XL > d6X) c6XL = 0;
f6FR = ((hA*2.0) - (hB + hC + hD + hE + hF));
f6LR = ((hB*2.0) - (hA + hC + hD + hE + hF));
f6RR = ((hC*2.0) - (hA + hB + hD + hE + hF));
f6XR = ((hD*2.0) - (hA + hB + hC + hE + hF));
f6ZER = ((hE*2.0) - (hA + hB + hC + hD + hF));
f6ZKR = ((hF*2.0) - (hA + hB + hC + hD + hE));
double o6SL = a6SL[c6SL-((c6SL > d6S)?d6S+1:0)];
double o6TL = a6TL[c6TL-((c6TL > d6T)?d6T+1:0)];
double o6UL = a6UL[c6UL-((c6UL > d6U)?d6U+1:0)];
double o6VL = a6VL[c6VL-((c6VL > d6V)?d6V+1:0)];
double o6WL = a6WL[c6WL-((c6WL > d6W)?d6W+1:0)];
double o6XL = a6XL[c6XL-((c6XL > d6X)?d6X+1:0)];
inputSampleL = ((hA*2.0) - (hB + hC + hD + hE + hF))*0.001953125;
a6CR[c6CR] = ((o6DR*2.0) - (o6JR + o6PR + o6VR + o6ZCR + o6ZIR));
a6IR[c6IR] = ((o6JR*2.0) - (o6DR + o6PR + o6VR + o6ZCR + o6ZIR));
a6OR[c6OR] = ((o6PR*2.0) - (o6DR + o6JR + o6VR + o6ZCR + o6ZIR));
a6UR[c6UR] = ((o6VR*2.0) - (o6DR + o6JR + o6PR + o6ZCR + o6ZIR));
a6ZBR[c6ZBR] = ((o6ZCR*2.0) - (o6DR + o6JR + o6PR + o6VR + o6ZIR));
a6ZHR[c6ZHR] = ((o6ZIR*2.0) - (o6DR + o6JR + o6PR + o6VR + o6ZCR));
//right verb
c6CR++; if (c6CR < 0 || c6CR > d6C) c6CR = 0;
c6IR++; if (c6IR < 0 || c6IR > d6I) c6IR = 0;
c6OR++; if (c6OR < 0 || c6OR > d6O) c6OR = 0;
c6UR++; if (c6UR < 0 || c6UR > d6U) c6UR = 0;
c6ZBR++; if (c6ZBR < 0 || c6ZBR > d6ZB) c6ZBR = 0;
c6ZHR++; if (c6ZHR < 0 || c6ZHR > d6ZH) c6ZHR = 0;
c6FR++; if (c6FR > d6F) c6FR = 0;
c6LR++; if (c6LR > d6L) c6LR = 0;
c6RR++; if (c6RR > d6R) c6RR = 0;
c6XR++; if (c6XR > d6X) c6XR = 0;
c6ZER++; if (c6ZER > d6ZE) c6ZER = 0;
c6ZKR++; if (c6ZKR > d6ZK) c6ZKR = 0;
double o6CR = a6CR[c6CR-((c6CR > d6C)?d6C+1:0)];
double o6IR = a6IR[c6IR-((c6IR > d6I)?d6I+1:0)];
double o6OR = a6OR[c6OR-((c6OR > d6O)?d6O+1:0)];
double o6UR = a6UR[c6UR-((c6UR > d6U)?d6U+1:0)];
double o6ZBR = a6ZBR[c6ZBR-((c6ZBR > d6ZB)?d6ZB+1:0)];
double o6ZHR = a6ZHR[c6ZHR-((c6ZHR > d6ZH)?d6ZH+1:0)];
hA = a6FR[c6FR-((c6FR > d6F)?d6F+1:0)];
hB = a6LR[c6LR-((c6LR > d6L)?d6L+1:0)];
hC = a6RR[c6RR-((c6RR > d6R)?d6R+1:0)];
hD = a6XR[c6XR-((c6XR > d6X)?d6X+1:0)];
hE = a6ZER[c6ZER-((c6ZER > d6ZE)?d6ZE+1:0)];
hF = a6ZKR[c6ZKR-((c6ZKR > d6ZK)?d6ZK+1:0)];
a6ER[c6ER] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6KR[c6KR] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6QR[c6QR] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6WR[c6WR] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6ZDR[c6ZDR] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZJR[c6ZJR] = ((hF*2.0) - (hA + hB + hC + hD + hE));
//-------- four
c6ER++; if (c6ER > d6E) c6ER = 0;
c6KR++; if (c6KR > d6K) c6KR = 0;
c6QR++; if (c6QR > d6Q) c6QR = 0;
c6WR++; if (c6WR > d6W) c6WR = 0;
c6ZDR++; if (c6ZDR > d6ZD) c6ZDR = 0;
c6ZJR++; if (c6ZJR > d6ZJ) c6ZJR = 0;
a6YL[c6YL] = ((o6SL*2.0) - (o6TL + o6UL + o6VL + o6WL + o6XL));
a6ZAL[c6ZAL] = ((o6TL*2.0) - (o6SL + o6UL + o6VL + o6WL + o6XL));
a6ZBL[c6ZBL] = ((o6UL*2.0) - (o6SL + o6TL + o6VL + o6WL + o6XL));
a6ZCL[c6ZCL] = ((o6VL*2.0) - (o6SL + o6TL + o6UL + o6WL + o6XL));
a6ZDL[c6ZDL] = ((o6WL*2.0) - (o6SL + o6TL + o6UL + o6VL + o6XL));
a6ZEL[c6ZEL] = ((o6XL*2.0) - (o6SL + o6TL + o6UL + o6VL + o6WL));
hA = a6ER[c6ER-((c6ER > d6E)?d6E+1:0)];
hB = a6KR[c6KR-((c6KR > d6K)?d6K+1:0)];
hC = a6QR[c6QR-((c6QR > d6Q)?d6Q+1:0)];
hD = a6WR[c6WR-((c6WR > d6W)?d6W+1:0)];
hE = a6ZDR[c6ZDR-((c6ZDR > d6ZD)?d6ZD+1:0)];
hF = a6ZJR[c6ZJR-((c6ZJR > d6ZJ)?d6ZJ+1:0)];
a6DR[c6DR] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6JR[c6JR] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6PR[c6PR] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6VR[c6VR] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6ZCR[c6ZCR] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZIR[c6ZIR] = ((hF*2.0) - (hA + hB + hC + hD + hE));
c6YL++; if (c6YL < 0 || c6YL > d6Y) c6YL = 0;
c6ZAL++; if (c6ZAL < 0 || c6ZAL > d6ZA) c6ZAL = 0;
c6ZBL++; if (c6ZBL < 0 || c6ZBL > d6ZB) c6ZBL = 0;
c6ZCL++; if (c6ZCL < 0 || c6ZCL > d6ZC) c6ZCL = 0;
c6ZDL++; if (c6ZDL < 0 || c6ZDL > d6ZD) c6ZDL = 0;
c6ZEL++; if (c6ZEL < 0 || c6ZEL > d6ZE) c6ZEL = 0;
c6DR++; if (c6DR > d6D) c6DR = 0;
c6JR++; if (c6JR > d6J) c6JR = 0;
c6PR++; if (c6PR > d6P) c6PR = 0;
c6VR++; if (c6VR > d6V) c6VR = 0;
c6ZCR++; if (c6ZCR > d6ZC) c6ZCR = 0;
c6ZIR++; if (c6ZIR > d6ZI) c6ZIR = 0;
double o6YL = a6YL[c6YL-((c6YL > d6Y)?d6Y+1:0)];
double o6ZAL = a6ZAL[c6ZAL-((c6ZAL > d6ZA)?d6ZA+1:0)];
double o6ZBL = a6ZBL[c6ZBL-((c6ZBL > d6ZB)?d6ZB+1:0)];
double o6ZCL = a6ZCL[c6ZCL-((c6ZCL > d6ZC)?d6ZC+1:0)];
double o6ZDL = a6ZDL[c6ZDL-((c6ZDL > d6ZD)?d6ZD+1:0)];
double o6ZEL = a6ZEL[c6ZEL-((c6ZEL > d6ZE)?d6ZE+1:0)];
hA = a6DR[c6DR-((c6DR > d6D)?d6D+1:0)];
hB = a6JR[c6JR-((c6JR > d6J)?d6J+1:0)];
hC = a6PR[c6PR-((c6PR > d6P)?d6P+1:0)];
hD = a6VR[c6VR-((c6VR > d6V)?d6V+1:0)];
hE = a6ZCR[c6ZCR-((c6ZCR > d6ZC)?d6ZC+1:0)];
hF = a6ZIR[c6ZIR-((c6ZIR > d6ZI)?d6ZI+1:0)];
a6CR[c6CR] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6IR[c6IR] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6OR[c6OR] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6UR[c6UR] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6ZBR[c6ZBR] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZHR[c6ZHR] = ((hF*2.0) - (hA + hB + hC + hD + hE));
a6BR[c6BR] = ((o6CR*2.0) - (o6IR + o6OR + o6UR + o6ZBR + o6ZHR));
a6HR[c6HR] = ((o6IR*2.0) - (o6CR + o6OR + o6UR + o6ZBR + o6ZHR));
a6NR[c6NR] = ((o6OR*2.0) - (o6CR + o6IR + o6UR + o6ZBR + o6ZHR));
a6TR[c6TR] = ((o6UR*2.0) - (o6CR + o6IR + o6OR + o6ZBR + o6ZHR));
a6ZAR[c6ZAR] = ((o6ZBR*2.0) - (o6CR + o6IR + o6OR + o6UR + o6ZHR));
a6ZGR[c6ZGR] = ((o6ZHR*2.0) - (o6CR + o6IR + o6OR + o6UR + o6ZBR));
c6CR++; if (c6CR > d6C) c6CR = 0;
c6IR++; if (c6IR > d6I) c6IR = 0;
c6OR++; if (c6OR > d6O) c6OR = 0;
c6UR++; if (c6UR > d6U) c6UR = 0;
c6ZBR++; if (c6ZBR > d6ZB) c6ZBR = 0;
c6ZHR++; if (c6ZHR > d6ZH) c6ZHR = 0;
c6BR++; if (c6BR < 0 || c6BR > d6B) c6BR = 0;
c6HR++; if (c6HR < 0 || c6HR > d6H) c6HR = 0;
c6NR++; if (c6NR < 0 || c6NR > d6N) c6NR = 0;
c6TR++; if (c6TR < 0 || c6TR > d6T) c6TR = 0;
c6ZBR++; if (c6ZBR < 0 || c6ZBR > d6ZB) c6ZBR = 0;
c6ZGR++; if (c6ZGR < 0 || c6ZGR > d6ZG) c6ZGR = 0;
hA = a6CR[c6CR-((c6CR > d6C)?d6C+1:0)];
hB = a6IR[c6IR-((c6IR > d6I)?d6I+1:0)];
hC = a6OR[c6OR-((c6OR > d6O)?d6O+1:0)];
hD = a6UR[c6UR-((c6UR > d6U)?d6U+1:0)];
hE = a6ZBR[c6ZBR-((c6ZBR > d6ZB)?d6ZB+1:0)];
hF = a6ZHR[c6ZHR-((c6ZHR > d6ZH)?d6ZH+1:0)];
a6BR[c6BR] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6HR[c6HR] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6NR[c6NR] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6TR[c6TR] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6ZAR[c6ZAR] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZGR[c6ZGR] = ((hF*2.0) - (hA + hB + hC + hD + hE));
double o6BR = a6BR[c6BR-((c6BR > d6B)?d6B+1:0)];
double o6HR = a6HR[c6HR-((c6HR > d6H)?d6H+1:0)];
double o6NR = a6NR[c6NR-((c6NR > d6N)?d6N+1:0)];
double o6TR = a6TR[c6TR-((c6TR > d6T)?d6T+1:0)];
double o6ZAR = a6ZAR[c6ZAR-((c6ZAR > d6ZA)?d6ZA+1:0)];
double o6ZGR = a6ZGR[c6ZGR-((c6ZGR > d6ZG)?d6ZG+1:0)];
c6BR++; if (c6BR > d6B) c6BR = 0;
c6HR++; if (c6HR > d6H) c6HR = 0;
c6NR++; if (c6NR > d6N) c6NR = 0;
c6TR++; if (c6TR > d6T) c6TR = 0;
c6ZBR++; if (c6ZBR > d6ZB) c6ZBR = 0;
c6ZGR++; if (c6ZGR > d6ZG) c6ZGR = 0;
//-------- five
hA = a6BR[c6BR-((c6BR > d6B)?d6B+1:0)];
hB = a6HR[c6HR-((c6HR > d6H)?d6H+1:0)];
hC = a6NR[c6NR-((c6NR > d6N)?d6N+1:0)];
hD = a6TR[c6TR-((c6TR > d6T)?d6T+1:0)];
hE = a6ZAR[c6ZAR-((c6ZAR > d6ZA)?d6ZA+1:0)];
hF = a6ZGR[c6ZGR-((c6ZGR > d6ZG)?d6ZG+1:0)];
a6AR[c6AR] = ((hA*2.0) - (hB + hC + hD + hE + hF));
a6GR[c6GR] = ((hB*2.0) - (hA + hC + hD + hE + hF));
a6MR[c6MR] = ((hC*2.0) - (hA + hB + hD + hE + hF));
a6SR[c6SR] = ((hD*2.0) - (hA + hB + hC + hE + hF));
a6YR[c6YR] = ((hE*2.0) - (hA + hB + hC + hD + hF));
a6ZFR[c6ZFR] = ((hF*2.0) - (hA + hB + hC + hD + hE));
a6ZFL[c6ZFL] = ((o6YL*2.0) - (o6ZAL + o6ZBL + o6ZCL + o6ZDL + o6ZEL));
a6ZGL[c6ZGL] = ((o6ZAL*2.0) - (o6YL + o6ZBL + o6ZCL + o6ZDL + o6ZEL));
a6ZHL[c6ZHL] = ((o6ZBL*2.0) - (o6YL + o6ZAL + o6ZCL + o6ZDL + o6ZEL));
a6ZIL[c6ZIL] = ((o6ZCL*2.0) - (o6YL + o6ZAL + o6ZBL + o6ZDL + o6ZEL));
a6ZJL[c6ZJL] = ((o6ZDL*2.0) - (o6YL + o6ZAL + o6ZBL + o6ZCL + o6ZEL));
a6ZKL[c6ZKL] = ((o6ZEL*2.0) - (o6YL + o6ZAL + o6ZBL + o6ZCL + o6ZDL));
c6AR++; if (c6AR > d6A) c6AR = 0;
c6GR++; if (c6GR > d6G) c6GR = 0;
c6MR++; if (c6MR > d6M) c6MR = 0;
c6SR++; if (c6SR > d6S) c6SR = 0;
c6YR++; if (c6YR > d6Y) c6YR = 0;
c6ZFR++; if (c6ZFR > d6ZF) c6ZFR = 0;
c6ZFL++; if (c6ZFL < 0 || c6ZFL > d6ZF) c6ZFL = 0;
c6ZGL++; if (c6ZGL < 0 || c6ZGL > d6ZG) c6ZGL = 0;
c6ZHL++; if (c6ZHL < 0 || c6ZHL > d6ZH) c6ZHL = 0;
c6ZIL++; if (c6ZIL < 0 || c6ZIL > d6ZI) c6ZIL = 0;
c6ZJL++; if (c6ZJL < 0 || c6ZJL > d6ZJ) c6ZJL = 0;
c6ZKL++; if (c6ZKL < 0 || c6ZKL > d6ZK) c6ZKL = 0;
hA = a6AR[c6AR-((c6AR > d6A)?d6A+1:0)];
hB = a6GR[c6GR-((c6GR > d6G)?d6G+1:0)];
hC = a6MR[c6MR-((c6MR > d6M)?d6M+1:0)];
hD = a6SR[c6SR-((c6SR > d6S)?d6S+1:0)];
hE = a6YR[c6YR-((c6YR > d6Y)?d6Y+1:0)];
hF = a6ZFR[c6ZFR-((c6ZFR > d6ZF)?d6ZF+1:0)];
f6AL = ((hA*2.0) - (hB + hC + hD + hE + hF));
f6BL = ((hB*2.0) - (hA + hC + hD + hE + hF));
f6CL = ((hC*2.0) - (hA + hB + hD + hE + hF));
f6DL = ((hD*2.0) - (hA + hB + hC + hE + hF));
f6EL = ((hE*2.0) - (hA + hB + hC + hD + hF));
f6FL = ((hF*2.0) - (hA + hB + hC + hD + hE));
double o6ZFL = a6ZFL[c6ZFL-((c6ZFL > d6ZF)?d6ZF+1:0)];
double o6ZGL = a6ZGL[c6ZGL-((c6ZGL > d6ZG)?d6ZG+1:0)];
double o6ZHL = a6ZHL[c6ZHL-((c6ZHL > d6ZH)?d6ZH+1:0)];
double o6ZIL = a6ZIL[c6ZIL-((c6ZIL > d6ZI)?d6ZI+1:0)];
double o6ZJL = a6ZJL[c6ZJL-((c6ZJL > d6ZJ)?d6ZJ+1:0)];
double o6ZKL = a6ZKL[c6ZKL-((c6ZKL > d6ZK)?d6ZK+1:0)];
inputSampleR = ((hA*2.0) - (hB + hC + hD + hE + hF))*0.001953125;
a6AR[c6AR] = ((o6BR*2.0) - (o6HR + o6NR + o6TR + o6ZAR + o6ZGR));
a6GR[c6GR] = ((o6HR*2.0) - (o6BR + o6NR + o6TR + o6ZAR + o6ZGR));
a6MR[c6MR] = ((o6NR*2.0) - (o6BR + o6HR + o6TR + o6ZAR + o6ZGR));
a6SR[c6SR] = ((o6TR*2.0) - (o6BR + o6HR + o6NR + o6ZAR + o6ZGR));
a6YR[c6YR] = ((o6ZAR*2.0) - (o6BR + o6HR + o6NR + o6TR + o6ZGR));
a6ZFR[c6ZFR] = ((o6ZGR*2.0) - (o6BR + o6HR + o6NR + o6TR + o6ZAR));
bezF[bez_cycle] += derezFreq;
bezF[bez_SampL] += (inputSampleL * derezFreq);
bezF[bez_SampR] += (inputSampleR * derezFreq);
if (bezF[bez_cycle] > 1.0) { //hit the end point and we do a filter sample
if (steppedFreq) bezF[bez_cycle] = 0.0;
else bezF[bez_cycle] -= 1.0;
bezF[bez_CL] = bezF[bez_BL];
bezF[bez_BL] = bezF[bez_AL];
bezF[bez_AL] = (bezF[bez_SampL]);
bezF[bez_SampL] = 0.0;
bezF[bez_CR] = bezF[bez_BR];
bezF[bez_BR] = bezF[bez_AR];
bezF[bez_AR] = (bezF[bez_SampR]);
bezF[bez_SampR] = 0.0;
}
double X = bezF[bez_cycle]*bezFreqTrim;
double CBLfreq = (bezF[bez_CL]*(1.0-X))+(bezF[bez_BL]*X);
double BALfreq = (bezF[bez_BL]*(1.0-X))+(bezF[bez_AL]*X);
inputSampleL = (bezF[bez_BL]+(CBLfreq*(1.0-X))+(BALfreq*X))*0.125;
double CBRfreq = (bezF[bez_CR]*(1.0-X))+(bezF[bez_BR]*X);
double BARfreq = (bezF[bez_BR]*(1.0-X))+(bezF[bez_AR]*X);
inputSampleR = (bezF[bez_BR]+(CBRfreq*(1.0-X))+(BARfreq*X))*0.125;
c6AR++; if (c6AR < 0 || c6AR > d6A) c6AR = 0;
c6GR++; if (c6GR < 0 || c6GR > d6G) c6GR = 0;
c6MR++; if (c6MR < 0 || c6MR > d6M) c6MR = 0;
c6SR++; if (c6SR < 0 || c6SR > d6S) c6SR = 0;
c6YR++; if (c6YR < 0 || c6YR > d6Y) c6YR = 0;
c6ZFR++; if (c6ZFR < 0 || c6ZFR > d6ZF) c6ZFR = 0;
double o6AR = a6AR[c6AR-((c6AR > d6A)?d6A+1:0)];
double o6GR = a6GR[c6GR-((c6GR > d6G)?d6G+1:0)];
double o6MR = a6MR[c6MR-((c6MR > d6M)?d6M+1:0)];
double o6SR = a6SR[c6SR-((c6SR > d6S)?d6S+1:0)];
double o6YR = a6YR[c6YR-((c6YR > d6Y)?d6Y+1:0)];
double o6ZFR = a6ZFR[c6ZFR-((c6ZFR > d6ZF)?d6ZF+1:0)];
//-------- six
f6AL = ((o6AR*2.0) - (o6GR + o6MR + o6SR + o6YR + o6ZFR));
f6BL = ((o6GR*2.0) - (o6AR + o6MR + o6SR + o6YR + o6ZFR));
f6CL = ((o6MR*2.0) - (o6AR + o6GR + o6SR + o6YR + o6ZFR));
f6DL = ((o6SR*2.0) - (o6AR + o6GR + o6MR + o6YR + o6ZFR));
f6EL = ((o6YR*2.0) - (o6AR + o6GR + o6MR + o6SR + o6ZFR));
f6FL = ((o6ZFR*2.0) - (o6AR + o6GR + o6MR + o6SR + o6YR));
f6FR = ((o6ZFL*2.0) - (o6ZGL + o6ZHL + o6ZIL + o6ZJL + o6ZKL));
f6LR = ((o6ZGL*2.0) - (o6ZFL + o6ZHL + o6ZIL + o6ZJL + o6ZKL));
f6RR = ((o6ZHL*2.0) - (o6ZFL + o6ZGL + o6ZIL + o6ZJL + o6ZKL));
f6XR = ((o6ZIL*2.0) - (o6ZFL + o6ZGL + o6ZHL + o6ZJL + o6ZKL));
f6ZER = ((o6ZJL*2.0) - (o6ZFL + o6ZGL + o6ZHL + o6ZIL + o6ZKL));
f6ZKR = ((o6ZKL*2.0) - (o6ZFL + o6ZGL + o6ZHL + o6ZIL + o6ZJL));
inputSampleL = (o6ZFL + o6ZGL + o6ZHL + o6ZIL + o6ZJL + o6ZKL)*0.001953125;
inputSampleR = (o6AR + o6GR + o6MR + o6SR + o6YR + o6ZFR)*0.001953125;
f6AL = (f6AL+avg6L)*0.5; avg6L = f6AL;
f6FR = (f6FR+avg6R)*0.5; avg6R = f6FR;
//manipulating deep reverb tail for realism
inputSampleL = bezF[bez_IIRL] = (inputSampleL*derezFreq)+(bezF[bez_IIRL]*(1.0-derezFreq));
inputSampleR = bezF[bez_IIRR] = (inputSampleR*derezFreq)+(bezF[bez_IIRR]*(1.0-derezFreq));
inputSampleL += (earlyReflectionL * earlyLoudness);
inputSampleR += (earlyReflectionR * earlyLoudness);
@ -774,10 +758,11 @@ OSStatus kWoodRoom::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFla
double CBR = (bez[bez_CR]*(1.0-X))+(bez[bez_BR]*X);
double BAL = (bez[bez_BL]*(1.0-X))+(bez[bez_AL]*X);
double BAR = (bez[bez_BR]*(1.0-X))+(bez[bez_AR]*X);
double CBAL = (bez[bez_BL]+(CBL*(1.0-X))+(BAL*X))*-0.0625;
double CBAR = (bez[bez_BR]+(CBR*(1.0-X))+(BAR*X))*-0.0625;
inputSampleL = CBAL+bez[bez_AvgOutSampL]; bez[bez_AvgOutSampL] = CBAL;
inputSampleR = CBAR+bez[bez_AvgOutSampR]; bez[bez_AvgOutSampR] = CBAR;
inputSampleL = (bez[bez_BL]+(CBL*(1.0-X))+(BAL*X))*-0.25;
inputSampleR = (bez[bez_BR]+(CBR*(1.0-X))+(BAR*X))*-0.25;
inputSampleL = bez[bez_IIRL] = (inputSampleL*derez)+(bez[bez_IIRL]*(1.0-derez));
inputSampleR = bez[bez_IIRR] = (inputSampleR*derez)+(bez[bez_IIRR]*(1.0-derez));
inputSampleL = (inputSampleL * wet)+(drySampleL * (1.0-wet));
inputSampleR = (inputSampleR * wet)+(drySampleR * (1.0-wet));

View file

@ -58,7 +58,7 @@ static const float kDefaultValue_ParamA = 0.5;
static const float kDefaultValue_ParamB = 0.5;
static const float kDefaultValue_ParamC = 0.25;
static const float kDefaultValue_ParamD = 0.5;
static const float kDefaultValue_ParamE = 0.5;
static const float kDefaultValue_ParamE = 0.75;
static const float kDefaultValue_ParamF = 0.5;
static CFStringRef kParameterAName = CFSTR("Regen");
@ -243,16 +243,10 @@ public:
bez_BR,
bez_CL,
bez_CR,
bez_InL,
bez_InR,
bez_UnInL,
bez_UnInR,
bez_SampL,
bez_SampR,
bez_AvgInSampL,
bez_AvgInSampR,
bez_AvgOutSampL,
bez_AvgOutSampR,
bez_IIRL,
bez_IIRR,
bez_cycle,
bez_total
}; //the new undersampling. bez signifies the bezier curve reconstruction

View file

@ -49,34 +49,54 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 783773359;
PBXWorkspaceStateSaveDate = 783773359;
PBXPerProjectTemplateStateSaveDate = 785939992;
PBXWorkspaceStateSaveDate = 785939992;
};
perUserProjectItems = {
8B2829512EB7764F003789A7 /* PBXTextBookmark */ = 8B2829512EB7764F003789A7 /* PBXTextBookmark */;
8BD128442EB6E2C500B339E5 /* PBXTextBookmark */ = 8BD128442EB6E2C500B339E5 /* PBXTextBookmark */;
8BD128462EB6E2C500B339E5 /* PBXTextBookmark */ = 8BD128462EB6E2C500B339E5 /* PBXTextBookmark */;
8B3D228A2ED87DA50020B133 /* PBXTextBookmark */ = 8B3D228A2ED87DA50020B133 /* PBXTextBookmark */;
8B3D22A82ED8812F0020B133 /* PBXTextBookmark */ = 8B3D22A82ED8812F0020B133 /* PBXTextBookmark */;
8B7D6DA42EBD2313000B38FA /* PBXTextBookmark */ = 8B7D6DA42EBD2313000B38FA /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B2829512EB7764F003789A7 /* PBXTextBookmark */ = {
8B3D228A2ED87DA50020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* kWoodRoom.cpp */;
name = "kWoodRoom.cpp: 434";
rLen = 0;
rLoc = 19878;
rType = 0;
vrLen = 128;
vrLoc = 20185;
};
8B3D22A82ED8812F0020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* kWoodRoom.cpp */;
name = "kWoodRoom.cpp: 434";
rLen = 0;
rLoc = 19878;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B7D6DA42EBD2313000B38FA /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* kWoodRoom.h */;
name = "kWoodRoom.h: 88";
rLen = 0;
rLoc = 4838;
rLoc = 4839;
rType = 0;
vrLen = 1065;
vrLoc = 3804;
vrLen = 283;
vrLoc = 4586;
};
8BA05A660720730100365D66 /* kWoodRoom.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {939, 14634}}";
sepNavSelRange = "{35694, 84}";
sepNavVisRange = "{21092, 1777}";
sepNavWindowFrame = "{{7, 52}, {912, 826}}";
sepNavIntBoundsRect = "{{0, 0}, {554, 13878}}";
sepNavSelRange = "{19878, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{10, 38}, {792, 840}}";
};
};
8BA05A690720730100365D66 /* kWoodRoomVersion.h */ = {
@ -96,32 +116,12 @@
};
8BC6025B073B072D006C4272 /* kWoodRoom.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {7041, 4446}}";
sepNavSelRange = "{4838, 0}";
sepNavVisRange = "{3804, 1065}";
sepNavWindowFrame = "{{15, 47}, {912, 826}}";
sepNavIntBoundsRect = "{{0, 0}, {1146, 5634}}";
sepNavSelRange = "{9111, 0}";
sepNavVisRange = "{8573, 970}";
sepNavWindowFrame = "{{33, 38}, {912, 826}}";
};
};
8BD128442EB6E2C500B339E5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* kWoodRoom.cpp */;
name = "kWoodRoom.cpp: 472";
rLen = 0;
rLoc = 22228;
rType = 0;
vrLen = 184;
vrLoc = 22080;
};
8BD128462EB6E2C500B339E5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* kWoodRoom.h */;
name = "kWoodRoom.h: 88";
rLen = 0;
rLoc = 4838;
rType = 0;
vrLen = 1065;
vrLoc = 3804;
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;

View file

@ -324,7 +324,7 @@
<real>185</real>
</array>
<key>RubberWindowFrame</key>
<string>27 248 810 487 0 0 1440 878 </string>
<string>39 161 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -340,7 +340,7 @@
<key>PBXProjectModuleGUID</key>
<string>8B47D35B2EB6C9600017457B</string>
<key>PBXProjectModuleLabel</key>
<string>kWoodRoom.h</string>
<string>kWoodRoom.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -348,15 +348,15 @@
<key>PBXProjectModuleGUID</key>
<string>8B47D35C2EB6C9600017457B</string>
<key>PBXProjectModuleLabel</key>
<string>kWoodRoom.h</string>
<string>kWoodRoom.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B2829512EB7764F003789A7</string>
<string>8B3D22A82ED8812F0020B133</string>
<key>history</key>
<array>
<string>8BD128442EB6E2C500B339E5</string>
<string>8BD128462EB6E2C500B339E5</string>
<string>8B7D6DA42EBD2313000B38FA</string>
<string>8B3D228A2ED87DA50020B133</string>
</array>
</dict>
<key>SplitCount</key>
@ -370,18 +370,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 102}}</string>
<string>{{0, 0}, {603, 32}}</string>
<key>RubberWindowFrame</key>
<string>27 248 810 487 0 0 1440 878 </string>
<string>39 161 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>102pt</string>
<string>32pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>339pt</string>
<string>409pt</string>
<key>Tabs</key>
<array>
<dict>
@ -395,9 +395,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 312}}</string>
<string>{{10, 27}, {603, 382}}</string>
<key>RubberWindowFrame</key>
<string>27 248 810 487 0 0 1440 878 </string>
<string>39 161 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -451,7 +451,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 414}}</string>
<string>{{10, 27}, {603, 363}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -479,11 +479,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B2829522EB7764F003789A7</string>
<string>8B3D22A92ED8812F0020B133</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B2829532EB7764F003789A7</string>
<string>8B3D22AA2ED8812F0020B133</string>
<string>8B47D35B2EB6C9600017457B</string>
<string>8B2829542EB7764F003789A7</string>
<string>8B3D22AB2ED8812F0020B133</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -636,7 +636,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>783775311.75096202</real>
<real>785940783.33895898</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -653,11 +653,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B2829552EB7764F003789A7</string>
<string>8B3D22AC2ED8812F0020B133</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/kWoodRoom/kWoodRoom.xcodeproj</string>
</array>
<key>WindowString</key>
<string>27 248 810 487 0 0 1440 878 </string>
<string>39 161 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -0,0 +1,355 @@
/*
* File: BitDualPan.cpp
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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.
*
*/
/*=============================================================================
BitDualPan.cpp
=============================================================================*/
#include "BitDualPan.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUDIOCOMPONENT_ENTRY(AUBaseFactory, BitDualPan)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::BitDualPan
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BitDualPan::BitDualPan(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_A:
AUBase::FillInParameterName (outParameterInfo, kParameterAName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 BitDualPan::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// BitDualPan::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____BitDualPanEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::BitDualPanKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult BitDualPan::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// BitDualPan::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus BitDualPan::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
double gainControl = (GetParameter( kParam_A )*0.5)+0.05; //0.0 to 1.0
int gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
int bitshiftL = gainBits - 3;
int bitshiftR = gainBits - 3;
double panControl = (GetParameter( kParam_B )*2.0)-1.0; //-1.0 to 1.0
double panAttenuation = (1.0-fabs(panControl));
int panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double LgainL = 1.0;
double LgainR = 1.0;
switch (bitshiftL)
{
case 17: LgainL = 0.0; break;
case 16: LgainL = 0.0000152587890625; break;
case 15: LgainL = 0.000030517578125; break;
case 14: LgainL = 0.00006103515625; break;
case 13: LgainL = 0.0001220703125; break;
case 12: LgainL = 0.000244140625; break;
case 11: LgainL = 0.00048828125; break;
case 10: LgainL = 0.0009765625; break;
case 9: LgainL = 0.001953125; break;
case 8: LgainL = 0.00390625; break;
case 7: LgainL = 0.0078125; break;
case 6: LgainL = 0.015625; break;
case 5: LgainL = 0.03125; break;
case 4: LgainL = 0.0625; break;
case 3: LgainL = 0.125; break;
case 2: LgainL = 0.25; break;
case 1: LgainL = 0.5; break;
case 0: LgainL = 1.0; break;
case -1: LgainL = 2.0; break;
case -2: LgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: LgainR = 0.0; break;
case 16: LgainR = 0.0000152587890625; break;
case 15: LgainR = 0.000030517578125; break;
case 14: LgainR = 0.00006103515625; break;
case 13: LgainR = 0.0001220703125; break;
case 12: LgainR = 0.000244140625; break;
case 11: LgainR = 0.00048828125; break;
case 10: LgainR = 0.0009765625; break;
case 9: LgainR = 0.001953125; break;
case 8: LgainR = 0.00390625; break;
case 7: LgainR = 0.0078125; break;
case 6: LgainR = 0.015625; break;
case 5: LgainR = 0.03125; break;
case 4: LgainR = 0.0625; break;
case 3: LgainR = 0.125; break;
case 2: LgainR = 0.25; break;
case 1: LgainR = 0.5; break;
case 0: LgainR = 1.0; break;
case -1: LgainR = 2.0; break;
case -2: LgainR = 4.0; break;
}
gainControl = (GetParameter( kParam_C )*0.5)+0.05; //0.0 to 1.0
gainBits = 20; //start beyond maximum attenuation
if (gainControl > 0.0) gainBits = floor(1.0 / gainControl);
bitshiftL = gainBits - 3;
bitshiftR = gainBits - 3;
panControl = (GetParameter( kParam_D )*2.0)-1.0; //-1.0 to 1.0
panAttenuation = (1.0-fabs(panControl));
panBits = 20; //start centered
if (panAttenuation > 0.0) panBits = floor(1.0 / panAttenuation);
if (panControl > 0.25) bitshiftL += panBits;
if (panControl < -0.25) bitshiftR += panBits;
if (bitshiftL < -2) bitshiftL = -2; if (bitshiftL > 17) bitshiftL = 17;
if (bitshiftR < -2) bitshiftR = -2; if (bitshiftR > 17) bitshiftR = 17;
double RgainL = 1.0;
double RgainR = 1.0;
switch (bitshiftL)
{
case 17: RgainL = 0.0; break;
case 16: RgainL = 0.0000152587890625; break;
case 15: RgainL = 0.000030517578125; break;
case 14: RgainL = 0.00006103515625; break;
case 13: RgainL = 0.0001220703125; break;
case 12: RgainL = 0.000244140625; break;
case 11: RgainL = 0.00048828125; break;
case 10: RgainL = 0.0009765625; break;
case 9: RgainL = 0.001953125; break;
case 8: RgainL = 0.00390625; break;
case 7: RgainL = 0.0078125; break;
case 6: RgainL = 0.015625; break;
case 5: RgainL = 0.03125; break;
case 4: RgainL = 0.0625; break;
case 3: RgainL = 0.125; break;
case 2: RgainL = 0.25; break;
case 1: RgainL = 0.5; break;
case 0: RgainL = 1.0; break;
case -1: RgainL = 2.0; break;
case -2: RgainL = 4.0; break;
}
switch (bitshiftR)
{
case 17: RgainR = 0.0; break;
case 16: RgainR = 0.0000152587890625; break;
case 15: RgainR = 0.000030517578125; break;
case 14: RgainR = 0.00006103515625; break;
case 13: RgainR = 0.0001220703125; break;
case 12: RgainR = 0.000244140625; break;
case 11: RgainR = 0.00048828125; break;
case 10: RgainR = 0.0009765625; break;
case 9: RgainR = 0.001953125; break;
case 8: RgainR = 0.00390625; break;
case 7: RgainR = 0.0078125; break;
case 6: RgainR = 0.015625; break;
case 5: RgainR = 0.03125; break;
case 4: RgainR = 0.0625; break;
case 3: RgainR = 0.125; break;
case 2: RgainR = 0.25; break;
case 1: RgainR = 0.5; break;
case 0: RgainR = 1.0; break;
case -1: RgainR = 2.0; break;
case -2: RgainR = 4.0; break;
}
while (nSampleFrames-- > 0) {
double monoL = *inputL;
double monoR = *inputR;
*outputL = (monoL*LgainL)+(monoR*RgainL);
*outputR = (monoL*LgainR)+(monoR*RgainR);
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1,2 @@
_BitDualPanEntry
_BitDualPanFactory

View file

@ -0,0 +1,125 @@
/*
* File: BitDualPan.h
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "BitDualPanVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __BitDualPan_h__
#define __BitDualPan_h__
#pragma mark ____BitDualPan Parameters
// parameters
static const float kDefaultValue_ParamA = 0.5;
static const float kDefaultValue_ParamB = 0.0;
static const float kDefaultValue_ParamC = 0.5;
static const float kDefaultValue_ParamD = 1.0;
static CFStringRef kParameterAName = CFSTR("L Vol");
static CFStringRef kParameterBName = CFSTR("L Pan");
static CFStringRef kParameterCName = CFSTR("R Vol");
static CFStringRef kParameterDName = CFSTR("R Pan");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
//Add your parameters here...
kNumberOfParameters=4
};
#pragma mark ____BitDualPan
class BitDualPan : public AUEffectBase
{
public:
BitDualPan(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~BitDualPan () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
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 kBitDualPanVersion; }
private:
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: BitDualPan.r
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "BitDualPanVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_BitDualPan 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BitDualPan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_BitDualPan
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE BitDualPan_COMP_SUBTYPE
#define COMP_MANUF BitDualPan_COMP_MANF
#define VERSION kBitDualPanVersion
#define NAME "Airwindows: BitDualPan"
#define DESCRIPTION "BitDualPan AU"
#define ENTRY_POINT "BitDualPanEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,147 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* BitDualPan */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* 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,
188,
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 = 785872420;
PBXWorkspaceStateSaveDate = 785872420;
};
perUserProjectItems = {
8B0F89892ECF391400E4B38F /* PBXTextBookmark */ = 8B0F89892ECF391400E4B38F /* PBXTextBookmark */;
8B3D20B22ED777C40020B133 /* PBXTextBookmark */ = 8B3D20B22ED777C40020B133 /* PBXTextBookmark */;
8B3D20B32ED777C40020B133 /* PBXBookmark */ = 8B3D20B32ED777C40020B133 /* PBXBookmark */;
8B3D20B42ED777C40020B133 /* PBXTextBookmark */ = 8B3D20B42ED777C40020B133 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B0F89892ECF391400E4B38F /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* BitDualPan.h */;
name = "BitDualPan.h: 120";
rLen = 0;
rLoc = 5080;
rType = 0;
vrLen = 18;
vrLoc = 5066;
};
8B3D20B22ED777C40020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* BitDualPan.cpp */;
name = "BitDualPan.cpp: 215";
rLen = 0;
rLoc = 9703;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B3D20B32ED777C40020B133 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A690720730100365D66 /* BitDualPanVersion.h */;
};
8B3D20B42ED777C40020B133 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* BitDualPanVersion.h */;
name = "BitDualPanVersion.h: 54";
rLen = 0;
rLoc = 2914;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8BA05A660720730100365D66 /* BitDualPan.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 6408}}";
sepNavSelRange = "{14359, 148}";
sepNavVisRange = "{13573, 1017}";
sepNavWindowFrame = "{{600, 72}, {840, 806}}";
};
};
8BA05A690720730100365D66 /* BitDualPanVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1098}}";
sepNavSelRange = "{2914, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{15, 67}, {840, 806}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {516, 23430}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1336}";
};
};
8BC6025B073B072D006C4272 /* BitDualPan.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 2250}}";
sepNavSelRange = "{5080, 0}";
sepNavVisRange = "{2536, 890}";
sepNavWindowFrame = "{{854, 47}, {840, 806}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* BitDualPan */ = {
activeExec = 0;
};
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,965 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
8B8476FE2EDA17E600F4D13A /* CAExtAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476762EDA17E600F4D13A /* CAExtAudioFile.h */; };
8B8476FF2EDA17E600F4D13A /* CACFMachPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476772EDA17E600F4D13A /* CACFMachPort.h */; };
8B8477002EDA17E600F4D13A /* CABool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476782EDA17E600F4D13A /* CABool.h */; };
8B8477012EDA17E600F4D13A /* CAComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476792EDA17E600F4D13A /* CAComponent.cpp */; };
8B8477022EDA17E600F4D13A /* CADebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84767A2EDA17E600F4D13A /* CADebugger.h */; };
8B8477032EDA17E600F4D13A /* CACFNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B84767B2EDA17E600F4D13A /* CACFNumber.cpp */; };
8B8477042EDA17E600F4D13A /* CAGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84767C2EDA17E600F4D13A /* CAGuard.h */; };
8B8477052EDA17E600F4D13A /* CAAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84767D2EDA17E600F4D13A /* CAAtomic.h */; };
8B8477062EDA17E600F4D13A /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84767E2EDA17E600F4D13A /* CAStreamBasicDescription.h */; };
8B8477072EDA17E600F4D13A /* CACFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84767F2EDA17E600F4D13A /* CACFObject.h */; };
8B8477082EDA17E600F4D13A /* CAStreamRangedDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476802EDA17E600F4D13A /* CAStreamRangedDescription.h */; };
8B8477092EDA17E600F4D13A /* CATokenMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476812EDA17E600F4D13A /* CATokenMap.h */; };
8B84770A2EDA17E600F4D13A /* CAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476822EDA17E600F4D13A /* CAComponent.h */; };
8B84770B2EDA17E600F4D13A /* CAAudioBufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476832EDA17E600F4D13A /* CAAudioBufferList.h */; };
8B84770C2EDA17E600F4D13A /* CAAudioUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476842EDA17E600F4D13A /* CAAudioUnit.h */; };
8B84770D2EDA17E600F4D13A /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476852EDA17E600F4D13A /* CAAUParameter.h */; };
8B84770E2EDA17E600F4D13A /* CAException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476862EDA17E600F4D13A /* CAException.h */; };
8B84770F2EDA17E600F4D13A /* CAAUProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476872EDA17E600F4D13A /* CAAUProcessor.cpp */; };
8B8477102EDA17E600F4D13A /* CAAUProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476882EDA17E600F4D13A /* CAAUProcessor.h */; };
8B8477112EDA17E600F4D13A /* CAProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476892EDA17E600F4D13A /* CAProcess.h */; };
8B8477122EDA17E600F4D13A /* CACFDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84768A2EDA17E600F4D13A /* CACFDictionary.h */; };
8B8477132EDA17E600F4D13A /* CAPThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84768B2EDA17E600F4D13A /* CAPThread.h */; };
8B8477142EDA17E600F4D13A /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B84768C2EDA17E600F4D13A /* CAAUParameter.cpp */; };
8B8477152EDA17E600F4D13A /* CAAudioTimeStamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84768D2EDA17E600F4D13A /* CAAudioTimeStamp.h */; };
8B8477162EDA17E600F4D13A /* CAFilePathUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B84768E2EDA17E600F4D13A /* CAFilePathUtils.cpp */; };
8B8477172EDA17E600F4D13A /* CAAudioValueRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84768F2EDA17E600F4D13A /* CAAudioValueRange.h */; };
8B8477182EDA17E600F4D13A /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476902EDA17E600F4D13A /* CAVectorUnitTypes.h */; };
8B8477192EDA17E600F4D13A /* CAAudioChannelLayoutObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476912EDA17E600F4D13A /* CAAudioChannelLayoutObject.cpp */; };
8B84771A2EDA17E600F4D13A /* CAGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476922EDA17E600F4D13A /* CAGuard.cpp */; };
8B84771B2EDA17E600F4D13A /* CACFNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476932EDA17E600F4D13A /* CACFNumber.h */; };
8B84771C2EDA17E600F4D13A /* CACFDistributedNotification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476942EDA17E600F4D13A /* CACFDistributedNotification.cpp */; };
8B84771D2EDA17E600F4D13A /* CACFString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476952EDA17E600F4D13A /* CACFString.h */; };
8B84771E2EDA17E600F4D13A /* CAAUMIDIMapManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476962EDA17E600F4D13A /* CAAUMIDIMapManager.cpp */; };
8B84771F2EDA17E600F4D13A /* CAComponentDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476972EDA17E600F4D13A /* CAComponentDescription.cpp */; };
8B8477202EDA17E600F4D13A /* CAHostTimeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476982EDA17E600F4D13A /* CAHostTimeBase.h */; };
8B8477212EDA17E600F4D13A /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476992EDA17E600F4D13A /* CADebugMacros.cpp */; };
8B8477222EDA17E600F4D13A /* CAAudioFileFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84769A2EDA17E600F4D13A /* CAAudioFileFormats.h */; };
8B8477232EDA17E600F4D13A /* CAAUMIDIMapManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84769B2EDA17E600F4D13A /* CAAUMIDIMapManager.h */; };
8B8477242EDA17E600F4D13A /* CACFDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B84769C2EDA17E600F4D13A /* CACFDictionary.cpp */; };
8B8477252EDA17E600F4D13A /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84769D2EDA17E600F4D13A /* CAMutex.h */; };
8B8477262EDA17E600F4D13A /* CACFString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B84769E2EDA17E600F4D13A /* CACFString.cpp */; };
8B8477272EDA17E600F4D13A /* CASettingsStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B84769F2EDA17E600F4D13A /* CASettingsStorage.h */; };
8B8477282EDA17E600F4D13A /* CADebugPrintf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A02EDA17E600F4D13A /* CADebugPrintf.h */; };
8B8477292EDA17E600F4D13A /* CAXException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476A12EDA17E600F4D13A /* CAXException.cpp */; };
8B84772A2EDA17E600F4D13A /* CAAUMIDIMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A22EDA17E600F4D13A /* CAAUMIDIMap.h */; };
8B84772B2EDA17E600F4D13A /* AUParamInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A32EDA17E600F4D13A /* AUParamInfo.h */; };
8B84772C2EDA17E600F4D13A /* CABitOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A42EDA17E600F4D13A /* CABitOperations.h */; };
8B84772D2EDA17E600F4D13A /* CACFPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476A52EDA17E600F4D13A /* CACFPreferences.cpp */; };
8B84772E2EDA17E600F4D13A /* CABundleLocker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A62EDA17E600F4D13A /* CABundleLocker.h */; };
8B84772F2EDA17E600F4D13A /* CAPropertyAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A72EDA17E600F4D13A /* CAPropertyAddress.h */; };
8B8477302EDA17E600F4D13A /* CAXException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476A82EDA17E600F4D13A /* CAXException.h */; };
8B8477312EDA17E600F4D13A /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476A92EDA17E600F4D13A /* CAAudioChannelLayout.cpp */; };
8B8477322EDA17E600F4D13A /* CAThreadSafeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476AA2EDA17E600F4D13A /* CAThreadSafeList.h */; };
8B8477332EDA17E600F4D13A /* CAAudioUnitOutputCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476AB2EDA17E600F4D13A /* CAAudioUnitOutputCapturer.h */; };
8B8477342EDA17E600F4D13A /* AUParamInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476AC2EDA17E600F4D13A /* AUParamInfo.cpp */; };
8B8477352EDA17E600F4D13A /* CASharedLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476AD2EDA17E600F4D13A /* CASharedLibrary.cpp */; };
8B8477362EDA17E600F4D13A /* CAAUMIDIMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476AE2EDA17E600F4D13A /* CAAUMIDIMap.cpp */; };
8B8477372EDA17E600F4D13A /* CALogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476AF2EDA17E600F4D13A /* CALogMacros.h */; };
8B8477382EDA17E600F4D13A /* CACFMessagePort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476B02EDA17E600F4D13A /* CACFMessagePort.cpp */; };
8B8477392EDA17E600F4D13A /* CARingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476B12EDA17E600F4D13A /* CARingBuffer.h */; };
8B84773A2EDA17E600F4D13A /* AUOutputBL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476B22EDA17E600F4D13A /* AUOutputBL.cpp */; };
8B84773B2EDA17E600F4D13A /* CABufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476B32EDA17E600F4D13A /* CABufferList.h */; };
8B84773C2EDA17E600F4D13A /* CASharedLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476B42EDA17E600F4D13A /* CASharedLibrary.h */; };
8B84773D2EDA17E600F4D13A /* CACFData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476B52EDA17E600F4D13A /* CACFData.h */; };
8B84773E2EDA17E600F4D13A /* CAStreamRangedDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476B62EDA17E600F4D13A /* CAStreamRangedDescription.cpp */; };
8B84773F2EDA17E600F4D13A /* CAPThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476B72EDA17E600F4D13A /* CAPThread.cpp */; };
8B8477402EDA17E600F4D13A /* CAAutoDisposer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476B82EDA17E600F4D13A /* CAAutoDisposer.h */; };
8B8477412EDA17E600F4D13A /* CACFPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476B92EDA17E600F4D13A /* CACFPreferences.h */; };
8B8477422EDA17E600F4D13A /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476BA2EDA17E600F4D13A /* CAVectorUnit.cpp */; };
8B8477432EDA17E600F4D13A /* CAComponentDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476BB2EDA17E600F4D13A /* CAComponentDescription.h */; };
8B8477442EDA17E600F4D13A /* CADebugMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476BC2EDA17E600F4D13A /* CADebugMacros.h */; };
8B8477452EDA17E600F4D13A /* AUOutputBL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476BD2EDA17E600F4D13A /* AUOutputBL.h */; };
8B8477462EDA17E600F4D13A /* CADebugPrintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476BE2EDA17E600F4D13A /* CADebugPrintf.cpp */; };
8B8477472EDA17E600F4D13A /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476BF2EDA17E600F4D13A /* CARingBuffer.cpp */; };
8B8477482EDA17E600F4D13A /* CACFPlugIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476C02EDA17E600F4D13A /* CACFPlugIn.h */; };
8B8477492EDA17E600F4D13A /* CASettingsStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476C12EDA17E600F4D13A /* CASettingsStorage.cpp */; };
8B84774A2EDA17E600F4D13A /* CAMixMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476C22EDA17E600F4D13A /* CAMixMap.h */; };
8B84774B2EDA17E600F4D13A /* CACFDistributedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476C32EDA17E600F4D13A /* CACFDistributedNotification.h */; };
8B84774C2EDA17E600F4D13A /* CAFilePathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476C42EDA17E600F4D13A /* CAFilePathUtils.h */; };
8B84774D2EDA17E600F4D13A /* CATink.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476C52EDA17E600F4D13A /* CATink.h */; };
8B84774E2EDA17E600F4D13A /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476C62EDA17E600F4D13A /* CAStreamBasicDescription.cpp */; };
8B84774F2EDA17E600F4D13A /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476C72EDA17E600F4D13A /* CAAudioChannelLayout.h */; };
8B8477502EDA17E600F4D13A /* CAProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476C82EDA17E600F4D13A /* CAProcess.cpp */; };
8B8477512EDA17E600F4D13A /* CAHostTimeBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476C92EDA17E600F4D13A /* CAHostTimeBase.cpp */; };
8B8477522EDA17E600F4D13A /* CAPersistence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476CA2EDA17E600F4D13A /* CAPersistence.cpp */; };
8B8477532EDA17E600F4D13A /* CAAudioBufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476CB2EDA17E600F4D13A /* CAAudioBufferList.cpp */; };
8B8477542EDA17E600F4D13A /* CAAudioTimeStamp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476CC2EDA17E600F4D13A /* CAAudioTimeStamp.cpp */; };
8B8477552EDA17E600F4D13A /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476CD2EDA17E600F4D13A /* CAVectorUnit.h */; };
8B8477562EDA17E600F4D13A /* CAByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476CE2EDA17E600F4D13A /* CAByteOrder.h */; };
8B8477572EDA17E600F4D13A /* CACFArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476CF2EDA17E600F4D13A /* CACFArray.h */; };
8B8477582EDA17E600F4D13A /* CAAtomicStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476D02EDA17E600F4D13A /* CAAtomicStack.h */; };
8B8477592EDA17E600F4D13A /* CAReferenceCounted.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476D12EDA17E600F4D13A /* CAReferenceCounted.h */; };
8B84775A2EDA17E600F4D13A /* CACFMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D22EDA17E600F4D13A /* CACFMachPort.cpp */; };
8B84775B2EDA17E600F4D13A /* CABufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D32EDA17E600F4D13A /* CABufferList.cpp */; };
8B84775C2EDA17E600F4D13A /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D42EDA17E600F4D13A /* CAMutex.cpp */; };
8B84775D2EDA17E600F4D13A /* CADebugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D52EDA17E600F4D13A /* CADebugger.cpp */; };
8B84775E2EDA17E600F4D13A /* CABundleLocker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D62EDA17E600F4D13A /* CABundleLocker.cpp */; };
8B84775F2EDA17E600F4D13A /* CAAudioFileFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D72EDA17E600F4D13A /* CAAudioFileFormats.cpp */; };
8B8477602EDA17E600F4D13A /* CAMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476D82EDA17E600F4D13A /* CAMath.h */; };
8B8477612EDA17E600F4D13A /* CACFArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476D92EDA17E600F4D13A /* CACFArray.cpp */; };
8B8477622EDA17E600F4D13A /* CACFMessagePort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476DA2EDA17E600F4D13A /* CACFMessagePort.h */; };
8B8477632EDA17E600F4D13A /* CAAudioValueRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476DB2EDA17E600F4D13A /* CAAudioValueRange.cpp */; };
8B8477642EDA17E600F4D13A /* CAAudioUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476DC2EDA17E600F4D13A /* CAAudioUnit.cpp */; };
8B8477652EDA17E600F4D13A /* AUViewLocalizedStringKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476E02EDA17E600F4D13A /* AUViewLocalizedStringKeys.h */; };
8B8477662EDA17E600F4D13A /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476E22EDA17E600F4D13A /* ComponentBase.cpp */; };
8B8477672EDA17E600F4D13A /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476E32EDA17E600F4D13A /* AUScopeElement.cpp */; };
8B8477682EDA17E600F4D13A /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476E42EDA17E600F4D13A /* ComponentBase.h */; };
8B8477692EDA17E600F4D13A /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476E52EDA17E600F4D13A /* AUBase.cpp */; };
8B84776A2EDA17E600F4D13A /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476E62EDA17E600F4D13A /* AUInputElement.h */; };
8B84776B2EDA17E600F4D13A /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476E72EDA17E600F4D13A /* AUBase.h */; };
8B84776C2EDA17E600F4D13A /* AUPlugInDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476E82EDA17E600F4D13A /* AUPlugInDispatch.h */; };
8B84776D2EDA17E600F4D13A /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476E92EDA17E600F4D13A /* AUDispatch.h */; };
8B84776E2EDA17E600F4D13A /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476EA2EDA17E600F4D13A /* AUOutputElement.cpp */; };
8B8477702EDA17E600F4D13A /* AUPlugInDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476EC2EDA17E600F4D13A /* AUPlugInDispatch.cpp */; };
8B8477712EDA17E600F4D13A /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476ED2EDA17E600F4D13A /* AUOutputElement.h */; };
8B8477722EDA17E600F4D13A /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476EE2EDA17E600F4D13A /* AUDispatch.cpp */; };
8B8477732EDA17E600F4D13A /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476EF2EDA17E600F4D13A /* AUScopeElement.h */; };
8B8477742EDA17E600F4D13A /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476F02EDA17E600F4D13A /* AUInputElement.cpp */; };
8B8477752EDA17E600F4D13A /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476F22EDA17E600F4D13A /* AUEffectBase.cpp */; };
8B8477762EDA17E600F4D13A /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476F32EDA17E600F4D13A /* AUEffectBase.h */; };
8B8477772EDA17E600F4D13A /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476F52EDA17E600F4D13A /* AUTimestampGenerator.h */; };
8B8477782EDA17E600F4D13A /* AUBaseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476F62EDA17E600F4D13A /* AUBaseHelper.cpp */; };
8B8477792EDA17E600F4D13A /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476F72EDA17E600F4D13A /* AUSilentTimeout.h */; };
8B84777A2EDA17E600F4D13A /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476F82EDA17E600F4D13A /* AUInputFormatConverter.h */; };
8B84777B2EDA17E600F4D13A /* AUTimestampGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476F92EDA17E600F4D13A /* AUTimestampGenerator.cpp */; };
8B84777C2EDA17E600F4D13A /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B8476FA2EDA17E600F4D13A /* AUBuffer.cpp */; };
8B84777D2EDA17E600F4D13A /* AUMIDIDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476FB2EDA17E600F4D13A /* AUMIDIDefs.h */; };
8B84777E2EDA17E600F4D13A /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476FC2EDA17E600F4D13A /* AUBuffer.h */; };
8B84777F2EDA17E600F4D13A /* AUBaseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8476FD2EDA17E600F4D13A /* AUBaseHelper.h */; };
8BA05A6B0720730100365D66 /* BitDualPan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* BitDualPan.cpp */; };
8BA05A6E0720730100365D66 /* BitDualPanVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* BitDualPanVersion.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 */; };
8BC6025C073B072D006C4272 /* BitDualPan.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* BitDualPan.h */; };
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
8B5C7FBF076FB2C200A15F61 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
8B8476762EDA17E600F4D13A /* CAExtAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAExtAudioFile.h; sourceTree = "<group>"; };
8B8476772EDA17E600F4D13A /* CACFMachPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMachPort.h; sourceTree = "<group>"; };
8B8476782EDA17E600F4D13A /* CABool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABool.h; sourceTree = "<group>"; };
8B8476792EDA17E600F4D13A /* CAComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponent.cpp; sourceTree = "<group>"; };
8B84767A2EDA17E600F4D13A /* CADebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugger.h; sourceTree = "<group>"; };
8B84767B2EDA17E600F4D13A /* CACFNumber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFNumber.cpp; sourceTree = "<group>"; };
8B84767C2EDA17E600F4D13A /* CAGuard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAGuard.h; sourceTree = "<group>"; };
8B84767D2EDA17E600F4D13A /* CAAtomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomic.h; sourceTree = "<group>"; };
8B84767E2EDA17E600F4D13A /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
8B84767F2EDA17E600F4D13A /* CACFObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFObject.h; sourceTree = "<group>"; };
8B8476802EDA17E600F4D13A /* CAStreamRangedDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamRangedDescription.h; sourceTree = "<group>"; };
8B8476812EDA17E600F4D13A /* CATokenMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATokenMap.h; sourceTree = "<group>"; };
8B8476822EDA17E600F4D13A /* CAComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponent.h; sourceTree = "<group>"; };
8B8476832EDA17E600F4D13A /* CAAudioBufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioBufferList.h; sourceTree = "<group>"; };
8B8476842EDA17E600F4D13A /* CAAudioUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnit.h; sourceTree = "<group>"; };
8B8476852EDA17E600F4D13A /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = "<group>"; };
8B8476862EDA17E600F4D13A /* CAException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAException.h; sourceTree = "<group>"; };
8B8476872EDA17E600F4D13A /* CAAUProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUProcessor.cpp; sourceTree = "<group>"; };
8B8476882EDA17E600F4D13A /* CAAUProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUProcessor.h; sourceTree = "<group>"; };
8B8476892EDA17E600F4D13A /* CAProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAProcess.h; sourceTree = "<group>"; };
8B84768A2EDA17E600F4D13A /* CACFDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDictionary.h; sourceTree = "<group>"; };
8B84768B2EDA17E600F4D13A /* CAPThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPThread.h; sourceTree = "<group>"; };
8B84768C2EDA17E600F4D13A /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = "<group>"; };
8B84768D2EDA17E600F4D13A /* CAAudioTimeStamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioTimeStamp.h; sourceTree = "<group>"; };
8B84768E2EDA17E600F4D13A /* CAFilePathUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAFilePathUtils.cpp; sourceTree = "<group>"; };
8B84768F2EDA17E600F4D13A /* CAAudioValueRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioValueRange.h; sourceTree = "<group>"; };
8B8476902EDA17E600F4D13A /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; };
8B8476912EDA17E600F4D13A /* CAAudioChannelLayoutObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayoutObject.cpp; sourceTree = "<group>"; };
8B8476922EDA17E600F4D13A /* CAGuard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAGuard.cpp; sourceTree = "<group>"; };
8B8476932EDA17E600F4D13A /* CACFNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFNumber.h; sourceTree = "<group>"; };
8B8476942EDA17E600F4D13A /* CACFDistributedNotification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDistributedNotification.cpp; sourceTree = "<group>"; };
8B8476952EDA17E600F4D13A /* CACFString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFString.h; sourceTree = "<group>"; };
8B8476962EDA17E600F4D13A /* CAAUMIDIMapManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMapManager.cpp; sourceTree = "<group>"; };
8B8476972EDA17E600F4D13A /* CAComponentDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponentDescription.cpp; sourceTree = "<group>"; };
8B8476982EDA17E600F4D13A /* CAHostTimeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAHostTimeBase.h; sourceTree = "<group>"; };
8B8476992EDA17E600F4D13A /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugMacros.cpp; sourceTree = "<group>"; };
8B84769A2EDA17E600F4D13A /* CAAudioFileFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioFileFormats.h; sourceTree = "<group>"; };
8B84769B2EDA17E600F4D13A /* CAAUMIDIMapManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMapManager.h; sourceTree = "<group>"; };
8B84769C2EDA17E600F4D13A /* CACFDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDictionary.cpp; sourceTree = "<group>"; };
8B84769D2EDA17E600F4D13A /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMutex.h; sourceTree = "<group>"; };
8B84769E2EDA17E600F4D13A /* CACFString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFString.cpp; sourceTree = "<group>"; };
8B84769F2EDA17E600F4D13A /* CASettingsStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASettingsStorage.h; sourceTree = "<group>"; };
8B8476A02EDA17E600F4D13A /* CADebugPrintf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugPrintf.h; sourceTree = "<group>"; };
8B8476A12EDA17E600F4D13A /* CAXException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAXException.cpp; sourceTree = "<group>"; };
8B8476A22EDA17E600F4D13A /* CAAUMIDIMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMap.h; sourceTree = "<group>"; };
8B8476A32EDA17E600F4D13A /* AUParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUParamInfo.h; sourceTree = "<group>"; };
8B8476A42EDA17E600F4D13A /* CABitOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABitOperations.h; sourceTree = "<group>"; };
8B8476A52EDA17E600F4D13A /* CACFPreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFPreferences.cpp; sourceTree = "<group>"; };
8B8476A62EDA17E600F4D13A /* CABundleLocker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABundleLocker.h; sourceTree = "<group>"; };
8B8476A72EDA17E600F4D13A /* CAPropertyAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPropertyAddress.h; sourceTree = "<group>"; };
8B8476A82EDA17E600F4D13A /* CAXException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAXException.h; sourceTree = "<group>"; };
8B8476A92EDA17E600F4D13A /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
8B8476AA2EDA17E600F4D13A /* CAThreadSafeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAThreadSafeList.h; sourceTree = "<group>"; };
8B8476AB2EDA17E600F4D13A /* CAAudioUnitOutputCapturer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnitOutputCapturer.h; sourceTree = "<group>"; };
8B8476AC2EDA17E600F4D13A /* AUParamInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUParamInfo.cpp; sourceTree = "<group>"; };
8B8476AD2EDA17E600F4D13A /* CASharedLibrary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASharedLibrary.cpp; sourceTree = "<group>"; };
8B8476AE2EDA17E600F4D13A /* CAAUMIDIMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMap.cpp; sourceTree = "<group>"; };
8B8476AF2EDA17E600F4D13A /* CALogMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CALogMacros.h; sourceTree = "<group>"; };
8B8476B02EDA17E600F4D13A /* CACFMessagePort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMessagePort.cpp; sourceTree = "<group>"; };
8B8476B12EDA17E600F4D13A /* CARingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CARingBuffer.h; sourceTree = "<group>"; };
8B8476B22EDA17E600F4D13A /* AUOutputBL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputBL.cpp; sourceTree = "<group>"; };
8B8476B32EDA17E600F4D13A /* CABufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABufferList.h; sourceTree = "<group>"; };
8B8476B42EDA17E600F4D13A /* CASharedLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASharedLibrary.h; sourceTree = "<group>"; };
8B8476B52EDA17E600F4D13A /* CACFData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFData.h; sourceTree = "<group>"; };
8B8476B62EDA17E600F4D13A /* CAStreamRangedDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamRangedDescription.cpp; sourceTree = "<group>"; };
8B8476B72EDA17E600F4D13A /* CAPThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPThread.cpp; sourceTree = "<group>"; };
8B8476B82EDA17E600F4D13A /* CAAutoDisposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAutoDisposer.h; sourceTree = "<group>"; };
8B8476B92EDA17E600F4D13A /* CACFPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPreferences.h; sourceTree = "<group>"; };
8B8476BA2EDA17E600F4D13A /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = "<group>"; };
8B8476BB2EDA17E600F4D13A /* CAComponentDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponentDescription.h; sourceTree = "<group>"; };
8B8476BC2EDA17E600F4D13A /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugMacros.h; sourceTree = "<group>"; };
8B8476BD2EDA17E600F4D13A /* AUOutputBL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputBL.h; sourceTree = "<group>"; };
8B8476BE2EDA17E600F4D13A /* CADebugPrintf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugPrintf.cpp; sourceTree = "<group>"; };
8B8476BF2EDA17E600F4D13A /* CARingBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CARingBuffer.cpp; sourceTree = "<group>"; };
8B8476C02EDA17E600F4D13A /* CACFPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPlugIn.h; sourceTree = "<group>"; };
8B8476C12EDA17E600F4D13A /* CASettingsStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASettingsStorage.cpp; sourceTree = "<group>"; };
8B8476C22EDA17E600F4D13A /* CAMixMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMixMap.h; sourceTree = "<group>"; };
8B8476C32EDA17E600F4D13A /* CACFDistributedNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDistributedNotification.h; sourceTree = "<group>"; };
8B8476C42EDA17E600F4D13A /* CAFilePathUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAFilePathUtils.h; sourceTree = "<group>"; };
8B8476C52EDA17E600F4D13A /* CATink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATink.h; sourceTree = "<group>"; };
8B8476C62EDA17E600F4D13A /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
8B8476C72EDA17E600F4D13A /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
8B8476C82EDA17E600F4D13A /* CAProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAProcess.cpp; sourceTree = "<group>"; };
8B8476C92EDA17E600F4D13A /* CAHostTimeBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAHostTimeBase.cpp; sourceTree = "<group>"; };
8B8476CA2EDA17E600F4D13A /* CAPersistence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPersistence.cpp; sourceTree = "<group>"; };
8B8476CB2EDA17E600F4D13A /* CAAudioBufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioBufferList.cpp; sourceTree = "<group>"; };
8B8476CC2EDA17E600F4D13A /* CAAudioTimeStamp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioTimeStamp.cpp; sourceTree = "<group>"; };
8B8476CD2EDA17E600F4D13A /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = "<group>"; };
8B8476CE2EDA17E600F4D13A /* CAByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAByteOrder.h; sourceTree = "<group>"; };
8B8476CF2EDA17E600F4D13A /* CACFArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFArray.h; sourceTree = "<group>"; };
8B8476D02EDA17E600F4D13A /* CAAtomicStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomicStack.h; sourceTree = "<group>"; };
8B8476D12EDA17E600F4D13A /* CAReferenceCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAReferenceCounted.h; sourceTree = "<group>"; };
8B8476D22EDA17E600F4D13A /* CACFMachPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMachPort.cpp; sourceTree = "<group>"; };
8B8476D32EDA17E600F4D13A /* CABufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABufferList.cpp; sourceTree = "<group>"; };
8B8476D42EDA17E600F4D13A /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAMutex.cpp; sourceTree = "<group>"; };
8B8476D52EDA17E600F4D13A /* CADebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugger.cpp; sourceTree = "<group>"; };
8B8476D62EDA17E600F4D13A /* CABundleLocker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABundleLocker.cpp; sourceTree = "<group>"; };
8B8476D72EDA17E600F4D13A /* CAAudioFileFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioFileFormats.cpp; sourceTree = "<group>"; };
8B8476D82EDA17E600F4D13A /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMath.h; sourceTree = "<group>"; };
8B8476D92EDA17E600F4D13A /* CACFArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFArray.cpp; sourceTree = "<group>"; };
8B8476DA2EDA17E600F4D13A /* CACFMessagePort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMessagePort.h; sourceTree = "<group>"; };
8B8476DB2EDA17E600F4D13A /* CAAudioValueRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioValueRange.cpp; sourceTree = "<group>"; };
8B8476DC2EDA17E600F4D13A /* CAAudioUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioUnit.cpp; sourceTree = "<group>"; };
8B8476E02EDA17E600F4D13A /* AUViewLocalizedStringKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUViewLocalizedStringKeys.h; sourceTree = "<group>"; };
8B8476E22EDA17E600F4D13A /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; };
8B8476E32EDA17E600F4D13A /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; };
8B8476E42EDA17E600F4D13A /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; };
8B8476E52EDA17E600F4D13A /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; };
8B8476E62EDA17E600F4D13A /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; };
8B8476E72EDA17E600F4D13A /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; };
8B8476E82EDA17E600F4D13A /* AUPlugInDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUPlugInDispatch.h; sourceTree = "<group>"; };
8B8476E92EDA17E600F4D13A /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; };
8B8476EA2EDA17E600F4D13A /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; };
8B8476EB2EDA17E600F4D13A /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; };
8B8476EC2EDA17E600F4D13A /* AUPlugInDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUPlugInDispatch.cpp; sourceTree = "<group>"; };
8B8476ED2EDA17E600F4D13A /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; };
8B8476EE2EDA17E600F4D13A /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; };
8B8476EF2EDA17E600F4D13A /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; };
8B8476F02EDA17E600F4D13A /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; };
8B8476F22EDA17E600F4D13A /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; };
8B8476F32EDA17E600F4D13A /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; };
8B8476F52EDA17E600F4D13A /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = "<group>"; };
8B8476F62EDA17E600F4D13A /* AUBaseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBaseHelper.cpp; sourceTree = "<group>"; };
8B8476F72EDA17E600F4D13A /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = "<group>"; };
8B8476F82EDA17E600F4D13A /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = "<group>"; };
8B8476F92EDA17E600F4D13A /* AUTimestampGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUTimestampGenerator.cpp; sourceTree = "<group>"; };
8B8476FA2EDA17E600F4D13A /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
8B8476FB2EDA17E600F4D13A /* AUMIDIDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUMIDIDefs.h; sourceTree = "<group>"; };
8B8476FC2EDA17E600F4D13A /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; };
8B8476FD2EDA17E600F4D13A /* AUBaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBaseHelper.h; sourceTree = "<group>"; };
8B8477802EDA184600F4D13A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
8BA05A660720730100365D66 /* BitDualPan.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = BitDualPan.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* BitDualPan.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = BitDualPan.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* BitDualPan.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = BitDualPan.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* BitDualPanVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BitDualPanVersion.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>"; };
8BC6025B073B072D006C4272 /* BitDualPan.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = BitDualPan.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* BitDualPan.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BitDualPan.component; sourceTree = BUILT_PRODUCTS_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 /* BitDualPan */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = BitDualPan;
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 = (
8B8476742EDA17E600F4D13A /* CA_SDK */,
8BA05A56072072A900365D66 /* AU Source */,
);
name = Source;
sourceTree = "<group>";
};
19C28FB4FE9D528D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D01CCD20486CAD60068D4B7 /* BitDualPan.component */,
);
name = Products;
sourceTree = "<group>";
};
8B8476742EDA17E600F4D13A /* CA_SDK */ = {
isa = PBXGroup;
children = (
8B8476752EDA17E600F4D13A /* PublicUtility */,
8B8476DD2EDA17E600F4D13A /* AudioUnits */,
);
name = CA_SDK;
path = ../../../../CA_SDK;
sourceTree = "<group>";
};
8B8476752EDA17E600F4D13A /* PublicUtility */ = {
isa = PBXGroup;
children = (
8B8476762EDA17E600F4D13A /* CAExtAudioFile.h */,
8B8476772EDA17E600F4D13A /* CACFMachPort.h */,
8B8476782EDA17E600F4D13A /* CABool.h */,
8B8476792EDA17E600F4D13A /* CAComponent.cpp */,
8B84767A2EDA17E600F4D13A /* CADebugger.h */,
8B84767B2EDA17E600F4D13A /* CACFNumber.cpp */,
8B84767C2EDA17E600F4D13A /* CAGuard.h */,
8B84767D2EDA17E600F4D13A /* CAAtomic.h */,
8B84767E2EDA17E600F4D13A /* CAStreamBasicDescription.h */,
8B84767F2EDA17E600F4D13A /* CACFObject.h */,
8B8476802EDA17E600F4D13A /* CAStreamRangedDescription.h */,
8B8476812EDA17E600F4D13A /* CATokenMap.h */,
8B8476822EDA17E600F4D13A /* CAComponent.h */,
8B8476832EDA17E600F4D13A /* CAAudioBufferList.h */,
8B8476842EDA17E600F4D13A /* CAAudioUnit.h */,
8B8476852EDA17E600F4D13A /* CAAUParameter.h */,
8B8476862EDA17E600F4D13A /* CAException.h */,
8B8476872EDA17E600F4D13A /* CAAUProcessor.cpp */,
8B8476882EDA17E600F4D13A /* CAAUProcessor.h */,
8B8476892EDA17E600F4D13A /* CAProcess.h */,
8B84768A2EDA17E600F4D13A /* CACFDictionary.h */,
8B84768B2EDA17E600F4D13A /* CAPThread.h */,
8B84768C2EDA17E600F4D13A /* CAAUParameter.cpp */,
8B84768D2EDA17E600F4D13A /* CAAudioTimeStamp.h */,
8B84768E2EDA17E600F4D13A /* CAFilePathUtils.cpp */,
8B84768F2EDA17E600F4D13A /* CAAudioValueRange.h */,
8B8476902EDA17E600F4D13A /* CAVectorUnitTypes.h */,
8B8476912EDA17E600F4D13A /* CAAudioChannelLayoutObject.cpp */,
8B8476922EDA17E600F4D13A /* CAGuard.cpp */,
8B8476932EDA17E600F4D13A /* CACFNumber.h */,
8B8476942EDA17E600F4D13A /* CACFDistributedNotification.cpp */,
8B8476952EDA17E600F4D13A /* CACFString.h */,
8B8476962EDA17E600F4D13A /* CAAUMIDIMapManager.cpp */,
8B8476972EDA17E600F4D13A /* CAComponentDescription.cpp */,
8B8476982EDA17E600F4D13A /* CAHostTimeBase.h */,
8B8476992EDA17E600F4D13A /* CADebugMacros.cpp */,
8B84769A2EDA17E600F4D13A /* CAAudioFileFormats.h */,
8B84769B2EDA17E600F4D13A /* CAAUMIDIMapManager.h */,
8B84769C2EDA17E600F4D13A /* CACFDictionary.cpp */,
8B84769D2EDA17E600F4D13A /* CAMutex.h */,
8B84769E2EDA17E600F4D13A /* CACFString.cpp */,
8B84769F2EDA17E600F4D13A /* CASettingsStorage.h */,
8B8476A02EDA17E600F4D13A /* CADebugPrintf.h */,
8B8476A12EDA17E600F4D13A /* CAXException.cpp */,
8B8476A22EDA17E600F4D13A /* CAAUMIDIMap.h */,
8B8476A32EDA17E600F4D13A /* AUParamInfo.h */,
8B8476A42EDA17E600F4D13A /* CABitOperations.h */,
8B8476A52EDA17E600F4D13A /* CACFPreferences.cpp */,
8B8476A62EDA17E600F4D13A /* CABundleLocker.h */,
8B8476A72EDA17E600F4D13A /* CAPropertyAddress.h */,
8B8476A82EDA17E600F4D13A /* CAXException.h */,
8B8476A92EDA17E600F4D13A /* CAAudioChannelLayout.cpp */,
8B8476AA2EDA17E600F4D13A /* CAThreadSafeList.h */,
8B8476AB2EDA17E600F4D13A /* CAAudioUnitOutputCapturer.h */,
8B8476AC2EDA17E600F4D13A /* AUParamInfo.cpp */,
8B8476AD2EDA17E600F4D13A /* CASharedLibrary.cpp */,
8B8476AE2EDA17E600F4D13A /* CAAUMIDIMap.cpp */,
8B8476AF2EDA17E600F4D13A /* CALogMacros.h */,
8B8476B02EDA17E600F4D13A /* CACFMessagePort.cpp */,
8B8476B12EDA17E600F4D13A /* CARingBuffer.h */,
8B8476B22EDA17E600F4D13A /* AUOutputBL.cpp */,
8B8476B32EDA17E600F4D13A /* CABufferList.h */,
8B8476B42EDA17E600F4D13A /* CASharedLibrary.h */,
8B8476B52EDA17E600F4D13A /* CACFData.h */,
8B8476B62EDA17E600F4D13A /* CAStreamRangedDescription.cpp */,
8B8476B72EDA17E600F4D13A /* CAPThread.cpp */,
8B8476B82EDA17E600F4D13A /* CAAutoDisposer.h */,
8B8476B92EDA17E600F4D13A /* CACFPreferences.h */,
8B8476BA2EDA17E600F4D13A /* CAVectorUnit.cpp */,
8B8476BB2EDA17E600F4D13A /* CAComponentDescription.h */,
8B8476BC2EDA17E600F4D13A /* CADebugMacros.h */,
8B8476BD2EDA17E600F4D13A /* AUOutputBL.h */,
8B8476BE2EDA17E600F4D13A /* CADebugPrintf.cpp */,
8B8476BF2EDA17E600F4D13A /* CARingBuffer.cpp */,
8B8476C02EDA17E600F4D13A /* CACFPlugIn.h */,
8B8476C12EDA17E600F4D13A /* CASettingsStorage.cpp */,
8B8476C22EDA17E600F4D13A /* CAMixMap.h */,
8B8476C32EDA17E600F4D13A /* CACFDistributedNotification.h */,
8B8476C42EDA17E600F4D13A /* CAFilePathUtils.h */,
8B8476C52EDA17E600F4D13A /* CATink.h */,
8B8476C62EDA17E600F4D13A /* CAStreamBasicDescription.cpp */,
8B8476C72EDA17E600F4D13A /* CAAudioChannelLayout.h */,
8B8476C82EDA17E600F4D13A /* CAProcess.cpp */,
8B8476C92EDA17E600F4D13A /* CAHostTimeBase.cpp */,
8B8476CA2EDA17E600F4D13A /* CAPersistence.cpp */,
8B8476CB2EDA17E600F4D13A /* CAAudioBufferList.cpp */,
8B8476CC2EDA17E600F4D13A /* CAAudioTimeStamp.cpp */,
8B8476CD2EDA17E600F4D13A /* CAVectorUnit.h */,
8B8476CE2EDA17E600F4D13A /* CAByteOrder.h */,
8B8476CF2EDA17E600F4D13A /* CACFArray.h */,
8B8476D02EDA17E600F4D13A /* CAAtomicStack.h */,
8B8476D12EDA17E600F4D13A /* CAReferenceCounted.h */,
8B8476D22EDA17E600F4D13A /* CACFMachPort.cpp */,
8B8476D32EDA17E600F4D13A /* CABufferList.cpp */,
8B8476D42EDA17E600F4D13A /* CAMutex.cpp */,
8B8476D52EDA17E600F4D13A /* CADebugger.cpp */,
8B8476D62EDA17E600F4D13A /* CABundleLocker.cpp */,
8B8476D72EDA17E600F4D13A /* CAAudioFileFormats.cpp */,
8B8476D82EDA17E600F4D13A /* CAMath.h */,
8B8476D92EDA17E600F4D13A /* CACFArray.cpp */,
8B8476DA2EDA17E600F4D13A /* CACFMessagePort.h */,
8B8476DB2EDA17E600F4D13A /* CAAudioValueRange.cpp */,
8B8476DC2EDA17E600F4D13A /* CAAudioUnit.cpp */,
);
path = PublicUtility;
sourceTree = "<group>";
};
8B8476DD2EDA17E600F4D13A /* AudioUnits */ = {
isa = PBXGroup;
children = (
8B8476DE2EDA17E600F4D13A /* AUPublic */,
);
path = AudioUnits;
sourceTree = "<group>";
};
8B8476DE2EDA17E600F4D13A /* AUPublic */ = {
isa = PBXGroup;
children = (
8B8476DF2EDA17E600F4D13A /* AUViewBase */,
8B8476E12EDA17E600F4D13A /* AUBase */,
8B8476F12EDA17E600F4D13A /* OtherBases */,
8B8476F42EDA17E600F4D13A /* Utility */,
);
path = AUPublic;
sourceTree = "<group>";
};
8B8476DF2EDA17E600F4D13A /* AUViewBase */ = {
isa = PBXGroup;
children = (
8B8476E02EDA17E600F4D13A /* AUViewLocalizedStringKeys.h */,
);
path = AUViewBase;
sourceTree = "<group>";
};
8B8476E12EDA17E600F4D13A /* AUBase */ = {
isa = PBXGroup;
children = (
8B8476E22EDA17E600F4D13A /* ComponentBase.cpp */,
8B8476E32EDA17E600F4D13A /* AUScopeElement.cpp */,
8B8476E42EDA17E600F4D13A /* ComponentBase.h */,
8B8476E52EDA17E600F4D13A /* AUBase.cpp */,
8B8476E62EDA17E600F4D13A /* AUInputElement.h */,
8B8476E72EDA17E600F4D13A /* AUBase.h */,
8B8476E82EDA17E600F4D13A /* AUPlugInDispatch.h */,
8B8476E92EDA17E600F4D13A /* AUDispatch.h */,
8B8476EA2EDA17E600F4D13A /* AUOutputElement.cpp */,
8B8476EB2EDA17E600F4D13A /* AUResources.r */,
8B8476EC2EDA17E600F4D13A /* AUPlugInDispatch.cpp */,
8B8476ED2EDA17E600F4D13A /* AUOutputElement.h */,
8B8476EE2EDA17E600F4D13A /* AUDispatch.cpp */,
8B8476EF2EDA17E600F4D13A /* AUScopeElement.h */,
8B8476F02EDA17E600F4D13A /* AUInputElement.cpp */,
);
path = AUBase;
sourceTree = "<group>";
};
8B8476F12EDA17E600F4D13A /* OtherBases */ = {
isa = PBXGroup;
children = (
8B8476F22EDA17E600F4D13A /* AUEffectBase.cpp */,
8B8476F32EDA17E600F4D13A /* AUEffectBase.h */,
);
path = OtherBases;
sourceTree = "<group>";
};
8B8476F42EDA17E600F4D13A /* Utility */ = {
isa = PBXGroup;
children = (
8B8476F52EDA17E600F4D13A /* AUTimestampGenerator.h */,
8B8476F62EDA17E600F4D13A /* AUBaseHelper.cpp */,
8B8476F72EDA17E600F4D13A /* AUSilentTimeout.h */,
8B8476F82EDA17E600F4D13A /* AUInputFormatConverter.h */,
8B8476F92EDA17E600F4D13A /* AUTimestampGenerator.cpp */,
8B8476FA2EDA17E600F4D13A /* AUBuffer.cpp */,
8B8476FB2EDA17E600F4D13A /* AUMIDIDefs.h */,
8B8476FC2EDA17E600F4D13A /* AUBuffer.h */,
8B8476FD2EDA17E600F4D13A /* AUBaseHelper.h */,
);
path = Utility;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* BitDualPan.h */,
8BA05A660720730100365D66 /* BitDualPan.cpp */,
8BA05A670720730100365D66 /* BitDualPan.exp */,
8BA05A680720730100365D66 /* BitDualPan.r */,
8BA05A690720730100365D66 /* BitDualPanVersion.h */,
);
name = "AU Source";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8D01CCC70486CAD60068D4B7 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8B84772E2EDA17E600F4D13A /* CABundleLocker.h in Headers */,
8B84774F2EDA17E600F4D13A /* CAAudioChannelLayout.h in Headers */,
8B8477452EDA17E600F4D13A /* AUOutputBL.h in Headers */,
8B8477202EDA17E600F4D13A /* CAHostTimeBase.h in Headers */,
8B8477682EDA17E600F4D13A /* ComponentBase.h in Headers */,
8B8477582EDA17E600F4D13A /* CAAtomicStack.h in Headers */,
8B8477152EDA17E600F4D13A /* CAAudioTimeStamp.h in Headers */,
8B8477322EDA17E600F4D13A /* CAThreadSafeList.h in Headers */,
8B84770D2EDA17E600F4D13A /* CAAUParameter.h in Headers */,
8B84777F2EDA17E600F4D13A /* AUBaseHelper.h in Headers */,
8B8477772EDA17E600F4D13A /* AUTimestampGenerator.h in Headers */,
8B8477282EDA17E600F4D13A /* CADebugPrintf.h in Headers */,
8B8477622EDA17E600F4D13A /* CACFMessagePort.h in Headers */,
8B8477102EDA17E600F4D13A /* CAAUProcessor.h in Headers */,
8B84770C2EDA17E600F4D13A /* CAAudioUnit.h in Headers */,
8B8477652EDA17E600F4D13A /* AUViewLocalizedStringKeys.h in Headers */,
8B84774B2EDA17E600F4D13A /* CACFDistributedNotification.h in Headers */,
8B84770A2EDA17E600F4D13A /* CAComponent.h in Headers */,
8B8477182EDA17E600F4D13A /* CAVectorUnitTypes.h in Headers */,
8BA05A6E0720730100365D66 /* BitDualPanVersion.h in Headers */,
8B84774C2EDA17E600F4D13A /* CAFilePathUtils.h in Headers */,
8B84770E2EDA17E600F4D13A /* CAException.h in Headers */,
8B8477052EDA17E600F4D13A /* CAAtomic.h in Headers */,
8B8477042EDA17E600F4D13A /* CAGuard.h in Headers */,
8B84776A2EDA17E600F4D13A /* AUInputElement.h in Headers */,
8B8477412EDA17E600F4D13A /* CACFPreferences.h in Headers */,
8B8477562EDA17E600F4D13A /* CAByteOrder.h in Headers */,
8B8477392EDA17E600F4D13A /* CARingBuffer.h in Headers */,
8B8477002EDA17E600F4D13A /* CABool.h in Headers */,
8B8477252EDA17E600F4D13A /* CAMutex.h in Headers */,
8B84776B2EDA17E600F4D13A /* AUBase.h in Headers */,
8BC6025C073B072D006C4272 /* BitDualPan.h in Headers */,
8B84771D2EDA17E600F4D13A /* CACFString.h in Headers */,
8B84773C2EDA17E600F4D13A /* CASharedLibrary.h in Headers */,
8B8477092EDA17E600F4D13A /* CATokenMap.h in Headers */,
8B8476FE2EDA17E600F4D13A /* CAExtAudioFile.h in Headers */,
8B8477132EDA17E600F4D13A /* CAPThread.h in Headers */,
8B84772F2EDA17E600F4D13A /* CAPropertyAddress.h in Headers */,
8B8477592EDA17E600F4D13A /* CAReferenceCounted.h in Headers */,
8B84777E2EDA17E600F4D13A /* AUBuffer.h in Headers */,
8B8477602EDA17E600F4D13A /* CAMath.h in Headers */,
8B8477402EDA17E600F4D13A /* CAAutoDisposer.h in Headers */,
8B8477072EDA17E600F4D13A /* CACFObject.h in Headers */,
8B8477272EDA17E600F4D13A /* CASettingsStorage.h in Headers */,
8B8477302EDA17E600F4D13A /* CAXException.h in Headers */,
8B84774D2EDA17E600F4D13A /* CATink.h in Headers */,
8B84777A2EDA17E600F4D13A /* AUInputFormatConverter.h in Headers */,
8B8477552EDA17E600F4D13A /* CAVectorUnit.h in Headers */,
8B8477112EDA17E600F4D13A /* CAProcess.h in Headers */,
8B8477172EDA17E600F4D13A /* CAAudioValueRange.h in Headers */,
8B84772C2EDA17E600F4D13A /* CABitOperations.h in Headers */,
8B8477222EDA17E600F4D13A /* CAAudioFileFormats.h in Headers */,
8B84771B2EDA17E600F4D13A /* CACFNumber.h in Headers */,
8B8477332EDA17E600F4D13A /* CAAudioUnitOutputCapturer.h in Headers */,
8B8477442EDA17E600F4D13A /* CADebugMacros.h in Headers */,
8B84777D2EDA17E600F4D13A /* AUMIDIDefs.h in Headers */,
8B84773D2EDA17E600F4D13A /* CACFData.h in Headers */,
8B8477062EDA17E600F4D13A /* CAStreamBasicDescription.h in Headers */,
8B84776C2EDA17E600F4D13A /* AUPlugInDispatch.h in Headers */,
8B8477082EDA17E600F4D13A /* CAStreamRangedDescription.h in Headers */,
8B8477482EDA17E600F4D13A /* CACFPlugIn.h in Headers */,
8B84770B2EDA17E600F4D13A /* CAAudioBufferList.h in Headers */,
8B8477232EDA17E600F4D13A /* CAAUMIDIMapManager.h in Headers */,
8B8477762EDA17E600F4D13A /* AUEffectBase.h in Headers */,
8B8477122EDA17E600F4D13A /* CACFDictionary.h in Headers */,
8B8477732EDA17E600F4D13A /* AUScopeElement.h in Headers */,
8B8477432EDA17E600F4D13A /* CAComponentDescription.h in Headers */,
8B8477792EDA17E600F4D13A /* AUSilentTimeout.h in Headers */,
8B84773B2EDA17E600F4D13A /* CABufferList.h in Headers */,
8B84776D2EDA17E600F4D13A /* AUDispatch.h in Headers */,
8B8477712EDA17E600F4D13A /* AUOutputElement.h in Headers */,
8B8477372EDA17E600F4D13A /* CALogMacros.h in Headers */,
8B84772B2EDA17E600F4D13A /* AUParamInfo.h in Headers */,
8B84774A2EDA17E600F4D13A /* CAMixMap.h in Headers */,
8B8477572EDA17E600F4D13A /* CACFArray.h in Headers */,
8B8476FF2EDA17E600F4D13A /* CACFMachPort.h in Headers */,
8B84772A2EDA17E600F4D13A /* CAAUMIDIMap.h in Headers */,
8B8477022EDA17E600F4D13A /* CADebugger.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* BitDualPan */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "BitDualPan" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = BitDualPan;
productInstallPath = "$(HOME)/Library/Bundles";
productName = BitDualPan;
productReference = 8D01CCD20486CAD60068D4B7 /* BitDualPan.component */;
productType = "com.apple.product-type.bundle";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
089C1669FE841209C02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1420;
};
buildConfigurationList = 3E4BA247089833B7007656EC /* Build configuration list for PBXProject "BitDualPan" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
Base,
ja,
de,
en,
fr,
);
mainGroup = 089C166AFE841209C02AAC07 /* BitDualPan */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* BitDualPan */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D01CCC90486CAD60068D4B7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8B84773A2EDA17E600F4D13A /* AUOutputBL.cpp in Sources */,
8B84775F2EDA17E600F4D13A /* CAAudioFileFormats.cpp in Sources */,
8B8477512EDA17E600F4D13A /* CAHostTimeBase.cpp in Sources */,
8B8477292EDA17E600F4D13A /* CAXException.cpp in Sources */,
8B8477532EDA17E600F4D13A /* CAAudioBufferList.cpp in Sources */,
8B8477162EDA17E600F4D13A /* CAFilePathUtils.cpp in Sources */,
8B8477142EDA17E600F4D13A /* CAAUParameter.cpp in Sources */,
8B8477362EDA17E600F4D13A /* CAAUMIDIMap.cpp in Sources */,
8B8477632EDA17E600F4D13A /* CAAudioValueRange.cpp in Sources */,
8B8477722EDA17E600F4D13A /* AUDispatch.cpp in Sources */,
8B84772D2EDA17E600F4D13A /* CACFPreferences.cpp in Sources */,
8B8477702EDA17E600F4D13A /* AUPlugInDispatch.cpp in Sources */,
8B84770F2EDA17E600F4D13A /* CAAUProcessor.cpp in Sources */,
8B8477242EDA17E600F4D13A /* CACFDictionary.cpp in Sources */,
8B8477782EDA17E600F4D13A /* AUBaseHelper.cpp in Sources */,
8B84775D2EDA17E600F4D13A /* CADebugger.cpp in Sources */,
8B8477312EDA17E600F4D13A /* CAAudioChannelLayout.cpp in Sources */,
8B8477342EDA17E600F4D13A /* AUParamInfo.cpp in Sources */,
8B8477522EDA17E600F4D13A /* CAPersistence.cpp in Sources */,
8B8477462EDA17E600F4D13A /* CADebugPrintf.cpp in Sources */,
8B84777B2EDA17E600F4D13A /* AUTimestampGenerator.cpp in Sources */,
8B84774E2EDA17E600F4D13A /* CAStreamBasicDescription.cpp in Sources */,
8B84771E2EDA17E600F4D13A /* CAAUMIDIMapManager.cpp in Sources */,
8B8477492EDA17E600F4D13A /* CASettingsStorage.cpp in Sources */,
8B84776E2EDA17E600F4D13A /* AUOutputElement.cpp in Sources */,
8B84771A2EDA17E600F4D13A /* CAGuard.cpp in Sources */,
8BA05A6B0720730100365D66 /* BitDualPan.cpp in Sources */,
8B84775C2EDA17E600F4D13A /* CAMutex.cpp in Sources */,
8B8477752EDA17E600F4D13A /* AUEffectBase.cpp in Sources */,
8B84775A2EDA17E600F4D13A /* CACFMachPort.cpp in Sources */,
8B8477692EDA17E600F4D13A /* AUBase.cpp in Sources */,
8B8477352EDA17E600F4D13A /* CASharedLibrary.cpp in Sources */,
8B84771C2EDA17E600F4D13A /* CACFDistributedNotification.cpp in Sources */,
8B84771F2EDA17E600F4D13A /* CAComponentDescription.cpp in Sources */,
8B8477262EDA17E600F4D13A /* CACFString.cpp in Sources */,
8B8477662EDA17E600F4D13A /* ComponentBase.cpp in Sources */,
8B8477472EDA17E600F4D13A /* CARingBuffer.cpp in Sources */,
8B8477672EDA17E600F4D13A /* AUScopeElement.cpp in Sources */,
8B8477642EDA17E600F4D13A /* CAAudioUnit.cpp in Sources */,
8B8477612EDA17E600F4D13A /* CACFArray.cpp in Sources */,
8B84775E2EDA17E600F4D13A /* CABundleLocker.cpp in Sources */,
8B8477502EDA17E600F4D13A /* CAProcess.cpp in Sources */,
8B84773E2EDA17E600F4D13A /* CAStreamRangedDescription.cpp in Sources */,
8B84773F2EDA17E600F4D13A /* CAPThread.cpp in Sources */,
8B8477012EDA17E600F4D13A /* CAComponent.cpp in Sources */,
8B8477192EDA17E600F4D13A /* CAAudioChannelLayoutObject.cpp in Sources */,
8B8477542EDA17E600F4D13A /* CAAudioTimeStamp.cpp in Sources */,
8B84775B2EDA17E600F4D13A /* CABufferList.cpp in Sources */,
8B8477382EDA17E600F4D13A /* CACFMessagePort.cpp in Sources */,
8B8477422EDA17E600F4D13A /* CAVectorUnit.cpp in Sources */,
8B8477742EDA17E600F4D13A /* AUInputElement.cpp in Sources */,
8B84777C2EDA17E600F4D13A /* AUBuffer.cpp in Sources */,
8B8477212EDA17E600F4D13A /* CADebugMacros.cpp in Sources */,
8B8477032EDA17E600F4D13A /* CACFNumber.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
8B8477802EDA184600F4D13A /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
3E4BA244089833B7007656EC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD)";
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application";
CODE_SIGN_STYLE = Manual;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 9BMAKYA76W;
EXPORTED_SYMBOLS_FILE = BitDualPan.exp;
GCC_OPTIMIZATION_LEVEL = 0;
GENERATE_PKGINFO_FILE = YES;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
LIBRARY_STYLE = Bundle;
MACOSX_DEPLOYMENT_TARGET = 11.1;
OTHER_LDFLAGS = "-bundle";
OTHER_REZFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "com.airwindows.audiounit.${PRODUCT_NAME:identifier}";
PRODUCT_NAME = BitDualPan;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
STRIP_STYLE = debugging;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD)";
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application";
CODE_SIGN_STYLE = Manual;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 9BMAKYA76W;
EXPORTED_SYMBOLS_FILE = BitDualPan.exp;
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 = 11.1;
OTHER_LDFLAGS = "-bundle";
OTHER_REZFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = "com.airwindows.audiounit.${PRODUCT_NAME:identifier}";
PRODUCT_NAME = BitDualPan;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
STRIP_INSTALLED_PRODUCT = YES;
STRIP_STYLE = debugging;
WRAPPER_EXTENSION = component;
};
name = Release;
};
3E4BA248089833B7007656EC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD)";
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "/Users/christopherjohnson/Desktop/CA_SDK/**";
MACOSX_DEPLOYMENT_TARGET = 11.1;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Debug;
};
3E4BA249089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD)";
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "/Users/christopherjohnson/Desktop/CA_SDK/**";
MACOSX_DEPLOYMENT_TARGET = 11.1;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "BitDualPan" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "BitDualPan" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA248089833B7007656EC /* Debug */,
3E4BA249089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 089C1669FE841209C02AAC07 /* Project object */;
}

View file

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

View file

@ -0,0 +1,8 @@
<?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>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1420"
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 = "BitDualPan.component"
BlueprintName = "BitDualPan"
ReferencedContainer = "container:BitDualPan.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "8D01CCC60486CAD60068D4B7"
BuildableName = "BitDualPan.component"
BlueprintName = "BitDualPan"
ReferencedContainer = "container:BitDualPan.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>BitDualPan.xcscheme_^#shared#^_</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,58 @@
/*
* File: BitDualPanVersion.h
*
* Version: 1.0
*
* Created: 11/18/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 __BitDualPanVersion_h__
#define __BitDualPanVersion_h__
#ifdef DEBUG
#define kBitDualPanVersion 0xFFFFFFFF
#else
#define kBitDualPanVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define BitDualPan_COMP_MANF 'Dthr'
#define BitDualPan_COMP_SUBTYPE 'bitd'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

View file

@ -0,0 +1,47 @@
<?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>AudioComponents</key>
<array>
<dict>
<key>description</key>
<string>${PRODUCT_NAME:identifier} AU</string>
<key>factoryFunction</key>
<string>${PRODUCT_NAME:identifier}Factory</string>
<key>manufacturer</key>
<string>Dthr</string>
<key>name</key>
<string>Airwindows: ${PRODUCT_NAME:identifier}</string>
<key>subtype</key>
<string>bitd</string>
<key>type</key>
<string>aufx</string>
<key>version</key>
<integer>65536</integer>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PROJECTNAMEASIDENTIFIER}</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</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,5 @@
//
// Prefix header for all source files of the '«PROJECTNAMEASIDENTIFIER»' target in the '«PROJECTNAMEASIDENTIFIER»' project.
//
#include <CoreServices/CoreServices.h>

Binary file not shown.

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

@ -0,0 +1,47 @@
<?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>AudioComponents</key>
<array>
<dict>
<key>description</key>
<string>${PRODUCT_NAME:identifier} AU</string>
<key>factoryFunction</key>
<string>${PRODUCT_NAME:identifier}Factory</string>
<key>manufacturer</key>
<string>Dthr</string>
<key>name</key>
<string>Airwindows: ${PRODUCT_NAME:identifier}</string>
<key>subtype</key>
<string>pdpn</string>
<key>type</key>
<string>aufx</string>
<key>version</key>
<integer>65536</integer>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PROJECTNAMEASIDENTIFIER}</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</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,273 @@
/*
* File: PurestDualPan.cpp
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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.
*
*/
/*=============================================================================
PurestDualPan.cpp
=============================================================================*/
#include "PurestDualPan.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUDIOCOMPONENT_ENTRY(AUBaseFactory, PurestDualPan)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::PurestDualPan
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PurestDualPan::PurestDualPan(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo )
{
ComponentResult result = noErr;
outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable
| kAudioUnitParameterFlag_IsReadable;
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
case kParam_A:
AUBase::FillInParameterName (outParameterInfo, kParameterAName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 PurestDualPan::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// PurestDualPan::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____PurestDualPanEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::PurestDualPanKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PurestDualPan::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
gainLA = gainLB = 0.5;
panLA = panLB = 0.0;
gainRA = gainRB = 0.5;
panRA = panRB = 1.0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PurestDualPan::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus PurestDualPan::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
gainLA = gainLB; gainLB = GetParameter( kParam_A );
panLA = panLB; panLB = GetParameter( kParam_B );
gainRA = gainRB; gainRB = GetParameter( kParam_C );
panRA = panRB; panRB = GetParameter( kParam_D );
while (nSampleFrames-- > 0) {
long double inputSampleL = *inputL;
long double inputSampleR = *inputR;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double temp = (double)nSampleFrames/inFramesToProcess;
long double LpanR = ((panLA*temp) + (panLB*(1.0-temp)))*1.57079633;
long double LpanL = 1.57079633 - LpanR;
LpanR = sin(LpanR); LpanL = sin(LpanL);
long double gainL = ((gainLA*temp) + (gainLB*(1.0-temp)))*2.0;
gainL = pow(gainL,gainL + 0.618033988749894848204586);
long double RpanR = ((panRA*temp) + (panRB*(1.0-temp)))*1.57079633;
long double RpanL = 1.57079633 - RpanR;
RpanR = sin(RpanR); RpanL = sin(RpanL);
long double gainR = ((gainRA*temp) + (gainRB*(1.0-temp)))*2.0;
gainR = pow(gainR,gainR + 0.618033988749894848204586);
long double LoutL = LpanL*gainL*inputSampleL;
long double LoutR = LpanR*gainL*inputSampleL;
long double RoutL = RpanL*gainR*inputSampleR;
long double RoutR = RpanR*gainR*inputSampleR;
inputSampleL = LoutL + RoutL;
inputSampleR = LoutR + RoutR;
//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
*outputL = inputSampleL;
*outputR = inputSampleR;
//direct stereo out
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1,2 @@
_PurestDualPanEntry
_PurestDualPanFactory

View file

@ -0,0 +1,133 @@
/*
* File: PurestDualPan.h
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "PurestDualPanVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __PurestDualPan_h__
#define __PurestDualPan_h__
#pragma mark ____PurestDualPan Parameters
// parameters
static const float kDefaultValue_ParamA = 0.5;
static const float kDefaultValue_ParamB = 0.0;
static const float kDefaultValue_ParamC = 0.5;
static const float kDefaultValue_ParamD = 1.0;
static CFStringRef kParameterAName = CFSTR("L Vol");
static CFStringRef kParameterBName = CFSTR("L Pan");
static CFStringRef kParameterCName = CFSTR("R Vol");
static CFStringRef kParameterDName = CFSTR("R Pan");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
//Add your parameters here...
kNumberOfParameters=4
};
#pragma mark ____PurestDualPan
class PurestDualPan : public AUEffectBase
{
public:
PurestDualPan(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~PurestDualPan () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
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 kPurestDualPanVersion; }
private:
double gainLA, gainLB;
double gainRA, gainRB;
double panLA, panLB;
double panRA, panRB;
uint32_t fpdL;
uint32_t fpdR;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: PurestDualPan.r
*
* Version: 1.0
*
* Created: 11/20/25
*
* Copyright: Copyright © 2025 Airwindows, Airwindows uses the MIT license
*
* 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 "PurestDualPanVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_PurestDualPan 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PurestDualPan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_PurestDualPan
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE PurestDualPan_COMP_SUBTYPE
#define COMP_MANUF PurestDualPan_COMP_MANF
#define VERSION kPurestDualPanVersion
#define NAME "Airwindows: PurestDualPan"
#define DESCRIPTION "PurestDualPan AU"
#define ENTRY_POINT "PurestDualPanEntry"
#include "AUResources.r"

Some files were not shown because too many files have changed in this diff Show more