SweetWide

This commit is contained in:
Christopher Johnson 2026-01-11 16:26:10 -05:00
parent 51fe346563
commit 53a648baed
16 changed files with 198 additions and 108 deletions

View file

@ -39,7 +39,7 @@ Reverb: kStation, kGuitarHall2, kCathedral5, VerbTiny, VerbThic, kAlienSpaceship
Saturation: PurestSaturation, SquareRoot, Hypersoft, Creature, Huge, NCSeventeen, Tube2, Tube, Spiral2, PurestDrive, Focus, Mojo, Dyno, Spiral, UnBox, Desk4, Righteous4
Stereo: Srsly3, Srsly2, Srsly, Wider, StereoFX, ToVinyl4, AutoPan, LRFlipTimer, MSFlipTimer, Sidepass, SideDull
Stereo: Srsly3, Srsly2, Srsly, SweetWide, Wider, StereoFX, ToVinyl4, AutoPan, LRFlipTimer, MSFlipTimer, Sidepass, SideDull
Subtlety: Mastering2, Discontapeity, Mastering, Discontinuity, Hype, Shape, Inflamer, Sweeten, PurestWarm2, PurestWarm, Coils2, Interstage, PhaseNudge, Remap, SingleEndedTriode, Coils, Desk, TransDesk, TubeDesk
@ -5400,6 +5400,24 @@ The only thing Sweeten can do that you can't already do with Inflamer is be simp
I'll be using it: if anybody else finds it useful, that's even better :)
############ SweetWide is a strange grungy stereo widener.
It's experiment time! This is a really good example of the sort of thing I do for Airwindows, and for the folks out there.
You may well find this horrible, lame and useless. That is OK, it's not going to be for everybody.
But if you like the sort of weird grunge this produces, we're talking signature sound, secret weapon town, bigtime… and NOBODY else will be bringing it, and no AI will arrive at this unless literally told to copy it (in which case they should credit and say it's SweetWide they're using).
This plugin comes not from the world of Srsly or EdIsDim or Wider (plenty of other things I've made to do stereo widening nicely). It comes from my experiments with ring modulation. It's really a very simple algorithm though it does use square root functions: that's next to nothing, as far as CPU is concerned. It's doing terrible things to the stereo signal coming in, for the purpose of exaggerating side-channel informaqtion, but in a way where it's tending to produce asymmetric modulations. That's more along the lines of 'second harmonic, fourth harmonic etc' rather than 'third harmonic and normal distortion', and that's why Sweet is part of the name: we tend to hear even harmonics as more 'sweet' than odd harmonics.
Even then it's not acting normal because it's using that Soar control to govern how the square-root reacts to subtle sounds. It serves the purpose of bringing up a gnarly compressey grunginess, except for stereo widening. If you crank it out all the way it's very obvious, but you can dial the Soar setting in that way, and then pull it back if you'd like it to still be unique but not so obnoxious.
It'll also do a stereo narrowing effect that's maybe even more obnoxious, by turning Un/Wide all the way to Un. It's basically the same thing as an Inv/Dry/Wet control. The whole thing runs without any stored variables, and the setup of controls is hilariously trivial: without the square roots it'd be about the most CPU-efficient plugin you have.
The reason you don't have this already is, it sounds terrible. But it's terrible in kind of a wonderful way. I demonstrate it on a full mix, and you should never use it on a full mix. Instead, I think it'd be a great widener on a heavy guitar buss, or certain synth tones, or maybe it's a really interesting way to narrow a drum room sound and bring a lot of grungey color to things. Any sound you can get from it, you can tune with the Soar control. I've managed to bring the totally weird Soar control from my ring modulators to a stereo widener/narrower, in case that's handy.
If this is the plugin for you, you've probably already started throwing it on things and enjoying its unique gnarly space-distortions, and if this isn't the plugin for you, I don't know how much more clearly I can warn you. You're welcome :)
############ Swell is Dial-an-attack, like sidechaining.
Every now and then you come up with something a little different. The fun of that is in identifying it.
@ -6424,7 +6442,7 @@ ZRegion is that filter. The original Airwindows Region wasn't written in the con
The reason I might be needing this one is, I can get pretty killer bass tones using it. I'll set the first filter higher for midrange articulation, set the last filter very low for heavy bass mojo, and it's instantly a bass-amp type of sound. And if I intend to leave the setting as a fixed setting, ZRegion will give me that with the same flavor as my other Z filters.
But if I want to automate or move the controls as part of the mix…
But if I want to automate or move the controls as part of the mix… see ZRegion2.
############ ZRegion2 is an Emu e6400 style Airwindows Region filter, with coefficient smoothing.

View file

@ -23,7 +23,7 @@ void ConsoleX2Channel::processReplacing(float **inputs, float **outputs, VstInt3
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -550,7 +550,7 @@ void ConsoleX2Channel::processDoubleReplacing(double **inputs, double **outputs,
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;

View file

@ -23,7 +23,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -459,7 +459,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));
@ -555,7 +555,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -991,7 +991,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));

View file

@ -23,7 +23,7 @@ void ConsoleX2Channel::processReplacing(float **inputs, float **outputs, VstInt3
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -550,7 +550,7 @@ void ConsoleX2Channel::processDoubleReplacing(double **inputs, double **outputs,
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;

View file

@ -23,7 +23,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -459,7 +459,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));
@ -555,7 +555,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -991,7 +991,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));

View file

@ -49,13 +49,15 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 787100300;
PBXWorkspaceStateSaveDate = 787100300;
PBXPerProjectTemplateStateSaveDate = 788657052;
PBXWorkspaceStateSaveDate = 788657052;
};
perUserProjectItems = {
8B5AB6382EEA332A00A3F512 /* PBXTextBookmark */ = 8B5AB6382EEA332A00A3F512 /* PBXTextBookmark */;
8B5AB6392EEA332A00A3F512 /* PBXTextBookmark */ = 8B5AB6392EEA332A00A3F512 /* PBXTextBookmark */;
8BC5BE2E2EB165A900031C01 /* PBXTextBookmark */ = 8BC5BE2E2EB165A900031C01 /* PBXTextBookmark */;
8BAE90962F01EBB700A311FE /* PBXTextBookmark */ = 8BAE90962F01EBB700A311FE /* PBXTextBookmark */;
8BAE90ED2F01F3A000A311FE /* PBXBookmark */ = 8BAE90ED2F01F3A000A311FE /* PBXBookmark */;
8BAE90F82F01F3BC00A311FE /* PBXTextBookmark */ = 8BAE90F82F01F3BC00A311FE /* PBXTextBookmark */;
8BAE90FE2F01F3BC00A311FE /* PBXTextBookmark */ = 8BAE90FE2F01F3BC00A311FE /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@ -63,10 +65,10 @@
};
2407DEB6089929BA00EB68BF /* ConsoleX2Channel.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {777, 5814}}";
sepNavIntBoundsRect = "{{0, 0}, {1002, 5814}}";
sepNavSelRange = "{9004, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{545, 47}, {895, 831}}";
sepNavVisRange = "{7336, 2733}";
sepNavWindowFrame = "{{210, 47}, {895, 831}}";
};
};
245463B80991757100464AD3 /* ConsoleX2Channel.h */ = {
@ -87,8 +89,8 @@
};
24D8286F09A914000093AEF8 /* ConsoleX2ChannelProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1101, 19368}}";
sepNavSelRange = "{22669, 0}";
sepNavIntBoundsRect = "{{0, 0}, {554, 19332}}";
sepNavSelRange = "{22675, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{3, 46}, {895, 831}}";
};
@ -117,25 +119,39 @@
vrLen = 0;
vrLoc = 0;
};
8B5AB6392EEA332A00A3F512 /* PBXTextBookmark */ = {
8BAE90962F01EBB700A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* ConsoleX2ChannelProc.cpp */;
name = "ConsoleX2ChannelProc.cpp: 495";
rLen = 0;
rLoc = 22669;
rLoc = 22675;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8BC5BE2E2EB165A900031C01 /* PBXTextBookmark */ = {
8BAE90ED2F01F3A000A311FE /* PBXBookmark */ = {
isa = PBXBookmark;
fRef = 24D8286F09A914000093AEF8 /* ConsoleX2ChannelProc.cpp */;
};
8BAE90F82F01F3BC00A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* ConsoleX2ChannelProc.cpp */;
name = "ConsoleX2ChannelProc.cpp: 492";
name = "ConsoleX2ChannelProc.cpp: 495";
rLen = 0;
rLoc = 22669;
rLoc = 22675;
rType = 0;
vrLen = 98;
vrLoc = 22602;
vrLen = 0;
vrLoc = 0;
};
8BAE90FE2F01F3BC00A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* ConsoleX2ChannelProc.cpp */;
name = "ConsoleX2ChannelProc.cpp: 495";
rLen = 0;
rLoc = 22675;
rType = 0;
vrLen = 1933;
vrLoc = 19554;
};
8D01CCC60486CAD60068D4B7 /* ConsoleX2Channel */ = {
activeExec = 0;

View file

@ -222,7 +222,48 @@
</dict>
</array>
<key>OpenEditors</key>
<array/>
<array>
<dict>
<key>Content</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8BAE90FC2F01F3BC00A311FE</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2ChannelProc.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>8BAE90FD2F01F3BC00A311FE</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2ChannelProc.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8BAE90FE2F01F3BC00A311FE</string>
<key>history</key>
<array>
<string>8BAE90ED2F01F3A000A311FE</string>
</array>
</dict>
<key>SplitCount</key>
<string>1</string>
</dict>
<key>StatusBarVisibility</key>
<true/>
</dict>
<key>Geometry</key>
<dict>
<key>Frame</key>
<string>{{0, 20}, {895, 734}}</string>
<key>PBXModuleWindowStatusBarHidden2</key>
<false/>
<key>RubberWindowFrame</key>
<string>3 102 895 775 0 0 1440 878 </string>
</dict>
</dict>
</array>
<key>PerspectiveWidths</key>
<array>
<integer>810</integer>
@ -323,7 +364,7 @@
<real>185</real>
</array>
<key>RubberWindowFrame</key>
<string>14 340 810 487 0 0 1440 878 </string>
<string>518 235 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -351,11 +392,11 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B5AB6392EEA332A00A3F512</string>
<string>8BAE90F82F01F3BC00A311FE</string>
<key>history</key>
<array>
<string>8B5AB6382EEA332A00A3F512</string>
<string>8BC5BE2E2EB165A900031C01</string>
<string>8BAE90962F01EBB700A311FE</string>
</array>
</dict>
<key>SplitCount</key>
@ -369,18 +410,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 32}}</string>
<string>{{0, 0}, {603, 0}}</string>
<key>RubberWindowFrame</key>
<string>14 340 810 487 0 0 1440 878 </string>
<string>518 235 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>32pt</string>
<string>0pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>409pt</string>
<string>441pt</string>
<key>Tabs</key>
<array>
<dict>
@ -394,9 +435,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 382}}</string>
<string>{{10, 27}, {603, 414}}</string>
<key>RubberWindowFrame</key>
<string>14 340 810 487 0 0 1440 878 </string>
<string>518 235 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -450,7 +491,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 363}}</string>
<string>{{10, 27}, {603, 401}}</string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -478,11 +519,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B5AB63A2EEA332A00A3F512</string>
<string>8BAE90F92F01F3BC00A311FE</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B5AB63B2EEA332A00A3F512</string>
<string>8BAE90FA2F01F3BC00A311FE</string>
<string>8B0237581D42B1C400E1E8C8</string>
<string>8B5AB63C2EEA332A00A3F512</string>
<string>8BAE90FB2F01F3BC00A311FE</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -635,7 +676,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>787100458.98253703</real>
<real>788657084.68492305</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -652,11 +693,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B5AB63D2EEA332A00A3F512</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/ConsoleX2Channel/ConsoleX2Channel.xcodeproj</string>
<string>8BAE90FC2F01F3BC00A311FE</string>
</array>
<key>WindowString</key>
<string>14 340 810 487 0 0 1440 878 </string>
<string>518 235 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -23,7 +23,7 @@ void ConsoleX2Channel::processReplacing(float **inputs, float **outputs, VstInt3
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -550,7 +550,7 @@ void ConsoleX2Channel::processDoubleReplacing(double **inputs, double **outputs,
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;

View file

@ -49,13 +49,14 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 787095373;
PBXWorkspaceStateSaveDate = 787095373;
PBXPerProjectTemplateStateSaveDate = 788656896;
PBXWorkspaceStateSaveDate = 788656896;
};
perUserProjectItems = {
8B5AB6782EEA346C00A3F512 /* PBXTextBookmark */ = 8B5AB6782EEA346C00A3F512 /* PBXTextBookmark */;
8B5AB67D2EEA34FC00A3F512 /* PBXTextBookmark */ = 8B5AB67D2EEA34FC00A3F512 /* PBXTextBookmark */;
8B692BB82EB4DCCF00F51381 /* PBXTextBookmark */ = 8B692BB82EB4DCCF00F51381 /* PBXTextBookmark */;
8BAE90B92F01EC1300A311FE /* PBXTextBookmark */ = 8BAE90B92F01EC1300A311FE /* PBXTextBookmark */;
8BAE90BA2F01EC1300A311FE /* PBXTextBookmark */ = 8BAE90BA2F01EC1300A311FE /* PBXTextBookmark */;
8BAE90BC2F01EC1300A311FE /* PBXTextBookmark */ = 8BAE90BC2F01EC1300A311FE /* PBXTextBookmark */;
8BAE90DA2F01F39700A311FE /* PBXTextBookmark */ = 8BAE90DA2F01F39700A311FE /* PBXTextBookmark */;
};
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
userBuildSettings = {
@ -63,17 +64,17 @@
};
2407DEB6089929BA00EB68BF /* ConsoleX2Pre.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {966, 6318}}";
sepNavSelRange = "{1207, 0}";
sepNavVisRange = "{684, 865}";
sepNavIntBoundsRect = "{{0, 0}, {633, 6012}}";
sepNavSelRange = "{2267, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{545, 47}, {895, 831}}";
};
};
245463B80991757100464AD3 /* ConsoleX2Pre.h */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {554, 3636}}";
sepNavIntBoundsRect = "{{0, 0}, {554, 3564}}";
sepNavSelRange = "{2892, 0}";
sepNavVisRange = "{2948, 24}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{669, 38}, {768, 840}}";
};
};
@ -87,9 +88,9 @@
};
24D8286F09A914000093AEF8 /* ConsoleX2PreProc.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1101, 19224}}";
sepNavSelRange = "{20840, 0}";
sepNavVisRange = "{19760, 2092}";
sepNavIntBoundsRect = "{{0, 0}, {912, 19332}}";
sepNavSelRange = "{20846, 0}";
sepNavVisRange = "{0, 0}";
sepNavWindowFrame = "{{524, 47}, {895, 831}}";
};
};
@ -107,35 +108,45 @@
isa = PBXCodeSenseManager;
indexTemplatePath = "";
};
8B5AB6782EEA346C00A3F512 /* PBXTextBookmark */ = {
8BAE90B92F01EC1300A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* ConsoleX2Pre.h */;
name = "ConsoleX2Pre.h: 85";
rLen = 0;
rLoc = 2892;
rType = 0;
vrLen = 24;
vrLoc = 2948;
vrLen = 0;
vrLoc = 0;
};
8B5AB67D2EEA34FC00A3F512 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 245463B80991757100464AD3 /* ConsoleX2Pre.h */;
name = "ConsoleX2Pre.h: 85";
rLen = 0;
rLoc = 2892;
rType = 0;
vrLen = 24;
vrLoc = 2948;
};
8B692BB82EB4DCCF00F51381 /* PBXTextBookmark */ = {
8BAE90BA2F01EC1300A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 2407DEB6089929BA00EB68BF /* ConsoleX2Pre.cpp */;
name = "ConsoleX2Pre.cpp: 88";
name = "ConsoleX2Pre.cpp: 99";
rLen = 0;
rLoc = 2267;
rType = 0;
vrLen = 51;
vrLoc = 779;
vrLen = 0;
vrLoc = 0;
};
8BAE90BC2F01EC1300A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* ConsoleX2PreProc.cpp */;
name = "ConsoleX2PreProc.cpp: 457";
rLen = 0;
rLoc = 20846;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8BAE90DA2F01F39700A311FE /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 24D8286F09A914000093AEF8 /* ConsoleX2PreProc.cpp */;
name = "ConsoleX2PreProc.cpp: 457";
rLen = 0;
rLoc = 20846;
rType = 0;
vrLen = 0;
vrLoc = 0;
};
8D01CCC60486CAD60068D4B7 /* ConsoleX2Pre */ = {
activeExec = 0;

View file

@ -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>632 298 810 487 0 0 1440 878 </string>
<string>630 298 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@ -337,7 +339,7 @@
<key>PBXProjectModuleGUID</key>
<string>8B0237581D42B1C400E1E8C8</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2Pre.h</string>
<string>ConsoleX2PreProc.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
@ -345,15 +347,16 @@
<key>PBXProjectModuleGUID</key>
<string>8B0237591D42B1C400E1E8C8</string>
<key>PBXProjectModuleLabel</key>
<string>ConsoleX2Pre.h</string>
<string>ConsoleX2PreProc.cpp</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>8B5AB67D2EEA34FC00A3F512</string>
<string>8BAE90DA2F01F39700A311FE</string>
<key>history</key>
<array>
<string>8B692BB82EB4DCCF00F51381</string>
<string>8B5AB6782EEA346C00A3F512</string>
<string>8BAE90B92F01EC1300A311FE</string>
<string>8BAE90BA2F01EC1300A311FE</string>
<string>8BAE90BC2F01EC1300A311FE</string>
</array>
</dict>
<key>SplitCount</key>
@ -367,18 +370,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {603, 51}}</string>
<string>{{0, 0}, {603, 13}}</string>
<key>RubberWindowFrame</key>
<string>632 298 810 487 0 0 1440 878 </string>
<string>630 298 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>51pt</string>
<string>13pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>390pt</string>
<string>428pt</string>
<key>Tabs</key>
<array>
<dict>
@ -392,7 +395,9 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 363}}</string>
<string>{{10, 27}, {603, 401}}</string>
<key>RubberWindowFrame</key>
<string>630 298 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
@ -447,8 +452,6 @@
<dict>
<key>Frame</key>
<string>{{10, 27}, {603, 363}}</string>
<key>RubberWindowFrame</key>
<string>632 298 810 487 0 0 1440 878 </string>
</dict>
<key>Module</key>
<string>PBXBuildResultsModule</string>
@ -476,11 +479,11 @@
</array>
<key>TableOfContents</key>
<array>
<string>8B5AB6062EEA1F5100A3F512</string>
<string>8BAE90DB2F01F39700A311FE</string>
<string>1CA23ED40692098700951B8B</string>
<string>8B5AB6072EEA1F5100A3F512</string>
<string>8BAE90DC2F01F39700A311FE</string>
<string>8B0237581D42B1C400E1E8C8</string>
<string>8B5AB6082EEA1F5100A3F512</string>
<string>8BAE90DD2F01F39700A311FE</string>
<string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string>
@ -633,7 +636,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
<real>787100924.42353201</real>
<real>788657047.75144994</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@ -650,11 +653,11 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>8B5AB67E2EEA34FC00A3F512</string>
<string>8BAE90DE2F01F39700A311FE</string>
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/ConsoleX2Pre/ConsoleX2Pre.xcodeproj</string>
</array>
<key>WindowString</key>
<string>632 298 810 487 0 0 1440 878 </string>
<string>630 298 810 487 0 0 1440 878 </string>
<key>WindowToolsV3</key>
<array>
<dict>

View file

@ -23,7 +23,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -459,7 +459,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));
@ -555,7 +555,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -991,7 +991,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));

View file

@ -23,7 +23,7 @@ void ConsoleX2Channel::processReplacing(float **inputs, float **outputs, VstInt3
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -550,7 +550,7 @@ void ConsoleX2Channel::processDoubleReplacing(double **inputs, double **outputs,
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;

View file

@ -23,7 +23,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -459,7 +459,7 @@ void ConsoleX2Pre::processReplacing(float **inputs, float **outputs, VstInt32 sa
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));
@ -555,7 +555,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
double moreTapeHack = (MOR*2.0)+1.0;
bool tapehackOff = (MOR == 0.0);
switch ((int)TRM){
switch ((int)(TRM*4.0)){
case 0: moreTapeHack *= 0.5; break;
case 1: break;
case 2: moreTapeHack *= 2.0; break;
@ -991,7 +991,7 @@ void ConsoleX2Pre::processDoubleReplacing(double **inputs, double **outputs, Vst
inputSampleL *= 1.0-(fmin(CBAL*bezThresh,1.0));
inputSampleR *= 1.0-(fmin(CBAR*bezThresh,1.0));
}
//Dynamics3, but with crossfade over EQ or HipCrush
//Dynamics3
const double temp = (double)sampleFrames/inFramesToProcess;
const double hFreq = (hFreqA*temp)+(hFreqB*(1.0-temp));

View file

@ -398,6 +398,7 @@ SubTight uses a variation on the Creature algorithm to tighten sub-lows.[coll=La
Surge is a compressor for accentuating beats and pulses.[coll=]
SurgeTide is a surge and flow dynamics plugin.[coll=Latest]
Sweeten is where you can find super-clean second harmonic.[coll=Basic,Recommended,Latest]
SweetWide is a strange grungy stereo widener.[coll=Latest]
Swell is Dial-an-attack, like sidechaining.[coll=Latest]
TakeCare is a lush chorus ensemble universe.[coll=Recommended,Latest]
Tape is simplified, all-purpose tape mojo: my personal jam.[coll=]