From 828681015d65db1c4f6c39c1ffb9fe89b71f8af2 Mon Sep 17 00:00:00 2001 From: Chris Johnson Date: Tue, 4 Feb 2020 03:55:47 -0500 Subject: Tape plugins update --- plugins/LinuxVST/src/Tape/TapeProc.cpp | 8 ++- plugins/LinuxVST/src/ToTape6/ToTape6Proc.cpp | 58 +++++++++++------- plugins/MacAU/Tape/Tape.cpp | 7 ++- .../Tape/Tape.xcodeproj/christopherjohnson.pbxuser | 58 +++++++++--------- .../christopherjohnson.perspectivev3 | 25 ++++---- plugins/MacAU/ToTape6/ToTape6.cpp | 18 ++++-- .../ToTape6.xcodeproj/christopherjohnson.pbxuser | 66 ++++++++++----------- .../christopherjohnson.perspectivev3 | 32 +++++----- .../Tape/Tape.xcodeproj/christopherjohnson.pbxuser | 44 ++++++++------ .../christopherjohnson.perspectivev3 | 40 +++++++------ plugins/MacVST/Tape/source/TapeProc.cpp | 8 ++- .../ToTape6.xcodeproj/christopherjohnson.pbxuser | 51 ++++++++++++---- .../christopherjohnson.perspectivev3 | 47 +++++++++------ plugins/MacVST/ToTape6/source/ToTape6Proc.cpp | 58 +++++++++++------- plugins/WinVST/Tape/.vs/VSTProject/v14/.suo | Bin 22528 -> 22528 bytes plugins/WinVST/Tape/TapeProc.cpp | 8 ++- plugins/WinVST/ToTape6/.vs/VSTProject/v14/.suo | Bin 22528 -> 22528 bytes plugins/WinVST/ToTape6/ToTape6Proc.cpp | 58 +++++++++++------- 18 files changed, 360 insertions(+), 226 deletions(-) diff --git a/plugins/LinuxVST/src/Tape/TapeProc.cpp b/plugins/LinuxVST/src/Tape/TapeProc.cpp index 1d1050c..e29f71a 100755 --- a/plugins/LinuxVST/src/Tape/TapeProc.cpp +++ b/plugins/LinuxVST/src/Tape/TapeProc.cpp @@ -326,6 +326,12 @@ void Tape::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa long double inputSampleR = *in2; if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpd * 1.18e-43; if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpd * 1.18e-43; + + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before anything, even dry + long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; @@ -438,7 +444,7 @@ void Tape::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa long double groundSampleL = drySampleL - inputSampleL; //set up UnBox long double groundSampleR = drySampleR - inputSampleR; //set up UnBox - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } //gain boost inside UnBox: do not boost fringe audio diff --git a/plugins/LinuxVST/src/ToTape6/ToTape6Proc.cpp b/plugins/LinuxVST/src/ToTape6/ToTape6Proc.cpp index 6140295..1b4ff7d 100755 --- a/plugins/LinuxVST/src/ToTape6/ToTape6Proc.cpp +++ b/plugins/LinuxVST/src/ToTape6/ToTape6Proc.cpp @@ -61,6 +61,11 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before plugin + double flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on if (gcount < 0 || gcount > 499) {gcount = 499;} @@ -199,7 +204,7 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF long double groundSampleL = vibDrySampleL - inputSampleL; //set up UnBox on fluttered audio long double groundSampleR = vibDrySampleR - inputSampleR; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } @@ -217,16 +222,20 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF if (HighsSampleR < 0) inputSampleR += applySoften; //apply Soften depending on polarity - if (fabs(inputSampleL) < 0.0025) { - iirHeadBumpAL *= 0.99; - iirHeadBumpBL *= 0.99; - } //restrain resonant quality of head bump algorithm + double suppress = (1.0-fabs(inputSampleL)) * 0.00013; + if (iirHeadBumpAL > suppress) iirHeadBumpAL -= suppress; + if (iirHeadBumpAL < -suppress) iirHeadBumpAL += suppress; + if (iirHeadBumpBL > suppress) iirHeadBumpBL -= suppress; + if (iirHeadBumpBL < -suppress) iirHeadBumpBL += suppress; + //restrain resonant quality of head bump algorithm + suppress = (1.0-fabs(inputSampleR)) * 0.00013; + if (iirHeadBumpAR > suppress) iirHeadBumpAR -= suppress; + if (iirHeadBumpAR < -suppress) iirHeadBumpAR += suppress; + if (iirHeadBumpBR > suppress) iirHeadBumpBR -= suppress; + if (iirHeadBumpBR < -suppress) iirHeadBumpBR += suppress; + //restrain resonant quality of head bump algorithm + inputSampleL += ((iirHeadBumpAL + iirHeadBumpBL) * HeadBumpControl); - //apply Fatten. - if (fabs(inputSampleR) < 0.0025) { - iirHeadBumpAR *= 0.99; - iirHeadBumpBR *= 0.99; - } //restrain resonant quality of head bump algorithm inputSampleR += ((iirHeadBumpAR + iirHeadBumpBR) * HeadBumpControl); //apply Fatten. @@ -386,6 +395,11 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before plugin + double flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on if (gcount < 0 || gcount > 499) {gcount = 499;} @@ -524,7 +538,7 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 long double groundSampleL = vibDrySampleL - inputSampleL; //set up UnBox on fluttered audio long double groundSampleR = vibDrySampleR - inputSampleR; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } @@ -542,16 +556,20 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 if (HighsSampleR < 0) inputSampleR += applySoften; //apply Soften depending on polarity - if (fabs(inputSampleL) < 0.0025) { - iirHeadBumpAL *= 0.99; - iirHeadBumpBL *= 0.99; - } //restrain resonant quality of head bump algorithm + double suppress = (1.0-fabs(inputSampleL)) * 0.00013; + if (iirHeadBumpAL > suppress) iirHeadBumpAL -= suppress; + if (iirHeadBumpAL < -suppress) iirHeadBumpAL += suppress; + if (iirHeadBumpBL > suppress) iirHeadBumpBL -= suppress; + if (iirHeadBumpBL < -suppress) iirHeadBumpBL += suppress; + //restrain resonant quality of head bump algorithm + suppress = (1.0-fabs(inputSampleR)) * 0.00013; + if (iirHeadBumpAR > suppress) iirHeadBumpAR -= suppress; + if (iirHeadBumpAR < -suppress) iirHeadBumpAR += suppress; + if (iirHeadBumpBR > suppress) iirHeadBumpBR -= suppress; + if (iirHeadBumpBR < -suppress) iirHeadBumpBR += suppress; + //restrain resonant quality of head bump algorithm + inputSampleL += ((iirHeadBumpAL + iirHeadBumpBL) * HeadBumpControl); - //apply Fatten. - if (fabs(inputSampleR) < 0.0025) { - iirHeadBumpAR *= 0.99; - iirHeadBumpBR *= 0.99; - } //restrain resonant quality of head bump algorithm inputSampleR += ((iirHeadBumpAR + iirHeadBumpBR) * HeadBumpControl); //apply Fatten. diff --git a/plugins/MacAU/Tape/Tape.cpp b/plugins/MacAU/Tape/Tape.cpp index 43d9fdf..75b7ae3 100755 --- a/plugins/MacAU/Tape/Tape.cpp +++ b/plugins/MacAU/Tape/Tape.cpp @@ -212,6 +212,11 @@ void Tape::TapeKernel::Process( const Float32 *inSourceP, while (nSampleFrames-- > 0) { long double inputSample = *sourceP; if (fabs(inputSample)<1.18e-37) inputSample = fpd * 1.18e-37; + + if (inputgain < 1.0) { + inputSample *= inputgain; + } //gain cut before anything, even dry + long double drySample = inputSample; long double HighsSample = 0.0; @@ -271,7 +276,7 @@ void Tape::TapeKernel::Process( const Float32 *inSourceP, flip = !flip; long double groundSample = drySample - inputSample; //set up UnBox - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSample *= inputgain; } //gain boost inside UnBox: do not boost fringe audio diff --git a/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.pbxuser b/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.pbxuser index 0ec8d09..f642afa 100755 --- a/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.pbxuser +++ b/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.pbxuser @@ -49,13 +49,13 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 601680037; - PBXWorkspaceStateSaveDate = 601680037; + PBXPerProjectTemplateStateSaveDate = 602113855; + PBXWorkspaceStateSaveDate = 602113855; }; perUserProjectItems = { 8B043C9B23DA71E500DF857C /* PlistBookmark */ = 8B043C9B23DA71E500DF857C /* PlistBookmark */; - 8B043CA723DA797600DF857C /* PBXTextBookmark */ = 8B043CA723DA797600DF857C /* PBXTextBookmark */; - 8B043D0A23DCEE2600DF857C /* PBXTextBookmark */ = 8B043D0A23DCEE2600DF857C /* PBXTextBookmark */; + 8BA0D9F523E3880200721922 /* PBXTextBookmark */ = 8BA0D9F523E3880200721922 /* PBXTextBookmark */; + 8BA0D9F623E3880200721922 /* PBXTextBookmark */ = 8BA0D9F623E3880200721922 /* PBXTextBookmark */; }; sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */; userBuildSettings = { @@ -73,32 +73,12 @@ rLen = 0; rLoc = 9223372036854775808; }; - 8B043CA723DA797600DF857C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 8BA05A660720730100365D66 /* Tape.cpp */; - name = "Tape.cpp: 217"; - rLen = 0; - rLoc = 9367; - rType = 0; - vrLen = 588; - vrLoc = 8979; - }; - 8B043D0A23DCEE2600DF857C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 8BA05A660720730100365D66 /* Tape.cpp */; - name = "Tape.cpp: 217"; - rLen = 0; - rLoc = 9367; - rType = 0; - vrLen = 538; - vrLoc = 9029; - }; 8BA05A660720730100365D66 /* Tape.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {670, 4602}}"; - sepNavSelRange = "{9367, 0}"; - sepNavVisRange = "{9029, 538}"; - sepNavWindowFrame = "{{768, 65}, {870, 813}}"; + sepNavIntBoundsRect = "{{0, 0}, {670, 4654}}"; + sepNavSelRange = "{9468, 0}"; + sepNavVisRange = "{9192, 345}"; + sepNavWindowFrame = "{{570, 65}, {870, 813}}"; }; }; 8BA05A690720730100365D66 /* TapeVersion.h */ = { @@ -109,12 +89,32 @@ sepNavWindowFrame = "{{15, 60}, {870, 813}}"; }; }; + 8BA0D9F523E3880200721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8BA05A660720730100365D66 /* Tape.cpp */; + name = "Tape.cpp: 222"; + rLen = 0; + rLoc = 9468; + rType = 0; + vrLen = 345; + vrLoc = 9192; + }; + 8BA0D9F623E3880200721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8BA05A660720730100365D66 /* Tape.cpp */; + name = "Tape.cpp: 222"; + rLen = 0; + rLoc = 9468; + rType = 0; + vrLen = 345; + vrLoc = 9192; + }; 8BC6025B073B072D006C4272 /* Tape.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {894, 1872}}"; sepNavSelRange = "{2893, 0}"; sepNavVisRange = "{3805, 1496}"; - sepNavWindowFrame = "{{913, 65}, {870, 813}}"; + sepNavWindowFrame = "{{570, 65}, {870, 813}}"; }; }; 8BD3CCB8148830B20062E48C /* Source Control */ = { diff --git a/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 index 6e60cf5..57f04e8 100755 --- a/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 +++ b/plugins/MacAU/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 @@ -302,7 +302,7 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 4 + 3 2 1 0 @@ -354,11 +354,11 @@ _historyCapacity 0 bookmark - 8B043D0A23DCEE2600DF857C + 8BA0D9F623E3880200721922 history 8B043C9B23DA71E500DF857C - 8B043CA723DA797600DF857C + 8BA0D9F523E3880200721922 SplitCount @@ -372,18 +372,18 @@ GeometryConfiguration Frame - {{0, 0}, {531, 229}} + {{0, 0}, {531, 188}} RubberWindowFrame 599 197 841 654 0 0 1440 878 Module PBXNavigatorGroup Proportion - 229pt + 188pt Proportion - 379pt + 420pt Tabs @@ -397,7 +397,7 @@ GeometryConfiguration Frame - {{10, 27}, {531, 352}} + {{10, 27}, {531, 393}} RubberWindowFrame 599 197 841 654 0 0 1440 878 @@ -453,7 +453,7 @@ GeometryConfiguration Frame - {{10, 27}, {531, 339}} + {{10, 27}, {531, 365}} Module PBXBuildResultsModule @@ -481,11 +481,11 @@ TableOfContents - 8B043D0B23DCEE2600DF857C + 8BA0D9F723E3880200721922 1CA23ED40692098700951B8B - 8B043D0C23DCEE2600DF857C + 8BA0D9F823E3880200721922 8BD7274A1D46E5A5000176F0 - 8B043D0D23DCEE2600DF857C + 8BA0D9F923E3880200721922 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -658,7 +658,7 @@ StatusbarIsVisible TimeStamp - 601681446.32968295 + 602114050.79568899 ToolbarConfigUserDefaultsMinorVersion 2 ToolbarDisplayMode @@ -675,7 +675,6 @@ 5 WindowOrderList - 8B043D0E23DCEE2600DF857C /Users/christopherjohnson/Desktop/Plugins/MacAU/Tape/Tape.xcodeproj WindowString diff --git a/plugins/MacAU/ToTape6/ToTape6.cpp b/plugins/MacAU/ToTape6/ToTape6.cpp index 1291f73..30e06f4 100755 --- a/plugins/MacAU/ToTape6/ToTape6.cpp +++ b/plugins/MacAU/ToTape6/ToTape6.cpp @@ -267,6 +267,11 @@ void ToTape6::ToTape6Kernel::Process( const Float32 *inSourceP, long double inputSample = *sourceP; if (fabs(inputSample)<1.18e-37) inputSample = fpd * 1.18e-37; long double drySample = inputSample; + + if (inputgain < 1.0) { + inputSample *= inputgain; + } //gain cut before plugin + Float64 flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on @@ -351,7 +356,7 @@ void ToTape6::ToTape6Kernel::Process( const Float32 *inSourceP, long double groundSample = vibDrySample - inputSample; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSample *= inputgain; } //gain boost inside UnBox/Mojo @@ -362,10 +367,13 @@ void ToTape6::ToTape6Kernel::Process( const Float32 *inSourceP, if (HighsSample < 0) inputSample += applySoften; //apply Soften depending on polarity - if (fabs(inputSample) < 0.0025) { - iirHeadBumpA *= 0.99; - iirHeadBumpB *= 0.99; - } //restrain resonant quality of head bump algorithm + Float64 suppress = (1.0-fabs(inputSample)) * 0.00013; + if (iirHeadBumpA > suppress) iirHeadBumpA -= suppress; + if (iirHeadBumpA < -suppress) iirHeadBumpA += suppress; + if (iirHeadBumpB > suppress) iirHeadBumpB -= suppress; + if (iirHeadBumpB < -suppress) iirHeadBumpB += suppress; + //restrain resonant quality of head bump algorithm + inputSample += ((iirHeadBumpA + iirHeadBumpB) * HeadBumpControl); //apply Fatten. diff --git a/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser b/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser index 19e3c58..68f0f1d 100755 --- a/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser +++ b/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser @@ -51,14 +51,14 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 601187225; - PBXWorkspaceStateSaveDate = 601187225; + PBXPerProjectTemplateStateSaveDate = 602111038; + PBXWorkspaceStateSaveDate = 602111038; }; perUserProjectItems = { 8B0437A823D499A600DF857C /* PlistBookmark */ = 8B0437A823D499A600DF857C /* PlistBookmark */; - 8B043BE023D5632700DF857C /* PBXTextBookmark */ = 8B043BE023D5632700DF857C /* PBXTextBookmark */; 8B043BFA23D5642C00DF857C /* PBXTextBookmark */ = 8B043BFA23D5642C00DF857C /* PBXTextBookmark */; - 8B043BFB23D5642C00DF857C /* PBXTextBookmark */ = 8B043BFB23D5642C00DF857C /* PBXTextBookmark */; + 8BA0D9AF23E37D1C00721922 /* PBXTextBookmark */ = 8BA0D9AF23E37D1C00721922 /* PBXTextBookmark */; + 8BA0D9B023E37D1C00721922 /* PBXTextBookmark */ = 8BA0D9B023E37D1C00721922 /* PBXTextBookmark */; }; sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */; userBuildSettings = { @@ -76,16 +76,6 @@ rLen = 0; rLoc = 9223372036854775808; }; - 8B043BE023D5632700DF857C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 8BA05A660720730100365D66 /* ToTape6.cpp */; - name = "ToTape6.cpp: 308"; - rLen = 0; - rLoc = 13502; - rType = 0; - vrLen = 645; - vrLoc = 12217; - }; 8B043BFA23D5642C00DF857C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 8BC6025B073B072D006C4272 /* ToTape6.h */; @@ -96,22 +86,12 @@ vrLen = 584; vrLoc = 2958; }; - 8B043BFB23D5642C00DF857C /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 8BA05A660720730100365D66 /* ToTape6.cpp */; - name = "ToTape6.cpp: 308"; - rLen = 0; - rLoc = 13502; - rType = 0; - vrLen = 594; - vrLoc = 12268; - }; 8BA05A660720730100365D66 /* ToTape6.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {803, 5889}}"; - sepNavSelRange = "{13502, 0}"; - sepNavVisRange = "{12268, 594}"; - sepNavWindowFrame = "{{732, 83}, {956, 795}}"; + sepNavIntBoundsRect = "{{0, 0}, {705, 5798}}"; + sepNavSelRange = "{13591, 0}"; + sepNavVisRange = "{12576, 379}"; + sepNavWindowFrame = "{{549, 83}, {956, 795}}"; }; }; 8BA05A690720730100365D66 /* ToTape6Version.h */ = { @@ -119,15 +99,35 @@ sepNavIntBoundsRect = "{{0, 0}, {824, 767}}"; sepNavSelRange = "{2881, 0}"; sepNavVisRange = "{70, 2874}"; - sepNavWindowFrame = "{{15, 58}, {784, 815}}"; + sepNavWindowFrame = "{{548, 58}, {784, 815}}"; }; }; + 8BA0D9AF23E37D1C00721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8BA05A660720730100365D66 /* ToTape6.cpp */; + name = "ToTape6.cpp: 313"; + rLen = 0; + rLoc = 13591; + rType = 0; + vrLen = 379; + vrLoc = 12604; + }; + 8BA0D9B023E37D1C00721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8BA05A660720730100365D66 /* ToTape6.cpp */; + name = "ToTape6.cpp: 313"; + rLen = 0; + rLoc = 13591; + rType = 0; + vrLen = 379; + vrLoc = 12576; + }; 8BC6025B073B072D006C4272 /* ToTape6.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {803, 2171}}"; - sepNavSelRange = "{3276, 0}"; - sepNavVisRange = "{2958, 584}"; - sepNavWindowFrame = "{{757, 63}, {784, 815}}"; + sepNavIntBoundsRect = "{{0, 0}, {894, 2158}}"; + sepNavSelRange = "{5664, 348}"; + sepNavVisRange = "{2589, 1432}"; + sepNavWindowFrame = "{{656, 63}, {784, 815}}"; }; }; 8BD3CCB8148830B20062E48C /* Source Control */ = { diff --git a/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 index 0afb03e..397318a 100755 --- a/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 +++ b/plugins/MacAU/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 @@ -326,7 +326,7 @@ 288 RubberWindowFrame - 599 224 841 654 0 0 1440 878 + 506 200 841 654 0 0 1440 878 Module PBXSmartGroupTreeModule @@ -354,12 +354,12 @@ _historyCapacity 0 bookmark - 8B043BFB23D5642C00DF857C + 8BA0D9B023E37D1C00721922 history 8B0437A823D499A600DF857C 8B043BFA23D5642C00DF857C - 8B043BE023D5632700DF857C + 8BA0D9AF23E37D1C00721922 SplitCount @@ -373,18 +373,18 @@ GeometryConfiguration Frame - {{0, 0}, {531, 202}} + {{0, 0}, {531, 142}} RubberWindowFrame - 599 224 841 654 0 0 1440 878 + 506 200 841 654 0 0 1440 878 Module PBXNavigatorGroup Proportion - 202pt + 142pt Proportion - 406pt + 466pt Tabs @@ -398,9 +398,9 @@ GeometryConfiguration Frame - {{10, 27}, {531, 379}} + {{10, 27}, {531, 439}} RubberWindowFrame - 599 224 841 654 0 0 1440 878 + 506 200 841 654 0 0 1440 878 Module XCDetailModule @@ -454,7 +454,7 @@ GeometryConfiguration Frame - {{10, 27}, {531, 352}} + {{10, 27}, {531, 408}} Module PBXBuildResultsModule @@ -482,11 +482,11 @@ TableOfContents - 8B043BFC23D5642C00DF857C + 8BA0D9B123E37D1C00721922 1CA23ED40692098700951B8B - 8B043BFD23D5642C00DF857C + 8BA0D9B223E37D1C00721922 8BD7274A1D46E5A5000176F0 - 8B043BFE23D5642C00DF857C + 8BA0D9B323E37D1C00721922 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -659,7 +659,7 @@ StatusbarIsVisible TimeStamp - 601187372.72559798 + 602111260.78300297 ToolbarConfigUserDefaultsMinorVersion 2 ToolbarDisplayMode @@ -676,11 +676,11 @@ 5 WindowOrderList - 8B043BFF23D5642C00DF857C + 8BA0D9B423E37D1C00721922 /Users/christopherjohnson/Desktop/Plugins/MacAU/ToTape6/ToTape6.xcodeproj WindowString - 599 224 841 654 0 0 1440 878 + 506 200 841 654 0 0 1440 878 WindowToolsV3 diff --git a/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.pbxuser b/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.pbxuser index d2bb84d..e624c93 100755 --- a/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.pbxuser +++ b/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.pbxuser @@ -49,14 +49,15 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 601679829; - PBXWorkspaceStateSaveDate = 601679829; + PBXPerProjectTemplateStateSaveDate = 602110889; + PBXWorkspaceStateSaveDate = 602110889; }; perUserProjectItems = { 8B043CDA23DCE7AD00DF857C /* PBXTextBookmark */ = 8B043CDA23DCE7AD00DF857C /* PBXTextBookmark */; 8B043D1923DCFF6200DF857C /* PBXTextBookmark */ = 8B043D1923DCFF6200DF857C /* PBXTextBookmark */; - 8B043D1A23DCFF6200DF857C /* XCBuildMessageTextBookmark */ = 8B043D1A23DCFF6200DF857C /* XCBuildMessageTextBookmark */; - 8B043D1B23DCFF6200DF857C /* PBXTextBookmark */ = 8B043D1B23DCFF6200DF857C /* PBXTextBookmark */; + 8BA0D9C023E37DB300721922 /* PBXTextBookmark */ = 8BA0D9C023E37DB300721922 /* PBXTextBookmark */; + 8BA0D9C123E37DB300721922 /* PBXBookmark */ = 8BA0D9C123E37DB300721922 /* PBXBookmark */; + 8BA0D9C223E37DB300721922 /* PBXTextBookmark */ = 8BA0D9C223E37DB300721922 /* PBXTextBookmark */; }; sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */; userBuildSettings = { @@ -80,7 +81,7 @@ }; 24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {838, 19760}}"; + sepNavIntBoundsRect = "{{0, 0}, {838, 19864}}"; sepNavSelRange = "{10616, 0}"; sepNavVisRange = "{10459, 280}"; sepNavWindowFrame = "{{15, 42}, {895, 831}}"; @@ -88,10 +89,10 @@ }; 24D8286F09A914000093AEF8 /* TapeProc.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {848, 8086}}"; - sepNavSelRange = "{23496, 0}"; - sepNavVisRange = "{22340, 1667}"; - sepNavWindowFrame = "{{277, 57}, {895, 821}}"; + sepNavIntBoundsRect = "{{0, 0}, {740, 7371}}"; + sepNavSelRange = "{23627, 0}"; + sepNavVisRange = "{23438, 235}"; + sepNavWindowFrame = "{{545, 57}, {895, 821}}"; }; }; 8B02375E1D42B1C400E1E8C8 /* Source Control */ = { @@ -128,16 +129,7 @@ vrLen = 180; vrLoc = 427; }; - 8B043D1A23DCFF6200DF857C /* XCBuildMessageTextBookmark */ = { - isa = PBXTextBookmark; - comments = "Deprecated conversion from string constant to 'char*'"; - fRef = 24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */; - fallbackIsa = XCBuildMessageTextBookmark; - rLen = 1; - rLoc = 306; - rType = 1; - }; - 8B043D1B23DCFF6200DF857C /* PBXTextBookmark */ = { + 8BA0D9C023E37DB300721922 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */; name = "audioeffectx.cpp: 307"; @@ -147,6 +139,20 @@ vrLen = 280; vrLoc = 10459; }; + 8BA0D9C123E37DB300721922 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 24D8286F09A914000093AEF8 /* TapeProc.cpp */; + }; + 8BA0D9C223E37DB300721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 24D8286F09A914000093AEF8 /* TapeProc.cpp */; + name = "TapeProc.cpp: 553"; + rLen = 0; + rLoc = 23627; + rType = 0; + vrLen = 235; + vrLoc = 23438; + }; 8D01CCC60486CAD60068D4B7 /* Tape */ = { activeExec = 0; }; diff --git a/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 index f1e3dd7..ad3683d 100755 --- a/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 +++ b/plugins/MacVST/Tape/Tape.xcodeproj/christopherjohnson.perspectivev3 @@ -256,6 +256,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -321,7 +323,7 @@ 185 RubberWindowFrame - 52 327 810 487 0 0 1440 878 + 530 344 810 487 0 0 1440 878 Module PBXSmartGroupTreeModule @@ -337,7 +339,7 @@ PBXProjectModuleGUID 8B0237581D42B1C400E1E8C8 PBXProjectModuleLabel - audioeffectx.cpp + TapeProc.cpp PBXSplitModuleInNavigatorKey Split0 @@ -345,16 +347,17 @@ PBXProjectModuleGUID 8B0237591D42B1C400E1E8C8 PBXProjectModuleLabel - audioeffectx.cpp + TapeProc.cpp _historyCapacity 0 bookmark - 8B043D1B23DCFF6200DF857C + 8BA0D9C223E37DB300721922 history 8B043CDA23DCE7AD00DF857C 8B043D1923DCFF6200DF857C - 8B043D1A23DCFF6200DF857C + 8BA0D9C023E37DB300721922 + 8BA0D9C123E37DB300721922 SplitCount @@ -368,18 +371,18 @@ GeometryConfiguration Frame - {{0, 0}, {603, 117}} + {{0, 0}, {603, 102}} RubberWindowFrame - 52 327 810 487 0 0 1440 878 + 530 344 810 487 0 0 1440 878 Module PBXNavigatorGroup Proportion - 117pt + 102pt Proportion - 324pt + 339pt Tabs @@ -393,7 +396,9 @@ GeometryConfiguration Frame - {{10, 27}, {603, 297}} + {{10, 27}, {603, 312}} + RubberWindowFrame + 530 344 810 487 0 0 1440 878 Module XCDetailModule @@ -448,8 +453,6 @@ Frame {{10, 27}, {603, 297}} - RubberWindowFrame - 52 327 810 487 0 0 1440 878 Module PBXBuildResultsModule @@ -477,11 +480,11 @@ TableOfContents - 8B043D1C23DCFF6200DF857C + 8BA0D9C323E37DB300721922 1CA23ED40692098700951B8B - 8B043D1D23DCFF6200DF857C + 8BA0D9C423E37DB300721922 8B0237581D42B1C400E1E8C8 - 8B043D1E23DCFF6200DF857C + 8BA0D9C523E37DB300721922 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -634,7 +637,7 @@ StatusbarIsVisible TimeStamp - 601685858.32363296 + 602111411.395051 ToolbarConfigUserDefaultsMinorVersion 2 ToolbarDisplayMode @@ -651,10 +654,11 @@ 5 WindowOrderList - /Users/christopherjohnson/Desktop/Tape/Tape.xcodeproj + 8BA0D9C623E37DB300721922 + /Users/christopherjohnson/Desktop/Plugins/MacVST/Tape/Tape.xcodeproj WindowString - 52 327 810 487 0 0 1440 878 + 530 344 810 487 0 0 1440 878 WindowToolsV3 diff --git a/plugins/MacVST/Tape/source/TapeProc.cpp b/plugins/MacVST/Tape/source/TapeProc.cpp index 1d1050c..e29f71a 100755 --- a/plugins/MacVST/Tape/source/TapeProc.cpp +++ b/plugins/MacVST/Tape/source/TapeProc.cpp @@ -326,6 +326,12 @@ void Tape::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa long double inputSampleR = *in2; if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpd * 1.18e-43; if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpd * 1.18e-43; + + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before anything, even dry + long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; @@ -438,7 +444,7 @@ void Tape::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa long double groundSampleL = drySampleL - inputSampleL; //set up UnBox long double groundSampleR = drySampleR - inputSampleR; //set up UnBox - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } //gain boost inside UnBox: do not boost fringe audio diff --git a/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser b/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser index a7faacc..a33f084 100755 --- a/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser +++ b/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.pbxuser @@ -49,8 +49,13 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 601183272; - PBXWorkspaceStateSaveDate = 601183272; + PBXPerProjectTemplateStateSaveDate = 602111006; + PBXWorkspaceStateSaveDate = 602111006; + }; + perUserProjectItems = { + 8BA0D9C723E37DB500721922 /* PBXTextBookmark */ = 8BA0D9C723E37DB500721922 /* PBXTextBookmark */; + 8BA0D9C823E37DB500721922 /* PBXBookmark */ = 8BA0D9C823E37DB500721922 /* PBXBookmark */; + 8BA0D9C923E37DB500721922 /* PBXTextBookmark */ = 8BA0D9C923E37DB500721922 /* PBXTextBookmark */; }; sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */; userBuildSettings = { @@ -58,18 +63,18 @@ }; 2407DEB6089929BA00EB68BF /* ToTape6.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {740, 2483}}"; + sepNavIntBoundsRect = "{{0, 0}, {649, 2535}}"; sepNavSelRange = "{998, 0}"; - sepNavVisRange = "{212, 1571}"; - sepNavWindowFrame = "{{12, 57}, {725, 821}}"; + sepNavVisRange = "{866, 150}"; + sepNavWindowFrame = "{{675, 57}, {725, 821}}"; }; }; 245463B80991757100464AD3 /* ToTape6.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {866, 1326}}"; - sepNavSelRange = "{3005, 0}"; + sepNavSelRange = "{2445, 676}"; sepNavVisRange = "{1784, 1348}"; - sepNavWindowFrame = "{{20, 66}, {799, 812}}"; + sepNavWindowFrame = "{{659, 66}, {799, 812}}"; }; }; 24A2FFDB0F90D1DD003BB5A7 /* audioeffectx.cpp */ = { @@ -82,10 +87,10 @@ }; 24D8286F09A914000093AEF8 /* ToTape6Proc.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {823, 9165}}"; - sepNavSelRange = "{26149, 0}"; - sepNavVisRange = "{24936, 1734}"; - sepNavWindowFrame = "{{5, 65}, {870, 813}}"; + sepNavIntBoundsRect = "{{0, 0}, {789, 8892}}"; + sepNavSelRange = "{9145, 0}"; + sepNavVisRange = "{12581, 204}"; + sepNavWindowFrame = "{{80, 57}, {870, 813}}"; }; }; 8B02375E1D42B1C400E1E8C8 /* Source Control */ = { @@ -102,6 +107,30 @@ isa = PBXCodeSenseManager; indexTemplatePath = ""; }; + 8BA0D9C723E37DB500721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2407DEB6089929BA00EB68BF /* ToTape6.cpp */; + name = "ToTape6.cpp: 40"; + rLen = 0; + rLoc = 998; + rType = 0; + vrLen = 150; + vrLoc = 866; + }; + 8BA0D9C823E37DB500721922 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 24D8286F09A914000093AEF8 /* ToTape6Proc.cpp */; + }; + 8BA0D9C923E37DB500721922 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 24D8286F09A914000093AEF8 /* ToTape6Proc.cpp */; + name = "ToTape6Proc.cpp: 207"; + rLen = 0; + rLoc = 9145; + rType = 0; + vrLen = 204; + vrLoc = 12581; + }; 8D01CCC60486CAD60068D4B7 /* ToTape6 */ = { activeExec = 0; }; diff --git a/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 b/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 index 4a6beec..cb771bb 100755 --- a/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 +++ b/plugins/MacVST/ToTape6/ToTape6.xcodeproj/christopherjohnson.perspectivev3 @@ -256,6 +256,8 @@ Layout + BecomeActive + ContentConfiguration PBXBottomSmartGroupGIDs @@ -298,7 +300,7 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 5 + 6 4 0 @@ -321,7 +323,7 @@ 185 RubberWindowFrame - 34 365 810 487 0 0 1440 878 + 547 205 810 487 0 0 1440 878 Module PBXSmartGroupTreeModule @@ -337,7 +339,7 @@ PBXProjectModuleGUID 8B0237581D42B1C400E1E8C8 PBXProjectModuleLabel - Gain.h + ToTape6Proc.cpp PBXSplitModuleInNavigatorKey Split0 @@ -345,7 +347,16 @@ PBXProjectModuleGUID 8B0237591D42B1C400E1E8C8 PBXProjectModuleLabel - Gain.h + ToTape6Proc.cpp + _historyCapacity + 0 + bookmark + 8BA0D9C923E37DB500721922 + history + + 8BA0D9C723E37DB500721922 + 8BA0D9C823E37DB500721922 + SplitCount 1 @@ -358,18 +369,18 @@ GeometryConfiguration Frame - {{0, 0}, {603, 0}} + {{0, 0}, {603, 117}} RubberWindowFrame - 34 365 810 487 0 0 1440 878 + 547 205 810 487 0 0 1440 878 Module PBXNavigatorGroup Proportion - 0pt + 117pt Proportion - 441pt + 324pt Tabs @@ -383,7 +394,9 @@ GeometryConfiguration Frame - {{10, 27}, {603, 414}} + {{10, 27}, {603, 297}} + RubberWindowFrame + 547 205 810 487 0 0 1440 878 Module XCDetailModule @@ -438,8 +451,6 @@ Frame {{10, 27}, {603, 414}} - RubberWindowFrame - 34 365 810 487 0 0 1440 878 Module PBXBuildResultsModule @@ -467,11 +478,11 @@ TableOfContents - 8B043C0423D5644800DF857C + 8BA0D9CA23E37DB500721922 1CA23ED40692098700951B8B - 8B043C0523D5644800DF857C + 8BA0D9CB23E37DB500721922 8B0237581D42B1C400E1E8C8 - 8B043C0623D5644800DF857C + 8BA0D9CC23E37DB500721922 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -624,7 +635,7 @@ StatusbarIsVisible TimeStamp - 601187400.30527699 + 602111413.25124705 ToolbarConfigUserDefaultsMinorVersion 2 ToolbarDisplayMode @@ -641,11 +652,11 @@ 5 WindowOrderList - 8B043C0723D5644800DF857C - /Users/christopherjohnson/Desktop/ToTape6/ToTape6.xcodeproj + 8BA0D9CD23E37DB500721922 + /Users/christopherjohnson/Desktop/Plugins/MacVST/ToTape6/ToTape6.xcodeproj WindowString - 34 365 810 487 0 0 1440 878 + 547 205 810 487 0 0 1440 878 WindowToolsV3 diff --git a/plugins/MacVST/ToTape6/source/ToTape6Proc.cpp b/plugins/MacVST/ToTape6/source/ToTape6Proc.cpp index 6140295..1b4ff7d 100755 --- a/plugins/MacVST/ToTape6/source/ToTape6Proc.cpp +++ b/plugins/MacVST/ToTape6/source/ToTape6Proc.cpp @@ -61,6 +61,11 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before plugin + double flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on if (gcount < 0 || gcount > 499) {gcount = 499;} @@ -199,7 +204,7 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF long double groundSampleL = vibDrySampleL - inputSampleL; //set up UnBox on fluttered audio long double groundSampleR = vibDrySampleR - inputSampleR; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } @@ -217,16 +222,20 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF if (HighsSampleR < 0) inputSampleR += applySoften; //apply Soften depending on polarity - if (fabs(inputSampleL) < 0.0025) { - iirHeadBumpAL *= 0.99; - iirHeadBumpBL *= 0.99; - } //restrain resonant quality of head bump algorithm + double suppress = (1.0-fabs(inputSampleL)) * 0.00013; + if (iirHeadBumpAL > suppress) iirHeadBumpAL -= suppress; + if (iirHeadBumpAL < -suppress) iirHeadBumpAL += suppress; + if (iirHeadBumpBL > suppress) iirHeadBumpBL -= suppress; + if (iirHeadBumpBL < -suppress) iirHeadBumpBL += suppress; + //restrain resonant quality of head bump algorithm + suppress = (1.0-fabs(inputSampleR)) * 0.00013; + if (iirHeadBumpAR > suppress) iirHeadBumpAR -= suppress; + if (iirHeadBumpAR < -suppress) iirHeadBumpAR += suppress; + if (iirHeadBumpBR > suppress) iirHeadBumpBR -= suppress; + if (iirHeadBumpBR < -suppress) iirHeadBumpBR += suppress; + //restrain resonant quality of head bump algorithm + inputSampleL += ((iirHeadBumpAL + iirHeadBumpBL) * HeadBumpControl); - //apply Fatten. - if (fabs(inputSampleR) < 0.0025) { - iirHeadBumpAR *= 0.99; - iirHeadBumpBR *= 0.99; - } //restrain resonant quality of head bump algorithm inputSampleR += ((iirHeadBumpAR + iirHeadBumpBR) * HeadBumpControl); //apply Fatten. @@ -386,6 +395,11 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before plugin + double flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on if (gcount < 0 || gcount > 499) {gcount = 499;} @@ -524,7 +538,7 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 long double groundSampleL = vibDrySampleL - inputSampleL; //set up UnBox on fluttered audio long double groundSampleR = vibDrySampleR - inputSampleR; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } @@ -542,16 +556,20 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 if (HighsSampleR < 0) inputSampleR += applySoften; //apply Soften depending on polarity - if (fabs(inputSampleL) < 0.0025) { - iirHeadBumpAL *= 0.99; - iirHeadBumpBL *= 0.99; - } //restrain resonant quality of head bump algorithm + double suppress = (1.0-fabs(inputSampleL)) * 0.00013; + if (iirHeadBumpAL > suppress) iirHeadBumpAL -= suppress; + if (iirHeadBumpAL < -suppress) iirHeadBumpAL += suppress; + if (iirHeadBumpBL > suppress) iirHeadBumpBL -= suppress; + if (iirHeadBumpBL < -suppress) iirHeadBumpBL += suppress; + //restrain resonant quality of head bump algorithm + suppress = (1.0-fabs(inputSampleR)) * 0.00013; + if (iirHeadBumpAR > suppress) iirHeadBumpAR -= suppress; + if (iirHeadBumpAR < -suppress) iirHeadBumpAR += suppress; + if (iirHeadBumpBR > suppress) iirHeadBumpBR -= suppress; + if (iirHeadBumpBR < -suppress) iirHeadBumpBR += suppress; + //restrain resonant quality of head bump algorithm + inputSampleL += ((iirHeadBumpAL + iirHeadBumpBL) * HeadBumpControl); - //apply Fatten. - if (fabs(inputSampleR) < 0.0025) { - iirHeadBumpAR *= 0.99; - iirHeadBumpBR *= 0.99; - } //restrain resonant quality of head bump algorithm inputSampleR += ((iirHeadBumpAR + iirHeadBumpBR) * HeadBumpControl); //apply Fatten. diff --git a/plugins/WinVST/Tape/.vs/VSTProject/v14/.suo b/plugins/WinVST/Tape/.vs/VSTProject/v14/.suo index ee3a0a2..98df0af 100755 Binary files a/plugins/WinVST/Tape/.vs/VSTProject/v14/.suo and b/plugins/WinVST/Tape/.vs/VSTProject/v14/.suo differ diff --git a/plugins/WinVST/Tape/TapeProc.cpp b/plugins/WinVST/Tape/TapeProc.cpp index 1d1050c..e29f71a 100755 --- a/plugins/WinVST/Tape/TapeProc.cpp +++ b/plugins/WinVST/Tape/TapeProc.cpp @@ -326,6 +326,12 @@ void Tape::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa long double inputSampleR = *in2; if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpd * 1.18e-43; if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpd * 1.18e-43; + + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before anything, even dry + long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; @@ -438,7 +444,7 @@ void Tape::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa long double groundSampleL = drySampleL - inputSampleL; //set up UnBox long double groundSampleR = drySampleR - inputSampleR; //set up UnBox - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } //gain boost inside UnBox: do not boost fringe audio diff --git a/plugins/WinVST/ToTape6/.vs/VSTProject/v14/.suo b/plugins/WinVST/ToTape6/.vs/VSTProject/v14/.suo index bb04217..5e0c932 100755 Binary files a/plugins/WinVST/ToTape6/.vs/VSTProject/v14/.suo and b/plugins/WinVST/ToTape6/.vs/VSTProject/v14/.suo differ diff --git a/plugins/WinVST/ToTape6/ToTape6Proc.cpp b/plugins/WinVST/ToTape6/ToTape6Proc.cpp index 6140295..1b4ff7d 100755 --- a/plugins/WinVST/ToTape6/ToTape6Proc.cpp +++ b/plugins/WinVST/ToTape6/ToTape6Proc.cpp @@ -61,6 +61,11 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before plugin + double flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on if (gcount < 0 || gcount > 499) {gcount = 499;} @@ -199,7 +204,7 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF long double groundSampleL = vibDrySampleL - inputSampleL; //set up UnBox on fluttered audio long double groundSampleR = vibDrySampleR - inputSampleR; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } @@ -217,16 +222,20 @@ void ToTape6::processReplacing(float **inputs, float **outputs, VstInt32 sampleF if (HighsSampleR < 0) inputSampleR += applySoften; //apply Soften depending on polarity - if (fabs(inputSampleL) < 0.0025) { - iirHeadBumpAL *= 0.99; - iirHeadBumpBL *= 0.99; - } //restrain resonant quality of head bump algorithm + double suppress = (1.0-fabs(inputSampleL)) * 0.00013; + if (iirHeadBumpAL > suppress) iirHeadBumpAL -= suppress; + if (iirHeadBumpAL < -suppress) iirHeadBumpAL += suppress; + if (iirHeadBumpBL > suppress) iirHeadBumpBL -= suppress; + if (iirHeadBumpBL < -suppress) iirHeadBumpBL += suppress; + //restrain resonant quality of head bump algorithm + suppress = (1.0-fabs(inputSampleR)) * 0.00013; + if (iirHeadBumpAR > suppress) iirHeadBumpAR -= suppress; + if (iirHeadBumpAR < -suppress) iirHeadBumpAR += suppress; + if (iirHeadBumpBR > suppress) iirHeadBumpBR -= suppress; + if (iirHeadBumpBR < -suppress) iirHeadBumpBR += suppress; + //restrain resonant quality of head bump algorithm + inputSampleL += ((iirHeadBumpAL + iirHeadBumpBL) * HeadBumpControl); - //apply Fatten. - if (fabs(inputSampleR) < 0.0025) { - iirHeadBumpAR *= 0.99; - iirHeadBumpBR *= 0.99; - } //restrain resonant quality of head bump algorithm inputSampleR += ((iirHeadBumpAR + iirHeadBumpBR) * HeadBumpControl); //apply Fatten. @@ -386,6 +395,11 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 long double drySampleL = inputSampleL; long double drySampleR = inputSampleR; + if (inputgain < 1.0) { + inputSampleL *= inputgain; + inputSampleR *= inputgain; + } //gain cut before plugin + double flutterrandy = fpd / (double)UINT32_MAX; //now we've got a random flutter, so we're messing with the pitch before tape effects go on if (gcount < 0 || gcount > 499) {gcount = 499;} @@ -524,7 +538,7 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 long double groundSampleL = vibDrySampleL - inputSampleL; //set up UnBox on fluttered audio long double groundSampleR = vibDrySampleR - inputSampleR; //set up UnBox on fluttered audio - if (inputgain != 1.0) { + if (inputgain > 1.0) { inputSampleL *= inputgain; inputSampleR *= inputgain; } @@ -542,16 +556,20 @@ void ToTape6::processDoubleReplacing(double **inputs, double **outputs, VstInt32 if (HighsSampleR < 0) inputSampleR += applySoften; //apply Soften depending on polarity - if (fabs(inputSampleL) < 0.0025) { - iirHeadBumpAL *= 0.99; - iirHeadBumpBL *= 0.99; - } //restrain resonant quality of head bump algorithm + double suppress = (1.0-fabs(inputSampleL)) * 0.00013; + if (iirHeadBumpAL > suppress) iirHeadBumpAL -= suppress; + if (iirHeadBumpAL < -suppress) iirHeadBumpAL += suppress; + if (iirHeadBumpBL > suppress) iirHeadBumpBL -= suppress; + if (iirHeadBumpBL < -suppress) iirHeadBumpBL += suppress; + //restrain resonant quality of head bump algorithm + suppress = (1.0-fabs(inputSampleR)) * 0.00013; + if (iirHeadBumpAR > suppress) iirHeadBumpAR -= suppress; + if (iirHeadBumpAR < -suppress) iirHeadBumpAR += suppress; + if (iirHeadBumpBR > suppress) iirHeadBumpBR -= suppress; + if (iirHeadBumpBR < -suppress) iirHeadBumpBR += suppress; + //restrain resonant quality of head bump algorithm + inputSampleL += ((iirHeadBumpAL + iirHeadBumpBL) * HeadBumpControl); - //apply Fatten. - if (fabs(inputSampleR) < 0.0025) { - iirHeadBumpAR *= 0.99; - iirHeadBumpBR *= 0.99; - } //restrain resonant quality of head bump algorithm inputSampleR += ((iirHeadBumpAR + iirHeadBumpBR) * HeadBumpControl); //apply Fatten. -- cgit v1.2.3