-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
1,847 additions
and
314 deletions.
There are no files selected for viewing
Submodule airwindows
updated
165 files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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! | ||
|
||
|
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Oops, something went wrong.