From 6df9b9832d0e4a1532040c0d4eba5b12bd795f79 Mon Sep 17 00:00:00 2001 From: Christopher Johnson Date: Sat, 2 May 2026 19:22:14 -0400 Subject: [PATCH] ADClip9 --- Airwindopedia.txt | 16 ++++++- plugins/LinuxVST/src/ADClip9/ADClip9.cpp | 2 +- plugins/LinuxVST/src/ADClip9/ADClip9Proc.cpp | 16 ++++--- plugins/MacAU/ADClip9/ADClip9.cpp | 2 +- .../christopherjohnson.pbxuser | 40 +++++++++--------- .../christopherjohnson.perspectivev3 | 35 +++++++-------- plugins/MacSignedAU/ADClip9/ADClip9.cpp | 2 +- .../UserInterfaceState.xcuserstate | Bin 17995 -> 14237 bytes .../UserInterfaceState.xcuserstate | Bin 24490 -> 20649 bytes .../xcshareddata/xcschemes/ADClip9.xcscheme | 4 +- .../MacSignedVST/ADClip9/source/ADClip9.cpp | 2 +- .../ADClip9/source/ADClip9Proc.cpp | 16 ++++--- .../christopherjohnson.pbxuser | 12 +++--- .../christopherjohnson.perspectivev3 | 9 ++-- .../ADClip9/ADClip9.xcodeproj/project.pbxproj | 4 +- plugins/MacVST/ADClip9/source/ADClip9.cpp | 2 +- plugins/MacVST/ADClip9/source/ADClip9Proc.cpp | 16 ++++--- .../WinVST/ADClip9/.vs/VSTProject/v14/.suo | Bin 22528 -> 22528 bytes plugins/WinVST/ADClip9/ADClip9.cpp | 2 +- plugins/WinVST/ADClip9/ADClip9Proc.cpp | 16 ++++--- what.txt | 3 +- 21 files changed, 113 insertions(+), 86 deletions(-) diff --git a/Airwindopedia.txt b/Airwindopedia.txt index 34bc360f5..b4ffedc95 100644 --- a/Airwindopedia.txt +++ b/Airwindopedia.txt @@ -17,7 +17,7 @@ Biquads: BiquadStack, BiquadNonLin, BiquadHiLo, BiquadPlus, Biquad, BiquadDouble Brightness: Air4, Air3, Slew4, PlatinumSlew, DeBess, GoldenSlew, Sinew, SlewSonic, Acceleration2, DeEss, Smooth, EverySlew, Slew3, Slew2, Slew, Air2, Air, PurestAir, Acceleration, DeHiss, Hypersonic, HypersonX, Ultrasonic, UltrasonicLite, UltrasonicMed, UltrasonX -Clipping: ClipOnly3, ADClip8, ClipOnly2, ClipSoftly, OneCornerClip, ADClip7, AQuickVoiceClip, ClipOnly, FinalClip +Clipping: ADClip9, ClipOnly3, ADClip8, ClipOnly2, ClipSoftly, OneCornerClip, ADClip7, AQuickVoiceClip, ClipOnly, FinalClip Consoles: Console9Buss, Console9Channel, ConsoleLABuss, ConsoleLAChannel, ConsoleMCBuss, ConsoleMCChannel, ConsoleMDBuss, ConsoleMDChannel, Console8LiteChannel, Console8LiteBuss, Console8BussHype, Console8BussIn, Console8BussOut, Console8ChannelHype, Console8ChannelIn, Console8ChannelOut, Console8SubHype, Console8SubIn, Console8SubOut, Console0Channel, Console0Buss, PurestConsole3Buss, PurestConsole3Channel, PurestConsole2Buss, PurestConsole2Channel, Console7Buss, Console7Channel, Console7Cascade, Console7Crunch, PurestConsoleBuss, PurestConsoleChannel,Console6Buss, Console6Channel, PDBuss, PDChannel, Console5Buss, Console5Channel, Console5DarkCh, C5RawBuss, C5RawChannel, AtmosphereBuss, AtmosphereChannel, Console4Buss, Console4Channel, EveryConsole @@ -90,7 +90,7 @@ The last mode is Clip Only, and rather than selecting the various algorithm outp So my recommendation in 2017 heading to 2018, is to use ADClip7 in gain-matched mode, to keep that ‘true peak’ measurement within the Mastered For iTunes requirements. I’m sure not everybody will stick to that, but I’m happy to say it is actually quite good for doing that, and if people want to smash stuff with it and enjoy the bass thud, that’s their affair. Remember a clipper makes stuff dynamic and punchy, not ‘flattened out’: use a limiter if you need dynamically flat, or perhaps both. In this modern era of replay gain, I’m going to suggest that dynamic and punchy is where it’s at. Learn the lessons of the LUFS meter! They’re available to us all, now. -############ ADClip8 is the ultimate Airwindows loudenator/biggenator. +############ ADClip8 is a stacked-up Airwindows loudenator based on ClipOnly2. The last time we saw an Airwindows ADClip, the full version rather than a neat and tidy stripped-down version, was October 8… of 2017. It's been more than six years since the king of loudenators saw an update, in part because ClipOnly got followed by ClipOnly2, which was such a good high-sample-rate clipper that it was all I needed for years. ClipOnly2 is still the cleanest, purest way to take small amounts of peak clipping to your signal: it's great as a safety clip. @@ -108,6 +108,18 @@ I would say don't use this for evil but who am I kidding. If you beat everyone w For what it's worth, 'Apotheosis' mode should also be a very nice way to do extremely moderate transparent clipping of challenging material: ClipOnly2 will still be more transparent but only sounds like a slightly brighter version of ADClip8 Normal mode. Apotheosis mode simply does more and I wouldn't blame anybody for preferring it. Hope you like ADClip8! +############ ADClip9 is the ClipOnly3 version of a loudenator/biggenator. + +Update time! As promised, I'm putting out ClipOnly3 as an ADClip (the fundamental concepts are still ADClip, so that makes this ADClip9.) + +Multiple things have changed since ADClip8, more than two years ago. The way this one works there's no benefit to stacking up instances, so the colorful mode names like 'Apocalypse' go by the wayside… but more useful things in ADClip are retained or even expanded. + +The three modes are Boost, Match, and ClipOnly. That means you've got a 'pure loudenate' setting, a 'level matched' setting with its own dB-measured control (which kept me up late at night rebuilding everything for the Nth time because it applied the correct amount, but wasn't SHOWING the relevant dB in the interface) and a setting that's silent until you start clipping and then shows the delta: this one can be used if you're looking to not grind against musical content but only transient spikes. + +The remaining controls are Noise and Ceiling, and technically they're both thresholds. They are NOT measured in dB, they're made to give subtler and subtler control as you go nearer to clipping directly at 0dB. The default settings of 0.7 and 0.75 closely match what ClipOnly3 does, which gets intersample peaks as close to 0 as I dared. If you lower Noise, what you're doing is hitting the 'transition to noise' threshold sooner, without affecting the hard clip limit. If you lower Ceiling, you're lowering the hard clip limit. You'll probably end up moving both, but if you do it's up to you to find your own balance point. Don't expect it to become a 'replace the audio with noise and clip the rest' plugin: Silhouette might be your best bet for that, ADClip9 is still the Airwindows take on 'softening the edges of clips with noise' as found in ClipOnly3. + +It's been a couple years since I advanced the state of the art in 'unreasonable loudenation' and let people get their hands dirtier than with ClipOnly (which is always designed to be a transparent safety clipper with no controls that happens to behave perfectly.) So here you go, with a bit of luck this'll hold people while I work on the opposite extremes of dynamics :) + ############ ADT is a double short delay tap with saturation. ADT means ‘artificial double-tracking’. You could also call it fixed flanging. It’s a single short delay, as heard on lots of Beatles tracks. It’s now my job to explain what’s different about the Airwindows ADT, what you can do with it beyond the obvious ‘stick it on like a preset and pretend you are a Beatle’, and why you’d bother. diff --git a/plugins/LinuxVST/src/ADClip9/ADClip9.cpp b/plugins/LinuxVST/src/ADClip9/ADClip9.cpp index 7edb182bc..61e9b3721 100755 --- a/plugins/LinuxVST/src/ADClip9/ADClip9.cpp +++ b/plugins/LinuxVST/src/ADClip9/ADClip9.cpp @@ -124,7 +124,7 @@ void ADClip9::getParameterName(VstInt32 index, char *text) { void ADClip9::getParameterDisplay(VstInt32 index, char *text) { switch (index) { case kParamA: float2string (A*18.0, text, kVstMaxParamStrLen); break; - case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B*18.0, text, kVstMaxParamStrLen); break; case kParamC: float2string (C, text, kVstMaxParamStrLen); break; case kParamD: float2string (D, text, kVstMaxParamStrLen); break; case kParamE: switch((VstInt32)( E * 2.999 )) { diff --git a/plugins/LinuxVST/src/ADClip9/ADClip9Proc.cpp b/plugins/LinuxVST/src/ADClip9/ADClip9Proc.cpp index c58d085fc..900011caf 100755 --- a/plugins/LinuxVST/src/ADClip9/ADClip9Proc.cpp +++ b/plugins/LinuxVST/src/ADClip9/ADClip9Proc.cpp @@ -106,12 +106,14 @@ void ADClip9::processReplacing(float **inputs, float **outputs, VstInt32 sampleF //this is our output mode switch, showing the effects //begin 32 bit stereo floating point dither - int expon; frexpf((float)inputSampleL, &expon); + //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); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-44l * 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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 32 bit stereo floating point dither *out1 = inputSampleL; @@ -225,10 +227,12 @@ void ADClip9::processDoubleReplacing(double **inputs, double **outputs, VstInt32 //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)); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 64 bit stereo floating point dither *out1 = inputSampleL; diff --git a/plugins/MacAU/ADClip9/ADClip9.cpp b/plugins/MacAU/ADClip9/ADClip9.cpp index b0f542ec6..5c9172423 100755 --- a/plugins/MacAU/ADClip9/ADClip9.cpp +++ b/plugins/MacAU/ADClip9/ADClip9.cpp @@ -292,7 +292,7 @@ void ADClip9::ADClip9Kernel::Process( const Float32 *inSourceP, //begin 32 bit floating point dither //int expon; frexpf((float)inputSample, &expon); fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5; - //inputSample += ((double(fpd)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62)); + //inputSample += ((double(fpd)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 32 bit floating point dither *destP = inputSampleL; diff --git a/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser b/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser index c703191b4..7a4f64d7f 100755 --- a/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser +++ b/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser @@ -49,29 +49,19 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 798213865; - PBXWorkspaceStateSaveDate = 798213865; + PBXPerProjectTemplateStateSaveDate = 799318642; + PBXWorkspaceStateSaveDate = 799318642; }; perUserProjectItems = { - 8B15A3F32F93C8E300C3BB79 /* PBXTextBookmark */ = 8B15A3F32F93C8E300C3BB79 /* PBXTextBookmark */; 8B4698082F8EB2BD00FF1967 /* PlistBookmark */ = 8B4698082F8EB2BD00FF1967 /* PlistBookmark */; 8B4E19E12F92E23900DAA5EC /* PBXTextBookmark */ = 8B4E19E12F92E23900DAA5EC /* PBXTextBookmark */; - 8B4E19E22F92E23900DAA5EC /* PBXTextBookmark */ = 8B4E19E22F92E23900DAA5EC /* PBXTextBookmark */; + 8B85FF132FA4A27500F0F89A /* PBXTextBookmark */ = 8B85FF132FA4A27500F0F89A /* PBXTextBookmark */; + 8B85FF182FA4A29B00F0F89A /* PBXTextBookmark */ = 8B85FF182FA4A29B00F0F89A /* PBXTextBookmark */; }; sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */; userBuildSettings = { }; }; - 8B15A3F32F93C8E300C3BB79 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 8BA05A660720730100365D66 /* ADClip9.cpp */; - name = "ADClip9.cpp: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 199; - vrLoc = 3017; - }; 8B4698082F8EB2BD00FF1967 /* PlistBookmark */ = { isa = PlistBookmark; fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */; @@ -94,22 +84,32 @@ vrLen = 257; vrLoc = 3393; }; - 8B4E19E22F92E23900DAA5EC /* PBXTextBookmark */ = { + 8B85FF132FA4A27500F0F89A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 8BA05A660720730100365D66 /* ADClip9.cpp */; name = "ADClip9.cpp: 1"; rLen = 0; rLoc = 0; rType = 0; - vrLen = 254; - vrLoc = 3017; + vrLen = 207; + vrLoc = 2923; + }; + 8B85FF182FA4A29B00F0F89A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8BA05A660720730100365D66 /* ADClip9.cpp */; + name = "ADClip9.cpp: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 207; + vrLoc = 2923; }; 8BA05A660720730100365D66 /* ADClip9.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {840, 5634}}"; + sepNavIntBoundsRect = "{{0, 0}, {840, 5688}}"; sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{3017, 199}"; - sepNavWindowFrame = "{{161, 86}, {797, 792}}"; + sepNavVisRange = "{2923, 207}"; + sepNavWindowFrame = "{{19, 86}, {797, 792}}"; }; }; 8BA05A690720730100365D66 /* ADClip9Version.h */ = { diff --git a/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 index 26a99f6b8..2326ef8f0 100755 --- a/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 +++ b/plugins/MacAU/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 @@ -256,8 +256,6 @@ Layout - BecomeActive - ContentConfiguration PBXBottomSmartGroupGIDs @@ -326,7 +324,7 @@ 288 RubberWindowFrame - 233 195 841 654 0 0 1440 878 + 49 204 841 654 0 0 1440 878 Module PBXSmartGroupTreeModule @@ -354,12 +352,12 @@ _historyCapacity 0 bookmark - 8B15A3F32F93C8E300C3BB79 + 8B85FF182FA4A29B00F0F89A history 8B4698082F8EB2BD00FF1967 8B4E19E12F92E23900DAA5EC - 8B4E19E22F92E23900DAA5EC + 8B85FF132FA4A27500F0F89A SplitCount @@ -373,18 +371,18 @@ GeometryConfiguration Frame - {{0, 0}, {531, 126}} + {{0, 0}, {531, 92}} RubberWindowFrame - 233 195 841 654 0 0 1440 878 + 49 204 841 654 0 0 1440 878 Module PBXNavigatorGroup Proportion - 126pt + 92pt Proportion - 482pt + 516pt Tabs @@ -398,9 +396,7 @@ GeometryConfiguration Frame - {{10, 27}, {531, 455}} - RubberWindowFrame - 233 195 841 654 0 0 1440 878 + {{10, 27}, {531, 489}} Module XCDetailModule @@ -454,7 +450,9 @@ GeometryConfiguration Frame - {{10, 27}, {531, 339}} + {{10, 27}, {531, 489}} + RubberWindowFrame + 49 204 841 654 0 0 1440 878 Module PBXBuildResultsModule @@ -482,11 +480,11 @@ TableOfContents - 8B15A3F42F93C8E300C3BB79 + 8B85FF192FA4A29B00F0F89A 1CA23ED40692098700951B8B - 8B15A3F52F93C8E300C3BB79 + 8B85FF1A2FA4A29B00F0F89A 8BD7274A1D46E5A5000176F0 - 8B15A3F62F93C8E300C3BB79 + 8B85FF1B2FA4A29B00F0F89A 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -659,7 +657,7 @@ StatusbarIsVisible TimeStamp - 798214371.82228398 + 799318683.68437803 ToolbarConfigUserDefaultsMinorVersion 2 ToolbarDisplayMode @@ -676,11 +674,10 @@ 5 WindowOrderList - 8B15A3F72F93C8E300C3BB79 /Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/ADClip9/ADClip9.xcodeproj WindowString - 233 195 841 654 0 0 1440 878 + 49 204 841 654 0 0 1440 878 WindowToolsV3 diff --git a/plugins/MacSignedAU/ADClip9/ADClip9.cpp b/plugins/MacSignedAU/ADClip9/ADClip9.cpp index 44afa32d9..83c2c17e1 100755 --- a/plugins/MacSignedAU/ADClip9/ADClip9.cpp +++ b/plugins/MacSignedAU/ADClip9/ADClip9.cpp @@ -292,7 +292,7 @@ void ADClip9::ADClip9Kernel::Process( const Float32 *inSourceP, //begin 32 bit floating point dither //int expon; frexpf((float)inputSample, &expon); fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5; - //inputSample += ((double(fpd)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62)); + //inputSample += ((double(fpd)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 32 bit floating point dither *destP = inputSampleL; diff --git a/plugins/MacSignedAU/ADClip9/ADClip9.xcodeproj/project.xcworkspace/xcuserdata/christopherjohnson.xcuserdatad/UserInterfaceState.xcuserstate b/plugins/MacSignedAU/ADClip9/ADClip9.xcodeproj/project.xcworkspace/xcuserdata/christopherjohnson.xcuserdatad/UserInterfaceState.xcuserstate index 43ef1f32046d245fe8e24b1ed683ea714d66e2fc..3aebaa43f746cb2b16a835a5fd851ac900559aed 100644 GIT binary patch delta 6124 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 @@ -51,7 +51,7 @@ diff --git a/plugins/MacSignedVST/ADClip9/source/ADClip9.cpp b/plugins/MacSignedVST/ADClip9/source/ADClip9.cpp index 7edb182bc..61e9b3721 100755 --- a/plugins/MacSignedVST/ADClip9/source/ADClip9.cpp +++ b/plugins/MacSignedVST/ADClip9/source/ADClip9.cpp @@ -124,7 +124,7 @@ void ADClip9::getParameterName(VstInt32 index, char *text) { void ADClip9::getParameterDisplay(VstInt32 index, char *text) { switch (index) { case kParamA: float2string (A*18.0, text, kVstMaxParamStrLen); break; - case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B*18.0, text, kVstMaxParamStrLen); break; case kParamC: float2string (C, text, kVstMaxParamStrLen); break; case kParamD: float2string (D, text, kVstMaxParamStrLen); break; case kParamE: switch((VstInt32)( E * 2.999 )) { diff --git a/plugins/MacSignedVST/ADClip9/source/ADClip9Proc.cpp b/plugins/MacSignedVST/ADClip9/source/ADClip9Proc.cpp index c58d085fc..900011caf 100755 --- a/plugins/MacSignedVST/ADClip9/source/ADClip9Proc.cpp +++ b/plugins/MacSignedVST/ADClip9/source/ADClip9Proc.cpp @@ -106,12 +106,14 @@ void ADClip9::processReplacing(float **inputs, float **outputs, VstInt32 sampleF //this is our output mode switch, showing the effects //begin 32 bit stereo floating point dither - int expon; frexpf((float)inputSampleL, &expon); + //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); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-44l * 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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 32 bit stereo floating point dither *out1 = inputSampleL; @@ -225,10 +227,12 @@ void ADClip9::processDoubleReplacing(double **inputs, double **outputs, VstInt32 //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)); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 64 bit stereo floating point dither *out1 = inputSampleL; diff --git a/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser b/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser index f387d8d3f..085fed2d7 100755 --- a/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser +++ b/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.pbxuser @@ -51,8 +51,8 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 798214044; - PBXWorkspaceStateSaveDate = 798214044; + PBXPerProjectTemplateStateSaveDate = 799362575; + PBXWorkspaceStateSaveDate = 799362575; }; sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */; userBuildSettings = { @@ -84,10 +84,10 @@ }; 24D8286F09A914000093AEF8 /* ADClip9Proc.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1290, 4230}}"; - sepNavSelRange = "{10203, 0}"; - sepNavVisRange = "{3353, 2127}"; - sepNavWindowFrame = "{{126, 52}, {1323, 826}}"; + sepNavIntBoundsRect = "{{0, 0}, {1290, 4284}}"; + sepNavSelRange = "{5428, 0}"; + sepNavVisRange = "{4155, 1497}"; + sepNavWindowFrame = "{{117, 148}, {1304, 730}}"; }; }; 8B02375E1D42B1C400E1E8C8 /* Source Control */ = { diff --git a/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 index 91871928a..ccafc5ae1 100755 --- a/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 +++ b/plugins/MacVST/ADClip9/ADClip9.xcodeproj/christopherjohnson.perspectivev3 @@ -469,11 +469,11 @@ TableOfContents - 8B15A3F02F93C8E100C3BB79 + 8BCB92812FA54E120007F63D 1CA23ED40692098700951B8B - 8B15A3F12F93C8E100C3BB79 + 8BCB92822FA54E120007F63D 8B0237581D42B1C400E1E8C8 - 8B15A3F22F93C8E100C3BB79 + 8BCB92832FA54E120007F63D 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -646,7 +646,7 @@ StatusbarIsVisible TimeStamp - 798214369.86210299 + 799362608.55843997 ToolbarConfigUserDefaultsMinorVersion 2 ToolbarDisplayMode @@ -663,6 +663,7 @@ 5 WindowOrderList + 8BCB92912FA54E300007F63D /Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/ADClip9/ADClip9.xcodeproj WindowString diff --git a/plugins/MacVST/ADClip9/ADClip9.xcodeproj/project.pbxproj b/plugins/MacVST/ADClip9/ADClip9.xcodeproj/project.pbxproj index 0cefadece..b386b58b8 100755 --- a/plugins/MacVST/ADClip9/ADClip9.xcodeproj/project.pbxproj +++ b/plugins/MacVST/ADClip9/ADClip9.xcodeproj/project.pbxproj @@ -1894,7 +1894,7 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 8D01CCC60486CAD60068D4B7 /* ADClip9 */ = { + 8D01CCC60486CAD60068D4B7 /* AudioUnit */ = { isa = PBXNativeTarget; buildConfigurationList = 24BEAAED08919AE700E695F9 /* Build configuration list for PBXNativeTarget "ADClip9" */; buildPhases = ( @@ -1947,7 +1947,7 @@ ); projectRoot = ""; targets = ( - 8D01CCC60486CAD60068D4B7 /* ADClip9 */, + 8D01CCC60486CAD60068D4B7 /* AudioUnit */, ); }; /* End PBXProject section */ diff --git a/plugins/MacVST/ADClip9/source/ADClip9.cpp b/plugins/MacVST/ADClip9/source/ADClip9.cpp index 7edb182bc..61e9b3721 100755 --- a/plugins/MacVST/ADClip9/source/ADClip9.cpp +++ b/plugins/MacVST/ADClip9/source/ADClip9.cpp @@ -124,7 +124,7 @@ void ADClip9::getParameterName(VstInt32 index, char *text) { void ADClip9::getParameterDisplay(VstInt32 index, char *text) { switch (index) { case kParamA: float2string (A*18.0, text, kVstMaxParamStrLen); break; - case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B*18.0, text, kVstMaxParamStrLen); break; case kParamC: float2string (C, text, kVstMaxParamStrLen); break; case kParamD: float2string (D, text, kVstMaxParamStrLen); break; case kParamE: switch((VstInt32)( E * 2.999 )) { diff --git a/plugins/MacVST/ADClip9/source/ADClip9Proc.cpp b/plugins/MacVST/ADClip9/source/ADClip9Proc.cpp index c58d085fc..900011caf 100755 --- a/plugins/MacVST/ADClip9/source/ADClip9Proc.cpp +++ b/plugins/MacVST/ADClip9/source/ADClip9Proc.cpp @@ -106,12 +106,14 @@ void ADClip9::processReplacing(float **inputs, float **outputs, VstInt32 sampleF //this is our output mode switch, showing the effects //begin 32 bit stereo floating point dither - int expon; frexpf((float)inputSampleL, &expon); + //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); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-44l * 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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 32 bit stereo floating point dither *out1 = inputSampleL; @@ -225,10 +227,12 @@ void ADClip9::processDoubleReplacing(double **inputs, double **outputs, VstInt32 //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)); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 64 bit stereo floating point dither *out1 = inputSampleL; diff --git a/plugins/WinVST/ADClip9/.vs/VSTProject/v14/.suo b/plugins/WinVST/ADClip9/.vs/VSTProject/v14/.suo index ca3eb690cdec7c812e5702aaf6c3d5b396dd1300..15debc96a5cdcdb0bd0bccc7da5e6b307d6c86fe 100755 GIT binary patch delta 116 zcmZqJz}T>XaYGIhn?Uj5fDJb{7cu=}W)paF6wGE@=jUm`;Kty};LPC2U|9F DRx}#z delta 116 zcmZqJz}T>XaYGIh+kpVjeLfd97cu=}hO^n$`FT1rm@*hKxG@+oxG-2Sm@()wI5U_q vm;>3mVA>EYW(j0FgT-7K41p|TpdKTjDs!N$3y|-|P&+wVH*)i#P&+07D-#-L diff --git a/plugins/WinVST/ADClip9/ADClip9.cpp b/plugins/WinVST/ADClip9/ADClip9.cpp index 7edb182bc..61e9b3721 100755 --- a/plugins/WinVST/ADClip9/ADClip9.cpp +++ b/plugins/WinVST/ADClip9/ADClip9.cpp @@ -124,7 +124,7 @@ void ADClip9::getParameterName(VstInt32 index, char *text) { void ADClip9::getParameterDisplay(VstInt32 index, char *text) { switch (index) { case kParamA: float2string (A*18.0, text, kVstMaxParamStrLen); break; - case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B*18.0, text, kVstMaxParamStrLen); break; case kParamC: float2string (C, text, kVstMaxParamStrLen); break; case kParamD: float2string (D, text, kVstMaxParamStrLen); break; case kParamE: switch((VstInt32)( E * 2.999 )) { diff --git a/plugins/WinVST/ADClip9/ADClip9Proc.cpp b/plugins/WinVST/ADClip9/ADClip9Proc.cpp index c58d085fc..900011caf 100755 --- a/plugins/WinVST/ADClip9/ADClip9Proc.cpp +++ b/plugins/WinVST/ADClip9/ADClip9Proc.cpp @@ -106,12 +106,14 @@ void ADClip9::processReplacing(float **inputs, float **outputs, VstInt32 sampleF //this is our output mode switch, showing the effects //begin 32 bit stereo floating point dither - int expon; frexpf((float)inputSampleL, &expon); + //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); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-44l * 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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 32 bit stereo floating point dither *out1 = inputSampleL; @@ -225,10 +227,12 @@ void ADClip9::processDoubleReplacing(double **inputs, double **outputs, VstInt32 //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)); + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 3.553e-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)); + if (fpdL-fpdR < 1073741824 || fpdR-fpdL < 1073741824) { + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5;} + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 3.553e-44l * pow(2,expon+62)); //end 64 bit stereo floating point dither *out1 = inputSampleL; diff --git a/what.txt b/what.txt index 59f797aa1..0b76d5cb6 100644 --- a/what.txt +++ b/what.txt @@ -2,7 +2,8 @@ Acceleration is an acceleration limiter that tames edge, leaves brightness.[coll=] Acceleration2 is Acceleration, better! Updated for high sample rate and more extreme effect.[coll=Latest] ADClip7 is the original Airwindows loudness maximizer/ peak control.[coll=] -ADClip8 is the ultimate Airwindows loudenator/biggenator.[coll=Latest] +ADClip8 is a stacked-up Airwindows loudenator based on ClipOnly2.[coll=] +ADClip9 is the ClipOnly3 version of a loudenator/biggenator.[coll=Latest] ADT is a double short delay tap with saturation.[coll=Latest] Air is a different bright EQ from any other. Requires 44.1K.[coll=] Air2 is a different bright EQ with silk tone and high sample rate support.[coll=]