Skip to content

Commit

Permalink
Update to Latest Airwin
Browse files Browse the repository at this point in the history
  • Loading branch information
baconpaul committed Jul 22, 2024
1 parent 096e0a7 commit 56d6b6d
Show file tree
Hide file tree
Showing 8 changed files with 546 additions and 153 deletions.
2 changes: 1 addition & 1 deletion libs/airwindows
Submodule airwindows updated 82 files
+17 −2 Airwindopedia.txt
+1 −0 plugins/LinuxVST/CMakeLists.txt
+144 −0 plugins/LinuxVST/src/Flutter2/Flutter2.cpp
+75 −0 plugins/LinuxVST/src/Flutter2/Flutter2.h
+154 −0 plugins/LinuxVST/src/Flutter2/Flutter2Proc.cpp
+ plugins/MacAU/Flutter2/English.lproj/InfoPlist.strings
+235 −0 plugins/MacAU/Flutter2/Flutter2.cpp
+1 −0 plugins/MacAU/Flutter2/Flutter2.exp
+145 −0 plugins/MacAU/Flutter2/Flutter2.h
+61 −0 plugins/MacAU/Flutter2/Flutter2.r
+1,358 −0 plugins/MacAU/Flutter2/Flutter2.xcodeproj/christopherjohnson.mode1v3
+128 −0 plugins/MacAU/Flutter2/Flutter2.xcodeproj/christopherjohnson.pbxuser
+1,505 −0 plugins/MacAU/Flutter2/Flutter2.xcodeproj/christopherjohnson.perspectivev3
+490 −0 plugins/MacAU/Flutter2/Flutter2.xcodeproj/project.pbxproj
+58 −0 plugins/MacAU/Flutter2/Flutter2Version.h
+28 −0 plugins/MacAU/Flutter2/Info.plist
+16 −0 plugins/MacAU/Flutter2/version.plist
+235 −0 plugins/MacSignedAU/Flutter2/Flutter2.cpp
+2 −0 plugins/MacSignedAU/Flutter2/Flutter2.exp
+145 −0 plugins/MacSignedAU/Flutter2/Flutter2.h
+61 −0 plugins/MacSignedAU/Flutter2/Flutter2.r
+1,358 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/christopherjohnson.mode1v3
+128 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/christopherjohnson.pbxuser
+1,505 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/christopherjohnson.perspectivev3
+965 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/project.pbxproj
+7 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+8 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+ ...ter2.xcodeproj/project.xcworkspace/xcuserdata/christopherjohnson.xcuserdatad/UserInterfaceState.xcuserstate
+67 −0 plugins/MacSignedAU/Flutter2/Flutter2.xcodeproj/xcshareddata/xcschemes/Flutter2.xcscheme
+22 −0 ...AU/Flutter2/Flutter2.xcodeproj/xcuserdata/christopherjohnson.xcuserdatad/xcschemes/xcschememanagement.plist
+58 −0 plugins/MacSignedAU/Flutter2/Flutter2Version.h
+47 −0 plugins/MacSignedAU/Flutter2/Info.plist
+ plugins/MacSignedAU/Flutter2/en.lproj/InfoPlist.strings
+16 −0 plugins/MacSignedAU/Flutter2/version.plist
+108 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/christopherjohnson.pbxuser
+1,502 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/christopherjohnson.perspectivev3
+462 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/project.pbxproj
+7 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+8 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+ ...ter2.xcodeproj/project.xcworkspace/xcuserdata/christopherjohnson.xcuserdatad/UserInterfaceState.xcuserstate
+ ...tter2/Flutter2.xcodeproj/project.xcworkspace/xcuserdata/spiadmin.xcuserdatad/UserInterfaceState.xcuserstate
+1,372 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/spiadmin.mode1v3
+143 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/spiadmin.pbxuser
+67 −0 plugins/MacSignedVST/Flutter2/Flutter2.xcodeproj/xcshareddata/xcschemes/Flutter2.xcscheme
+22 −0 ...ST/Flutter2/Flutter2.xcodeproj/xcuserdata/christopherjohnson.xcuserdatad/xcschemes/xcschememanagement.plist
+22 −0 ...MacSignedVST/Flutter2/Flutter2.xcodeproj/xcuserdata/spiadmin.xcuserdatad/xcschemes/xcschememanagement.plist
+57 −0 ...s/MacSignedVST/Flutter2/Flutter2.xcodeproj/xcuserdata/spiadmin.xcuserdatad/xcschemes/«PROJECTNAME».xcscheme
+24 −0 plugins/MacSignedVST/Flutter2/mac/Info.plist
+1 −0 plugins/MacSignedVST/Flutter2/mac/PkgInfo
+17 −0 plugins/MacSignedVST/Flutter2/mac/xcode_vst_prefix.h
+144 −0 plugins/MacSignedVST/Flutter2/source/Flutter2.cpp
+75 −0 plugins/MacSignedVST/Flutter2/source/Flutter2.h
+154 −0 plugins/MacSignedVST/Flutter2/source/Flutter2Proc.cpp
+108 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/christopherjohnson.pbxuser
+1,502 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/christopherjohnson.perspectivev3
+2,201 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/project.pbxproj
+7 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+ ...ter2.xcodeproj/project.xcworkspace/xcuserdata/christopherjohnson.xcuserdatad/UserInterfaceState.xcuserstate
+ ...tter2/Flutter2.xcodeproj/project.xcworkspace/xcuserdata/spiadmin.xcuserdatad/UserInterfaceState.xcuserstate
+1,372 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/spiadmin.mode1v3
+143 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/spiadmin.pbxuser
+80 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/xcuserdata/christopherjohnson.xcuserdatad/xcschemes/Gain.xcscheme
+22 −0 ...ST/Flutter2/Flutter2.xcodeproj/xcuserdata/christopherjohnson.xcuserdatad/xcschemes/xcschememanagement.plist
+22 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/xcuserdata/spiadmin.xcuserdatad/xcschemes/xcschememanagement.plist
+57 −0 plugins/MacVST/Flutter2/Flutter2.xcodeproj/xcuserdata/spiadmin.xcuserdatad/xcschemes/«PROJECTNAME».xcscheme
+24 −0 plugins/MacVST/Flutter2/mac/Info.plist
+1 −0 plugins/MacVST/Flutter2/mac/PkgInfo
+17 −0 plugins/MacVST/Flutter2/mac/xcode_vst_prefix.h
+144 −0 plugins/MacVST/Flutter2/source/Flutter2.cpp
+75 −0 plugins/MacVST/Flutter2/source/Flutter2.h
+154 −0 plugins/MacVST/Flutter2/source/Flutter2Proc.cpp
+ plugins/WinVST/Flutter2/.vs/Console4Channel64/v14/.suo
+ plugins/WinVST/Flutter2/.vs/VSTProject/v14/.suo
+144 −0 plugins/WinVST/Flutter2/Flutter2.cpp
+75 −0 plugins/WinVST/Flutter2/Flutter2.h
+154 −0 plugins/WinVST/Flutter2/Flutter2Proc.cpp
+28 −0 plugins/WinVST/Flutter2/VSTProject.sln
+183 −0 plugins/WinVST/Flutter2/VSTProject.vcxproj
+48 −0 plugins/WinVST/Flutter2/VSTProject.vcxproj.filters
+19 −0 plugins/WinVST/Flutter2/VSTProject.vcxproj.user
+3 −0 plugins/WinVST/Flutter2/vstplug.def
+2 −1 what.txt
3 changes: 2 additions & 1 deletion res/awpdoc/Flutter.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Flutter is the most recent Airwindows flutter, standalone.
# Flutter is the flutter from ToTape6, standalone.

This is by request. Sometimes you want stuff to go a little unsteady and wobbly, but you don't want a full-on tape emulation with, like, dubly and everything. (you don't do heavy metal in dubly, you know.) And so, here is Flutter, standalone!

Expand All @@ -8,4 +8,5 @@ In practice, you get a flutter/warble that stays pretty subtle right up to when

Sometimes it's handy to be able to take something ultra-pure, like a bell or electric piano, and destabilize it without any tonal adjustment at all. Retain the chime but add that bit of drift. I hope you like Flutter.



15 changes: 15 additions & 0 deletions res/awpdoc/Flutter2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Flutter2 is the flutter from ToTape7, standalone.

It's time for a new ToTape (actively being worked on, and yes you're still getting more reverbs and ConsoleX and all that) and it turns out that when I went back in to revise the tape flutter algorithm, live on stream, the work went so well that I COULD NOT WAIT. I was basically looking to address how, in the original Flutter, it slows as well as becoming gentler when you turn it down, and I thought that for 2024 ToTape7 it might be worth bringing in extra controls just to give people more power over their flutter effect.

And then when I improved the algorithm and discovered that, cranked up, it does everything from shortwave radio impressions to Cookie Monsterification, that was exciting.

But not as exciting as when I learned that if you crank it way up and make the flutterspeed REALLY slow, you get a heavy guitar doubler. Suddenly, I had a really decent fake hard-panned, still weirdly tight, doubled guitar that sounded fantastic apart from occasionally (and understandably) going mono on me.

Enjoy Flutter2, it's going to be in the new ToTape7 when that's done. It means you have everything from reel-to-reel (less flutter than 0.5 for that), to cassette, to Roland Space Echo, to VHS, to cassette that's been yanked out of the shell and jumped up and down on for a bit and put back and attempted to be played.

Also, here's my tip: rather than track one guitar and try to make it two with Flutter2, have you considered tracking three guitars and trying to make it five? If you do two real doubletracks, and then one 'thickener' to put in the center, and THEN add Flutter2 to that center track and use the dry/wet control, you can very definitely mimic FIVE guitar tracks for the price of three, and if center/flutter2 is slightly quieter it won't stick out that much when Flutter starts to hint at mono occasionally, because there's meant to be a mono track. You can lean on the Flutter2 a bit harder if you want to go superwide.

Oh, which reminds me, there's also a new Srsly coming… but more on that later. Enjoy Flutter2 :)


304 changes: 153 additions & 151 deletions src/ModuleAdd.h

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions src/autogen_airwin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,8 @@ set(AIRWIN_SOURCES
src/autogen_airwin/FloorProc.cpp
src/autogen_airwin/Flutter.cpp
src/autogen_airwin/FlutterProc.cpp
src/autogen_airwin/Flutter2.cpp
src/autogen_airwin/Flutter2Proc.cpp
src/autogen_airwin/Focus.cpp
src/autogen_airwin/FocusProc.cpp
src/autogen_airwin/Fracture.cpp
Expand Down
139 changes: 139 additions & 0 deletions src/autogen_airwin/Flutter2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
/* ========================================
* Flutter2 - Flutter2.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */

#ifndef __Flutter2_H
#include "Flutter2.h"
#endif
#include <cmath>
#include <algorithm>
namespace airwinconsolidated::Flutter2 {

AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new Flutter2(audioMaster);}

Flutter2::Flutter2(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 0.5;
B = 0.5;
C = 1.0;

for (int temp = 0; temp < 1001; temp++) {dL[temp] = 0.0;dR[temp] = 0.0;}
sweepL = M_PI;
sweepR = M_PI;
nextmaxL = 0.5;
nextmaxR = 0.5;

gcount = 0;

fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX;
fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX;
//this is reset: values being initialized only once. Startup values, whatever they are.

_canDo.insert("plugAsChannelInsert"); // plug-in can be used as a channel insert effect.
_canDo.insert("plugAsSend"); // plug-in can be used as a send effect.
_canDo.insert("x2in2out");
setNumInputs(kNumInputs);
setNumOutputs(kNumOutputs);
setUniqueID(kUniqueId);
canProcessReplacing(); // supports output replacing
canDoubleReplacing(); // supports double precision processing
programsAreChunks(true);
vst_strncpy (_programName, "Default", kVstMaxProgNameLen); // default program name
}

Flutter2::~Flutter2() {}
VstInt32 Flutter2::getVendorVersion () {return 1000;}
void Flutter2::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void Flutter2::getProgramName(char *name) {vst_strncpy (name, _programName, kVstMaxProgNameLen);}
//airwindows likes to ignore this stuff. Make your own programs, and make a different plugin rather than
//trying to do versioning and preventing people from using older versions. Maybe they like the old one!

static float pinParameter(float data)
{
if (data < 0.0f) return 0.0f;
if (data > 1.0f) return 1.0f;
return data;
}

void Flutter2::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
case kParamB: B = value; break;
case kParamC: C = value; break;
default: break; // unknown parameter, shouldn't happen!
}
}

float Flutter2::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; break;
case kParamB: return B; break;
case kParamC: return C; break;
default: break; // unknown parameter, shouldn't happen!
} return 0.0; //we only need to update the relevant name, this is simple to manage
}

void Flutter2::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Flutter", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "Speed", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "Dry/Wet", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}

void Flutter2::getParameterDisplay(VstInt32 index, char *text) {
switch (index) {
case kParamA: float2string (A, text, kVstMaxParamStrLen); break;
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
case kParamC: float2string (C, text, kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this displays the values and handles 'popups' where it's discrete choices
}

void Flutter2::getParameterLabel(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break;
case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}

VstInt32 Flutter2::canDo(char *text)
{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know

bool Flutter2::getEffectName(char* name) {
vst_strncpy(name, "Flutter2", kVstMaxProductStrLen); return true;
}

VstPlugCategory Flutter2::getPlugCategory() {return kPlugCategEffect;}

bool Flutter2::getProductString(char* text) {
vst_strncpy (text, "airwindows Flutter2", kVstMaxProductStrLen); return true;
}

bool Flutter2::getVendorString(char* text) {
vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true;
}
bool Flutter2::parameterTextToValue(VstInt32 index, const char *text, float &value) {
switch(index) {
case kParamA: { auto b = string2float(text, value); return b; break; }
case kParamB: { auto b = string2float(text, value); return b; break; }
case kParamC: { auto b = string2float(text, value); return b; break; }

}
return false;
}
bool Flutter2::canConvertParameterTextToValue(VstInt32 index) {
switch(index) {
case kParamA: return true;
case kParamB: return true;
case kParamC: return true;

}
return false;
}
} // end namespace
78 changes: 78 additions & 0 deletions src/autogen_airwin/Flutter2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/* ========================================
* Flutter2 - Flutter2.h
* Created 8/12/11 by SPIAdmin
* Copyright (c) Airwindows, Airwindows uses the MIT license
* ======================================== */

#ifndef __Flutter2_Flutter2_H
#define __Flutter2_Flutter2_H

#ifndef __audioeffect__
#include "../airwin_consolidated_base.h"
#endif

#include <set>
#include <string>
#include <math.h>

namespace airwinconsolidated::Flutter2 {
enum {
kParamA =0,
kParamB =1,
kParamC =2,
kNumParameters = 3
}; //

const int kNumPrograms = 0;
const int kNumInputs = 2;
const int kNumOutputs = 2;
const unsigned long kUniqueId = 'fluu'; //Change this to what the AU identity is!

class Flutter2 :
public AudioEffectX
{
public:
Flutter2(audioMasterCallback audioMaster);
~Flutter2();
virtual bool getEffectName(char* name); // The plug-in name
virtual VstPlugCategory getPlugCategory(); // The general category for the plug-in
virtual bool getProductString(char* text); // This is a unique plug-in string provided by Steinberg
virtual bool getVendorString(char* text); // Vendor info
virtual VstInt32 getVendorVersion(); // Version number
virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames);
virtual void getProgramName(char *name); // read the name from the host
virtual void setProgramName(char *name); // changes the name of the preset displayed in the host
virtual float getParameter(VstInt32 index); // get the parameter value at the specified index
virtual void setParameter(VstInt32 index, float value); // set the parameter at index to value
virtual void getParameterLabel(VstInt32 index, char *text); // label for the parameter (eg dB)
virtual void getParameterName(VstInt32 index, char *text); // name of the parameter
virtual void getParameterDisplay(VstInt32 index, char *text); // text description of the current value
// Added by the perl as inverses
virtual bool parameterTextToValue(VstInt32 index, const char *text, float &value);
virtual bool canConvertParameterTextToValue(VstInt32 index);
virtual VstInt32 canDo(char *text);
private:
char _programName[kVstMaxProgNameLen + 1];
std::set< std::string > _canDo;

float A;
float B;
float C;

double dL[1002];
double dR[1002];
double sweepL;
double sweepR;
double nextmaxL;
double nextmaxR;

int gcount;

uint32_t fpdL;
uint32_t fpdR;
//default stuff
};

#endif
} // end namespace
Loading

0 comments on commit 56d6b6d

Please sign in to comment.