aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/MacAU/NotJustAnotherDither
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MacAU/NotJustAnotherDither')
-rwxr-xr-xplugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.cpp213
-rwxr-xr-xplugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.h15
-rwxr-xr-xplugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser65
-rwxr-xr-xplugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev350
4 files changed, 173 insertions, 170 deletions
diff --git a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.cpp b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.cpp
index 2ca3c6f..5ca17fd 100755
--- a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.cpp
+++ b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.cpp
@@ -59,6 +59,8 @@ NotJustAnotherDither::NotJustAnotherDither(AudioUnit component)
{
CreateElements();
Globals()->UseIndexedParameters(kNumberOfParameters);
+ SetParameter(kParam_One, kDefaultValue_ParamOne );
+ SetParameter(kParam_Two, kDefaultValue_ParamTwo );
#if AU_DEBUG_DISPATCHER
mDebugDispatcher = new AUDebugDispatcher (this);
@@ -74,7 +76,22 @@ ComponentResult NotJustAnotherDither::GetParameterValueStrings(AudioUnitScope
AudioUnitParameterID inParameterID,
CFArrayRef * outStrings)
{
-
+ if ((inScope == kAudioUnitScope_Global) && (inParameterID == kParam_One)) //ID must be actual name of parameter identifier, not number
+ {
+ if (outStrings == NULL) return noErr;
+ CFStringRef strings [] =
+ {
+ kMenuItem_CD,
+ kMenuItem_HD,
+ };
+ *outStrings = CFArrayCreate (
+ NULL,
+ (const void **) strings,
+ (sizeof (strings) / sizeof (strings [0])),
+ NULL
+ );
+ return noErr;
+ }
return kAudioUnitErr_InvalidProperty;
}
@@ -95,10 +112,24 @@ ComponentResult NotJustAnotherDither::GetParameterInfo(AudioUnitScope inScope
if (inScope == kAudioUnitScope_Global) {
switch(inParameterID)
{
- default:
+ case kParam_One:
+ AUBase::FillInParameterName (outParameterInfo, kParameterOneName, false);
+ outParameterInfo.unit = kAudioUnitParameterUnit_Indexed;
+ outParameterInfo.minValue = kCD;
+ outParameterInfo.maxValue = kHD;
+ outParameterInfo.defaultValue = kDefaultValue_ParamOne;
+ break;
+ case kParam_Two:
+ AUBase::FillInParameterName (outParameterInfo, kParameterTwoName, false);
+ outParameterInfo.unit = kAudioUnitParameterUnit_Generic;
+ outParameterInfo.minValue = 0.0;
+ outParameterInfo.maxValue = 1.0;
+ outParameterInfo.defaultValue = kDefaultValue_ParamTwo;
+ break;
+ default:
result = kAudioUnitErr_InvalidParameter;
break;
- }
+ }
} else {
result = kAudioUnitErr_InvalidParameter;
}
@@ -150,18 +181,19 @@ ComponentResult NotJustAnotherDither::Initialize()
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void NotJustAnotherDither::NotJustAnotherDitherKernel::Reset()
{
- byn[0] = 1000;
- byn[1] = 301;
- byn[2] = 176;
- byn[3] = 125;
- byn[4] = 97;
- byn[5] = 79;
- byn[6] = 67;
- byn[7] = 58;
- byn[8] = 51;
- byn[9] = 46;
- byn[10] = 1000;
+ byn[0] = 1000.0;
+ byn[1] = 301.0;
+ byn[2] = 176.0;
+ byn[3] = 125.0;
+ byn[4] = 97.0;
+ byn[5] = 79.0;
+ byn[6] = 67.0;
+ byn[7] = 58.0;
+ byn[8] = 51.0;
+ byn[9] = 46.0;
+ byn[10] = 1000.0;
noiseShaping = 0.0;
+ fpd = 17;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -175,133 +207,82 @@ void NotJustAnotherDither::NotJustAnotherDitherKernel::Process( const Float32
{
UInt32 nSampleFrames = inFramesToProcess;
const Float32 *sourceP = inSourceP;
- Float32 *destP = inDestP;
+ Float32 *destP = inDestP;
- long double inputSample;
- Float64 benfordize;
- int hotbinA;
- int hotbinB;
- Float64 totalA;
- Float64 totalB;
- Float32 drySample;
+ bool highres = false;
+ if (GetParameter( kParam_One ) == 1) highres = true;
+ Float32 scaleFactor;
+ if (highres) scaleFactor = 8388608.0;
+ else scaleFactor = 32768.0;
+ Float32 derez = GetParameter( kParam_Two );
+ if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
+ if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ Float32 outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
while (nSampleFrames-- > 0) {
- inputSample = *sourceP;
- if (inputSample<1.2e-38 && -inputSample<1.2e-38) {
- static int noisesource = 0;
- //this declares a variable before anything else is compiled. It won't keep assigning
- //it to 0 for every sample, it's as if the declaration doesn't exist in this context,
- //but it lets me add this denormalization fix in a single place rather than updating
- //it in three different locations. The variable isn't thread-safe but this is only
- //a random seed and we can share it with whatever.
- noisesource = noisesource % 1700021; noisesource++;
- int residue = noisesource * noisesource;
- residue = residue % 170003; residue *= residue;
- residue = residue % 17011; residue *= residue;
- residue = residue % 1709; residue *= residue;
- residue = residue % 173; residue *= residue;
- residue = residue % 17;
- double applyresidue = residue;
- applyresidue *= 0.00000001;
- applyresidue *= 0.00000001;
- inputSample = applyresidue;
- //this denormalization routine produces a white noise at -300 dB which the noise
- //shaping will interact with to produce a bipolar output, but the noise is actually
- //all positive. That should stop any variables from going denormal, and the routine
- //only kicks in if digital black is input. As a final touch, if you save to 24-bit
- //the silence will return to being digital black again.
- }
- drySample = inputSample;
+ long double inputSample = *sourceP;
+ if (fabs(inputSample)<1.18e-37) inputSample = fpd * 1.18e-37;
+ fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
+ inputSample *= scaleFactor;
+ //0-1 is now one bit, now we dither
+ bool cutbins; cutbins = false;
+ long double drySample = inputSample;
inputSample -= noiseShaping;
- inputSample *= 8388608.0;
- //0-1 is now one bit, now we dither
- benfordize = floor(inputSample);
- while (benfordize >= 1.0) {benfordize /= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- hotbinA = floor(benfordize);
+ long double benfordize; benfordize = floor(inputSample);
+ while (benfordize >= 1.0) benfordize /= 10;
+ while (benfordize < 1.0 && benfordize > 0.0000001) benfordize *= 10;
+ int hotbinA; hotbinA = floor(benfordize);
//hotbin becomes the Benford bin value for this number floored
- totalA = 0;
+ long double totalA; totalA = 0;
if ((hotbinA > 0) && (hotbinA < 10))
{
- byn[hotbinA] += 1;
- totalA += (301-byn[1]);
- totalA += (176-byn[2]);
- totalA += (125-byn[3]);
- totalA += (97-byn[4]);
- totalA += (79-byn[5]);
- totalA += (67-byn[6]);
- totalA += (58-byn[7]);
- totalA += (51-byn[8]);
- totalA += (46-byn[9]);
+ byn[hotbinA] += 1; if (byn[hotbinA] > 982) cutbins = true;
+ totalA += (301-byn[1]); totalA += (176-byn[2]); totalA += (125-byn[3]);
+ totalA += (97-byn[4]); totalA += (79-byn[5]); totalA += (67-byn[6]);
+ totalA += (58-byn[7]); totalA += (51-byn[8]); totalA += (46-byn[9]);
byn[hotbinA] -= 1;
- } else {hotbinA = 10;}
+ } else hotbinA = 10;
//produce total number- smaller is closer to Benford real
benfordize = ceil(inputSample);
- while (benfordize >= 1.0) {benfordize /= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- if (benfordize < 1.0) {benfordize *= 10;}
- hotbinB = floor(benfordize);
+ while (benfordize >= 1.0) benfordize /= 10;
+ while (benfordize < 1.0 && benfordize > 0.0000001) benfordize *= 10;
+ int hotbinB; hotbinB = floor(benfordize);
//hotbin becomes the Benford bin value for this number ceiled
- totalB = 0;
+ long double totalB; totalB = 0;
if ((hotbinB > 0) && (hotbinB < 10))
{
- byn[hotbinB] += 1;
- totalB += (301-byn[1]);
- totalB += (176-byn[2]);
- totalB += (125-byn[3]);
- totalB += (97-byn[4]);
- totalB += (79-byn[5]);
- totalB += (67-byn[6]);
- totalB += (58-byn[7]);
- totalB += (51-byn[8]);
- totalB += (46-byn[9]);
+ byn[hotbinB] += 1; if (byn[hotbinB] > 982) cutbins = true;
+ totalB += (301-byn[1]); totalB += (176-byn[2]); totalB += (125-byn[3]);
+ totalB += (97-byn[4]); totalB += (79-byn[5]); totalB += (67-byn[6]);
+ totalB += (58-byn[7]); totalB += (51-byn[8]); totalB += (46-byn[9]);
byn[hotbinB] -= 1;
- } else {hotbinB = 10;}
+ } else hotbinB = 10;
//produce total number- smaller is closer to Benford real
- if (totalA < totalB)
- {
- byn[hotbinA] += 1;
- inputSample = floor(inputSample);
- }
- else
- {
- byn[hotbinB] += 1;
- inputSample = ceil(inputSample);
- }
+ long double outputSample;
+ if (totalA < totalB) {byn[hotbinA] += 1; outputSample = floor(inputSample);}
+ else {byn[hotbinB] += 1; outputSample = floor(inputSample+1);}
//assign the relevant one to the delay line
//and floor/ceil signal accordingly
+ if (cutbins) {
+ byn[1] *= 0.99; byn[2] *= 0.99; byn[3] *= 0.99; byn[4] *= 0.99; byn[5] *= 0.99;
+ byn[6] *= 0.99; byn[7] *= 0.99; byn[8] *= 0.99; byn[9] *= 0.99; byn[10] *= 0.99;
+ }
+ noiseShaping += outputSample - drySample;
+ if (noiseShaping > fabs(inputSample)) noiseShaping = fabs(inputSample);
+ if (noiseShaping < -fabs(inputSample)) noiseShaping = -fabs(inputSample);
- totalA = byn[1] + byn[2] + byn[3] + byn[4] + byn[5] + byn[6] + byn[7] + byn[8] + byn[9];
- totalA /= 1000;
- if (totalA = 0) totalA = 1; // spotted by Laserbat: this 'scaling back' code doesn't. It always divides by the fallback of 1. Old NJAD doesn't scale back the things we're comparing against. Kept to retain known behavior, use the one in StudioTan and Monitoring for a tuned-as-intended NJAD.
- byn[1] /= totalA;
- byn[2] /= totalA;
- byn[3] /= totalA;
- byn[4] /= totalA;
- byn[5] /= totalA;
- byn[6] /= totalA;
- byn[7] /= totalA;
- byn[8] /= totalA;
- byn[9] /= totalA;
- byn[10] /= 2; //catchall for garbage data
-
- inputSample /= 8388608.0;
-
- noiseShaping += inputSample - drySample;
+ inputSample = outputSample / outScale;
+ if (inputSample > 1.0) inputSample = 1.0;
+ if (inputSample < -1.0) inputSample = -1.0;
+
*destP = inputSample;
sourceP += inNumChannels; destP += inNumChannels;
}
diff --git a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.h b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.h
index 87b74c6..d519bfb 100755
--- a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.h
+++ b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.h
@@ -54,11 +54,21 @@
#pragma mark ____NotJustAnotherDither Parameters
// parameters
-//Alter the name if desired, but using the plugin name is a start
+static CFStringRef kParameterOneName = CFSTR("Quantizer");
+static const int kCD = 0;
+static const int kHD = 1;
+static const int kDefaultValue_ParamOne = kHD;
+static CFStringRef kMenuItem_CD = CFSTR ("CD 16 bit");
+static CFStringRef kMenuItem_HD = CFSTR ("HD 24 bit");
+
+static CFStringRef kParameterTwoName = CFSTR("DeRez");
+static const float kDefaultValue_ParamTwo = 0.0;
enum {
+ kParam_One = 0,
+ kParam_Two = 1,
//Add your parameters here...
- kNumberOfParameters=0
+ kNumberOfParameters=2
};
#pragma mark ____NotJustAnotherDither
@@ -123,6 +133,7 @@ public:
private:
Float64 byn[13];
long double noiseShaping;
+ uint32_t fpd;
};
};
diff --git a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser
index 3aee3d6..18ab75c 100755
--- a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser
+++ b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser
@@ -10,7 +10,7 @@
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
- 292,
+ 594,
20,
48,
43,
@@ -49,13 +49,14 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 568766952;
- PBXWorkspaceStateSaveDate = 568766952;
+ PBXPerProjectTemplateStateSaveDate = 615683941;
+ PBXWorkspaceStateSaveDate = 615683941;
};
perUserProjectItems = {
8B8D6A12207ABF2E0029B7B0 /* PlistBookmark */ = 8B8D6A12207ABF2E0029B7B0 /* PlistBookmark */;
- 8BAF09C221E6BA5C00C38394 /* PBXTextBookmark */ = 8BAF09C221E6BA5C00C38394 /* PBXTextBookmark */;
- 8BBB2F6D21B620F100825986 /* PBXTextBookmark */ = 8BBB2F6D21B620F100825986 /* PBXTextBookmark */;
+ 8BB071CA24A94A14000F894A /* PBXTextBookmark */ = 8BB071CA24A94A14000F894A /* PBXTextBookmark */;
+ 8BB9A46B24B2945000CD76A8 /* PBXTextBookmark */ = 8BB9A46B24B2945000CD76A8 /* PBXTextBookmark */;
+ 8BB9A55324B2977000CD76A8 /* PBXTextBookmark */ = 8BB9A55324B2977000CD76A8 /* PBXTextBookmark */;
};
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
userBuildSettings = {
@@ -75,10 +76,10 @@
};
8BA05A660720730100365D66 /* NotJustAnotherDither.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {691, 4082}}";
- sepNavSelRange = "{8123, 0}";
- sepNavVisRange = "{8086, 233}";
- sepNavWindowFrame = "{{517, 41}, {923, 837}}";
+ sepNavIntBoundsRect = "{{0, 0}, {784, 3965}}";
+ sepNavSelRange = "{9521, 119}";
+ sepNavVisRange = "{11022, 1332}";
+ sepNavWindowFrame = "{{743, 57}, {923, 821}}";
};
};
8BA05A680720730100365D66 /* NotJustAnotherDither.r */ = {
@@ -93,36 +94,46 @@
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {876, 767}}";
sepNavSelRange = "{2971, 0}";
- sepNavVisRange = "{60, 2974}";
- sepNavWindowFrame = "{{15, 39}, {923, 837}}";
+ sepNavVisRange = "{45, 2989}";
+ sepNavWindowFrame = "{{15, 57}, {923, 821}}";
};
};
- 8BAF09C221E6BA5C00C38394 /* PBXTextBookmark */ = {
+ 8BB071CA24A94A14000F894A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 8BC6025B073B072D006C4272 /* NotJustAnotherDither.h */;
+ name = "NotJustAnotherDither.h: 136";
+ rLen = 16;
+ rLoc = 5477;
+ rType = 0;
+ vrLen = 969;
+ vrLoc = 4633;
+ };
+ 8BB9A46B24B2945000CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* NotJustAnotherDither.cpp */;
- name = "NotJustAnotherDither.cpp: 190";
- rLen = 0;
- rLoc = 8123;
+ name = "NotJustAnotherDither.cpp: 219";
+ rLen = 119;
+ rLoc = 9521;
rType = 0;
- vrLen = 233;
- vrLoc = 8086;
+ vrLen = 1374;
+ vrLoc = 9281;
};
- 8BBB2F6D21B620F100825986 /* PBXTextBookmark */ = {
+ 8BB9A55324B2977000CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 8BA05A660720730100365D66 /* NotJustAnotherDither.cpp */;
- name = "NotJustAnotherDither.cpp: 190";
- rLen = 0;
- rLoc = 8123;
+ name = "NotJustAnotherDither.cpp: 219";
+ rLen = 119;
+ rLoc = 9521;
rType = 0;
- vrLen = 253;
- vrLoc = 8066;
+ vrLen = 1332;
+ vrLoc = 11022;
};
8BC6025B073B072D006C4272 /* NotJustAnotherDither.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {894, 1716}}";
- sepNavSelRange = "{4975, 0}";
- sepNavVisRange = "{3502, 1743}";
- sepNavWindowFrame = "{{517, 39}, {923, 837}}";
+ sepNavIntBoundsRect = "{{0, 0}, {894, 1807}}";
+ sepNavSelRange = "{5477, 16}";
+ sepNavVisRange = "{3917, 1685}";
+ sepNavWindowFrame = "{{0, 57}, {923, 821}}";
};
};
8BD3CCB8148830B20062E48C /* Source Control */ = {
diff --git a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3
index faa330c..84eaaac 100755
--- a/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3
+++ b/plugins/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3
@@ -256,8 +256,6 @@
<key>Layout</key>
<array>
<dict>
- <key>BecomeActive</key>
- <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@@ -282,7 +280,7 @@
<dict>
<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
<array>
- <real>288</real>
+ <real>230</real>
</array>
<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
<array>
@@ -308,7 +306,7 @@
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
- <string>{{0, 0}, {288, 595}}</string>
+ <string>{{0, 0}, {230, 605}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@@ -318,24 +316,26 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {305, 613}}</string>
+ <string>{{0, 0}, {247, 623}}</string>
<key>GroupTreeTableConfiguration</key>
<array>
<string>MainColumn</string>
- <real>288</real>
+ <real>230</real>
</array>
<key>RubberWindowFrame</key>
- <string>780 134 841 654 0 0 1440 878 </string>
+ <string>68 214 1085 664 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
<key>Proportion</key>
- <string>305pt</string>
+ <string>247pt</string>
</dict>
<dict>
<key>Dock</key>
<array>
<dict>
+ <key>BecomeActive</key>
+ <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
@@ -353,11 +353,12 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>8BAF09C221E6BA5C00C38394</string>
+ <string>8BB9A55324B2977000CD76A8</string>
<key>history</key>
<array>
<string>8B8D6A12207ABF2E0029B7B0</string>
- <string>8BBB2F6D21B620F100825986</string>
+ <string>8BB071CA24A94A14000F894A</string>
+ <string>8BB9A46B24B2945000CD76A8</string>
</array>
</dict>
<key>SplitCount</key>
@@ -371,18 +372,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {531, 109}}</string>
+ <string>{{0, 0}, {833, 470}}</string>
<key>RubberWindowFrame</key>
- <string>780 134 841 654 0 0 1440 878 </string>
+ <string>68 214 1085 664 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>109pt</string>
+ <string>470pt</string>
</dict>
<dict>
<key>Proportion</key>
- <string>499pt</string>
+ <string>148pt</string>
<key>Tabs</key>
<array>
<dict>
@@ -396,9 +397,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {531, 472}}</string>
+ <string>{{10, 27}, {833, 121}}</string>
<key>RubberWindowFrame</key>
- <string>780 134 841 654 0 0 1440 878 </string>
+ <string>68 214 1085 664 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@@ -452,7 +453,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {531, 315}}</string>
+ <string>{{10, 27}, {531, 489}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@@ -461,7 +462,7 @@
</dict>
</array>
<key>Proportion</key>
- <string>531pt</string>
+ <string>833pt</string>
</dict>
</array>
<key>Name</key>
@@ -480,11 +481,11 @@
</array>
<key>TableOfContents</key>
<array>
- <string>8BAF09C321E6BA5C00C38394</string>
+ <string>8BB9A55424B2977000CD76A8</string>
<string>1CA23ED40692098700951B8B</string>
- <string>8BAF09C421E6BA5C00C38394</string>
+ <string>8BB9A55524B2977000CD76A8</string>
<string>8BD7274A1D46E5A5000176F0</string>
- <string>8BAF09C521E6BA5C00C38394</string>
+ <string>8BB9A55624B2977000CD76A8</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@@ -657,7 +658,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
- <real>568769116.18578196</real>
+ <real>615683952.11029994</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@@ -674,11 +675,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
- <string>8BAF09C621E6BA5C00C38394</string>
- <string>/Users/christopherjohnson/Desktop/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj</string>
+ <string>/Users/christopherjohnson/Desktop/Dithers/MacAU/NotJustAnotherDither/NotJustAnotherDither.xcodeproj</string>
</array>
<key>WindowString</key>
- <string>780 134 841 654 0 0 1440 878 </string>
+ <string>68 214 1085 664 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>