aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/MacVST
diff options
context:
space:
mode:
authorChris Johnson <jinx6568@sover.net>2020-07-05 22:01:06 -0400
committerChris Johnson <jinx6568@sover.net>2020-07-05 22:01:06 -0400
commitc653c8b38fdc79f61ee191052901ac2012d476b4 (patch)
treeee0f0c7a35a07788d5242165f6274d701e7a92be /plugins/MacVST
parenta9a344ede4d4a6c3e7960af07389db5b031d0260 (diff)
downloadairwindows-lv2-port-c653c8b38fdc79f61ee191052901ac2012d476b4.tar.gz
airwindows-lv2-port-c653c8b38fdc79f61ee191052901ac2012d476b4.tar.bz2
airwindows-lv2-port-c653c8b38fdc79f61ee191052901ac2012d476b4.zip
DeRez Dither Updates (Beam, Dark, NJAD)
Diffstat (limited to 'plugins/MacVST')
-rwxr-xr-xplugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.pbxuser58
-rwxr-xr-xplugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.perspectivev333
-rwxr-xr-xplugins/MacVST/Beam/source/BeamProc.cpp16
-rwxr-xr-xplugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.pbxuser80
-rwxr-xr-xplugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.perspectivev338
-rwxr-xr-xplugins/MacVST/Dark/source/Dark.cpp2
-rwxr-xr-xplugins/MacVST/Dark/source/DarkProc.cpp20
-rwxr-xr-xplugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser71
-rwxr-xr-xplugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev337
-rwxr-xr-xplugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.cpp56
-rwxr-xr-xplugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.h10
-rwxr-xr-xplugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDitherProc.cpp556
12 files changed, 423 insertions, 554 deletions
diff --git a/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.pbxuser b/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.pbxuser
index bf949c7..ab6dc93 100755
--- a/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.pbxuser
+++ b/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.pbxuser
@@ -49,14 +49,14 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 613785702;
- PBXWorkspaceStateSaveDate = 613785702;
+ PBXPerProjectTemplateStateSaveDate = 615684221;
+ PBXWorkspaceStateSaveDate = 615684221;
};
perUserProjectItems = {
+ 8BB9A54324B296EC00CD76A8 /* PBXTextBookmark */ = 8BB9A54324B296EC00CD76A8 /* PBXTextBookmark */;
+ 8BB9A5B624B2988F00CD76A8 /* PBXTextBookmark */ = 8BB9A5B624B2988F00CD76A8 /* PBXTextBookmark */;
8BD150EB24956DE000B025B9 /* PBXTextBookmark */ = 8BD150EB24956DE000B025B9 /* PBXTextBookmark */;
8BD150EC24956DE000B025B9 /* PBXTextBookmark */ = 8BD150EC24956DE000B025B9 /* PBXTextBookmark */;
- 8BD151822495B14D00B025B9 /* PBXTextBookmark */ = 8BD151822495B14D00B025B9 /* PBXTextBookmark */;
- 8BD151892495B18A00B025B9 /* PBXTextBookmark */ = 8BD151892495B18A00B025B9 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@@ -64,9 +64,9 @@
};
2407DEB6089929BA00EB68BF /* Beam.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {740, 1859}}";
+ sepNavIntBoundsRect = "{{0, 0}, {848, 1859}}";
sepNavSelRange = "{4202, 0}";
- sepNavVisRange = "{1092, 1054}";
+ sepNavVisRange = "{0, 1908}";
sepNavWindowFrame = "{{530, 57}, {895, 821}}";
};
};
@@ -88,9 +88,9 @@
};
24D8286F09A914000093AEF8 /* BeamProc.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {691, 3536}}";
- sepNavSelRange = "{5480, 0}";
- sepNavVisRange = "{5165, 926}";
+ sepNavIntBoundsRect = "{{0, 0}, {691, 3471}}";
+ sepNavSelRange = "{5619, 0}";
+ sepNavVisRange = "{8812, 565}";
sepNavWindowFrame = "{{543, 57}, {895, 821}}";
};
};
@@ -108,6 +108,26 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
+ 8BB9A54324B296EC00CD76A8 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 24D8286F09A914000093AEF8 /* BeamProc.cpp */;
+ name = "BeamProc.cpp: 164";
+ rLen = 0;
+ rLoc = 5619;
+ rType = 0;
+ vrLen = 766;
+ vrLoc = 295;
+ };
+ 8BB9A5B624B2988F00CD76A8 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 24D8286F09A914000093AEF8 /* BeamProc.cpp */;
+ name = "BeamProc.cpp: 164";
+ rLen = 0;
+ rLoc = 5619;
+ rType = 0;
+ vrLen = 565;
+ vrLoc = 8812;
+ };
8BD150EB24956DE000B025B9 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* Beam.h */;
@@ -128,26 +148,6 @@
vrLen = 1054;
vrLoc = 1092;
};
- 8BD151822495B14D00B025B9 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 24D8286F09A914000093AEF8 /* BeamProc.cpp */;
- name = "BeamProc.cpp: 159";
- rLen = 0;
- rLoc = 5480;
- rType = 0;
- vrLen = 926;
- vrLoc = 5161;
- };
- 8BD151892495B18A00B025B9 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 24D8286F09A914000093AEF8 /* BeamProc.cpp */;
- name = "BeamProc.cpp: 159";
- rLen = 0;
- rLoc = 5480;
- rType = 0;
- vrLen = 926;
- vrLoc = 5165;
- };
8D01CCC60486CAD60068D4B7 /* Beam */ = {
activeExec = 0;
};
diff --git a/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.perspectivev3
index cc1d5e4..69d60a1 100755
--- a/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.perspectivev3
+++ b/plugins/MacVST/Beam/Beam.xcodeproj/christopherjohnson.perspectivev3
@@ -256,6 +256,8 @@
<key>Layout</key>
<array>
<dict>
+ <key>BecomeActive</key>
+ <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@@ -321,7 +323,7 @@
<real>185</real>
</array>
<key>RubberWindowFrame</key>
- <string>621 354 810 487 0 0 1440 878 </string>
+ <string>584 368 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@@ -349,12 +351,12 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>8BD151892495B18A00B025B9</string>
+ <string>8BB9A5B624B2988F00CD76A8</string>
<key>history</key>
<array>
<string>8BD150EB24956DE000B025B9</string>
<string>8BD150EC24956DE000B025B9</string>
- <string>8BD151822495B14D00B025B9</string>
+ <string>8BB9A54324B296EC00CD76A8</string>
</array>
</dict>
<key>SplitCount</key>
@@ -368,18 +370,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {603, 358}}</string>
+ <string>{{0, 0}, {603, 346}}</string>
<key>RubberWindowFrame</key>
- <string>621 354 810 487 0 0 1440 878 </string>
+ <string>584 368 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>358pt</string>
+ <string>346pt</string>
</dict>
<dict>
<key>Proportion</key>
- <string>83pt</string>
+ <string>95pt</string>
<key>Tabs</key>
<array>
<dict>
@@ -393,7 +395,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {603, 56}}</string>
+ <string>{{10, 27}, {603, 68}}</string>
+ <key>RubberWindowFrame</key>
+ <string>584 368 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@@ -448,8 +452,6 @@
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 56}}</string>
- <key>RubberWindowFrame</key>
- <string>621 354 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@@ -477,11 +479,11 @@
</array>
<key>TableOfContents</key>
<array>
- <string>8BD1518A2495B18A00B025B9</string>
+ <string>8BB9A5B724B2988F00CD76A8</string>
<string>1CA23ED40692098700951B8B</string>
- <string>8BD1518B2495B18A00B025B9</string>
+ <string>8BB9A5B824B2988F00CD76A8</string>
<string>8B0237581D42B1C400E1E8C8</string>
- <string>8BD1518C2495B18A00B025B9</string>
+ <string>8BB9A5B924B2988F00CD76A8</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@@ -634,7 +636,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
- <real>613790090.00095999</real>
+ <real>615684239.58308196</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@@ -651,11 +653,10 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
- <string>8BD1518D2495B18A00B025B9</string>
<string>/Users/christopherjohnson/Desktop/Dithers/MacVST/Beam/Beam.xcodeproj</string>
</array>
<key>WindowString</key>
- <string>621 354 810 487 0 0 1440 878 </string>
+ <string>584 368 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>
diff --git a/plugins/MacVST/Beam/source/BeamProc.cpp b/plugins/MacVST/Beam/source/BeamProc.cpp
index 920f5b4..5871eb5 100755
--- a/plugins/MacVST/Beam/source/BeamProc.cpp
+++ b/plugins/MacVST/Beam/source/BeamProc.cpp
@@ -30,6 +30,8 @@ void Beam::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram
float derez = C;
if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ float outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
while (--sampleFrames >= 0)
{
@@ -121,8 +123,8 @@ void Beam::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram
lastSampleR[0] = inputSampleR;
//end right
- inputSampleL /= scaleFactor;
- inputSampleR /= scaleFactor;
+ inputSampleL /= outScale;
+ inputSampleR /= outScale;
*out1 = inputSampleL;
*out2 = inputSampleR;
@@ -156,8 +158,10 @@ void Beam::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa
else scaleFactor = 32768.0;
float derez = C;
if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
- if (scaleFactor < 1.0) scaleFactor = 1.0;
-
+ if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ float outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
+
while (--sampleFrames >= 0)
{
long double inputSampleL = *in1;
@@ -248,8 +252,8 @@ void Beam::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa
lastSampleR[0] = inputSampleR;
//end right
- inputSampleL /= scaleFactor;
- inputSampleR /= scaleFactor;
+ inputSampleL /= outScale;
+ inputSampleR /= outScale;
*out1 = inputSampleL;
*out2 = inputSampleR;
diff --git a/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.pbxuser b/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.pbxuser
index ab4e77f..fade19f 100755
--- a/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.pbxuser
+++ b/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.pbxuser
@@ -10,7 +10,7 @@
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
PBXFileTableDataSourceColumnWidthsKey = (
20,
- 364,
+ 433,
20,
48,
43,
@@ -49,14 +49,14 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 613785687;
- PBXWorkspaceStateSaveDate = 613785687;
+ PBXPerProjectTemplateStateSaveDate = 615684199;
+ PBXWorkspaceStateSaveDate = 615684199;
};
perUserProjectItems = {
- 8BD150E724956DDF00B025B9 /* PBXTextBookmark */ = 8BD150E724956DDF00B025B9 /* PBXTextBookmark */;
- 8BD150E824956DDF00B025B9 /* PBXTextBookmark */ = 8BD150E824956DDF00B025B9 /* PBXTextBookmark */;
- 8BD150EA24956DDF00B025B9 /* PBXTextBookmark */ = 8BD150EA24956DDF00B025B9 /* PBXTextBookmark */;
- 8BD151602495A6F400B025B9 /* PBXTextBookmark */ = 8BD151602495A6F400B025B9 /* PBXTextBookmark */;
+ 8BB07C2224B14991000F894A /* PBXTextBookmark */ = 8BB07C2224B14991000F894A /* PBXTextBookmark */;
+ 8BB07C8D24B14CB2000F894A /* PBXTextBookmark */ = 8BB07C8D24B14CB2000F894A /* PBXTextBookmark */;
+ 8BB9A52024B2969B00CD76A8 /* PBXTextBookmark */ = 8BB9A52024B2969B00CD76A8 /* PBXTextBookmark */;
+ 8BB9A59624B2987700CD76A8 /* PBXTextBookmark */ = 8BB9A59624B2987700CD76A8 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@@ -64,18 +64,18 @@
};
2407DEB6089929BA00EB68BF /* Dark.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {740, 1807}}";
- sepNavSelRange = "{4061, 0}";
- sepNavVisRange = "{1333, 920}";
- sepNavWindowFrame = "{{559, 57}, {895, 821}}";
+ sepNavIntBoundsRect = "{{0, 0}, {656, 1768}}";
+ sepNavSelRange = "{4121, 231}";
+ sepNavVisRange = "{3916, 978}";
+ sepNavWindowFrame = "{{545, 57}, {895, 821}}";
};
};
245463B80991757100464AD3 /* Dark.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {866, 858}}";
- sepNavSelRange = "{2475, 0}";
- sepNavVisRange = "{204, 390}";
- sepNavWindowFrame = "{{545, 57}, {895, 821}}";
+ sepNavSelRange = "{2418, 59}";
+ sepNavVisRange = "{0, 580}";
+ sepNavWindowFrame = "{{888, -91}, {895, 821}}";
};
};
24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = {
@@ -88,9 +88,9 @@
};
24D8286F09A914000093AEF8 /* DarkProc.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {656, 3146}}";
- sepNavSelRange = "{4768, 0}";
- sepNavVisRange = "{4380, 807}";
+ sepNavIntBoundsRect = "{{0, 0}, {656, 3107}}";
+ sepNavSelRange = "{4793, 117}";
+ sepNavVisRange = "{4314, 1529}";
sepNavWindowFrame = "{{531, 57}, {895, 821}}";
};
};
@@ -108,45 +108,45 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
- 8BD150E724956DDF00B025B9 /* PBXTextBookmark */ = {
+ 8BB07C2224B14991000F894A /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* Dark.h */;
- name = "Dark.h: 62";
- rLen = 0;
- rLoc = 2475;
+ name = "Dark.h: 58";
+ rLen = 59;
+ rLoc = 2418;
rType = 0;
- vrLen = 390;
- vrLoc = 204;
+ vrLen = 580;
+ vrLoc = 0;
};
- 8BD150E824956DDF00B025B9 /* PBXTextBookmark */ = {
+ 8BB07C8D24B14CB2000F894A /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* Dark.cpp */;
- name = "Dark.cpp: 110";
- rLen = 0;
- rLoc = 4061;
+ name = "Dark.cpp: 112";
+ rLen = 231;
+ rLoc = 4121;
rType = 0;
- vrLen = 920;
- vrLoc = 1333;
+ vrLen = 978;
+ vrLoc = 3916;
};
- 8BD150EA24956DDF00B025B9 /* PBXTextBookmark */ = {
+ 8BB9A52024B2969B00CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* DarkProc.cpp */;
- name = "DarkProc.cpp: 143";
+ name = "DarkProc.cpp: 227";
rLen = 0;
- rLoc = 4770;
+ rLoc = 7947;
rType = 0;
- vrLen = 881;
- vrLoc = 642;
+ vrLen = 1334;
+ vrLoc = 6717;
};
- 8BD151602495A6F400B025B9 /* PBXTextBookmark */ = {
+ 8BB9A59624B2987700CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* DarkProc.cpp */;
- name = "DarkProc.cpp: 142";
- rLen = 0;
- rLoc = 4768;
+ name = "DarkProc.cpp: 146";
+ rLen = 117;
+ rLoc = 4793;
rType = 0;
- vrLen = 807;
- vrLoc = 4380;
+ vrLen = 1529;
+ vrLoc = 4314;
};
8D01CCC60486CAD60068D4B7 /* Dark */ = {
activeExec = 0;
diff --git a/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.perspectivev3
index 0626f1d..9acdef6 100755
--- a/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.perspectivev3
+++ b/plugins/MacVST/Dark/Dark.xcodeproj/christopherjohnson.perspectivev3
@@ -304,7 +304,7 @@
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
- <string>{{0, 0}, {185, 428}}</string>
+ <string>{{0, 0}, {185, 695}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@@ -314,14 +314,14 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {202, 446}}</string>
+ <string>{{0, 0}, {202, 713}}</string>
<key>GroupTreeTableConfiguration</key>
<array>
<string>MainColumn</string>
<real>185</real>
</array>
<key>RubberWindowFrame</key>
- <string>625 378 810 487 0 0 1440 878 </string>
+ <string>493 122 879 754 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@@ -351,12 +351,12 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>8BD151602495A6F400B025B9</string>
+ <string>8BB9A59624B2987700CD76A8</string>
<key>history</key>
<array>
- <string>8BD150E724956DDF00B025B9</string>
- <string>8BD150E824956DDF00B025B9</string>
- <string>8BD150EA24956DDF00B025B9</string>
+ <string>8BB07C2224B14991000F894A</string>
+ <string>8BB07C8D24B14CB2000F894A</string>
+ <string>8BB9A52024B2969B00CD76A8</string>
</array>
</dict>
<key>SplitCount</key>
@@ -370,18 +370,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {603, 334}}</string>
+ <string>{{0, 0}, {672, 593}}</string>
<key>RubberWindowFrame</key>
- <string>625 378 810 487 0 0 1440 878 </string>
+ <string>493 122 879 754 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>334pt</string>
+ <string>593pt</string>
</dict>
<dict>
<key>Proportion</key>
- <string>107pt</string>
+ <string>115pt</string>
<key>Tabs</key>
<array>
<dict>
@@ -395,9 +395,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {603, 80}}</string>
+ <string>{{10, 27}, {672, 88}}</string>
<key>RubberWindowFrame</key>
- <string>625 378 810 487 0 0 1440 878 </string>
+ <string>493 122 879 754 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@@ -460,7 +460,7 @@
</dict>
</array>
<key>Proportion</key>
- <string>603pt</string>
+ <string>672pt</string>
</dict>
</array>
<key>Name</key>
@@ -479,11 +479,11 @@
</array>
<key>TableOfContents</key>
<array>
- <string>8BD151612495A6F400B025B9</string>
+ <string>8BB9A59724B2987700CD76A8</string>
<string>1CA23ED40692098700951B8B</string>
- <string>8BD151622495A6F400B025B9</string>
+ <string>8BB9A59824B2987700CD76A8</string>
<string>8B0237581D42B1C400E1E8C8</string>
- <string>8BD151632495A6F400B025B9</string>
+ <string>8BB9A59924B2987700CD76A8</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@@ -636,7 +636,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
- <real>613787380.50059402</real>
+ <real>615684215.23886502</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@@ -656,7 +656,7 @@
<string>/Users/christopherjohnson/Desktop/Dithers/MacVST/Dark/Dark.xcodeproj</string>
</array>
<key>WindowString</key>
- <string>625 378 810 487 0 0 1440 878 </string>
+ <string>493 122 879 754 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>
diff --git a/plugins/MacVST/Dark/source/Dark.cpp b/plugins/MacVST/Dark/source/Dark.cpp
index bae0428..f652aa4 100755
--- a/plugins/MacVST/Dark/source/Dark.cpp
+++ b/plugins/MacVST/Dark/source/Dark.cpp
@@ -14,11 +14,11 @@ Dark::Dark(audioMasterCallback audioMaster) :
{
A = 1.0;
B = 0.0;
+ fpd = 17;
for(int count = 0; count < 99; count++) {
lastSampleL[count] = 0;
lastSampleR[count] = 0;
}
- fpd = 17;
//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.
diff --git a/plugins/MacVST/Dark/source/DarkProc.cpp b/plugins/MacVST/Dark/source/DarkProc.cpp
index 2aa85c4..955a53f 100755
--- a/plugins/MacVST/Dark/source/DarkProc.cpp
+++ b/plugins/MacVST/Dark/source/DarkProc.cpp
@@ -13,13 +13,14 @@ void Dark::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram
float* in2 = inputs[1];
float* out1 = outputs[0];
float* out2 = outputs[1];
- int processing = (VstInt32)( A * 1.999 );
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
int depth = (int)(17.0*overallscale);
if (depth < 3) depth = 3;
if (depth > 98) depth = 98;
+
+ int processing = (VstInt32)( A * 1.999 );
bool highres = false;
if (processing == 1) highres = true;
float scaleFactor;
@@ -28,6 +29,8 @@ void Dark::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram
float derez = B;
if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ float outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
while (--sampleFrames >= 0)
{
@@ -105,8 +108,8 @@ void Dark::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram
lastSampleR[0] = inputSampleR;
//end right
- inputSampleL /= scaleFactor;
- inputSampleR /= scaleFactor;
+ inputSampleL /= outScale;
+ inputSampleR /= outScale;
*out1 = inputSampleL;
*out2 = inputSampleR;
@@ -125,13 +128,14 @@ void Dark::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa
double* out1 = outputs[0];
double* out2 = outputs[1];
- int processing = (VstInt32)( A * 1.999 );
double overallscale = 1.0;
overallscale /= 44100.0;
overallscale *= getSampleRate();
int depth = (int)(17.0*overallscale);
if (depth < 3) depth = 3;
if (depth > 98) depth = 98;
+
+ int processing = (VstInt32)( A * 1.999 );
bool highres = false;
if (processing == 1) highres = true;
float scaleFactor;
@@ -139,7 +143,9 @@ void Dark::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa
else scaleFactor = 32768.0;
float derez = B;
if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
- if (scaleFactor < 1.0) scaleFactor = 1.0;
+ if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ float outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
while (--sampleFrames >= 0)
{
@@ -217,8 +223,8 @@ void Dark::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa
lastSampleR[0] = inputSampleR;
//end right
- inputSampleL /= scaleFactor;
- inputSampleR /= scaleFactor;
+ inputSampleL /= outScale;
+ inputSampleR /= outScale;
*out1 = inputSampleL;
*out2 = inputSampleR;
diff --git a/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser b/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser
index baca580..0c7cd53 100755
--- a/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser
+++ b/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.pbxuser
@@ -49,14 +49,13 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 557696448;
- PBXWorkspaceStateSaveDate = 557696448;
+ PBXPerProjectTemplateStateSaveDate = 615684254;
+ PBXWorkspaceStateSaveDate = 615684254;
};
perUserProjectItems = {
- 8B7E3DCF20A6735C00482CB5 /* PBXTextBookmark */ = 8B7E3DCF20A6735C00482CB5 /* PBXTextBookmark */;
- 8B7E3DD020A6735C00482CB5 /* PBXTextBookmark */ = 8B7E3DD020A6735C00482CB5 /* PBXTextBookmark */;
- 8B91401D213DC60B00BA6EEC /* PBXTextBookmark */ = 8B91401D213DC60B00BA6EEC /* PBXTextBookmark */;
- 8B91401E213DC60B00BA6EEC /* PBXTextBookmark */ = 8B91401E213DC60B00BA6EEC /* PBXTextBookmark */;
+ 8BB9A42324B28A6700CD76A8 /* PBXTextBookmark */ = 8BB9A42324B28A6700CD76A8 /* PBXTextBookmark */;
+ 8BB9A50B24B2963800CD76A8 /* PBXTextBookmark */ = 8BB9A50B24B2963800CD76A8 /* PBXTextBookmark */;
+ 8BB9A5D724B298B700CD76A8 /* PBXTextBookmark */ = 8BB9A5D724B298B700CD76A8 /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@@ -64,34 +63,34 @@
};
2407DEB6089929BA00EB68BF /* NotJustAnotherDither.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {810, 1352}}";
- sepNavSelRange = "{528, 392}";
- sepNavVisRange = "{1431, 451}";
- sepNavWindowFrame = "{{12, 47}, {895, 831}}";
+ sepNavIntBoundsRect = "{{0, 0}, {848, 2028}}";
+ sepNavSelRange = "{4950, 0}";
+ sepNavVisRange = "{3151, 2322}";
+ sepNavWindowFrame = "{{12, 57}, {895, 821}}";
};
};
245463B80991757100464AD3 /* NotJustAnotherDither.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {481, 832}}";
+ sepNavIntBoundsRect = "{{0, 0}, {481, 897}}";
sepNavSelRange = "{0, 0}";
- sepNavVisRange = "{0, 331}";
- sepNavWindowFrame = "{{20, 47}, {895, 831}}";
+ sepNavVisRange = "{0, 237}";
+ sepNavWindowFrame = "{{20, 57}, {895, 821}}";
};
};
24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {838, 19838}}";
+ sepNavIntBoundsRect = "{{0, 0}, {838, 19890}}";
sepNavSelRange = "{10616, 0}";
- sepNavVisRange = "{10613, 123}";
+ sepNavVisRange = "{10459, 280}";
sepNavWindowFrame = "{{15, 42}, {895, 831}}";
};
};
24D8286F09A914000093AEF8 /* NotJustAnotherDitherProc.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {677, 6474}}";
- sepNavSelRange = "{2713, 0}";
- sepNavVisRange = "{1671, 272}";
- sepNavWindowFrame = "{{545, 47}, {895, 831}}";
+ sepNavIntBoundsRect = "{{0, 0}, {768, 4147}}";
+ sepNavSelRange = "{6513, 0}";
+ sepNavVisRange = "{6511, 68}";
+ sepNavWindowFrame = "{{24, 57}, {895, 821}}";
};
};
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
@@ -108,45 +107,35 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
- 8B7E3DCF20A6735C00482CB5 /* PBXTextBookmark */ = {
+ 8BB9A42324B28A6700CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* NotJustAnotherDither.h */;
name = "NotJustAnotherDither.h: 1";
rLen = 0;
rLoc = 0;
rType = 0;
- vrLen = 331;
+ vrLen = 237;
vrLoc = 0;
};
- 8B7E3DD020A6735C00482CB5 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 2407DEB6089929BA00EB68BF /* NotJustAnotherDither.cpp */;
- name = "NotJustAnotherDither.cpp: 15";
- rLen = 392;
- rLoc = 528;
- rType = 0;
- vrLen = 451;
- vrLoc = 1431;
- };
- 8B91401D213DC60B00BA6EEC /* PBXTextBookmark */ = {
+ 8BB9A50B24B2963800CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* NotJustAnotherDitherProc.cpp */;
- name = "NotJustAnotherDitherProc.cpp: 73";
+ name = "NotJustAnotherDitherProc.cpp: 171";
rLen = 0;
- rLoc = 2713;
+ rLoc = 6513;
rType = 0;
- vrLen = 272;
- vrLoc = 1671;
+ vrLen = 130;
+ vrLoc = 6449;
};
- 8B91401E213DC60B00BA6EEC /* PBXTextBookmark */ = {
+ 8BB9A5D724B298B700CD76A8 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* NotJustAnotherDitherProc.cpp */;
- name = "NotJustAnotherDitherProc.cpp: 73";
+ name = "NotJustAnotherDitherProc.cpp: 171";
rLen = 0;
- rLoc = 2713;
+ rLoc = 6513;
rType = 0;
- vrLen = 272;
- vrLoc = 1671;
+ vrLen = 68;
+ vrLoc = 6511;
};
8D01CCC60486CAD60068D4B7 /* NotJustAnotherDither */ = {
activeExec = 0;
diff --git a/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3
index 0bb2bde..42e7114 100755
--- a/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3
+++ b/plugins/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj/christopherjohnson.perspectivev3
@@ -323,7 +323,7 @@
<real>258</real>
</array>
<key>RubberWindowFrame</key>
- <string>630 259 810 487 0 0 1440 878 </string>
+ <string>17 360 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@@ -351,12 +351,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>8B91401E213DC60B00BA6EEC</string>
+ <string>8BB9A5D724B298B700CD76A8</string>
<key>history</key>
<array>
- <string>8B7E3DCF20A6735C00482CB5</string>
- <string>8B7E3DD020A6735C00482CB5</string>
- <string>8B91401D213DC60B00BA6EEC</string>
+ <string>8BB9A42324B28A6700CD76A8</string>
+ <string>8BB9A50B24B2963800CD76A8</string>
</array>
</dict>
<key>SplitCount</key>
@@ -370,18 +369,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {530, 117}}</string>
+ <string>{{0, 0}, {530, 69}}</string>
<key>RubberWindowFrame</key>
- <string>630 259 810 487 0 0 1440 878 </string>
+ <string>17 360 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>117pt</string>
+ <string>69pt</string>
</dict>
<dict>
<key>Proportion</key>
- <string>324pt</string>
+ <string>372pt</string>
<key>Tabs</key>
<array>
<dict>
@@ -395,9 +394,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {530, 297}}</string>
+ <string>{{10, 27}, {530, 345}}</string>
<key>RubberWindowFrame</key>
- <string>630 259 810 487 0 0 1440 878 </string>
+ <string>17 360 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@@ -451,7 +450,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{10, 27}, {603, 345}}</string>
+ <string>{{10, 27}, {530, 282}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@@ -479,11 +478,11 @@
</array>
<key>TableOfContents</key>
<array>
- <string>8B91401F213DC60B00BA6EEC</string>
+ <string>8BB9A5D824B298B700CD76A8</string>
<string>1CA23ED40692098700951B8B</string>
- <string>8B914020213DC60B00BA6EEC</string>
+ <string>8BB9A5D924B298B700CD76A8</string>
<string>8B0237581D42B1C400E1E8C8</string>
- <string>8B914021213DC60B00BA6EEC</string>
+ <string>8BB9A5DA24B298B700CD76A8</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@@ -636,7 +635,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
- <real>557696523.36446095</real>
+ <real>615684279.64847696</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@@ -653,11 +652,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
- <string>8B914022213DC60B00BA6EEC</string>
- <string>/Users/christopherjohnson/Desktop/MacVST/NotJustAnotherDither/NotJustAnotherDither.xcodeproj</string>
+ <string>8BB9A5DB24B298B700CD76A8</string>
+ <string>/Users/christopherjohnson/Desktop/NotJustAnotherDither/NotJustAnotherDither.xcodeproj</string>
</array>
<key>WindowString</key>
- <string>630 259 810 487 0 0 1440 878 </string>
+ <string>17 360 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>
diff --git a/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.cpp b/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.cpp
index 22a3cc7..7727b50 100755
--- a/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.cpp
+++ b/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.cpp
@@ -12,6 +12,9 @@ AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new N
NotJustAnotherDither::NotJustAnotherDither(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
+ A = 1.0;
+ B = 0.0;
+ fpd = 17;
bynL[0] = 1000;
bynL[1] = 301;
bynL[2] = 176;
@@ -58,31 +61,80 @@ void NotJustAnotherDither::getProgramName(char *name) {vst_strncpy (name, _progr
//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 NotJustAnotherDither::getChunk (void** data, bool isPreset)
{
+ float *chunkData = (float *)calloc(kNumParameters, sizeof(float));
+ chunkData[0] = A;
+ chunkData[1] = B;
+ /* Note: The way this is set up, it will break if you manage to save settings on an Intel
+ machine and load them on a PPC Mac. However, it's fine if you stick to the machine you
+ started with. */
+
+ *data = chunkData;
return kNumParameters * sizeof(float);
}
VstInt32 NotJustAnotherDither::setChunk (void* data, VstInt32 byteSize, bool isPreset)
{
+ float *chunkData = (float *)data;
+ A = pinParameter(chunkData[0]);
+ B = pinParameter(chunkData[1]);
+ /* We're ignoring byteSize as we found it to be a filthy liar */
+
+ /* calculate any other fields you need here - you could copy in
+ code from setParameter() here. */
return 0;
}
void NotJustAnotherDither::setParameter(VstInt32 index, float value) {
- }
+ switch (index) {
+ case kParamA: A = value; break;
+ case kParamB: B = value; break;
+ default: throw; // unknown parameter, shouldn't happen!
+ }
+}
float NotJustAnotherDither::getParameter(VstInt32 index) {
- return 0.0; //we only need to update the relevant name, this is simple to manage
+ switch (index) {
+ case kParamA: return A; break;
+ case kParamB: return B; break;
+ default: break; // unknown parameter, shouldn't happen!
+ } return 0.0; //we only need to update the relevant name, this is simple to manage
}
void NotJustAnotherDither::getParameterName(VstInt32 index, char *text) {
+ switch (index) {
+ case kParamA: vst_strncpy (text, "Quant", kVstMaxParamStrLen); break;
+ case kParamB: vst_strncpy (text, "DeRez", kVstMaxParamStrLen); break;
+ default: break; // unknown parameter, shouldn't happen!
+ } //this is our labels for displaying in the VST host
}
void NotJustAnotherDither::getParameterDisplay(VstInt32 index, char *text) {
+ switch (index) {
+ case kParamA: switch((VstInt32)( A * 1.999 )) //0 to almost edge of # of params
+ { case 0: vst_strncpy (text, "CD 16", kVstMaxParamStrLen); break;
+ case 1: vst_strncpy (text, "HD 24", kVstMaxParamStrLen); break;
+ default: break; // unknown parameter, shouldn't happen!
+ } break; //completed consoletype 'popup' parameter, exit
+ case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
+ default: break; // unknown parameter, shouldn't happen!
+ } //this displays the values and handles 'popups' where it's discrete choices
}
void NotJustAnotherDither::getParameterLabel(VstInt32 index, char *text) {
+ switch (index) {
+ case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
+ case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break;
+ default: break; // unknown parameter, shouldn't happen!
+ }
}
VstInt32 NotJustAnotherDither::canDo(char *text)
diff --git a/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.h b/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.h
index 37abf4c..5ca0c0a 100755
--- a/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.h
+++ b/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDither.h
@@ -16,7 +16,9 @@
#include <math.h>
enum {
- kNumParameters = 0
+ kParamA = 0,
+ kParamB = 1,
+ kNumParameters = 2
}; //
const int kNumPrograms = 0;
@@ -55,7 +57,11 @@ private:
double bynR[13];
long double noiseShapingL;
long double noiseShapingR;
-
+ uint32_t fpd;
+ //default stuff
+
+ float A;
+ float B;
};
#endif
diff --git a/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDitherProc.cpp b/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDitherProc.cpp
index cbc6cc3..1a80711 100755
--- a/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDitherProc.cpp
+++ b/plugins/MacVST/NotJustAnotherDither/source/NotJustAnotherDitherProc.cpp
@@ -14,237 +14,143 @@ void NotJustAnotherDither::processReplacing(float **inputs, float **outputs, Vst
float* out1 = outputs[0];
float* out2 = outputs[1];
- long double inputSampleL;
- long double inputSampleR;
-
- double benfordize;
- int hotbinA;
- int hotbinB;
- double totalA;
- double totalB;
- float drySampleL;
- float drySampleR;
+ int processing = (VstInt32)( A * 1.999 );
+ bool highres = false;
+ if (processing == 1) highres = true;
+ float scaleFactor;
+ if (highres) scaleFactor = 8388608.0;
+ else scaleFactor = 32768.0;
+ float derez = B;
+ if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
+ if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ float outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
+
while (--sampleFrames >= 0)
{
- inputSampleL = *in1;
- inputSampleR = *in2;
- if (inputSampleL<1.2e-38 && -inputSampleL<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;
- inputSampleL = applyresidue;
- }
- if (inputSampleR<1.2e-38 && -inputSampleR<1.2e-38) {
- static int noisesource = 0;
- 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;
- inputSampleR = 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.
- }
- drySampleL = inputSampleL;
- drySampleR = inputSampleR;
+ long double inputSampleL = *in1;
+ long double inputSampleR = *in2;
+ if (fabs(inputSampleL)<1.18e-37) inputSampleL = fpd * 1.18e-37;
+ fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
+ if (fabs(inputSampleR)<1.18e-37) inputSampleR = fpd * 1.18e-37;
+ fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
+
+ inputSampleL *= scaleFactor;
+ inputSampleR *= scaleFactor;
+ //0-1 is now one bit, now we dither
+ //begin Not Just Another Dither
+ bool cutbinsL; cutbinsL = false;
+ bool cutbinsR; cutbinsR = false;
+ long double drySampleL; drySampleL = inputSampleL;
+ long double drySampleR; drySampleR = inputSampleR;
inputSampleL -= noiseShapingL;
inputSampleR -= noiseShapingR;
-
- inputSampleL *= 8388608.0;
- inputSampleR *= 8388608.0;
- //0-1 is now one bit, now we dither
-
- //begin L
- benfordize = floor(inputSampleL);
- 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);
+
+ //NJAD L
+ long double benfordize; benfordize = floor(inputSampleL);
+ 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))
{
- bynL[hotbinA] += 1;
- totalA += (301-bynL[1]);
- totalA += (176-bynL[2]);
- totalA += (125-bynL[3]);
- totalA += (97-bynL[4]);
- totalA += (79-bynL[5]);
- totalA += (67-bynL[6]);
- totalA += (58-bynL[7]);
- totalA += (51-bynL[8]);
- totalA += (46-bynL[9]);
+ bynL[hotbinA] += 1; if (bynL[hotbinA] > 982) cutbinsL = true;
+ totalA += (301-bynL[1]); totalA += (176-bynL[2]); totalA += (125-bynL[3]);
+ totalA += (97-bynL[4]); totalA += (79-bynL[5]); totalA += (67-bynL[6]);
+ totalA += (58-bynL[7]); totalA += (51-bynL[8]); totalA += (46-bynL[9]);
bynL[hotbinA] -= 1;
- } else {hotbinA = 10;}
+ } else hotbinA = 10;
//produce total number- smaller is closer to Benford real
benfordize = ceil(inputSampleL);
- 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))
{
- bynL[hotbinB] += 1;
- totalB += (301-bynL[1]);
- totalB += (176-bynL[2]);
- totalB += (125-bynL[3]);
- totalB += (97-bynL[4]);
- totalB += (79-bynL[5]);
- totalB += (67-bynL[6]);
- totalB += (58-bynL[7]);
- totalB += (51-bynL[8]);
- totalB += (46-bynL[9]);
+ bynL[hotbinB] += 1; if (bynL[hotbinB] > 982) cutbinsL = true;
+ totalB += (301-bynL[1]); totalB += (176-bynL[2]); totalB += (125-bynL[3]);
+ totalB += (97-bynL[4]); totalB += (79-bynL[5]); totalB += (67-bynL[6]);
+ totalB += (58-bynL[7]); totalB += (51-bynL[8]); totalB += (46-bynL[9]);
bynL[hotbinB] -= 1;
- } else {hotbinB = 10;}
+ } else hotbinB = 10;
//produce total number- smaller is closer to Benford real
- if (totalA < totalB)
- {
- bynL[hotbinA] += 1;
- inputSampleL = floor(inputSampleL);
- }
- else
- {
- bynL[hotbinB] += 1;
- inputSampleL = ceil(inputSampleL);
- }
+ long double outputSample;
+ if (totalA < totalB) {bynL[hotbinA] += 1; outputSample = floor(inputSampleL);}
+ else {bynL[hotbinB] += 1; outputSample = floor(inputSampleL+1);}
//assign the relevant one to the delay line
//and floor/ceil signal accordingly
+ if (cutbinsL) {
+ bynL[1] *= 0.99; bynL[2] *= 0.99; bynL[3] *= 0.99; bynL[4] *= 0.99; bynL[5] *= 0.99;
+ bynL[6] *= 0.99; bynL[7] *= 0.99; bynL[8] *= 0.99; bynL[9] *= 0.99; bynL[10] *= 0.99;
+ }
+ noiseShapingL += outputSample - drySampleL;
+ if (noiseShapingL > fabs(inputSampleL)) noiseShapingL = fabs(inputSampleL);
+ if (noiseShapingL < -fabs(inputSampleL)) noiseShapingL = -fabs(inputSampleL);
+ //finished NJAD L
- totalA = bynL[1] + bynL[2] + bynL[3] + bynL[4] + bynL[5] + bynL[6] + bynL[7] + bynL[8] + bynL[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.
- bynL[1] /= totalA;
- bynL[2] /= totalA;
- bynL[3] /= totalA;
- bynL[4] /= totalA;
- bynL[5] /= totalA;
- bynL[6] /= totalA;
- bynL[7] /= totalA;
- bynL[8] /= totalA;
- bynL[9] /= totalA;
- bynL[10] /= 2; //catchall for garbage data
- //end L
-
- //begin R
+ //NJAD R
benfordize = floor(inputSampleR);
- 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;}
+ while (benfordize >= 1.0) benfordize /= 10;
+ while (benfordize < 1.0 && benfordize > 0.0000001) benfordize *= 10;
hotbinA = floor(benfordize);
//hotbin becomes the Benford bin value for this number floored
totalA = 0;
if ((hotbinA > 0) && (hotbinA < 10))
{
- bynR[hotbinA] += 1;
- totalA += (301-bynR[1]);
- totalA += (176-bynR[2]);
- totalA += (125-bynR[3]);
- totalA += (97-bynR[4]);
- totalA += (79-bynR[5]);
- totalA += (67-bynR[6]);
- totalA += (58-bynR[7]);
- totalA += (51-bynR[8]);
- totalA += (46-bynR[9]);
+ bynR[hotbinA] += 1; if (bynR[hotbinA] > 982) cutbinsR = true;
+ totalA += (301-bynR[1]); totalA += (176-bynR[2]); totalA += (125-bynR[3]);
+ totalA += (97-bynR[4]); totalA += (79-bynR[5]); totalA += (67-bynR[6]);
+ totalA += (58-bynR[7]); totalA += (51-bynR[8]); totalA += (46-bynR[9]);
bynR[hotbinA] -= 1;
- } else {hotbinA = 10;}
+ } else hotbinA = 10;
//produce total number- smaller is closer to Benford real
benfordize = ceil(inputSampleR);
- 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;}
+ while (benfordize >= 1.0) benfordize /= 10;
+ while (benfordize < 1.0 && benfordize > 0.0000001) benfordize *= 10;
hotbinB = floor(benfordize);
//hotbin becomes the Benford bin value for this number ceiled
totalB = 0;
if ((hotbinB > 0) && (hotbinB < 10))
{
- bynR[hotbinB] += 1;
- totalB += (301-bynR[1]);
- totalB += (176-bynR[2]);
- totalB += (125-bynR[3]);
- totalB += (97-bynR[4]);
- totalB += (79-bynR[5]);
- totalB += (67-bynR[6]);
- totalB += (58-bynR[7]);
- totalB += (51-bynR[8]);
- totalB += (46-bynR[9]);
+ bynR[hotbinB] += 1; if (bynR[hotbinB] > 982) cutbinsR = true;
+ totalB += (301-bynR[1]); totalB += (176-bynR[2]); totalB += (125-bynR[3]);
+ totalB += (97-bynR[4]); totalB += (79-bynR[5]); totalB += (67-bynR[6]);
+ totalB += (58-bynR[7]); totalB += (51-bynR[8]); totalB += (46-bynR[9]);
bynR[hotbinB] -= 1;
- } else {hotbinB = 10;}
+ } else hotbinB = 10;
//produce total number- smaller is closer to Benford real
- if (totalA < totalB)
- {
- bynR[hotbinA] += 1;
- inputSampleR = floor(inputSampleR);
- }
- else
- {
- bynR[hotbinB] += 1;
- inputSampleR = ceil(inputSampleR);
- }
+ if (totalA < totalB) {bynR[hotbinA] += 1; outputSample = floor(inputSampleR);}
+ else {bynR[hotbinB] += 1; outputSample = floor(inputSampleR+1);}
//assign the relevant one to the delay line
//and floor/ceil signal accordingly
- totalA = bynR[1] + bynR[2] + bynR[3] + bynR[4] + bynR[5] + bynR[6] + bynR[7] + bynR[8] + bynR[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.
- bynR[1] /= totalA;
- bynR[2] /= totalA;
- bynR[3] /= totalA;
- bynR[4] /= totalA;
- bynR[5] /= totalA;
- bynR[6] /= totalA;
- bynR[7] /= totalA;
- bynR[8] /= totalA;
- bynR[9] /= totalA;
- bynR[10] /= 2; //catchall for garbage data
- //end R
+ if (cutbinsR) {
+ bynR[1] *= 0.99; bynR[2] *= 0.99; bynR[3] *= 0.99; bynR[4] *= 0.99; bynR[5] *= 0.99;
+ bynR[6] *= 0.99; bynR[7] *= 0.99; bynR[8] *= 0.99; bynR[9] *= 0.99; bynR[10] *= 0.99;
+ }
+ noiseShapingR += outputSample - drySampleR;
+ if (noiseShapingR > fabs(inputSampleR)) noiseShapingR = fabs(inputSampleR);
+ if (noiseShapingR < -fabs(inputSampleR)) noiseShapingR = -fabs(inputSampleR);
+ //finished NJAD R
+
- inputSampleL /= 8388608.0;
- inputSampleR /= 8388608.0;
-
- noiseShapingL += inputSampleL - drySampleL;
- noiseShapingR += inputSampleR - drySampleR;
+ inputSampleL /= outScale;
+ inputSampleR /= outScale;
+ if (inputSampleL > 1.0) inputSampleL = 1.0;
+ if (inputSampleL < -1.0) inputSampleL = -1.0;
+ if (inputSampleR > 1.0) inputSampleR = 1.0;
+ if (inputSampleR < -1.0) inputSampleR = -1.0;
+
*out1 = inputSampleL;
*out2 = inputSampleR;
@@ -262,237 +168,143 @@ void NotJustAnotherDither::processDoubleReplacing(double **inputs, double **outp
double* out1 = outputs[0];
double* out2 = outputs[1];
-
- long double inputSampleL;
- long double inputSampleR;
-
- double benfordize;
- int hotbinA;
- int hotbinB;
- double totalA;
- double totalB;
- double drySampleL;
- double drySampleR;
+ int processing = (VstInt32)( A * 1.999 );
+ bool highres = false;
+ if (processing == 1) highres = true;
+ float scaleFactor;
+ if (highres) scaleFactor = 8388608.0;
+ else scaleFactor = 32768.0;
+ float derez = B;
+ if (derez > 0.0) scaleFactor *= pow(1.0-derez,6);
+ if (scaleFactor < 0.0001) scaleFactor = 0.0001;
+ float outScale = scaleFactor;
+ if (outScale < 8.0) outScale = 8.0;
+
while (--sampleFrames >= 0)
{
- inputSampleL = *in1;
- inputSampleR = *in2;
- if (inputSampleL<1.2e-38 && -inputSampleL<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;
- inputSampleL = applyresidue;
- }
- if (inputSampleR<1.2e-38 && -inputSampleR<1.2e-38) {
- static int noisesource = 0;
- 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;
- inputSampleR = 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.
- }
- drySampleL = inputSampleL;
- drySampleR = inputSampleR;
-
- inputSampleL -= noiseShapingL;
- inputSampleR -= noiseShapingR;
+ long double inputSampleL = *in1;
+ long double inputSampleR = *in2;
+ if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpd * 1.18e-43;
+ fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
+ if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpd * 1.18e-43;
+ fpd ^= fpd << 13; fpd ^= fpd >> 17; fpd ^= fpd << 5;
- inputSampleL *= 8388608.0;
- inputSampleR *= 8388608.0;
+ inputSampleL *= scaleFactor;
+ inputSampleR *= scaleFactor;
//0-1 is now one bit, now we dither
- //begin L
- benfordize = floor(inputSampleL);
- 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);
+ //begin Not Just Another Dither
+ bool cutbinsL; cutbinsL = false;
+ bool cutbinsR; cutbinsR = false;
+ long double drySampleL; drySampleL = inputSampleL;
+ long double drySampleR; drySampleR = inputSampleR;
+ inputSampleL -= noiseShapingL;
+ inputSampleR -= noiseShapingR;
+
+ //NJAD L
+ long double benfordize; benfordize = floor(inputSampleL);
+ 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))
{
- bynL[hotbinA] += 1;
- totalA += (301-bynL[1]);
- totalA += (176-bynL[2]);
- totalA += (125-bynL[3]);
- totalA += (97-bynL[4]);
- totalA += (79-bynL[5]);
- totalA += (67-bynL[6]);
- totalA += (58-bynL[7]);
- totalA += (51-bynL[8]);
- totalA += (46-bynL[9]);
+ bynL[hotbinA] += 1; if (bynL[hotbinA] > 982) cutbinsL = true;
+ totalA += (301-bynL[1]); totalA += (176-bynL[2]); totalA += (125-bynL[3]);
+ totalA += (97-bynL[4]); totalA += (79-bynL[5]); totalA += (67-bynL[6]);
+ totalA += (58-bynL[7]); totalA += (51-bynL[8]); totalA += (46-bynL[9]);
bynL[hotbinA] -= 1;
- } else {hotbinA = 10;}
+ } else hotbinA = 10;
//produce total number- smaller is closer to Benford real
benfordize = ceil(inputSampleL);
- 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))
{
- bynL[hotbinB] += 1;
- totalB += (301-bynL[1]);
- totalB += (176-bynL[2]);
- totalB += (125-bynL[3]);
- totalB += (97-bynL[4]);
- totalB += (79-bynL[5]);
- totalB += (67-bynL[6]);
- totalB += (58-bynL[7]);
- totalB += (51-bynL[8]);
- totalB += (46-bynL[9]);
+ bynL[hotbinB] += 1; if (bynL[hotbinB] > 982) cutbinsL = true;
+ totalB += (301-bynL[1]); totalB += (176-bynL[2]); totalB += (125-bynL[3]);
+ totalB += (97-bynL[4]); totalB += (79-bynL[5]); totalB += (67-bynL[6]);
+ totalB += (58-bynL[7]); totalB += (51-bynL[8]); totalB += (46-bynL[9]);
bynL[hotbinB] -= 1;
- } else {hotbinB = 10;}
+ } else hotbinB = 10;
//produce total number- smaller is closer to Benford real
- if (totalA < totalB)
- {
- bynL[hotbinA] += 1;
- inputSampleL = floor(inputSampleL);
- }
- else
- {
- bynL[hotbinB] += 1;
- inputSampleL = ceil(inputSampleL);
- }
+ long double outputSampleL;
+ if (totalA < totalB) {bynL[hotbinA] += 1; outputSampleL = floor(inputSampleL);}
+ else {bynL[hotbinB] += 1; outputSampleL = floor(inputSampleL+1);}
//assign the relevant one to the delay line
//and floor/ceil signal accordingly
+ if (cutbinsL) {
+ bynL[1] *= 0.99; bynL[2] *= 0.99; bynL[3] *= 0.99; bynL[4] *= 0.99; bynL[5] *= 0.99;
+ bynL[6] *= 0.99; bynL[7] *= 0.99; bynL[8] *= 0.99; bynL[9] *= 0.99; bynL[10] *= 0.99;
+ }
+ noiseShapingL += outputSampleL - drySampleL;
+ if (noiseShapingL > fabs(inputSampleL)) noiseShapingL = fabs(inputSampleL);
+ if (noiseShapingL < -fabs(inputSampleL)) noiseShapingL = -fabs(inputSampleL);
+ //finished NJAD L
- totalA = bynL[1] + bynL[2] + bynL[3] + bynL[4] + bynL[5] + bynL[6] + bynL[7] + bynL[8] + bynL[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.
- bynL[1] /= totalA;
- bynL[2] /= totalA;
- bynL[3] /= totalA;
- bynL[4] /= totalA;
- bynL[5] /= totalA;
- bynL[6] /= totalA;
- bynL[7] /= totalA;
- bynL[8] /= totalA;
- bynL[9] /= totalA;
- bynL[10] /= 2; //catchall for garbage data
- //end L
-
- //begin R
+ //NJAD R
benfordize = floor(inputSampleR);
- 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;}
+ while (benfordize >= 1.0) benfordize /= 10;
+ while (benfordize < 1.0 && benfordize > 0.0000001) benfordize *= 10;
hotbinA = floor(benfordize);
//hotbin becomes the Benford bin value for this number floored
totalA = 0;
if ((hotbinA > 0) && (hotbinA < 10))
{
- bynR[hotbinA] += 1;
- totalA += (301-bynR[1]);
- totalA += (176-bynR[2]);
- totalA += (125-bynR[3]);
- totalA += (97-bynR[4]);
- totalA += (79-bynR[5]);
- totalA += (67-bynR[6]);
- totalA += (58-bynR[7]);
- totalA += (51-bynR[8]);
- totalA += (46-bynR[9]);
+ bynR[hotbinA] += 1; if (bynR[hotbinA] > 982) cutbinsR = true;
+ totalA += (301-bynR[1]); totalA += (176-bynR[2]); totalA += (125-bynR[3]);
+ totalA += (97-bynR[4]); totalA += (79-bynR[5]); totalA += (67-bynR[6]);
+ totalA += (58-bynR[7]); totalA += (51-bynR[8]); totalA += (46-bynR[9]);
bynR[hotbinA] -= 1;
- } else {hotbinA = 10;}
+ } else hotbinA = 10;
//produce total number- smaller is closer to Benford real
benfordize = ceil(inputSampleR);
- 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;}
+ while (benfordize >= 1.0) benfordize /= 10;
+ while (benfordize < 1.0 && benfordize > 0.0000001) benfordize *= 10;
hotbinB = floor(benfordize);
//hotbin becomes the Benford bin value for this number ceiled
totalB = 0;
if ((hotbinB > 0) && (hotbinB < 10))
{
- bynR[hotbinB] += 1;
- totalB += (301-bynR[1]);
- totalB += (176-bynR[2]);
- totalB += (125-bynR[3]);
- totalB += (97-bynR[4]);
- totalB += (79-bynR[5]);
- totalB += (67-bynR[6]);
- totalB += (58-bynR[7]);
- totalB += (51-bynR[8]);
- totalB += (46-bynR[9]);
+ bynR[hotbinB] += 1; if (bynR[hotbinB] > 982) cutbinsR = true;
+ totalB += (301-bynR[1]); totalB += (176-bynR[2]); totalB += (125-bynR[3]);
+ totalB += (97-bynR[4]); totalB += (79-bynR[5]); totalB += (67-bynR[6]);
+ totalB += (58-bynR[7]); totalB += (51-bynR[8]); totalB += (46-bynR[9]);
bynR[hotbinB] -= 1;
- } else {hotbinB = 10;}
+ } else hotbinB = 10;
//produce total number- smaller is closer to Benford real
- if (totalA < totalB)
- {
- bynR[hotbinA] += 1;
- inputSampleR = floor(inputSampleR);
- }
- else
- {
- bynR[hotbinB] += 1;
- inputSampleR = ceil(inputSampleR);
- }
+ long double outputSampleR;
+ if (totalA < totalB) {bynR[hotbinA] += 1; outputSampleR = floor(inputSampleR);}
+ else {bynR[hotbinB] += 1; outputSampleR = floor(inputSampleR+1);}
//assign the relevant one to the delay line
//and floor/ceil signal accordingly
- totalA = bynR[1] + bynR[2] + bynR[3] + bynR[4] + bynR[5] + bynR[6] + bynR[7] + bynR[8] + bynR[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.
- bynR[1] /= totalA;
- bynR[2] /= totalA;
- bynR[3] /= totalA;
- bynR[4] /= totalA;
- bynR[5] /= totalA;
- bynR[6] /= totalA;
- bynR[7] /= totalA;
- bynR[8] /= totalA;
- bynR[9] /= totalA;
- bynR[10] /= 2; //catchall for garbage data
- //end R
+ if (cutbinsR) {
+ bynR[1] *= 0.99; bynR[2] *= 0.99; bynR[3] *= 0.99; bynR[4] *= 0.99; bynR[5] *= 0.99;
+ bynR[6] *= 0.99; bynR[7] *= 0.99; bynR[8] *= 0.99; bynR[9] *= 0.99; bynR[10] *= 0.99;
+ }
+ noiseShapingR += outputSampleR - drySampleR;
+ if (noiseShapingR > fabs(inputSampleR)) noiseShapingR = fabs(inputSampleR);
+ if (noiseShapingR < -fabs(inputSampleR)) noiseShapingR = -fabs(inputSampleR);
+ //finished NJAD R
+
- inputSampleL /= 8388608.0;
- inputSampleR /= 8388608.0;
+ inputSampleL = outputSampleL / outScale;
+ inputSampleR = outputSampleR / outScale;
- noiseShapingL += inputSampleL - drySampleL;
- noiseShapingR += inputSampleR - drySampleR;
+ if (inputSampleL > 1.0) inputSampleL = 1.0;
+ if (inputSampleL < -1.0) inputSampleL = -1.0;
+ if (inputSampleR > 1.0) inputSampleR = 1.0;
+ if (inputSampleR < -1.0) inputSampleR = -1.0;
*out1 = inputSampleL;
*out2 = inputSampleR;