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 Oct 15, 2023
1 parent 31b9944 commit f3f23cf
Show file tree
Hide file tree
Showing 10 changed files with 1,847 additions and 314 deletions.
2 changes: 1 addition & 1 deletion libs/airwindows
Submodule airwindows updated 165 files
13 changes: 13 additions & 0 deletions res/awpdoc/Sinew.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Sinew combines sines and slew clipping for a tape bias effect!

Looks like I'm working on three major fronts at the moment, and here's a key advance on at least one of them :)

Sinew is the answer to the question, 'what if slew clipping, but it was more restrictive the closer you got to what would be regular clipping?'

I realize the answer is typically going to be 'slew what now?' but Airwindows fans are long aware of the strange pleasures of slew clipping. What you don't know is, the real answer to that question is 'then you get something that acts like analog tape's inability to capture super loud high frequencies'… but without the actual tape saturation!

This might have all kinds of uses: I know it's going to find its way into a ToTape update. For now, you can have the raw version, the one where (like other Slew-oriented plugins) you can set it to extreme values and screw up the sound in interesting ways. Sinew might be just the thing for making heavy guitars louder, or adding guts to drums, but you can try it on whatever you like.

It'll hang on to brightness for quite a long time, until suddenly it's really stepping on the sound. What's happening there is, you can't hear it doing more subtle work, so you only hear it when it's turned up too far. Listen to the character of things and you might hear it kicking in without apparently cutting back brightness at all! This is the farthest thing from a simple filter. Good luck experimenting with Sinew!


630 changes: 317 additions & 313 deletions src/ModuleAdd.h

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions src/autogen_airwin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,10 @@ set(AIRWIN_SOURCES
src/autogen_airwin/Console8SubInProc.cpp
src/autogen_airwin/Console8SubOut.cpp
src/autogen_airwin/Console8SubOutProc.cpp
src/autogen_airwin/ConsoleMCBuss.cpp
src/autogen_airwin/ConsoleMCBussProc.cpp
src/autogen_airwin/ConsoleMCChannel.cpp
src/autogen_airwin/ConsoleMCChannelProc.cpp
src/autogen_airwin/Creature.cpp
src/autogen_airwin/CreatureProc.cpp
src/autogen_airwin/CrickBass.cpp
Expand Down
117 changes: 117 additions & 0 deletions src/autogen_airwin/ConsoleMCBuss.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/* ========================================
* ConsoleMCBuss - ConsoleMCBuss.h
* Copyright (c) airwindows, Airwindows uses the MIT license
* ======================================== */

#ifndef __ConsoleMCBuss_H
#include "ConsoleMCBuss.h"
#endif
namespace airwin2rack::ConsoleMCBuss {

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

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

for (int x = 0; x < gslew_total; x++) gslew[x] = 0.0;
subAL = subAR = subBL = subBR = subCL = subCR = subDL = subDR = 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
}

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

float ConsoleMCBuss::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 ConsoleMCBuss::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 ConsoleMCBuss::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 ConsoleMCBuss::getParameterLabel(VstInt32 index, char *text) {
switch (index) {
case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break;
default: break; // unknown parameter, shouldn't happen!
}
}

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

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

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

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

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

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

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

#ifndef __ConsoleMCBuss_ConsoleMCBuss_H
#define __ConsoleMCBuss_ConsoleMCBuss_H

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

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

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

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

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

enum {
prevSampL1,
prevSampR1,
invSampL1,
invSampR1,
threshold1,
prevSampL2,
prevSampR2,
invSampL2,
invSampR2,
threshold2,
prevSampL3,
prevSampR3,
invSampL3,
invSampR3,
threshold3,
prevSampL4,
prevSampR4,
invSampL4,
invSampR4,
threshold4,
prevSampL5,
prevSampR5,
invSampL5,
invSampR5,
threshold5,
prevSampL6,
prevSampR6,
invSampL6,
invSampR6,
threshold6,
prevSampL7,
prevSampR7,
invSampL7,
invSampR7,
threshold7,
prevSampL8,
prevSampR8,
invSampL8,
invSampR8,
threshold8,
prevSampL9,
prevSampR9,
invSampL9,
invSampR9,
threshold9,
prevSampL10,
prevSampR10,
invSampL10,
invSampR10,
threshold10,
gslew_total
}; //fixed frequency pear filter for ultrasonics, stereo
double gslew[gslew_total]; //probably worth just using a number here

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

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


uint32_t fpdL;
uint32_t fpdR;
//default stuff

float A;
};

#endif
} // end namespace
Loading

0 comments on commit f3f23cf

Please sign in to comment.