Merge branch 'airwindows:master' into master

This commit is contained in:
Andrew Ostler 2025-04-21 15:40:30 +01:00 committed by GitHub
commit 8b8100d1cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
82 changed files with 21763 additions and 1 deletions

View file

@ -9,7 +9,7 @@ Actually it turns out that other devs can use this file to do amazing things lik
Ambience: ClearCoat, TapeDelay2, Doublelay, PitchDelay, SampleDelay, BrightAmbience3, TripleSpread, Melt, MV2, MV, ADT, kChamberAR, StereoChorus, PurestEcho, TapeDelay, StarChild2, StarChild, Hombre, BrightAmbience2, BrightAmbience, StereoEnsemble, StereoDoubler, Chorus, ChorusEnsemble, Ensemble
Amp Sims: GrindAmp, FireAmp, LeadAmp, CrickBass, Wolfbot, LilAmp, MidAmp, BigAmp, Cabs, BassDrive, BassAmp
Amp Sims: PointyGuitar, GrindAmp, FireAmp, LeadAmp, CrickBass, Wolfbot, LilAmp, MidAmp, BigAmp, Cabs, BassDrive, BassAmp
Bass: DubSub2, OrbitKick, Elliptical, Hermepass, BassKit, DubCenter, DubSub, Floor, Infrasonic, FathomFive
@ -3840,6 +3840,34 @@ The reason I leave behaviors like that in there, in a plugin like Point, is that
:)
############ PointyGuitar is a supremely adaptable instrument amp.
Sometimes the best way to get the performance of a very analog thing in a very digital format is to accentuate, not the spirit of the analog, but the capacities of the digital. What you get then is not fake gutless imitations of the artifacts of the analog thing, but the heart of why we go for that analog thing. Meet PointyGuitar, which is all amps. Just adjust… if, that is, you know what the analog sound is made of.
Here's how it works. SmoothEQ was a sort of breakthrough: the ability to get very steep EQ crossovers while still zeroing out at perfect, unaltered fidelity. It sounds the way it does because it reconstitutes the original source between every stage, rather than doing independent EQ bands and trusting that they'll be 'just as good' because the gains and EQ slopes match up closely enough.
Then there's AngleEQ, a sort of disaster: a very heavily colored EQ where the crossovers are so phasey that it's like running stuff through a speaker. The opposite: whether as a highpass or a lowpass, it produces a weird physicality and scrambles the sound pretty good.
PointyGuitar is both, in series, with a basic distortion (as found in FireAmp) between every EQ stage. There can be lots of these EQ stages, so there can be lots of stages of this simple softclip, but it's always on the full sound, not a 'multiband'.
What happens? Any given section might add small amounts of overdrive. It's not an electrical circuit and it's run at double precision so there is no thermal noise/Johnson noise: it's just a bit of overdrive if you're boosting a band. Otherwise, if it's flat it's extremely flat (interestingly, inside the flat EQ it's still using the AngleEQ math, but in such a way that it sums to perfectly flat. Using biquads would've got steeper crossovers, but requiring more stages turned out perfect here)
As it's passed on to the next stage, any distortion harmonic that doesn't fit into the following band just plain gets filtered out. This is most notable in the amount you can crank the 'High' band. It's around 3K for guitar chug, but it's resisting aliasing super hard considering the amount of gain you can add. Same applies for every band except Presnce. You get that, High, Mid, Low and Sub. For high gain '5150' type sounds, you boost High and cut Low.
Once you have your sound, be it super high gain or clean Fendery stuff (again, boosting High often helps things sound more amp-like) it's over to the highpass and lowpass. HSpeakr cuts off the bright, and LSpeakr limits the size of your virtual cabinet. They're pure AngleEQ and combine to produce a bandlimited sound without use of a cabinet impulse, harnessing the intensity of the EQ/saturation stages so that the tone sits right. Very delicate adjustments are what you want here, but both those controls have pretty much full range adjustability. 50 foot speaker, or clock radio, are available if you should need them.
In this way, first building a sound out of identifying which frequency bands need most saturation and which to back off, and then channeling that very saturated but very clean sound through extremely colorful bandpassing, you produce an amplike sound (guitar or bass, any amp of any kind, it just depends how you adjust it) which fits immediately into whatever space in the mix you need, with the right tone colorings…
…at ZERO LATENCY.
It runs without oversampling, and all the EQs operate directly without pre-ring, as analog circuits do. So you can track directly with PointyGuitar, set any way you like, dial in the basic sound of any sort of amp no matter how clean or dirty, and have it respond so immediately that you'll notice if anything else in your recording chain is adding latency. It'll feed back like any real amp, it'll feel connected to your fingers, and you can dial it to do anything you want, pretty much. If there's a cabinet honk or something that you actually want to add (rather than just remove) you can run the whole thing into ConsoleX and dial that on the parametric, perhaps in conjunction with the Speakr controls.
I may have just replaced my little tube amp and iso cab and new speaker DI box at a stroke. Didn't expect that, but both my ears and Airwindows Meter tell me PointyGuitar is in the zone, even for really difficult sought-after guitar tones. The range is pretty shocking: it ought to do bass amps, Plexis on Variacs, ratty little Peaveys, you name it.
Oh, and you get a gate (basically DigitalBlack) that triggers off the input before the distortion, but gates between the 'amp' and Speakr so that even if you've got it firing really staccato and quick, it'll merge with your string-damping and act like part of your playing, for guitar OR bass.
Enjoy. This should work both for vintage tone guys AND Reznorian madmen. :)
############ Pop is a crazy overcompressor with a very exaggerated sound.
Why another compressor?

View file

@ -311,6 +311,7 @@ add_airwindows_plugin(Pockey2)
add_airwindows_plugin(Podcast)
add_airwindows_plugin(PodcastDeluxe)
add_airwindows_plugin(Point)
add_airwindows_plugin(PointyGuitar)
add_airwindows_plugin(Pop)
add_airwindows_plugin(Pop2)
add_airwindows_plugin(Pop3)

View file

@ -0,0 +1,216 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new PointyGuitar(audioMaster);}
PointyGuitar::PointyGuitar(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.6;
B = 0.5;
C = 0.8;
D = 0.6;
E = 0.4;
F = 0.5;
G = 0.7;
H = 0.4;
I = 0.0;
J = 0.7;
for(int x=0; x<17; x++) {
for(int y=0; y<11; y++) {
angSL[x][y] = 0.0;angAL[x][y] = 0.0;
angSR[x][y] = 0.0;angAR[x][y] = 0.0;
}
}
for(int y=0; y<11; y++) angG[y] = 0.0;
for(int count = 0; count < 36; count++) {
iirHPositionL[count] = 0.0;
iirHAngleL[count] = 0.0;
iirBPositionL[count] = 0.0;
iirBAngleL[count] = 0.0;
iirHPositionR[count] = 0.0;
iirHAngleR[count] = 0.0;
iirBPositionR[count] = 0.0;
iirBAngleR[count] = 0.0;
}
WasNegativeL = false;
ZeroCrossL = 0;
gaterollerL = 0.0;
WasNegativeR = false;
ZeroCrossR = 0;
gaterollerR = 0.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
}
PointyGuitar::~PointyGuitar() {}
VstInt32 PointyGuitar::getVendorVersion () {return 1000;}
void PointyGuitar::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void PointyGuitar::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 PointyGuitar::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;
chunkData[5] = F;
chunkData[6] = G;
chunkData[7] = H;
chunkData[8] = I;
chunkData[9] = J;
/* 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 PointyGuitar::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]);
F = pinParameter(chunkData[5]);
G = pinParameter(chunkData[6]);
H = pinParameter(chunkData[7]);
I = pinParameter(chunkData[8]);
J = pinParameter(chunkData[9]);
/* 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 PointyGuitar::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;
case kParamF: F = value; break;
case kParamG: G = value; break;
case kParamH: H = value; break;
case kParamI: I = value; break;
case kParamJ: J = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float PointyGuitar::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;
case kParamF: return F; break;
case kParamG: return G; break;
case kParamH: return H; break;
case kParamI: return I; break;
case kParamJ: return J; 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 PointyGuitar::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Drive", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Presnce", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "High", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Mid", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Low", kVstMaxParamStrLen); break;
case kParamF: vst_strncpy (text, "Sub", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "HSpeakr", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "LSpeakr", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "Gate", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "Output", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void PointyGuitar::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;
case kParamF: float2string (F, text, kVstMaxParamStrLen); break;
case kParamG: float2string (G, text, kVstMaxParamStrLen); break;
case kParamH: float2string (H, text, kVstMaxParamStrLen); break;
case kParamI: float2string (I, text, kVstMaxParamStrLen); break;
case kParamJ: float2string (J, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void PointyGuitar::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;
case kParamF: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 PointyGuitar::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool PointyGuitar::getEffectName(char* name) {
vst_strncpy(name, "PointyGuitar", kVstMaxProductStrLen); return true;
}
VstPlugCategory PointyGuitar::getPlugCategory() {return kPlugCategEffect;}
bool PointyGuitar::getProductString(char* text) {
vst_strncpy (text, "airwindows PointyGuitar", kVstMaxProductStrLen); return true;
}
bool PointyGuitar::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,104 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#define __PointyGuitar_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,
kParamF =5,
kParamG =6,
kParamH =7,
kParamI =8,
kParamJ =9,
kNumParameters = 10
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'pgtr'; //Change this to what the AU identity is!
class PointyGuitar :
public AudioEffectX
{
public:
PointyGuitar(audioMasterCallback audioMaster);
~PointyGuitar();
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;
float F;
float G;
float H;
float I;
float J;
double angSL[18][12];
double angAL[18][12];
double iirHPositionL[37];
double iirHAngleL[37];
double iirBPositionL[37];
double iirBAngleL[37];
bool WasNegativeL;
int ZeroCrossL;
double gaterollerL;
double gateL;
double angSR[18][12];
double angAR[18][12];
double iirHPositionR[37];
double iirHAngleR[37];
double iirBPositionR[37];
double iirBAngleR[37];
bool WasNegativeR;
int ZeroCrossR;
double gaterollerR;
double gateR;
double angG[12];
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,410 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
void PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//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 PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//begin 64 bit stereo floating point dither
//int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
//inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
//inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
in1++;
in2++;
out1++;
out2++;
}
}

Binary file not shown.

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,375 @@
/*
* File: PointyGuitar.cpp
*
* Version: 1.0
*
* Created: 4/16/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.
*
*/
/*=============================================================================
PointyGuitar.cpp
=============================================================================*/
#include "PointyGuitar.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(PointyGuitar)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::PointyGuitar
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PointyGuitar::PointyGuitar(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 );
SetParameter(kParam_F, kDefaultValue_ParamF );
SetParameter(kParam_G, kDefaultValue_ParamG );
SetParameter(kParam_H, kDefaultValue_ParamH );
SetParameter(kParam_I, kDefaultValue_ParamI );
SetParameter(kParam_J, kDefaultValue_ParamJ );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::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;
case kParam_F:
AUBase::FillInParameterName (outParameterInfo, kParameterFName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamF;
break;
case kParam_G:
AUBase::FillInParameterName (outParameterInfo, kParameterGName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamG;
break;
case kParam_H:
AUBase::FillInParameterName (outParameterInfo, kParameterHName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamH;
break;
case kParam_I:
AUBase::FillInParameterName (outParameterInfo, kParameterIName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamI;
break;
case kParam_J:
AUBase::FillInParameterName (outParameterInfo, kParameterJName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamJ;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// PointyGuitar::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____PointyGuitarEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::PointyGuitarKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PointyGuitar::PointyGuitarKernel::Reset()
{
for(int x=0; x<17; x++) {
for(int y=0; y<11; y++) {
angS[x][y] = 0.0;angA[x][y] = 0.0;
}
}
for(int y=0; y<11; y++) angG[y] = 0.0;
for(int count = 0; count < 36; count++) {
iirHPosition[count] = 0.0;
iirHAngle[count] = 0.0;
iirBPosition[count] = 0.0;
iirBAngle[count] = 0.0;
}
WasNegative = false;
ZeroCross = 0;
gateroller = 0.0;
fpd = 1.0; while (fpd < 16386) fpd = rand()*UINT32_MAX;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::PointyGuitarKernel::Process
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PointyGuitar::PointyGuitarKernel::Process( const Float32 *inSourceP,
Float32 *inDestP,
UInt32 inFramesToProcess,
UInt32 inNumChannels,
bool &ioSilence )
{
UInt32 nSampleFrames = inFramesToProcess;
const Float32 *sourceP = inSourceP;
Float32 *destP = inDestP;
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= GetSampleRate();
double drive = GetParameter( kParam_A )+0.618033988749894;
angG[0] = sqrt(GetParameter( kParam_B )*2.0);
angG[2] = sqrt(GetParameter( kParam_C )*2.0);
angG[4] = sqrt(GetParameter( kParam_D )*2.0);
angG[6] = sqrt(GetParameter( kParam_E )*2.0);
angG[8] = sqrt(GetParameter( kParam_F )*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(GetParameter( kParam_G ),overallscale);
double lFreq = pow(GetParameter( kParam_H ),overallscale+3.0);
//begin Gate
double onthreshold = (pow(GetParameter( kParam_I ),3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = GetParameter( kParam_J );
while (nSampleFrames-- > 0) {
double inputSample = *sourceP;
if (fabs(inputSample)<1.18e-23) inputSample = fpd * 1.18e-17;
//begin Gate
if (inputSample > 0.0)
{
if (WasNegative == true) ZeroCross = absmax * 0.3;
WasNegative = false;
} else {
ZeroCross += 1; WasNegative = true;
}
if (ZeroCross > absmax) ZeroCross = absmax;
if (gate == 0.0)
{
//if gate is totally silent
if (fabs(inputSample) > onthreshold)
{
if (gateroller == 0.0) gateroller = ZeroCross;
else gateroller -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gateroller -= release;
} else {
//gate is not silent but closing
if (fabs(inputSample) > offthreshold)
{
if (gateroller < ZeroCross) gateroller = ZeroCross;
else gateroller -= release;
//always trigger if gate is over offthreshold, otherwise close anyway
}
else gateroller -= release;
}
if (gateroller < 0.0) gateroller = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSample; inputSample = 0.0;
for (int y = 0; y < 9; y++) {
angA[x][y] = (angA[x][y]*(1.0-fr)) + ((band-angS[x][y])*fr);
double temp = band; band = ((angS[x][y]+(angA[x][y]*fr)) * (1.0-fr))+(band*fr);
angS[x][y] = ((angS[x][y]+(angA[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSample += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSample += (band*angG[9]);
inputSample *= drive;
inputSample -= fmin(fmax((inputSample*(fabs(inputSample)*0.654)*(fabs(inputSample)*0.654)),-1.0),1.0);
}
if (gateroller < 1.0)
{
gate = gateroller;
double bridgerectifier = 1-cos(fabs(inputSample));
if (inputSample > 0) inputSample = (inputSample*gate)+(bridgerectifier*(1.0-gate));
else inputSample = (inputSample*gate)-(bridgerectifier*(1.0-gate));
if (gate == 0.0) inputSample = 0.0;
} else gate = 1.0;
//end Gate
double lowSample = inputSample;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngle[count] = (iirBAngle[count]*(1.0-lFreq))+((lowSample-iirBPosition[count])*lFreq);
lowSample = ((iirBPosition[count]+(iirBAngle[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPosition[count] = ((iirBPosition[count]+(iirBAngle[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSample -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngle[count] = (iirHAngle[count]*(1.0-hFreq))+((inputSample-iirHPosition[count])*hFreq);
inputSample = ((iirHPosition[count]+(iirHAngle[count]*hFreq))*(1.0-hFreq))+(inputSample*hFreq);
iirHPosition[count] = ((iirHPosition[count]+(iirHAngle[count]*hFreq))*(1.0-hFreq))+(inputSample*hFreq);
} //the lowpass
inputSample *= output;
//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 @@
_PointyGuitarEntry

View file

@ -0,0 +1,172 @@
/*
* File: PointyGuitar.h
*
* Version: 1.0
*
* Created: 4/16/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 "PointyGuitarVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __PointyGuitar_h__
#define __PointyGuitar_h__
#pragma mark ____PointyGuitar Parameters
// parameters
static const float kDefaultValue_ParamA = 0.6;
static const float kDefaultValue_ParamB = 0.5;
static const float kDefaultValue_ParamC = 0.8;
static const float kDefaultValue_ParamD = 0.6;
static const float kDefaultValue_ParamE = 0.4;
static const float kDefaultValue_ParamF = 0.5;
static const float kDefaultValue_ParamG = 0.7;
static const float kDefaultValue_ParamH = 0.4;
static const float kDefaultValue_ParamI = 0.0;
static const float kDefaultValue_ParamJ = 0.7;
static CFStringRef kParameterAName = CFSTR("Drive");
static CFStringRef kParameterBName = CFSTR("Presnce");
static CFStringRef kParameterCName = CFSTR("High");
static CFStringRef kParameterDName = CFSTR("Mid");
static CFStringRef kParameterEName = CFSTR("Low");
static CFStringRef kParameterFName = CFSTR("Sub");
static CFStringRef kParameterGName = CFSTR("HSpeakr");
static CFStringRef kParameterHName = CFSTR("LSpeakr");
static CFStringRef kParameterIName = CFSTR("Gate");
static CFStringRef kParameterJName = CFSTR("Output");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
kParam_E =4,
kParam_F =5,
kParam_G =6,
kParam_H =7,
kParam_I =8,
kParam_J =9,
//Add your parameters here...
kNumberOfParameters=10
};
#pragma mark ____PointyGuitar
class PointyGuitar : public AUEffectBase
{
public:
PointyGuitar(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~PointyGuitar () { delete mDebugDispatcher; }
#endif
virtual AUKernelBase * NewKernel() { return new PointyGuitarKernel(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 kPointyGuitarVersion; }
protected:
class PointyGuitarKernel : public AUKernelBase // most of the real work happens here
{
public:
PointyGuitarKernel(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:
double angS[18][12];
double angA[18][12];
double angG[12];
double iirHPosition[37];
double iirHAngle[37];
double iirBPosition[37];
double iirBAngle[37];
bool WasNegative;
int ZeroCross;
double gateroller;
double gate;
uint32_t fpd;
};
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: PointyGuitar.r
*
* Version: 1.0
*
* Created: 4/16/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 "PointyGuitarVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_PointyGuitar 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PointyGuitar~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_PointyGuitar
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE PointyGuitar_COMP_SUBTYPE
#define COMP_MANUF PointyGuitar_COMP_MANF
#define VERSION kPointyGuitarVersion
#define NAME "Airwindows: PointyGuitar"
#define DESCRIPTION "PointyGuitar AU"
#define ENTRY_POINT "PointyGuitarEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,128 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* PointyGuitar */;
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 = 766498637;
PBXWorkspaceStateSaveDate = 766498637;
};
perUserProjectItems = {
8B128C452DAFD0C3008D5EE2 /* PlistBookmark */ = 8B128C452DAFD0C3008D5EE2 /* PlistBookmark */;
8B128C922DB05A3D008D5EE2 /* PlistBookmark */ = 8B128C922DB05A3D008D5EE2 /* PlistBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B128C452DAFD0C3008D5EE2 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/PointyGuitar/Info.plist;
rLen = 26;
rLoc = 0;
};
8B128C922DB05A3D008D5EE2 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/PointyGuitar/Info.plist;
rLen = 0;
rLoc = 9223372036854775807;
};
8BA05A660720730100365D66 /* PointyGuitar.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1081, 7344}}";
sepNavSelRange = "{14190, 0}";
sepNavVisRange = "{12446, 1189}";
sepNavWindowFrame = "{{683, 85}, {1128, 775}}";
};
};
8BA05A690720730100365D66 /* PointyGuitarVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1081, 1062}}";
sepNavSelRange = "{2927, 0}";
sepNavVisRange = "{1273, 1717}";
sepNavWindowFrame = "{{15, 98}, {1128, 775}}";
};
};
8BC6025B073B072D006C4272 /* PointyGuitar.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1081, 2862}}";
sepNavSelRange = "{3211, 0}";
sepNavVisRange = "{2667, 1186}";
sepNavWindowFrame = "{{752, 103}, {1128, 775}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* PointyGuitar */ = {
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 /* PointyGuitar.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* PointyGuitar.r */; };
8BA05A6B0720730100365D66 /* PointyGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* PointyGuitar.cpp */; };
8BA05A6E0720730100365D66 /* PointyGuitarVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* PointyGuitarVersion.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 /* PointyGuitar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* PointyGuitar.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 /* PointyGuitar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PointyGuitar.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* PointyGuitar.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = PointyGuitar.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* PointyGuitar.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = PointyGuitar.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* PointyGuitarVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PointyGuitarVersion.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 /* PointyGuitar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PointyGuitar.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* PointyGuitar.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PointyGuitar.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 /* PointyGuitar */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = PointyGuitar;
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 /* PointyGuitar.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* PointyGuitar.h */,
8BA05A660720730100365D66 /* PointyGuitar.cpp */,
8BA05A670720730100365D66 /* PointyGuitar.exp */,
8BA05A680720730100365D66 /* PointyGuitar.r */,
8BA05A690720730100365D66 /* PointyGuitarVersion.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 /* PointyGuitarVersion.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 /* PointyGuitar.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 /* PointyGuitar */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "PointyGuitar" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = PointyGuitar;
productInstallPath = "$(HOME)/Library/Bundles";
productName = PointyGuitar;
productReference = 8D01CCD20486CAD60068D4B7 /* PointyGuitar.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 "PointyGuitar" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* PointyGuitar */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* PointyGuitar */,
);
};
/* 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 /* PointyGuitar.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* PointyGuitar.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 = PointyGuitar.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 = PointyGuitar;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = PointyGuitar.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 = PointyGuitar;
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 "PointyGuitar" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "PointyGuitar" */ = {
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: PointyGuitarVersion.h
*
* Version: 1.0
*
* Created: 4/16/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 __PointyGuitarVersion_h__
#define __PointyGuitarVersion_h__
#ifdef DEBUG
#define kPointyGuitarVersion 0xFFFFFFFF
#else
#define kPointyGuitarVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define PointyGuitar_COMP_MANF 'Dthr'
#define PointyGuitar_COMP_SUBTYPE 'pgtr'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#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

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

View file

@ -0,0 +1,375 @@
/*
* File: PointyGuitar.cpp
*
* Version: 1.0
*
* Created: 4/16/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.
*
*/
/*=============================================================================
PointyGuitar.cpp
=============================================================================*/
#include "PointyGuitar.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUDIOCOMPONENT_ENTRY(AUBaseFactory, PointyGuitar)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::PointyGuitar
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PointyGuitar::PointyGuitar(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 );
SetParameter(kParam_F, kDefaultValue_ParamF );
SetParameter(kParam_G, kDefaultValue_ParamG );
SetParameter(kParam_H, kDefaultValue_ParamH );
SetParameter(kParam_I, kDefaultValue_ParamI );
SetParameter(kParam_J, kDefaultValue_ParamJ );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::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;
case kParam_F:
AUBase::FillInParameterName (outParameterInfo, kParameterFName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamF;
break;
case kParam_G:
AUBase::FillInParameterName (outParameterInfo, kParameterGName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamG;
break;
case kParam_H:
AUBase::FillInParameterName (outParameterInfo, kParameterHName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamH;
break;
case kParam_I:
AUBase::FillInParameterName (outParameterInfo, kParameterIName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamI;
break;
case kParam_J:
AUBase::FillInParameterName (outParameterInfo, kParameterJName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamJ;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// PointyGuitar::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult PointyGuitar::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____PointyGuitarEffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::PointyGuitarKernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PointyGuitar::PointyGuitarKernel::Reset()
{
for(int x=0; x<17; x++) {
for(int y=0; y<11; y++) {
angS[x][y] = 0.0;angA[x][y] = 0.0;
}
}
for(int y=0; y<11; y++) angG[y] = 0.0;
for(int count = 0; count < 36; count++) {
iirHPosition[count] = 0.0;
iirHAngle[count] = 0.0;
iirBPosition[count] = 0.0;
iirBAngle[count] = 0.0;
}
WasNegative = false;
ZeroCross = 0;
gateroller = 0.0;
fpd = 1.0; while (fpd < 16386) fpd = rand()*UINT32_MAX;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// PointyGuitar::PointyGuitarKernel::Process
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void PointyGuitar::PointyGuitarKernel::Process( const Float32 *inSourceP,
Float32 *inDestP,
UInt32 inFramesToProcess,
UInt32 inNumChannels,
bool &ioSilence )
{
UInt32 nSampleFrames = inFramesToProcess;
const Float32 *sourceP = inSourceP;
Float32 *destP = inDestP;
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= GetSampleRate();
double drive = GetParameter( kParam_A )+0.618033988749894;
angG[0] = sqrt(GetParameter( kParam_B )*2.0);
angG[2] = sqrt(GetParameter( kParam_C )*2.0);
angG[4] = sqrt(GetParameter( kParam_D )*2.0);
angG[6] = sqrt(GetParameter( kParam_E )*2.0);
angG[8] = sqrt(GetParameter( kParam_F )*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(GetParameter( kParam_G ),overallscale);
double lFreq = pow(GetParameter( kParam_H ),overallscale+3.0);
//begin Gate
double onthreshold = (pow(GetParameter( kParam_I ),3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = GetParameter( kParam_J );
while (nSampleFrames-- > 0) {
double inputSample = *sourceP;
if (fabs(inputSample)<1.18e-23) inputSample = fpd * 1.18e-17;
//begin Gate
if (inputSample > 0.0)
{
if (WasNegative == true) ZeroCross = absmax * 0.3;
WasNegative = false;
} else {
ZeroCross += 1; WasNegative = true;
}
if (ZeroCross > absmax) ZeroCross = absmax;
if (gate == 0.0)
{
//if gate is totally silent
if (fabs(inputSample) > onthreshold)
{
if (gateroller == 0.0) gateroller = ZeroCross;
else gateroller -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gateroller -= release;
} else {
//gate is not silent but closing
if (fabs(inputSample) > offthreshold)
{
if (gateroller < ZeroCross) gateroller = ZeroCross;
else gateroller -= release;
//always trigger if gate is over offthreshold, otherwise close anyway
}
else gateroller -= release;
}
if (gateroller < 0.0) gateroller = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSample; inputSample = 0.0;
for (int y = 0; y < 9; y++) {
angA[x][y] = (angA[x][y]*(1.0-fr)) + ((band-angS[x][y])*fr);
double temp = band; band = ((angS[x][y]+(angA[x][y]*fr)) * (1.0-fr))+(band*fr);
angS[x][y] = ((angS[x][y]+(angA[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSample += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSample += (band*angG[9]);
inputSample *= drive;
inputSample -= fmin(fmax((inputSample*(fabs(inputSample)*0.654)*(fabs(inputSample)*0.654)),-1.0),1.0);
}
if (gateroller < 1.0)
{
gate = gateroller;
double bridgerectifier = 1-cos(fabs(inputSample));
if (inputSample > 0) inputSample = (inputSample*gate)+(bridgerectifier*(1.0-gate));
else inputSample = (inputSample*gate)-(bridgerectifier*(1.0-gate));
if (gate == 0.0) inputSample = 0.0;
} else gate = 1.0;
//end Gate
double lowSample = inputSample;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngle[count] = (iirBAngle[count]*(1.0-lFreq))+((lowSample-iirBPosition[count])*lFreq);
lowSample = ((iirBPosition[count]+(iirBAngle[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPosition[count] = ((iirBPosition[count]+(iirBAngle[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSample -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngle[count] = (iirHAngle[count]*(1.0-hFreq))+((inputSample-iirHPosition[count])*hFreq);
inputSample = ((iirHPosition[count]+(iirHAngle[count]*hFreq))*(1.0-hFreq))+(inputSample*hFreq);
iirHPosition[count] = ((iirHPosition[count]+(iirHAngle[count]*hFreq))*(1.0-hFreq))+(inputSample*hFreq);
} //the lowpass
inputSample *= output;
//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,2 @@
_PointyGuitarEntry
_PointyGuitarFactory

View file

@ -0,0 +1,172 @@
/*
* File: PointyGuitar.h
*
* Version: 1.0
*
* Created: 4/16/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 "PointyGuitarVersion.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __PointyGuitar_h__
#define __PointyGuitar_h__
#pragma mark ____PointyGuitar Parameters
// parameters
static const float kDefaultValue_ParamA = 0.6;
static const float kDefaultValue_ParamB = 0.5;
static const float kDefaultValue_ParamC = 0.8;
static const float kDefaultValue_ParamD = 0.6;
static const float kDefaultValue_ParamE = 0.4;
static const float kDefaultValue_ParamF = 0.5;
static const float kDefaultValue_ParamG = 0.7;
static const float kDefaultValue_ParamH = 0.4;
static const float kDefaultValue_ParamI = 0.0;
static const float kDefaultValue_ParamJ = 0.7;
static CFStringRef kParameterAName = CFSTR("Drive");
static CFStringRef kParameterBName = CFSTR("Presnce");
static CFStringRef kParameterCName = CFSTR("High");
static CFStringRef kParameterDName = CFSTR("Mid");
static CFStringRef kParameterEName = CFSTR("Low");
static CFStringRef kParameterFName = CFSTR("Sub");
static CFStringRef kParameterGName = CFSTR("HSpeakr");
static CFStringRef kParameterHName = CFSTR("LSpeakr");
static CFStringRef kParameterIName = CFSTR("Gate");
static CFStringRef kParameterJName = CFSTR("Output");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
kParam_E =4,
kParam_F =5,
kParam_G =6,
kParam_H =7,
kParam_I =8,
kParam_J =9,
//Add your parameters here...
kNumberOfParameters=10
};
#pragma mark ____PointyGuitar
class PointyGuitar : public AUEffectBase
{
public:
PointyGuitar(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~PointyGuitar () { delete mDebugDispatcher; }
#endif
virtual AUKernelBase * NewKernel() { return new PointyGuitarKernel(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 kPointyGuitarVersion; }
protected:
class PointyGuitarKernel : public AUKernelBase // most of the real work happens here
{
public:
PointyGuitarKernel(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:
double angS[18][12];
double angA[18][12];
double angG[12];
double iirHPosition[37];
double iirHAngle[37];
double iirBPosition[37];
double iirBAngle[37];
bool WasNegative;
int ZeroCross;
double gateroller;
double gate;
uint32_t fpd;
};
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: PointyGuitar.r
*
* Version: 1.0
*
* Created: 4/16/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 "PointyGuitarVersion.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_PointyGuitar 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PointyGuitar~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_PointyGuitar
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE PointyGuitar_COMP_SUBTYPE
#define COMP_MANUF PointyGuitar_COMP_MANF
#define VERSION kPointyGuitarVersion
#define NAME "Airwindows: PointyGuitar"
#define DESCRIPTION "PointyGuitar AU"
#define ENTRY_POINT "PointyGuitarEntry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,128 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* PointyGuitar */;
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 = 766498637;
PBXWorkspaceStateSaveDate = 766498637;
};
perUserProjectItems = {
8B128C452DAFD0C3008D5EE2 /* PlistBookmark */ = 8B128C452DAFD0C3008D5EE2 /* PlistBookmark */;
8B128C922DB05A3D008D5EE2 /* PlistBookmark */ = 8B128C922DB05A3D008D5EE2 /* PlistBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B128C452DAFD0C3008D5EE2 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/PointyGuitar/Info.plist;
rLen = 26;
rLoc = 0;
};
8B128C922DB05A3D008D5EE2 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/PointyGuitar/Info.plist;
rLen = 0;
rLoc = 9223372036854775807;
};
8BA05A660720730100365D66 /* PointyGuitar.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1081, 7344}}";
sepNavSelRange = "{14190, 0}";
sepNavVisRange = "{12446, 1189}";
sepNavWindowFrame = "{{683, 85}, {1128, 775}}";
};
};
8BA05A690720730100365D66 /* PointyGuitarVersion.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1081, 1062}}";
sepNavSelRange = "{2927, 0}";
sepNavVisRange = "{1273, 1717}";
sepNavWindowFrame = "{{15, 98}, {1128, 775}}";
};
};
8BC6025B073B072D006C4272 /* PointyGuitar.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1081, 2862}}";
sepNavSelRange = "{3211, 0}";
sepNavVisRange = "{2667, 1186}";
sepNavWindowFrame = "{{752, 103}, {1128, 775}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* PointyGuitar */ = {
activeExec = 0;
};
}

View file

@ -0,0 +1,965 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
8B4298D52DB069B7005F429F /* CAExtAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42984D2DB069B7005F429F /* CAExtAudioFile.h */; };
8B4298D62DB069B7005F429F /* CACFMachPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42984E2DB069B7005F429F /* CACFMachPort.h */; };
8B4298D72DB069B7005F429F /* CABool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42984F2DB069B7005F429F /* CABool.h */; };
8B4298D82DB069B7005F429F /* CAComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298502DB069B7005F429F /* CAComponent.cpp */; };
8B4298D92DB069B7005F429F /* CADebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298512DB069B7005F429F /* CADebugger.h */; };
8B4298DA2DB069B7005F429F /* CACFNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298522DB069B7005F429F /* CACFNumber.cpp */; };
8B4298DB2DB069B7005F429F /* CAGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298532DB069B7005F429F /* CAGuard.h */; };
8B4298DC2DB069B7005F429F /* CAAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298542DB069B7005F429F /* CAAtomic.h */; };
8B4298DD2DB069B7005F429F /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298552DB069B7005F429F /* CAStreamBasicDescription.h */; };
8B4298DE2DB069B7005F429F /* CACFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298562DB069B7005F429F /* CACFObject.h */; };
8B4298DF2DB069B7005F429F /* CAStreamRangedDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298572DB069B7005F429F /* CAStreamRangedDescription.h */; };
8B4298E02DB069B7005F429F /* CATokenMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298582DB069B7005F429F /* CATokenMap.h */; };
8B4298E12DB069B7005F429F /* CAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298592DB069B7005F429F /* CAComponent.h */; };
8B4298E22DB069B7005F429F /* CAAudioBufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42985A2DB069B7005F429F /* CAAudioBufferList.h */; };
8B4298E32DB069B7005F429F /* CAAudioUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42985B2DB069B7005F429F /* CAAudioUnit.h */; };
8B4298E42DB069B7005F429F /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42985C2DB069B7005F429F /* CAAUParameter.h */; };
8B4298E52DB069B7005F429F /* CAException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42985D2DB069B7005F429F /* CAException.h */; };
8B4298E62DB069B7005F429F /* CAAUProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42985E2DB069B7005F429F /* CAAUProcessor.cpp */; };
8B4298E72DB069B7005F429F /* CAAUProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42985F2DB069B7005F429F /* CAAUProcessor.h */; };
8B4298E82DB069B7005F429F /* CAProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298602DB069B7005F429F /* CAProcess.h */; };
8B4298E92DB069B7005F429F /* CACFDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298612DB069B7005F429F /* CACFDictionary.h */; };
8B4298EA2DB069B7005F429F /* CAPThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298622DB069B7005F429F /* CAPThread.h */; };
8B4298EB2DB069B7005F429F /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298632DB069B7005F429F /* CAAUParameter.cpp */; };
8B4298EC2DB069B7005F429F /* CAAudioTimeStamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298642DB069B7005F429F /* CAAudioTimeStamp.h */; };
8B4298ED2DB069B7005F429F /* CAFilePathUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298652DB069B7005F429F /* CAFilePathUtils.cpp */; };
8B4298EE2DB069B7005F429F /* CAAudioValueRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298662DB069B7005F429F /* CAAudioValueRange.h */; };
8B4298EF2DB069B7005F429F /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298672DB069B7005F429F /* CAVectorUnitTypes.h */; };
8B4298F02DB069B7005F429F /* CAAudioChannelLayoutObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298682DB069B7005F429F /* CAAudioChannelLayoutObject.cpp */; };
8B4298F12DB069B7005F429F /* CAGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298692DB069B7005F429F /* CAGuard.cpp */; };
8B4298F22DB069B7005F429F /* CACFNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42986A2DB069B7005F429F /* CACFNumber.h */; };
8B4298F32DB069B7005F429F /* CACFDistributedNotification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42986B2DB069B7005F429F /* CACFDistributedNotification.cpp */; };
8B4298F42DB069B7005F429F /* CACFString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42986C2DB069B7005F429F /* CACFString.h */; };
8B4298F52DB069B7005F429F /* CAAUMIDIMapManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42986D2DB069B7005F429F /* CAAUMIDIMapManager.cpp */; };
8B4298F62DB069B7005F429F /* CAComponentDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42986E2DB069B7005F429F /* CAComponentDescription.cpp */; };
8B4298F72DB069B7005F429F /* CAHostTimeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42986F2DB069B7005F429F /* CAHostTimeBase.h */; };
8B4298F82DB069B7005F429F /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298702DB069B7005F429F /* CADebugMacros.cpp */; };
8B4298F92DB069B7005F429F /* CAAudioFileFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298712DB069B7005F429F /* CAAudioFileFormats.h */; };
8B4298FA2DB069B7005F429F /* CAAUMIDIMapManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298722DB069B7005F429F /* CAAUMIDIMapManager.h */; };
8B4298FB2DB069B7005F429F /* CACFDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298732DB069B7005F429F /* CACFDictionary.cpp */; };
8B4298FC2DB069B7005F429F /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298742DB069B7005F429F /* CAMutex.h */; };
8B4298FD2DB069B7005F429F /* CACFString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298752DB069B7005F429F /* CACFString.cpp */; };
8B4298FE2DB069B7005F429F /* CASettingsStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298762DB069B7005F429F /* CASettingsStorage.h */; };
8B4298FF2DB069B7005F429F /* CADebugPrintf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298772DB069B7005F429F /* CADebugPrintf.h */; };
8B4299002DB069B7005F429F /* CAXException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298782DB069B7005F429F /* CAXException.cpp */; };
8B4299012DB069B7005F429F /* CAAUMIDIMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298792DB069B7005F429F /* CAAUMIDIMap.h */; };
8B4299022DB069B7005F429F /* AUParamInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42987A2DB069B7005F429F /* AUParamInfo.h */; };
8B4299032DB069B7005F429F /* CABitOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42987B2DB069B7005F429F /* CABitOperations.h */; };
8B4299042DB069B7005F429F /* CACFPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42987C2DB069B7005F429F /* CACFPreferences.cpp */; };
8B4299052DB069B7005F429F /* CABundleLocker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42987D2DB069B7005F429F /* CABundleLocker.h */; };
8B4299062DB069B7005F429F /* CAPropertyAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42987E2DB069B7005F429F /* CAPropertyAddress.h */; };
8B4299072DB069B7005F429F /* CAXException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42987F2DB069B7005F429F /* CAXException.h */; };
8B4299082DB069B7005F429F /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298802DB069B7005F429F /* CAAudioChannelLayout.cpp */; };
8B4299092DB069B7005F429F /* CAThreadSafeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298812DB069B7005F429F /* CAThreadSafeList.h */; };
8B42990A2DB069B7005F429F /* CAAudioUnitOutputCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298822DB069B7005F429F /* CAAudioUnitOutputCapturer.h */; };
8B42990B2DB069B7005F429F /* AUParamInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298832DB069B7005F429F /* AUParamInfo.cpp */; };
8B42990C2DB069B7005F429F /* CASharedLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298842DB069B7005F429F /* CASharedLibrary.cpp */; };
8B42990D2DB069B7005F429F /* CAAUMIDIMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298852DB069B7005F429F /* CAAUMIDIMap.cpp */; };
8B42990E2DB069B7005F429F /* CALogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298862DB069B7005F429F /* CALogMacros.h */; };
8B42990F2DB069B7005F429F /* CACFMessagePort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298872DB069B7005F429F /* CACFMessagePort.cpp */; };
8B4299102DB069B7005F429F /* CARingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298882DB069B7005F429F /* CARingBuffer.h */; };
8B4299112DB069B7005F429F /* AUOutputBL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298892DB069B7005F429F /* AUOutputBL.cpp */; };
8B4299122DB069B7005F429F /* CABufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42988A2DB069B7005F429F /* CABufferList.h */; };
8B4299132DB069B7005F429F /* CASharedLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42988B2DB069B7005F429F /* CASharedLibrary.h */; };
8B4299142DB069B7005F429F /* CACFData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42988C2DB069B7005F429F /* CACFData.h */; };
8B4299152DB069B7005F429F /* CAStreamRangedDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42988D2DB069B7005F429F /* CAStreamRangedDescription.cpp */; };
8B4299162DB069B7005F429F /* CAPThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42988E2DB069B7005F429F /* CAPThread.cpp */; };
8B4299172DB069B7005F429F /* CAAutoDisposer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42988F2DB069B7005F429F /* CAAutoDisposer.h */; };
8B4299182DB069B7005F429F /* CACFPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298902DB069B7005F429F /* CACFPreferences.h */; };
8B4299192DB069B7005F429F /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298912DB069B7005F429F /* CAVectorUnit.cpp */; };
8B42991A2DB069B7005F429F /* CAComponentDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298922DB069B7005F429F /* CAComponentDescription.h */; };
8B42991B2DB069B7005F429F /* CADebugMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298932DB069B7005F429F /* CADebugMacros.h */; };
8B42991C2DB069B7005F429F /* AUOutputBL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298942DB069B7005F429F /* AUOutputBL.h */; };
8B42991D2DB069B7005F429F /* CADebugPrintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298952DB069B7005F429F /* CADebugPrintf.cpp */; };
8B42991E2DB069B7005F429F /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298962DB069B7005F429F /* CARingBuffer.cpp */; };
8B42991F2DB069B7005F429F /* CACFPlugIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298972DB069B7005F429F /* CACFPlugIn.h */; };
8B4299202DB069B7005F429F /* CASettingsStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298982DB069B7005F429F /* CASettingsStorage.cpp */; };
8B4299212DB069B7005F429F /* CAMixMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298992DB069B7005F429F /* CAMixMap.h */; };
8B4299222DB069B7005F429F /* CACFDistributedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42989A2DB069B7005F429F /* CACFDistributedNotification.h */; };
8B4299232DB069B7005F429F /* CAFilePathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42989B2DB069B7005F429F /* CAFilePathUtils.h */; };
8B4299242DB069B7005F429F /* CATink.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42989C2DB069B7005F429F /* CATink.h */; };
8B4299252DB069B7005F429F /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42989D2DB069B7005F429F /* CAStreamBasicDescription.cpp */; };
8B4299262DB069B7005F429F /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42989E2DB069B7005F429F /* CAAudioChannelLayout.h */; };
8B4299272DB069B7005F429F /* CAProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B42989F2DB069B7005F429F /* CAProcess.cpp */; };
8B4299282DB069B7005F429F /* CAHostTimeBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298A02DB069B7005F429F /* CAHostTimeBase.cpp */; };
8B4299292DB069B7005F429F /* CAPersistence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298A12DB069B7005F429F /* CAPersistence.cpp */; };
8B42992A2DB069B7005F429F /* CAAudioBufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298A22DB069B7005F429F /* CAAudioBufferList.cpp */; };
8B42992B2DB069B7005F429F /* CAAudioTimeStamp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298A32DB069B7005F429F /* CAAudioTimeStamp.cpp */; };
8B42992C2DB069B7005F429F /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298A42DB069B7005F429F /* CAVectorUnit.h */; };
8B42992D2DB069B7005F429F /* CAByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298A52DB069B7005F429F /* CAByteOrder.h */; };
8B42992E2DB069B7005F429F /* CACFArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298A62DB069B7005F429F /* CACFArray.h */; };
8B42992F2DB069B7005F429F /* CAAtomicStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298A72DB069B7005F429F /* CAAtomicStack.h */; };
8B4299302DB069B7005F429F /* CAReferenceCounted.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298A82DB069B7005F429F /* CAReferenceCounted.h */; };
8B4299312DB069B7005F429F /* CACFMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298A92DB069B7005F429F /* CACFMachPort.cpp */; };
8B4299322DB069B7005F429F /* CABufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298AA2DB069B7005F429F /* CABufferList.cpp */; };
8B4299332DB069B7005F429F /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298AB2DB069B7005F429F /* CAMutex.cpp */; };
8B4299342DB069B7005F429F /* CADebugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298AC2DB069B7005F429F /* CADebugger.cpp */; };
8B4299352DB069B7005F429F /* CABundleLocker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298AD2DB069B7005F429F /* CABundleLocker.cpp */; };
8B4299362DB069B7005F429F /* CAAudioFileFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298AE2DB069B7005F429F /* CAAudioFileFormats.cpp */; };
8B4299372DB069B7005F429F /* CAMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298AF2DB069B7005F429F /* CAMath.h */; };
8B4299382DB069B7005F429F /* CACFArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298B02DB069B7005F429F /* CACFArray.cpp */; };
8B4299392DB069B7005F429F /* CACFMessagePort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298B12DB069B7005F429F /* CACFMessagePort.h */; };
8B42993A2DB069B7005F429F /* CAAudioValueRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298B22DB069B7005F429F /* CAAudioValueRange.cpp */; };
8B42993B2DB069B7005F429F /* CAAudioUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298B32DB069B7005F429F /* CAAudioUnit.cpp */; };
8B42993C2DB069B7005F429F /* AUViewLocalizedStringKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298B72DB069B7005F429F /* AUViewLocalizedStringKeys.h */; };
8B42993D2DB069B7005F429F /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298B92DB069B7005F429F /* ComponentBase.cpp */; };
8B42993E2DB069B7005F429F /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298BA2DB069B7005F429F /* AUScopeElement.cpp */; };
8B42993F2DB069B7005F429F /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298BB2DB069B7005F429F /* ComponentBase.h */; };
8B4299402DB069B7005F429F /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298BC2DB069B7005F429F /* AUBase.cpp */; };
8B4299412DB069B7005F429F /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298BD2DB069B7005F429F /* AUInputElement.h */; };
8B4299422DB069B7005F429F /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298BE2DB069B7005F429F /* AUBase.h */; };
8B4299432DB069B7005F429F /* AUPlugInDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298BF2DB069B7005F429F /* AUPlugInDispatch.h */; };
8B4299442DB069B7005F429F /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298C02DB069B7005F429F /* AUDispatch.h */; };
8B4299452DB069B7005F429F /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298C12DB069B7005F429F /* AUOutputElement.cpp */; };
8B4299472DB069B7005F429F /* AUPlugInDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298C32DB069B7005F429F /* AUPlugInDispatch.cpp */; };
8B4299482DB069B7005F429F /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298C42DB069B7005F429F /* AUOutputElement.h */; };
8B4299492DB069B7005F429F /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298C52DB069B7005F429F /* AUDispatch.cpp */; };
8B42994A2DB069B7005F429F /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298C62DB069B7005F429F /* AUScopeElement.h */; };
8B42994B2DB069B7005F429F /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298C72DB069B7005F429F /* AUInputElement.cpp */; };
8B42994C2DB069B7005F429F /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298C92DB069B7005F429F /* AUEffectBase.cpp */; };
8B42994D2DB069B7005F429F /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298CA2DB069B7005F429F /* AUEffectBase.h */; };
8B42994E2DB069B7005F429F /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298CC2DB069B7005F429F /* AUTimestampGenerator.h */; };
8B42994F2DB069B7005F429F /* AUBaseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298CD2DB069B7005F429F /* AUBaseHelper.cpp */; };
8B4299502DB069B7005F429F /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298CE2DB069B7005F429F /* AUSilentTimeout.h */; };
8B4299512DB069B7005F429F /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298CF2DB069B7005F429F /* AUInputFormatConverter.h */; };
8B4299522DB069B7005F429F /* AUTimestampGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298D02DB069B7005F429F /* AUTimestampGenerator.cpp */; };
8B4299532DB069B7005F429F /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4298D12DB069B7005F429F /* AUBuffer.cpp */; };
8B4299542DB069B7005F429F /* AUMIDIDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298D22DB069B7005F429F /* AUMIDIDefs.h */; };
8B4299552DB069B7005F429F /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298D32DB069B7005F429F /* AUBuffer.h */; };
8B4299562DB069B7005F429F /* AUBaseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4298D42DB069B7005F429F /* AUBaseHelper.h */; };
8BA05A6B0720730100365D66 /* PointyGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* PointyGuitar.cpp */; };
8BA05A6E0720730100365D66 /* PointyGuitarVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* PointyGuitarVersion.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 /* PointyGuitar.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* PointyGuitar.h */; };
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
8B42984D2DB069B7005F429F /* CAExtAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAExtAudioFile.h; sourceTree = "<group>"; };
8B42984E2DB069B7005F429F /* CACFMachPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMachPort.h; sourceTree = "<group>"; };
8B42984F2DB069B7005F429F /* CABool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABool.h; sourceTree = "<group>"; };
8B4298502DB069B7005F429F /* CAComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponent.cpp; sourceTree = "<group>"; };
8B4298512DB069B7005F429F /* CADebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugger.h; sourceTree = "<group>"; };
8B4298522DB069B7005F429F /* CACFNumber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFNumber.cpp; sourceTree = "<group>"; };
8B4298532DB069B7005F429F /* CAGuard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAGuard.h; sourceTree = "<group>"; };
8B4298542DB069B7005F429F /* CAAtomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomic.h; sourceTree = "<group>"; };
8B4298552DB069B7005F429F /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
8B4298562DB069B7005F429F /* CACFObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFObject.h; sourceTree = "<group>"; };
8B4298572DB069B7005F429F /* CAStreamRangedDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamRangedDescription.h; sourceTree = "<group>"; };
8B4298582DB069B7005F429F /* CATokenMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATokenMap.h; sourceTree = "<group>"; };
8B4298592DB069B7005F429F /* CAComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponent.h; sourceTree = "<group>"; };
8B42985A2DB069B7005F429F /* CAAudioBufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioBufferList.h; sourceTree = "<group>"; };
8B42985B2DB069B7005F429F /* CAAudioUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnit.h; sourceTree = "<group>"; };
8B42985C2DB069B7005F429F /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = "<group>"; };
8B42985D2DB069B7005F429F /* CAException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAException.h; sourceTree = "<group>"; };
8B42985E2DB069B7005F429F /* CAAUProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUProcessor.cpp; sourceTree = "<group>"; };
8B42985F2DB069B7005F429F /* CAAUProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUProcessor.h; sourceTree = "<group>"; };
8B4298602DB069B7005F429F /* CAProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAProcess.h; sourceTree = "<group>"; };
8B4298612DB069B7005F429F /* CACFDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDictionary.h; sourceTree = "<group>"; };
8B4298622DB069B7005F429F /* CAPThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPThread.h; sourceTree = "<group>"; };
8B4298632DB069B7005F429F /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = "<group>"; };
8B4298642DB069B7005F429F /* CAAudioTimeStamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioTimeStamp.h; sourceTree = "<group>"; };
8B4298652DB069B7005F429F /* CAFilePathUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAFilePathUtils.cpp; sourceTree = "<group>"; };
8B4298662DB069B7005F429F /* CAAudioValueRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioValueRange.h; sourceTree = "<group>"; };
8B4298672DB069B7005F429F /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; };
8B4298682DB069B7005F429F /* CAAudioChannelLayoutObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayoutObject.cpp; sourceTree = "<group>"; };
8B4298692DB069B7005F429F /* CAGuard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAGuard.cpp; sourceTree = "<group>"; };
8B42986A2DB069B7005F429F /* CACFNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFNumber.h; sourceTree = "<group>"; };
8B42986B2DB069B7005F429F /* CACFDistributedNotification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDistributedNotification.cpp; sourceTree = "<group>"; };
8B42986C2DB069B7005F429F /* CACFString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFString.h; sourceTree = "<group>"; };
8B42986D2DB069B7005F429F /* CAAUMIDIMapManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMapManager.cpp; sourceTree = "<group>"; };
8B42986E2DB069B7005F429F /* CAComponentDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponentDescription.cpp; sourceTree = "<group>"; };
8B42986F2DB069B7005F429F /* CAHostTimeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAHostTimeBase.h; sourceTree = "<group>"; };
8B4298702DB069B7005F429F /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugMacros.cpp; sourceTree = "<group>"; };
8B4298712DB069B7005F429F /* CAAudioFileFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioFileFormats.h; sourceTree = "<group>"; };
8B4298722DB069B7005F429F /* CAAUMIDIMapManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMapManager.h; sourceTree = "<group>"; };
8B4298732DB069B7005F429F /* CACFDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDictionary.cpp; sourceTree = "<group>"; };
8B4298742DB069B7005F429F /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMutex.h; sourceTree = "<group>"; };
8B4298752DB069B7005F429F /* CACFString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFString.cpp; sourceTree = "<group>"; };
8B4298762DB069B7005F429F /* CASettingsStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASettingsStorage.h; sourceTree = "<group>"; };
8B4298772DB069B7005F429F /* CADebugPrintf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugPrintf.h; sourceTree = "<group>"; };
8B4298782DB069B7005F429F /* CAXException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAXException.cpp; sourceTree = "<group>"; };
8B4298792DB069B7005F429F /* CAAUMIDIMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMap.h; sourceTree = "<group>"; };
8B42987A2DB069B7005F429F /* AUParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUParamInfo.h; sourceTree = "<group>"; };
8B42987B2DB069B7005F429F /* CABitOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABitOperations.h; sourceTree = "<group>"; };
8B42987C2DB069B7005F429F /* CACFPreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFPreferences.cpp; sourceTree = "<group>"; };
8B42987D2DB069B7005F429F /* CABundleLocker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABundleLocker.h; sourceTree = "<group>"; };
8B42987E2DB069B7005F429F /* CAPropertyAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPropertyAddress.h; sourceTree = "<group>"; };
8B42987F2DB069B7005F429F /* CAXException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAXException.h; sourceTree = "<group>"; };
8B4298802DB069B7005F429F /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
8B4298812DB069B7005F429F /* CAThreadSafeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAThreadSafeList.h; sourceTree = "<group>"; };
8B4298822DB069B7005F429F /* CAAudioUnitOutputCapturer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnitOutputCapturer.h; sourceTree = "<group>"; };
8B4298832DB069B7005F429F /* AUParamInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUParamInfo.cpp; sourceTree = "<group>"; };
8B4298842DB069B7005F429F /* CASharedLibrary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASharedLibrary.cpp; sourceTree = "<group>"; };
8B4298852DB069B7005F429F /* CAAUMIDIMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMap.cpp; sourceTree = "<group>"; };
8B4298862DB069B7005F429F /* CALogMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CALogMacros.h; sourceTree = "<group>"; };
8B4298872DB069B7005F429F /* CACFMessagePort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMessagePort.cpp; sourceTree = "<group>"; };
8B4298882DB069B7005F429F /* CARingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CARingBuffer.h; sourceTree = "<group>"; };
8B4298892DB069B7005F429F /* AUOutputBL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputBL.cpp; sourceTree = "<group>"; };
8B42988A2DB069B7005F429F /* CABufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABufferList.h; sourceTree = "<group>"; };
8B42988B2DB069B7005F429F /* CASharedLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASharedLibrary.h; sourceTree = "<group>"; };
8B42988C2DB069B7005F429F /* CACFData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFData.h; sourceTree = "<group>"; };
8B42988D2DB069B7005F429F /* CAStreamRangedDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamRangedDescription.cpp; sourceTree = "<group>"; };
8B42988E2DB069B7005F429F /* CAPThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPThread.cpp; sourceTree = "<group>"; };
8B42988F2DB069B7005F429F /* CAAutoDisposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAutoDisposer.h; sourceTree = "<group>"; };
8B4298902DB069B7005F429F /* CACFPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPreferences.h; sourceTree = "<group>"; };
8B4298912DB069B7005F429F /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = "<group>"; };
8B4298922DB069B7005F429F /* CAComponentDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponentDescription.h; sourceTree = "<group>"; };
8B4298932DB069B7005F429F /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugMacros.h; sourceTree = "<group>"; };
8B4298942DB069B7005F429F /* AUOutputBL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputBL.h; sourceTree = "<group>"; };
8B4298952DB069B7005F429F /* CADebugPrintf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugPrintf.cpp; sourceTree = "<group>"; };
8B4298962DB069B7005F429F /* CARingBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CARingBuffer.cpp; sourceTree = "<group>"; };
8B4298972DB069B7005F429F /* CACFPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPlugIn.h; sourceTree = "<group>"; };
8B4298982DB069B7005F429F /* CASettingsStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASettingsStorage.cpp; sourceTree = "<group>"; };
8B4298992DB069B7005F429F /* CAMixMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMixMap.h; sourceTree = "<group>"; };
8B42989A2DB069B7005F429F /* CACFDistributedNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDistributedNotification.h; sourceTree = "<group>"; };
8B42989B2DB069B7005F429F /* CAFilePathUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAFilePathUtils.h; sourceTree = "<group>"; };
8B42989C2DB069B7005F429F /* CATink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATink.h; sourceTree = "<group>"; };
8B42989D2DB069B7005F429F /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
8B42989E2DB069B7005F429F /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
8B42989F2DB069B7005F429F /* CAProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAProcess.cpp; sourceTree = "<group>"; };
8B4298A02DB069B7005F429F /* CAHostTimeBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAHostTimeBase.cpp; sourceTree = "<group>"; };
8B4298A12DB069B7005F429F /* CAPersistence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPersistence.cpp; sourceTree = "<group>"; };
8B4298A22DB069B7005F429F /* CAAudioBufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioBufferList.cpp; sourceTree = "<group>"; };
8B4298A32DB069B7005F429F /* CAAudioTimeStamp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioTimeStamp.cpp; sourceTree = "<group>"; };
8B4298A42DB069B7005F429F /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = "<group>"; };
8B4298A52DB069B7005F429F /* CAByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAByteOrder.h; sourceTree = "<group>"; };
8B4298A62DB069B7005F429F /* CACFArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFArray.h; sourceTree = "<group>"; };
8B4298A72DB069B7005F429F /* CAAtomicStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomicStack.h; sourceTree = "<group>"; };
8B4298A82DB069B7005F429F /* CAReferenceCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAReferenceCounted.h; sourceTree = "<group>"; };
8B4298A92DB069B7005F429F /* CACFMachPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMachPort.cpp; sourceTree = "<group>"; };
8B4298AA2DB069B7005F429F /* CABufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABufferList.cpp; sourceTree = "<group>"; };
8B4298AB2DB069B7005F429F /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAMutex.cpp; sourceTree = "<group>"; };
8B4298AC2DB069B7005F429F /* CADebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugger.cpp; sourceTree = "<group>"; };
8B4298AD2DB069B7005F429F /* CABundleLocker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABundleLocker.cpp; sourceTree = "<group>"; };
8B4298AE2DB069B7005F429F /* CAAudioFileFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioFileFormats.cpp; sourceTree = "<group>"; };
8B4298AF2DB069B7005F429F /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMath.h; sourceTree = "<group>"; };
8B4298B02DB069B7005F429F /* CACFArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFArray.cpp; sourceTree = "<group>"; };
8B4298B12DB069B7005F429F /* CACFMessagePort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMessagePort.h; sourceTree = "<group>"; };
8B4298B22DB069B7005F429F /* CAAudioValueRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioValueRange.cpp; sourceTree = "<group>"; };
8B4298B32DB069B7005F429F /* CAAudioUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioUnit.cpp; sourceTree = "<group>"; };
8B4298B72DB069B7005F429F /* AUViewLocalizedStringKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUViewLocalizedStringKeys.h; sourceTree = "<group>"; };
8B4298B92DB069B7005F429F /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; };
8B4298BA2DB069B7005F429F /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; };
8B4298BB2DB069B7005F429F /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; };
8B4298BC2DB069B7005F429F /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; };
8B4298BD2DB069B7005F429F /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; };
8B4298BE2DB069B7005F429F /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; };
8B4298BF2DB069B7005F429F /* AUPlugInDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUPlugInDispatch.h; sourceTree = "<group>"; };
8B4298C02DB069B7005F429F /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; };
8B4298C12DB069B7005F429F /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; };
8B4298C22DB069B7005F429F /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; };
8B4298C32DB069B7005F429F /* AUPlugInDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUPlugInDispatch.cpp; sourceTree = "<group>"; };
8B4298C42DB069B7005F429F /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; };
8B4298C52DB069B7005F429F /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; };
8B4298C62DB069B7005F429F /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; };
8B4298C72DB069B7005F429F /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; };
8B4298C92DB069B7005F429F /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; };
8B4298CA2DB069B7005F429F /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; };
8B4298CC2DB069B7005F429F /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = "<group>"; };
8B4298CD2DB069B7005F429F /* AUBaseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBaseHelper.cpp; sourceTree = "<group>"; };
8B4298CE2DB069B7005F429F /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = "<group>"; };
8B4298CF2DB069B7005F429F /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = "<group>"; };
8B4298D02DB069B7005F429F /* AUTimestampGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUTimestampGenerator.cpp; sourceTree = "<group>"; };
8B4298D12DB069B7005F429F /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
8B4298D22DB069B7005F429F /* AUMIDIDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUMIDIDefs.h; sourceTree = "<group>"; };
8B4298D32DB069B7005F429F /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; };
8B4298D42DB069B7005F429F /* AUBaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBaseHelper.h; sourceTree = "<group>"; };
8B4299572DB06A9A005F429F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
8B5C7FBF076FB2C200A15F61 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
8BA05A660720730100365D66 /* PointyGuitar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PointyGuitar.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* PointyGuitar.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = PointyGuitar.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* PointyGuitar.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = PointyGuitar.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* PointyGuitarVersion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PointyGuitarVersion.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 /* PointyGuitar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PointyGuitar.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* PointyGuitar.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PointyGuitar.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 /* PointyGuitar */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = PointyGuitar;
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 = (
8B42984B2DB069B7005F429F /* CA_SDK */,
8BA05A56072072A900365D66 /* AU Source */,
);
name = Source;
sourceTree = "<group>";
};
19C28FB4FE9D528D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D01CCD20486CAD60068D4B7 /* PointyGuitar.component */,
);
name = Products;
sourceTree = "<group>";
};
8B42984B2DB069B7005F429F /* CA_SDK */ = {
isa = PBXGroup;
children = (
8B42984C2DB069B7005F429F /* PublicUtility */,
8B4298B42DB069B7005F429F /* AudioUnits */,
);
name = CA_SDK;
path = ../../../../CA_SDK;
sourceTree = "<group>";
};
8B42984C2DB069B7005F429F /* PublicUtility */ = {
isa = PBXGroup;
children = (
8B42984D2DB069B7005F429F /* CAExtAudioFile.h */,
8B42984E2DB069B7005F429F /* CACFMachPort.h */,
8B42984F2DB069B7005F429F /* CABool.h */,
8B4298502DB069B7005F429F /* CAComponent.cpp */,
8B4298512DB069B7005F429F /* CADebugger.h */,
8B4298522DB069B7005F429F /* CACFNumber.cpp */,
8B4298532DB069B7005F429F /* CAGuard.h */,
8B4298542DB069B7005F429F /* CAAtomic.h */,
8B4298552DB069B7005F429F /* CAStreamBasicDescription.h */,
8B4298562DB069B7005F429F /* CACFObject.h */,
8B4298572DB069B7005F429F /* CAStreamRangedDescription.h */,
8B4298582DB069B7005F429F /* CATokenMap.h */,
8B4298592DB069B7005F429F /* CAComponent.h */,
8B42985A2DB069B7005F429F /* CAAudioBufferList.h */,
8B42985B2DB069B7005F429F /* CAAudioUnit.h */,
8B42985C2DB069B7005F429F /* CAAUParameter.h */,
8B42985D2DB069B7005F429F /* CAException.h */,
8B42985E2DB069B7005F429F /* CAAUProcessor.cpp */,
8B42985F2DB069B7005F429F /* CAAUProcessor.h */,
8B4298602DB069B7005F429F /* CAProcess.h */,
8B4298612DB069B7005F429F /* CACFDictionary.h */,
8B4298622DB069B7005F429F /* CAPThread.h */,
8B4298632DB069B7005F429F /* CAAUParameter.cpp */,
8B4298642DB069B7005F429F /* CAAudioTimeStamp.h */,
8B4298652DB069B7005F429F /* CAFilePathUtils.cpp */,
8B4298662DB069B7005F429F /* CAAudioValueRange.h */,
8B4298672DB069B7005F429F /* CAVectorUnitTypes.h */,
8B4298682DB069B7005F429F /* CAAudioChannelLayoutObject.cpp */,
8B4298692DB069B7005F429F /* CAGuard.cpp */,
8B42986A2DB069B7005F429F /* CACFNumber.h */,
8B42986B2DB069B7005F429F /* CACFDistributedNotification.cpp */,
8B42986C2DB069B7005F429F /* CACFString.h */,
8B42986D2DB069B7005F429F /* CAAUMIDIMapManager.cpp */,
8B42986E2DB069B7005F429F /* CAComponentDescription.cpp */,
8B42986F2DB069B7005F429F /* CAHostTimeBase.h */,
8B4298702DB069B7005F429F /* CADebugMacros.cpp */,
8B4298712DB069B7005F429F /* CAAudioFileFormats.h */,
8B4298722DB069B7005F429F /* CAAUMIDIMapManager.h */,
8B4298732DB069B7005F429F /* CACFDictionary.cpp */,
8B4298742DB069B7005F429F /* CAMutex.h */,
8B4298752DB069B7005F429F /* CACFString.cpp */,
8B4298762DB069B7005F429F /* CASettingsStorage.h */,
8B4298772DB069B7005F429F /* CADebugPrintf.h */,
8B4298782DB069B7005F429F /* CAXException.cpp */,
8B4298792DB069B7005F429F /* CAAUMIDIMap.h */,
8B42987A2DB069B7005F429F /* AUParamInfo.h */,
8B42987B2DB069B7005F429F /* CABitOperations.h */,
8B42987C2DB069B7005F429F /* CACFPreferences.cpp */,
8B42987D2DB069B7005F429F /* CABundleLocker.h */,
8B42987E2DB069B7005F429F /* CAPropertyAddress.h */,
8B42987F2DB069B7005F429F /* CAXException.h */,
8B4298802DB069B7005F429F /* CAAudioChannelLayout.cpp */,
8B4298812DB069B7005F429F /* CAThreadSafeList.h */,
8B4298822DB069B7005F429F /* CAAudioUnitOutputCapturer.h */,
8B4298832DB069B7005F429F /* AUParamInfo.cpp */,
8B4298842DB069B7005F429F /* CASharedLibrary.cpp */,
8B4298852DB069B7005F429F /* CAAUMIDIMap.cpp */,
8B4298862DB069B7005F429F /* CALogMacros.h */,
8B4298872DB069B7005F429F /* CACFMessagePort.cpp */,
8B4298882DB069B7005F429F /* CARingBuffer.h */,
8B4298892DB069B7005F429F /* AUOutputBL.cpp */,
8B42988A2DB069B7005F429F /* CABufferList.h */,
8B42988B2DB069B7005F429F /* CASharedLibrary.h */,
8B42988C2DB069B7005F429F /* CACFData.h */,
8B42988D2DB069B7005F429F /* CAStreamRangedDescription.cpp */,
8B42988E2DB069B7005F429F /* CAPThread.cpp */,
8B42988F2DB069B7005F429F /* CAAutoDisposer.h */,
8B4298902DB069B7005F429F /* CACFPreferences.h */,
8B4298912DB069B7005F429F /* CAVectorUnit.cpp */,
8B4298922DB069B7005F429F /* CAComponentDescription.h */,
8B4298932DB069B7005F429F /* CADebugMacros.h */,
8B4298942DB069B7005F429F /* AUOutputBL.h */,
8B4298952DB069B7005F429F /* CADebugPrintf.cpp */,
8B4298962DB069B7005F429F /* CARingBuffer.cpp */,
8B4298972DB069B7005F429F /* CACFPlugIn.h */,
8B4298982DB069B7005F429F /* CASettingsStorage.cpp */,
8B4298992DB069B7005F429F /* CAMixMap.h */,
8B42989A2DB069B7005F429F /* CACFDistributedNotification.h */,
8B42989B2DB069B7005F429F /* CAFilePathUtils.h */,
8B42989C2DB069B7005F429F /* CATink.h */,
8B42989D2DB069B7005F429F /* CAStreamBasicDescription.cpp */,
8B42989E2DB069B7005F429F /* CAAudioChannelLayout.h */,
8B42989F2DB069B7005F429F /* CAProcess.cpp */,
8B4298A02DB069B7005F429F /* CAHostTimeBase.cpp */,
8B4298A12DB069B7005F429F /* CAPersistence.cpp */,
8B4298A22DB069B7005F429F /* CAAudioBufferList.cpp */,
8B4298A32DB069B7005F429F /* CAAudioTimeStamp.cpp */,
8B4298A42DB069B7005F429F /* CAVectorUnit.h */,
8B4298A52DB069B7005F429F /* CAByteOrder.h */,
8B4298A62DB069B7005F429F /* CACFArray.h */,
8B4298A72DB069B7005F429F /* CAAtomicStack.h */,
8B4298A82DB069B7005F429F /* CAReferenceCounted.h */,
8B4298A92DB069B7005F429F /* CACFMachPort.cpp */,
8B4298AA2DB069B7005F429F /* CABufferList.cpp */,
8B4298AB2DB069B7005F429F /* CAMutex.cpp */,
8B4298AC2DB069B7005F429F /* CADebugger.cpp */,
8B4298AD2DB069B7005F429F /* CABundleLocker.cpp */,
8B4298AE2DB069B7005F429F /* CAAudioFileFormats.cpp */,
8B4298AF2DB069B7005F429F /* CAMath.h */,
8B4298B02DB069B7005F429F /* CACFArray.cpp */,
8B4298B12DB069B7005F429F /* CACFMessagePort.h */,
8B4298B22DB069B7005F429F /* CAAudioValueRange.cpp */,
8B4298B32DB069B7005F429F /* CAAudioUnit.cpp */,
);
path = PublicUtility;
sourceTree = "<group>";
};
8B4298B42DB069B7005F429F /* AudioUnits */ = {
isa = PBXGroup;
children = (
8B4298B52DB069B7005F429F /* AUPublic */,
);
path = AudioUnits;
sourceTree = "<group>";
};
8B4298B52DB069B7005F429F /* AUPublic */ = {
isa = PBXGroup;
children = (
8B4298B62DB069B7005F429F /* AUViewBase */,
8B4298B82DB069B7005F429F /* AUBase */,
8B4298C82DB069B7005F429F /* OtherBases */,
8B4298CB2DB069B7005F429F /* Utility */,
);
path = AUPublic;
sourceTree = "<group>";
};
8B4298B62DB069B7005F429F /* AUViewBase */ = {
isa = PBXGroup;
children = (
8B4298B72DB069B7005F429F /* AUViewLocalizedStringKeys.h */,
);
path = AUViewBase;
sourceTree = "<group>";
};
8B4298B82DB069B7005F429F /* AUBase */ = {
isa = PBXGroup;
children = (
8B4298B92DB069B7005F429F /* ComponentBase.cpp */,
8B4298BA2DB069B7005F429F /* AUScopeElement.cpp */,
8B4298BB2DB069B7005F429F /* ComponentBase.h */,
8B4298BC2DB069B7005F429F /* AUBase.cpp */,
8B4298BD2DB069B7005F429F /* AUInputElement.h */,
8B4298BE2DB069B7005F429F /* AUBase.h */,
8B4298BF2DB069B7005F429F /* AUPlugInDispatch.h */,
8B4298C02DB069B7005F429F /* AUDispatch.h */,
8B4298C12DB069B7005F429F /* AUOutputElement.cpp */,
8B4298C22DB069B7005F429F /* AUResources.r */,
8B4298C32DB069B7005F429F /* AUPlugInDispatch.cpp */,
8B4298C42DB069B7005F429F /* AUOutputElement.h */,
8B4298C52DB069B7005F429F /* AUDispatch.cpp */,
8B4298C62DB069B7005F429F /* AUScopeElement.h */,
8B4298C72DB069B7005F429F /* AUInputElement.cpp */,
);
path = AUBase;
sourceTree = "<group>";
};
8B4298C82DB069B7005F429F /* OtherBases */ = {
isa = PBXGroup;
children = (
8B4298C92DB069B7005F429F /* AUEffectBase.cpp */,
8B4298CA2DB069B7005F429F /* AUEffectBase.h */,
);
path = OtherBases;
sourceTree = "<group>";
};
8B4298CB2DB069B7005F429F /* Utility */ = {
isa = PBXGroup;
children = (
8B4298CC2DB069B7005F429F /* AUTimestampGenerator.h */,
8B4298CD2DB069B7005F429F /* AUBaseHelper.cpp */,
8B4298CE2DB069B7005F429F /* AUSilentTimeout.h */,
8B4298CF2DB069B7005F429F /* AUInputFormatConverter.h */,
8B4298D02DB069B7005F429F /* AUTimestampGenerator.cpp */,
8B4298D12DB069B7005F429F /* AUBuffer.cpp */,
8B4298D22DB069B7005F429F /* AUMIDIDefs.h */,
8B4298D32DB069B7005F429F /* AUBuffer.h */,
8B4298D42DB069B7005F429F /* AUBaseHelper.h */,
);
path = Utility;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* PointyGuitar.h */,
8BA05A660720730100365D66 /* PointyGuitar.cpp */,
8BA05A670720730100365D66 /* PointyGuitar.exp */,
8BA05A680720730100365D66 /* PointyGuitar.r */,
8BA05A690720730100365D66 /* PointyGuitarVersion.h */,
);
name = "AU Source";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8D01CCC70486CAD60068D4B7 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8B4299052DB069B7005F429F /* CABundleLocker.h in Headers */,
8B4299262DB069B7005F429F /* CAAudioChannelLayout.h in Headers */,
8B42991C2DB069B7005F429F /* AUOutputBL.h in Headers */,
8B4298F72DB069B7005F429F /* CAHostTimeBase.h in Headers */,
8B42993F2DB069B7005F429F /* ComponentBase.h in Headers */,
8B42992F2DB069B7005F429F /* CAAtomicStack.h in Headers */,
8B4298EC2DB069B7005F429F /* CAAudioTimeStamp.h in Headers */,
8B4299092DB069B7005F429F /* CAThreadSafeList.h in Headers */,
8B4298E42DB069B7005F429F /* CAAUParameter.h in Headers */,
8B4299562DB069B7005F429F /* AUBaseHelper.h in Headers */,
8B42994E2DB069B7005F429F /* AUTimestampGenerator.h in Headers */,
8B4298FF2DB069B7005F429F /* CADebugPrintf.h in Headers */,
8B4299392DB069B7005F429F /* CACFMessagePort.h in Headers */,
8B4298E72DB069B7005F429F /* CAAUProcessor.h in Headers */,
8B4298E32DB069B7005F429F /* CAAudioUnit.h in Headers */,
8B42993C2DB069B7005F429F /* AUViewLocalizedStringKeys.h in Headers */,
8B4299222DB069B7005F429F /* CACFDistributedNotification.h in Headers */,
8B4298E12DB069B7005F429F /* CAComponent.h in Headers */,
8B4298EF2DB069B7005F429F /* CAVectorUnitTypes.h in Headers */,
8BA05A6E0720730100365D66 /* PointyGuitarVersion.h in Headers */,
8B4299232DB069B7005F429F /* CAFilePathUtils.h in Headers */,
8B4298E52DB069B7005F429F /* CAException.h in Headers */,
8B4298DC2DB069B7005F429F /* CAAtomic.h in Headers */,
8B4298DB2DB069B7005F429F /* CAGuard.h in Headers */,
8B4299412DB069B7005F429F /* AUInputElement.h in Headers */,
8B4299182DB069B7005F429F /* CACFPreferences.h in Headers */,
8B42992D2DB069B7005F429F /* CAByteOrder.h in Headers */,
8B4299102DB069B7005F429F /* CARingBuffer.h in Headers */,
8B4298D72DB069B7005F429F /* CABool.h in Headers */,
8B4298FC2DB069B7005F429F /* CAMutex.h in Headers */,
8B4299422DB069B7005F429F /* AUBase.h in Headers */,
8BC6025C073B072D006C4272 /* PointyGuitar.h in Headers */,
8B4298F42DB069B7005F429F /* CACFString.h in Headers */,
8B4299132DB069B7005F429F /* CASharedLibrary.h in Headers */,
8B4298E02DB069B7005F429F /* CATokenMap.h in Headers */,
8B4298D52DB069B7005F429F /* CAExtAudioFile.h in Headers */,
8B4298EA2DB069B7005F429F /* CAPThread.h in Headers */,
8B4299062DB069B7005F429F /* CAPropertyAddress.h in Headers */,
8B4299302DB069B7005F429F /* CAReferenceCounted.h in Headers */,
8B4299552DB069B7005F429F /* AUBuffer.h in Headers */,
8B4299372DB069B7005F429F /* CAMath.h in Headers */,
8B4299172DB069B7005F429F /* CAAutoDisposer.h in Headers */,
8B4298DE2DB069B7005F429F /* CACFObject.h in Headers */,
8B4298FE2DB069B7005F429F /* CASettingsStorage.h in Headers */,
8B4299072DB069B7005F429F /* CAXException.h in Headers */,
8B4299242DB069B7005F429F /* CATink.h in Headers */,
8B4299512DB069B7005F429F /* AUInputFormatConverter.h in Headers */,
8B42992C2DB069B7005F429F /* CAVectorUnit.h in Headers */,
8B4298E82DB069B7005F429F /* CAProcess.h in Headers */,
8B4298EE2DB069B7005F429F /* CAAudioValueRange.h in Headers */,
8B4299032DB069B7005F429F /* CABitOperations.h in Headers */,
8B4298F92DB069B7005F429F /* CAAudioFileFormats.h in Headers */,
8B4298F22DB069B7005F429F /* CACFNumber.h in Headers */,
8B42990A2DB069B7005F429F /* CAAudioUnitOutputCapturer.h in Headers */,
8B42991B2DB069B7005F429F /* CADebugMacros.h in Headers */,
8B4299542DB069B7005F429F /* AUMIDIDefs.h in Headers */,
8B4299142DB069B7005F429F /* CACFData.h in Headers */,
8B4298DD2DB069B7005F429F /* CAStreamBasicDescription.h in Headers */,
8B4299432DB069B7005F429F /* AUPlugInDispatch.h in Headers */,
8B4298DF2DB069B7005F429F /* CAStreamRangedDescription.h in Headers */,
8B42991F2DB069B7005F429F /* CACFPlugIn.h in Headers */,
8B4298E22DB069B7005F429F /* CAAudioBufferList.h in Headers */,
8B4298FA2DB069B7005F429F /* CAAUMIDIMapManager.h in Headers */,
8B42994D2DB069B7005F429F /* AUEffectBase.h in Headers */,
8B4298E92DB069B7005F429F /* CACFDictionary.h in Headers */,
8B42994A2DB069B7005F429F /* AUScopeElement.h in Headers */,
8B42991A2DB069B7005F429F /* CAComponentDescription.h in Headers */,
8B4299502DB069B7005F429F /* AUSilentTimeout.h in Headers */,
8B4299122DB069B7005F429F /* CABufferList.h in Headers */,
8B4299442DB069B7005F429F /* AUDispatch.h in Headers */,
8B4299482DB069B7005F429F /* AUOutputElement.h in Headers */,
8B42990E2DB069B7005F429F /* CALogMacros.h in Headers */,
8B4299022DB069B7005F429F /* AUParamInfo.h in Headers */,
8B4299212DB069B7005F429F /* CAMixMap.h in Headers */,
8B42992E2DB069B7005F429F /* CACFArray.h in Headers */,
8B4298D62DB069B7005F429F /* CACFMachPort.h in Headers */,
8B4299012DB069B7005F429F /* CAAUMIDIMap.h in Headers */,
8B4298D92DB069B7005F429F /* CADebugger.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* PointyGuitar */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "PointyGuitar" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = PointyGuitar;
productInstallPath = "$(HOME)/Library/Bundles";
productName = PointyGuitar;
productReference = 8D01CCD20486CAD60068D4B7 /* PointyGuitar.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 "PointyGuitar" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
fr,
Base,
en,
ja,
de,
);
mainGroup = 089C166AFE841209C02AAC07 /* PointyGuitar */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* PointyGuitar */,
);
};
/* 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 = (
8B4299112DB069B7005F429F /* AUOutputBL.cpp in Sources */,
8B4299362DB069B7005F429F /* CAAudioFileFormats.cpp in Sources */,
8B4299282DB069B7005F429F /* CAHostTimeBase.cpp in Sources */,
8B4299002DB069B7005F429F /* CAXException.cpp in Sources */,
8B42992A2DB069B7005F429F /* CAAudioBufferList.cpp in Sources */,
8B4298ED2DB069B7005F429F /* CAFilePathUtils.cpp in Sources */,
8B4298EB2DB069B7005F429F /* CAAUParameter.cpp in Sources */,
8B42990D2DB069B7005F429F /* CAAUMIDIMap.cpp in Sources */,
8B42993A2DB069B7005F429F /* CAAudioValueRange.cpp in Sources */,
8B4299492DB069B7005F429F /* AUDispatch.cpp in Sources */,
8B4299042DB069B7005F429F /* CACFPreferences.cpp in Sources */,
8B4299472DB069B7005F429F /* AUPlugInDispatch.cpp in Sources */,
8B4298E62DB069B7005F429F /* CAAUProcessor.cpp in Sources */,
8B4298FB2DB069B7005F429F /* CACFDictionary.cpp in Sources */,
8B42994F2DB069B7005F429F /* AUBaseHelper.cpp in Sources */,
8B4299342DB069B7005F429F /* CADebugger.cpp in Sources */,
8B4299082DB069B7005F429F /* CAAudioChannelLayout.cpp in Sources */,
8B42990B2DB069B7005F429F /* AUParamInfo.cpp in Sources */,
8B4299292DB069B7005F429F /* CAPersistence.cpp in Sources */,
8B42991D2DB069B7005F429F /* CADebugPrintf.cpp in Sources */,
8B4299522DB069B7005F429F /* AUTimestampGenerator.cpp in Sources */,
8B4299252DB069B7005F429F /* CAStreamBasicDescription.cpp in Sources */,
8B4298F52DB069B7005F429F /* CAAUMIDIMapManager.cpp in Sources */,
8B4299202DB069B7005F429F /* CASettingsStorage.cpp in Sources */,
8B4299452DB069B7005F429F /* AUOutputElement.cpp in Sources */,
8B4298F12DB069B7005F429F /* CAGuard.cpp in Sources */,
8BA05A6B0720730100365D66 /* PointyGuitar.cpp in Sources */,
8B4299332DB069B7005F429F /* CAMutex.cpp in Sources */,
8B42994C2DB069B7005F429F /* AUEffectBase.cpp in Sources */,
8B4299312DB069B7005F429F /* CACFMachPort.cpp in Sources */,
8B4299402DB069B7005F429F /* AUBase.cpp in Sources */,
8B42990C2DB069B7005F429F /* CASharedLibrary.cpp in Sources */,
8B4298F32DB069B7005F429F /* CACFDistributedNotification.cpp in Sources */,
8B4298F62DB069B7005F429F /* CAComponentDescription.cpp in Sources */,
8B4298FD2DB069B7005F429F /* CACFString.cpp in Sources */,
8B42993D2DB069B7005F429F /* ComponentBase.cpp in Sources */,
8B42991E2DB069B7005F429F /* CARingBuffer.cpp in Sources */,
8B42993E2DB069B7005F429F /* AUScopeElement.cpp in Sources */,
8B42993B2DB069B7005F429F /* CAAudioUnit.cpp in Sources */,
8B4299382DB069B7005F429F /* CACFArray.cpp in Sources */,
8B4299352DB069B7005F429F /* CABundleLocker.cpp in Sources */,
8B4299272DB069B7005F429F /* CAProcess.cpp in Sources */,
8B4299152DB069B7005F429F /* CAStreamRangedDescription.cpp in Sources */,
8B4299162DB069B7005F429F /* CAPThread.cpp in Sources */,
8B4298D82DB069B7005F429F /* CAComponent.cpp in Sources */,
8B4298F02DB069B7005F429F /* CAAudioChannelLayoutObject.cpp in Sources */,
8B42992B2DB069B7005F429F /* CAAudioTimeStamp.cpp in Sources */,
8B4299322DB069B7005F429F /* CABufferList.cpp in Sources */,
8B42990F2DB069B7005F429F /* CACFMessagePort.cpp in Sources */,
8B4299192DB069B7005F429F /* CAVectorUnit.cpp in Sources */,
8B42994B2DB069B7005F429F /* AUInputElement.cpp in Sources */,
8B4299532DB069B7005F429F /* AUBuffer.cpp in Sources */,
8B4298F82DB069B7005F429F /* CADebugMacros.cpp in Sources */,
8B4298DA2DB069B7005F429F /* CACFNumber.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
8B4299572DB06A9A005F429F /* 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 = PointyGuitar.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 = PointyGuitar;
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 = PointyGuitar.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 = PointyGuitar;
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 "PointyGuitar" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "PointyGuitar" */ = {
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 = "PointyGuitar.component"
BlueprintName = "PointyGuitar"
ReferencedContainer = "container:PointyGuitar.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 = "PointyGuitar.component"
BlueprintName = "PointyGuitar"
ReferencedContainer = "container:PointyGuitar.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>PointyGuitar.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: PointyGuitarVersion.h
*
* Version: 1.0
*
* Created: 4/16/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 __PointyGuitarVersion_h__
#define __PointyGuitarVersion_h__
#ifdef DEBUG
#define kPointyGuitarVersion 0xFFFFFFFF
#else
#define kPointyGuitarVersion 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define PointyGuitar_COMP_MANF 'Dthr'
#define PointyGuitar_COMP_SUBTYPE 'pgtr'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

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,148 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* PointyGuitar */;
codeSenseManager = 8B02375F1D42B1C400E1E8C8 /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
364,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
324,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 766498266;
PBXWorkspaceStateSaveDate = 766498266;
};
perUserProjectItems = {
8B128C7E2DB0596B008D5EE2 /* PBXTextBookmark */ = 8B128C7E2DB0596B008D5EE2 /* PBXTextBookmark */;
8B128C802DB05999008D5EE2 /* PBXBookmark */ = 8B128C802DB05999008D5EE2 /* PBXBookmark */;
8B128C882DB05A34008D5EE2 /* PBXTextBookmark */ = 8B128C882DB05A34008D5EE2 /* PBXTextBookmark */;
8B128C8E2DB05A34008D5EE2 /* PBXTextBookmark */ = 8B128C8E2DB05A34008D5EE2 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
};
};
2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {966, 3816}}";
sepNavSelRange = "{751, 0}";
sepNavVisRange = "{607, 198}";
sepNavWindowFrame = "{{12, 47}, {895, 831}}";
};
};
245463B80991757100464AD3 /* PointyGuitar.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1110, 1890}}";
sepNavSelRange = "{3104, 0}";
sepNavVisRange = "{345, 1638}";
sepNavWindowFrame = "{{20, 47}, {895, 831}}";
};
};
24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {859, 20267}}";
sepNavSelRange = "{10616, 0}";
sepNavVisRange = "{9653, 2414}";
sepNavWindowFrame = "{{15, 42}, {895, 831}}";
};
};
24D8286F09A914000093AEF8 /* PointyGuitarProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1083, 7956}}";
sepNavSelRange = "{6282, 0}";
sepNavVisRange = "{5157, 1903}";
sepNavWindowFrame = "{{506, 26}, {895, 831}}";
};
};
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8B02375F1D42B1C400E1E8C8 /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8B128C7E2DB0596B008D5EE2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
name = "PointyGuitar.cpp: 32";
rLen = 0;
rLoc = 751;
rType = 0;
vrLen = 198;
vrLoc = 607;
};
8B128C802DB05999008D5EE2 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
};
8B128C882DB05A34008D5EE2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
name = "PointyGuitar.cpp: 32";
rLen = 0;
rLoc = 751;
rType = 0;
vrLen = 198;
vrLoc = 607;
};
8B128C8E2DB05A34008D5EE2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
name = "PointyGuitar.cpp: 32";
rLen = 0;
rLoc = 751;
rType = 0;
vrLen = 1689;
vrLoc = 722;
};
8D01CCC60486CAD60068D4B7 /* PointyGuitar */ = {
activeExec = 0;
};
}

View file

@ -0,0 +1,462 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
2407DEB9089929BA00EB68BF /* PointyGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */; };
245463B90991757100464AD3 /* PointyGuitar.h in Headers */ = {isa = PBXBuildFile; fileRef = 245463B80991757100464AD3 /* PointyGuitar.h */; };
24CFB70407E7A0220081BD57 /* PkgInfo in Resources */ = {isa = PBXBuildFile; fileRef = 24CFB70307E7A0220081BD57 /* PkgInfo */; };
24D8287009A914000093AEF8 /* PointyGuitarProc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24D8286F09A914000093AEF8 /* PointyGuitarProc.cpp */; };
24D8287F09A9164A0093AEF8 /* xcode_vst_prefix.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D8287E09A9164A0093AEF8 /* xcode_vst_prefix.h */; };
8B42996A2DB06B0A005F429F /* vstfxstore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42995E2DB06B0A005F429F /* vstfxstore.h */; };
8B42996B2DB06B0A005F429F /* aeffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B42995F2DB06B0A005F429F /* aeffect.h */; };
8B42996C2DB06B0A005F429F /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4299602DB06B0A005F429F /* aeffectx.h */; };
8B42996D2DB06B0A005F429F /* audioeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4299642DB06B0A005F429F /* audioeffectx.h */; };
8B42996E2DB06B0A005F429F /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4299652DB06B0A005F429F /* audioeffect.cpp */; };
8B42996F2DB06B0A005F429F /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4299662DB06B0A005F429F /* audioeffectx.cpp */; };
8B4299702DB06B0A005F429F /* aeffeditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4299672DB06B0A005F429F /* aeffeditor.h */; };
8B4299712DB06B0A005F429F /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B4299682DB06B0A005F429F /* vstplugmain.cpp */; };
8B4299722DB06B0A005F429F /* audioeffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4299692DB06B0A005F429F /* audioeffect.h */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2407DE920899296600EB68BF /* PointyGuitar.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PointyGuitar.vst; sourceTree = BUILT_PRODUCTS_DIR; };
2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = PointyGuitar.cpp; path = source/PointyGuitar.cpp; sourceTree = "<group>"; };
245463B80991757100464AD3 /* PointyGuitar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PointyGuitar.h; path = source/PointyGuitar.h; sourceTree = "<group>"; };
24CFB70307E7A0220081BD57 /* PkgInfo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PkgInfo; path = mac/PkgInfo; sourceTree = "<group>"; };
24D8286F09A914000093AEF8 /* PointyGuitarProc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PointyGuitarProc.cpp; path = source/PointyGuitarProc.cpp; sourceTree = "<group>"; };
24D8287E09A9164A0093AEF8 /* xcode_vst_prefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = xcode_vst_prefix.h; path = mac/xcode_vst_prefix.h; sourceTree = SOURCE_ROOT; };
8B42995E2DB06B0A005F429F /* vstfxstore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vstfxstore.h; sourceTree = "<group>"; };
8B42995F2DB06B0A005F429F /* aeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffect.h; sourceTree = "<group>"; };
8B4299602DB06B0A005F429F /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffectx.h; sourceTree = "<group>"; };
8B4299642DB06B0A005F429F /* audioeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioeffectx.h; sourceTree = "<group>"; };
8B4299652DB06B0A005F429F /* audioeffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audioeffect.cpp; sourceTree = "<group>"; };
8B4299662DB06B0A005F429F /* audioeffectx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audioeffectx.cpp; sourceTree = "<group>"; };
8B4299672DB06B0A005F429F /* aeffeditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffeditor.h; sourceTree = "<group>"; };
8B4299682DB06B0A005F429F /* vstplugmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vstplugmain.cpp; sourceTree = "<group>"; };
8B4299692DB06B0A005F429F /* audioeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioeffect.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mac/Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXGroup section */
089C166AFE841209C02AAC07 /* FM-Chopper */ = {
isa = PBXGroup;
children = (
19C28FB4FE9D528D11CA2CBB /* Products */,
089C167CFE841241C02AAC07 /* Resources */,
08FB77ADFE841716C02AAC07 /* Source */,
);
name = "FM-Chopper";
sourceTree = "<group>";
};
089C167CFE841241C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
24D8287E09A9164A0093AEF8 /* xcode_vst_prefix.h */,
24CFB70307E7A0220081BD57 /* PkgInfo */,
8D01CCD10486CAD60068D4B7 /* Info.plist */,
);
name = Resources;
sourceTree = "<group>";
};
08FB77ADFE841716C02AAC07 /* Source */ = {
isa = PBXGroup;
children = (
8B42995B2DB06B0A005F429F /* vstsdk2.4 */,
2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */,
24D8286F09A914000093AEF8 /* PointyGuitarProc.cpp */,
245463B80991757100464AD3 /* PointyGuitar.h */,
);
name = Source;
sourceTree = "<group>";
};
19C28FB4FE9D528D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
2407DE920899296600EB68BF /* PointyGuitar.vst */,
);
name = Products;
sourceTree = "<group>";
};
8B42995B2DB06B0A005F429F /* vstsdk2.4 */ = {
isa = PBXGroup;
children = (
8B42995C2DB06B0A005F429F /* pluginterfaces */,
8B4299612DB06B0A005F429F /* public.sdk */,
);
name = vstsdk2.4;
path = ../../../../vstsdk2.4;
sourceTree = "<group>";
};
8B42995C2DB06B0A005F429F /* pluginterfaces */ = {
isa = PBXGroup;
children = (
8B42995D2DB06B0A005F429F /* vst2.x */,
);
path = pluginterfaces;
sourceTree = "<group>";
};
8B42995D2DB06B0A005F429F /* vst2.x */ = {
isa = PBXGroup;
children = (
8B42995E2DB06B0A005F429F /* vstfxstore.h */,
8B42995F2DB06B0A005F429F /* aeffect.h */,
8B4299602DB06B0A005F429F /* aeffectx.h */,
);
path = vst2.x;
sourceTree = "<group>";
};
8B4299612DB06B0A005F429F /* public.sdk */ = {
isa = PBXGroup;
children = (
8B4299622DB06B0A005F429F /* source */,
);
path = public.sdk;
sourceTree = "<group>";
};
8B4299622DB06B0A005F429F /* source */ = {
isa = PBXGroup;
children = (
8B4299632DB06B0A005F429F /* vst2.x */,
);
path = source;
sourceTree = "<group>";
};
8B4299632DB06B0A005F429F /* vst2.x */ = {
isa = PBXGroup;
children = (
8B4299642DB06B0A005F429F /* audioeffectx.h */,
8B4299652DB06B0A005F429F /* audioeffect.cpp */,
8B4299662DB06B0A005F429F /* audioeffectx.cpp */,
8B4299672DB06B0A005F429F /* aeffeditor.h */,
8B4299682DB06B0A005F429F /* vstplugmain.cpp */,
8B4299692DB06B0A005F429F /* audioeffect.h */,
);
path = vst2.x;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8D01CCC70486CAD60068D4B7 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8B4299702DB06B0A005F429F /* aeffeditor.h in Headers */,
245463B90991757100464AD3 /* PointyGuitar.h in Headers */,
8B4299722DB06B0A005F429F /* audioeffect.h in Headers */,
8B42996B2DB06B0A005F429F /* aeffect.h in Headers */,
24D8287F09A9164A0093AEF8 /* xcode_vst_prefix.h in Headers */,
8B42996D2DB06B0A005F429F /* audioeffectx.h in Headers */,
8B42996A2DB06B0A005F429F /* vstfxstore.h in Headers */,
8B42996C2DB06B0A005F429F /* aeffectx.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* PointyGuitar */ = {
isa = PBXNativeTarget;
buildConfigurationList = 24BEAAED08919AE700E695F9 /* Build configuration list for PBXNativeTarget "PointyGuitar" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
24CFB70807E7A07C0081BD57 /* Copy PkgInfo */,
);
buildRules = (
);
dependencies = (
);
name = PointyGuitar;
productInstallPath = "$(HOME)/Library/Bundles";
productName = "FM-Chopper";
productReference = 2407DE920899296600EB68BF /* PointyGuitar.vst */;
productType = "com.apple.product-type.bundle";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
089C1669FE841209C02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1420;
};
buildConfigurationList = 24BEAAF108919AE700E695F9 /* Build configuration list for PBXProject "PointyGuitar" */;
compatibilityVersion = "Xcode 2.4";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
Base,
en,
ja,
fr,
de,
);
mainGroup = 089C166AFE841209C02AAC07 /* FM-Chopper */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* PointyGuitar */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D01CCC90486CAD60068D4B7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
24CFB70407E7A0220081BD57 /* PkgInfo in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
24CFB70807E7A07C0081BD57 /* Copy PkgInfo */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Copy PkgInfo";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/bash;
shellScript = "cp mac/PkgInfo \"$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.vst/Contents/\"";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8B42996F2DB06B0A005F429F /* audioeffectx.cpp in Sources */,
2407DEB9089929BA00EB68BF /* PointyGuitar.cpp in Sources */,
8B42996E2DB06B0A005F429F /* audioeffect.cpp in Sources */,
8B4299712DB06B0A005F429F /* vstplugmain.cpp in Sources */,
24D8287009A914000093AEF8 /* PointyGuitarProc.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
24BEAAEE08919AE700E695F9 /* 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;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 9BMAKYA76W;
FRAMEWORK_SEARCH_PATHS = "";
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_TRIGRAPHS = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = "";
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "";
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
GCC_WARN_UNKNOWN_PRAGMAS = NO;
HEADER_SEARCH_PATHS = "/Users/christopherjohnson/Desktop/vstsdk2.4/**";
INFOPLIST_FILE = ./mac/Info.plist;
INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 11.1;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
OTHER_REZFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.airwindows.PointyGuitar;
PRODUCT_NAME = PointyGuitar;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
SECTORDER_FLAGS = "";
STRIP_STYLE = debugging;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
WRAPPER_EXTENSION = vst;
};
name = Debug;
};
24BEAAEF08919AE700E695F9 /* 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;
COPY_PHASE_STRIP = YES;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=macosx*]" = 9BMAKYA76W;
FRAMEWORK_SEARCH_PATHS = "";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_ENABLE_TRIGRAPHS = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = s;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "";
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
GCC_WARN_UNKNOWN_PRAGMAS = NO;
HEADER_SEARCH_PATHS = "/Users/christopherjohnson/Desktop/vstsdk2.4/**";
INFOPLIST_FILE = ./mac/Info.plist;
INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 11.1;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
OTHER_REZFLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = com.airwindows.PointyGuitar;
PRODUCT_NAME = PointyGuitar;
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
SECTORDER_FLAGS = "";
SKIP_INSTALL = NO;
STRIP_INSTALLED_PRODUCT = YES;
STRIP_STYLE = debugging;
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
WRAPPER_EXTENSION = vst;
};
name = Release;
};
24BEAAF208919AE700E695F9 /* 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;
DEAD_CODE_STRIPPING = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_MODEL_TUNING = G5;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
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;
INFOPLIST_FILE = "";
INFOPLIST_PREPROCESS = NO;
MACOSX_DEPLOYMENT_TARGET = 11.1;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
24BEAAF308919AE700E695F9 /* 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_MODEL_TUNING = G4;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = s;
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;
INFOPLIST_FILE = "";
INFOPLIST_PREPROCESS = NO;
MACOSX_DEPLOYMENT_TARGET = 11.1;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
24BEAAED08919AE700E695F9 /* Build configuration list for PBXNativeTarget "PointyGuitar" */ = {
isa = XCConfigurationList;
buildConfigurations = (
24BEAAEE08919AE700E695F9 /* Debug */,
24BEAAEF08919AE700E695F9 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
24BEAAF108919AE700E695F9 /* Build configuration list for PBXProject "PointyGuitar" */ = {
isa = XCConfigurationList;
buildConfigurations = (
24BEAAF208919AE700E695F9 /* Debug */,
24BEAAF308919AE700E695F9 /* 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:Sample.xcodeproj">
</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>

File diff suppressed because it is too large Load diff

View file

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

View file

@ -0,0 +1,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 = "Gain.vst"
BlueprintName = "PointyGuitar"
ReferencedContainer = "container:PointyGuitar.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 = "Gain.vst"
BlueprintName = "PointyGuitar"
ReferencedContainer = "container:PointyGuitar.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>PointyGuitar.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>1</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>8D01CCC60486CAD60068D4B7</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,216 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new PointyGuitar(audioMaster);}
PointyGuitar::PointyGuitar(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.6;
B = 0.5;
C = 0.8;
D = 0.6;
E = 0.4;
F = 0.5;
G = 0.7;
H = 0.4;
I = 0.0;
J = 0.7;
for(int x=0; x<17; x++) {
for(int y=0; y<11; y++) {
angSL[x][y] = 0.0;angAL[x][y] = 0.0;
angSR[x][y] = 0.0;angAR[x][y] = 0.0;
}
}
for(int y=0; y<11; y++) angG[y] = 0.0;
for(int count = 0; count < 36; count++) {
iirHPositionL[count] = 0.0;
iirHAngleL[count] = 0.0;
iirBPositionL[count] = 0.0;
iirBAngleL[count] = 0.0;
iirHPositionR[count] = 0.0;
iirHAngleR[count] = 0.0;
iirBPositionR[count] = 0.0;
iirBAngleR[count] = 0.0;
}
WasNegativeL = false;
ZeroCrossL = 0;
gaterollerL = 0.0;
WasNegativeR = false;
ZeroCrossR = 0;
gaterollerR = 0.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
}
PointyGuitar::~PointyGuitar() {}
VstInt32 PointyGuitar::getVendorVersion () {return 1000;}
void PointyGuitar::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void PointyGuitar::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 PointyGuitar::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;
chunkData[5] = F;
chunkData[6] = G;
chunkData[7] = H;
chunkData[8] = I;
chunkData[9] = J;
/* 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 PointyGuitar::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]);
F = pinParameter(chunkData[5]);
G = pinParameter(chunkData[6]);
H = pinParameter(chunkData[7]);
I = pinParameter(chunkData[8]);
J = pinParameter(chunkData[9]);
/* 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 PointyGuitar::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;
case kParamF: F = value; break;
case kParamG: G = value; break;
case kParamH: H = value; break;
case kParamI: I = value; break;
case kParamJ: J = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float PointyGuitar::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;
case kParamF: return F; break;
case kParamG: return G; break;
case kParamH: return H; break;
case kParamI: return I; break;
case kParamJ: return J; 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 PointyGuitar::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Drive", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Presnce", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "High", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Mid", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Low", kVstMaxParamStrLen); break;
case kParamF: vst_strncpy (text, "Sub", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "HSpeakr", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "LSpeakr", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "Gate", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "Output", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void PointyGuitar::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;
case kParamF: float2string (F, text, kVstMaxParamStrLen); break;
case kParamG: float2string (G, text, kVstMaxParamStrLen); break;
case kParamH: float2string (H, text, kVstMaxParamStrLen); break;
case kParamI: float2string (I, text, kVstMaxParamStrLen); break;
case kParamJ: float2string (J, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void PointyGuitar::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;
case kParamF: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 PointyGuitar::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool PointyGuitar::getEffectName(char* name) {
vst_strncpy(name, "PointyGuitar", kVstMaxProductStrLen); return true;
}
VstPlugCategory PointyGuitar::getPlugCategory() {return kPlugCategEffect;}
bool PointyGuitar::getProductString(char* text) {
vst_strncpy (text, "airwindows PointyGuitar", kVstMaxProductStrLen); return true;
}
bool PointyGuitar::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,104 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#define __PointyGuitar_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,
kParamF =5,
kParamG =6,
kParamH =7,
kParamI =8,
kParamJ =9,
kNumParameters = 10
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'pgtr'; //Change this to what the AU identity is!
class PointyGuitar :
public AudioEffectX
{
public:
PointyGuitar(audioMasterCallback audioMaster);
~PointyGuitar();
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;
float F;
float G;
float H;
float I;
float J;
double angSL[18][12];
double angAL[18][12];
double iirHPositionL[37];
double iirHAngleL[37];
double iirBPositionL[37];
double iirBAngleL[37];
bool WasNegativeL;
int ZeroCrossL;
double gaterollerL;
double gateL;
double angSR[18][12];
double angAR[18][12];
double iirHPositionR[37];
double iirHAngleR[37];
double iirBPositionR[37];
double iirBAngleR[37];
bool WasNegativeR;
int ZeroCrossR;
double gaterollerR;
double gateR;
double angG[12];
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,410 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
void PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//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 PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//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,148 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* PointyGuitar */;
codeSenseManager = 8B02375F1D42B1C400E1E8C8 /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
364,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
324,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 766498266;
PBXWorkspaceStateSaveDate = 766498266;
};
perUserProjectItems = {
8B128C7E2DB0596B008D5EE2 /* PBXTextBookmark */ = 8B128C7E2DB0596B008D5EE2 /* PBXTextBookmark */;
8B128C802DB05999008D5EE2 /* PBXBookmark */ = 8B128C802DB05999008D5EE2 /* PBXBookmark */;
8B128C882DB05A34008D5EE2 /* PBXTextBookmark */ = 8B128C882DB05A34008D5EE2 /* PBXTextBookmark */;
8B128C8E2DB05A34008D5EE2 /* PBXTextBookmark */ = 8B128C8E2DB05A34008D5EE2 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
};
};
2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {966, 3816}}";
sepNavSelRange = "{751, 0}";
sepNavVisRange = "{607, 198}";
sepNavWindowFrame = "{{12, 47}, {895, 831}}";
};
};
245463B80991757100464AD3 /* PointyGuitar.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1110, 1890}}";
sepNavSelRange = "{3104, 0}";
sepNavVisRange = "{345, 1638}";
sepNavWindowFrame = "{{20, 47}, {895, 831}}";
};
};
24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {859, 20267}}";
sepNavSelRange = "{10616, 0}";
sepNavVisRange = "{9653, 2414}";
sepNavWindowFrame = "{{15, 42}, {895, 831}}";
};
};
24D8286F09A914000093AEF8 /* PointyGuitarProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1083, 7956}}";
sepNavSelRange = "{6282, 0}";
sepNavVisRange = "{5157, 1903}";
sepNavWindowFrame = "{{506, 26}, {895, 831}}";
};
};
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8B02375F1D42B1C400E1E8C8 /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8B128C7E2DB0596B008D5EE2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
name = "PointyGuitar.cpp: 32";
rLen = 0;
rLoc = 751;
rType = 0;
vrLen = 198;
vrLoc = 607;
};
8B128C802DB05999008D5EE2 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
};
8B128C882DB05A34008D5EE2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
name = "PointyGuitar.cpp: 32";
rLen = 0;
rLoc = 751;
rType = 0;
vrLen = 198;
vrLoc = 607;
};
8B128C8E2DB05A34008D5EE2 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* PointyGuitar.cpp */;
name = "PointyGuitar.cpp: 32";
rLen = 0;
rLoc = 751;
rType = 0;
vrLen = 1689;
vrLoc = 722;
};
8D01CCC60486CAD60068D4B7 /* PointyGuitar */ = {
activeExec = 0;
};
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,216 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new PointyGuitar(audioMaster);}
PointyGuitar::PointyGuitar(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.6;
B = 0.5;
C = 0.8;
D = 0.6;
E = 0.4;
F = 0.5;
G = 0.7;
H = 0.4;
I = 0.0;
J = 0.7;
for(int x=0; x<17; x++) {
for(int y=0; y<11; y++) {
angSL[x][y] = 0.0;angAL[x][y] = 0.0;
angSR[x][y] = 0.0;angAR[x][y] = 0.0;
}
}
for(int y=0; y<11; y++) angG[y] = 0.0;
for(int count = 0; count < 36; count++) {
iirHPositionL[count] = 0.0;
iirHAngleL[count] = 0.0;
iirBPositionL[count] = 0.0;
iirBAngleL[count] = 0.0;
iirHPositionR[count] = 0.0;
iirHAngleR[count] = 0.0;
iirBPositionR[count] = 0.0;
iirBAngleR[count] = 0.0;
}
WasNegativeL = false;
ZeroCrossL = 0;
gaterollerL = 0.0;
WasNegativeR = false;
ZeroCrossR = 0;
gaterollerR = 0.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
}
PointyGuitar::~PointyGuitar() {}
VstInt32 PointyGuitar::getVendorVersion () {return 1000;}
void PointyGuitar::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void PointyGuitar::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 PointyGuitar::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;
chunkData[5] = F;
chunkData[6] = G;
chunkData[7] = H;
chunkData[8] = I;
chunkData[9] = J;
/* 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 PointyGuitar::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]);
F = pinParameter(chunkData[5]);
G = pinParameter(chunkData[6]);
H = pinParameter(chunkData[7]);
I = pinParameter(chunkData[8]);
J = pinParameter(chunkData[9]);
/* 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 PointyGuitar::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;
case kParamF: F = value; break;
case kParamG: G = value; break;
case kParamH: H = value; break;
case kParamI: I = value; break;
case kParamJ: J = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float PointyGuitar::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;
case kParamF: return F; break;
case kParamG: return G; break;
case kParamH: return H; break;
case kParamI: return I; break;
case kParamJ: return J; 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 PointyGuitar::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Drive", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Presnce", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "High", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Mid", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Low", kVstMaxParamStrLen); break;
case kParamF: vst_strncpy (text, "Sub", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "HSpeakr", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "LSpeakr", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "Gate", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "Output", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void PointyGuitar::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;
case kParamF: float2string (F, text, kVstMaxParamStrLen); break;
case kParamG: float2string (G, text, kVstMaxParamStrLen); break;
case kParamH: float2string (H, text, kVstMaxParamStrLen); break;
case kParamI: float2string (I, text, kVstMaxParamStrLen); break;
case kParamJ: float2string (J, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void PointyGuitar::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;
case kParamF: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 PointyGuitar::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool PointyGuitar::getEffectName(char* name) {
vst_strncpy(name, "PointyGuitar", kVstMaxProductStrLen); return true;
}
VstPlugCategory PointyGuitar::getPlugCategory() {return kPlugCategEffect;}
bool PointyGuitar::getProductString(char* text) {
vst_strncpy (text, "airwindows PointyGuitar", kVstMaxProductStrLen); return true;
}
bool PointyGuitar::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,104 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#define __PointyGuitar_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,
kParamF =5,
kParamG =6,
kParamH =7,
kParamI =8,
kParamJ =9,
kNumParameters = 10
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'pgtr'; //Change this to what the AU identity is!
class PointyGuitar :
public AudioEffectX
{
public:
PointyGuitar(audioMasterCallback audioMaster);
~PointyGuitar();
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;
float F;
float G;
float H;
float I;
float J;
double angSL[18][12];
double angAL[18][12];
double iirHPositionL[37];
double iirHAngleL[37];
double iirBPositionL[37];
double iirBAngleL[37];
bool WasNegativeL;
int ZeroCrossL;
double gaterollerL;
double gateL;
double angSR[18][12];
double angAR[18][12];
double iirHPositionR[37];
double iirHAngleR[37];
double iirBPositionR[37];
double iirBAngleR[37];
bool WasNegativeR;
int ZeroCrossR;
double gaterollerR;
double gateR;
double angG[12];
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,410 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
void PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//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 PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//begin 64 bit stereo floating point dither
//int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
//inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
//inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
in1++;
in2++;
out1++;
out2++;
}
}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,216 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new PointyGuitar(audioMaster);}
PointyGuitar::PointyGuitar(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.6;
B = 0.5;
C = 0.8;
D = 0.6;
E = 0.4;
F = 0.5;
G = 0.7;
H = 0.4;
I = 0.0;
J = 0.7;
for(int x=0; x<17; x++) {
for(int y=0; y<11; y++) {
angSL[x][y] = 0.0;angAL[x][y] = 0.0;
angSR[x][y] = 0.0;angAR[x][y] = 0.0;
}
}
for(int y=0; y<11; y++) angG[y] = 0.0;
for(int count = 0; count < 36; count++) {
iirHPositionL[count] = 0.0;
iirHAngleL[count] = 0.0;
iirBPositionL[count] = 0.0;
iirBAngleL[count] = 0.0;
iirHPositionR[count] = 0.0;
iirHAngleR[count] = 0.0;
iirBPositionR[count] = 0.0;
iirBAngleR[count] = 0.0;
}
WasNegativeL = false;
ZeroCrossL = 0;
gaterollerL = 0.0;
WasNegativeR = false;
ZeroCrossR = 0;
gaterollerR = 0.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
}
PointyGuitar::~PointyGuitar() {}
VstInt32 PointyGuitar::getVendorVersion () {return 1000;}
void PointyGuitar::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void PointyGuitar::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 PointyGuitar::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;
chunkData[5] = F;
chunkData[6] = G;
chunkData[7] = H;
chunkData[8] = I;
chunkData[9] = J;
/* 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 PointyGuitar::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]);
F = pinParameter(chunkData[5]);
G = pinParameter(chunkData[6]);
H = pinParameter(chunkData[7]);
I = pinParameter(chunkData[8]);
J = pinParameter(chunkData[9]);
/* 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 PointyGuitar::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;
case kParamF: F = value; break;
case kParamG: G = value; break;
case kParamH: H = value; break;
case kParamI: I = value; break;
case kParamJ: J = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float PointyGuitar::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;
case kParamF: return F; break;
case kParamG: return G; break;
case kParamH: return H; break;
case kParamI: return I; break;
case kParamJ: return J; 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 PointyGuitar::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Drive", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Presnce", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "High", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Mid", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Low", kVstMaxParamStrLen); break;
case kParamF: vst_strncpy (text, "Sub", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "HSpeakr", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "LSpeakr", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "Gate", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "Output", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void PointyGuitar::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;
case kParamF: float2string (F, text, kVstMaxParamStrLen); break;
case kParamG: float2string (G, text, kVstMaxParamStrLen); break;
case kParamH: float2string (H, text, kVstMaxParamStrLen); break;
case kParamI: float2string (I, text, kVstMaxParamStrLen); break;
case kParamJ: float2string (J, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void PointyGuitar::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;
case kParamF: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamG: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamH: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamI: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamJ: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 PointyGuitar::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool PointyGuitar::getEffectName(char* name) {
vst_strncpy(name, "PointyGuitar", kVstMaxProductStrLen); return true;
}
VstPlugCategory PointyGuitar::getPlugCategory() {return kPlugCategEffect;}
bool PointyGuitar::getProductString(char* text) {
vst_strncpy (text, "airwindows PointyGuitar", kVstMaxProductStrLen); return true;
}
bool PointyGuitar::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,104 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#define __PointyGuitar_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,
kParamF =5,
kParamG =6,
kParamH =7,
kParamI =8,
kParamJ =9,
kNumParameters = 10
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'pgtr'; //Change this to what the AU identity is!
class PointyGuitar :
public AudioEffectX
{
public:
PointyGuitar(audioMasterCallback audioMaster);
~PointyGuitar();
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;
float F;
float G;
float H;
float I;
float J;
double angSL[18][12];
double angAL[18][12];
double iirHPositionL[37];
double iirHAngleL[37];
double iirBPositionL[37];
double iirBAngleL[37];
bool WasNegativeL;
int ZeroCrossL;
double gaterollerL;
double gateL;
double angSR[18][12];
double angAR[18][12];
double iirHPositionR[37];
double iirHAngleR[37];
double iirBPositionR[37];
double iirBAngleR[37];
bool WasNegativeR;
int ZeroCrossR;
double gaterollerR;
double gateR;
double angG[12];
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,410 @@
/* ========================================
* PointyGuitar - PointyGuitar.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __PointyGuitar_H
#include "PointyGuitar.h"
#endif
void PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//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 PointyGuitar::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 drive = A+0.618033988749894;
angG[0] = sqrt(B*2.0);
angG[2] = sqrt(C*2.0);
angG[4] = sqrt(D*2.0);
angG[6] = sqrt(E*2.0);
angG[8] = sqrt(F*2.0);
angG[1] = (angG[0]+angG[2])*0.5;
angG[3] = (angG[2]+angG[4])*0.5;
angG[5] = (angG[4]+angG[6])*0.5;
angG[7] = (angG[6]+angG[8])*0.5;
angG[9] = angG[8];
int poles = (int)(drive*10.0);
double hFreq = pow(G,overallscale);
double lFreq = pow(H,overallscale+3.0);
//begin Gate
double onthreshold = (pow(I,3)/3)+0.00018;
double offthreshold = onthreshold * 1.1;
double release = 0.028331119964586;
double absmax = 220.9;
//end Gate
double output = J;
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;
//begin Gate
if (inputSampleL > 0.0)
{
if (WasNegativeL == true) ZeroCrossL = absmax * 0.3;
WasNegativeL = false;
} else {
ZeroCrossL += 1; WasNegativeL = true;
}
if (ZeroCrossL > absmax) ZeroCrossL = absmax;
if (gateL == 0.0)
{
//if gateL is totally silent
if (fabs(inputSampleL) > onthreshold)
{
if (gaterollerL == 0.0) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerL -= release;
} else {
//gateL is not silent but closing
if (fabs(inputSampleL) > offthreshold)
{
if (gaterollerL < ZeroCrossL) gaterollerL = ZeroCrossL;
else gaterollerL -= release;
//always trigger if gateL is over offthreshold, otherwise close anyway
}
else gaterollerL -= release;
}
if (gaterollerL < 0.0) gaterollerL = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleL; inputSampleL = 0.0;
for (int y = 0; y < 9; y++) {
angAL[x][y] = (angAL[x][y]*(1.0-fr)) + ((band-angSL[x][y])*fr);
double temp = band; band = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
angSL[x][y] = ((angSL[x][y]+(angAL[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleL += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleL += (band*angG[9]);
inputSampleL *= drive;
inputSampleL -= fmin(fmax((inputSampleL*(fabs(inputSampleL)*0.654)*(fabs(inputSampleL)*0.654)),-1.0),1.0);
}
if (gaterollerL < 1.0)
{
gateL = gaterollerL;
double bridgerectifier = 1-cos(fabs(inputSampleL));
if (inputSampleL > 0) inputSampleL = (inputSampleL*gateL)+(bridgerectifier*(1.0-gateL));
else inputSampleL = (inputSampleL*gateL)-(bridgerectifier*(1.0-gateL));
if (gateL == 0.0) inputSampleL = 0.0;
} else gateL = 1.0;
//end Gate
double lowSample = inputSampleL;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleL[count] = (iirBAngleL[count]*(1.0-lFreq))+((lowSample-iirBPositionL[count])*lFreq);
lowSample = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionL[count] = ((iirBPositionL[count]+(iirBAngleL[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleL -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleL[count] = (iirHAngleL[count]*(1.0-hFreq))+((inputSampleL-iirHPositionL[count])*hFreq);
inputSampleL = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
iirHPositionL[count] = ((iirHPositionL[count]+(iirHAngleL[count]*hFreq))*(1.0-hFreq))+(inputSampleL*hFreq);
} //the lowpass
inputSampleL *= output;
//begin Gate
if (inputSampleR > 0.0)
{
if (WasNegativeR == true) ZeroCrossR = absmax * 0.3;
WasNegativeR = false;
} else {
ZeroCrossR += 1; WasNegativeR = true;
}
if (ZeroCrossR > absmax) ZeroCrossR = absmax;
if (gateR == 0.0)
{
//if gateR is totally silent
if (fabs(inputSampleR) > onthreshold)
{
if (gaterollerR == 0.0) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
// trigger from total silence only- if we're active then signal must clear offthreshold
}
else gaterollerR -= release;
} else {
//gateR is not silent but closing
if (fabs(inputSampleR) > offthreshold)
{
if (gaterollerR < ZeroCrossR) gaterollerR = ZeroCrossR;
else gaterollerR -= release;
//always trigger if gateR is over offthreshold, otherwise close anyway
}
else gaterollerR -= release;
}
if (gaterollerR < 0.0) gaterollerR = 0.0;
for (int x = 0; x < poles; x++) {
double fr = 0.9/overallscale;
double band = inputSampleR; inputSampleR = 0.0;
for (int y = 0; y < 9; y++) {
angAR[x][y] = (angAR[x][y]*(1.0-fr)) + ((band-angSR[x][y])*fr);
double temp = band; band = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
angSR[x][y] = ((angSR[x][y]+(angAR[x][y]*fr)) * (1.0-fr))+(band*fr);
inputSampleR += ((temp-band)*angG[y]);
fr *= 0.618033988749894;
}
inputSampleR += (band*angG[9]);
inputSampleR *= drive;
inputSampleR -= fmin(fmax((inputSampleR*(fabs(inputSampleR)*0.654)*(fabs(inputSampleR)*0.654)),-1.0),1.0);
}
if (gaterollerR < 1.0)
{
gateR = gaterollerR;
double bridgerectifier = 1-cos(fabs(inputSampleR));
if (inputSampleR > 0) inputSampleR = (inputSampleR*gateR)+(bridgerectifier*(1.0-gateR));
else inputSampleR = (inputSampleR*gateR)-(bridgerectifier*(1.0-gateR));
if (gateR == 0.0) inputSampleR = 0.0;
} else gateR = 1.0;
//end Gate
lowSample = inputSampleR;
for(int count = 0; count < (3.0+(lFreq*32.0)); count++) {
iirBAngleR[count] = (iirBAngleR[count]*(1.0-lFreq))+((lowSample-iirBPositionR[count])*lFreq);
lowSample = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
iirBPositionR[count] = ((iirBPositionR[count]+(iirBAngleR[count]*lFreq))*(1.0-lFreq))+(lowSample*lFreq);
inputSampleR -= (lowSample * (1.0/(3.0+(lFreq*32.0))) );
}
for(int count = 0; count < (3.0+(hFreq*32.0)); count++) {
iirHAngleR[count] = (iirHAngleR[count]*(1.0-hFreq))+((inputSampleR-iirHPositionR[count])*hFreq);
inputSampleR = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
iirHPositionR[count] = ((iirHPositionR[count]+(iirHAngleR[count]*hFreq))*(1.0-hFreq))+(inputSampleR*hFreq);
} //the lowpass
inputSampleR *= output;
//begin 64 bit stereo floating point dither
//int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
//inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
//inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
in1++;
in2++;
out1++;
out2++;
}
}

View file

@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VSTProject", "VSTProject.vcxproj", "{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x64.ActiveCfg = Debug|x64
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x64.Build.0 = Debug|x64
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x86.ActiveCfg = Debug|Win32
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Debug|x86.Build.0 = Debug|Win32
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x64.ActiveCfg = Release|x64
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x64.Build.0 = Release|x64
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x86.ActiveCfg = Release|Win32
{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.cpp" />
<ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.cpp" />
<ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\vstplugmain.cpp" />
<ClCompile Include="PointyGuitar.cpp" />
<ClCompile Include="PointyGuitarProc.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\aeffeditor.h" />
<ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.h" />
<ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.h" />
<ClInclude Include="PointyGuitar.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{16F7AB3C-1AE0-4574-B60C-7B4DED82938C}</ProjectGuid>
<RootNamespace>VSTProject</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<ProjectName>PointyGuitar64</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<ExecutablePath>$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH)</ExecutablePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<ExecutablePath>$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH)</ExecutablePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<FunctionLevelLinking>false</FunctionLevelLinking>
<DebugInformationFormat>None</DebugInformationFormat>
</ClCompile>
<Link>
<ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
<IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<FunctionLevelLinking>false</FunctionLevelLinking>
<DebugInformationFormat>None</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>false</FunctionLevelLinking>
<IntrinsicFunctions>false</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;libc.lib;libcd.lib;libcmt.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<AdditionalDependencies>libcmt.lib;uuid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>false</FunctionLevelLinking>
<IntrinsicFunctions>false</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>C:\Users\christopherjohnson\Documents\Visual Studio 2015\Projects\VSTProject\vst2.x;C:\Users\christopherjohnson\Documents\vstsdk2.4;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<PreprocessorDefinitions>WINDOWS;_WINDOWS;WIN32;_USRDLL;_USE_MATH_DEFINES;_CRT_SECURE_NO_DEPRECATE;VST_FORCE_DEPRECATED;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<IgnoreSpecificDefaultLibraries>libcmt.dll;libcmtd.dll;msvcrt.lib;libc.lib;libcd.lib;libcmt.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<AdditionalDependencies>libcmt.lib;uuid.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ModuleDefinitionFile>vstplug.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\vstplugmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PointyGuitar.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PointyGuitarProc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\aeffeditor.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\vstsdk2.4\public.sdk\source\vst2.x\audioeffectx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="PointyGuitar.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerAmpDefaultAccelerator>{ADEFF70D-84BF-47A1-91C3-FF6B0FC71218}</LocalDebuggerAmpDefaultAccelerator>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

View file

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

View file

@ -296,6 +296,7 @@ Pockey2 is more efficient, more intense lo-fi hiphop in a plugin.[coll=Recommend
Podcast is a simpler pile of curve-style compressors with hard clipping.[coll=Latest]
PodcastDeluxe is a pile of compressors (curve style) and phase rotators.[coll=Latest]
Point is an explosive transient designer.[coll=Latest]
PointyGuitar is a supremely adaptable instrument amp.[coll=Basic,Recommended,Latest]
Pop is a crazy overcompressor with a very exaggerated sound.[coll=]
Pop2 adds control and punch to Pop.[coll=Recommended]
Pop3 is the dynamics from ConsoleX.[coll=Recommended,Latest]