TapeHack2

This commit is contained in:
Christopher Johnson 2026-01-18 15:53:19 -05:00
parent 53a648baed
commit fe67011732
255 changed files with 44284 additions and 991 deletions

View file

@ -43,7 +43,7 @@ Stereo: Srsly3, Srsly2, Srsly, SweetWide, Wider, StereoFX, ToVinyl4, AutoPan, LR
Subtlety: Mastering2, Discontapeity, Mastering, Discontinuity, Hype, Shape, Inflamer, Sweeten, PurestWarm2, PurestWarm, Coils2, Interstage, PhaseNudge, Remap, SingleEndedTriode, Coils, Desk, TransDesk, TubeDesk
Tape: TapeHack, ToTape8, ToTape7, ToTape6, FromTape, Tape, IronOxideClassic2, IronOxide5, ToTape5, IronOxideClassic
Tape: TapeHack2, TapeHack, ToTape8, ToTape7, ToTape6, FromTape, Tape, IronOxideClassic2, IronOxide5, ToTape5, IronOxideClassic
Tone Color: BussColors4, Channel9, Apicolypse, Neverland, Elation, Calibre, Cider, Crystal, Precious, Luxor, Channel8, Channel7, Channel6, Channel5, Channel4
@ -5408,7 +5408,7 @@ You may well find this horrible, lame and useless. That is OK, it's not going to
But if you like the sort of weird grunge this produces, we're talking signature sound, secret weapon town, bigtime… and NOBODY else will be bringing it, and no AI will arrive at this unless literally told to copy it (in which case they should credit and say it's SweetWide they're using).
This plugin comes not from the world of Srsly or EdIsDim or Wider (plenty of other things I've made to do stereo widening nicely). It comes from my experiments with ring modulation. It's really a very simple algorithm though it does use square root functions: that's next to nothing, as far as CPU is concerned. It's doing terrible things to the stereo signal coming in, for the purpose of exaggerating side-channel informaqtion, but in a way where it's tending to produce asymmetric modulations. That's more along the lines of 'second harmonic, fourth harmonic etc' rather than 'third harmonic and normal distortion', and that's why Sweet is part of the name: we tend to hear even harmonics as more 'sweet' than odd harmonics.
This plugin comes not from the world of Srsly or EdIsDim or Wider (plenty of other things I've made to do stereo widening nicely). It comes from my experiments with ring modulation. It's really a very simple algorithm though it does use square root functions: that's next to nothing, as far as CPU is concerned. It's doing terrible things to the stereo signal coming in, for the purpose of exaggerating side-channel information, but in a way where it's tending to produce asymmetric modulations. That's more along the lines of 'second harmonic, fourth harmonic etc' rather than 'third harmonic and normal distortion', and that's why Sweet is part of the name: we tend to hear even harmonics as more 'sweet' than odd harmonics.
Even then it's not acting normal because it's using that Soar control to govern how the square-root reacts to subtle sounds. It serves the purpose of bringing up a gnarly compressey grunginess, except for stereo widening. If you crank it out all the way it's very obvious, but you can dial the Soar setting in that way, and then pull it back if you'd like it to still be unique but not so obnoxious.
@ -5568,7 +5568,6 @@ The reason this is interesting is, that tone control is completely bizarre. It
You can hear it on the video, which has a number of things updated, not least this: the new audio is directly captured analog sorta-house music out of my livestreams. This way you ought to be able to really hear the way my plugins retain analog qualities, because now the demo music is essentially AAD: not products of other DAW mixes or digital synthesis, but source material.
############ TapeHack is a new dimension in tape realism, abstracted to software.
It started with a paper by Spencer Walters, on this subject: what's the role of hysteresis in magnetic tape recording? We tend to assume that's fine, we're making it linear, apart from all the soft saturation of course. Even then, that's not quite where it starts: it's research on Dolby HX-Pro that got Spencer thinking. I'm not sure the Dolby people quite understood the implications of what they had, as that was an era of 'remove all distortions'.
@ -5593,6 +5592,38 @@ There will be more about this: and yeah, Spencer's aware of what I'm doing and c
I'll be saving up for the hardware Spencer makes, and I'll be using what I learned in TapeHack for many things. Hope you like it!
############ TapeHack2 brings Airwindows tape to a new level.
Two wrongs may not make a right… but sometimes, two goofy hacks might make a better 'tape compression' than having a real tape machine.
So hear me out, because this one went some strange places, and, well, listen to it ;)
The original TapeHack was a pretty big deal, went over real well, in spite of the fact that there was nothing to it but a software 'transfer function'. It's literally nothing but a 'vaguely sinelike softclip' with special characteristics. Everything about it was made to shift the 'saturation' upwards in dB and lean out the middle part a bit, in accordance to how real tape turns out to work. I'm of course not alone in figuring this stuff out, I'm just the one trying to doctor softclip algorithms to do it. That part worked great, and because it's a softclip, it even sounds a lot like 'tape compression', certainly more than anything I'd had before.
There's tests you can do to determine whether your tape biasing and the amount of your ultrasonic energy is high enough to saturate things to produce real-deal, genuine 'tape compression' of highs. And it really is true that you don't have to use literal tape machines to do that anymore. I would go so far to say that is the new bar to reach: nobody's going to duplicate that short of simulating the whole apparatus at a megahertz or something, and this I am not going to do: I already didn't like oversampling, and it seems wasteful.
But what if, on top of faking the 'bias tone bridging the gap between magnetic coercivity' through just doctoring a softclip to do it (wrong, but it worked), I instead just came up with a new sort of filter that was very free of typical sharp-filter irregularities… and modulated that at audio rates, in an attempt to not let the signal do high frequencies beyond too much of a slew rate?
Meet TapeHack2. If you've downloaded ConsoleH or ConsoleX2 in the last day or two, you have already met it, because it worked so well I had to include it in the 'More' fat-boost section of those plugins. My video for TapeHack2 demonstrates why, showing the original mix, the subtly but intensely better mix where nothing has been changed but swapping in the TapeHack2 algorithm for the original, and lastly the delta function showing HOW much aliasing and untapelike brightness was fluidly removed from just the parts of the mix hitting More hard. It was so strong it affected the buss compression enough to bring in totally unrelated elements like bass, just by altering how More handled supersonic highs in the 96k mix.
Functionally, this is the 'tape compression of highs' effect. Is it a clone, or emulation? AW HELL no, not even slightly. It's totally different, measurably, observably different, not like a tape at all, but now it does two tape behaviors as hard as it can. Run sine sweeps into it if you want to see how different it is, how crazy it'll act. It's a HACK, doesn't have anything to do with analog anything really.
So what is happening?
It's running a stack of filters. They're very efficient: they're stacked-up averaging filters. These are very good in the time domain, don't do pre-rings or weird filter ripples, but the cost is if you just use a simple averaging of a bunch of samples in a row, you get massive notches and odd peaks in the response. They are awful at being accurate good filters.
But, turns out if you stack them up right you can have the notch of one overlap the peak of another, and get a really steep roll-off with good time behavior where the rolloff is so steep you hardly mind the funny added peaks and response issues. It basically goes 'ok, very smooth natural super rolloff NOW' and then rather than needing to work over an enormous window, and have a huge filter ripple (for linear phase) it just does the thing and gets out of the way. You trade off the accuracy of the 'curve' for just 'make the highs be gone, completely!'. I've got a filter plugin coming, Slew4, that's an expanded version of this.
That's not 'tape compression', though. Tape compression is when you let the raw signal through, but track how sharp a departure the new sound is from whatever the filtering was doing last sample. Instead of just tracking the slew of the input signal and working with that, you barely touch the sound unless the new sample is gonna be really far from where the last output was, even if that's the result of filtering… and that is why it acts like compressing, there's a point beyond which highs can't get louder and you can't force them. It's not even on a time constant, it's just 'nope'.
And is this the point at which the filtering prevents aliasing from happening? NOPE. It absolutely still aliases, and I'll tell you why. In setting it up, I got this part working and then tried to find the point at which I prevented all aliasing. It didn't want to. It's not an oversampling: it's still raw, still running fully at whatever sample rate you're using, still producing 'semi-valid' information including above where the apparent tape compression kicks in.
It's just that the way this thing works, when set up to sound its best, it's not reducing superhigh sine waves to silence above a certain frequency. It's changing them into quieter triangle waves instead. Along the way, if you're doing intense saturation and making the wave flat-top, it turns it into sort of trapezoids in the manner that big square waves on analog gear turn into slanted-topped, altered waves. So basically what I'm saying is it does the weirdest waveshaping I've ever seen, with all the very highest frequency stuff, in such a way that it's arguably sharpening the frequencies while also attenuating and suppressing them. And it's all off a filter (set of filters) that is very free of ripple and resonant qualities.
This, applied to real music, sounds pretty amazing, and it's going to find its way into a new ToTape, as well as my trusty TapeDelay plugin, and it is already in ConsoleH and ConsoleX2. And honest, it's the farthest thing from emulating anything, much less real tape. But my interest is never in trying to duplicate a thing: digital is not good at that, something dies when you overprocess. Instead, TapeHack2 is about bringing very minimalist, very unusual sorts of processing to achieve a result, which in this case is 'softclip like a tape, but ALSO stop highs from getting louder, also like a tape, except you're not remotely a tape'.
Have fun with this one, I know I'm going to be enjoying the results of it a whole lot :)
############ Texturize is a hidden-noise plugin for adding sonic texture to things.
It all started with snake oil… or should I say secret snake oil?

View file

@ -403,6 +403,7 @@ add_airwindows_plugin(SmoothEQ2)
add_airwindows_plugin(SmoothEQ3)
add_airwindows_plugin(SoftClock)
add_airwindows_plugin(SoftClock2)
add_airwindows_plugin(SoftClock3)
add_airwindows_plugin(SoftGate)
add_airwindows_plugin(SpatializeDither)
add_airwindows_plugin(Spiral)
@ -436,6 +437,7 @@ add_airwindows_plugin(TapeDither)
add_airwindows_plugin(TapeDust)
add_airwindows_plugin(TapeFat)
add_airwindows_plugin(TapeHack)
add_airwindows_plugin(TapeHack2)
add_airwindows_plugin(Texturize)
add_airwindows_plugin(TexturizeMS)
add_airwindows_plugin(Thunder)

View file

@ -93,14 +93,13 @@ ConsoleHChannel::ConsoleHChannel(audioMasterCallback audioMaster) :
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;

View file

@ -192,12 +192,20 @@ private:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double panA;
double panB;

View file

@ -206,15 +206,16 @@ void ConsoleHChannel::processReplacing(float **inputs, float **outputs, VstInt32
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -266,6 +267,38 @@ void ConsoleHChannel::processReplacing(float **inputs, float **outputs, VstInt32
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;
@ -818,15 +851,16 @@ void ConsoleHChannel::processDoubleReplacing(double **inputs, double **outputs,
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -878,6 +912,38 @@ void ConsoleHChannel::processDoubleReplacing(double **inputs, double **outputs,
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;

View file

@ -93,14 +93,13 @@ AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;

View file

@ -197,12 +197,20 @@ private:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double inTrimA;
double inTrimB;

View file

@ -205,15 +205,16 @@ void ConsoleHPre::processReplacing(float **inputs, float **outputs, VstInt32 sam
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -265,6 +266,38 @@ void ConsoleHPre::processReplacing(float **inputs, float **outputs, VstInt32 sam
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;
@ -816,15 +849,16 @@ void ConsoleHPre::processDoubleReplacing(double **inputs, double **outputs, VstI
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -876,6 +910,38 @@ void ConsoleHPre::processDoubleReplacing(double **inputs, double **outputs, VstI
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;

View file

@ -82,14 +82,13 @@ ConsoleX2Channel::ConsoleX2Channel(audioMasterCallback audioMaster) :
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;

View file

@ -170,12 +170,20 @@ private:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double panA;
double panB;

View file

@ -215,15 +215,16 @@ void ConsoleX2Channel::processReplacing(float **inputs, float **outputs, VstInt3
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -275,6 +276,38 @@ void ConsoleX2Channel::processReplacing(float **inputs, float **outputs, VstInt3
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
if (!eqOff) {
@ -742,15 +775,16 @@ void ConsoleX2Channel::processDoubleReplacing(double **inputs, double **outputs,
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -802,6 +836,38 @@ void ConsoleX2Channel::processDoubleReplacing(double **inputs, double **outputs,
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
if (!eqOff) {

View file

@ -82,15 +82,14 @@ ConsoleX2Pre::ConsoleX2Pre(audioMasterCallback audioMaster) :
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
//preTapeHack
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
hFreqA = 0.0; hFreqB = 0.0;

View file

@ -175,12 +175,20 @@ private:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double inTrimA;
double inTrimB;

View file

@ -214,15 +214,16 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -274,6 +275,38 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
if (!eqOff) {
@ -746,15 +779,16 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -806,6 +840,38 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
if (!eqOff) {

View file

@ -0,0 +1,234 @@
/* ========================================
* SoftClock3 - SoftClock3.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __SoftClock3_H
#include "SoftClock3.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new SoftClock3(audioMaster);}
SoftClock3::SoftClock3(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.2;
B = 0.2;
C = 0.2;
D = 0.0;
E = 0.5;
sinePos = 0.0;
barPos = 0.0;
beatPos = 0;
for (int x = 0; x < 34; x++) {beatAccent[x] = 0.0; beatSwing[x] = 0.0;}
inc = 0.0;
beatTable[0]=0;
beatTable[1]=1;
beatTable[2]=2;
beatTable[3]=3;
beatTable[4]=4;
beatTable[5]=5;
beatTable[6]=6;
beatTable[7]=7;
beatTable[8]=8;
beatTable[9]=9;
beatTable[10]=10;
beatTable[11]=11;
beatTable[12]=11;
beatTable[13]=11;
beatTable[14]=11;
beatTable[15]=13;
beatTable[16]=16;
beatTable[17]=13;
beatTable[18]=13;
beatTable[19]=17;
beatTable[20]=17;
beatTable[21]=17;
beatTable[22]=17;
beatTable[23]=19;
beatTable[24]=24;
beatTable[25]=19;
beatTable[26]=19;
beatTable[27]=19;
beatTable[28]=23;
beatTable[29]=23;
beatTable[30]=23;
beatTable[31]=23;
beatTable[32]=32;
beatTable[33]=32;
beatTable[34]=32;
currentBPM = 0;
step = 0.0;
swagger = 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
}
SoftClock3::~SoftClock3() {}
VstInt32 SoftClock3::getVendorVersion () {return 1000;}
void SoftClock3::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void SoftClock3::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 SoftClock3::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
chunkData[3] = D;
chunkData[4] = E;
/* Note: The way this is set up, it will break if you manage to save settings on an Intel
machine and load them on a PPC Mac. However, it's fine if you stick to the machine you
started with. */
*data = chunkData;
return kNumParameters * sizeof(float);
}
VstInt32 SoftClock3::setChunk (void* data, VstInt32 byteSize, bool isPreset)
{
float *chunkData = (float *)data;
A = pinParameter(chunkData[0]);
B = pinParameter(chunkData[1]);
C = pinParameter(chunkData[2]);
D = pinParameter(chunkData[3]);
E = pinParameter(chunkData[4]);
/* We're ignoring byteSize as we found it to be a filthy liar */
/* calculate any other fields you need here - you could copy in
code from setParameter() here. */
return 0;
}
void SoftClock3::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
case kParamB: B = value; break;
case kParamC: C = value; break;
case kParamD: D = value; break;
case kParamE: E = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float SoftClock3::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; break;
case kParamB: return B; break;
case kParamC: return C; break;
case kParamD: return D; break;
case kParamE: return E; break;
default: break; // unknown parameter, shouldn't happen!
} return 0.0; //we only need to update the relevant name, this is simple to manage
}
void SoftClock3::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Tempo", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Count", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Tuple", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "Triplet", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "Flavor", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void SoftClock3::getParameterDisplay(VstInt32 index, char *text) {
switch (index) {
case kParamA: int2string ((int)(A*200.99)+40, text, kVstMaxParamStrLen); break;
case kParamB: int2string ((int)(B*32.99), text, kVstMaxParamStrLen); break;
case kParamC: int2string ((int)(C*16.99), text, kVstMaxParamStrLen); break;
case kParamD: int2string ((int)(D*1.99), text, kVstMaxParamStrLen); break;
case kParamE: float2string (E, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void SoftClock3::getParameterLabel(VstInt32 index, char *text) {
int beatCode = (int)(B*32.99);
switch (index) {
case kParamA: vst_strncpy (text, "bpm", kVstMaxParamStrLen); break;
case kParamB:
switch (beatCode){
case 0: vst_strncpy (text, "0", kVstMaxParamStrLen); break;
case 1: vst_strncpy (text, "1", kVstMaxParamStrLen); break;
case 2: vst_strncpy (text, "2", kVstMaxParamStrLen); break;
case 3: vst_strncpy (text, "3", kVstMaxParamStrLen); break;
case 4: vst_strncpy (text, "4", kVstMaxParamStrLen); break;
case 5: vst_strncpy (text, "5", kVstMaxParamStrLen); break;
case 6: vst_strncpy (text, "6", kVstMaxParamStrLen); break;
case 7: vst_strncpy (text, "7", kVstMaxParamStrLen); break;
case 8: vst_strncpy (text, "8", kVstMaxParamStrLen); break;
case 9: vst_strncpy (text, "9", kVstMaxParamStrLen); break;
case 10:vst_strncpy (text, "10", kVstMaxParamStrLen); break;
case 11:vst_strncpy (text, "11", kVstMaxParamStrLen); break;
case 12:vst_strncpy (text, "11", kVstMaxParamStrLen); break;
case 13:vst_strncpy (text, "11", kVstMaxParamStrLen); break;
case 14:vst_strncpy (text, "11", kVstMaxParamStrLen); break;
case 15:vst_strncpy (text, "13", kVstMaxParamStrLen); break;
case 16:vst_strncpy (text, "16", kVstMaxParamStrLen); break;
case 17:vst_strncpy (text, "13", kVstMaxParamStrLen); break;
case 18:vst_strncpy (text, "13", kVstMaxParamStrLen); break;
case 19:vst_strncpy (text, "17", kVstMaxParamStrLen); break;
case 20:vst_strncpy (text, "17", kVstMaxParamStrLen); break;
case 21:vst_strncpy (text, "17", kVstMaxParamStrLen); break;
case 22:vst_strncpy (text, "17", kVstMaxParamStrLen); break;
case 23:vst_strncpy (text, "19", kVstMaxParamStrLen); break;
case 24:vst_strncpy (text, "24", kVstMaxParamStrLen); break;
case 25:vst_strncpy (text, "19", kVstMaxParamStrLen); break;
case 26:vst_strncpy (text, "19", kVstMaxParamStrLen); break;
case 27:vst_strncpy (text, "19", kVstMaxParamStrLen); break;
case 28:vst_strncpy (text, "23", kVstMaxParamStrLen); break;
case 29:vst_strncpy (text, "23", kVstMaxParamStrLen); break;
case 30:vst_strncpy (text, "23", kVstMaxParamStrLen); break;
case 31:vst_strncpy (text, "23", kVstMaxParamStrLen); break;
case 32:vst_strncpy (text, "32", kVstMaxParamStrLen); break;
default: break;
}
break;
case kParamC: vst_strncpy (text, "th note", kVstMaxParamStrLen); break;
case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamE: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 SoftClock3::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool SoftClock3::getEffectName(char* name) {
vst_strncpy(name, "SoftClock3", kVstMaxProductStrLen); return true;
}
VstPlugCategory SoftClock3::getPlugCategory() {return kPlugCategEffect;}
bool SoftClock3::getProductString(char* text) {
vst_strncpy (text, "airwindows SoftClock3", kVstMaxProductStrLen); return true;
}
bool SoftClock3::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,81 @@
/* ========================================
* SoftClock3 - SoftClock3.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __SoftClock3_H
#define __SoftClock3_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA =0,
kParamB =1,
kParamC =2,
kParamD =3,
kParamE =4,
kNumParameters = 5
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'sfc3'; //Change this to what the AU identity is!
class SoftClock3 :
public AudioEffectX
{
public:
SoftClock3(audioMasterCallback audioMaster);
~SoftClock3();
virtual bool getEffectName(char* name); // The plug-in name
virtual VstPlugCategory getPlugCategory(); // The general category for the plug-in
virtual bool getProductString(char* text); // This is a unique plug-in string provided by Steinberg
virtual bool getVendorString(char* text); // Vendor info
virtual VstInt32 getVendorVersion(); // Version number
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames);
virtual void getProgramName(char *name); // read the name from the host
virtual void setProgramName(char *name); // changes the name of the preset displayed in the host
virtual VstInt32 getChunk (void** data, bool isPreset);
virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset);
virtual float getParameter(VstInt32 index); // get the parameter value at the specified index
virtual void setParameter(VstInt32 index, float value); // set the parameter at index to value
virtual void getParameterLabel(VstInt32 index, char *text); // label for the parameter (eg dB)
virtual void getParameterName(VstInt32 index, char *text); // name of the parameter
virtual void getParameterDisplay(VstInt32 index, char *text); // text description of the current value
virtual VstInt32 canDo(char *text);
private:
char _programName[kVstMaxProgNameLen + 1];
std::set< std::string > _canDo;
float A;
float B;
float C;
float D;
float E;
double sinePos;
double barPos;
double inc;
int beatPos;
double beatAccent[35];
double beatSwing[35];
int beatTable[35];
int currentBPM;
double step;
double swagger;
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,322 @@
/* ========================================
* SoftClock3 - SoftClock3.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __SoftClock3_H
#include "SoftClock3.h"
#endif
void SoftClock3::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
int bpm = (int)(A*200.99)+40;
int beatCode = (int)(B*32.99);
double notes = (double)fmax(((int)(C*16.99))/4.0, 0.125);
double bpmTarget = (getSampleRate()*60.0)/((double)bpm*notes);
double triplet = 0.0;
if (D*1.99 > 0.5) triplet = 1.0;
double accent = E;
if (bpm != currentBPM) {
currentBPM = bpm;
step = 20.0;
double trial = 250.0;
while (trial > bpm) {step -= 1.0; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest 'flow' energy state UNDER the real bpm, and will step up more slowly
while (trial < bpm) {step += 0.01; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest tenth of the energy state and have overshot
while (trial > bpm) {step -= 0.001; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest hundredth to the correct energy state, and can throw away 'trial'
step = step-((int)step); //and calculate speed based on the fractional remainder of 'step'
step = ((0.5-fabs(step-0.5))*2.0) * 0.75;
swagger = pow((0.5-fabs(step-0.5))*2.0,1.618033988749894) * 0.5 * accent;
//and turn it into the 'speed' control
//with step 0.0 being 'flow', 0.25 being 'groove', 0.5 being 'edge' and 0.75 being 'tude'
//turned into a linear speed control where edge is top step and flow being lowest step.
}
double swing = (triplet+swagger)*bpmTarget*0.33333;
//swing makes beats hit LATER, so the One is 0.0
int beatMax = beatTable[beatCode];
//only some counts are literal, others are ways to do prime grooves with different subrhythms
for (int x = 0; x < (beatMax+1); x++) {
beatAccent[x] = ((double)fabs((double)beatMax-((double)x*2.0)))/(double)(beatMax*1.618033988749894);
if (x % 2 > 0) beatSwing[x] = (swagger*(1.0-beatAccent[x]));
else beatSwing[x] = swing;
} //this makes the non-accented beats drop down to quiet and back up to half volume
//we're also decoupling swing from triplet feel unless actually playing triplets
//otherwise, it's part of how you hear accents and tempos
if (beatCode > 0) beatAccent[1] = 0.9; beatSwing[1] = 0.0; //first note is an accent at full crank
switch (beatCode)
{
case 0: break; //not used
case 1: break; //1
case 2: break; //2
case 3: break; //3
case 4: beatAccent[3]=0.9;
beatSwing[3]=0.0; break; //4-22
case 5: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //5-32
case 6: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //6-33
case 7: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //7-43
case 8: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //8-44
case 9: beatAccent[4]=0.9; beatAccent[7]=0.8;
beatSwing[4]=0.0; beatSwing[7]=0.0; break; //9-333
case 10: beatAccent[6]=0.9;
beatSwing[6]=0.0; break; //10-55
case 11: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //11-3332
case 12: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //11-443
case 13: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //11-551
case 14: beatAccent[7]=0.9;
beatSwing[7]=0.0; break; //11-65
case 15: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //13-3334
case 16: beatAccent[9]=0.9;
beatSwing[9]=0.0; break; //16-88
case 17: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //13-445
case 18: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //13-553
case 19: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //17-44441
case 20: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //17-5552
case 21: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //17-773
case 22: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //17-881
case 23: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //19-44443
case 24: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //24-888
case 25: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //19-5554
case 26: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //19-775
case 27: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //19-883
case 28: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75; beatAccent[21]=0.7;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; beatSwing[21]=0.0; break; //23-444443
case 29: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //23-5558
case 30: beatAccent[8]=0.9; beatAccent[15]=0.8; beatAccent[22]=0.7;
beatSwing[8]=0.0; beatSwing[15]=0.0; beatSwing[22]=0.0; break; //23-7772
case 31: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //23-887
case 32: beatAccent[9]=0.9; beatAccent[17]=0.8; beatAccent[25]=0.7;
beatSwing[9]=0.0; beatSwing[17]=0.0; beatSwing[25]=0.0; break; //32-8888
default: break;
}
double chaseSpeed = ((step*0.000125)+0.0000125)/overallscale;
double rootSpeed = 0.9999-(chaseSpeed*((2.0*step)+2.0));
double pulseWidth = (0.085+(accent*0.04)-((1.0-step)*0.06))/chaseSpeed;
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;
barPos += 1.0;
if (barPos>bpmTarget) {
barPos=0.0;
beatPos++;
if (beatPos>beatMax) beatPos=1;
}
if ((barPos < (pulseWidth+beatSwing[beatPos])) && (barPos > beatSwing[beatPos]))
inc = (((beatAccent[beatPos]*accent)+(1.0-accent))*chaseSpeed)+(inc*(1.0-chaseSpeed));
else
inc *= rootSpeed;
sinePos += inc;
if (sinePos > 6.283185307179586) sinePos -= 6.283185307179586;
inputSampleL = inputSampleR = sin(sin(sinePos)*inc*5.0);
//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 SoftClock3::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
int bpm = (int)(A*200.99)+40;
int beatCode = (int)(B*32.99);
double notes = (double)fmax(((int)(C*16.99))/4.0, 0.125);
double bpmTarget = (getSampleRate()*60.0)/((double)bpm*notes);
double triplet = 0.0;
if (D*1.99 > 0.5) triplet = 1.0;
double accent = E;
if (bpm != currentBPM) {
currentBPM = bpm;
step = 20.0;
double trial = 250.0;
while (trial > bpm) {step -= 1.0; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest 'flow' energy state UNDER the real bpm, and will step up more slowly
while (trial < bpm) {step += 0.01; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest tenth of the energy state and have overshot
while (trial > bpm) {step -= 0.001; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest hundredth to the correct energy state, and can throw away 'trial'
step = step-((int)step); //and calculate speed based on the fractional remainder of 'step'
step = ((0.5-fabs(step-0.5))*2.0) * 0.75;
swagger = pow((0.5-fabs(step-0.5))*2.0,1.618033988749894) * 0.5 * accent;
//and turn it into the 'speed' control
//with step 0.0 being 'flow', 0.25 being 'groove', 0.5 being 'edge' and 0.75 being 'tude'
//turned into a linear speed control where edge is top step and flow being lowest step.
}
double swing = (triplet+swagger)*bpmTarget*0.33333;
//swing makes beats hit LATER, so the One is 0.0
int beatMax = beatTable[beatCode];
//only some counts are literal, others are ways to do prime grooves with different subrhythms
for (int x = 0; x < (beatMax+1); x++) {
beatAccent[x] = ((double)fabs((double)beatMax-((double)x*2.0)))/(double)(beatMax*1.618033988749894);
if (x % 2 > 0) beatSwing[x] = (swagger*(1.0-beatAccent[x]));
else beatSwing[x] = swing;
} //this makes the non-accented beats drop down to quiet and back up to half volume
//we're also decoupling swing from triplet feel unless actually playing triplets
//otherwise, it's part of how you hear accents and tempos
if (beatCode > 0) beatAccent[1] = 0.9; beatSwing[1] = 0.0; //first note is an accent at full crank
switch (beatCode)
{
case 0: break; //not used
case 1: break; //1
case 2: break; //2
case 3: break; //3
case 4: beatAccent[3]=0.9;
beatSwing[3]=0.0; break; //4-22
case 5: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //5-32
case 6: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //6-33
case 7: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //7-43
case 8: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //8-44
case 9: beatAccent[4]=0.9; beatAccent[7]=0.8;
beatSwing[4]=0.0; beatSwing[7]=0.0; break; //9-333
case 10: beatAccent[6]=0.9;
beatSwing[6]=0.0; break; //10-55
case 11: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //11-3332
case 12: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //11-443
case 13: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //11-551
case 14: beatAccent[7]=0.9;
beatSwing[7]=0.0; break; //11-65
case 15: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //13-3334
case 16: beatAccent[9]=0.9;
beatSwing[9]=0.0; break; //16-88
case 17: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //13-445
case 18: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //13-553
case 19: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //17-44441
case 20: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //17-5552
case 21: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //17-773
case 22: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //17-881
case 23: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //19-44443
case 24: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //24-888
case 25: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //19-5554
case 26: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //19-775
case 27: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //19-883
case 28: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75; beatAccent[21]=0.7;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; beatSwing[21]=0.0; break; //23-444443
case 29: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //23-5558
case 30: beatAccent[8]=0.9; beatAccent[15]=0.8; beatAccent[22]=0.7;
beatSwing[8]=0.0; beatSwing[15]=0.0; beatSwing[22]=0.0; break; //23-7772
case 31: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //23-887
case 32: beatAccent[9]=0.9; beatAccent[17]=0.8; beatAccent[25]=0.7;
beatSwing[9]=0.0; beatSwing[17]=0.0; beatSwing[25]=0.0; break; //32-8888
default: break;
}
double chaseSpeed = ((step*0.000125)+0.0000125)/overallscale;
double rootSpeed = 0.9999-(chaseSpeed*((2.0*step)+2.0));
double pulseWidth = (0.085+(accent*0.04)-((1.0-step)*0.06))/chaseSpeed;
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;
barPos += 1.0;
if (barPos>bpmTarget) {
barPos=0.0;
beatPos++;
if (beatPos>beatMax) beatPos=1;
}
if ((barPos < (pulseWidth+beatSwing[beatPos])) && (barPos > beatSwing[beatPos]))
inc = (((beatAccent[beatPos]*accent)+(1.0-accent))*chaseSpeed)+(inc*(1.0-chaseSpeed));
else
inc *= rootSpeed;
sinePos += inc;
if (sinePos > 6.283185307179586) sinePos -= 6.283185307179586;
inputSampleL = inputSampleR = sin(sin(sinePos)*inc*5.0);
//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,145 @@
/* ========================================
* TapeHack2 - TapeHack2.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __TapeHack2_H
#include "TapeHack2.h"
#endif
AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new TapeHack2(audioMaster);}
TapeHack2::TapeHack2(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.1;
B = 1.0;
C = 1.0;
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
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
}
TapeHack2::~TapeHack2() {}
VstInt32 TapeHack2::getVendorVersion () {return 1000;}
void TapeHack2::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void TapeHack2::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 TapeHack2::getChunk (void** data, bool isPreset)
{
float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
chunkData[0] = A;
chunkData[1] = B;
chunkData[2] = C;
/* 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 TapeHack2::setChunk (void* data, VstInt32 byteSize, bool isPreset)
{
float *chunkData = (float *)data;
A = pinParameter(chunkData[0]);
B = pinParameter(chunkData[1]);
C = pinParameter(chunkData[2]);
/* 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 TapeHack2::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
case kParamB: B = value; break;
case kParamC: C = value; break;
default: throw; // unknown parameter, shouldn't happen!
}
}
float TapeHack2::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; break;
case kParamB: return B; break;
case kParamC: return C; 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 TapeHack2::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Input", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Output", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Dry/Wet", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}
void TapeHack2::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;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}
void TapeHack2::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;
default: break; // unknown parameter, shouldn't happen!
}
}
VstInt32 TapeHack2::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know
bool TapeHack2::getEffectName(char* name) {
vst_strncpy(name, "TapeHack2", kVstMaxProductStrLen); return true;
}
VstPlugCategory TapeHack2::getPlugCategory() {return kPlugCategEffect;}
bool TapeHack2::getProductString(char* text) {
vst_strncpy (text, "airwindows TapeHack2", kVstMaxProductStrLen); return true;
}
bool TapeHack2::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}

View file

@ -0,0 +1,91 @@
/* ========================================
* TapeHack2 - TapeHack2.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __TapeHack2_H
#define __TapeHack2_H
#ifndef __audioeffect__
#include "audioeffectx.h"
#endif
#include <set>
#include <string>
#include <math.h>
enum {
kParamA =0,
kParamB =1,
kParamC =2,
kNumParameters = 3
}; //
const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'tha2'; //Change this to what the AU identity is!
class TapeHack2 :
public AudioEffectX
{
public:
TapeHack2(audioMasterCallback audioMaster);
~TapeHack2();
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;
double avg32L[33];
double avg32R[33];
double avg16L[17];
double avg16R[17];
double avg8L[9];
double avg8R[9];
double avg4L[5];
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
//preTapeHack
uint32_t fpdL;
uint32_t fpdR;
//default stuff
};
#endif

View file

@ -0,0 +1,305 @@
/* ========================================
* TapeHack2 - TapeHack2.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */
#ifndef __TapeHack2_H
#include "TapeHack2.h"
#endif
void TapeHack2::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames)
{
float* in1 = inputs[0];
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
int spacing = floor(overallscale*2.0);
if (spacing < 2) spacing = 2; if (spacing > 32) spacing = 32;
double inputGain = A*10.0;
double outputGain = B*0.9239;
double wet = C;
while (--sampleFrames >= 0)
{
double inputSampleL = *in1;
double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double drySampleL = inputSampleL;
double drySampleR = inputSampleR;
inputSampleL *= inputGain;
inputSampleR *= inputGain;
double darkSampleL = inputSampleL;
double darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
avg32L[avgPos] = darkSampleL; avg32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += avg32L[x]; darkSampleR += avg32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
avg16L[avgPos%16] = darkSampleL; avg16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += avg16L[x]; darkSampleR += avg16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
avg8L[avgPos%8] = darkSampleL; avg8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += avg8L[x]; darkSampleR += avg8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
avg4L[avgPos%4] = darkSampleL; avg4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += avg4L[x]; darkSampleR += avg4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
avg2L[avgPos%2] = darkSampleL; avg2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
inputSampleL = fmax(fmin(inputSampleL,2.305929007734908),-2.305929007734908);
double addtwo = inputSampleL * inputSampleL;
double empower = inputSampleL * addtwo; // inputSampleL to the third power
inputSampleL -= (empower / 6.0);
empower *= addtwo; // to the fifth power
inputSampleL += (empower / 69.0);
empower *= addtwo; //seventh
inputSampleL -= (empower / 2530.08);
empower *= addtwo; //ninth
inputSampleL += (empower / 224985.6);
empower *= addtwo; //eleventh
inputSampleL -= (empower / 9979200.0f);
//this is a degenerate form of a Taylor Series to approximate sin()
inputSampleR = fmax(fmin(inputSampleR,2.305929007734908),-2.305929007734908);
addtwo = inputSampleR * inputSampleR;
empower = inputSampleR * addtwo; // inputSampleR to the third power
inputSampleR -= (empower / 6.0);
empower *= addtwo; // to the fifth power
inputSampleR += (empower / 69.0);
empower *= addtwo; //seventh
inputSampleR -= (empower / 2530.08);
empower *= addtwo; //ninth
inputSampleR += (empower / 224985.6);
empower *= addtwo; //eleventh
inputSampleR -= (empower / 9979200.0f);
//this is a degenerate form of a Taylor Series to approximate sin()
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
inputSampleL = (inputSampleL * outputGain * wet) + (drySampleL * (1.0-wet));
inputSampleR = (inputSampleR * outputGain * wet) + (drySampleR * (1.0-wet));
//begin 32 bit stereo floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
frexpf((float)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
in1++;
in2++;
out1++;
out2++;
}
}
void TapeHack2::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
int spacing = floor(overallscale*2.0);
if (spacing < 2) spacing = 2; if (spacing > 32) spacing = 32;
double inputGain = A*10.0;
double outputGain = B*0.9239;
double wet = C;
while (--sampleFrames >= 0)
{
double inputSampleL = *in1;
double inputSampleR = *in2;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
double drySampleL = inputSampleL;
double drySampleR = inputSampleR;
inputSampleL *= inputGain;
inputSampleR *= inputGain;
double darkSampleL = inputSampleL;
double darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
avg32L[avgPos] = darkSampleL; avg32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += avg32L[x]; darkSampleR += avg32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
avg16L[avgPos%16] = darkSampleL; avg16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += avg16L[x]; darkSampleR += avg16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
avg8L[avgPos%8] = darkSampleL; avg8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += avg8L[x]; darkSampleR += avg8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
avg4L[avgPos%4] = darkSampleL; avg4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += avg4L[x]; darkSampleR += avg4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
avg2L[avgPos%2] = darkSampleL; avg2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
inputSampleL = fmax(fmin(inputSampleL,2.305929007734908),-2.305929007734908);
double addtwo = inputSampleL * inputSampleL;
double empower = inputSampleL * addtwo; // inputSampleL to the third power
inputSampleL -= (empower / 6.0);
empower *= addtwo; // to the fifth power
inputSampleL += (empower / 69.0);
empower *= addtwo; //seventh
inputSampleL -= (empower / 2530.08);
empower *= addtwo; //ninth
inputSampleL += (empower / 224985.6);
empower *= addtwo; //eleventh
inputSampleL -= (empower / 9979200.0f);
//this is a degenerate form of a Taylor Series to approximate sin()
inputSampleR = fmax(fmin(inputSampleR,2.305929007734908),-2.305929007734908);
addtwo = inputSampleR * inputSampleR;
empower = inputSampleR * addtwo; // inputSampleR to the third power
inputSampleR -= (empower / 6.0);
empower *= addtwo; // to the fifth power
inputSampleR += (empower / 69.0);
empower *= addtwo; //seventh
inputSampleR -= (empower / 2530.08);
empower *= addtwo; //ninth
inputSampleR += (empower / 224985.6);
empower *= addtwo; //eleventh
inputSampleR -= (empower / 9979200.0f);
//this is a degenerate form of a Taylor Series to approximate sin()
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
inputSampleL = (inputSampleL * outputGain * wet) + (drySampleL * (1.0-wet));
inputSampleR = (inputSampleR * outputGain * wet) + (drySampleR * (1.0-wet));
//begin 64 bit stereo floating point dither
//int expon; frexp((double)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
//inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//frexp((double)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
//inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62));
//end 64 bit stereo floating point dither
*out1 = inputSampleL;
*out2 = inputSampleR;
in1++;
in2++;
out1++;
out2++;
}
}

View file

@ -437,14 +437,13 @@ ComponentResult ConsoleHChannel::Reset(AudioUnitScope inScope, AudioUnitElement
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -660,15 +659,16 @@ OSStatus ConsoleHChannel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAct
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -720,6 +720,39 @@ OSStatus ConsoleHChannel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAct
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;

View file

@ -283,12 +283,20 @@ public:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double panA;
double panB;

View file

@ -51,54 +51,54 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 787147691;
PBXWorkspaceStateSaveDate = 787147691;
PBXPerProjectTemplateStateSaveDate = 789947852;
PBXWorkspaceStateSaveDate = 789947852;
};
perUserProjectItems = {
8B2C04C72F15A0290045AF83 /* PBXTextBookmark */ = 8B2C04C72F15A0290045AF83 /* PBXTextBookmark */;
8B2C05A12F15A5DA0045AF83 /* PBXTextBookmark */ = 8B2C05A12F15A5DA0045AF83 /* PBXTextBookmark */;
8B5AB22C2EE76C7800A3F512 /* PBXTextBookmark */ = 8B5AB22C2EE76C7800A3F512 /* PBXTextBookmark */;
8B5AB5822EE9FF0600A3F512 /* PBXTextBookmark */ = 8B5AB5822EE9FF0600A3F512 /* PBXTextBookmark */;
8B60124E2EEAEBDF003E53A7 /* PBXTextBookmark */ = 8B60124E2EEAEBDF003E53A7 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B2C04C72F15A0290045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHChannel.h */;
name = "ConsoleHChannel.h: 153";
rLen = 25;
rLoc = 6299;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B2C05A12F15A5DA0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHChannel.h */;
name = "ConsoleHChannel.h: 153";
rLen = 25;
rLoc = 6299;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B5AB22C2EE76C7800A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleHChannel.cpp */;
name = "ConsoleHChannel.cpp: 653";
rLen = 0;
rLoc = 31796;
rLoc = 31809;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8B5AB5822EE9FF0600A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHChannel.h */;
name = "ConsoleHChannel.h: 153";
rLen = 25;
rLoc = 6299;
rType = 0;
vrLen = 25;
vrLoc = 48;
};
8B60124E2EEAEBDF003E53A7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHChannel.h */;
name = "ConsoleHChannel.h: 153";
rLen = 25;
rLoc = 6299;
rType = 0;
vrLen = 25;
vrLoc = 48;
};
8BA05A660720730100365D66 /* ConsoleHChannel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {957, 19062}}";
sepNavSelRange = "{24289, 0}";
sepNavVisRange = "{28191, 1735}";
sepNavWindowFrame = "{{10, 38}, {926, 840}}";
sepNavIntBoundsRect = "{{0, 0}, {1074, 19854}}";
sepNavSelRange = "{35930, 0}";
sepNavVisRange = "{34743, 2243}";
sepNavWindowFrame = "{{498, 38}, {926, 840}}";
};
};
8BA05A690720730100365D66 /* ConsoleHChannelVersion.h */ = {
@ -118,10 +118,10 @@
};
8BC6025B073B072D006C4272 /* ConsoleHChannel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {696, 5652}}";
sepNavIntBoundsRect = "{{0, 0}, {493, 5616}}";
sepNavSelRange = "{6299, 25}";
sepNavVisRange = "{48, 25}";
sepNavWindowFrame = "{{7, 43}, {912, 826}}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{524, 52}, {912, 826}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {

View file

@ -324,7 +324,7 @@
<real>246</real>
</array>
<key>RubberWindowFrame</key>
<string>10 391 810 487 0 0 1440 878 </string>
<string>630 386 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -352,11 +352,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B60124E2EEAEBDF003E53A7</string>
<string>8B2C05A12F15A5DA0045AF83</string>
<key>history</key>
<array>
<string>8B5AB22C2EE76C7800A3F512</string>
<string>8B5AB5822EE9FF0600A3F512</string>
<string>8B2C04C72F15A0290045AF83</string>
</array>
</dict>
<key>SplitCount</key>
@ -370,18 +370,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {542, 69}}</string>
<string>{{0, 0}, {542, 13}}</string>
<key>RubberWindowFrame</key>
<string>10 391 810 487 0 0 1440 878 </string>
<string>630 386 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>69pt</string>
<string>13pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>372pt</string>
<string>428pt</string>
<key>Tabs</key>
<array>
<dict>
@ -395,9 +395,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {542, 345}}</string>
<string>{{10, 27}, {542, 401}}</string>
<key>RubberWindowFrame</key>
<string>10 391 810 487 0 0 1440 878 </string>
<string>630 386 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -451,7 +451,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {542, 401}}</string>
<string>{{10, 27}, {542, 382}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -479,11 +479,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B60124F2EEAEBDF003E53A7</string>
<string>8B2C05A22F15A5DA0045AF83</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B6012502EEAEBDF003E53A7</string>
<string>8B2C05A32F15A5DA0045AF83</string>
<string>8BC0F9BC2EBA650A0094F441</string>
<string>8B6012512EEAEBDF003E53A7</string>
<string>8B2C05A42F15A5DA0045AF83</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -656,7 +656,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>787147743.49609303</real>
<real>789947866.04627705</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -673,11 +673,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B6012522EEAEBDF003E53A7</string>
<string>8B2C04C82F15A0290045AF83</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/ConsoleHChannel/ConsoleHChannel.xcodeproj</string>
</array>
<key>WindowString</key>
<string>10 391 810 487 0 0 1440 878 </string>
<string>630 386 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -404,14 +404,13 @@ void ConsoleHPre::ConsoleHPreKernel::Reset()
dBaXL = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0;
lastSlewpleL = 0.0;
lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -618,11 +617,13 @@ void ConsoleHPre::ConsoleHPreKernel::Process( const Float32 *inSourceP,
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x];}
darkSampleL /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL,1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
//begin Discontinuity section
inputSampleL *= moreTapeHack;
inputSampleL *= moreDiscontinuity;
@ -650,6 +651,37 @@ void ConsoleHPre::ConsoleHPreKernel::Process( const Float32 *inSourceP,
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x];}
darkSampleL /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;

View file

@ -280,10 +280,14 @@ public:
double avg8L[9];
double avg4L[5];
double avg2L[3];
double post32L[33];
double post16L[17];
double post8L[9];
double post4L[5];
double post2L[3];
int avgPos;
double lastSlewL;
double lastSlewpleL;
//preTapeHack
double lastDarkL;
//preTapeHack
double inTrimA;
double inTrimB;

View file

@ -49,49 +49,49 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 787147774;
PBXWorkspaceStateSaveDate = 787147774;
PBXPerProjectTemplateStateSaveDate = 789944003;
PBXWorkspaceStateSaveDate = 789944003;
};
perUserProjectItems = {
8B2C04582F159CD00045AF83 /* PBXTextBookmark */ = 8B2C04582F159CD00045AF83 /* PBXTextBookmark */;
8B2C045F2F159D2F0045AF83 /* PBXTextBookmark */ = 8B2C045F2F159D2F0045AF83 /* PBXTextBookmark */;
8B5AB3F02EE9AD0700A3F512 /* PBXTextBookmark */ = 8B5AB3F02EE9AD0700A3F512 /* PBXTextBookmark */;
8B5AB64E2EEA336F00A3F512 /* PBXTextBookmark */ = 8B5AB64E2EEA336F00A3F512 /* PBXTextBookmark */;
8B60125F2EEAEC1F003E53A7 /* PBXTextBookmark */ = 8B60125F2EEAEC1F003E53A7 /* PBXTextBookmark */;
8B7D6CFB2EBCEAA2000B38FA /* PlistBookmark */ = 8B7D6CFB2EBCEAA2000B38FA /* PlistBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B2C04582F159CD00045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHPre.h */;
name = "ConsoleHPre.h: 260";
rLen = 0;
rLoc = 9114;
rType = 0;
vrLen = 43;
vrLoc = 26;
};
8B2C045F2F159D2F0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHPre.h */;
name = "ConsoleHPre.h: 260";
rLen = 0;
rLoc = 9114;
rType = 0;
vrLen = 43;
vrLoc = 26;
};
8B5AB3F02EE9AD0700A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleHPre.cpp */;
name = "ConsoleHPre.cpp: 776";
rLen = 0;
rLoc = 37785;
rLoc = 38899;
rType = 0;
vrLen = 50;
vrLoc = 38606;
};
8B5AB64E2EEA336F00A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHPre.h */;
name = "ConsoleHPre.h: 260";
rLen = 0;
rLoc = 9114;
rType = 0;
vrLen = 66;
vrLoc = 3;
};
8B60125F2EEAEC1F003E53A7 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleHPre.h */;
name = "ConsoleHPre.h: 260";
rLen = 0;
rLoc = 9114;
rType = 0;
vrLen = 66;
vrLoc = 3;
};
8B7D6CFB2EBCEAA2000B38FA /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
@ -106,9 +106,9 @@
};
8BA05A660720730100365D66 /* ConsoleHPre.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {957, 15498}}";
sepNavSelRange = "{22818, 0}";
sepNavVisRange = "{21953, 2061}";
sepNavIntBoundsRect = "{{0, 0}, {1074, 16326}}";
sepNavSelRange = "{31675, 0}";
sepNavVisRange = "{30430, 1294}";
sepNavWindowFrame = "{{528, 50}, {912, 826}}";
};
};
@ -122,10 +122,10 @@
};
8BC6025B073B072D006C4272 /* ConsoleHPre.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {741, 5598}}";
sepNavIntBoundsRect = "{{0, 0}, {948, 5436}}";
sepNavSelRange = "{9114, 0}";
sepNavVisRange = "{3, 66}";
sepNavWindowFrame = "{{9, 52}, {912, 826}}";
sepNavVisRange = "{26, 43}";
sepNavWindowFrame = "{{518, 52}, {912, 826}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {

View file

@ -225,8 +225,8 @@
<array/>
<key>PerspectiveWidths</key>
<array>
<integer>841</integer>
<integer>841</integer>
<integer>807</integer>
<integer>807</integer>
</array>
<key>Perspectives</key>
<array>
@ -256,8 +256,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -326,7 +324,7 @@
<real>288</real>
</array>
<key>RubberWindowFrame</key>
<string>539 212 807 512 0 0 1440 878 </string>
<string>633 152 807 512 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -354,12 +352,12 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B60125F2EEAEC1F003E53A7</string>
<string>8B2C045F2F159D2F0045AF83</string>
<key>history</key>
<array>
<string>8B7D6CFB2EBCEAA2000B38FA</string>
<string>8B5AB3F02EE9AD0700A3F512</string>
<string>8B5AB64E2EEA336F00A3F512</string>
<string>8B2C04582F159CD00045AF83</string>
</array>
</dict>
<key>SplitCount</key>
@ -373,18 +371,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {497, 125}}</string>
<string>{{0, 0}, {497, 110}}</string>
<key>RubberWindowFrame</key>
<string>539 212 807 512 0 0 1440 878 </string>
<string>633 152 807 512 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>125pt</string>
<string>110pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>341pt</string>
<string>356pt</string>
<key>Tabs</key>
<array>
<dict>
@ -398,9 +396,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {497, 314}}</string>
<key>RubberWindowFrame</key>
<string>539 212 807 512 0 0 1440 878 </string>
<string>{{10, 27}, {497, 329}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -454,7 +450,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {531, 507}}</string>
<string>{{10, 27}, {497, 329}}</string>
<key>RubberWindowFrame</key>
<string>633 152 807 512 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -482,11 +480,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B6012602EEAEC1F003E53A7</string>
<string>8B2C042E2F1596C70045AF83</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B6012612EEAEC1F003E53A7</string>
<string>8B2C042F2F1596C70045AF83</string>
<string>8BD7274A1D46E5A5000176F0</string>
<string>8B6012622EEAEC1F003E53A7</string>
<string>8B2C04302F1596C70045AF83</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -659,7 +657,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>787147807.16772997</real>
<real>789945647.58245003</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -676,11 +674,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B6012632EEAEC1F003E53A7</string>
<string>8B2C04602F159D2F0045AF83</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/ConsoleHPre/ConsoleHPre.xcodeproj</string>
</array>
<key>WindowString</key>
<string>539 212 807 512 0 0 1440 878 </string>
<string>633 152 807 512 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -364,14 +364,13 @@ ComponentResult ConsoleX2Channel::Reset(AudioUnitScope inScope, AudioUnitElemen
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -596,15 +595,16 @@ OSStatus ConsoleX2Channel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAc
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -656,6 +656,39 @@ OSStatus ConsoleX2Channel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAc
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
if (!eqOff) {

View file

@ -255,12 +255,20 @@ public:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double panA;
double panB;

View file

@ -51,20 +51,30 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 787092677;
PBXWorkspaceStateSaveDate = 787092677;
PBXPerProjectTemplateStateSaveDate = 789947581;
PBXWorkspaceStateSaveDate = 789947581;
};
perUserProjectItems = {
8B5AB49F2EE9CADD00A3F512 /* PBXTextBookmark */ = 8B5AB49F2EE9CADD00A3F512 /* PBXTextBookmark */;
8B5AB4A02EE9CADD00A3F512 /* PBXTextBookmark */ = 8B5AB4A02EE9CADD00A3F512 /* PBXTextBookmark */;
8B5AB5F62EEA1E3300A3F512 /* PBXTextBookmark */ = 8B5AB5F62EEA1E3300A3F512 /* PBXTextBookmark */;
8B2C05942F15A5A60045AF83 /* PBXTextBookmark */ = 8B2C05942F15A5A60045AF83 /* PBXTextBookmark */;
8B2C05952F15A5A60045AF83 /* PBXTextBookmark */ = 8B2C05952F15A5A60045AF83 /* PBXTextBookmark */;
8B2C05962F15A5A60045AF83 /* PBXTextBookmark */ = 8B2C05962F15A5A60045AF83 /* PBXTextBookmark */;
8B9629D92E9AC7DA000EAC04 /* PBXTextBookmark */ = 8B9629D92E9AC7DA000EAC04 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B5AB49F2EE9CADD00A3F512 /* PBXTextBookmark */ = {
8B2C05942F15A5A60045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Channel.cpp */;
name = "ConsoleX2Channel.cpp: 599";
rLen = 0;
rLoc = 26874;
rType = 0;
vrLen = 25;
vrLoc = 51;
};
8B2C05952F15A5A60045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleX2Channel.h */;
name = "ConsoleX2Channel.h: 237";
@ -74,25 +84,15 @@
vrLen = 181;
vrLoc = 74;
};
8B5AB4A02EE9CADD00A3F512 /* PBXTextBookmark */ = {
8B2C05962F15A5A60045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Channel.cpp */;
name = "ConsoleX2Channel.cpp: 600";
fRef = 8BC6025B073B072D006C4272 /* ConsoleX2Channel.h */;
name = "ConsoleX2Channel.h: 237";
rLen = 0;
rLoc = 26751;
rLoc = 8174;
rType = 0;
vrLen = 134;
vrLoc = 26171;
};
8B5AB5F62EEA1E3300A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Channel.cpp */;
name = "ConsoleX2Channel.cpp: 600";
rLen = 0;
rLoc = 26751;
rType = 0;
vrLen = 90;
vrLoc = 26215;
vrLen = 181;
vrLoc = 74;
};
8B9629D92E9AC7DA000EAC04 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
@ -106,10 +106,10 @@
};
8BA05A660720730100365D66 /* ConsoleX2Channel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {867, 16470}}";
sepNavSelRange = "{26751, 0}";
sepNavVisRange = "{26215, 90}";
sepNavWindowFrame = "{{11, 97}, {931, 746}}";
sepNavIntBoundsRect = "{{0, 0}, {1074, 17028}}";
sepNavSelRange = "{31514, 0}";
sepNavVisRange = "{30768, 1791}";
sepNavWindowFrame = "{{509, 118}, {931, 746}}";
};
};
8BA05A670720730100365D66 /* ConsoleX2Channel.exp */ = {
@ -137,10 +137,10 @@
};
8BC6025B073B072D006C4272 /* ConsoleX2Channel.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 5688}}";
sepNavSelRange = "{7629, 237}";
sepNavVisRange = "{6149, 1155}";
sepNavWindowFrame = "{{16, 53}, {802, 825}}";
sepNavIntBoundsRect = "{{0, 0}, {1029, 5382}}";
sepNavSelRange = "{8174, 0}";
sepNavVisRange = "{74, 181}";
sepNavWindowFrame = "{{638, 53}, {802, 825}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {

View file

@ -324,7 +324,7 @@
<real>249</real>
</array>
<key>RubberWindowFrame</key>
<string>1 358 810 487 0 0 1440 878 </string>
<string>620 216 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -340,7 +340,7 @@
<key>PBXProjectModuleGUID</key>
<string>8BD95EA72E957B1200D77499</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2Channel.cpp</string>
<string>ConsoleX2Channel.h</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -348,16 +348,16 @@
<key>PBXProjectModuleGUID</key>
<string>8BD95EA82E957B1200D77499</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2Channel.cpp</string>
<string>ConsoleX2Channel.h</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B5AB5F62EEA1E3300A3F512</string>
<string>8B2C05962F15A5A60045AF83</string>
<key>history</key>
<array>
<string>8B9629D92E9AC7DA000EAC04</string>
<string>8B5AB49F2EE9CADD00A3F512</string>
<string>8B5AB4A02EE9CADD00A3F512</string>
<string>8B2C05942F15A5A60045AF83</string>
<string>8B2C05952F15A5A60045AF83</string>
</array>
</dict>
<key>SplitCount</key>
@ -371,18 +371,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {539, 51}}</string>
<string>{{0, 0}, {539, 86}}</string>
<key>RubberWindowFrame</key>
<string>1 358 810 487 0 0 1440 878 </string>
<string>620 216 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>51pt</string>
<string>86pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>390pt</string>
<string>355pt</string>
<key>Tabs</key>
<array>
<dict>
@ -396,9 +396,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {539, 363}}</string>
<key>RubberWindowFrame</key>
<string>1 358 810 487 0 0 1440 878 </string>
<string>{{10, 27}, {539, 328}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -453,6 +451,8 @@
<dict>
<key>Frame</key>
<string>{{10, 27}, {539, 328}}</string>
<key>RubberWindowFrame</key>
<string>620 216 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -480,11 +480,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B5AB5C72EEA14CA00A3F512</string>
<string>8B2C056F2F15A4DB0045AF83</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B5AB5C82EEA14CA00A3F512</string>
<string>8B2C05702F15A4DB0045AF83</string>
<string>8BD95EA72E957B1200D77499</string>
<string>8B5AB5C92EEA14CA00A3F512</string>
<string>8B2C05712F15A4DB0045AF83</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -657,7 +657,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>787095091.46855199</real>
<real>789947814.12646496</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -674,10 +674,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>/Users/christopherjohnson/Desktop/ConsoleX2Channel/ConsoleX2Channel.xcodeproj</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/ConsoleX2Channel/ConsoleX2Channel.xcodeproj</string>
</array>
<key>WindowString</key>
<string>1 358 810 487 0 0 1440 878 </string>
<string>620 216 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -331,14 +331,13 @@ void ConsoleX2Pre::ConsoleX2PreKernel::Reset()
dBaXL = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0;
lastSlewpleL = 0.0;
lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -554,11 +553,13 @@ void ConsoleX2Pre::ConsoleX2PreKernel::Process( const Float32 *inSourceP,
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x];}
darkSampleL /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL,1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -585,6 +586,36 @@ void ConsoleX2Pre::ConsoleX2PreKernel::Process( const Float32 *inSourceP,
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x];}
darkSampleL /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
//use the previously calculated depth of the filter
}
if (!eqOff) {

View file

@ -251,10 +251,14 @@ public:
double avg8L[9];
double avg4L[5];
double avg2L[3];
double post32L[33];
double post16L[17];
double post8L[9];
double post4L[5];
double post2L[3];
int avgPos;
double lastSlewL;
double lastSlewpleL;
//preTapeHack
double lastDarkL;
//preTapeHack
double inTrimA;
double inTrimB;

View file

@ -51,13 +51,15 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 787095378;
PBXWorkspaceStateSaveDate = 787095378;
PBXPerProjectTemplateStateSaveDate = 789944055;
PBXWorkspaceStateSaveDate = 789944055;
};
perUserProjectItems = {
8B2C04482F159A9F0045AF83 /* PBXBookmark */ = 8B2C04482F159A9F0045AF83 /* PBXBookmark */;
8B2C044B2F159BEB0045AF83 /* PBXTextBookmark */ = 8B2C044B2F159BEB0045AF83 /* PBXTextBookmark */;
8B2C044E2F159C170045AF83 /* PBXTextBookmark */ = 8B2C044E2F159C170045AF83 /* PBXTextBookmark */;
8B2C04542F159C170045AF83 /* PBXTextBookmark */ = 8B2C04542F159C170045AF83 /* PBXTextBookmark */;
8B5AB41A2EE9B1F500A3F512 /* PBXTextBookmark */ = 8B5AB41A2EE9B1F500A3F512 /* PBXTextBookmark */;
8B5AB41C2EE9B1F500A3F512 /* PBXTextBookmark */ = 8B5AB41C2EE9B1F500A3F512 /* PBXTextBookmark */;
8B5AB63E2EEA333200A3F512 /* PBXTextBookmark */ = 8B5AB63E2EEA333200A3F512 /* PBXTextBookmark */;
8BC5BE482EB1697700031C01 /* PBXTextBookmark */ = 8BC5BE482EB1697700031C01 /* PBXTextBookmark */;
8BD964C72E95AA0700D77499 /* PlistBookmark */ = 8BD964C72E95AA0700D77499 /* PlistBookmark */;
};
@ -65,6 +67,40 @@
userBuildSettings = {
};
};
8B2C04482F159A9F0045AF83 /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */;
};
8B2C044B2F159BEB0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */;
name = "ConsoleX2Pre.cpp: 727";
rLen = 0;
rLoc = 32359;
rType = 0;
vrLen = 184;
vrLoc = 69;
};
8B2C044E2F159C170045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */;
name = "ConsoleX2Pre.cpp: 727";
rLen = 0;
rLoc = 32359;
rType = 0;
vrLen = 184;
vrLoc = 69;
};
8B2C04542F159C170045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */;
name = "ConsoleX2Pre.cpp: 618";
rLen = 0;
rLoc = 27205;
rType = 0;
vrLen = 1528;
vrLoc = 29829;
};
8B5AB41A2EE9B1F500A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BC6025B073B072D006C4272 /* ConsoleX2Pre.h */;
@ -75,32 +111,12 @@
vrLen = 114;
vrLoc = 7293;
};
8B5AB41C2EE9B1F500A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */;
name = "ConsoleX2Pre.cpp: 696";
rLen = 0;
rLoc = 31255;
rType = 0;
vrLen = 206;
vrLoc = 47;
};
8B5AB63E2EEA333200A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */;
name = "ConsoleX2Pre.cpp: 696";
rLen = 0;
rLoc = 31255;
rType = 0;
vrLen = 206;
vrLoc = 47;
};
8BA05A660720730100365D66 /* ConsoleX2Pre.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1065, 13464}}";
sepNavSelRange = "{31255, 0}";
sepNavVisRange = "{47, 206}";
sepNavWindowFrame = "{{13, 92}, {1066, 786}}";
sepNavIntBoundsRect = "{{0, 0}, {1029, 13896}}";
sepNavSelRange = "{32359, 0}";
sepNavVisRange = "{69, 184}";
sepNavWindowFrame = "{{519, 92}, {1066, 786}}";
};
};
8BA05A690720730100365D66 /* ConsoleX2PreVersion.h */ = {
@ -123,10 +139,10 @@
};
8BC6025B073B072D006C4272 /* ConsoleX2Pre.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 4842}}";
sepNavSelRange = "{7719, 250}";
sepNavVisRange = "{4221, 1052}";
sepNavWindowFrame = "{{19, 46}, {657, 832}}";
sepNavIntBoundsRect = "{{0, 0}, {1146, 5562}}";
sepNavSelRange = "{8547, 0}";
sepNavVisRange = "{7955, 658}";
sepNavWindowFrame = "{{781, 46}, {657, 832}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {

View file

@ -222,7 +222,48 @@
</dict>
</array>
<key>OpenEditors</key>
<array/>
<array>
<dict>
<key>Content</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8B2C04522F159C170045AF83</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2Pre.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8B2C04532F159C170045AF83</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2Pre.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B2C04542F159C170045AF83</string>
<key>history</key>
<array>
<string>8B2C04482F159A9F0045AF83</string>
</array>
</dict>
<key>SplitCount</key>
<string>1</string>
</dict>
<key>StatusBarVisibility</key>
<true/>
</dict>
<key>Geometry</key>
<dict>
<key>Frame</key>
<string>{{0, 20}, {1066, 689}}</string>
<key>PBXModuleWindowStatusBarHidden2</key>
<false/>
<key>RubberWindowFrame</key>
<string>519 148 1066 730 0 0 1440 878 </string>
</dict>
</dict>
</array>
<key>PerspectiveWidths</key>
<array>
<integer>716</integer>
@ -256,8 +297,6 @@
<key>Layout</key>
<array>
<dict>
<key>BecomeActive</key>
<true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@ -326,7 +365,7 @@
<real>288</real>
</array>
<key>RubberWindowFrame</key>
<string>10 90 716 511 0 0 1440 878 </string>
<string>713 328 716 511 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -354,13 +393,13 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B5AB63E2EEA333200A3F512</string>
<string>8B2C044E2F159C170045AF83</string>
<key>history</key>
<array>
<string>8BD964C72E95AA0700D77499</string>
<string>8BC5BE482EB1697700031C01</string>
<string>8B5AB41A2EE9B1F500A3F512</string>
<string>8B5AB41C2EE9B1F500A3F512</string>
<string>8B2C044B2F159BEB0045AF83</string>
</array>
</dict>
<key>SplitCount</key>
@ -374,18 +413,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {406, 125}}</string>
<string>{{0, 0}, {406, 94}}</string>
<key>RubberWindowFrame</key>
<string>10 90 716 511 0 0 1440 878 </string>
<string>713 328 716 511 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>125pt</string>
<string>94pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>340pt</string>
<string>371pt</string>
<key>Tabs</key>
<array>
<dict>
@ -399,9 +438,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {406, 313}}</string>
<key>RubberWindowFrame</key>
<string>10 90 716 511 0 0 1440 878 </string>
<string>{{10, 27}, {406, 344}}</string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -455,7 +492,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {406, 438}}</string>
<string>{{10, 27}, {406, 344}}</string>
<key>RubberWindowFrame</key>
<string>713 328 716 511 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -483,11 +522,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B5AB63F2EEA333200A3F512</string>
<string>8B2C044F2F159C170045AF83</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B5AB6402EEA333200A3F512</string>
<string>8B2C04502F159C170045AF83</string>
<string>8BD7274A1D46E5A5000176F0</string>
<string>8B5AB6412EEA333200A3F512</string>
<string>8B2C04512F159C170045AF83</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -660,7 +699,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>787100466.62823403</real>
<real>789945367.99131</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -677,10 +716,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>/Users/christopherjohnson/Desktop/ConsoleX2Pre/ConsoleX2Pre.xcodeproj</string>
<string>8B2C04522F159C170045AF83</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/ConsoleX2Pre/ConsoleX2Pre.xcodeproj</string>
</array>
<key>WindowString</key>
<string>10 90 716 511 0 0 1440 878 </string>
<string>713 328 716 511 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

Binary file not shown.

View file

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

View file

@ -0,0 +1,456 @@
/*
* File: SoftClock3.cpp
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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.
*
*/
/*=============================================================================
SoftClock3.cpp
=============================================================================*/
#include "SoftClock3.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(SoftClock3)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::SoftClock3
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SoftClock3::SoftClock3(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
SetParameter(kParam_E, kDefaultValue_ParamE );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::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_Indexed;
outParameterInfo.minValue = 40;
outParameterInfo.maxValue = 240;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_CustomUnit;
switch ((int)GetParameter( kParam_B )){
case 0:outParameterInfo.unitName = CFSTR("0"); break;
case 1: outParameterInfo.unitName = CFSTR("1"); break;
case 2:outParameterInfo.unitName = CFSTR("2"); break;
case 3:outParameterInfo.unitName = CFSTR("3"); break;
case 4:outParameterInfo.unitName = CFSTR("4"); break;
case 5:outParameterInfo.unitName = CFSTR("5"); break;
case 6:outParameterInfo.unitName = CFSTR("6"); break;
case 7:outParameterInfo.unitName = CFSTR("7"); break;
case 8:outParameterInfo.unitName = CFSTR("8"); break;
case 9:outParameterInfo.unitName = CFSTR("9"); break;
case 10:outParameterInfo.unitName = CFSTR("10"); break;
case 11:outParameterInfo.unitName = CFSTR("11"); break;
case 12:outParameterInfo.unitName = CFSTR("11"); break;
case 13:outParameterInfo.unitName = CFSTR("11"); break;
case 14:outParameterInfo.unitName = CFSTR("11"); break;
case 15:outParameterInfo.unitName = CFSTR("13"); break;
case 16:outParameterInfo.unitName = CFSTR("16"); break;
case 17:outParameterInfo.unitName = CFSTR("13"); break;
case 18:outParameterInfo.unitName = CFSTR("13"); break;
case 19:outParameterInfo.unitName = CFSTR("17"); break;
case 20:outParameterInfo.unitName = CFSTR("17"); break;
case 21:outParameterInfo.unitName = CFSTR("17"); break;
case 22:outParameterInfo.unitName = CFSTR("17"); break;
case 23:outParameterInfo.unitName = CFSTR("19"); break;
case 24:outParameterInfo.unitName = CFSTR("24"); break;
case 25:outParameterInfo.unitName = CFSTR("19"); break;
case 26:outParameterInfo.unitName = CFSTR("19"); break;
case 27:outParameterInfo.unitName = CFSTR("19"); break;
case 28:outParameterInfo.unitName = CFSTR("23"); break;
case 29:outParameterInfo.unitName = CFSTR("23"); break;
case 30:outParameterInfo.unitName = CFSTR("23"); break;
case 31:outParameterInfo.unitName = CFSTR("23"); break;
case 32:outParameterInfo.unitName = CFSTR("32"); break;
default: break;
}
outParameterInfo.minValue = 0;
outParameterInfo.maxValue = 32;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Indexed;
outParameterInfo.minValue = 0;
outParameterInfo.maxValue = 16;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Indexed;
outParameterInfo.minValue = 0;
outParameterInfo.maxValue = 1;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
case kParam_E:
AUBase::FillInParameterName (outParameterInfo, kParameterEName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamE;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 SoftClock3::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// SoftClock3::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____SoftClock3EffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::SoftClock3Kernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
sinePos = 0.0;
barPos = 0.0;
beatPos = 0;
for (int x = 0; x < 34; x++) {beatAccent[x] = 0.0; beatSwing[x] = 0.0;}
inc = 0.0;
beatTable[0]=0;
beatTable[1]=1;
beatTable[2]=2;
beatTable[3]=3;
beatTable[4]=4;
beatTable[5]=5;
beatTable[6]=6;
beatTable[7]=7;
beatTable[8]=8;
beatTable[9]=9;
beatTable[10]=10;
beatTable[11]=11;
beatTable[12]=11;
beatTable[13]=11;
beatTable[14]=11;
beatTable[15]=13;
beatTable[16]=16;
beatTable[17]=13;
beatTable[18]=13;
beatTable[19]=17;
beatTable[20]=17;
beatTable[21]=17;
beatTable[22]=17;
beatTable[23]=19;
beatTable[24]=24;
beatTable[25]=19;
beatTable[26]=19;
beatTable[27]=19;
beatTable[28]=23;
beatTable[29]=23;
beatTable[30]=23;
beatTable[31]=23;
beatTable[32]=32;
beatTable[33]=32;
beatTable[34]=32;
currentBPM = 0;
step = 0.0;
swagger = 0.0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus SoftClock3::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= GetSampleRate();
int bpm = GetParameter( kParam_A );
int beatCode = GetParameter( kParam_B );
double notes = (double)fmax(GetParameter( kParam_C )/4.0, 0.125);
double bpmTarget = (GetSampleRate()*60.0)/((double)bpm*notes);
double triplet = 0.0;
if (GetParameter( kParam_D ) > 0) triplet = 1.0;
double accent = GetParameter( kParam_E );
if (bpm != currentBPM) {
currentBPM = bpm;
step = 20.0;
double trial = 250.0;
while (trial > bpm) {step -= 1.0; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest 'flow' energy state UNDER the real bpm, and will step up more slowly
while (trial < bpm) {step += 0.01; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest tenth of the energy state and have overshot
while (trial > bpm) {step -= 0.001; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest hundredth to the correct energy state, and can throw away 'trial'
step = step-((int)step); //and calculate speed based on the fractional remainder of 'step'
step = ((0.5-fabs(step-0.5))*2.0) * 0.75;
swagger = pow((0.5-fabs(step-0.5))*2.0,1.618033988749894) * 0.5 * accent;
//and turn it into the 'speed' control
//with step 0.0 being 'flow', 0.25 being 'groove', 0.5 being 'edge' and 0.75 being 'tude'
//turned into a linear speed control where edge is top step and flow being lowest step.
}
double swing = (triplet+swagger)*bpmTarget*0.33333;
//swing makes beats hit LATER, so the One is 0.0
int beatMax = beatTable[beatCode];
//only some counts are literal, others are ways to do prime grooves with different subrhythms
for (int x = 0; x < (beatMax+1); x++) {
beatAccent[x] = ((double)fabs((double)beatMax-((double)x*2.0)))/(double)(beatMax*1.618033988749894);
if (x % 2 > 0) beatSwing[x] = (swagger*(1.0-beatAccent[x]));
else beatSwing[x] = swing;
} //this makes the non-accented beats drop down to quiet and back up to half volume
//we're also decoupling swing from triplet feel unless actually playing triplets
//otherwise, it's part of how you hear accents and tempos
if (beatCode > 0) beatAccent[1] = 0.9; beatSwing[1] = 0.0; //first note is an accent at full crank
switch (beatCode)
{
case 0: break; //not used
case 1: break; //1
case 2: break; //2
case 3: break; //3
case 4: beatAccent[3]=0.9;
beatSwing[3]=0.0; break; //4-22
case 5: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //5-32
case 6: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //6-33
case 7: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //7-43
case 8: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //8-44
case 9: beatAccent[4]=0.9; beatAccent[7]=0.8;
beatSwing[4]=0.0; beatSwing[7]=0.0; break; //9-333
case 10: beatAccent[6]=0.9;
beatSwing[6]=0.0; break; //10-55
case 11: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //11-3332
case 12: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //11-443
case 13: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //11-551
case 14: beatAccent[7]=0.9;
beatSwing[7]=0.0; break; //11-65
case 15: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //13-3334
case 16: beatAccent[9]=0.9;
beatSwing[9]=0.0; break; //16-88
case 17: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //13-445
case 18: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //13-553
case 19: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //17-44441
case 20: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //17-5552
case 21: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //17-773
case 22: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //17-881
case 23: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //19-44443
case 24: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //24-888
case 25: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //19-5554
case 26: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //19-775
case 27: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //19-883
case 28: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75; beatAccent[21]=0.7;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; beatSwing[21]=0.0; break; //23-444443
case 29: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //23-5558
case 30: beatAccent[8]=0.9; beatAccent[15]=0.8; beatAccent[22]=0.7;
beatSwing[8]=0.0; beatSwing[15]=0.0; beatSwing[22]=0.0; break; //23-7772
case 31: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //23-887
case 32: beatAccent[9]=0.9; beatAccent[17]=0.8; beatAccent[25]=0.7;
beatSwing[9]=0.0; beatSwing[17]=0.0; beatSwing[25]=0.0; break; //32-8888
default: break;
}
double chaseSpeed = ((step*0.000125)+0.0000125)/overallscale;
double rootSpeed = 0.9999-(chaseSpeed*((2.0*step)+2.0));
double pulseWidth = (0.085+(accent*0.04)-((1.0-step)*0.06))/chaseSpeed;
while (nSampleFrames-- > 0) {
double inputSampleL = *inputL;
double inputSampleR = *inputR;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
barPos += 1.0;
if (barPos>bpmTarget) {
barPos=0.0;
beatPos++;
if (beatPos>beatMax) beatPos=1;
}
if ((barPos < (pulseWidth+beatSwing[beatPos])) && (barPos > beatSwing[beatPos]))
inc = (((beatAccent[beatPos]*accent)+(1.0-accent))*chaseSpeed)+(inc*(1.0-chaseSpeed));
else
inc *= rootSpeed;
sinePos += inc;
if (sinePos > 6.283185307179586) sinePos -= 6.283185307179586;
inputSampleL = inputSampleR = sin(sin(sinePos)*inc*5.0);
//begin 32 bit stereo floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
frexpf((float)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit stereo floating point dither
*outputL = inputSampleL;
*outputR = inputSampleR;
//direct stereo out
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1 @@
_SoftClock3Entry

View file

@ -0,0 +1,141 @@
/*
* File: SoftClock3.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "SoftClock3Version.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __SoftClock3_h__
#define __SoftClock3_h__
#pragma mark ____SoftClock3 Parameters
// parameters
static const float kDefaultValue_ParamA = 120;
static const float kDefaultValue_ParamB = 4;
static const float kDefaultValue_ParamC = 4;
static const float kDefaultValue_ParamD = 0;
static const float kDefaultValue_ParamE = 0.5;
static CFStringRef kParameterAName = CFSTR("Tempo");
static CFStringRef kParameterBName = CFSTR("Count");
static CFStringRef kParameterCName = CFSTR("Tuple");
static CFStringRef kParameterDName = CFSTR("Triplet");
static CFStringRef kParameterEName = CFSTR("Flavor");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
kParam_E =4,
//Add your parameters here...
kNumberOfParameters=5
};
#pragma mark ____SoftClock3
class SoftClock3 : public AUEffectBase
{
public:
SoftClock3(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~SoftClock3 () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
virtual ComponentResult GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings);
virtual ComponentResult GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo);
virtual ComponentResult GetPropertyInfo(AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable );
virtual ComponentResult GetProperty(AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData);
virtual ComponentResult Initialize();
virtual bool SupportsTail () { return true; }
virtual Float64 GetTailTime() {return (1.0/GetSampleRate())*0.0;} //in SECONDS! gsr * a number = in samples
virtual Float64 GetLatency() {return (1.0/GetSampleRate())*0.0;} // in SECONDS! gsr * a number = in samples
/*! @method Version */
virtual ComponentResult Version() { return kSoftClock3Version; }
private:
double sinePos;
double barPos;
double inc;
int beatPos;
double beatAccent[35];
double beatSwing[35];
int beatTable[35];
int currentBPM;
double step;
double swagger;
uint32_t fpdL;
uint32_t fpdR;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: SoftClock3.r
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "SoftClock3Version.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_SoftClock3 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SoftClock3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_SoftClock3
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE SoftClock3_COMP_SUBTYPE
#define COMP_MANUF SoftClock3_COMP_MANF
#define VERSION kSoftClock3Version
#define NAME "Airwindows: SoftClock3"
#define DESCRIPTION "SoftClock3 AU"
#define ENTRY_POINT "SoftClock3Entry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,107 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* SoftClock3 */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
364,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
188,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 789925227;
PBXWorkspaceStateSaveDate = 789925227;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8BA05A660720730100365D66 /* SoftClock3.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1274, 8604}}";
sepNavSelRange = "{18871, 194}";
sepNavVisRange = "{18844, 1484}";
sepNavWindowFrame = "{{642, 58}, {1321, 820}}";
};
};
8BA05A690720730100365D66 /* SoftClock3Version.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1062}}";
sepNavSelRange = "{2912, 0}";
sepNavVisRange = "{967, 2008}";
sepNavWindowFrame = "{{748, 50}, {845, 828}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {516, 23430}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1336}";
};
};
8BC6025B073B072D006C4272 /* SoftClock3.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 2376}}";
sepNavSelRange = "{3015, 0}";
sepNavVisRange = "{2437, 917}";
sepNavWindowFrame = "{{619, 177}, {853, 701}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* SoftClock3 */ = {
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 /* SoftClock3.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* SoftClock3.r */; };
8BA05A6B0720730100365D66 /* SoftClock3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* SoftClock3.cpp */; };
8BA05A6E0720730100365D66 /* SoftClock3Version.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* SoftClock3Version.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 /* SoftClock3.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* SoftClock3.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 /* SoftClock3.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SoftClock3.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* SoftClock3.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = SoftClock3.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* SoftClock3.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = SoftClock3.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* SoftClock3Version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoftClock3Version.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 /* SoftClock3.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoftClock3.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* SoftClock3.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SoftClock3.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 /* SoftClock3 */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = SoftClock3;
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 /* SoftClock3.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* SoftClock3.h */,
8BA05A660720730100365D66 /* SoftClock3.cpp */,
8BA05A670720730100365D66 /* SoftClock3.exp */,
8BA05A680720730100365D66 /* SoftClock3.r */,
8BA05A690720730100365D66 /* SoftClock3Version.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 /* SoftClock3Version.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 /* SoftClock3.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 /* SoftClock3 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "SoftClock3" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = SoftClock3;
productInstallPath = "$(HOME)/Library/Bundles";
productName = SoftClock3;
productReference = 8D01CCD20486CAD60068D4B7 /* SoftClock3.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 "SoftClock3" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* SoftClock3 */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* SoftClock3 */,
);
};
/* 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 /* SoftClock3.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* SoftClock3.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 = SoftClock3.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 = SoftClock3;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = SoftClock3.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 = SoftClock3;
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 "SoftClock3" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "SoftClock3" */ = {
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: SoftClock3Version.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 __SoftClock3Version_h__
#define __SoftClock3Version_h__
#ifdef DEBUG
#define kSoftClock3Version 0xFFFFFFFF
#else
#define kSoftClock3Version 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define SoftClock3_COMP_MANF 'Dthr'
#define SoftClock3_COMP_SUBTYPE 'sfc3'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

View file

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

View file

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

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,311 @@
/*
* File: TapeHack2.cpp
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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.
*
*/
/*=============================================================================
TapeHack2.cpp
=============================================================================*/
#include "TapeHack2.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMPONENT_ENTRY(TapeHack2)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::TapeHack2
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TapeHack2::TapeHack2(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::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;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// TapeHack2::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____TapeHack2EffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::TapeHack2Kernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TapeHack2::TapeHack2Kernel::Reset()
{
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0;}
avgPos = 0;
lastDarkL = 0.0;
//preTapeHack
fpd = 1.0; while (fpd < 16386) fpd = rand()*UINT32_MAX;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::TapeHack2Kernel::Process
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TapeHack2::TapeHack2Kernel::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();
int spacing = floor(overallscale*2.0);
if (spacing < 2) spacing = 2; if (spacing > 32) spacing = 32;
double inputGain = GetParameter( kParam_A )*10.0;
double outputGain = GetParameter( kParam_B )*0.9239;
double wet = GetParameter( kParam_C );
while (nSampleFrames-- > 0) {
double inputSampleL = *sourceP;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpd * 1.18e-17;
double drySampleL = inputSampleL;
//begin Left
inputSampleL *= inputGain;
double darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
avg32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += avg32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
avg16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += avg16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
avg8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += avg8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
avg4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += avg4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
avg2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x];}
darkSampleL /= 2.0;
} //only update after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
inputSampleL = fmax(fmin(inputSampleL,2.305929007734908),-2.305929007734908);
double addtwo = inputSampleL * inputSampleL;
double empower = inputSampleL * addtwo; // inputSampleL to the third power
inputSampleL -= (empower / 6.0);
empower *= addtwo; // to the fifth power
inputSampleL += (empower / 69.0);
empower *= addtwo; //seventh
inputSampleL -= (empower / 2530.08);
empower *= addtwo; //ninth
inputSampleL += (empower / 224985.6);
empower *= addtwo; //eleventh
inputSampleL -= (empower / 9979200.0f);
//this is a degenerate form of a Taylor Series to approximate sin()
darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x];}
darkSampleL /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
//use the previously calculated depth of the filter
inputSampleL = (inputSampleL * outputGain * wet) + (drySampleL * (1.0-wet));
//end Left
//begin 32 bit floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
inputSampleL += ((double(fpd)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit floating point dither
*destP = inputSampleL;
sourceP += inNumChannels; destP += inNumChannels;
}
}

View file

@ -0,0 +1 @@
_TapeHack2Entry

View file

@ -0,0 +1,154 @@
/*
* File: TapeHack2.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "TapeHack2Version.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __TapeHack2_h__
#define __TapeHack2_h__
#pragma mark ____TapeHack2 Parameters
// parameters
static const float kDefaultValue_ParamA = 0.1;
static const float kDefaultValue_ParamB = 1.0;
static const float kDefaultValue_ParamC = 1.0;
static CFStringRef kParameterAName = CFSTR("Input");
static CFStringRef kParameterBName = CFSTR("Output");
static CFStringRef kParameterCName = CFSTR("Dry/Wet");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
//Add your parameters here...
kNumberOfParameters=3
};
#pragma mark ____TapeHack2
class TapeHack2 : public AUEffectBase
{
public:
TapeHack2(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~TapeHack2 () { delete mDebugDispatcher; }
#endif
virtual AUKernelBase * NewKernel() { return new TapeHack2Kernel(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 kTapeHack2Version; }
protected:
class TapeHack2Kernel : public AUKernelBase // most of the real work happens here
{
public:
TapeHack2Kernel(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 avg32L[33];
double avg16L[17];
double avg8L[9];
double avg4L[5];
double avg2L[3];
double post32L[33];
double post16L[17];
double post8L[9];
double post4L[5];
double post2L[3];
int avgPos;
double lastDarkL;
//preTapeHack
uint32_t fpd;
};
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: TapeHack2.r
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "TapeHack2Version.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_TapeHack2 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TapeHack2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_TapeHack2
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE TapeHack2_COMP_SUBTYPE
#define COMP_MANUF TapeHack2_COMP_MANF
#define VERSION kTapeHack2Version
#define NAME "Airwindows: TapeHack2"
#define DESCRIPTION "TapeHack2 AU"
#define ENTRY_POINT "TapeHack2Entry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,137 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* TapeHack2 */;
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 = 789944008;
PBXWorkspaceStateSaveDate = 789944008;
};
perUserProjectItems = {
8B2C038B2F15696A0045AF83 /* PlistBookmark */ = 8B2C038B2F15696A0045AF83 /* PlistBookmark */;
8B2C038D2F15696A0045AF83 /* PBXTextBookmark */ = 8B2C038D2F15696A0045AF83 /* PBXTextBookmark */;
8B2C04612F159D3E0045AF83 /* PBXTextBookmark */ = 8B2C04612F159D3E0045AF83 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B2C038B2F15696A0045AF83 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/TapeHack2/Info.plist;
rLen = 0;
rLoc = 9223372036854775808;
};
8B2C038D2F15696A0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* TapeHack2Version.h */;
name = "TapeHack2Version.h: 54";
rLen = 0;
rLoc = 2905;
rType = 0;
vrLen = 241;
vrLoc = 2726;
};
8B2C04612F159D3E0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* TapeHack2Version.h */;
name = "TapeHack2Version.h: 54";
rLen = 0;
rLoc = 2905;
rType = 0;
vrLen = 235;
vrLoc = 2732;
};
8BA05A660720730100365D66 /* TapeHack2.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 5616}}";
sepNavSelRange = "{11503, 1023}";
sepNavVisRange = "{11359, 1262}";
sepNavWindowFrame = "{{8, 91}, {883, 787}}";
};
};
8BA05A690720730100365D66 /* TapeHack2Version.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1038, 1242}}";
sepNavSelRange = "{2905, 0}";
sepNavVisRange = "{2732, 235}";
sepNavWindowFrame = "{{15, 38}, {768, 840}}";
};
};
8BC6025B073B072D006C4272 /* TapeHack2.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 3312}}";
sepNavSelRange = "{5237, 254}";
sepNavVisRange = "{4785, 834}";
sepNavWindowFrame = "{{27, 38}, {768, 840}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* TapeHack2 */ = {
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 /* TapeHack2.r in Rez */ = {isa = PBXBuildFile; fileRef = 8BA05A680720730100365D66 /* TapeHack2.r */; };
8BA05A6B0720730100365D66 /* TapeHack2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* TapeHack2.cpp */; };
8BA05A6E0720730100365D66 /* TapeHack2Version.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* TapeHack2Version.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 /* TapeHack2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* TapeHack2.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 /* TapeHack2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = TapeHack2.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* TapeHack2.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = TapeHack2.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* TapeHack2.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = TapeHack2.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* TapeHack2Version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TapeHack2Version.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 /* TapeHack2.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TapeHack2.h; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* TapeHack2.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TapeHack2.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 /* TapeHack2 */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = TapeHack2;
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 /* TapeHack2.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* TapeHack2.h */,
8BA05A660720730100365D66 /* TapeHack2.cpp */,
8BA05A670720730100365D66 /* TapeHack2.exp */,
8BA05A680720730100365D66 /* TapeHack2.r */,
8BA05A690720730100365D66 /* TapeHack2Version.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 /* TapeHack2Version.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 /* TapeHack2.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 /* TapeHack2 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "TapeHack2" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
8D01CCCF0486CAD60068D4B7 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = TapeHack2;
productInstallPath = "$(HOME)/Library/Bundles";
productName = TapeHack2;
productReference = 8D01CCD20486CAD60068D4B7 /* TapeHack2.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 "TapeHack2" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 089C166AFE841209C02AAC07 /* TapeHack2 */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* TapeHack2 */,
);
};
/* 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 /* TapeHack2.r in Rez */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D01CCCB0486CAD60068D4B7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8BA05A6B0720730100365D66 /* TapeHack2.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 = TapeHack2.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 = TapeHack2;
WRAPPER_EXTENSION = component;
};
name = Debug;
};
3E4BA245089833B7007656EC /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
ppc,
i386,
x86_64,
);
EXPORTED_SYMBOLS_FILE = TapeHack2.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 = TapeHack2;
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 "TapeHack2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "TapeHack2" */ = {
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: TapeHack2Version.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 __TapeHack2Version_h__
#define __TapeHack2Version_h__
#ifdef DEBUG
#define kTapeHack2Version 0xFFFFFFFF
#else
#define kTapeHack2Version 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define TapeHack2_COMP_MANF 'Dthr'
#define TapeHack2_COMP_SUBTYPE 'tha2'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#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

@ -437,14 +437,13 @@ ComponentResult ConsoleHChannel::Reset(AudioUnitScope inScope, AudioUnitElement
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -660,15 +659,16 @@ OSStatus ConsoleHChannel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAct
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -720,6 +720,39 @@ OSStatus ConsoleHChannel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAct
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;

View file

@ -283,12 +283,20 @@ public:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double panA;
double panB;

View file

@ -404,14 +404,13 @@ void ConsoleHPre::ConsoleHPreKernel::Reset()
dBaXL = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0;
lastSlewpleL = 0.0;
lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -618,11 +617,13 @@ void ConsoleHPre::ConsoleHPreKernel::Process( const Float32 *inSourceP,
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x];}
darkSampleL /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL,1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
//begin Discontinuity section
inputSampleL *= moreTapeHack;
inputSampleL *= moreDiscontinuity;
@ -650,6 +651,37 @@ void ConsoleHPre::ConsoleHPreKernel::Process( const Float32 *inSourceP,
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x];}
darkSampleL /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
//use the previously calculated depth of the filter
}
double smoothEQL = inputSampleL;

View file

@ -280,10 +280,14 @@ public:
double avg8L[9];
double avg4L[5];
double avg2L[3];
double post32L[33];
double post16L[17];
double post8L[9];
double post4L[5];
double post2L[3];
int avgPos;
double lastSlewL;
double lastSlewpleL;
//preTapeHack
double lastDarkL;
//preTapeHack
double inTrimA;
double inTrimB;

View file

@ -364,14 +364,13 @@ ComponentResult ConsoleX2Channel::Reset(AudioUnitScope inScope, AudioUnitElemen
dBaXR = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; avg32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; avg16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; avg8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; avg4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; avg2R[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0; avg32R[x] = 0.0; post32R[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0; avg16R[x] = 0.0; post16R[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0; avg8R[x] = 0.0; post8R[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0; avg4R[x] = 0.0; post4R[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0; avg2R[x] = 0.0; post2R[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0; lastSlewR = 0.0;
lastSlewpleL = 0.0; lastSlewpleR = 0.0;
lastDarkL = 0.0; lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -596,15 +595,16 @@ OSStatus ConsoleX2Channel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAc
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x]; darkSampleR += avg2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL*lastSlewL*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223);
lastSlewR += fabs(lastSlewpleR-inputSampleR); lastSlewpleR = inputSampleR;
double avgSlewR = fmin(lastSlewR*lastSlewR*(0.0635-(overallscale*0.0018436)),1.0);
lastSlewR = fmax(lastSlewR*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update avgPos after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
double avgSlewR = fmin(fabs(lastDarkR-inputSampleR)*0.12*overallscale,1.0);
avgSlewR = 1.0-(1.0-avgSlewR*1.0-avgSlewR);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
lastDarkR = darkSampleR;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -656,6 +656,39 @@ OSStatus ConsoleX2Channel::ProcessBufferLists(AudioUnitRenderActionFlags & ioAc
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
darkSampleR = inputSampleR;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL; post32R[avgPos] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x]; darkSampleR += post32R[x];}
darkSampleL /= 32.0; darkSampleR /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL; post16R[avgPos%16] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x]; darkSampleR += post16R[x];}
darkSampleL /= 16.0; darkSampleR /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL; post8R[avgPos%8] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x]; darkSampleR += post8R[x];}
darkSampleL /= 8.0; darkSampleR /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL; post4R[avgPos%4] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x]; darkSampleR += post4R[x];}
darkSampleL /= 4.0; darkSampleR /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL; post2R[avgPos%2] = darkSampleR;
darkSampleL = 0.0; darkSampleR = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x]; darkSampleR += post2R[x];}
darkSampleL /= 2.0; darkSampleR /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
inputSampleR = (inputSampleR*(1.0-avgSlewR)) + (darkSampleR*avgSlewR);
//use the previously calculated depth of the filter
}
if (!eqOff) {

View file

@ -255,12 +255,20 @@ public:
double avg4R[5];
double avg2L[3];
double avg2R[3];
double post32L[33];
double post32R[33];
double post16L[17];
double post16R[17];
double post8L[9];
double post8R[9];
double post4L[5];
double post4R[5];
double post2L[3];
double post2R[3];
double lastDarkL;
double lastDarkR;
int avgPos;
double lastSlewL;
double lastSlewR;
double lastSlewpleL;
double lastSlewpleR;
//preTapeHack
//preTapeHack
double panA;
double panB;

View file

@ -331,14 +331,13 @@ void ConsoleX2Pre::ConsoleX2PreKernel::Reset()
dBaXL = 1;
//Discontapeity
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0;}
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0;}
avgPos = 0;
lastSlewL = 0.0;
lastSlewpleL = 0.0;
lastDarkL = 0.0;
//preTapeHack
lFreqA = 1.0; lFreqB = 1.0;
@ -554,11 +553,13 @@ void ConsoleX2Pre::ConsoleX2PreKernel::Process( const Float32 *inSourceP,
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x];}
darkSampleL /= 2.0;
} avgPos++;
lastSlewL += fabs(lastSlewpleL-inputSampleL); lastSlewpleL = inputSampleL;
double avgSlewL = fmin(lastSlewL,1.0);
lastSlewL = fmax(lastSlewL*0.78,2.39996322972865332223); //look up Golden Angle, it's cool
} //only update after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
//begin Discontinuity section
inputSampleL *= moreDiscontinuity;
dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5);
@ -585,6 +586,36 @@ void ConsoleX2Pre::ConsoleX2PreKernel::Process( const Float32 *inSourceP,
//this is a degenerate form of a Taylor Series to approximate sin()
//end TapeHack section
//Discontapeity
darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x];}
darkSampleL /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
//use the previously calculated depth of the filter
}
if (!eqOff) {

View file

@ -251,10 +251,14 @@ public:
double avg8L[9];
double avg4L[5];
double avg2L[3];
double post32L[33];
double post16L[17];
double post8L[9];
double post4L[5];
double post2L[3];
int avgPos;
double lastSlewL;
double lastSlewpleL;
//preTapeHack
double lastDarkL;
//preTapeHack
double inTrimA;
double inTrimB;

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>sfc3</string>
<key>type</key>
<string>aufx</string>
<key>version</key>
<integer>65536</integer>
</dict>
</array>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PROJECTNAMEASIDENTIFIER}</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>Dthr</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,456 @@
/*
* File: SoftClock3.cpp
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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.
*
*/
/*=============================================================================
SoftClock3.cpp
=============================================================================*/
#include "SoftClock3.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUDIOCOMPONENT_ENTRY(AUBaseFactory, SoftClock3)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::SoftClock3
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SoftClock3::SoftClock3(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
SetParameter(kParam_D, kDefaultValue_ParamD );
SetParameter(kParam_E, kDefaultValue_ParamE );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::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_Indexed;
outParameterInfo.minValue = 40;
outParameterInfo.maxValue = 240;
outParameterInfo.defaultValue = kDefaultValue_ParamA;
break;
case kParam_B:
AUBase::FillInParameterName (outParameterInfo, kParameterBName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_CustomUnit;
switch ((int)GetParameter( kParam_B )){
case 0:outParameterInfo.unitName = CFSTR("0"); break;
case 1: outParameterInfo.unitName = CFSTR("1"); break;
case 2:outParameterInfo.unitName = CFSTR("2"); break;
case 3:outParameterInfo.unitName = CFSTR("3"); break;
case 4:outParameterInfo.unitName = CFSTR("4"); break;
case 5:outParameterInfo.unitName = CFSTR("5"); break;
case 6:outParameterInfo.unitName = CFSTR("6"); break;
case 7:outParameterInfo.unitName = CFSTR("7"); break;
case 8:outParameterInfo.unitName = CFSTR("8"); break;
case 9:outParameterInfo.unitName = CFSTR("9"); break;
case 10:outParameterInfo.unitName = CFSTR("10"); break;
case 11:outParameterInfo.unitName = CFSTR("11"); break;
case 12:outParameterInfo.unitName = CFSTR("11"); break;
case 13:outParameterInfo.unitName = CFSTR("11"); break;
case 14:outParameterInfo.unitName = CFSTR("11"); break;
case 15:outParameterInfo.unitName = CFSTR("13"); break;
case 16:outParameterInfo.unitName = CFSTR("16"); break;
case 17:outParameterInfo.unitName = CFSTR("13"); break;
case 18:outParameterInfo.unitName = CFSTR("13"); break;
case 19:outParameterInfo.unitName = CFSTR("17"); break;
case 20:outParameterInfo.unitName = CFSTR("17"); break;
case 21:outParameterInfo.unitName = CFSTR("17"); break;
case 22:outParameterInfo.unitName = CFSTR("17"); break;
case 23:outParameterInfo.unitName = CFSTR("19"); break;
case 24:outParameterInfo.unitName = CFSTR("24"); break;
case 25:outParameterInfo.unitName = CFSTR("19"); break;
case 26:outParameterInfo.unitName = CFSTR("19"); break;
case 27:outParameterInfo.unitName = CFSTR("19"); break;
case 28:outParameterInfo.unitName = CFSTR("23"); break;
case 29:outParameterInfo.unitName = CFSTR("23"); break;
case 30:outParameterInfo.unitName = CFSTR("23"); break;
case 31:outParameterInfo.unitName = CFSTR("23"); break;
case 32:outParameterInfo.unitName = CFSTR("32"); break;
default: break;
}
outParameterInfo.minValue = 0;
outParameterInfo.maxValue = 32;
outParameterInfo.defaultValue = kDefaultValue_ParamB;
break;
case kParam_C:
AUBase::FillInParameterName (outParameterInfo, kParameterCName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Indexed;
outParameterInfo.minValue = 0;
outParameterInfo.maxValue = 16;
outParameterInfo.defaultValue = kDefaultValue_ParamC;
break;
case kParam_D:
AUBase::FillInParameterName (outParameterInfo, kParameterDName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Indexed;
outParameterInfo.minValue = 0;
outParameterInfo.maxValue = 1;
outParameterInfo.defaultValue = kDefaultValue_ParamD;
break;
case kParam_E:
AUBase::FillInParameterName (outParameterInfo, kParameterEName, false);
outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
outParameterInfo.minValue = 0.0;
outParameterInfo.maxValue = 1.0;
outParameterInfo.defaultValue = kDefaultValue_ParamE;
break;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// state that plugin supports only stereo-in/stereo-out processing
UInt32 SoftClock3::SupportedNumChannels(const AUChannelInfo ** outInfo)
{
if (outInfo != NULL)
{
static AUChannelInfo info;
info.inChannels = 2;
info.outChannels = 2;
*outInfo = &info;
}
return 1;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// SoftClock3::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____SoftClock3EffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::SoftClock3Kernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult SoftClock3::Reset(AudioUnitScope inScope, AudioUnitElement inElement)
{
sinePos = 0.0;
barPos = 0.0;
beatPos = 0;
for (int x = 0; x < 34; x++) {beatAccent[x] = 0.0; beatSwing[x] = 0.0;}
inc = 0.0;
beatTable[0]=0;
beatTable[1]=1;
beatTable[2]=2;
beatTable[3]=3;
beatTable[4]=4;
beatTable[5]=5;
beatTable[6]=6;
beatTable[7]=7;
beatTable[8]=8;
beatTable[9]=9;
beatTable[10]=10;
beatTable[11]=11;
beatTable[12]=11;
beatTable[13]=11;
beatTable[14]=11;
beatTable[15]=13;
beatTable[16]=16;
beatTable[17]=13;
beatTable[18]=13;
beatTable[19]=17;
beatTable[20]=17;
beatTable[21]=17;
beatTable[22]=17;
beatTable[23]=19;
beatTable[24]=24;
beatTable[25]=19;
beatTable[26]=19;
beatTable[27]=19;
beatTable[28]=23;
beatTable[29]=23;
beatTable[30]=23;
beatTable[31]=23;
beatTable[32]=32;
beatTable[33]=32;
beatTable[34]=32;
currentBPM = 0;
step = 0.0;
swagger = 0.0;
fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
return noErr;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SoftClock3::ProcessBufferLists
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OSStatus SoftClock3::ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer,
AudioBufferList & outBuffer,
UInt32 inFramesToProcess)
{
Float32 * inputL = (Float32*)(inBuffer.mBuffers[0].mData);
Float32 * inputR = (Float32*)(inBuffer.mBuffers[1].mData);
Float32 * outputL = (Float32*)(outBuffer.mBuffers[0].mData);
Float32 * outputR = (Float32*)(outBuffer.mBuffers[1].mData);
UInt32 nSampleFrames = inFramesToProcess;
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= GetSampleRate();
int bpm = GetParameter( kParam_A );
int beatCode = GetParameter( kParam_B );
double notes = (double)fmax(GetParameter( kParam_C )/4.0, 0.125);
double bpmTarget = (GetSampleRate()*60.0)/((double)bpm*notes);
double triplet = 0.0;
if (GetParameter( kParam_D ) > 0) triplet = 1.0;
double accent = GetParameter( kParam_E );
if (bpm != currentBPM) {
currentBPM = bpm;
step = 20.0;
double trial = 250.0;
while (trial > bpm) {step -= 1.0; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest 'flow' energy state UNDER the real bpm, and will step up more slowly
while (trial < bpm) {step += 0.01; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest tenth of the energy state and have overshot
while (trial > bpm) {step -= 0.001; trial = (0.016666666666*pow(step,M_PI))+(step*M_PI)+20;}
//we now have the nearest hundredth to the correct energy state, and can throw away 'trial'
step = step-((int)step); //and calculate speed based on the fractional remainder of 'step'
step = ((0.5-fabs(step-0.5))*2.0) * 0.75;
swagger = pow((0.5-fabs(step-0.5))*2.0,1.618033988749894) * 0.5 * accent;
//and turn it into the 'speed' control
//with step 0.0 being 'flow', 0.25 being 'groove', 0.5 being 'edge' and 0.75 being 'tude'
//turned into a linear speed control where edge is top step and flow being lowest step.
}
double swing = (triplet+swagger)*bpmTarget*0.33333;
//swing makes beats hit LATER, so the One is 0.0
int beatMax = beatTable[beatCode];
//only some counts are literal, others are ways to do prime grooves with different subrhythms
for (int x = 0; x < (beatMax+1); x++) {
beatAccent[x] = ((double)fabs((double)beatMax-((double)x*2.0)))/(double)(beatMax*1.618033988749894);
if (x % 2 > 0) beatSwing[x] = (swagger*(1.0-beatAccent[x]));
else beatSwing[x] = swing;
} //this makes the non-accented beats drop down to quiet and back up to half volume
//we're also decoupling swing from triplet feel unless actually playing triplets
//otherwise, it's part of how you hear accents and tempos
if (beatCode > 0) beatAccent[1] = 0.9; beatSwing[1] = 0.0; //first note is an accent at full crank
switch (beatCode)
{
case 0: break; //not used
case 1: break; //1
case 2: break; //2
case 3: break; //3
case 4: beatAccent[3]=0.9;
beatSwing[3]=0.0; break; //4-22
case 5: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //5-32
case 6: beatAccent[4]=0.9;
beatSwing[4]=0.0; break; //6-33
case 7: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //7-43
case 8: beatAccent[5]=0.9;
beatSwing[5]=0.0; break; //8-44
case 9: beatAccent[4]=0.9; beatAccent[7]=0.8;
beatSwing[4]=0.0; beatSwing[7]=0.0; break; //9-333
case 10: beatAccent[6]=0.9;
beatSwing[6]=0.0; break; //10-55
case 11: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //11-3332
case 12: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //11-443
case 13: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //11-551
case 14: beatAccent[7]=0.9;
beatSwing[7]=0.0; break; //11-65
case 15: beatAccent[4]=0.9; beatAccent[7]=0.8; beatAccent[10]=0.7;
beatSwing[4]=0.0; beatSwing[7]=0.0; beatSwing[10]=0.0; break; //13-3334
case 16: beatAccent[9]=0.9;
beatSwing[9]=0.0; break; //16-88
case 17: beatAccent[5]=0.9; beatAccent[9]=0.8;
beatSwing[5]=0.0; beatSwing[9]=0.0; break; //13-445
case 18: beatAccent[6]=0.9; beatAccent[11]=0.8;
beatSwing[6]=0.0; beatSwing[11]=0.0; break; //13-553
case 19: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //17-44441
case 20: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //17-5552
case 21: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //17-773
case 22: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //17-881
case 23: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; break; //19-44443
case 24: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //24-888
case 25: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //19-5554
case 26: beatAccent[8]=0.9; beatAccent[15]=0.8;
beatSwing[8]=0.0; beatSwing[15]=0.0; break; //19-775
case 27: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //19-883
case 28: beatAccent[5]=0.9; beatAccent[9]=0.85; beatAccent[13]=0.8; beatAccent[17]=0.75; beatAccent[21]=0.7;
beatSwing[5]=0.0; beatSwing[9]=0.0; beatSwing[13]=0.0; beatSwing[17]=0.0; beatSwing[21]=0.0; break; //23-444443
case 29: beatAccent[6]=0.9; beatAccent[11]=0.8; beatAccent[16]=0.7;
beatSwing[6]=0.0; beatSwing[11]=0.0; beatSwing[16]=0.0; break; //23-5558
case 30: beatAccent[8]=0.9; beatAccent[15]=0.8; beatAccent[22]=0.7;
beatSwing[8]=0.0; beatSwing[15]=0.0; beatSwing[22]=0.0; break; //23-7772
case 31: beatAccent[9]=0.9; beatAccent[17]=0.8;
beatSwing[9]=0.0; beatSwing[17]=0.0; break; //23-887
case 32: beatAccent[9]=0.9; beatAccent[17]=0.8; beatAccent[25]=0.7;
beatSwing[9]=0.0; beatSwing[17]=0.0; beatSwing[25]=0.0; break; //32-8888
default: break;
}
double chaseSpeed = ((step*0.000125)+0.0000125)/overallscale;
double rootSpeed = 0.9999-(chaseSpeed*((2.0*step)+2.0));
double pulseWidth = (0.085+(accent*0.04)-((1.0-step)*0.06))/chaseSpeed;
while (nSampleFrames-- > 0) {
double inputSampleL = *inputL;
double inputSampleR = *inputR;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17;
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
barPos += 1.0;
if (barPos>bpmTarget) {
barPos=0.0;
beatPos++;
if (beatPos>beatMax) beatPos=1;
}
if ((barPos < (pulseWidth+beatSwing[beatPos])) && (barPos > beatSwing[beatPos]))
inc = (((beatAccent[beatPos]*accent)+(1.0-accent))*chaseSpeed)+(inc*(1.0-chaseSpeed));
else
inc *= rootSpeed;
sinePos += inc;
if (sinePos > 6.283185307179586) sinePos -= 6.283185307179586;
inputSampleL = inputSampleR = sin(sin(sinePos)*inc*5.0);
//begin 32 bit stereo floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5;
inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
frexpf((float)inputSampleR, &expon);
fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;
inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit stereo floating point dither
*outputL = inputSampleL;
*outputR = inputSampleR;
//direct stereo out
inputL += 1;
inputR += 1;
outputL += 1;
outputR += 1;
}
return noErr;
}

View file

@ -0,0 +1,2 @@
_SoftClock3Entry
_SoftClock3Factory

View file

@ -0,0 +1,141 @@
/*
* File: SoftClock3.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "SoftClock3Version.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __SoftClock3_h__
#define __SoftClock3_h__
#pragma mark ____SoftClock3 Parameters
// parameters
static const float kDefaultValue_ParamA = 120;
static const float kDefaultValue_ParamB = 4;
static const float kDefaultValue_ParamC = 4;
static const float kDefaultValue_ParamD = 0;
static const float kDefaultValue_ParamE = 0.5;
static CFStringRef kParameterAName = CFSTR("Tempo");
static CFStringRef kParameterBName = CFSTR("Count");
static CFStringRef kParameterCName = CFSTR("Tuple");
static CFStringRef kParameterDName = CFSTR("Triplet");
static CFStringRef kParameterEName = CFSTR("Flavor");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
kParam_D =3,
kParam_E =4,
//Add your parameters here...
kNumberOfParameters=5
};
#pragma mark ____SoftClock3
class SoftClock3 : public AUEffectBase
{
public:
SoftClock3(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~SoftClock3 () { delete mDebugDispatcher; }
#endif
virtual ComponentResult Reset(AudioUnitScope inScope, AudioUnitElement inElement);
virtual OSStatus ProcessBufferLists(AudioUnitRenderActionFlags & ioActionFlags,
const AudioBufferList & inBuffer, AudioBufferList & outBuffer,
UInt32 inFramesToProcess);
virtual UInt32 SupportedNumChannels(const AUChannelInfo ** outInfo);
virtual ComponentResult GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings);
virtual ComponentResult GetParameterInfo(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
AudioUnitParameterInfo &outParameterInfo);
virtual ComponentResult GetPropertyInfo(AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable );
virtual ComponentResult GetProperty(AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData);
virtual ComponentResult Initialize();
virtual bool SupportsTail () { return true; }
virtual Float64 GetTailTime() {return (1.0/GetSampleRate())*0.0;} //in SECONDS! gsr * a number = in samples
virtual Float64 GetLatency() {return (1.0/GetSampleRate())*0.0;} // in SECONDS! gsr * a number = in samples
/*! @method Version */
virtual ComponentResult Version() { return kSoftClock3Version; }
private:
double sinePos;
double barPos;
double inc;
int beatPos;
double beatAccent[35];
double beatSwing[35];
int beatTable[35];
int currentBPM;
double step;
double swagger;
uint32_t fpdL;
uint32_t fpdR;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: SoftClock3.r
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "SoftClock3Version.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_SoftClock3 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SoftClock3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_SoftClock3
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE SoftClock3_COMP_SUBTYPE
#define COMP_MANUF SoftClock3_COMP_MANF
#define VERSION kSoftClock3Version
#define NAME "Airwindows: SoftClock3"
#define DESCRIPTION "SoftClock3 AU"
#define ENTRY_POINT "SoftClock3Entry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,107 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* SoftClock3 */;
codeSenseManager = 8BD3CCB9148830B20062E48C /* Code sense */;
perUserDictionary = {
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
364,
20,
48,
43,
43,
20,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
PBXFileDataSource_Target_ColumnID,
);
};
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
188,
60,
20,
48,
43,
43,
);
PBXFileTableDataSourceColumnsKey = (
PBXFileDataSource_FiletypeID,
PBXFileDataSource_Filename_ColumnID,
PBXTargetDataSource_PrimaryAttribute,
PBXFileDataSource_Built_ColumnID,
PBXFileDataSource_ObjectSize_ColumnID,
PBXFileDataSource_Errors_ColumnID,
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 789925227;
PBXWorkspaceStateSaveDate = 789925227;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8BA05A660720730100365D66 /* SoftClock3.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1274, 8604}}";
sepNavSelRange = "{18871, 194}";
sepNavVisRange = "{18844, 1484}";
sepNavWindowFrame = "{{642, 58}, {1321, 820}}";
};
};
8BA05A690720730100365D66 /* SoftClock3Version.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 1062}}";
sepNavSelRange = "{2912, 0}";
sepNavVisRange = "{967, 2008}";
sepNavWindowFrame = "{{748, 50}, {845, 828}}";
};
};
8BA05A7F072073D200365D66 /* AUBase.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {516, 23430}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1336}";
};
};
8BC6025B073B072D006C4272 /* SoftClock3.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 2376}}";
sepNavSelRange = "{3015, 0}";
sepNavVisRange = "{2437, 917}";
sepNavWindowFrame = "{{619, 177}, {853, 701}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* SoftClock3 */ = {
activeExec = 0;
};
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,965 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
8BA05A6B0720730100365D66 /* SoftClock3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* SoftClock3.cpp */; };
8BA05A6E0720730100365D66 /* SoftClock3Version.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* SoftClock3Version.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 /* SoftClock3.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* SoftClock3.h */; };
8BF6DD2E2F16AFAC00F09130 /* CAExtAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCA62F16AFAC00F09130 /* CAExtAudioFile.h */; };
8BF6DD2F2F16AFAC00F09130 /* CACFMachPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCA72F16AFAC00F09130 /* CACFMachPort.h */; };
8BF6DD302F16AFAC00F09130 /* CABool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCA82F16AFAC00F09130 /* CABool.h */; };
8BF6DD312F16AFAC00F09130 /* CAComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCA92F16AFAC00F09130 /* CAComponent.cpp */; };
8BF6DD322F16AFAC00F09130 /* CADebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCAA2F16AFAC00F09130 /* CADebugger.h */; };
8BF6DD332F16AFAC00F09130 /* CACFNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCAB2F16AFAC00F09130 /* CACFNumber.cpp */; };
8BF6DD342F16AFAC00F09130 /* CAGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCAC2F16AFAC00F09130 /* CAGuard.h */; };
8BF6DD352F16AFAC00F09130 /* CAAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCAD2F16AFAC00F09130 /* CAAtomic.h */; };
8BF6DD362F16AFAC00F09130 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCAE2F16AFAC00F09130 /* CAStreamBasicDescription.h */; };
8BF6DD372F16AFAC00F09130 /* CACFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCAF2F16AFAC00F09130 /* CACFObject.h */; };
8BF6DD382F16AFAC00F09130 /* CAStreamRangedDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB02F16AFAC00F09130 /* CAStreamRangedDescription.h */; };
8BF6DD392F16AFAC00F09130 /* CATokenMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB12F16AFAC00F09130 /* CATokenMap.h */; };
8BF6DD3A2F16AFAC00F09130 /* CAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB22F16AFAC00F09130 /* CAComponent.h */; };
8BF6DD3B2F16AFAC00F09130 /* CAAudioBufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB32F16AFAC00F09130 /* CAAudioBufferList.h */; };
8BF6DD3C2F16AFAC00F09130 /* CAAudioUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB42F16AFAC00F09130 /* CAAudioUnit.h */; };
8BF6DD3D2F16AFAC00F09130 /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB52F16AFAC00F09130 /* CAAUParameter.h */; };
8BF6DD3E2F16AFAC00F09130 /* CAException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB62F16AFAC00F09130 /* CAException.h */; };
8BF6DD3F2F16AFAC00F09130 /* CAAUProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCB72F16AFAC00F09130 /* CAAUProcessor.cpp */; };
8BF6DD402F16AFAC00F09130 /* CAAUProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB82F16AFAC00F09130 /* CAAUProcessor.h */; };
8BF6DD412F16AFAC00F09130 /* CAProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCB92F16AFAC00F09130 /* CAProcess.h */; };
8BF6DD422F16AFAC00F09130 /* CACFDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCBA2F16AFAC00F09130 /* CACFDictionary.h */; };
8BF6DD432F16AFAC00F09130 /* CAPThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCBB2F16AFAC00F09130 /* CAPThread.h */; };
8BF6DD442F16AFAC00F09130 /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCBC2F16AFAC00F09130 /* CAAUParameter.cpp */; };
8BF6DD452F16AFAC00F09130 /* CAAudioTimeStamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCBD2F16AFAC00F09130 /* CAAudioTimeStamp.h */; };
8BF6DD462F16AFAC00F09130 /* CAFilePathUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCBE2F16AFAC00F09130 /* CAFilePathUtils.cpp */; };
8BF6DD472F16AFAC00F09130 /* CAAudioValueRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCBF2F16AFAC00F09130 /* CAAudioValueRange.h */; };
8BF6DD482F16AFAC00F09130 /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCC02F16AFAC00F09130 /* CAVectorUnitTypes.h */; };
8BF6DD492F16AFAC00F09130 /* CAAudioChannelLayoutObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCC12F16AFAC00F09130 /* CAAudioChannelLayoutObject.cpp */; };
8BF6DD4A2F16AFAC00F09130 /* CAGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCC22F16AFAC00F09130 /* CAGuard.cpp */; };
8BF6DD4B2F16AFAC00F09130 /* CACFNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCC32F16AFAC00F09130 /* CACFNumber.h */; };
8BF6DD4C2F16AFAC00F09130 /* CACFDistributedNotification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCC42F16AFAC00F09130 /* CACFDistributedNotification.cpp */; };
8BF6DD4D2F16AFAD00F09130 /* CACFString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCC52F16AFAC00F09130 /* CACFString.h */; };
8BF6DD4E2F16AFAD00F09130 /* CAAUMIDIMapManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCC62F16AFAC00F09130 /* CAAUMIDIMapManager.cpp */; };
8BF6DD4F2F16AFAD00F09130 /* CAComponentDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCC72F16AFAC00F09130 /* CAComponentDescription.cpp */; };
8BF6DD502F16AFAD00F09130 /* CAHostTimeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCC82F16AFAC00F09130 /* CAHostTimeBase.h */; };
8BF6DD512F16AFAD00F09130 /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCC92F16AFAC00F09130 /* CADebugMacros.cpp */; };
8BF6DD522F16AFAD00F09130 /* CAAudioFileFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCCA2F16AFAC00F09130 /* CAAudioFileFormats.h */; };
8BF6DD532F16AFAD00F09130 /* CAAUMIDIMapManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCCB2F16AFAC00F09130 /* CAAUMIDIMapManager.h */; };
8BF6DD542F16AFAD00F09130 /* CACFDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCCC2F16AFAC00F09130 /* CACFDictionary.cpp */; };
8BF6DD552F16AFAD00F09130 /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCCD2F16AFAC00F09130 /* CAMutex.h */; };
8BF6DD562F16AFAD00F09130 /* CACFString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCCE2F16AFAC00F09130 /* CACFString.cpp */; };
8BF6DD572F16AFAD00F09130 /* CASettingsStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCCF2F16AFAC00F09130 /* CASettingsStorage.h */; };
8BF6DD582F16AFAD00F09130 /* CADebugPrintf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD02F16AFAC00F09130 /* CADebugPrintf.h */; };
8BF6DD592F16AFAD00F09130 /* CAXException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCD12F16AFAC00F09130 /* CAXException.cpp */; };
8BF6DD5A2F16AFAD00F09130 /* CAAUMIDIMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD22F16AFAC00F09130 /* CAAUMIDIMap.h */; };
8BF6DD5B2F16AFAD00F09130 /* AUParamInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD32F16AFAC00F09130 /* AUParamInfo.h */; };
8BF6DD5C2F16AFAD00F09130 /* CABitOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD42F16AFAC00F09130 /* CABitOperations.h */; };
8BF6DD5D2F16AFAD00F09130 /* CACFPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCD52F16AFAC00F09130 /* CACFPreferences.cpp */; };
8BF6DD5E2F16AFAD00F09130 /* CABundleLocker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD62F16AFAC00F09130 /* CABundleLocker.h */; };
8BF6DD5F2F16AFAD00F09130 /* CAPropertyAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD72F16AFAC00F09130 /* CAPropertyAddress.h */; };
8BF6DD602F16AFAD00F09130 /* CAXException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCD82F16AFAC00F09130 /* CAXException.h */; };
8BF6DD612F16AFAD00F09130 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCD92F16AFAC00F09130 /* CAAudioChannelLayout.cpp */; };
8BF6DD622F16AFAD00F09130 /* CAThreadSafeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCDA2F16AFAC00F09130 /* CAThreadSafeList.h */; };
8BF6DD632F16AFAD00F09130 /* CAAudioUnitOutputCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCDB2F16AFAC00F09130 /* CAAudioUnitOutputCapturer.h */; };
8BF6DD642F16AFAD00F09130 /* AUParamInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCDC2F16AFAC00F09130 /* AUParamInfo.cpp */; };
8BF6DD652F16AFAD00F09130 /* CASharedLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCDD2F16AFAC00F09130 /* CASharedLibrary.cpp */; };
8BF6DD662F16AFAD00F09130 /* CAAUMIDIMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCDE2F16AFAC00F09130 /* CAAUMIDIMap.cpp */; };
8BF6DD672F16AFAD00F09130 /* CALogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCDF2F16AFAC00F09130 /* CALogMacros.h */; };
8BF6DD682F16AFAD00F09130 /* CACFMessagePort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCE02F16AFAC00F09130 /* CACFMessagePort.cpp */; };
8BF6DD692F16AFAD00F09130 /* CARingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCE12F16AFAC00F09130 /* CARingBuffer.h */; };
8BF6DD6A2F16AFAD00F09130 /* AUOutputBL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCE22F16AFAC00F09130 /* AUOutputBL.cpp */; };
8BF6DD6B2F16AFAD00F09130 /* CABufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCE32F16AFAC00F09130 /* CABufferList.h */; };
8BF6DD6C2F16AFAD00F09130 /* CASharedLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCE42F16AFAC00F09130 /* CASharedLibrary.h */; };
8BF6DD6D2F16AFAD00F09130 /* CACFData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCE52F16AFAC00F09130 /* CACFData.h */; };
8BF6DD6E2F16AFAD00F09130 /* CAStreamRangedDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCE62F16AFAC00F09130 /* CAStreamRangedDescription.cpp */; };
8BF6DD6F2F16AFAD00F09130 /* CAPThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCE72F16AFAC00F09130 /* CAPThread.cpp */; };
8BF6DD702F16AFAD00F09130 /* CAAutoDisposer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCE82F16AFAC00F09130 /* CAAutoDisposer.h */; };
8BF6DD712F16AFAD00F09130 /* CACFPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCE92F16AFAC00F09130 /* CACFPreferences.h */; };
8BF6DD722F16AFAD00F09130 /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCEA2F16AFAC00F09130 /* CAVectorUnit.cpp */; };
8BF6DD732F16AFAD00F09130 /* CAComponentDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCEB2F16AFAC00F09130 /* CAComponentDescription.h */; };
8BF6DD742F16AFAD00F09130 /* CADebugMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCEC2F16AFAC00F09130 /* CADebugMacros.h */; };
8BF6DD752F16AFAD00F09130 /* AUOutputBL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCED2F16AFAC00F09130 /* AUOutputBL.h */; };
8BF6DD762F16AFAD00F09130 /* CADebugPrintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCEE2F16AFAC00F09130 /* CADebugPrintf.cpp */; };
8BF6DD772F16AFAD00F09130 /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCEF2F16AFAC00F09130 /* CARingBuffer.cpp */; };
8BF6DD782F16AFAD00F09130 /* CACFPlugIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCF02F16AFAC00F09130 /* CACFPlugIn.h */; };
8BF6DD792F16AFAD00F09130 /* CASettingsStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCF12F16AFAC00F09130 /* CASettingsStorage.cpp */; };
8BF6DD7A2F16AFAD00F09130 /* CAMixMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCF22F16AFAC00F09130 /* CAMixMap.h */; };
8BF6DD7B2F16AFAD00F09130 /* CACFDistributedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCF32F16AFAC00F09130 /* CACFDistributedNotification.h */; };
8BF6DD7C2F16AFAD00F09130 /* CAFilePathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCF42F16AFAC00F09130 /* CAFilePathUtils.h */; };
8BF6DD7D2F16AFAD00F09130 /* CATink.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCF52F16AFAC00F09130 /* CATink.h */; };
8BF6DD7E2F16AFAD00F09130 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCF62F16AFAC00F09130 /* CAStreamBasicDescription.cpp */; };
8BF6DD7F2F16AFAD00F09130 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCF72F16AFAC00F09130 /* CAAudioChannelLayout.h */; };
8BF6DD802F16AFAD00F09130 /* CAProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCF82F16AFAC00F09130 /* CAProcess.cpp */; };
8BF6DD812F16AFAD00F09130 /* CAHostTimeBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCF92F16AFAC00F09130 /* CAHostTimeBase.cpp */; };
8BF6DD822F16AFAD00F09130 /* CAPersistence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCFA2F16AFAC00F09130 /* CAPersistence.cpp */; };
8BF6DD832F16AFAD00F09130 /* CAAudioBufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCFB2F16AFAC00F09130 /* CAAudioBufferList.cpp */; };
8BF6DD842F16AFAD00F09130 /* CAAudioTimeStamp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DCFC2F16AFAC00F09130 /* CAAudioTimeStamp.cpp */; };
8BF6DD852F16AFAD00F09130 /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCFD2F16AFAC00F09130 /* CAVectorUnit.h */; };
8BF6DD862F16AFAD00F09130 /* CAByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCFE2F16AFAC00F09130 /* CAByteOrder.h */; };
8BF6DD872F16AFAD00F09130 /* CACFArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DCFF2F16AFAC00F09130 /* CACFArray.h */; };
8BF6DD882F16AFAD00F09130 /* CAAtomicStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD002F16AFAC00F09130 /* CAAtomicStack.h */; };
8BF6DD892F16AFAD00F09130 /* CAReferenceCounted.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD012F16AFAC00F09130 /* CAReferenceCounted.h */; };
8BF6DD8A2F16AFAD00F09130 /* CACFMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD022F16AFAC00F09130 /* CACFMachPort.cpp */; };
8BF6DD8B2F16AFAD00F09130 /* CABufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD032F16AFAC00F09130 /* CABufferList.cpp */; };
8BF6DD8C2F16AFAD00F09130 /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD042F16AFAC00F09130 /* CAMutex.cpp */; };
8BF6DD8D2F16AFAD00F09130 /* CADebugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD052F16AFAC00F09130 /* CADebugger.cpp */; };
8BF6DD8E2F16AFAD00F09130 /* CABundleLocker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD062F16AFAC00F09130 /* CABundleLocker.cpp */; };
8BF6DD8F2F16AFAD00F09130 /* CAAudioFileFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD072F16AFAC00F09130 /* CAAudioFileFormats.cpp */; };
8BF6DD902F16AFAD00F09130 /* CAMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD082F16AFAC00F09130 /* CAMath.h */; };
8BF6DD912F16AFAD00F09130 /* CACFArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD092F16AFAC00F09130 /* CACFArray.cpp */; };
8BF6DD922F16AFAD00F09130 /* CACFMessagePort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD0A2F16AFAC00F09130 /* CACFMessagePort.h */; };
8BF6DD932F16AFAD00F09130 /* CAAudioValueRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD0B2F16AFAC00F09130 /* CAAudioValueRange.cpp */; };
8BF6DD942F16AFAD00F09130 /* CAAudioUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD0C2F16AFAC00F09130 /* CAAudioUnit.cpp */; };
8BF6DD952F16AFAD00F09130 /* AUViewLocalizedStringKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD102F16AFAC00F09130 /* AUViewLocalizedStringKeys.h */; };
8BF6DD962F16AFAD00F09130 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD122F16AFAC00F09130 /* ComponentBase.cpp */; };
8BF6DD972F16AFAD00F09130 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD132F16AFAC00F09130 /* AUScopeElement.cpp */; };
8BF6DD982F16AFAD00F09130 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD142F16AFAC00F09130 /* ComponentBase.h */; };
8BF6DD992F16AFAD00F09130 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD152F16AFAC00F09130 /* AUBase.cpp */; };
8BF6DD9A2F16AFAD00F09130 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD162F16AFAC00F09130 /* AUInputElement.h */; };
8BF6DD9B2F16AFAD00F09130 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD172F16AFAC00F09130 /* AUBase.h */; };
8BF6DD9C2F16AFAD00F09130 /* AUPlugInDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD182F16AFAC00F09130 /* AUPlugInDispatch.h */; };
8BF6DD9D2F16AFAD00F09130 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD192F16AFAC00F09130 /* AUDispatch.h */; };
8BF6DD9E2F16AFAD00F09130 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD1A2F16AFAC00F09130 /* AUOutputElement.cpp */; };
8BF6DDA02F16AFAD00F09130 /* AUPlugInDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD1C2F16AFAC00F09130 /* AUPlugInDispatch.cpp */; };
8BF6DDA12F16AFAD00F09130 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD1D2F16AFAC00F09130 /* AUOutputElement.h */; };
8BF6DDA22F16AFAD00F09130 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD1E2F16AFAC00F09130 /* AUDispatch.cpp */; };
8BF6DDA32F16AFAD00F09130 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD1F2F16AFAC00F09130 /* AUScopeElement.h */; };
8BF6DDA42F16AFAD00F09130 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD202F16AFAC00F09130 /* AUInputElement.cpp */; };
8BF6DDA52F16AFAD00F09130 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD222F16AFAC00F09130 /* AUEffectBase.cpp */; };
8BF6DDA62F16AFAD00F09130 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD232F16AFAC00F09130 /* AUEffectBase.h */; };
8BF6DDA72F16AFAD00F09130 /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD252F16AFAC00F09130 /* AUTimestampGenerator.h */; };
8BF6DDA82F16AFAD00F09130 /* AUBaseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD262F16AFAC00F09130 /* AUBaseHelper.cpp */; };
8BF6DDA92F16AFAD00F09130 /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD272F16AFAC00F09130 /* AUSilentTimeout.h */; };
8BF6DDAA2F16AFAD00F09130 /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD282F16AFAC00F09130 /* AUInputFormatConverter.h */; };
8BF6DDAB2F16AFAD00F09130 /* AUTimestampGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD292F16AFAC00F09130 /* AUTimestampGenerator.cpp */; };
8BF6DDAC2F16AFAD00F09130 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DD2A2F16AFAC00F09130 /* AUBuffer.cpp */; };
8BF6DDAD2F16AFAD00F09130 /* AUMIDIDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD2B2F16AFAC00F09130 /* AUMIDIDefs.h */; };
8BF6DDAE2F16AFAD00F09130 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD2C2F16AFAC00F09130 /* AUBuffer.h */; };
8BF6DDAF2F16AFAD00F09130 /* AUBaseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DD2D2F16AFAC00F09130 /* AUBaseHelper.h */; };
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
8B5C7FBF076FB2C200A15F61 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
8BA05A660720730100365D66 /* SoftClock3.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SoftClock3.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* SoftClock3.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = SoftClock3.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* SoftClock3.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = SoftClock3.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* SoftClock3Version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoftClock3Version.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 /* SoftClock3.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SoftClock3.h; sourceTree = "<group>"; };
8BF6DCA62F16AFAC00F09130 /* CAExtAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAExtAudioFile.h; sourceTree = "<group>"; };
8BF6DCA72F16AFAC00F09130 /* CACFMachPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMachPort.h; sourceTree = "<group>"; };
8BF6DCA82F16AFAC00F09130 /* CABool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABool.h; sourceTree = "<group>"; };
8BF6DCA92F16AFAC00F09130 /* CAComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponent.cpp; sourceTree = "<group>"; };
8BF6DCAA2F16AFAC00F09130 /* CADebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugger.h; sourceTree = "<group>"; };
8BF6DCAB2F16AFAC00F09130 /* CACFNumber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFNumber.cpp; sourceTree = "<group>"; };
8BF6DCAC2F16AFAC00F09130 /* CAGuard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAGuard.h; sourceTree = "<group>"; };
8BF6DCAD2F16AFAC00F09130 /* CAAtomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomic.h; sourceTree = "<group>"; };
8BF6DCAE2F16AFAC00F09130 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
8BF6DCAF2F16AFAC00F09130 /* CACFObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFObject.h; sourceTree = "<group>"; };
8BF6DCB02F16AFAC00F09130 /* CAStreamRangedDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamRangedDescription.h; sourceTree = "<group>"; };
8BF6DCB12F16AFAC00F09130 /* CATokenMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATokenMap.h; sourceTree = "<group>"; };
8BF6DCB22F16AFAC00F09130 /* CAComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponent.h; sourceTree = "<group>"; };
8BF6DCB32F16AFAC00F09130 /* CAAudioBufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioBufferList.h; sourceTree = "<group>"; };
8BF6DCB42F16AFAC00F09130 /* CAAudioUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnit.h; sourceTree = "<group>"; };
8BF6DCB52F16AFAC00F09130 /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = "<group>"; };
8BF6DCB62F16AFAC00F09130 /* CAException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAException.h; sourceTree = "<group>"; };
8BF6DCB72F16AFAC00F09130 /* CAAUProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUProcessor.cpp; sourceTree = "<group>"; };
8BF6DCB82F16AFAC00F09130 /* CAAUProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUProcessor.h; sourceTree = "<group>"; };
8BF6DCB92F16AFAC00F09130 /* CAProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAProcess.h; sourceTree = "<group>"; };
8BF6DCBA2F16AFAC00F09130 /* CACFDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDictionary.h; sourceTree = "<group>"; };
8BF6DCBB2F16AFAC00F09130 /* CAPThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPThread.h; sourceTree = "<group>"; };
8BF6DCBC2F16AFAC00F09130 /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = "<group>"; };
8BF6DCBD2F16AFAC00F09130 /* CAAudioTimeStamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioTimeStamp.h; sourceTree = "<group>"; };
8BF6DCBE2F16AFAC00F09130 /* CAFilePathUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAFilePathUtils.cpp; sourceTree = "<group>"; };
8BF6DCBF2F16AFAC00F09130 /* CAAudioValueRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioValueRange.h; sourceTree = "<group>"; };
8BF6DCC02F16AFAC00F09130 /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; };
8BF6DCC12F16AFAC00F09130 /* CAAudioChannelLayoutObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayoutObject.cpp; sourceTree = "<group>"; };
8BF6DCC22F16AFAC00F09130 /* CAGuard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAGuard.cpp; sourceTree = "<group>"; };
8BF6DCC32F16AFAC00F09130 /* CACFNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFNumber.h; sourceTree = "<group>"; };
8BF6DCC42F16AFAC00F09130 /* CACFDistributedNotification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDistributedNotification.cpp; sourceTree = "<group>"; };
8BF6DCC52F16AFAC00F09130 /* CACFString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFString.h; sourceTree = "<group>"; };
8BF6DCC62F16AFAC00F09130 /* CAAUMIDIMapManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMapManager.cpp; sourceTree = "<group>"; };
8BF6DCC72F16AFAC00F09130 /* CAComponentDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponentDescription.cpp; sourceTree = "<group>"; };
8BF6DCC82F16AFAC00F09130 /* CAHostTimeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAHostTimeBase.h; sourceTree = "<group>"; };
8BF6DCC92F16AFAC00F09130 /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugMacros.cpp; sourceTree = "<group>"; };
8BF6DCCA2F16AFAC00F09130 /* CAAudioFileFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioFileFormats.h; sourceTree = "<group>"; };
8BF6DCCB2F16AFAC00F09130 /* CAAUMIDIMapManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMapManager.h; sourceTree = "<group>"; };
8BF6DCCC2F16AFAC00F09130 /* CACFDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDictionary.cpp; sourceTree = "<group>"; };
8BF6DCCD2F16AFAC00F09130 /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMutex.h; sourceTree = "<group>"; };
8BF6DCCE2F16AFAC00F09130 /* CACFString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFString.cpp; sourceTree = "<group>"; };
8BF6DCCF2F16AFAC00F09130 /* CASettingsStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASettingsStorage.h; sourceTree = "<group>"; };
8BF6DCD02F16AFAC00F09130 /* CADebugPrintf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugPrintf.h; sourceTree = "<group>"; };
8BF6DCD12F16AFAC00F09130 /* CAXException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAXException.cpp; sourceTree = "<group>"; };
8BF6DCD22F16AFAC00F09130 /* CAAUMIDIMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMap.h; sourceTree = "<group>"; };
8BF6DCD32F16AFAC00F09130 /* AUParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUParamInfo.h; sourceTree = "<group>"; };
8BF6DCD42F16AFAC00F09130 /* CABitOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABitOperations.h; sourceTree = "<group>"; };
8BF6DCD52F16AFAC00F09130 /* CACFPreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFPreferences.cpp; sourceTree = "<group>"; };
8BF6DCD62F16AFAC00F09130 /* CABundleLocker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABundleLocker.h; sourceTree = "<group>"; };
8BF6DCD72F16AFAC00F09130 /* CAPropertyAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPropertyAddress.h; sourceTree = "<group>"; };
8BF6DCD82F16AFAC00F09130 /* CAXException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAXException.h; sourceTree = "<group>"; };
8BF6DCD92F16AFAC00F09130 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
8BF6DCDA2F16AFAC00F09130 /* CAThreadSafeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAThreadSafeList.h; sourceTree = "<group>"; };
8BF6DCDB2F16AFAC00F09130 /* CAAudioUnitOutputCapturer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnitOutputCapturer.h; sourceTree = "<group>"; };
8BF6DCDC2F16AFAC00F09130 /* AUParamInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUParamInfo.cpp; sourceTree = "<group>"; };
8BF6DCDD2F16AFAC00F09130 /* CASharedLibrary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASharedLibrary.cpp; sourceTree = "<group>"; };
8BF6DCDE2F16AFAC00F09130 /* CAAUMIDIMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMap.cpp; sourceTree = "<group>"; };
8BF6DCDF2F16AFAC00F09130 /* CALogMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CALogMacros.h; sourceTree = "<group>"; };
8BF6DCE02F16AFAC00F09130 /* CACFMessagePort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMessagePort.cpp; sourceTree = "<group>"; };
8BF6DCE12F16AFAC00F09130 /* CARingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CARingBuffer.h; sourceTree = "<group>"; };
8BF6DCE22F16AFAC00F09130 /* AUOutputBL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputBL.cpp; sourceTree = "<group>"; };
8BF6DCE32F16AFAC00F09130 /* CABufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABufferList.h; sourceTree = "<group>"; };
8BF6DCE42F16AFAC00F09130 /* CASharedLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASharedLibrary.h; sourceTree = "<group>"; };
8BF6DCE52F16AFAC00F09130 /* CACFData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFData.h; sourceTree = "<group>"; };
8BF6DCE62F16AFAC00F09130 /* CAStreamRangedDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamRangedDescription.cpp; sourceTree = "<group>"; };
8BF6DCE72F16AFAC00F09130 /* CAPThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPThread.cpp; sourceTree = "<group>"; };
8BF6DCE82F16AFAC00F09130 /* CAAutoDisposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAutoDisposer.h; sourceTree = "<group>"; };
8BF6DCE92F16AFAC00F09130 /* CACFPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPreferences.h; sourceTree = "<group>"; };
8BF6DCEA2F16AFAC00F09130 /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = "<group>"; };
8BF6DCEB2F16AFAC00F09130 /* CAComponentDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponentDescription.h; sourceTree = "<group>"; };
8BF6DCEC2F16AFAC00F09130 /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugMacros.h; sourceTree = "<group>"; };
8BF6DCED2F16AFAC00F09130 /* AUOutputBL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputBL.h; sourceTree = "<group>"; };
8BF6DCEE2F16AFAC00F09130 /* CADebugPrintf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugPrintf.cpp; sourceTree = "<group>"; };
8BF6DCEF2F16AFAC00F09130 /* CARingBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CARingBuffer.cpp; sourceTree = "<group>"; };
8BF6DCF02F16AFAC00F09130 /* CACFPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPlugIn.h; sourceTree = "<group>"; };
8BF6DCF12F16AFAC00F09130 /* CASettingsStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASettingsStorage.cpp; sourceTree = "<group>"; };
8BF6DCF22F16AFAC00F09130 /* CAMixMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMixMap.h; sourceTree = "<group>"; };
8BF6DCF32F16AFAC00F09130 /* CACFDistributedNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDistributedNotification.h; sourceTree = "<group>"; };
8BF6DCF42F16AFAC00F09130 /* CAFilePathUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAFilePathUtils.h; sourceTree = "<group>"; };
8BF6DCF52F16AFAC00F09130 /* CATink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATink.h; sourceTree = "<group>"; };
8BF6DCF62F16AFAC00F09130 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
8BF6DCF72F16AFAC00F09130 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
8BF6DCF82F16AFAC00F09130 /* CAProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAProcess.cpp; sourceTree = "<group>"; };
8BF6DCF92F16AFAC00F09130 /* CAHostTimeBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAHostTimeBase.cpp; sourceTree = "<group>"; };
8BF6DCFA2F16AFAC00F09130 /* CAPersistence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPersistence.cpp; sourceTree = "<group>"; };
8BF6DCFB2F16AFAC00F09130 /* CAAudioBufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioBufferList.cpp; sourceTree = "<group>"; };
8BF6DCFC2F16AFAC00F09130 /* CAAudioTimeStamp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioTimeStamp.cpp; sourceTree = "<group>"; };
8BF6DCFD2F16AFAC00F09130 /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = "<group>"; };
8BF6DCFE2F16AFAC00F09130 /* CAByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAByteOrder.h; sourceTree = "<group>"; };
8BF6DCFF2F16AFAC00F09130 /* CACFArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFArray.h; sourceTree = "<group>"; };
8BF6DD002F16AFAC00F09130 /* CAAtomicStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomicStack.h; sourceTree = "<group>"; };
8BF6DD012F16AFAC00F09130 /* CAReferenceCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAReferenceCounted.h; sourceTree = "<group>"; };
8BF6DD022F16AFAC00F09130 /* CACFMachPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMachPort.cpp; sourceTree = "<group>"; };
8BF6DD032F16AFAC00F09130 /* CABufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABufferList.cpp; sourceTree = "<group>"; };
8BF6DD042F16AFAC00F09130 /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAMutex.cpp; sourceTree = "<group>"; };
8BF6DD052F16AFAC00F09130 /* CADebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugger.cpp; sourceTree = "<group>"; };
8BF6DD062F16AFAC00F09130 /* CABundleLocker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABundleLocker.cpp; sourceTree = "<group>"; };
8BF6DD072F16AFAC00F09130 /* CAAudioFileFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioFileFormats.cpp; sourceTree = "<group>"; };
8BF6DD082F16AFAC00F09130 /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMath.h; sourceTree = "<group>"; };
8BF6DD092F16AFAC00F09130 /* CACFArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFArray.cpp; sourceTree = "<group>"; };
8BF6DD0A2F16AFAC00F09130 /* CACFMessagePort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMessagePort.h; sourceTree = "<group>"; };
8BF6DD0B2F16AFAC00F09130 /* CAAudioValueRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioValueRange.cpp; sourceTree = "<group>"; };
8BF6DD0C2F16AFAC00F09130 /* CAAudioUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioUnit.cpp; sourceTree = "<group>"; };
8BF6DD102F16AFAC00F09130 /* AUViewLocalizedStringKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUViewLocalizedStringKeys.h; sourceTree = "<group>"; };
8BF6DD122F16AFAC00F09130 /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; };
8BF6DD132F16AFAC00F09130 /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; };
8BF6DD142F16AFAC00F09130 /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; };
8BF6DD152F16AFAC00F09130 /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; };
8BF6DD162F16AFAC00F09130 /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; };
8BF6DD172F16AFAC00F09130 /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; };
8BF6DD182F16AFAC00F09130 /* AUPlugInDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUPlugInDispatch.h; sourceTree = "<group>"; };
8BF6DD192F16AFAC00F09130 /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; };
8BF6DD1A2F16AFAC00F09130 /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; };
8BF6DD1B2F16AFAC00F09130 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; };
8BF6DD1C2F16AFAC00F09130 /* AUPlugInDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUPlugInDispatch.cpp; sourceTree = "<group>"; };
8BF6DD1D2F16AFAC00F09130 /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; };
8BF6DD1E2F16AFAC00F09130 /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; };
8BF6DD1F2F16AFAC00F09130 /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; };
8BF6DD202F16AFAC00F09130 /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; };
8BF6DD222F16AFAC00F09130 /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; };
8BF6DD232F16AFAC00F09130 /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; };
8BF6DD252F16AFAC00F09130 /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = "<group>"; };
8BF6DD262F16AFAC00F09130 /* AUBaseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBaseHelper.cpp; sourceTree = "<group>"; };
8BF6DD272F16AFAC00F09130 /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = "<group>"; };
8BF6DD282F16AFAC00F09130 /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = "<group>"; };
8BF6DD292F16AFAC00F09130 /* AUTimestampGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUTimestampGenerator.cpp; sourceTree = "<group>"; };
8BF6DD2A2F16AFAC00F09130 /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
8BF6DD2B2F16AFAC00F09130 /* AUMIDIDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUMIDIDefs.h; sourceTree = "<group>"; };
8BF6DD2C2F16AFAC00F09130 /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; };
8BF6DD2D2F16AFAC00F09130 /* AUBaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBaseHelper.h; sourceTree = "<group>"; };
8BF6DDB02F16B11300F09130 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* SoftClock3.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SoftClock3.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 /* SoftClock3 */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = SoftClock3;
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 = (
8BF6DCA42F16AFAC00F09130 /* CA_SDK */,
8BA05A56072072A900365D66 /* AU Source */,
);
name = Source;
sourceTree = "<group>";
};
19C28FB4FE9D528D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D01CCD20486CAD60068D4B7 /* SoftClock3.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* SoftClock3.h */,
8BA05A660720730100365D66 /* SoftClock3.cpp */,
8BA05A670720730100365D66 /* SoftClock3.exp */,
8BA05A680720730100365D66 /* SoftClock3.r */,
8BA05A690720730100365D66 /* SoftClock3Version.h */,
);
name = "AU Source";
sourceTree = "<group>";
};
8BF6DCA42F16AFAC00F09130 /* CA_SDK */ = {
isa = PBXGroup;
children = (
8BF6DCA52F16AFAC00F09130 /* PublicUtility */,
8BF6DD0D2F16AFAC00F09130 /* AudioUnits */,
);
name = CA_SDK;
path = ../../../../CA_SDK;
sourceTree = "<group>";
};
8BF6DCA52F16AFAC00F09130 /* PublicUtility */ = {
isa = PBXGroup;
children = (
8BF6DCA62F16AFAC00F09130 /* CAExtAudioFile.h */,
8BF6DCA72F16AFAC00F09130 /* CACFMachPort.h */,
8BF6DCA82F16AFAC00F09130 /* CABool.h */,
8BF6DCA92F16AFAC00F09130 /* CAComponent.cpp */,
8BF6DCAA2F16AFAC00F09130 /* CADebugger.h */,
8BF6DCAB2F16AFAC00F09130 /* CACFNumber.cpp */,
8BF6DCAC2F16AFAC00F09130 /* CAGuard.h */,
8BF6DCAD2F16AFAC00F09130 /* CAAtomic.h */,
8BF6DCAE2F16AFAC00F09130 /* CAStreamBasicDescription.h */,
8BF6DCAF2F16AFAC00F09130 /* CACFObject.h */,
8BF6DCB02F16AFAC00F09130 /* CAStreamRangedDescription.h */,
8BF6DCB12F16AFAC00F09130 /* CATokenMap.h */,
8BF6DCB22F16AFAC00F09130 /* CAComponent.h */,
8BF6DCB32F16AFAC00F09130 /* CAAudioBufferList.h */,
8BF6DCB42F16AFAC00F09130 /* CAAudioUnit.h */,
8BF6DCB52F16AFAC00F09130 /* CAAUParameter.h */,
8BF6DCB62F16AFAC00F09130 /* CAException.h */,
8BF6DCB72F16AFAC00F09130 /* CAAUProcessor.cpp */,
8BF6DCB82F16AFAC00F09130 /* CAAUProcessor.h */,
8BF6DCB92F16AFAC00F09130 /* CAProcess.h */,
8BF6DCBA2F16AFAC00F09130 /* CACFDictionary.h */,
8BF6DCBB2F16AFAC00F09130 /* CAPThread.h */,
8BF6DCBC2F16AFAC00F09130 /* CAAUParameter.cpp */,
8BF6DCBD2F16AFAC00F09130 /* CAAudioTimeStamp.h */,
8BF6DCBE2F16AFAC00F09130 /* CAFilePathUtils.cpp */,
8BF6DCBF2F16AFAC00F09130 /* CAAudioValueRange.h */,
8BF6DCC02F16AFAC00F09130 /* CAVectorUnitTypes.h */,
8BF6DCC12F16AFAC00F09130 /* CAAudioChannelLayoutObject.cpp */,
8BF6DCC22F16AFAC00F09130 /* CAGuard.cpp */,
8BF6DCC32F16AFAC00F09130 /* CACFNumber.h */,
8BF6DCC42F16AFAC00F09130 /* CACFDistributedNotification.cpp */,
8BF6DCC52F16AFAC00F09130 /* CACFString.h */,
8BF6DCC62F16AFAC00F09130 /* CAAUMIDIMapManager.cpp */,
8BF6DCC72F16AFAC00F09130 /* CAComponentDescription.cpp */,
8BF6DCC82F16AFAC00F09130 /* CAHostTimeBase.h */,
8BF6DCC92F16AFAC00F09130 /* CADebugMacros.cpp */,
8BF6DCCA2F16AFAC00F09130 /* CAAudioFileFormats.h */,
8BF6DCCB2F16AFAC00F09130 /* CAAUMIDIMapManager.h */,
8BF6DCCC2F16AFAC00F09130 /* CACFDictionary.cpp */,
8BF6DCCD2F16AFAC00F09130 /* CAMutex.h */,
8BF6DCCE2F16AFAC00F09130 /* CACFString.cpp */,
8BF6DCCF2F16AFAC00F09130 /* CASettingsStorage.h */,
8BF6DCD02F16AFAC00F09130 /* CADebugPrintf.h */,
8BF6DCD12F16AFAC00F09130 /* CAXException.cpp */,
8BF6DCD22F16AFAC00F09130 /* CAAUMIDIMap.h */,
8BF6DCD32F16AFAC00F09130 /* AUParamInfo.h */,
8BF6DCD42F16AFAC00F09130 /* CABitOperations.h */,
8BF6DCD52F16AFAC00F09130 /* CACFPreferences.cpp */,
8BF6DCD62F16AFAC00F09130 /* CABundleLocker.h */,
8BF6DCD72F16AFAC00F09130 /* CAPropertyAddress.h */,
8BF6DCD82F16AFAC00F09130 /* CAXException.h */,
8BF6DCD92F16AFAC00F09130 /* CAAudioChannelLayout.cpp */,
8BF6DCDA2F16AFAC00F09130 /* CAThreadSafeList.h */,
8BF6DCDB2F16AFAC00F09130 /* CAAudioUnitOutputCapturer.h */,
8BF6DCDC2F16AFAC00F09130 /* AUParamInfo.cpp */,
8BF6DCDD2F16AFAC00F09130 /* CASharedLibrary.cpp */,
8BF6DCDE2F16AFAC00F09130 /* CAAUMIDIMap.cpp */,
8BF6DCDF2F16AFAC00F09130 /* CALogMacros.h */,
8BF6DCE02F16AFAC00F09130 /* CACFMessagePort.cpp */,
8BF6DCE12F16AFAC00F09130 /* CARingBuffer.h */,
8BF6DCE22F16AFAC00F09130 /* AUOutputBL.cpp */,
8BF6DCE32F16AFAC00F09130 /* CABufferList.h */,
8BF6DCE42F16AFAC00F09130 /* CASharedLibrary.h */,
8BF6DCE52F16AFAC00F09130 /* CACFData.h */,
8BF6DCE62F16AFAC00F09130 /* CAStreamRangedDescription.cpp */,
8BF6DCE72F16AFAC00F09130 /* CAPThread.cpp */,
8BF6DCE82F16AFAC00F09130 /* CAAutoDisposer.h */,
8BF6DCE92F16AFAC00F09130 /* CACFPreferences.h */,
8BF6DCEA2F16AFAC00F09130 /* CAVectorUnit.cpp */,
8BF6DCEB2F16AFAC00F09130 /* CAComponentDescription.h */,
8BF6DCEC2F16AFAC00F09130 /* CADebugMacros.h */,
8BF6DCED2F16AFAC00F09130 /* AUOutputBL.h */,
8BF6DCEE2F16AFAC00F09130 /* CADebugPrintf.cpp */,
8BF6DCEF2F16AFAC00F09130 /* CARingBuffer.cpp */,
8BF6DCF02F16AFAC00F09130 /* CACFPlugIn.h */,
8BF6DCF12F16AFAC00F09130 /* CASettingsStorage.cpp */,
8BF6DCF22F16AFAC00F09130 /* CAMixMap.h */,
8BF6DCF32F16AFAC00F09130 /* CACFDistributedNotification.h */,
8BF6DCF42F16AFAC00F09130 /* CAFilePathUtils.h */,
8BF6DCF52F16AFAC00F09130 /* CATink.h */,
8BF6DCF62F16AFAC00F09130 /* CAStreamBasicDescription.cpp */,
8BF6DCF72F16AFAC00F09130 /* CAAudioChannelLayout.h */,
8BF6DCF82F16AFAC00F09130 /* CAProcess.cpp */,
8BF6DCF92F16AFAC00F09130 /* CAHostTimeBase.cpp */,
8BF6DCFA2F16AFAC00F09130 /* CAPersistence.cpp */,
8BF6DCFB2F16AFAC00F09130 /* CAAudioBufferList.cpp */,
8BF6DCFC2F16AFAC00F09130 /* CAAudioTimeStamp.cpp */,
8BF6DCFD2F16AFAC00F09130 /* CAVectorUnit.h */,
8BF6DCFE2F16AFAC00F09130 /* CAByteOrder.h */,
8BF6DCFF2F16AFAC00F09130 /* CACFArray.h */,
8BF6DD002F16AFAC00F09130 /* CAAtomicStack.h */,
8BF6DD012F16AFAC00F09130 /* CAReferenceCounted.h */,
8BF6DD022F16AFAC00F09130 /* CACFMachPort.cpp */,
8BF6DD032F16AFAC00F09130 /* CABufferList.cpp */,
8BF6DD042F16AFAC00F09130 /* CAMutex.cpp */,
8BF6DD052F16AFAC00F09130 /* CADebugger.cpp */,
8BF6DD062F16AFAC00F09130 /* CABundleLocker.cpp */,
8BF6DD072F16AFAC00F09130 /* CAAudioFileFormats.cpp */,
8BF6DD082F16AFAC00F09130 /* CAMath.h */,
8BF6DD092F16AFAC00F09130 /* CACFArray.cpp */,
8BF6DD0A2F16AFAC00F09130 /* CACFMessagePort.h */,
8BF6DD0B2F16AFAC00F09130 /* CAAudioValueRange.cpp */,
8BF6DD0C2F16AFAC00F09130 /* CAAudioUnit.cpp */,
);
path = PublicUtility;
sourceTree = "<group>";
};
8BF6DD0D2F16AFAC00F09130 /* AudioUnits */ = {
isa = PBXGroup;
children = (
8BF6DD0E2F16AFAC00F09130 /* AUPublic */,
);
path = AudioUnits;
sourceTree = "<group>";
};
8BF6DD0E2F16AFAC00F09130 /* AUPublic */ = {
isa = PBXGroup;
children = (
8BF6DD0F2F16AFAC00F09130 /* AUViewBase */,
8BF6DD112F16AFAC00F09130 /* AUBase */,
8BF6DD212F16AFAC00F09130 /* OtherBases */,
8BF6DD242F16AFAC00F09130 /* Utility */,
);
path = AUPublic;
sourceTree = "<group>";
};
8BF6DD0F2F16AFAC00F09130 /* AUViewBase */ = {
isa = PBXGroup;
children = (
8BF6DD102F16AFAC00F09130 /* AUViewLocalizedStringKeys.h */,
);
path = AUViewBase;
sourceTree = "<group>";
};
8BF6DD112F16AFAC00F09130 /* AUBase */ = {
isa = PBXGroup;
children = (
8BF6DD122F16AFAC00F09130 /* ComponentBase.cpp */,
8BF6DD132F16AFAC00F09130 /* AUScopeElement.cpp */,
8BF6DD142F16AFAC00F09130 /* ComponentBase.h */,
8BF6DD152F16AFAC00F09130 /* AUBase.cpp */,
8BF6DD162F16AFAC00F09130 /* AUInputElement.h */,
8BF6DD172F16AFAC00F09130 /* AUBase.h */,
8BF6DD182F16AFAC00F09130 /* AUPlugInDispatch.h */,
8BF6DD192F16AFAC00F09130 /* AUDispatch.h */,
8BF6DD1A2F16AFAC00F09130 /* AUOutputElement.cpp */,
8BF6DD1B2F16AFAC00F09130 /* AUResources.r */,
8BF6DD1C2F16AFAC00F09130 /* AUPlugInDispatch.cpp */,
8BF6DD1D2F16AFAC00F09130 /* AUOutputElement.h */,
8BF6DD1E2F16AFAC00F09130 /* AUDispatch.cpp */,
8BF6DD1F2F16AFAC00F09130 /* AUScopeElement.h */,
8BF6DD202F16AFAC00F09130 /* AUInputElement.cpp */,
);
path = AUBase;
sourceTree = "<group>";
};
8BF6DD212F16AFAC00F09130 /* OtherBases */ = {
isa = PBXGroup;
children = (
8BF6DD222F16AFAC00F09130 /* AUEffectBase.cpp */,
8BF6DD232F16AFAC00F09130 /* AUEffectBase.h */,
);
path = OtherBases;
sourceTree = "<group>";
};
8BF6DD242F16AFAC00F09130 /* Utility */ = {
isa = PBXGroup;
children = (
8BF6DD252F16AFAC00F09130 /* AUTimestampGenerator.h */,
8BF6DD262F16AFAC00F09130 /* AUBaseHelper.cpp */,
8BF6DD272F16AFAC00F09130 /* AUSilentTimeout.h */,
8BF6DD282F16AFAC00F09130 /* AUInputFormatConverter.h */,
8BF6DD292F16AFAC00F09130 /* AUTimestampGenerator.cpp */,
8BF6DD2A2F16AFAC00F09130 /* AUBuffer.cpp */,
8BF6DD2B2F16AFAC00F09130 /* AUMIDIDefs.h */,
8BF6DD2C2F16AFAC00F09130 /* AUBuffer.h */,
8BF6DD2D2F16AFAC00F09130 /* AUBaseHelper.h */,
);
path = Utility;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8D01CCC70486CAD60068D4B7 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8BF6DD5E2F16AFAD00F09130 /* CABundleLocker.h in Headers */,
8BF6DD7F2F16AFAD00F09130 /* CAAudioChannelLayout.h in Headers */,
8BF6DD752F16AFAD00F09130 /* AUOutputBL.h in Headers */,
8BF6DD502F16AFAD00F09130 /* CAHostTimeBase.h in Headers */,
8BF6DD982F16AFAD00F09130 /* ComponentBase.h in Headers */,
8BF6DD882F16AFAD00F09130 /* CAAtomicStack.h in Headers */,
8BF6DD452F16AFAC00F09130 /* CAAudioTimeStamp.h in Headers */,
8BF6DD622F16AFAD00F09130 /* CAThreadSafeList.h in Headers */,
8BF6DD3D2F16AFAC00F09130 /* CAAUParameter.h in Headers */,
8BF6DDAF2F16AFAD00F09130 /* AUBaseHelper.h in Headers */,
8BF6DDA72F16AFAD00F09130 /* AUTimestampGenerator.h in Headers */,
8BF6DD582F16AFAD00F09130 /* CADebugPrintf.h in Headers */,
8BF6DD922F16AFAD00F09130 /* CACFMessagePort.h in Headers */,
8BF6DD402F16AFAC00F09130 /* CAAUProcessor.h in Headers */,
8BF6DD3C2F16AFAC00F09130 /* CAAudioUnit.h in Headers */,
8BF6DD952F16AFAD00F09130 /* AUViewLocalizedStringKeys.h in Headers */,
8BF6DD7B2F16AFAD00F09130 /* CACFDistributedNotification.h in Headers */,
8BF6DD3A2F16AFAC00F09130 /* CAComponent.h in Headers */,
8BF6DD482F16AFAC00F09130 /* CAVectorUnitTypes.h in Headers */,
8BA05A6E0720730100365D66 /* SoftClock3Version.h in Headers */,
8BF6DD7C2F16AFAD00F09130 /* CAFilePathUtils.h in Headers */,
8BF6DD3E2F16AFAC00F09130 /* CAException.h in Headers */,
8BF6DD352F16AFAC00F09130 /* CAAtomic.h in Headers */,
8BF6DD342F16AFAC00F09130 /* CAGuard.h in Headers */,
8BF6DD9A2F16AFAD00F09130 /* AUInputElement.h in Headers */,
8BF6DD712F16AFAD00F09130 /* CACFPreferences.h in Headers */,
8BF6DD862F16AFAD00F09130 /* CAByteOrder.h in Headers */,
8BF6DD692F16AFAD00F09130 /* CARingBuffer.h in Headers */,
8BF6DD302F16AFAC00F09130 /* CABool.h in Headers */,
8BF6DD552F16AFAD00F09130 /* CAMutex.h in Headers */,
8BF6DD9B2F16AFAD00F09130 /* AUBase.h in Headers */,
8BC6025C073B072D006C4272 /* SoftClock3.h in Headers */,
8BF6DD4D2F16AFAD00F09130 /* CACFString.h in Headers */,
8BF6DD6C2F16AFAD00F09130 /* CASharedLibrary.h in Headers */,
8BF6DD392F16AFAC00F09130 /* CATokenMap.h in Headers */,
8BF6DD2E2F16AFAC00F09130 /* CAExtAudioFile.h in Headers */,
8BF6DD432F16AFAC00F09130 /* CAPThread.h in Headers */,
8BF6DD5F2F16AFAD00F09130 /* CAPropertyAddress.h in Headers */,
8BF6DD892F16AFAD00F09130 /* CAReferenceCounted.h in Headers */,
8BF6DDAE2F16AFAD00F09130 /* AUBuffer.h in Headers */,
8BF6DD902F16AFAD00F09130 /* CAMath.h in Headers */,
8BF6DD702F16AFAD00F09130 /* CAAutoDisposer.h in Headers */,
8BF6DD372F16AFAC00F09130 /* CACFObject.h in Headers */,
8BF6DD572F16AFAD00F09130 /* CASettingsStorage.h in Headers */,
8BF6DD602F16AFAD00F09130 /* CAXException.h in Headers */,
8BF6DD7D2F16AFAD00F09130 /* CATink.h in Headers */,
8BF6DDAA2F16AFAD00F09130 /* AUInputFormatConverter.h in Headers */,
8BF6DD852F16AFAD00F09130 /* CAVectorUnit.h in Headers */,
8BF6DD412F16AFAC00F09130 /* CAProcess.h in Headers */,
8BF6DD472F16AFAC00F09130 /* CAAudioValueRange.h in Headers */,
8BF6DD5C2F16AFAD00F09130 /* CABitOperations.h in Headers */,
8BF6DD522F16AFAD00F09130 /* CAAudioFileFormats.h in Headers */,
8BF6DD4B2F16AFAC00F09130 /* CACFNumber.h in Headers */,
8BF6DD632F16AFAD00F09130 /* CAAudioUnitOutputCapturer.h in Headers */,
8BF6DD742F16AFAD00F09130 /* CADebugMacros.h in Headers */,
8BF6DDAD2F16AFAD00F09130 /* AUMIDIDefs.h in Headers */,
8BF6DD6D2F16AFAD00F09130 /* CACFData.h in Headers */,
8BF6DD362F16AFAC00F09130 /* CAStreamBasicDescription.h in Headers */,
8BF6DD9C2F16AFAD00F09130 /* AUPlugInDispatch.h in Headers */,
8BF6DD382F16AFAC00F09130 /* CAStreamRangedDescription.h in Headers */,
8BF6DD782F16AFAD00F09130 /* CACFPlugIn.h in Headers */,
8BF6DD3B2F16AFAC00F09130 /* CAAudioBufferList.h in Headers */,
8BF6DD532F16AFAD00F09130 /* CAAUMIDIMapManager.h in Headers */,
8BF6DDA62F16AFAD00F09130 /* AUEffectBase.h in Headers */,
8BF6DD422F16AFAC00F09130 /* CACFDictionary.h in Headers */,
8BF6DDA32F16AFAD00F09130 /* AUScopeElement.h in Headers */,
8BF6DD732F16AFAD00F09130 /* CAComponentDescription.h in Headers */,
8BF6DDA92F16AFAD00F09130 /* AUSilentTimeout.h in Headers */,
8BF6DD6B2F16AFAD00F09130 /* CABufferList.h in Headers */,
8BF6DD9D2F16AFAD00F09130 /* AUDispatch.h in Headers */,
8BF6DDA12F16AFAD00F09130 /* AUOutputElement.h in Headers */,
8BF6DD672F16AFAD00F09130 /* CALogMacros.h in Headers */,
8BF6DD5B2F16AFAD00F09130 /* AUParamInfo.h in Headers */,
8BF6DD7A2F16AFAD00F09130 /* CAMixMap.h in Headers */,
8BF6DD872F16AFAD00F09130 /* CACFArray.h in Headers */,
8BF6DD2F2F16AFAC00F09130 /* CACFMachPort.h in Headers */,
8BF6DD5A2F16AFAD00F09130 /* CAAUMIDIMap.h in Headers */,
8BF6DD322F16AFAC00F09130 /* CADebugger.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* SoftClock3 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "SoftClock3" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = SoftClock3;
productInstallPath = "$(HOME)/Library/Bundles";
productName = SoftClock3;
productReference = 8D01CCD20486CAD60068D4B7 /* SoftClock3.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 "SoftClock3" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
en,
Base,
ja,
fr,
de,
);
mainGroup = 089C166AFE841209C02AAC07 /* SoftClock3 */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* SoftClock3 */,
);
};
/* 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 = (
8BF6DD6A2F16AFAD00F09130 /* AUOutputBL.cpp in Sources */,
8BF6DD8F2F16AFAD00F09130 /* CAAudioFileFormats.cpp in Sources */,
8BF6DD812F16AFAD00F09130 /* CAHostTimeBase.cpp in Sources */,
8BF6DD592F16AFAD00F09130 /* CAXException.cpp in Sources */,
8BF6DD832F16AFAD00F09130 /* CAAudioBufferList.cpp in Sources */,
8BF6DD462F16AFAC00F09130 /* CAFilePathUtils.cpp in Sources */,
8BF6DD442F16AFAC00F09130 /* CAAUParameter.cpp in Sources */,
8BF6DD662F16AFAD00F09130 /* CAAUMIDIMap.cpp in Sources */,
8BF6DD932F16AFAD00F09130 /* CAAudioValueRange.cpp in Sources */,
8BF6DDA22F16AFAD00F09130 /* AUDispatch.cpp in Sources */,
8BF6DD5D2F16AFAD00F09130 /* CACFPreferences.cpp in Sources */,
8BF6DDA02F16AFAD00F09130 /* AUPlugInDispatch.cpp in Sources */,
8BF6DD3F2F16AFAC00F09130 /* CAAUProcessor.cpp in Sources */,
8BF6DD542F16AFAD00F09130 /* CACFDictionary.cpp in Sources */,
8BF6DDA82F16AFAD00F09130 /* AUBaseHelper.cpp in Sources */,
8BF6DD8D2F16AFAD00F09130 /* CADebugger.cpp in Sources */,
8BF6DD612F16AFAD00F09130 /* CAAudioChannelLayout.cpp in Sources */,
8BF6DD642F16AFAD00F09130 /* AUParamInfo.cpp in Sources */,
8BF6DD822F16AFAD00F09130 /* CAPersistence.cpp in Sources */,
8BF6DD762F16AFAD00F09130 /* CADebugPrintf.cpp in Sources */,
8BF6DDAB2F16AFAD00F09130 /* AUTimestampGenerator.cpp in Sources */,
8BF6DD7E2F16AFAD00F09130 /* CAStreamBasicDescription.cpp in Sources */,
8BF6DD4E2F16AFAD00F09130 /* CAAUMIDIMapManager.cpp in Sources */,
8BF6DD792F16AFAD00F09130 /* CASettingsStorage.cpp in Sources */,
8BF6DD9E2F16AFAD00F09130 /* AUOutputElement.cpp in Sources */,
8BF6DD4A2F16AFAC00F09130 /* CAGuard.cpp in Sources */,
8BA05A6B0720730100365D66 /* SoftClock3.cpp in Sources */,
8BF6DD8C2F16AFAD00F09130 /* CAMutex.cpp in Sources */,
8BF6DDA52F16AFAD00F09130 /* AUEffectBase.cpp in Sources */,
8BF6DD8A2F16AFAD00F09130 /* CACFMachPort.cpp in Sources */,
8BF6DD992F16AFAD00F09130 /* AUBase.cpp in Sources */,
8BF6DD652F16AFAD00F09130 /* CASharedLibrary.cpp in Sources */,
8BF6DD4C2F16AFAC00F09130 /* CACFDistributedNotification.cpp in Sources */,
8BF6DD4F2F16AFAD00F09130 /* CAComponentDescription.cpp in Sources */,
8BF6DD562F16AFAD00F09130 /* CACFString.cpp in Sources */,
8BF6DD962F16AFAD00F09130 /* ComponentBase.cpp in Sources */,
8BF6DD772F16AFAD00F09130 /* CARingBuffer.cpp in Sources */,
8BF6DD972F16AFAD00F09130 /* AUScopeElement.cpp in Sources */,
8BF6DD942F16AFAD00F09130 /* CAAudioUnit.cpp in Sources */,
8BF6DD912F16AFAD00F09130 /* CACFArray.cpp in Sources */,
8BF6DD8E2F16AFAD00F09130 /* CABundleLocker.cpp in Sources */,
8BF6DD802F16AFAD00F09130 /* CAProcess.cpp in Sources */,
8BF6DD6E2F16AFAD00F09130 /* CAStreamRangedDescription.cpp in Sources */,
8BF6DD6F2F16AFAD00F09130 /* CAPThread.cpp in Sources */,
8BF6DD312F16AFAC00F09130 /* CAComponent.cpp in Sources */,
8BF6DD492F16AFAC00F09130 /* CAAudioChannelLayoutObject.cpp in Sources */,
8BF6DD842F16AFAD00F09130 /* CAAudioTimeStamp.cpp in Sources */,
8BF6DD8B2F16AFAD00F09130 /* CABufferList.cpp in Sources */,
8BF6DD682F16AFAD00F09130 /* CACFMessagePort.cpp in Sources */,
8BF6DD722F16AFAD00F09130 /* CAVectorUnit.cpp in Sources */,
8BF6DDA42F16AFAD00F09130 /* AUInputElement.cpp in Sources */,
8BF6DDAC2F16AFAD00F09130 /* AUBuffer.cpp in Sources */,
8BF6DD512F16AFAD00F09130 /* CADebugMacros.cpp in Sources */,
8BF6DD332F16AFAC00F09130 /* CACFNumber.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
8BF6DDB02F16B11300F09130 /* 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 = SoftClock3.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 = SoftClock3;
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 = SoftClock3.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 = SoftClock3;
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 "SoftClock3" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "SoftClock3" */ = {
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 = "SoftClock3.component"
BlueprintName = "SoftClock3"
ReferencedContainer = "container:SoftClock3.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 = "SoftClock3.component"
BlueprintName = "SoftClock3"
ReferencedContainer = "container:SoftClock3.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>SoftClock3.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: SoftClock3Version.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 __SoftClock3Version_h__
#define __SoftClock3Version_h__
#ifdef DEBUG
#define kSoftClock3Version 0xFFFFFFFF
#else
#define kSoftClock3Version 0x00010000
#endif
//~~~~~~~~~~~~~~ Change!!! ~~~~~~~~~~~~~~~~~~~~~//
#define SoftClock3_COMP_MANF 'Dthr'
#define SoftClock3_COMP_SUBTYPE 'sfc3'
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
#endif

View file

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

Binary file not shown.

View file

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

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AudioComponents</key>
<array>
<dict>
<key>description</key>
<string>${PRODUCT_NAME:identifier} AU</string>
<key>factoryFunction</key>
<string>${PRODUCT_NAME:identifier}Factory</string>
<key>manufacturer</key>
<string>Dthr</string>
<key>name</key>
<string>Airwindows: ${PRODUCT_NAME:identifier}</string>
<key>subtype</key>
<string>tha2</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,311 @@
/*
* File: TapeHack2.cpp
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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.
*
*/
/*=============================================================================
TapeHack2.cpp
=============================================================================*/
#include "TapeHack2.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AUDIOCOMPONENT_ENTRY(AUBaseFactory, TapeHack2)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::TapeHack2
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TapeHack2::TapeHack2(AudioUnit component)
: AUEffectBase(component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
SetParameter(kParam_A, kDefaultValue_ParamA );
SetParameter(kParam_B, kDefaultValue_ParamB );
SetParameter(kParam_C, kDefaultValue_ParamC );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
#endif
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetParameterValueStrings
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::GetParameterValueStrings(AudioUnitScope inScope,
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
return kAudioUnitErr_InvalidProperty;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetParameterInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::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;
default:
result = kAudioUnitErr_InvalidParameter;
break;
}
} else {
result = kAudioUnitErr_InvalidParameter;
}
return result;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetPropertyInfo
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::GetPropertyInfo (AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
UInt32 & outDataSize,
Boolean & outWritable)
{
return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::GetProperty
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::GetProperty( AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement,
void * outData )
{
return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
}
// TapeHack2::Initialize
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ComponentResult TapeHack2::Initialize()
{
ComponentResult result = AUEffectBase::Initialize();
if (result == noErr)
Reset(kAudioUnitScope_Global, 0);
return result;
}
#pragma mark ____TapeHack2EffectKernel
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::TapeHack2Kernel::Reset()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TapeHack2::TapeHack2Kernel::Reset()
{
for (int x = 0; x < 33; x++) {avg32L[x] = 0.0; post32L[x] = 0.0;}
for (int x = 0; x < 17; x++) {avg16L[x] = 0.0; post16L[x] = 0.0;}
for (int x = 0; x < 9; x++) {avg8L[x] = 0.0; post8L[x] = 0.0;}
for (int x = 0; x < 5; x++) {avg4L[x] = 0.0; post4L[x] = 0.0;}
for (int x = 0; x < 3; x++) {avg2L[x] = 0.0; post2L[x] = 0.0;}
avgPos = 0;
lastDarkL = 0.0;
//preTapeHack
fpd = 1.0; while (fpd < 16386) fpd = rand()*UINT32_MAX;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// TapeHack2::TapeHack2Kernel::Process
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TapeHack2::TapeHack2Kernel::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();
int spacing = floor(overallscale*2.0);
if (spacing < 2) spacing = 2; if (spacing > 32) spacing = 32;
double inputGain = GetParameter( kParam_A )*10.0;
double outputGain = GetParameter( kParam_B )*0.9239;
double wet = GetParameter( kParam_C );
while (nSampleFrames-- > 0) {
double inputSampleL = *sourceP;
if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpd * 1.18e-17;
double drySampleL = inputSampleL;
//begin Left
inputSampleL *= inputGain;
double darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
avg32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += avg32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
avg16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += avg16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
avg8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += avg8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
avg4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += avg4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
avg2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += avg2L[x];}
darkSampleL /= 2.0;
} //only update after the post-distortion filter stage
double avgSlewL = fmin(fabs(lastDarkL-inputSampleL)*0.12*overallscale,1.0);
avgSlewL = 1.0-(1.0-avgSlewL*1.0-avgSlewL);
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
lastDarkL = darkSampleL;
inputSampleL = fmax(fmin(inputSampleL,2.305929007734908),-2.305929007734908);
double addtwo = inputSampleL * inputSampleL;
double empower = inputSampleL * addtwo; // inputSampleL to the third power
inputSampleL -= (empower / 6.0);
empower *= addtwo; // to the fifth power
inputSampleL += (empower / 69.0);
empower *= addtwo; //seventh
inputSampleL -= (empower / 2530.08);
empower *= addtwo; //ninth
inputSampleL += (empower / 224985.6);
empower *= addtwo; //eleventh
inputSampleL -= (empower / 9979200.0f);
//this is a degenerate form of a Taylor Series to approximate sin()
darkSampleL = inputSampleL;
if (avgPos > 31) avgPos = 0;
if (spacing > 31) {
post32L[avgPos] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 32; x++) {darkSampleL += post32L[x];}
darkSampleL /= 32.0;
} if (spacing > 15) {
post16L[avgPos%16] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 16; x++) {darkSampleL += post16L[x];}
darkSampleL /= 16.0;
} if (spacing > 7) {
post8L[avgPos%8] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 8; x++) {darkSampleL += post8L[x];}
darkSampleL /= 8.0;
} if (spacing > 3) {
post4L[avgPos%4] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 4; x++) {darkSampleL += post4L[x];}
darkSampleL /= 4.0;
} if (spacing > 1) {
post2L[avgPos%2] = darkSampleL;
darkSampleL = 0.0;
for (int x = 0; x < 2; x++) {darkSampleL += post2L[x];}
darkSampleL /= 2.0;
} avgPos++;
inputSampleL = (inputSampleL*(1.0-avgSlewL)) + (darkSampleL*avgSlewL);
//use the previously calculated depth of the filter
inputSampleL = (inputSampleL * outputGain * wet) + (drySampleL * (1.0-wet));
//end Left
//begin 32 bit floating point dither
int expon; frexpf((float)inputSampleL, &expon);
fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
inputSampleL += ((double(fpd)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62));
//end 32 bit floating point dither
*destP = inputSampleL;
sourceP += inNumChannels; destP += inNumChannels;
}
}

View file

@ -0,0 +1,2 @@
_TapeHack2Entry
_TapeHack2Factory

View file

@ -0,0 +1,154 @@
/*
* File: TapeHack2.h
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "TapeHack2Version.h"
#if AU_DEBUG_DISPATCHER
#include "AUDebugDispatcher.h"
#endif
#ifndef __TapeHack2_h__
#define __TapeHack2_h__
#pragma mark ____TapeHack2 Parameters
// parameters
static const float kDefaultValue_ParamA = 0.1;
static const float kDefaultValue_ParamB = 1.0;
static const float kDefaultValue_ParamC = 1.0;
static CFStringRef kParameterAName = CFSTR("Input");
static CFStringRef kParameterBName = CFSTR("Output");
static CFStringRef kParameterCName = CFSTR("Dry/Wet");
enum {
kParam_A =0,
kParam_B =1,
kParam_C =2,
//Add your parameters here...
kNumberOfParameters=3
};
#pragma mark ____TapeHack2
class TapeHack2 : public AUEffectBase
{
public:
TapeHack2(AudioUnit component);
#if AU_DEBUG_DISPATCHER
virtual ~TapeHack2 () { delete mDebugDispatcher; }
#endif
virtual AUKernelBase * NewKernel() { return new TapeHack2Kernel(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 kTapeHack2Version; }
protected:
class TapeHack2Kernel : public AUKernelBase // most of the real work happens here
{
public:
TapeHack2Kernel(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 avg32L[33];
double avg16L[17];
double avg8L[9];
double avg4L[5];
double avg2L[3];
double post32L[33];
double post16L[17];
double post8L[9];
double post4L[5];
double post2L[3];
int avgPos;
double lastDarkL;
//preTapeHack
uint32_t fpd;
};
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#endif

View file

@ -0,0 +1,61 @@
/*
* File: TapeHack2.r
*
* Version: 1.0
*
* Created: 1/8/26
*
* Copyright: Copyright © 2026 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 "TapeHack2Version.h"
// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description
#define kAudioUnitResID_TapeHack2 1000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TapeHack2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define RES_ID kAudioUnitResID_TapeHack2
#define COMP_TYPE kAudioUnitType_Effect
#define COMP_SUBTYPE TapeHack2_COMP_SUBTYPE
#define COMP_MANUF TapeHack2_COMP_MANF
#define VERSION kTapeHack2Version
#define NAME "Airwindows: TapeHack2"
#define DESCRIPTION "TapeHack2 AU"
#define ENTRY_POINT "TapeHack2Entry"
#include "AUResources.r"

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,137 @@
// !$*UTF8*$!
{
089C1669FE841209C02AAC07 /* Project object */ = {
activeBuildConfigurationName = Release;
activeTarget = 8D01CCC60486CAD60068D4B7 /* TapeHack2 */;
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 = 789944008;
PBXWorkspaceStateSaveDate = 789944008;
};
perUserProjectItems = {
8B2C038B2F15696A0045AF83 /* PlistBookmark */ = 8B2C038B2F15696A0045AF83 /* PlistBookmark */;
8B2C038D2F15696A0045AF83 /* PBXTextBookmark */ = 8B2C038D2F15696A0045AF83 /* PBXTextBookmark */;
8B2C04612F159D3E0045AF83 /* PBXTextBookmark */ = 8B2C04612F159D3E0045AF83 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
};
};
8B2C038B2F15696A0045AF83 /* PlistBookmark */ = {
isa = PlistBookmark;
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
fallbackIsa = PBXBookmark;
isK = 0;
kPath = (
CFBundleName,
);
name = /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/TapeHack2/Info.plist;
rLen = 0;
rLoc = 9223372036854775808;
};
8B2C038D2F15696A0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* TapeHack2Version.h */;
name = "TapeHack2Version.h: 54";
rLen = 0;
rLoc = 2905;
rType = 0;
vrLen = 241;
vrLoc = 2726;
};
8B2C04612F159D3E0045AF83 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A690720730100365D66 /* TapeHack2Version.h */;
name = "TapeHack2Version.h: 54";
rLen = 0;
rLoc = 2905;
rType = 0;
vrLen = 235;
vrLoc = 2732;
};
8BA05A660720730100365D66 /* TapeHack2.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1056, 5616}}";
sepNavSelRange = "{11503, 1023}";
sepNavVisRange = "{11359, 1262}";
sepNavWindowFrame = "{{8, 91}, {883, 787}}";
};
};
8BA05A690720730100365D66 /* TapeHack2Version.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1038, 1242}}";
sepNavSelRange = "{2905, 0}";
sepNavVisRange = "{2732, 235}";
sepNavWindowFrame = "{{15, 38}, {768, 840}}";
};
};
8BC6025B073B072D006C4272 /* TapeHack2.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1146, 3312}}";
sepNavSelRange = "{5237, 254}";
sepNavVisRange = "{4785, 834}";
sepNavWindowFrame = "{{27, 38}, {768, 840}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
isa = PBXSourceControlManager;
fallbackIsa = XCSourceControlManager;
isSCMEnabled = 0;
scmConfiguration = {
repositoryNamesForRoots = {
"" = "";
};
};
};
8BD3CCB9148830B20062E48C /* Code sense */ = {
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8D01CCC60486CAD60068D4B7 /* TapeHack2 */ = {
activeExec = 0;
};
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,965 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
8BA05A6B0720730100365D66 /* TapeHack2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A660720730100365D66 /* TapeHack2.cpp */; };
8BA05A6E0720730100365D66 /* TapeHack2Version.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A690720730100365D66 /* TapeHack2Version.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 /* TapeHack2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC6025B073B072D006C4272 /* TapeHack2.h */; };
8BF6DE3B2F16B17D00F09130 /* CAExtAudioFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDB32F16B17D00F09130 /* CAExtAudioFile.h */; };
8BF6DE3C2F16B17D00F09130 /* CACFMachPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDB42F16B17D00F09130 /* CACFMachPort.h */; };
8BF6DE3D2F16B17D00F09130 /* CABool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDB52F16B17D00F09130 /* CABool.h */; };
8BF6DE3E2F16B17D00F09130 /* CAComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDB62F16B17D00F09130 /* CAComponent.cpp */; };
8BF6DE3F2F16B17D00F09130 /* CADebugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDB72F16B17D00F09130 /* CADebugger.h */; };
8BF6DE402F16B17D00F09130 /* CACFNumber.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDB82F16B17D00F09130 /* CACFNumber.cpp */; };
8BF6DE412F16B17E00F09130 /* CAGuard.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDB92F16B17D00F09130 /* CAGuard.h */; };
8BF6DE422F16B17E00F09130 /* CAAtomic.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDBA2F16B17D00F09130 /* CAAtomic.h */; };
8BF6DE432F16B17E00F09130 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDBB2F16B17D00F09130 /* CAStreamBasicDescription.h */; };
8BF6DE442F16B17E00F09130 /* CACFObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDBC2F16B17D00F09130 /* CACFObject.h */; };
8BF6DE452F16B17E00F09130 /* CAStreamRangedDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDBD2F16B17D00F09130 /* CAStreamRangedDescription.h */; };
8BF6DE462F16B17E00F09130 /* CATokenMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDBE2F16B17D00F09130 /* CATokenMap.h */; };
8BF6DE472F16B17E00F09130 /* CAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDBF2F16B17D00F09130 /* CAComponent.h */; };
8BF6DE482F16B17E00F09130 /* CAAudioBufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC02F16B17D00F09130 /* CAAudioBufferList.h */; };
8BF6DE492F16B17E00F09130 /* CAAudioUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC12F16B17D00F09130 /* CAAudioUnit.h */; };
8BF6DE4A2F16B17E00F09130 /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC22F16B17D00F09130 /* CAAUParameter.h */; };
8BF6DE4B2F16B17E00F09130 /* CAException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC32F16B17D00F09130 /* CAException.h */; };
8BF6DE4C2F16B17E00F09130 /* CAAUProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDC42F16B17D00F09130 /* CAAUProcessor.cpp */; };
8BF6DE4D2F16B17E00F09130 /* CAAUProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC52F16B17D00F09130 /* CAAUProcessor.h */; };
8BF6DE4E2F16B17E00F09130 /* CAProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC62F16B17D00F09130 /* CAProcess.h */; };
8BF6DE4F2F16B17E00F09130 /* CACFDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC72F16B17D00F09130 /* CACFDictionary.h */; };
8BF6DE502F16B17E00F09130 /* CAPThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDC82F16B17D00F09130 /* CAPThread.h */; };
8BF6DE512F16B17E00F09130 /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDC92F16B17D00F09130 /* CAAUParameter.cpp */; };
8BF6DE522F16B17E00F09130 /* CAAudioTimeStamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDCA2F16B17D00F09130 /* CAAudioTimeStamp.h */; };
8BF6DE532F16B17E00F09130 /* CAFilePathUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDCB2F16B17D00F09130 /* CAFilePathUtils.cpp */; };
8BF6DE542F16B17E00F09130 /* CAAudioValueRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDCC2F16B17D00F09130 /* CAAudioValueRange.h */; };
8BF6DE552F16B17E00F09130 /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDCD2F16B17D00F09130 /* CAVectorUnitTypes.h */; };
8BF6DE562F16B17E00F09130 /* CAAudioChannelLayoutObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDCE2F16B17D00F09130 /* CAAudioChannelLayoutObject.cpp */; };
8BF6DE572F16B17E00F09130 /* CAGuard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDCF2F16B17D00F09130 /* CAGuard.cpp */; };
8BF6DE582F16B17E00F09130 /* CACFNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDD02F16B17D00F09130 /* CACFNumber.h */; };
8BF6DE592F16B17E00F09130 /* CACFDistributedNotification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDD12F16B17D00F09130 /* CACFDistributedNotification.cpp */; };
8BF6DE5A2F16B17E00F09130 /* CACFString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDD22F16B17D00F09130 /* CACFString.h */; };
8BF6DE5B2F16B17E00F09130 /* CAAUMIDIMapManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDD32F16B17D00F09130 /* CAAUMIDIMapManager.cpp */; };
8BF6DE5C2F16B17E00F09130 /* CAComponentDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDD42F16B17D00F09130 /* CAComponentDescription.cpp */; };
8BF6DE5D2F16B17E00F09130 /* CAHostTimeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDD52F16B17D00F09130 /* CAHostTimeBase.h */; };
8BF6DE5E2F16B17E00F09130 /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDD62F16B17D00F09130 /* CADebugMacros.cpp */; };
8BF6DE5F2F16B17E00F09130 /* CAAudioFileFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDD72F16B17D00F09130 /* CAAudioFileFormats.h */; };
8BF6DE602F16B17E00F09130 /* CAAUMIDIMapManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDD82F16B17D00F09130 /* CAAUMIDIMapManager.h */; };
8BF6DE612F16B17E00F09130 /* CACFDictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDD92F16B17D00F09130 /* CACFDictionary.cpp */; };
8BF6DE622F16B17E00F09130 /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDDA2F16B17D00F09130 /* CAMutex.h */; };
8BF6DE632F16B17E00F09130 /* CACFString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDDB2F16B17D00F09130 /* CACFString.cpp */; };
8BF6DE642F16B17E00F09130 /* CASettingsStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDDC2F16B17D00F09130 /* CASettingsStorage.h */; };
8BF6DE652F16B17E00F09130 /* CADebugPrintf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDDD2F16B17D00F09130 /* CADebugPrintf.h */; };
8BF6DE662F16B17E00F09130 /* CAXException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDDE2F16B17D00F09130 /* CAXException.cpp */; };
8BF6DE672F16B17E00F09130 /* CAAUMIDIMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDDF2F16B17D00F09130 /* CAAUMIDIMap.h */; };
8BF6DE682F16B17E00F09130 /* AUParamInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE02F16B17D00F09130 /* AUParamInfo.h */; };
8BF6DE692F16B17E00F09130 /* CABitOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE12F16B17D00F09130 /* CABitOperations.h */; };
8BF6DE6A2F16B17E00F09130 /* CACFPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDE22F16B17D00F09130 /* CACFPreferences.cpp */; };
8BF6DE6B2F16B17E00F09130 /* CABundleLocker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE32F16B17D00F09130 /* CABundleLocker.h */; };
8BF6DE6C2F16B17E00F09130 /* CAPropertyAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE42F16B17D00F09130 /* CAPropertyAddress.h */; };
8BF6DE6D2F16B17E00F09130 /* CAXException.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE52F16B17D00F09130 /* CAXException.h */; };
8BF6DE6E2F16B17E00F09130 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDE62F16B17D00F09130 /* CAAudioChannelLayout.cpp */; };
8BF6DE6F2F16B17E00F09130 /* CAThreadSafeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE72F16B17D00F09130 /* CAThreadSafeList.h */; };
8BF6DE702F16B17E00F09130 /* CAAudioUnitOutputCapturer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDE82F16B17D00F09130 /* CAAudioUnitOutputCapturer.h */; };
8BF6DE712F16B17E00F09130 /* AUParamInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDE92F16B17D00F09130 /* AUParamInfo.cpp */; };
8BF6DE722F16B17E00F09130 /* CASharedLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDEA2F16B17D00F09130 /* CASharedLibrary.cpp */; };
8BF6DE732F16B17E00F09130 /* CAAUMIDIMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDEB2F16B17D00F09130 /* CAAUMIDIMap.cpp */; };
8BF6DE742F16B17E00F09130 /* CALogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDEC2F16B17D00F09130 /* CALogMacros.h */; };
8BF6DE752F16B17E00F09130 /* CACFMessagePort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDED2F16B17D00F09130 /* CACFMessagePort.cpp */; };
8BF6DE762F16B17E00F09130 /* CARingBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDEE2F16B17D00F09130 /* CARingBuffer.h */; };
8BF6DE772F16B17E00F09130 /* AUOutputBL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDEF2F16B17D00F09130 /* AUOutputBL.cpp */; };
8BF6DE782F16B17E00F09130 /* CABufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF02F16B17D00F09130 /* CABufferList.h */; };
8BF6DE792F16B17E00F09130 /* CASharedLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF12F16B17D00F09130 /* CASharedLibrary.h */; };
8BF6DE7A2F16B17E00F09130 /* CACFData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF22F16B17D00F09130 /* CACFData.h */; };
8BF6DE7B2F16B17E00F09130 /* CAStreamRangedDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDF32F16B17D00F09130 /* CAStreamRangedDescription.cpp */; };
8BF6DE7C2F16B17E00F09130 /* CAPThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDF42F16B17D00F09130 /* CAPThread.cpp */; };
8BF6DE7D2F16B17E00F09130 /* CAAutoDisposer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF52F16B17D00F09130 /* CAAutoDisposer.h */; };
8BF6DE7E2F16B17E00F09130 /* CACFPreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF62F16B17D00F09130 /* CACFPreferences.h */; };
8BF6DE7F2F16B17E00F09130 /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDF72F16B17D00F09130 /* CAVectorUnit.cpp */; };
8BF6DE802F16B17E00F09130 /* CAComponentDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF82F16B17D00F09130 /* CAComponentDescription.h */; };
8BF6DE812F16B17E00F09130 /* CADebugMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDF92F16B17D00F09130 /* CADebugMacros.h */; };
8BF6DE822F16B17E00F09130 /* AUOutputBL.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDFA2F16B17D00F09130 /* AUOutputBL.h */; };
8BF6DE832F16B17E00F09130 /* CADebugPrintf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDFB2F16B17D00F09130 /* CADebugPrintf.cpp */; };
8BF6DE842F16B17E00F09130 /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDFC2F16B17D00F09130 /* CARingBuffer.cpp */; };
8BF6DE852F16B17E00F09130 /* CACFPlugIn.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDFD2F16B17D00F09130 /* CACFPlugIn.h */; };
8BF6DE862F16B17E00F09130 /* CASettingsStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DDFE2F16B17D00F09130 /* CASettingsStorage.cpp */; };
8BF6DE872F16B17E00F09130 /* CAMixMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DDFF2F16B17D00F09130 /* CAMixMap.h */; };
8BF6DE882F16B17E00F09130 /* CACFDistributedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE002F16B17D00F09130 /* CACFDistributedNotification.h */; };
8BF6DE892F16B17E00F09130 /* CAFilePathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE012F16B17D00F09130 /* CAFilePathUtils.h */; };
8BF6DE8A2F16B17E00F09130 /* CATink.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE022F16B17D00F09130 /* CATink.h */; };
8BF6DE8B2F16B17E00F09130 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE032F16B17D00F09130 /* CAStreamBasicDescription.cpp */; };
8BF6DE8C2F16B17E00F09130 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE042F16B17D00F09130 /* CAAudioChannelLayout.h */; };
8BF6DE8D2F16B17E00F09130 /* CAProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE052F16B17D00F09130 /* CAProcess.cpp */; };
8BF6DE8E2F16B17E00F09130 /* CAHostTimeBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE062F16B17D00F09130 /* CAHostTimeBase.cpp */; };
8BF6DE8F2F16B17E00F09130 /* CAPersistence.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE072F16B17D00F09130 /* CAPersistence.cpp */; };
8BF6DE902F16B17E00F09130 /* CAAudioBufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE082F16B17D00F09130 /* CAAudioBufferList.cpp */; };
8BF6DE912F16B17E00F09130 /* CAAudioTimeStamp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE092F16B17D00F09130 /* CAAudioTimeStamp.cpp */; };
8BF6DE922F16B17E00F09130 /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE0A2F16B17D00F09130 /* CAVectorUnit.h */; };
8BF6DE932F16B17E00F09130 /* CAByteOrder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE0B2F16B17D00F09130 /* CAByteOrder.h */; };
8BF6DE942F16B17E00F09130 /* CACFArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE0C2F16B17D00F09130 /* CACFArray.h */; };
8BF6DE952F16B17E00F09130 /* CAAtomicStack.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE0D2F16B17D00F09130 /* CAAtomicStack.h */; };
8BF6DE962F16B17E00F09130 /* CAReferenceCounted.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE0E2F16B17D00F09130 /* CAReferenceCounted.h */; };
8BF6DE972F16B17E00F09130 /* CACFMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE0F2F16B17D00F09130 /* CACFMachPort.cpp */; };
8BF6DE982F16B17E00F09130 /* CABufferList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE102F16B17D00F09130 /* CABufferList.cpp */; };
8BF6DE992F16B17E00F09130 /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE112F16B17D00F09130 /* CAMutex.cpp */; };
8BF6DE9A2F16B17E00F09130 /* CADebugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE122F16B17D00F09130 /* CADebugger.cpp */; };
8BF6DE9B2F16B17E00F09130 /* CABundleLocker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE132F16B17D00F09130 /* CABundleLocker.cpp */; };
8BF6DE9C2F16B17E00F09130 /* CAAudioFileFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE142F16B17D00F09130 /* CAAudioFileFormats.cpp */; };
8BF6DE9D2F16B17E00F09130 /* CAMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE152F16B17D00F09130 /* CAMath.h */; };
8BF6DE9E2F16B17E00F09130 /* CACFArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE162F16B17D00F09130 /* CACFArray.cpp */; };
8BF6DE9F2F16B17E00F09130 /* CACFMessagePort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE172F16B17D00F09130 /* CACFMessagePort.h */; };
8BF6DEA02F16B17E00F09130 /* CAAudioValueRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE182F16B17D00F09130 /* CAAudioValueRange.cpp */; };
8BF6DEA12F16B17E00F09130 /* CAAudioUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE192F16B17D00F09130 /* CAAudioUnit.cpp */; };
8BF6DEA22F16B17E00F09130 /* AUViewLocalizedStringKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE1D2F16B17D00F09130 /* AUViewLocalizedStringKeys.h */; };
8BF6DEA32F16B17E00F09130 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE1F2F16B17D00F09130 /* ComponentBase.cpp */; };
8BF6DEA42F16B17E00F09130 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE202F16B17D00F09130 /* AUScopeElement.cpp */; };
8BF6DEA52F16B17E00F09130 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE212F16B17D00F09130 /* ComponentBase.h */; };
8BF6DEA62F16B17E00F09130 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE222F16B17D00F09130 /* AUBase.cpp */; };
8BF6DEA72F16B17E00F09130 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE232F16B17D00F09130 /* AUInputElement.h */; };
8BF6DEA82F16B17E00F09130 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE242F16B17D00F09130 /* AUBase.h */; };
8BF6DEA92F16B17E00F09130 /* AUPlugInDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE252F16B17D00F09130 /* AUPlugInDispatch.h */; };
8BF6DEAA2F16B17E00F09130 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE262F16B17D00F09130 /* AUDispatch.h */; };
8BF6DEAB2F16B17E00F09130 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE272F16B17D00F09130 /* AUOutputElement.cpp */; };
8BF6DEAD2F16B17E00F09130 /* AUPlugInDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE292F16B17D00F09130 /* AUPlugInDispatch.cpp */; };
8BF6DEAE2F16B17E00F09130 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE2A2F16B17D00F09130 /* AUOutputElement.h */; };
8BF6DEAF2F16B17E00F09130 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE2B2F16B17D00F09130 /* AUDispatch.cpp */; };
8BF6DEB02F16B17E00F09130 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE2C2F16B17D00F09130 /* AUScopeElement.h */; };
8BF6DEB12F16B17E00F09130 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE2D2F16B17D00F09130 /* AUInputElement.cpp */; };
8BF6DEB22F16B17E00F09130 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE2F2F16B17D00F09130 /* AUEffectBase.cpp */; };
8BF6DEB32F16B17E00F09130 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE302F16B17D00F09130 /* AUEffectBase.h */; };
8BF6DEB42F16B17E00F09130 /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE322F16B17D00F09130 /* AUTimestampGenerator.h */; };
8BF6DEB52F16B17E00F09130 /* AUBaseHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE332F16B17D00F09130 /* AUBaseHelper.cpp */; };
8BF6DEB62F16B17E00F09130 /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE342F16B17D00F09130 /* AUSilentTimeout.h */; };
8BF6DEB72F16B17E00F09130 /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE352F16B17D00F09130 /* AUInputFormatConverter.h */; };
8BF6DEB82F16B17E00F09130 /* AUTimestampGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE362F16B17D00F09130 /* AUTimestampGenerator.cpp */; };
8BF6DEB92F16B17E00F09130 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BF6DE372F16B17D00F09130 /* AUBuffer.cpp */; };
8BF6DEBA2F16B17E00F09130 /* AUMIDIDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE382F16B17D00F09130 /* AUMIDIDefs.h */; };
8BF6DEBB2F16B17E00F09130 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE392F16B17D00F09130 /* AUBuffer.h */; };
8BF6DEBC2F16B17E00F09130 /* AUBaseHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF6DE3A2F16B17D00F09130 /* AUBaseHelper.h */; };
8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
8B5C7FBF076FB2C200A15F61 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
8BA05A660720730100365D66 /* TapeHack2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = TapeHack2.cpp; sourceTree = "<group>"; };
8BA05A670720730100365D66 /* TapeHack2.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = TapeHack2.exp; sourceTree = "<group>"; };
8BA05A680720730100365D66 /* TapeHack2.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = TapeHack2.r; sourceTree = "<group>"; };
8BA05A690720730100365D66 /* TapeHack2Version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TapeHack2Version.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 /* TapeHack2.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TapeHack2.h; sourceTree = "<group>"; };
8BF6DDB32F16B17D00F09130 /* CAExtAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAExtAudioFile.h; sourceTree = "<group>"; };
8BF6DDB42F16B17D00F09130 /* CACFMachPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMachPort.h; sourceTree = "<group>"; };
8BF6DDB52F16B17D00F09130 /* CABool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABool.h; sourceTree = "<group>"; };
8BF6DDB62F16B17D00F09130 /* CAComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponent.cpp; sourceTree = "<group>"; };
8BF6DDB72F16B17D00F09130 /* CADebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugger.h; sourceTree = "<group>"; };
8BF6DDB82F16B17D00F09130 /* CACFNumber.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFNumber.cpp; sourceTree = "<group>"; };
8BF6DDB92F16B17D00F09130 /* CAGuard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAGuard.h; sourceTree = "<group>"; };
8BF6DDBA2F16B17D00F09130 /* CAAtomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomic.h; sourceTree = "<group>"; };
8BF6DDBB2F16B17D00F09130 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
8BF6DDBC2F16B17D00F09130 /* CACFObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFObject.h; sourceTree = "<group>"; };
8BF6DDBD2F16B17D00F09130 /* CAStreamRangedDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAStreamRangedDescription.h; sourceTree = "<group>"; };
8BF6DDBE2F16B17D00F09130 /* CATokenMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATokenMap.h; sourceTree = "<group>"; };
8BF6DDBF2F16B17D00F09130 /* CAComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponent.h; sourceTree = "<group>"; };
8BF6DDC02F16B17D00F09130 /* CAAudioBufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioBufferList.h; sourceTree = "<group>"; };
8BF6DDC12F16B17D00F09130 /* CAAudioUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnit.h; sourceTree = "<group>"; };
8BF6DDC22F16B17D00F09130 /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = "<group>"; };
8BF6DDC32F16B17D00F09130 /* CAException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAException.h; sourceTree = "<group>"; };
8BF6DDC42F16B17D00F09130 /* CAAUProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUProcessor.cpp; sourceTree = "<group>"; };
8BF6DDC52F16B17D00F09130 /* CAAUProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUProcessor.h; sourceTree = "<group>"; };
8BF6DDC62F16B17D00F09130 /* CAProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAProcess.h; sourceTree = "<group>"; };
8BF6DDC72F16B17D00F09130 /* CACFDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDictionary.h; sourceTree = "<group>"; };
8BF6DDC82F16B17D00F09130 /* CAPThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPThread.h; sourceTree = "<group>"; };
8BF6DDC92F16B17D00F09130 /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = "<group>"; };
8BF6DDCA2F16B17D00F09130 /* CAAudioTimeStamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioTimeStamp.h; sourceTree = "<group>"; };
8BF6DDCB2F16B17D00F09130 /* CAFilePathUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAFilePathUtils.cpp; sourceTree = "<group>"; };
8BF6DDCC2F16B17D00F09130 /* CAAudioValueRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioValueRange.h; sourceTree = "<group>"; };
8BF6DDCD2F16B17D00F09130 /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; };
8BF6DDCE2F16B17D00F09130 /* CAAudioChannelLayoutObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayoutObject.cpp; sourceTree = "<group>"; };
8BF6DDCF2F16B17D00F09130 /* CAGuard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAGuard.cpp; sourceTree = "<group>"; };
8BF6DDD02F16B17D00F09130 /* CACFNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFNumber.h; sourceTree = "<group>"; };
8BF6DDD12F16B17D00F09130 /* CACFDistributedNotification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDistributedNotification.cpp; sourceTree = "<group>"; };
8BF6DDD22F16B17D00F09130 /* CACFString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFString.h; sourceTree = "<group>"; };
8BF6DDD32F16B17D00F09130 /* CAAUMIDIMapManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMapManager.cpp; sourceTree = "<group>"; };
8BF6DDD42F16B17D00F09130 /* CAComponentDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAComponentDescription.cpp; sourceTree = "<group>"; };
8BF6DDD52F16B17D00F09130 /* CAHostTimeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAHostTimeBase.h; sourceTree = "<group>"; };
8BF6DDD62F16B17D00F09130 /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugMacros.cpp; sourceTree = "<group>"; };
8BF6DDD72F16B17D00F09130 /* CAAudioFileFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioFileFormats.h; sourceTree = "<group>"; };
8BF6DDD82F16B17D00F09130 /* CAAUMIDIMapManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMapManager.h; sourceTree = "<group>"; };
8BF6DDD92F16B17D00F09130 /* CACFDictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFDictionary.cpp; sourceTree = "<group>"; };
8BF6DDDA2F16B17D00F09130 /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMutex.h; sourceTree = "<group>"; };
8BF6DDDB2F16B17D00F09130 /* CACFString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFString.cpp; sourceTree = "<group>"; };
8BF6DDDC2F16B17D00F09130 /* CASettingsStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASettingsStorage.h; sourceTree = "<group>"; };
8BF6DDDD2F16B17D00F09130 /* CADebugPrintf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugPrintf.h; sourceTree = "<group>"; };
8BF6DDDE2F16B17D00F09130 /* CAXException.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAXException.cpp; sourceTree = "<group>"; };
8BF6DDDF2F16B17D00F09130 /* CAAUMIDIMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAUMIDIMap.h; sourceTree = "<group>"; };
8BF6DDE02F16B17D00F09130 /* AUParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUParamInfo.h; sourceTree = "<group>"; };
8BF6DDE12F16B17D00F09130 /* CABitOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABitOperations.h; sourceTree = "<group>"; };
8BF6DDE22F16B17D00F09130 /* CACFPreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFPreferences.cpp; sourceTree = "<group>"; };
8BF6DDE32F16B17D00F09130 /* CABundleLocker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABundleLocker.h; sourceTree = "<group>"; };
8BF6DDE42F16B17D00F09130 /* CAPropertyAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAPropertyAddress.h; sourceTree = "<group>"; };
8BF6DDE52F16B17D00F09130 /* CAXException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAXException.h; sourceTree = "<group>"; };
8BF6DDE62F16B17D00F09130 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
8BF6DDE72F16B17D00F09130 /* CAThreadSafeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAThreadSafeList.h; sourceTree = "<group>"; };
8BF6DDE82F16B17D00F09130 /* CAAudioUnitOutputCapturer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioUnitOutputCapturer.h; sourceTree = "<group>"; };
8BF6DDE92F16B17D00F09130 /* AUParamInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUParamInfo.cpp; sourceTree = "<group>"; };
8BF6DDEA2F16B17D00F09130 /* CASharedLibrary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASharedLibrary.cpp; sourceTree = "<group>"; };
8BF6DDEB2F16B17D00F09130 /* CAAUMIDIMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUMIDIMap.cpp; sourceTree = "<group>"; };
8BF6DDEC2F16B17D00F09130 /* CALogMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CALogMacros.h; sourceTree = "<group>"; };
8BF6DDED2F16B17D00F09130 /* CACFMessagePort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMessagePort.cpp; sourceTree = "<group>"; };
8BF6DDEE2F16B17D00F09130 /* CARingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CARingBuffer.h; sourceTree = "<group>"; };
8BF6DDEF2F16B17D00F09130 /* AUOutputBL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputBL.cpp; sourceTree = "<group>"; };
8BF6DDF02F16B17D00F09130 /* CABufferList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CABufferList.h; sourceTree = "<group>"; };
8BF6DDF12F16B17D00F09130 /* CASharedLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CASharedLibrary.h; sourceTree = "<group>"; };
8BF6DDF22F16B17D00F09130 /* CACFData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFData.h; sourceTree = "<group>"; };
8BF6DDF32F16B17D00F09130 /* CAStreamRangedDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamRangedDescription.cpp; sourceTree = "<group>"; };
8BF6DDF42F16B17D00F09130 /* CAPThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPThread.cpp; sourceTree = "<group>"; };
8BF6DDF52F16B17D00F09130 /* CAAutoDisposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAutoDisposer.h; sourceTree = "<group>"; };
8BF6DDF62F16B17D00F09130 /* CACFPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPreferences.h; sourceTree = "<group>"; };
8BF6DDF72F16B17D00F09130 /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = "<group>"; };
8BF6DDF82F16B17D00F09130 /* CAComponentDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAComponentDescription.h; sourceTree = "<group>"; };
8BF6DDF92F16B17D00F09130 /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CADebugMacros.h; sourceTree = "<group>"; };
8BF6DDFA2F16B17D00F09130 /* AUOutputBL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputBL.h; sourceTree = "<group>"; };
8BF6DDFB2F16B17D00F09130 /* CADebugPrintf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugPrintf.cpp; sourceTree = "<group>"; };
8BF6DDFC2F16B17D00F09130 /* CARingBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CARingBuffer.cpp; sourceTree = "<group>"; };
8BF6DDFD2F16B17D00F09130 /* CACFPlugIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFPlugIn.h; sourceTree = "<group>"; };
8BF6DDFE2F16B17D00F09130 /* CASettingsStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CASettingsStorage.cpp; sourceTree = "<group>"; };
8BF6DDFF2F16B17D00F09130 /* CAMixMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMixMap.h; sourceTree = "<group>"; };
8BF6DE002F16B17D00F09130 /* CACFDistributedNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFDistributedNotification.h; sourceTree = "<group>"; };
8BF6DE012F16B17D00F09130 /* CAFilePathUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAFilePathUtils.h; sourceTree = "<group>"; };
8BF6DE022F16B17D00F09130 /* CATink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CATink.h; sourceTree = "<group>"; };
8BF6DE032F16B17D00F09130 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
8BF6DE042F16B17D00F09130 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
8BF6DE052F16B17D00F09130 /* CAProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAProcess.cpp; sourceTree = "<group>"; };
8BF6DE062F16B17D00F09130 /* CAHostTimeBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAHostTimeBase.cpp; sourceTree = "<group>"; };
8BF6DE072F16B17D00F09130 /* CAPersistence.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAPersistence.cpp; sourceTree = "<group>"; };
8BF6DE082F16B17D00F09130 /* CAAudioBufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioBufferList.cpp; sourceTree = "<group>"; };
8BF6DE092F16B17D00F09130 /* CAAudioTimeStamp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioTimeStamp.cpp; sourceTree = "<group>"; };
8BF6DE0A2F16B17D00F09130 /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = "<group>"; };
8BF6DE0B2F16B17D00F09130 /* CAByteOrder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAByteOrder.h; sourceTree = "<group>"; };
8BF6DE0C2F16B17D00F09130 /* CACFArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFArray.h; sourceTree = "<group>"; };
8BF6DE0D2F16B17D00F09130 /* CAAtomicStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAtomicStack.h; sourceTree = "<group>"; };
8BF6DE0E2F16B17D00F09130 /* CAReferenceCounted.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAReferenceCounted.h; sourceTree = "<group>"; };
8BF6DE0F2F16B17D00F09130 /* CACFMachPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFMachPort.cpp; sourceTree = "<group>"; };
8BF6DE102F16B17D00F09130 /* CABufferList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABufferList.cpp; sourceTree = "<group>"; };
8BF6DE112F16B17D00F09130 /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAMutex.cpp; sourceTree = "<group>"; };
8BF6DE122F16B17D00F09130 /* CADebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADebugger.cpp; sourceTree = "<group>"; };
8BF6DE132F16B17D00F09130 /* CABundleLocker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CABundleLocker.cpp; sourceTree = "<group>"; };
8BF6DE142F16B17D00F09130 /* CAAudioFileFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioFileFormats.cpp; sourceTree = "<group>"; };
8BF6DE152F16B17D00F09130 /* CAMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAMath.h; sourceTree = "<group>"; };
8BF6DE162F16B17D00F09130 /* CACFArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CACFArray.cpp; sourceTree = "<group>"; };
8BF6DE172F16B17D00F09130 /* CACFMessagePort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CACFMessagePort.h; sourceTree = "<group>"; };
8BF6DE182F16B17D00F09130 /* CAAudioValueRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioValueRange.cpp; sourceTree = "<group>"; };
8BF6DE192F16B17D00F09130 /* CAAudioUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioUnit.cpp; sourceTree = "<group>"; };
8BF6DE1D2F16B17D00F09130 /* AUViewLocalizedStringKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUViewLocalizedStringKeys.h; sourceTree = "<group>"; };
8BF6DE1F2F16B17D00F09130 /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; };
8BF6DE202F16B17D00F09130 /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; };
8BF6DE212F16B17D00F09130 /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; };
8BF6DE222F16B17D00F09130 /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; };
8BF6DE232F16B17D00F09130 /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; };
8BF6DE242F16B17D00F09130 /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; };
8BF6DE252F16B17D00F09130 /* AUPlugInDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUPlugInDispatch.h; sourceTree = "<group>"; };
8BF6DE262F16B17D00F09130 /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; };
8BF6DE272F16B17D00F09130 /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; };
8BF6DE282F16B17D00F09130 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; };
8BF6DE292F16B17D00F09130 /* AUPlugInDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUPlugInDispatch.cpp; sourceTree = "<group>"; };
8BF6DE2A2F16B17D00F09130 /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; };
8BF6DE2B2F16B17D00F09130 /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; };
8BF6DE2C2F16B17D00F09130 /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; };
8BF6DE2D2F16B17D00F09130 /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; };
8BF6DE2F2F16B17D00F09130 /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; };
8BF6DE302F16B17D00F09130 /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; };
8BF6DE322F16B17D00F09130 /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = "<group>"; };
8BF6DE332F16B17D00F09130 /* AUBaseHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBaseHelper.cpp; sourceTree = "<group>"; };
8BF6DE342F16B17D00F09130 /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = "<group>"; };
8BF6DE352F16B17D00F09130 /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = "<group>"; };
8BF6DE362F16B17D00F09130 /* AUTimestampGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUTimestampGenerator.cpp; sourceTree = "<group>"; };
8BF6DE372F16B17D00F09130 /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
8BF6DE382F16B17D00F09130 /* AUMIDIDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUMIDIDefs.h; sourceTree = "<group>"; };
8BF6DE392F16B17D00F09130 /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; };
8BF6DE3A2F16B17D00F09130 /* AUBaseHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AUBaseHelper.h; sourceTree = "<group>"; };
8BF6DEBD2F16B3B000F09130 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
8D01CCD20486CAD60068D4B7 /* TapeHack2.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TapeHack2.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 /* TapeHack2 */ = {
isa = PBXGroup;
children = (
08FB77ADFE841716C02AAC07 /* Source */,
089C167CFE841241C02AAC07 /* Resources */,
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
19C28FB4FE9D528D11CA2CBB /* Products */,
);
name = TapeHack2;
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 = (
8BF6DDB12F16B17D00F09130 /* CA_SDK */,
8BA05A56072072A900365D66 /* AU Source */,
);
name = Source;
sourceTree = "<group>";
};
19C28FB4FE9D528D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D01CCD20486CAD60068D4B7 /* TapeHack2.component */,
);
name = Products;
sourceTree = "<group>";
};
8BA05A56072072A900365D66 /* AU Source */ = {
isa = PBXGroup;
children = (
8BC6025B073B072D006C4272 /* TapeHack2.h */,
8BA05A660720730100365D66 /* TapeHack2.cpp */,
8BA05A670720730100365D66 /* TapeHack2.exp */,
8BA05A680720730100365D66 /* TapeHack2.r */,
8BA05A690720730100365D66 /* TapeHack2Version.h */,
);
name = "AU Source";
sourceTree = "<group>";
};
8BF6DDB12F16B17D00F09130 /* CA_SDK */ = {
isa = PBXGroup;
children = (
8BF6DDB22F16B17D00F09130 /* PublicUtility */,
8BF6DE1A2F16B17D00F09130 /* AudioUnits */,
);
name = CA_SDK;
path = ../../../../CA_SDK;
sourceTree = "<group>";
};
8BF6DDB22F16B17D00F09130 /* PublicUtility */ = {
isa = PBXGroup;
children = (
8BF6DDB32F16B17D00F09130 /* CAExtAudioFile.h */,
8BF6DDB42F16B17D00F09130 /* CACFMachPort.h */,
8BF6DDB52F16B17D00F09130 /* CABool.h */,
8BF6DDB62F16B17D00F09130 /* CAComponent.cpp */,
8BF6DDB72F16B17D00F09130 /* CADebugger.h */,
8BF6DDB82F16B17D00F09130 /* CACFNumber.cpp */,
8BF6DDB92F16B17D00F09130 /* CAGuard.h */,
8BF6DDBA2F16B17D00F09130 /* CAAtomic.h */,
8BF6DDBB2F16B17D00F09130 /* CAStreamBasicDescription.h */,
8BF6DDBC2F16B17D00F09130 /* CACFObject.h */,
8BF6DDBD2F16B17D00F09130 /* CAStreamRangedDescription.h */,
8BF6DDBE2F16B17D00F09130 /* CATokenMap.h */,
8BF6DDBF2F16B17D00F09130 /* CAComponent.h */,
8BF6DDC02F16B17D00F09130 /* CAAudioBufferList.h */,
8BF6DDC12F16B17D00F09130 /* CAAudioUnit.h */,
8BF6DDC22F16B17D00F09130 /* CAAUParameter.h */,
8BF6DDC32F16B17D00F09130 /* CAException.h */,
8BF6DDC42F16B17D00F09130 /* CAAUProcessor.cpp */,
8BF6DDC52F16B17D00F09130 /* CAAUProcessor.h */,
8BF6DDC62F16B17D00F09130 /* CAProcess.h */,
8BF6DDC72F16B17D00F09130 /* CACFDictionary.h */,
8BF6DDC82F16B17D00F09130 /* CAPThread.h */,
8BF6DDC92F16B17D00F09130 /* CAAUParameter.cpp */,
8BF6DDCA2F16B17D00F09130 /* CAAudioTimeStamp.h */,
8BF6DDCB2F16B17D00F09130 /* CAFilePathUtils.cpp */,
8BF6DDCC2F16B17D00F09130 /* CAAudioValueRange.h */,
8BF6DDCD2F16B17D00F09130 /* CAVectorUnitTypes.h */,
8BF6DDCE2F16B17D00F09130 /* CAAudioChannelLayoutObject.cpp */,
8BF6DDCF2F16B17D00F09130 /* CAGuard.cpp */,
8BF6DDD02F16B17D00F09130 /* CACFNumber.h */,
8BF6DDD12F16B17D00F09130 /* CACFDistributedNotification.cpp */,
8BF6DDD22F16B17D00F09130 /* CACFString.h */,
8BF6DDD32F16B17D00F09130 /* CAAUMIDIMapManager.cpp */,
8BF6DDD42F16B17D00F09130 /* CAComponentDescription.cpp */,
8BF6DDD52F16B17D00F09130 /* CAHostTimeBase.h */,
8BF6DDD62F16B17D00F09130 /* CADebugMacros.cpp */,
8BF6DDD72F16B17D00F09130 /* CAAudioFileFormats.h */,
8BF6DDD82F16B17D00F09130 /* CAAUMIDIMapManager.h */,
8BF6DDD92F16B17D00F09130 /* CACFDictionary.cpp */,
8BF6DDDA2F16B17D00F09130 /* CAMutex.h */,
8BF6DDDB2F16B17D00F09130 /* CACFString.cpp */,
8BF6DDDC2F16B17D00F09130 /* CASettingsStorage.h */,
8BF6DDDD2F16B17D00F09130 /* CADebugPrintf.h */,
8BF6DDDE2F16B17D00F09130 /* CAXException.cpp */,
8BF6DDDF2F16B17D00F09130 /* CAAUMIDIMap.h */,
8BF6DDE02F16B17D00F09130 /* AUParamInfo.h */,
8BF6DDE12F16B17D00F09130 /* CABitOperations.h */,
8BF6DDE22F16B17D00F09130 /* CACFPreferences.cpp */,
8BF6DDE32F16B17D00F09130 /* CABundleLocker.h */,
8BF6DDE42F16B17D00F09130 /* CAPropertyAddress.h */,
8BF6DDE52F16B17D00F09130 /* CAXException.h */,
8BF6DDE62F16B17D00F09130 /* CAAudioChannelLayout.cpp */,
8BF6DDE72F16B17D00F09130 /* CAThreadSafeList.h */,
8BF6DDE82F16B17D00F09130 /* CAAudioUnitOutputCapturer.h */,
8BF6DDE92F16B17D00F09130 /* AUParamInfo.cpp */,
8BF6DDEA2F16B17D00F09130 /* CASharedLibrary.cpp */,
8BF6DDEB2F16B17D00F09130 /* CAAUMIDIMap.cpp */,
8BF6DDEC2F16B17D00F09130 /* CALogMacros.h */,
8BF6DDED2F16B17D00F09130 /* CACFMessagePort.cpp */,
8BF6DDEE2F16B17D00F09130 /* CARingBuffer.h */,
8BF6DDEF2F16B17D00F09130 /* AUOutputBL.cpp */,
8BF6DDF02F16B17D00F09130 /* CABufferList.h */,
8BF6DDF12F16B17D00F09130 /* CASharedLibrary.h */,
8BF6DDF22F16B17D00F09130 /* CACFData.h */,
8BF6DDF32F16B17D00F09130 /* CAStreamRangedDescription.cpp */,
8BF6DDF42F16B17D00F09130 /* CAPThread.cpp */,
8BF6DDF52F16B17D00F09130 /* CAAutoDisposer.h */,
8BF6DDF62F16B17D00F09130 /* CACFPreferences.h */,
8BF6DDF72F16B17D00F09130 /* CAVectorUnit.cpp */,
8BF6DDF82F16B17D00F09130 /* CAComponentDescription.h */,
8BF6DDF92F16B17D00F09130 /* CADebugMacros.h */,
8BF6DDFA2F16B17D00F09130 /* AUOutputBL.h */,
8BF6DDFB2F16B17D00F09130 /* CADebugPrintf.cpp */,
8BF6DDFC2F16B17D00F09130 /* CARingBuffer.cpp */,
8BF6DDFD2F16B17D00F09130 /* CACFPlugIn.h */,
8BF6DDFE2F16B17D00F09130 /* CASettingsStorage.cpp */,
8BF6DDFF2F16B17D00F09130 /* CAMixMap.h */,
8BF6DE002F16B17D00F09130 /* CACFDistributedNotification.h */,
8BF6DE012F16B17D00F09130 /* CAFilePathUtils.h */,
8BF6DE022F16B17D00F09130 /* CATink.h */,
8BF6DE032F16B17D00F09130 /* CAStreamBasicDescription.cpp */,
8BF6DE042F16B17D00F09130 /* CAAudioChannelLayout.h */,
8BF6DE052F16B17D00F09130 /* CAProcess.cpp */,
8BF6DE062F16B17D00F09130 /* CAHostTimeBase.cpp */,
8BF6DE072F16B17D00F09130 /* CAPersistence.cpp */,
8BF6DE082F16B17D00F09130 /* CAAudioBufferList.cpp */,
8BF6DE092F16B17D00F09130 /* CAAudioTimeStamp.cpp */,
8BF6DE0A2F16B17D00F09130 /* CAVectorUnit.h */,
8BF6DE0B2F16B17D00F09130 /* CAByteOrder.h */,
8BF6DE0C2F16B17D00F09130 /* CACFArray.h */,
8BF6DE0D2F16B17D00F09130 /* CAAtomicStack.h */,
8BF6DE0E2F16B17D00F09130 /* CAReferenceCounted.h */,
8BF6DE0F2F16B17D00F09130 /* CACFMachPort.cpp */,
8BF6DE102F16B17D00F09130 /* CABufferList.cpp */,
8BF6DE112F16B17D00F09130 /* CAMutex.cpp */,
8BF6DE122F16B17D00F09130 /* CADebugger.cpp */,
8BF6DE132F16B17D00F09130 /* CABundleLocker.cpp */,
8BF6DE142F16B17D00F09130 /* CAAudioFileFormats.cpp */,
8BF6DE152F16B17D00F09130 /* CAMath.h */,
8BF6DE162F16B17D00F09130 /* CACFArray.cpp */,
8BF6DE172F16B17D00F09130 /* CACFMessagePort.h */,
8BF6DE182F16B17D00F09130 /* CAAudioValueRange.cpp */,
8BF6DE192F16B17D00F09130 /* CAAudioUnit.cpp */,
);
path = PublicUtility;
sourceTree = "<group>";
};
8BF6DE1A2F16B17D00F09130 /* AudioUnits */ = {
isa = PBXGroup;
children = (
8BF6DE1B2F16B17D00F09130 /* AUPublic */,
);
path = AudioUnits;
sourceTree = "<group>";
};
8BF6DE1B2F16B17D00F09130 /* AUPublic */ = {
isa = PBXGroup;
children = (
8BF6DE1C2F16B17D00F09130 /* AUViewBase */,
8BF6DE1E2F16B17D00F09130 /* AUBase */,
8BF6DE2E2F16B17D00F09130 /* OtherBases */,
8BF6DE312F16B17D00F09130 /* Utility */,
);
path = AUPublic;
sourceTree = "<group>";
};
8BF6DE1C2F16B17D00F09130 /* AUViewBase */ = {
isa = PBXGroup;
children = (
8BF6DE1D2F16B17D00F09130 /* AUViewLocalizedStringKeys.h */,
);
path = AUViewBase;
sourceTree = "<group>";
};
8BF6DE1E2F16B17D00F09130 /* AUBase */ = {
isa = PBXGroup;
children = (
8BF6DE1F2F16B17D00F09130 /* ComponentBase.cpp */,
8BF6DE202F16B17D00F09130 /* AUScopeElement.cpp */,
8BF6DE212F16B17D00F09130 /* ComponentBase.h */,
8BF6DE222F16B17D00F09130 /* AUBase.cpp */,
8BF6DE232F16B17D00F09130 /* AUInputElement.h */,
8BF6DE242F16B17D00F09130 /* AUBase.h */,
8BF6DE252F16B17D00F09130 /* AUPlugInDispatch.h */,
8BF6DE262F16B17D00F09130 /* AUDispatch.h */,
8BF6DE272F16B17D00F09130 /* AUOutputElement.cpp */,
8BF6DE282F16B17D00F09130 /* AUResources.r */,
8BF6DE292F16B17D00F09130 /* AUPlugInDispatch.cpp */,
8BF6DE2A2F16B17D00F09130 /* AUOutputElement.h */,
8BF6DE2B2F16B17D00F09130 /* AUDispatch.cpp */,
8BF6DE2C2F16B17D00F09130 /* AUScopeElement.h */,
8BF6DE2D2F16B17D00F09130 /* AUInputElement.cpp */,
);
path = AUBase;
sourceTree = "<group>";
};
8BF6DE2E2F16B17D00F09130 /* OtherBases */ = {
isa = PBXGroup;
children = (
8BF6DE2F2F16B17D00F09130 /* AUEffectBase.cpp */,
8BF6DE302F16B17D00F09130 /* AUEffectBase.h */,
);
path = OtherBases;
sourceTree = "<group>";
};
8BF6DE312F16B17D00F09130 /* Utility */ = {
isa = PBXGroup;
children = (
8BF6DE322F16B17D00F09130 /* AUTimestampGenerator.h */,
8BF6DE332F16B17D00F09130 /* AUBaseHelper.cpp */,
8BF6DE342F16B17D00F09130 /* AUSilentTimeout.h */,
8BF6DE352F16B17D00F09130 /* AUInputFormatConverter.h */,
8BF6DE362F16B17D00F09130 /* AUTimestampGenerator.cpp */,
8BF6DE372F16B17D00F09130 /* AUBuffer.cpp */,
8BF6DE382F16B17D00F09130 /* AUMIDIDefs.h */,
8BF6DE392F16B17D00F09130 /* AUBuffer.h */,
8BF6DE3A2F16B17D00F09130 /* AUBaseHelper.h */,
);
path = Utility;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8D01CCC70486CAD60068D4B7 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
8BF6DE6B2F16B17E00F09130 /* CABundleLocker.h in Headers */,
8BF6DE8C2F16B17E00F09130 /* CAAudioChannelLayout.h in Headers */,
8BF6DE822F16B17E00F09130 /* AUOutputBL.h in Headers */,
8BF6DE5D2F16B17E00F09130 /* CAHostTimeBase.h in Headers */,
8BF6DEA52F16B17E00F09130 /* ComponentBase.h in Headers */,
8BF6DE952F16B17E00F09130 /* CAAtomicStack.h in Headers */,
8BF6DE522F16B17E00F09130 /* CAAudioTimeStamp.h in Headers */,
8BF6DE6F2F16B17E00F09130 /* CAThreadSafeList.h in Headers */,
8BF6DE4A2F16B17E00F09130 /* CAAUParameter.h in Headers */,
8BF6DEBC2F16B17E00F09130 /* AUBaseHelper.h in Headers */,
8BF6DEB42F16B17E00F09130 /* AUTimestampGenerator.h in Headers */,
8BF6DE652F16B17E00F09130 /* CADebugPrintf.h in Headers */,
8BF6DE9F2F16B17E00F09130 /* CACFMessagePort.h in Headers */,
8BF6DE4D2F16B17E00F09130 /* CAAUProcessor.h in Headers */,
8BF6DE492F16B17E00F09130 /* CAAudioUnit.h in Headers */,
8BF6DEA22F16B17E00F09130 /* AUViewLocalizedStringKeys.h in Headers */,
8BF6DE882F16B17E00F09130 /* CACFDistributedNotification.h in Headers */,
8BF6DE472F16B17E00F09130 /* CAComponent.h in Headers */,
8BF6DE552F16B17E00F09130 /* CAVectorUnitTypes.h in Headers */,
8BA05A6E0720730100365D66 /* TapeHack2Version.h in Headers */,
8BF6DE892F16B17E00F09130 /* CAFilePathUtils.h in Headers */,
8BF6DE4B2F16B17E00F09130 /* CAException.h in Headers */,
8BF6DE422F16B17E00F09130 /* CAAtomic.h in Headers */,
8BF6DE412F16B17E00F09130 /* CAGuard.h in Headers */,
8BF6DEA72F16B17E00F09130 /* AUInputElement.h in Headers */,
8BF6DE7E2F16B17E00F09130 /* CACFPreferences.h in Headers */,
8BF6DE932F16B17E00F09130 /* CAByteOrder.h in Headers */,
8BF6DE762F16B17E00F09130 /* CARingBuffer.h in Headers */,
8BF6DE3D2F16B17D00F09130 /* CABool.h in Headers */,
8BF6DE622F16B17E00F09130 /* CAMutex.h in Headers */,
8BF6DEA82F16B17E00F09130 /* AUBase.h in Headers */,
8BC6025C073B072D006C4272 /* TapeHack2.h in Headers */,
8BF6DE5A2F16B17E00F09130 /* CACFString.h in Headers */,
8BF6DE792F16B17E00F09130 /* CASharedLibrary.h in Headers */,
8BF6DE462F16B17E00F09130 /* CATokenMap.h in Headers */,
8BF6DE3B2F16B17D00F09130 /* CAExtAudioFile.h in Headers */,
8BF6DE502F16B17E00F09130 /* CAPThread.h in Headers */,
8BF6DE6C2F16B17E00F09130 /* CAPropertyAddress.h in Headers */,
8BF6DE962F16B17E00F09130 /* CAReferenceCounted.h in Headers */,
8BF6DEBB2F16B17E00F09130 /* AUBuffer.h in Headers */,
8BF6DE9D2F16B17E00F09130 /* CAMath.h in Headers */,
8BF6DE7D2F16B17E00F09130 /* CAAutoDisposer.h in Headers */,
8BF6DE442F16B17E00F09130 /* CACFObject.h in Headers */,
8BF6DE642F16B17E00F09130 /* CASettingsStorage.h in Headers */,
8BF6DE6D2F16B17E00F09130 /* CAXException.h in Headers */,
8BF6DE8A2F16B17E00F09130 /* CATink.h in Headers */,
8BF6DEB72F16B17E00F09130 /* AUInputFormatConverter.h in Headers */,
8BF6DE922F16B17E00F09130 /* CAVectorUnit.h in Headers */,
8BF6DE4E2F16B17E00F09130 /* CAProcess.h in Headers */,
8BF6DE542F16B17E00F09130 /* CAAudioValueRange.h in Headers */,
8BF6DE692F16B17E00F09130 /* CABitOperations.h in Headers */,
8BF6DE5F2F16B17E00F09130 /* CAAudioFileFormats.h in Headers */,
8BF6DE582F16B17E00F09130 /* CACFNumber.h in Headers */,
8BF6DE702F16B17E00F09130 /* CAAudioUnitOutputCapturer.h in Headers */,
8BF6DE812F16B17E00F09130 /* CADebugMacros.h in Headers */,
8BF6DEBA2F16B17E00F09130 /* AUMIDIDefs.h in Headers */,
8BF6DE7A2F16B17E00F09130 /* CACFData.h in Headers */,
8BF6DE432F16B17E00F09130 /* CAStreamBasicDescription.h in Headers */,
8BF6DEA92F16B17E00F09130 /* AUPlugInDispatch.h in Headers */,
8BF6DE452F16B17E00F09130 /* CAStreamRangedDescription.h in Headers */,
8BF6DE852F16B17E00F09130 /* CACFPlugIn.h in Headers */,
8BF6DE482F16B17E00F09130 /* CAAudioBufferList.h in Headers */,
8BF6DE602F16B17E00F09130 /* CAAUMIDIMapManager.h in Headers */,
8BF6DEB32F16B17E00F09130 /* AUEffectBase.h in Headers */,
8BF6DE4F2F16B17E00F09130 /* CACFDictionary.h in Headers */,
8BF6DEB02F16B17E00F09130 /* AUScopeElement.h in Headers */,
8BF6DE802F16B17E00F09130 /* CAComponentDescription.h in Headers */,
8BF6DEB62F16B17E00F09130 /* AUSilentTimeout.h in Headers */,
8BF6DE782F16B17E00F09130 /* CABufferList.h in Headers */,
8BF6DEAA2F16B17E00F09130 /* AUDispatch.h in Headers */,
8BF6DEAE2F16B17E00F09130 /* AUOutputElement.h in Headers */,
8BF6DE742F16B17E00F09130 /* CALogMacros.h in Headers */,
8BF6DE682F16B17E00F09130 /* AUParamInfo.h in Headers */,
8BF6DE872F16B17E00F09130 /* CAMixMap.h in Headers */,
8BF6DE942F16B17E00F09130 /* CACFArray.h in Headers */,
8BF6DE3C2F16B17D00F09130 /* CACFMachPort.h in Headers */,
8BF6DE672F16B17E00F09130 /* CAAUMIDIMap.h in Headers */,
8BF6DE3F2F16B17D00F09130 /* CADebugger.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8D01CCC60486CAD60068D4B7 /* TapeHack2 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "TapeHack2" */;
buildPhases = (
8D01CCC70486CAD60068D4B7 /* Headers */,
8D01CCC90486CAD60068D4B7 /* Resources */,
8D01CCCB0486CAD60068D4B7 /* Sources */,
8D01CCCD0486CAD60068D4B7 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = TapeHack2;
productInstallPath = "$(HOME)/Library/Bundles";
productName = TapeHack2;
productReference = 8D01CCD20486CAD60068D4B7 /* TapeHack2.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 "TapeHack2" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = en;
hasScannedForEncodings = 1;
knownRegions = (
en,
de,
Base,
ja,
fr,
);
mainGroup = 089C166AFE841209C02AAC07 /* TapeHack2 */;
projectDirPath = "";
projectRoot = "";
targets = (
8D01CCC60486CAD60068D4B7 /* TapeHack2 */,
);
};
/* 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 = (
8BF6DE772F16B17E00F09130 /* AUOutputBL.cpp in Sources */,
8BF6DE9C2F16B17E00F09130 /* CAAudioFileFormats.cpp in Sources */,
8BF6DE8E2F16B17E00F09130 /* CAHostTimeBase.cpp in Sources */,
8BF6DE662F16B17E00F09130 /* CAXException.cpp in Sources */,
8BF6DE902F16B17E00F09130 /* CAAudioBufferList.cpp in Sources */,
8BF6DE532F16B17E00F09130 /* CAFilePathUtils.cpp in Sources */,
8BF6DE512F16B17E00F09130 /* CAAUParameter.cpp in Sources */,
8BF6DE732F16B17E00F09130 /* CAAUMIDIMap.cpp in Sources */,
8BF6DEA02F16B17E00F09130 /* CAAudioValueRange.cpp in Sources */,
8BF6DEAF2F16B17E00F09130 /* AUDispatch.cpp in Sources */,
8BF6DE6A2F16B17E00F09130 /* CACFPreferences.cpp in Sources */,
8BF6DEAD2F16B17E00F09130 /* AUPlugInDispatch.cpp in Sources */,
8BF6DE4C2F16B17E00F09130 /* CAAUProcessor.cpp in Sources */,
8BF6DE612F16B17E00F09130 /* CACFDictionary.cpp in Sources */,
8BF6DEB52F16B17E00F09130 /* AUBaseHelper.cpp in Sources */,
8BF6DE9A2F16B17E00F09130 /* CADebugger.cpp in Sources */,
8BF6DE6E2F16B17E00F09130 /* CAAudioChannelLayout.cpp in Sources */,
8BF6DE712F16B17E00F09130 /* AUParamInfo.cpp in Sources */,
8BF6DE8F2F16B17E00F09130 /* CAPersistence.cpp in Sources */,
8BF6DE832F16B17E00F09130 /* CADebugPrintf.cpp in Sources */,
8BF6DEB82F16B17E00F09130 /* AUTimestampGenerator.cpp in Sources */,
8BF6DE8B2F16B17E00F09130 /* CAStreamBasicDescription.cpp in Sources */,
8BF6DE5B2F16B17E00F09130 /* CAAUMIDIMapManager.cpp in Sources */,
8BF6DE862F16B17E00F09130 /* CASettingsStorage.cpp in Sources */,
8BF6DEAB2F16B17E00F09130 /* AUOutputElement.cpp in Sources */,
8BF6DE572F16B17E00F09130 /* CAGuard.cpp in Sources */,
8BA05A6B0720730100365D66 /* TapeHack2.cpp in Sources */,
8BF6DE992F16B17E00F09130 /* CAMutex.cpp in Sources */,
8BF6DEB22F16B17E00F09130 /* AUEffectBase.cpp in Sources */,
8BF6DE972F16B17E00F09130 /* CACFMachPort.cpp in Sources */,
8BF6DEA62F16B17E00F09130 /* AUBase.cpp in Sources */,
8BF6DE722F16B17E00F09130 /* CASharedLibrary.cpp in Sources */,
8BF6DE592F16B17E00F09130 /* CACFDistributedNotification.cpp in Sources */,
8BF6DE5C2F16B17E00F09130 /* CAComponentDescription.cpp in Sources */,
8BF6DE632F16B17E00F09130 /* CACFString.cpp in Sources */,
8BF6DEA32F16B17E00F09130 /* ComponentBase.cpp in Sources */,
8BF6DE842F16B17E00F09130 /* CARingBuffer.cpp in Sources */,
8BF6DEA42F16B17E00F09130 /* AUScopeElement.cpp in Sources */,
8BF6DEA12F16B17E00F09130 /* CAAudioUnit.cpp in Sources */,
8BF6DE9E2F16B17E00F09130 /* CACFArray.cpp in Sources */,
8BF6DE9B2F16B17E00F09130 /* CABundleLocker.cpp in Sources */,
8BF6DE8D2F16B17E00F09130 /* CAProcess.cpp in Sources */,
8BF6DE7B2F16B17E00F09130 /* CAStreamRangedDescription.cpp in Sources */,
8BF6DE7C2F16B17E00F09130 /* CAPThread.cpp in Sources */,
8BF6DE3E2F16B17D00F09130 /* CAComponent.cpp in Sources */,
8BF6DE562F16B17E00F09130 /* CAAudioChannelLayoutObject.cpp in Sources */,
8BF6DE912F16B17E00F09130 /* CAAudioTimeStamp.cpp in Sources */,
8BF6DE982F16B17E00F09130 /* CABufferList.cpp in Sources */,
8BF6DE752F16B17E00F09130 /* CACFMessagePort.cpp in Sources */,
8BF6DE7F2F16B17E00F09130 /* CAVectorUnit.cpp in Sources */,
8BF6DEB12F16B17E00F09130 /* AUInputElement.cpp in Sources */,
8BF6DEB92F16B17E00F09130 /* AUBuffer.cpp in Sources */,
8BF6DE5E2F16B17E00F09130 /* CADebugMacros.cpp in Sources */,
8BF6DE402F16B17D00F09130 /* CACFNumber.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
8BF6DEBD2F16B3B000F09130 /* 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 = TapeHack2.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 = TapeHack2;
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 = TapeHack2.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 = TapeHack2;
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 "TapeHack2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA244089833B7007656EC /* Debug */,
3E4BA245089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
3E4BA247089833B7007656EC /* Build configuration list for PBXProject "TapeHack2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3E4BA248089833B7007656EC /* Debug */,
3E4BA249089833B7007656EC /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = 089C1669FE841209C02AAC07 /* Project object */;
}

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