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 Dec 17, 2023
1 parent 1f02bb3 commit 8c4b6e2
Show file tree
Hide file tree
Showing 13 changed files with 1,708 additions and 2 deletions.
2 changes: 1 addition & 1 deletion libs/airwindows
Submodule airwindows updated 278 files
19 changes: 19 additions & 0 deletions res/awpdoc/ZOutputStage.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# ZOutputStage is the output clipping from the Emu e6400 style Z filters.

So I didn't get asked for this, exactly.

I got asked for the exciter setting out of the Emu e6400 Ultra. And this isn't it.

But I did have an exciter (and so have you, as it's in the plugin collection.) I'm sure it's weirder and twitchier than the Emu one, but it does exist. It just won't sound anything like that sampler, because the sampler has a lot of hardware on the analog outs, as well as being probably a totally different algorithm than mine, one that I have no idea how it's done.

Wait a second.

The reason I got asked for this was, drum and bass guys in the UK wanted to add some insane grind and energy, to basically synth waves. And I don't have the algo for that… but my exciter is nothing if not insane, and I did an output stage on the Z filters. That would apply exactly the same to an exciter, or anything else. I'd just do it as a simple distortion, except that rather than being a normal distortion it'd use the special filtering used in the Z filters to get that 'frizz' on the edges of clipped sounds that I clearly saw in the recordings of the real e6400. If it did that on distorting filters, it would do the same on an exciter, or anything.

And so I did :)

This goes after… well, anything. Whatever you like. Turn it up past 0.1 to distort, just like the Z filters. Turn the output way down because it's really hot. Apply to whatever digital mayhem you can wreak, and it should act a little more like it's coming off that sampler.

See ya next week :)


8 changes: 7 additions & 1 deletion src/ModuleAdd.h
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ int Console8SubHype_unused = AirwinRegistry::registerAirwindow({"Console8SubHype
int Console8SubIn_unused = AirwinRegistry::registerAirwindow({"Console8SubIn", "Consoles", 89, "Console8SubIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8SubIn::kNumParameters, []() { return std::make_unique<airwin2rack::Console8SubIn::Console8SubIn>(0); }});
#include "autogen_airwin/Console8SubOut.h"
int Console8SubOut_unused = AirwinRegistry::registerAirwindow({"Console8SubOut", "Consoles", 90, "Console8SubOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8SubOut::kNumParameters, []() { return std::make_unique<airwin2rack::Console8SubOut::Console8SubOut>(0); }});
#include "autogen_airwin/ConsoleLABuss.h"
int ConsoleLABuss_unused = AirwinRegistry::registerAirwindow({"ConsoleLABuss", "Unclassified", -1, "", airwin2rack::ConsoleLABuss::kNumParameters, []() { return std::make_unique<airwin2rack::ConsoleLABuss::ConsoleLABuss>(0); }});
#include "autogen_airwin/ConsoleLAChannel.h"
int ConsoleLAChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleLAChannel", "Unclassified", -1, "", airwin2rack::ConsoleLAChannel::kNumParameters, []() { return std::make_unique<airwin2rack::ConsoleLAChannel::ConsoleLAChannel>(0); }});
#include "autogen_airwin/ConsoleMCBuss.h"
int ConsoleMCBuss_unused = AirwinRegistry::registerAirwindow({"ConsoleMCBuss", "Consoles", 114, "ConsoleMCBuss is the initial, bright take on the MCI console.", airwin2rack::ConsoleMCBuss::kNumParameters, []() { return std::make_unique<airwin2rack::ConsoleMCBuss::ConsoleMCBuss>(0); }});
#include "autogen_airwin/ConsoleMCChannel.h"
Expand Down Expand Up @@ -450,6 +454,8 @@ int NotJustAnotherDither_unused = AirwinRegistry::registerAirwindow({"NotJustAno
int OneCornerClip_unused = AirwinRegistry::registerAirwindow({"OneCornerClip", "Clipping", 74, "OneCornerClip is an ultimate full-bandwidth clipper.", airwin2rack::OneCornerClip::kNumParameters, []() { return std::make_unique<airwin2rack::OneCornerClip::OneCornerClip>(0); }});
#include "autogen_airwin/OrbitKick.h"
int OrbitKick_unused = AirwinRegistry::registerAirwindow({"OrbitKick", "Bass", 35, "OrbitKick is a bass generator and kick drum reinforcer.", airwin2rack::OrbitKick::kNumParameters, []() { return std::make_unique<airwin2rack::OrbitKick::OrbitKick>(0); }});
#include "autogen_airwin/Overheads.h"
int Overheads_unused = AirwinRegistry::registerAirwindow({"Overheads", "Unclassified", -1, "", airwin2rack::Overheads::kNumParameters, []() { return std::make_unique<airwin2rack::Overheads::Overheads>(0); }});
#include "autogen_airwin/PDBuss.h"
int PDBuss_unused = AirwinRegistry::registerAirwindow({"PDBuss", "Consoles", 105, "PDBuss is Console5 and PurestDrive, sittin’ in a tree… (i.e. both at once, on channels and buss)", airwin2rack::PDBuss::kNumParameters, []() { return std::make_unique<airwin2rack::PDBuss::PDBuss>(0); }});
#include "autogen_airwin/PDChannel.h"
Expand Down Expand Up @@ -729,7 +735,7 @@ int ZNotch_unused = AirwinRegistry::registerAirwindow({"ZNotch", "XYZ Filters",
#include "autogen_airwin/ZNotch2.h"
int ZNotch2_unused = AirwinRegistry::registerAirwindow({"ZNotch2", "XYZ Filters", 353, "ZNotch2 acts more like the Emu e6400 Ultra phaser in motion, with control smoothing.", airwin2rack::ZNotch2::kNumParameters, []() { return std::make_unique<airwin2rack::ZNotch2::ZNotch2>(0); }});
#include "autogen_airwin/ZOutputStage.h"
int ZOutputStage_unused = AirwinRegistry::registerAirwindow({"ZOutputStage", "Unclassified", -1, "", airwin2rack::ZOutputStage::kNumParameters, []() { return std::make_unique<airwin2rack::ZOutputStage::ZOutputStage>(0); }});
int ZOutputStage_unused = AirwinRegistry::registerAirwindow({"ZOutputStage", "Unclassified", -1, "ZOutputStage is the output clipping from the Emu e6400 style Z filters.", airwin2rack::ZOutputStage::kNumParameters, []() { return std::make_unique<airwin2rack::ZOutputStage::ZOutputStage>(0); }});
#include "autogen_airwin/ZRegion.h"
int ZRegion_unused = AirwinRegistry::registerAirwindow({"ZRegion", "XYZ Filters", 359, "ZRegion is an Emu e6400 style Airwindows Region filter.", airwin2rack::ZRegion::kNumParameters, []() { return std::make_unique<airwin2rack::ZRegion::ZRegion>(0); }});
#include "autogen_airwin/ZRegion2.h"
Expand Down
6 changes: 6 additions & 0 deletions src/autogen_airwin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ set(AIRWIN_SOURCES
src/autogen_airwin/Console8SubInProc.cpp
src/autogen_airwin/Console8SubOut.cpp
src/autogen_airwin/Console8SubOutProc.cpp
src/autogen_airwin/ConsoleLABuss.cpp
src/autogen_airwin/ConsoleLABussProc.cpp
src/autogen_airwin/ConsoleLAChannel.cpp
src/autogen_airwin/ConsoleLAChannelProc.cpp
src/autogen_airwin/ConsoleMCBuss.cpp
src/autogen_airwin/ConsoleMCBussProc.cpp
src/autogen_airwin/ConsoleMCChannel.cpp
Expand Down Expand Up @@ -451,6 +455,8 @@ set(AIRWIN_SOURCES
src/autogen_airwin/OneCornerClipProc.cpp
src/autogen_airwin/OrbitKick.cpp
src/autogen_airwin/OrbitKickProc.cpp
src/autogen_airwin/Overheads.cpp
src/autogen_airwin/OverheadsProc.cpp
src/autogen_airwin/PDBuss.cpp
src/autogen_airwin/PDBussProc.cpp
src/autogen_airwin/PDChannel.cpp
Expand Down
117 changes: 117 additions & 0 deletions src/autogen_airwin/ConsoleLABuss.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/* ========================================
* ConsoleLABuss - ConsoleLABuss.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */

#ifndef __ConsoleLABuss_H
#include "ConsoleLABuss.h"
#endif
namespace airwin2rack::ConsoleLABuss {

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

ConsoleLABuss::ConsoleLABuss(audioMasterCallback audioMaster) :
AudioEffectX(audioMaster, kNumPrograms, kNumParameters)
{
A = 1.0;

lastSinewL = lastSinewR = 0.0;
subAL = subAR = subBL = subBR = subCL = subCR = 0.0;
gainA = gainB = 1.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
}

ConsoleLABuss::~ConsoleLABuss() {}
VstInt32 ConsoleLABuss::getVendorVersion () {return 1000;}
void ConsoleLABuss::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);}
void ConsoleLABuss::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 ConsoleLABuss::setParameter(VstInt32 index, float value) {
switch (index) {
case kParamA: A = value; break;
default: break; // unknown parameter, shouldn't happen!
}
}

float ConsoleLABuss::getParameter(VstInt32 index) {
switch (index) {
case kParamA: return A; 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 ConsoleLABuss::getParameterName(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "Master", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
} //this is our labels for displaying in the VST host
}

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

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

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

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

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

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

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

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

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

#ifndef __ConsoleLABuss_ConsoleLABuss_H
#define __ConsoleLABuss_ConsoleLABuss_H

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

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

namespace airwin2rack::ConsoleLABuss {
enum {
kParamA = 0,
kNumParameters = 1
}; //

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

class ConsoleLABuss :
public AudioEffectX
{
public:
ConsoleLABuss(audioMasterCallback audioMaster);
~ConsoleLABuss();
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;

uint32_t fpdL;
uint32_t fpdR;
//default stuff

double lastSinewL;
double lastSinewR;

double subAL;
double subAR;
double subBL;
double subBR;
double subCL;
double subCR;

double gainA;
double gainB; //smoothed master fader for channel, from Z2 series filter code

float A;
};

#endif
} // end namespace
Loading

0 comments on commit 8c4b6e2

Please sign in to comment.