mirror of
https://github.com/airwindows/airwindows.git
synced 2026-05-15 14:16:00 -06:00
SlewSonic
This commit is contained in:
parent
264864c15e
commit
09cdb13d58
27 changed files with 1181 additions and 934 deletions
|
|
@ -15,7 +15,7 @@ Bass: Hermepass, BassKit, DubCenter, DubSub, Floor, Infrasonic, FathomFive
|
|||
|
||||
Biquads: BiquadPlus, Biquad, BiquadDouble, BiquadOneHalf, BiquadTriple, Biquad2
|
||||
|
||||
Brightness: DeBess, Acceleration2, DeEss, Smooth, Slew3, Slew2, Slew, Air2, Air, PurestAir, Acceleration, DeHiss, Hypersonic, HypersonX, Ultrasonic, UltrasonicLite, UltrasonicMed, UltrasonX
|
||||
Brightness: SlewSonic, DeBess, Acceleration2, DeEss, Smooth, Slew3, Slew2, Slew, Air2, Air, PurestAir, Acceleration, DeHiss, Hypersonic, HypersonX, Ultrasonic, UltrasonicLite, UltrasonicMed, UltrasonX
|
||||
|
||||
Clipping: ClipOnly2, ClipSoftly, OneCornerClip, ADClip7, AQuickVoiceClip, ClipOnly
|
||||
|
||||
|
|
@ -2974,6 +2974,20 @@ SubsOnly does the same thing for subsonic bass. It sounds a little like a house
|
|||
|
||||
Lastly, these are calibrated (in SlewOnly quite literally: pink noise will be about the same amplitude with or without it, though the tone will be way different) so that you can switch them in and out, and expect roughly the same loudnesses. It’s okay if SubsOnly is louder for fullbodied bass: with that, it’s not so much about level-matching, it’s about getting your sound (at whatever desired loudness) and then having the bass still make sense through SubsOnly. If you’re madly overloading it, there won’t be groove, just a lot of thunder and noise, at elevated levels. These go on at the end of your master buss, so you can hear what your 2-buss chain did to the sound. Especially if you try and go for ‘commercially loud’ volumes, sanity checking with these tools can be a real silver bullet.
|
||||
|
||||
############ SlewSonic combines SlewOnly with ultrasonic filtering to solo brightness.
|
||||
|
||||
This plugin was a journey! The video isn't even its final form. The idea was to find out whether SlewOnly aliases. Could you filter out ultrasonics and get a smoother SlewOnly?
|
||||
|
||||
The answer is 'kinda', but then things got out of hand…
|
||||
|
||||
SlewSonic lets you stack up as many as three instances of SlewOnly, each with ultrasonic filtering around them to resist aliasing. Except it's not always ultrasonic, because now you can set it from 25k all the way down to 5k. When you do that, you get the smoothest, darkest SlewOnly ever!
|
||||
|
||||
But what even is SlewOnly? It's a monitoring plugin, very simple, that shows only the extreme treble, and balances the levels in a calibrated way to help you mix. SlewOnly is in all versions of Airwindows Monitoring, alongside SubsOnly and PeakOnly. It's there to show you stuff you wouldn't hear off just the regular mix. So if you switch over to SlewOnly, it should still be a mix, still about the same volume, still about the same density.
|
||||
|
||||
The thing is, when you stack those up, the calibrated volume adjustment gets more and more extreme. So mega-boosts can create really LOUD super-treble. And this could be useful highlighting cymbals, whispers… anything where you want to solo those frequencies. The Bright control fades between the direct sound and one, two or three stages of SlewOnly, and the Mute control specifies the highest frequencies you keep, so it could fight aliasing even at lower sample rates.
|
||||
|
||||
I'm imagining this as a tool for dedicated hi-hat tracks, stuff like that. You should be able to get exactly what you want. Hope you like SlewSonic!
|
||||
|
||||
############ Smooth can tame pointy sounds or make drums explode.
|
||||
|
||||
Here’s one of the classic Airwindows secret weapons, up to date and VST and free (yes, Patreon blah blah, you know the drill). It can be subtle or incredibly aggressive, and it’s named Smooth.
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ float SlewSonic::getParameter(VstInt32 index) {
|
|||
|
||||
void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: vst_strncpy (text, "Freq", kVstMaxParamStrLen); break;
|
||||
case kParamA: vst_strncpy (text, "Mute", kVstMaxParamStrLen); break;
|
||||
case kParamB: vst_strncpy (text, "Bright", kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this is our labels for displaying in the VST host
|
||||
|
|
@ -104,7 +104,7 @@ void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
|||
|
||||
void SlewSonic::getParameterDisplay(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: float2string ((A*20.0)+10.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamA: float2string ((A*20.0)+5.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this displays the values and handles 'popups' where it's discrete choices
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
float* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -57,11 +57,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -75,6 +75,12 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -85,11 +91,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -100,11 +106,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -115,20 +121,26 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
@ -162,7 +174,7 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
double* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -204,11 +216,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -222,6 +234,12 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -232,11 +250,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -247,11 +265,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -262,20 +280,26 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
|
|||
|
|
@ -101,8 +101,8 @@ ComponentResult SlewSonic::GetParameterInfo(AudioUnitScope inScope,
|
|||
AUBase::FillInParameterName (outParameterInfo, kParameterOneName, false);
|
||||
outParameterInfo.unit = kAudioUnitParameterUnit_CustomUnit;
|
||||
outParameterInfo.unitName = kParameterOneUnit;
|
||||
outParameterInfo.minValue = 10.0;
|
||||
outParameterInfo.maxValue = 30.0;
|
||||
outParameterInfo.minValue = 5.0;
|
||||
outParameterInfo.maxValue = 25.0;
|
||||
outParameterInfo.defaultValue = kDefaultValue_ParamOne;
|
||||
break;
|
||||
case kParam_Two:
|
||||
|
|
@ -194,7 +194,7 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
double freq = (GetParameter( kParam_One )*1000.0) / GetSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
biquadA[1] = 2.24697960;
|
||||
biquadB[1] = 0.80193774;
|
||||
biquadC[1] = 0.55495813;
|
||||
biquadD[1] = 0.5;
|
||||
|
|
@ -233,11 +233,11 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
|
||||
Float64 aWet = 0.0;
|
||||
Float64 bWet = 0.0;
|
||||
Float64 cWet = GetParameter( kParam_Two );
|
||||
Float64 cWet = GetParameter( kParam_Two )*3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -248,6 +248,9 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
double inputSample = *sourceP;
|
||||
if (fabs(inputSample)<1.18e-23) inputSample = fpd * 1.18e-17;
|
||||
double drySample = inputSample;
|
||||
double dryStageA = 0.0;
|
||||
double dryStageB = 0.0;
|
||||
double dryFinalBiquad = 0.0;
|
||||
double tempSample = 0.0;
|
||||
double outputSample = 0.0;
|
||||
|
||||
|
|
@ -257,7 +260,7 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
biquadA[10] = biquadA[9]; biquadA[9] = inputSample; //DF1
|
||||
outputSample = (inputSample - lastSampleA)*trim;
|
||||
lastSampleA = inputSample; inputSample = outputSample;
|
||||
inputSample = (inputSample * aWet) + (drySample * (1.0-aWet));
|
||||
dryStageA = inputSample = (inputSample * aWet) + (drySample * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -267,7 +270,7 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
biquadB[10] = biquadB[9]; biquadB[9] = inputSample; //DF1
|
||||
outputSample = (inputSample - lastSampleB)*trim;
|
||||
lastSampleB = inputSample; inputSample = outputSample;
|
||||
inputSample = (inputSample * bWet) + (lastSampleA * (1.0-bWet));
|
||||
dryStageB = inputSample = (inputSample * bWet) + (dryStageA * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -277,14 +280,20 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
biquadC[10] = biquadC[9]; biquadC[9] = inputSample; //DF1
|
||||
outputSample = (inputSample - lastSampleC)*trim;
|
||||
lastSampleC = inputSample; inputSample = outputSample;
|
||||
inputSample = (inputSample * cWet) + (lastSampleB * (1.0-cWet));
|
||||
inputSample = (inputSample * cWet) + (dryStageB * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
tempSample = biquadD[2]*inputSample+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSample; inputSample = tempSample;
|
||||
biquadD[10] = biquadD[9]; biquadD[9] = inputSample; //DF1
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquad = inputSample;
|
||||
tempSample = biquadD[2]*inputSample+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSample; inputSample = tempSample;
|
||||
biquadD[10] = biquadD[9]; biquadD[9] = inputSample; //DF1
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSample = (inputSample * aWet) + (dryFinalBiquad * (1.0-aWet));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (inputSample > 1.0) inputSample = 1.0;
|
||||
if (inputSample < -1.0) inputSample = -1.0;
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@
|
|||
#pragma mark ____SlewSonic Parameters
|
||||
|
||||
// parameters
|
||||
static const float kDefaultValue_ParamOne = 20.0;
|
||||
static const float kDefaultValue_ParamOne = 15.0;
|
||||
static const float kDefaultValue_ParamTwo = 0.0;
|
||||
|
||||
static CFStringRef kParameterOneName = CFSTR("Frequency");
|
||||
static CFStringRef kParameterOneName = CFSTR("Mute");
|
||||
static CFStringRef kParameterOneUnit = CFSTR("kHz");
|
||||
static CFStringRef kParameterTwoName = CFSTR("Bright");
|
||||
//Alter the name if desired, but using the plugin name is a start
|
||||
|
|
|
|||
|
|
@ -49,13 +49,14 @@
|
|||
PBXFileDataSource_Warnings_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXPerProjectTemplateStateSaveDate = 697672882;
|
||||
PBXWorkspaceStateSaveDate = 697672882;
|
||||
PBXPerProjectTemplateStateSaveDate = 699182734;
|
||||
PBXWorkspaceStateSaveDate = 699182734;
|
||||
};
|
||||
perUserProjectItems = {
|
||||
8BA6F6B929ACAEB5004C4F8C /* PBXTextBookmark */ = 8BA6F6B929ACAEB5004C4F8C /* PBXTextBookmark */;
|
||||
8BA6F6BA29ACAEB5004C4F8C /* PBXBookmark */ = 8BA6F6BA29ACAEB5004C4F8C /* PBXBookmark */;
|
||||
8BA6F6BB29ACAEB5004C4F8C /* PBXTextBookmark */ = 8BA6F6BB29ACAEB5004C4F8C /* PBXTextBookmark */;
|
||||
8BB5EF2429946A3F009402F6 /* PlistBookmark */ = 8BB5EF2429946A3F009402F6 /* PlistBookmark */;
|
||||
8BB5F0AC2995AD26009402F6 /* PBXTextBookmark */ = 8BB5F0AC2995AD26009402F6 /* PBXTextBookmark */;
|
||||
8BB5F0AD2995AD26009402F6 /* PBXTextBookmark */ = 8BB5F0AD2995AD26009402F6 /* PBXTextBookmark */;
|
||||
};
|
||||
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
|
||||
userBuildSettings = {
|
||||
|
|
@ -63,10 +64,10 @@
|
|||
};
|
||||
8BA05A660720730100365D66 /* SlewSonic.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1245, 5292}}";
|
||||
sepNavSelRange = "{8357, 0}";
|
||||
sepNavVisRange = "{11395, 668}";
|
||||
sepNavWindowFrame = "{{499, 43}, {1129, 835}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1245, 5544}}";
|
||||
sepNavSelRange = "{8310, 0}";
|
||||
sepNavVisRange = "{11447, 404}";
|
||||
sepNavWindowFrame = "{{724, 43}, {1129, 835}}";
|
||||
};
|
||||
};
|
||||
8BA05A690720730100365D66 /* SlewSonicVersion.h */ = {
|
||||
|
|
@ -77,6 +78,30 @@
|
|||
sepNavWindowFrame = "{{15, 38}, {1129, 835}}";
|
||||
};
|
||||
};
|
||||
8BA6F6B929ACAEB5004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BA05A660720730100365D66 /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 200";
|
||||
rLen = 0;
|
||||
rLoc = 8310;
|
||||
rType = 0;
|
||||
vrLen = 404;
|
||||
vrLoc = 11447;
|
||||
};
|
||||
8BA6F6BA29ACAEB5004C4F8C /* PBXBookmark */ = {
|
||||
isa = PBXBookmark;
|
||||
fRef = 8BC6025B073B072D006C4272 /* SlewSonic.h */;
|
||||
};
|
||||
8BA6F6BB29ACAEB5004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BC6025B073B072D006C4272 /* SlewSonic.h */;
|
||||
name = "SlewSonic.h: 57";
|
||||
rLen = 0;
|
||||
rLoc = 2876;
|
||||
rType = 0;
|
||||
vrLen = 207;
|
||||
vrLoc = 2777;
|
||||
};
|
||||
8BB5EF2429946A3F009402F6 /* PlistBookmark */ = {
|
||||
isa = PlistBookmark;
|
||||
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
|
||||
|
|
@ -89,32 +114,12 @@
|
|||
rLen = 0;
|
||||
rLoc = 9223372036854775808;
|
||||
};
|
||||
8BB5F0AC2995AD26009402F6 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BA05A660720730100365D66 /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 190";
|
||||
rLen = 0;
|
||||
rLoc = 8357;
|
||||
rType = 0;
|
||||
vrLen = 520;
|
||||
vrLoc = 11578;
|
||||
};
|
||||
8BB5F0AD2995AD26009402F6 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BA05A660720730100365D66 /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 200";
|
||||
rLen = 0;
|
||||
rLoc = 8357;
|
||||
rType = 0;
|
||||
vrLen = 668;
|
||||
vrLoc = 11395;
|
||||
};
|
||||
8BC6025B073B072D006C4272 /* SlewSonic.h */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1082, 2394}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {975, 2934}}";
|
||||
sepNavSelRange = "{2876, 0}";
|
||||
sepNavVisRange = "{2534, 912}";
|
||||
sepNavWindowFrame = "{{743, 43}, {1129, 835}}";
|
||||
sepNavVisRange = "{2777, 207}";
|
||||
sepNavWindowFrame = "{{311, 43}, {1129, 835}}";
|
||||
};
|
||||
};
|
||||
8BD3CCB8148830B20062E48C /* Source Control */ = {
|
||||
|
|
|
|||
|
|
@ -302,7 +302,7 @@
|
|||
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
|
||||
<array>
|
||||
<array>
|
||||
<integer>4</integer>
|
||||
<integer>3</integer>
|
||||
<integer>2</integer>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
|
|
@ -326,7 +326,7 @@
|
|||
<real>288</real>
|
||||
</array>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXSmartGroupTreeModule</string>
|
||||
|
|
@ -342,7 +342,7 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8BD7274A1D46E5A5000176F0</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>SlewSonic.cpp</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
|
|
@ -350,15 +350,16 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8BD7274B1D46E5A5000176F0</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>SlewSonic.cpp</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>8BB5F0AD2995AD26009402F6</string>
|
||||
<string>8BA6F6BB29ACAEB5004C4F8C</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>8BB5EF2429946A3F009402F6</string>
|
||||
<string>8BB5F0AC2995AD26009402F6</string>
|
||||
<string>8BA6F6B929ACAEB5004C4F8C</string>
|
||||
<string>8BA6F6BA29ACAEB5004C4F8C</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
|
|
@ -372,18 +373,18 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {531, 216}}</string>
|
||||
<string>{{0, 0}, {531, 142}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>216pt</string>
|
||||
<string>142pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>392pt</string>
|
||||
<string>466pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
@ -397,9 +398,9 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {531, 365}}</string>
|
||||
<string>{{10, 27}, {531, 439}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>XCDetailModule</string>
|
||||
|
|
@ -453,7 +454,7 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {531, 352}}</string>
|
||||
<string>{{10, 27}, {531, 379}}</string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXBuildResultsModule</string>
|
||||
|
|
@ -481,11 +482,11 @@
|
|||
</array>
|
||||
<key>TableOfContents</key>
|
||||
<array>
|
||||
<string>8BB5F0AE2995AD26009402F6</string>
|
||||
<string>8BA6F6BC29ACAEB5004C4F8C</string>
|
||||
<string>1CA23ED40692098700951B8B</string>
|
||||
<string>8BB5F0AF2995AD26009402F6</string>
|
||||
<string>8BA6F6BD29ACAEB5004C4F8C</string>
|
||||
<string>8BD7274A1D46E5A5000176F0</string>
|
||||
<string>8BB5F0B02995AD26009402F6</string>
|
||||
<string>8BA6F6BE29ACAEB5004C4F8C</string>
|
||||
<string>1CA23EDF0692099D00951B8B</string>
|
||||
<string>1CA23EE00692099D00951B8B</string>
|
||||
<string>1CA23EE10692099D00951B8B</string>
|
||||
|
|
@ -658,7 +659,7 @@
|
|||
<key>StatusbarIsVisible</key>
|
||||
<true/>
|
||||
<key>TimeStamp</key>
|
||||
<real>697675046.89322102</real>
|
||||
<real>699182773.51533401</real>
|
||||
<key>ToolbarConfigUserDefaultsMinorVersion</key>
|
||||
<string>2</string>
|
||||
<key>ToolbarDisplayMode</key>
|
||||
|
|
@ -675,11 +676,11 @@
|
|||
<integer>5</integer>
|
||||
<key>WindowOrderList</key>
|
||||
<array>
|
||||
<string>8BB5F0B12995AD26009402F6</string>
|
||||
<string>8BA6F6BF29ACAEB5004C4F8C</string>
|
||||
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/SlewSonic/SlewSonic.xcodeproj</string>
|
||||
</array>
|
||||
<key>WindowString</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
<key>WindowToolsV3</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
|
|||
|
|
@ -101,8 +101,8 @@ ComponentResult SlewSonic::GetParameterInfo(AudioUnitScope inScope,
|
|||
AUBase::FillInParameterName (outParameterInfo, kParameterOneName, false);
|
||||
outParameterInfo.unit = kAudioUnitParameterUnit_CustomUnit;
|
||||
outParameterInfo.unitName = kParameterOneUnit;
|
||||
outParameterInfo.minValue = 10.0;
|
||||
outParameterInfo.maxValue = 30.0;
|
||||
outParameterInfo.minValue = 5.0;
|
||||
outParameterInfo.maxValue = 25.0;
|
||||
outParameterInfo.defaultValue = kDefaultValue_ParamOne;
|
||||
break;
|
||||
case kParam_Two:
|
||||
|
|
@ -194,7 +194,7 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
double freq = (GetParameter( kParam_One )*1000.0) / GetSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
biquadA[1] = 2.24697960;
|
||||
biquadB[1] = 0.80193774;
|
||||
biquadC[1] = 0.55495813;
|
||||
biquadD[1] = 0.5;
|
||||
|
|
@ -233,11 +233,11 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
|
||||
Float64 aWet = 0.0;
|
||||
Float64 bWet = 0.0;
|
||||
Float64 cWet = GetParameter( kParam_Two );
|
||||
Float64 cWet = GetParameter( kParam_Two )*3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -248,6 +248,9 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
double inputSample = *sourceP;
|
||||
if (fabs(inputSample)<1.18e-23) inputSample = fpd * 1.18e-17;
|
||||
double drySample = inputSample;
|
||||
double dryStageA = 0.0;
|
||||
double dryStageB = 0.0;
|
||||
double dryFinalBiquad = 0.0;
|
||||
double tempSample = 0.0;
|
||||
double outputSample = 0.0;
|
||||
|
||||
|
|
@ -257,7 +260,7 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
biquadA[10] = biquadA[9]; biquadA[9] = inputSample; //DF1
|
||||
outputSample = (inputSample - lastSampleA)*trim;
|
||||
lastSampleA = inputSample; inputSample = outputSample;
|
||||
inputSample = (inputSample * aWet) + (drySample * (1.0-aWet));
|
||||
dryStageA = inputSample = (inputSample * aWet) + (drySample * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -267,7 +270,7 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
biquadB[10] = biquadB[9]; biquadB[9] = inputSample; //DF1
|
||||
outputSample = (inputSample - lastSampleB)*trim;
|
||||
lastSampleB = inputSample; inputSample = outputSample;
|
||||
inputSample = (inputSample * bWet) + (lastSampleA * (1.0-bWet));
|
||||
dryStageB = inputSample = (inputSample * bWet) + (dryStageA * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -277,14 +280,20 @@ void SlewSonic::SlewSonicKernel::Process( const Float32 *inSourceP,
|
|||
biquadC[10] = biquadC[9]; biquadC[9] = inputSample; //DF1
|
||||
outputSample = (inputSample - lastSampleC)*trim;
|
||||
lastSampleC = inputSample; inputSample = outputSample;
|
||||
inputSample = (inputSample * cWet) + (lastSampleB * (1.0-cWet));
|
||||
inputSample = (inputSample * cWet) + (dryStageB * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
tempSample = biquadD[2]*inputSample+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSample; inputSample = tempSample;
|
||||
biquadD[10] = biquadD[9]; biquadD[9] = inputSample; //DF1
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquad = inputSample;
|
||||
tempSample = biquadD[2]*inputSample+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSample; inputSample = tempSample;
|
||||
biquadD[10] = biquadD[9]; biquadD[9] = inputSample; //DF1
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSample = (inputSample * aWet) + (dryFinalBiquad * (1.0-aWet));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (inputSample > 1.0) inputSample = 1.0;
|
||||
if (inputSample < -1.0) inputSample = -1.0;
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@
|
|||
#pragma mark ____SlewSonic Parameters
|
||||
|
||||
// parameters
|
||||
static const float kDefaultValue_ParamOne = 20.0;
|
||||
static const float kDefaultValue_ParamOne = 15.0;
|
||||
static const float kDefaultValue_ParamTwo = 0.0;
|
||||
|
||||
static CFStringRef kParameterOneName = CFSTR("Frequency");
|
||||
static CFStringRef kParameterOneName = CFSTR("Mute");
|
||||
static CFStringRef kParameterOneUnit = CFSTR("kHz");
|
||||
static CFStringRef kParameterTwoName = CFSTR("Bright");
|
||||
//Alter the name if desired, but using the plugin name is a start
|
||||
|
|
|
|||
|
|
@ -49,13 +49,14 @@
|
|||
PBXFileDataSource_Warnings_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXPerProjectTemplateStateSaveDate = 697672882;
|
||||
PBXWorkspaceStateSaveDate = 697672882;
|
||||
PBXPerProjectTemplateStateSaveDate = 699182734;
|
||||
PBXWorkspaceStateSaveDate = 699182734;
|
||||
};
|
||||
perUserProjectItems = {
|
||||
8BA6F6B929ACAEB5004C4F8C /* PBXTextBookmark */ = 8BA6F6B929ACAEB5004C4F8C /* PBXTextBookmark */;
|
||||
8BA6F6BA29ACAEB5004C4F8C /* PBXBookmark */ = 8BA6F6BA29ACAEB5004C4F8C /* PBXBookmark */;
|
||||
8BA6F6BB29ACAEB5004C4F8C /* PBXTextBookmark */ = 8BA6F6BB29ACAEB5004C4F8C /* PBXTextBookmark */;
|
||||
8BB5EF2429946A3F009402F6 /* PlistBookmark */ = 8BB5EF2429946A3F009402F6 /* PlistBookmark */;
|
||||
8BB5F0AC2995AD26009402F6 /* PBXTextBookmark */ = 8BB5F0AC2995AD26009402F6 /* PBXTextBookmark */;
|
||||
8BB5F0AD2995AD26009402F6 /* PBXTextBookmark */ = 8BB5F0AD2995AD26009402F6 /* PBXTextBookmark */;
|
||||
};
|
||||
sourceControlManager = 8BD3CCB8148830B20062E48C /* Source Control */;
|
||||
userBuildSettings = {
|
||||
|
|
@ -63,10 +64,10 @@
|
|||
};
|
||||
8BA05A660720730100365D66 /* SlewSonic.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1245, 5292}}";
|
||||
sepNavSelRange = "{8357, 0}";
|
||||
sepNavVisRange = "{11395, 668}";
|
||||
sepNavWindowFrame = "{{499, 43}, {1129, 835}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1245, 5544}}";
|
||||
sepNavSelRange = "{8310, 0}";
|
||||
sepNavVisRange = "{11447, 404}";
|
||||
sepNavWindowFrame = "{{724, 43}, {1129, 835}}";
|
||||
};
|
||||
};
|
||||
8BA05A690720730100365D66 /* SlewSonicVersion.h */ = {
|
||||
|
|
@ -77,6 +78,30 @@
|
|||
sepNavWindowFrame = "{{15, 38}, {1129, 835}}";
|
||||
};
|
||||
};
|
||||
8BA6F6B929ACAEB5004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BA05A660720730100365D66 /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 200";
|
||||
rLen = 0;
|
||||
rLoc = 8310;
|
||||
rType = 0;
|
||||
vrLen = 404;
|
||||
vrLoc = 11447;
|
||||
};
|
||||
8BA6F6BA29ACAEB5004C4F8C /* PBXBookmark */ = {
|
||||
isa = PBXBookmark;
|
||||
fRef = 8BC6025B073B072D006C4272 /* SlewSonic.h */;
|
||||
};
|
||||
8BA6F6BB29ACAEB5004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BC6025B073B072D006C4272 /* SlewSonic.h */;
|
||||
name = "SlewSonic.h: 57";
|
||||
rLen = 0;
|
||||
rLoc = 2876;
|
||||
rType = 0;
|
||||
vrLen = 207;
|
||||
vrLoc = 2777;
|
||||
};
|
||||
8BB5EF2429946A3F009402F6 /* PlistBookmark */ = {
|
||||
isa = PlistBookmark;
|
||||
fRef = 8D01CCD10486CAD60068D4B7 /* Info.plist */;
|
||||
|
|
@ -89,32 +114,12 @@
|
|||
rLen = 0;
|
||||
rLoc = 9223372036854775808;
|
||||
};
|
||||
8BB5F0AC2995AD26009402F6 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BA05A660720730100365D66 /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 190";
|
||||
rLen = 0;
|
||||
rLoc = 8357;
|
||||
rType = 0;
|
||||
vrLen = 520;
|
||||
vrLoc = 11578;
|
||||
};
|
||||
8BB5F0AD2995AD26009402F6 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 8BA05A660720730100365D66 /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 200";
|
||||
rLen = 0;
|
||||
rLoc = 8357;
|
||||
rType = 0;
|
||||
vrLen = 668;
|
||||
vrLoc = 11395;
|
||||
};
|
||||
8BC6025B073B072D006C4272 /* SlewSonic.h */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1082, 2394}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {975, 2934}}";
|
||||
sepNavSelRange = "{2876, 0}";
|
||||
sepNavVisRange = "{2534, 912}";
|
||||
sepNavWindowFrame = "{{743, 43}, {1129, 835}}";
|
||||
sepNavVisRange = "{2777, 207}";
|
||||
sepNavWindowFrame = "{{311, 43}, {1129, 835}}";
|
||||
};
|
||||
};
|
||||
8BD3CCB8148830B20062E48C /* Source Control */ = {
|
||||
|
|
|
|||
|
|
@ -302,7 +302,7 @@
|
|||
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
|
||||
<array>
|
||||
<array>
|
||||
<integer>4</integer>
|
||||
<integer>3</integer>
|
||||
<integer>2</integer>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
|
|
@ -326,7 +326,7 @@
|
|||
<real>288</real>
|
||||
</array>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXSmartGroupTreeModule</string>
|
||||
|
|
@ -342,7 +342,7 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8BD7274A1D46E5A5000176F0</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>SlewSonic.cpp</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
|
|
@ -350,15 +350,16 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8BD7274B1D46E5A5000176F0</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>SlewSonic.cpp</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>8BB5F0AD2995AD26009402F6</string>
|
||||
<string>8BA6F6BB29ACAEB5004C4F8C</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>8BB5EF2429946A3F009402F6</string>
|
||||
<string>8BB5F0AC2995AD26009402F6</string>
|
||||
<string>8BA6F6B929ACAEB5004C4F8C</string>
|
||||
<string>8BA6F6BA29ACAEB5004C4F8C</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
|
|
@ -372,18 +373,18 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {531, 216}}</string>
|
||||
<string>{{0, 0}, {531, 142}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>216pt</string>
|
||||
<string>142pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>392pt</string>
|
||||
<string>466pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
@ -397,9 +398,9 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {531, 365}}</string>
|
||||
<string>{{10, 27}, {531, 439}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>XCDetailModule</string>
|
||||
|
|
@ -453,7 +454,7 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {531, 352}}</string>
|
||||
<string>{{10, 27}, {531, 379}}</string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXBuildResultsModule</string>
|
||||
|
|
@ -481,11 +482,11 @@
|
|||
</array>
|
||||
<key>TableOfContents</key>
|
||||
<array>
|
||||
<string>8BB5F0AE2995AD26009402F6</string>
|
||||
<string>8BA6F6BC29ACAEB5004C4F8C</string>
|
||||
<string>1CA23ED40692098700951B8B</string>
|
||||
<string>8BB5F0AF2995AD26009402F6</string>
|
||||
<string>8BA6F6BD29ACAEB5004C4F8C</string>
|
||||
<string>8BD7274A1D46E5A5000176F0</string>
|
||||
<string>8BB5F0B02995AD26009402F6</string>
|
||||
<string>8BA6F6BE29ACAEB5004C4F8C</string>
|
||||
<string>1CA23EDF0692099D00951B8B</string>
|
||||
<string>1CA23EE00692099D00951B8B</string>
|
||||
<string>1CA23EE10692099D00951B8B</string>
|
||||
|
|
@ -658,7 +659,7 @@
|
|||
<key>StatusbarIsVisible</key>
|
||||
<true/>
|
||||
<key>TimeStamp</key>
|
||||
<real>697675046.89322102</real>
|
||||
<real>699182773.51533401</real>
|
||||
<key>ToolbarConfigUserDefaultsMinorVersion</key>
|
||||
<string>2</string>
|
||||
<key>ToolbarDisplayMode</key>
|
||||
|
|
@ -675,11 +676,11 @@
|
|||
<integer>5</integer>
|
||||
<key>WindowOrderList</key>
|
||||
<array>
|
||||
<string>8BB5F0B12995AD26009402F6</string>
|
||||
<string>8BA6F6BF29ACAEB5004C4F8C</string>
|
||||
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacAU/SlewSonic/SlewSonic.xcodeproj</string>
|
||||
</array>
|
||||
<key>WindowString</key>
|
||||
<string>588 172 841 654 0 0 1440 878 </string>
|
||||
<string>71 221 841 654 0 0 1440 878 </string>
|
||||
<key>WindowToolsV3</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Binary file not shown.
|
|
@ -49,8 +49,14 @@
|
|||
PBXFileDataSource_Warnings_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXPerProjectTemplateStateSaveDate = 697672528;
|
||||
PBXWorkspaceStateSaveDate = 697672528;
|
||||
PBXPerProjectTemplateStateSaveDate = 699182730;
|
||||
PBXWorkspaceStateSaveDate = 699182730;
|
||||
};
|
||||
perUserProjectItems = {
|
||||
8BA6F6C629ACAEDF004C4F8C /* PBXTextBookmark */ = 8BA6F6C629ACAEDF004C4F8C /* PBXTextBookmark */;
|
||||
8BA6F6C729ACAEDF004C4F8C /* PBXTextBookmark */ = 8BA6F6C729ACAEDF004C4F8C /* PBXTextBookmark */;
|
||||
8BA6F6C829ACAEDF004C4F8C /* PBXBookmark */ = 8BA6F6C829ACAEDF004C4F8C /* PBXBookmark */;
|
||||
8BA6F6C929ACAEDF004C4F8C /* PBXTextBookmark */ = 8BA6F6C929ACAEDF004C4F8C /* PBXTextBookmark */;
|
||||
};
|
||||
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
|
||||
userBuildSettings = {
|
||||
|
|
@ -58,17 +64,17 @@
|
|||
};
|
||||
2407DEB6089929BA00EB68BF /* SlewSonic.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {948, 2466}}";
|
||||
sepNavSelRange = "{4263, 0}";
|
||||
sepNavVisRange = "{0, 1443}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {948, 2376}}";
|
||||
sepNavSelRange = "{3513, 0}";
|
||||
sepNavVisRange = "{3446, 1561}";
|
||||
sepNavWindowFrame = "{{12, 47}, {895, 831}}";
|
||||
};
|
||||
};
|
||||
245463B80991757100464AD3 /* SlewSonic.h */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1110, 1386}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1110, 1620}}";
|
||||
sepNavSelRange = "{2698, 0}";
|
||||
sepNavVisRange = "{0, 1292}";
|
||||
sepNavVisRange = "{1035, 257}";
|
||||
sepNavWindowFrame = "{{20, 47}, {895, 831}}";
|
||||
};
|
||||
};
|
||||
|
|
@ -82,10 +88,10 @@
|
|||
};
|
||||
24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1452, 5976}}";
|
||||
sepNavSelRange = "{13290, 0}";
|
||||
sepNavVisRange = "{10165, 2823}";
|
||||
sepNavWindowFrame = "{{47, 41}, {1331, 837}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {885, 6444}}";
|
||||
sepNavSelRange = "{9946, 0}";
|
||||
sepNavVisRange = "{9550, 97}";
|
||||
sepNavWindowFrame = "{{8, 41}, {1331, 837}}";
|
||||
};
|
||||
};
|
||||
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
|
||||
|
|
@ -102,6 +108,40 @@
|
|||
isa = PBXCodeSenseManager;
|
||||
indexTemplatePath = "";
|
||||
};
|
||||
8BA6F6C629ACAEDF004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 2407DEB6089929BA00EB68BF /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 115";
|
||||
rLen = 0;
|
||||
rLoc = 4262;
|
||||
rType = 0;
|
||||
vrLen = 115;
|
||||
vrLoc = 1328;
|
||||
};
|
||||
8BA6F6C729ACAEDF004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */;
|
||||
name = "SlewSonicProc.cpp: 223";
|
||||
rLen = 0;
|
||||
rLoc = 9946;
|
||||
rType = 0;
|
||||
vrLen = 97;
|
||||
vrLoc = 9550;
|
||||
};
|
||||
8BA6F6C829ACAEDF004C4F8C /* PBXBookmark */ = {
|
||||
isa = PBXBookmark;
|
||||
fRef = 245463B80991757100464AD3 /* SlewSonic.h */;
|
||||
};
|
||||
8BA6F6C929ACAEDF004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 245463B80991757100464AD3 /* SlewSonic.h */;
|
||||
name = "SlewSonic.h: 73";
|
||||
rLen = 0;
|
||||
rLoc = 2698;
|
||||
rType = 0;
|
||||
vrLen = 257;
|
||||
vrLoc = 1035;
|
||||
};
|
||||
8D01CCC60486CAD60068D4B7 /* SlewSonic */ = {
|
||||
activeExec = 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -256,6 +256,8 @@
|
|||
<key>Layout</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>BecomeActive</key>
|
||||
<true/>
|
||||
<key>ContentConfiguration</key>
|
||||
<dict>
|
||||
<key>PBXBottomSmartGroupGIDs</key>
|
||||
|
|
@ -337,7 +339,7 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8B0237581D42B1C400E1E8C8</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>Gain.h</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
|
|
@ -345,7 +347,17 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8B0237591D42B1C400E1E8C8</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>Gain.h</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>8BA6F6C929ACAEDF004C4F8C</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>8BA6F6C629ACAEDF004C4F8C</string>
|
||||
<string>8BA6F6C729ACAEDF004C4F8C</string>
|
||||
<string>8BA6F6C829ACAEDF004C4F8C</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
<string>1</string>
|
||||
|
|
@ -358,18 +370,18 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {603, 0}}</string>
|
||||
<string>{{0, 0}, {603, 86}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>0pt</string>
|
||||
<string>86pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>441pt</string>
|
||||
<string>355pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
@ -383,7 +395,9 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {603, 414}}</string>
|
||||
<string>{{10, 27}, {603, 328}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>XCDetailModule</string>
|
||||
|
|
@ -438,8 +452,6 @@
|
|||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {603, 414}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXBuildResultsModule</string>
|
||||
|
|
@ -467,11 +479,11 @@
|
|||
</array>
|
||||
<key>TableOfContents</key>
|
||||
<array>
|
||||
<string>8BB5F0C32995AFF7009402F6</string>
|
||||
<string>8BA6F6CA29ACAEDF004C4F8C</string>
|
||||
<string>1CA23ED40692098700951B8B</string>
|
||||
<string>8BB5F0C42995AFF7009402F6</string>
|
||||
<string>8BA6F6CB29ACAEDF004C4F8C</string>
|
||||
<string>8B0237581D42B1C400E1E8C8</string>
|
||||
<string>8BB5F0C52995AFF7009402F6</string>
|
||||
<string>8BA6F6CC29ACAEDF004C4F8C</string>
|
||||
<string>1CA23EDF0692099D00951B8B</string>
|
||||
<string>1CA23EE00692099D00951B8B</string>
|
||||
<string>1CA23EE10692099D00951B8B</string>
|
||||
|
|
@ -624,7 +636,7 @@
|
|||
<key>StatusbarIsVisible</key>
|
||||
<true/>
|
||||
<key>TimeStamp</key>
|
||||
<real>697675767.751562</real>
|
||||
<real>699182815.98788404</real>
|
||||
<key>ToolbarConfigUserDefaultsMinorVersion</key>
|
||||
<string>2</string>
|
||||
<key>ToolbarDisplayMode</key>
|
||||
|
|
@ -641,7 +653,8 @@
|
|||
<integer>5</integer>
|
||||
<key>WindowOrderList</key>
|
||||
<array>
|
||||
<string>/Users/christopherjohnson/Desktop/SlewSonic/SlewSonic.xcodeproj</string>
|
||||
<string>8BA6F6CD29ACAEDF004C4F8C</string>
|
||||
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/SlewSonic/SlewSonic.xcodeproj</string>
|
||||
</array>
|
||||
<key>WindowString</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
|
|
|
|||
|
|
@ -12,15 +12,15 @@
|
|||
24CFB70407E7A0220081BD57 /* PkgInfo in Resources */ = {isa = PBXBuildFile; fileRef = 24CFB70307E7A0220081BD57 /* PkgInfo */; };
|
||||
24D8287009A914000093AEF8 /* SlewSonicProc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */; };
|
||||
24D8287F09A9164A0093AEF8 /* xcode_vst_prefix.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D8287E09A9164A0093AEF8 /* xcode_vst_prefix.h */; };
|
||||
8B2634C42997204400E024FE /* vstfxstore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2634B82997204400E024FE /* vstfxstore.h */; };
|
||||
8B2634C52997204400E024FE /* aeffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2634B92997204400E024FE /* aeffect.h */; };
|
||||
8B2634C62997204400E024FE /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2634BA2997204400E024FE /* aeffectx.h */; };
|
||||
8B2634C72997204400E024FE /* audioeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2634BE2997204400E024FE /* audioeffectx.h */; };
|
||||
8B2634C82997204400E024FE /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B2634BF2997204400E024FE /* audioeffect.cpp */; };
|
||||
8B2634C92997204400E024FE /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B2634C02997204400E024FE /* audioeffectx.cpp */; };
|
||||
8B2634CA2997204400E024FE /* aeffeditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2634C12997204400E024FE /* aeffeditor.h */; };
|
||||
8B2634CB2997204400E024FE /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B2634C22997204400E024FE /* vstplugmain.cpp */; };
|
||||
8B2634CC2997204400E024FE /* audioeffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B2634C32997204400E024FE /* audioeffect.h */; };
|
||||
8B77EF8329ACCC5B001BA298 /* vstfxstore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B77EF7729ACCC5B001BA298 /* vstfxstore.h */; };
|
||||
8B77EF8429ACCC5B001BA298 /* aeffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B77EF7829ACCC5B001BA298 /* aeffect.h */; };
|
||||
8B77EF8529ACCC5B001BA298 /* aeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B77EF7929ACCC5B001BA298 /* aeffectx.h */; };
|
||||
8B77EF8629ACCC5B001BA298 /* audioeffectx.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B77EF7D29ACCC5B001BA298 /* audioeffectx.h */; };
|
||||
8B77EF8729ACCC5B001BA298 /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B77EF7E29ACCC5B001BA298 /* audioeffect.cpp */; };
|
||||
8B77EF8829ACCC5B001BA298 /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B77EF7F29ACCC5B001BA298 /* audioeffectx.cpp */; };
|
||||
8B77EF8929ACCC5B001BA298 /* aeffeditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B77EF8029ACCC5B001BA298 /* aeffeditor.h */; };
|
||||
8B77EF8A29ACCC5B001BA298 /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8B77EF8129ACCC5B001BA298 /* vstplugmain.cpp */; };
|
||||
8B77EF8B29ACCC5B001BA298 /* audioeffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B77EF8229ACCC5B001BA298 /* audioeffect.h */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
|
|
@ -30,15 +30,15 @@
|
|||
24CFB70307E7A0220081BD57 /* PkgInfo */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = PkgInfo; path = mac/PkgInfo; sourceTree = "<group>"; };
|
||||
24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SlewSonicProc.cpp; path = source/SlewSonicProc.cpp; sourceTree = "<group>"; };
|
||||
24D8287E09A9164A0093AEF8 /* xcode_vst_prefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = xcode_vst_prefix.h; path = mac/xcode_vst_prefix.h; sourceTree = SOURCE_ROOT; };
|
||||
8B2634B82997204400E024FE /* vstfxstore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vstfxstore.h; sourceTree = "<group>"; };
|
||||
8B2634B92997204400E024FE /* aeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffect.h; sourceTree = "<group>"; };
|
||||
8B2634BA2997204400E024FE /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffectx.h; sourceTree = "<group>"; };
|
||||
8B2634BE2997204400E024FE /* audioeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioeffectx.h; sourceTree = "<group>"; };
|
||||
8B2634BF2997204400E024FE /* audioeffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audioeffect.cpp; sourceTree = "<group>"; };
|
||||
8B2634C02997204400E024FE /* audioeffectx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audioeffectx.cpp; sourceTree = "<group>"; };
|
||||
8B2634C12997204400E024FE /* aeffeditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffeditor.h; sourceTree = "<group>"; };
|
||||
8B2634C22997204400E024FE /* vstplugmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vstplugmain.cpp; sourceTree = "<group>"; };
|
||||
8B2634C32997204400E024FE /* audioeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioeffect.h; sourceTree = "<group>"; };
|
||||
8B77EF7729ACCC5B001BA298 /* vstfxstore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vstfxstore.h; sourceTree = "<group>"; };
|
||||
8B77EF7829ACCC5B001BA298 /* aeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffect.h; sourceTree = "<group>"; };
|
||||
8B77EF7929ACCC5B001BA298 /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffectx.h; sourceTree = "<group>"; };
|
||||
8B77EF7D29ACCC5B001BA298 /* audioeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioeffectx.h; sourceTree = "<group>"; };
|
||||
8B77EF7E29ACCC5B001BA298 /* audioeffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audioeffect.cpp; sourceTree = "<group>"; };
|
||||
8B77EF7F29ACCC5B001BA298 /* audioeffectx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audioeffectx.cpp; sourceTree = "<group>"; };
|
||||
8B77EF8029ACCC5B001BA298 /* aeffeditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aeffeditor.h; sourceTree = "<group>"; };
|
||||
8B77EF8129ACCC5B001BA298 /* vstplugmain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vstplugmain.cpp; sourceTree = "<group>"; };
|
||||
8B77EF8229ACCC5B001BA298 /* audioeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioeffect.h; sourceTree = "<group>"; };
|
||||
8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mac/Info.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
08FB77ADFE841716C02AAC07 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634B52997204400E024FE /* vstsdk2.4 */,
|
||||
8B77EF7429ACCC5B001BA298 /* vstsdk2.4 */,
|
||||
2407DEB6089929BA00EB68BF /* SlewSonic.cpp */,
|
||||
24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */,
|
||||
245463B80991757100464AD3 /* SlewSonic.h */,
|
||||
|
|
@ -82,59 +82,59 @@
|
|||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8B2634B52997204400E024FE /* vstsdk2.4 */ = {
|
||||
8B77EF7429ACCC5B001BA298 /* vstsdk2.4 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634B62997204400E024FE /* pluginterfaces */,
|
||||
8B2634BB2997204400E024FE /* public.sdk */,
|
||||
8B77EF7529ACCC5B001BA298 /* pluginterfaces */,
|
||||
8B77EF7A29ACCC5B001BA298 /* public.sdk */,
|
||||
);
|
||||
name = vstsdk2.4;
|
||||
path = ../../../../vstsdk2.4;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8B2634B62997204400E024FE /* pluginterfaces */ = {
|
||||
8B77EF7529ACCC5B001BA298 /* pluginterfaces */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634B72997204400E024FE /* vst2.x */,
|
||||
8B77EF7629ACCC5B001BA298 /* vst2.x */,
|
||||
);
|
||||
path = pluginterfaces;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8B2634B72997204400E024FE /* vst2.x */ = {
|
||||
8B77EF7629ACCC5B001BA298 /* vst2.x */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634B82997204400E024FE /* vstfxstore.h */,
|
||||
8B2634B92997204400E024FE /* aeffect.h */,
|
||||
8B2634BA2997204400E024FE /* aeffectx.h */,
|
||||
8B77EF7729ACCC5B001BA298 /* vstfxstore.h */,
|
||||
8B77EF7829ACCC5B001BA298 /* aeffect.h */,
|
||||
8B77EF7929ACCC5B001BA298 /* aeffectx.h */,
|
||||
);
|
||||
path = vst2.x;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8B2634BB2997204400E024FE /* public.sdk */ = {
|
||||
8B77EF7A29ACCC5B001BA298 /* public.sdk */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634BC2997204400E024FE /* source */,
|
||||
8B77EF7B29ACCC5B001BA298 /* source */,
|
||||
);
|
||||
path = public.sdk;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8B2634BC2997204400E024FE /* source */ = {
|
||||
8B77EF7B29ACCC5B001BA298 /* source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634BD2997204400E024FE /* vst2.x */,
|
||||
8B77EF7C29ACCC5B001BA298 /* vst2.x */,
|
||||
);
|
||||
path = source;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8B2634BD2997204400E024FE /* vst2.x */ = {
|
||||
8B77EF7C29ACCC5B001BA298 /* vst2.x */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8B2634BE2997204400E024FE /* audioeffectx.h */,
|
||||
8B2634BF2997204400E024FE /* audioeffect.cpp */,
|
||||
8B2634C02997204400E024FE /* audioeffectx.cpp */,
|
||||
8B2634C12997204400E024FE /* aeffeditor.h */,
|
||||
8B2634C22997204400E024FE /* vstplugmain.cpp */,
|
||||
8B2634C32997204400E024FE /* audioeffect.h */,
|
||||
8B77EF7D29ACCC5B001BA298 /* audioeffectx.h */,
|
||||
8B77EF7E29ACCC5B001BA298 /* audioeffect.cpp */,
|
||||
8B77EF7F29ACCC5B001BA298 /* audioeffectx.cpp */,
|
||||
8B77EF8029ACCC5B001BA298 /* aeffeditor.h */,
|
||||
8B77EF8129ACCC5B001BA298 /* vstplugmain.cpp */,
|
||||
8B77EF8229ACCC5B001BA298 /* audioeffect.h */,
|
||||
);
|
||||
path = vst2.x;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -146,14 +146,14 @@
|
|||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8B2634CA2997204400E024FE /* aeffeditor.h in Headers */,
|
||||
8B77EF8929ACCC5B001BA298 /* aeffeditor.h in Headers */,
|
||||
245463B90991757100464AD3 /* SlewSonic.h in Headers */,
|
||||
8B2634CC2997204400E024FE /* audioeffect.h in Headers */,
|
||||
8B2634C52997204400E024FE /* aeffect.h in Headers */,
|
||||
8B77EF8B29ACCC5B001BA298 /* audioeffect.h in Headers */,
|
||||
8B77EF8429ACCC5B001BA298 /* aeffect.h in Headers */,
|
||||
24D8287F09A9164A0093AEF8 /* xcode_vst_prefix.h in Headers */,
|
||||
8B2634C72997204400E024FE /* audioeffectx.h in Headers */,
|
||||
8B2634C42997204400E024FE /* vstfxstore.h in Headers */,
|
||||
8B2634C62997204400E024FE /* aeffectx.h in Headers */,
|
||||
8B77EF8629ACCC5B001BA298 /* audioeffectx.h in Headers */,
|
||||
8B77EF8329ACCC5B001BA298 /* vstfxstore.h in Headers */,
|
||||
8B77EF8529ACCC5B001BA298 /* aeffectx.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -192,9 +192,9 @@
|
|||
developmentRegion = en;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
fr,
|
||||
ja,
|
||||
en,
|
||||
ja,
|
||||
fr,
|
||||
Base,
|
||||
de,
|
||||
);
|
||||
|
|
@ -240,10 +240,10 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8B2634C92997204400E024FE /* audioeffectx.cpp in Sources */,
|
||||
8B77EF8829ACCC5B001BA298 /* audioeffectx.cpp in Sources */,
|
||||
2407DEB9089929BA00EB68BF /* SlewSonic.cpp in Sources */,
|
||||
8B2634C82997204400E024FE /* audioeffect.cpp in Sources */,
|
||||
8B2634CB2997204400E024FE /* vstplugmain.cpp in Sources */,
|
||||
8B77EF8729ACCC5B001BA298 /* audioeffect.cpp in Sources */,
|
||||
8B77EF8A29ACCC5B001BA298 /* vstplugmain.cpp in Sources */,
|
||||
24D8287009A914000093AEF8 /* SlewSonicProc.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -96,7 +96,7 @@ float SlewSonic::getParameter(VstInt32 index) {
|
|||
|
||||
void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: vst_strncpy (text, "Freq", kVstMaxParamStrLen); break;
|
||||
case kParamA: vst_strncpy (text, "Mute", kVstMaxParamStrLen); break;
|
||||
case kParamB: vst_strncpy (text, "Bright", kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this is our labels for displaying in the VST host
|
||||
|
|
@ -104,7 +104,7 @@ void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
|||
|
||||
void SlewSonic::getParameterDisplay(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: float2string ((A*20.0)+10.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamA: float2string ((A*20.0)+5.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this displays the values and handles 'popups' where it's discrete choices
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
float* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -57,11 +57,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -75,6 +75,12 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -85,11 +91,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -100,11 +106,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -115,20 +121,26 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
@ -162,7 +174,7 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
double* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -204,11 +216,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -222,6 +234,12 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -232,11 +250,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -247,11 +265,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -262,20 +280,26 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
|
|||
|
|
@ -49,8 +49,14 @@
|
|||
PBXFileDataSource_Warnings_ColumnID,
|
||||
);
|
||||
};
|
||||
PBXPerProjectTemplateStateSaveDate = 697672528;
|
||||
PBXWorkspaceStateSaveDate = 697672528;
|
||||
PBXPerProjectTemplateStateSaveDate = 699182730;
|
||||
PBXWorkspaceStateSaveDate = 699182730;
|
||||
};
|
||||
perUserProjectItems = {
|
||||
8BA6F6C629ACAEDF004C4F8C /* PBXTextBookmark */ = 8BA6F6C629ACAEDF004C4F8C /* PBXTextBookmark */;
|
||||
8BA6F6C729ACAEDF004C4F8C /* PBXTextBookmark */ = 8BA6F6C729ACAEDF004C4F8C /* PBXTextBookmark */;
|
||||
8BA6F6C829ACAEDF004C4F8C /* PBXBookmark */ = 8BA6F6C829ACAEDF004C4F8C /* PBXBookmark */;
|
||||
8BA6F6C929ACAEDF004C4F8C /* PBXTextBookmark */ = 8BA6F6C929ACAEDF004C4F8C /* PBXTextBookmark */;
|
||||
};
|
||||
sourceControlManager = 8B02375E1D42B1C400E1E8C8 /* Source Control */;
|
||||
userBuildSettings = {
|
||||
|
|
@ -58,17 +64,17 @@
|
|||
};
|
||||
2407DEB6089929BA00EB68BF /* SlewSonic.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {948, 2466}}";
|
||||
sepNavSelRange = "{4263, 0}";
|
||||
sepNavVisRange = "{0, 1443}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {948, 2376}}";
|
||||
sepNavSelRange = "{3513, 0}";
|
||||
sepNavVisRange = "{3446, 1561}";
|
||||
sepNavWindowFrame = "{{12, 47}, {895, 831}}";
|
||||
};
|
||||
};
|
||||
245463B80991757100464AD3 /* SlewSonic.h */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1110, 1386}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1110, 1620}}";
|
||||
sepNavSelRange = "{2698, 0}";
|
||||
sepNavVisRange = "{0, 1292}";
|
||||
sepNavVisRange = "{1035, 257}";
|
||||
sepNavWindowFrame = "{{20, 47}, {895, 831}}";
|
||||
};
|
||||
};
|
||||
|
|
@ -82,10 +88,10 @@
|
|||
};
|
||||
24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1452, 5976}}";
|
||||
sepNavSelRange = "{13290, 0}";
|
||||
sepNavVisRange = "{10165, 2823}";
|
||||
sepNavWindowFrame = "{{47, 41}, {1331, 837}}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {885, 6444}}";
|
||||
sepNavSelRange = "{9946, 0}";
|
||||
sepNavVisRange = "{9550, 97}";
|
||||
sepNavWindowFrame = "{{8, 41}, {1331, 837}}";
|
||||
};
|
||||
};
|
||||
8B02375E1D42B1C400E1E8C8 /* Source Control */ = {
|
||||
|
|
@ -102,6 +108,40 @@
|
|||
isa = PBXCodeSenseManager;
|
||||
indexTemplatePath = "";
|
||||
};
|
||||
8BA6F6C629ACAEDF004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 2407DEB6089929BA00EB68BF /* SlewSonic.cpp */;
|
||||
name = "SlewSonic.cpp: 115";
|
||||
rLen = 0;
|
||||
rLoc = 4262;
|
||||
rType = 0;
|
||||
vrLen = 115;
|
||||
vrLoc = 1328;
|
||||
};
|
||||
8BA6F6C729ACAEDF004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 24D8286F09A914000093AEF8 /* SlewSonicProc.cpp */;
|
||||
name = "SlewSonicProc.cpp: 223";
|
||||
rLen = 0;
|
||||
rLoc = 9946;
|
||||
rType = 0;
|
||||
vrLen = 97;
|
||||
vrLoc = 9550;
|
||||
};
|
||||
8BA6F6C829ACAEDF004C4F8C /* PBXBookmark */ = {
|
||||
isa = PBXBookmark;
|
||||
fRef = 245463B80991757100464AD3 /* SlewSonic.h */;
|
||||
};
|
||||
8BA6F6C929ACAEDF004C4F8C /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 245463B80991757100464AD3 /* SlewSonic.h */;
|
||||
name = "SlewSonic.h: 73";
|
||||
rLen = 0;
|
||||
rLoc = 2698;
|
||||
rType = 0;
|
||||
vrLen = 257;
|
||||
vrLoc = 1035;
|
||||
};
|
||||
8D01CCC60486CAD60068D4B7 /* SlewSonic */ = {
|
||||
activeExec = 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -256,6 +256,8 @@
|
|||
<key>Layout</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>BecomeActive</key>
|
||||
<true/>
|
||||
<key>ContentConfiguration</key>
|
||||
<dict>
|
||||
<key>PBXBottomSmartGroupGIDs</key>
|
||||
|
|
@ -337,7 +339,7 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8B0237581D42B1C400E1E8C8</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>Gain.h</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
|
|
@ -345,7 +347,17 @@
|
|||
<key>PBXProjectModuleGUID</key>
|
||||
<string>8B0237591D42B1C400E1E8C8</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>Gain.h</string>
|
||||
<string>SlewSonic.h</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>8BA6F6C929ACAEDF004C4F8C</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>8BA6F6C629ACAEDF004C4F8C</string>
|
||||
<string>8BA6F6C729ACAEDF004C4F8C</string>
|
||||
<string>8BA6F6C829ACAEDF004C4F8C</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
<string>1</string>
|
||||
|
|
@ -358,18 +370,18 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {603, 0}}</string>
|
||||
<string>{{0, 0}, {603, 86}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>0pt</string>
|
||||
<string>86pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>441pt</string>
|
||||
<string>355pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
@ -383,7 +395,9 @@
|
|||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {603, 414}}</string>
|
||||
<string>{{10, 27}, {603, 328}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>XCDetailModule</string>
|
||||
|
|
@ -438,8 +452,6 @@
|
|||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {603, 414}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXBuildResultsModule</string>
|
||||
|
|
@ -467,11 +479,11 @@
|
|||
</array>
|
||||
<key>TableOfContents</key>
|
||||
<array>
|
||||
<string>8BB5F0C32995AFF7009402F6</string>
|
||||
<string>8BA6F6CA29ACAEDF004C4F8C</string>
|
||||
<string>1CA23ED40692098700951B8B</string>
|
||||
<string>8BB5F0C42995AFF7009402F6</string>
|
||||
<string>8BA6F6CB29ACAEDF004C4F8C</string>
|
||||
<string>8B0237581D42B1C400E1E8C8</string>
|
||||
<string>8BB5F0C52995AFF7009402F6</string>
|
||||
<string>8BA6F6CC29ACAEDF004C4F8C</string>
|
||||
<string>1CA23EDF0692099D00951B8B</string>
|
||||
<string>1CA23EE00692099D00951B8B</string>
|
||||
<string>1CA23EE10692099D00951B8B</string>
|
||||
|
|
@ -624,7 +636,7 @@
|
|||
<key>StatusbarIsVisible</key>
|
||||
<true/>
|
||||
<key>TimeStamp</key>
|
||||
<real>697675767.751562</real>
|
||||
<real>699182815.98788404</real>
|
||||
<key>ToolbarConfigUserDefaultsMinorVersion</key>
|
||||
<string>2</string>
|
||||
<key>ToolbarDisplayMode</key>
|
||||
|
|
@ -641,7 +653,8 @@
|
|||
<integer>5</integer>
|
||||
<key>WindowOrderList</key>
|
||||
<array>
|
||||
<string>/Users/christopherjohnson/Desktop/SlewSonic/SlewSonic.xcodeproj</string>
|
||||
<string>8BA6F6CD29ACAEDF004C4F8C</string>
|
||||
<string>/Users/christopherjohnson/Desktop/airwindows/plugins/MacVST/SlewSonic/SlewSonic.xcodeproj</string>
|
||||
</array>
|
||||
<key>WindowString</key>
|
||||
<string>16 274 810 487 0 0 1440 878 </string>
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ float SlewSonic::getParameter(VstInt32 index) {
|
|||
|
||||
void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: vst_strncpy (text, "Freq", kVstMaxParamStrLen); break;
|
||||
case kParamA: vst_strncpy (text, "Mute", kVstMaxParamStrLen); break;
|
||||
case kParamB: vst_strncpy (text, "Bright", kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this is our labels for displaying in the VST host
|
||||
|
|
@ -104,7 +104,7 @@ void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
|||
|
||||
void SlewSonic::getParameterDisplay(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: float2string ((A*20.0)+10.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamA: float2string ((A*20.0)+5.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this displays the values and handles 'popups' where it's discrete choices
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
float* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -57,11 +57,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -75,6 +75,12 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -85,11 +91,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -100,11 +106,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -115,20 +121,26 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
@ -162,7 +174,7 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
double* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -204,11 +216,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -222,6 +234,12 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -232,11 +250,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -247,11 +265,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -262,20 +280,26 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -96,7 +96,7 @@ float SlewSonic::getParameter(VstInt32 index) {
|
|||
|
||||
void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: vst_strncpy (text, "Freq", kVstMaxParamStrLen); break;
|
||||
case kParamA: vst_strncpy (text, "Mute", kVstMaxParamStrLen); break;
|
||||
case kParamB: vst_strncpy (text, "Bright", kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this is our labels for displaying in the VST host
|
||||
|
|
@ -104,7 +104,7 @@ void SlewSonic::getParameterName(VstInt32 index, char *text) {
|
|||
|
||||
void SlewSonic::getParameterDisplay(VstInt32 index, char *text) {
|
||||
switch (index) {
|
||||
case kParamA: float2string ((A*20.0)+10.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamA: float2string ((A*20.0)+5.0, text, kVstMaxParamStrLen); break;
|
||||
case kParamB: float2string (B, text, kVstMaxParamStrLen); break;
|
||||
default: break; // unknown parameter, shouldn't happen!
|
||||
} //this displays the values and handles 'popups' where it's discrete choices
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
float* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -57,11 +57,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -75,6 +75,12 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -85,11 +91,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -100,11 +106,11 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -115,20 +121,26 @@ void SlewSonic::processReplacing(float **inputs, float **outputs, VstInt32 sampl
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
@ -162,7 +174,7 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
double* out2 = outputs[1];
|
||||
|
||||
double trim = 2.302585092994045684017991; //natural logarithm of 10
|
||||
double freq = ((A*20000.0)+10000.0) / getSampleRate();
|
||||
double freq = ((A*20000.0)+5000.0) / getSampleRate();
|
||||
if (freq > 0.499) freq = 0.499;
|
||||
biquadD[0] = biquadC[0] = biquadB[0] = biquadA[0] = freq;
|
||||
biquadA[1] = 2.24697960; //tenth order Butterworth out of five biquads
|
||||
|
|
@ -204,11 +216,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
|
||||
double aWet = 0.0;
|
||||
double bWet = 0.0;
|
||||
double cWet = B;
|
||||
double cWet = B * 3.0;
|
||||
//eight-stage wet/dry control using progressive stages that bypass when not engaged
|
||||
if (cWet < 1.0) {aWet = cWet; cWet = 0.0;}
|
||||
else if (cWet < 2.0) {bWet = cWet - 1.0; aWet = 1.0; cWet = 0.0;}
|
||||
else {cWet -= 7.0; cWet = bWet = aWet = 1.0;}
|
||||
else {cWet -= 2.0; bWet = aWet = 1.0;}
|
||||
//this is one way to make a little set of dry/wet stages that are successively added to the
|
||||
//output as the control is turned up. Each one independently goes from 0-1 and stays at 1
|
||||
//beyond that point: this is a way to progressively add a 'black box' sound processing
|
||||
|
|
@ -222,6 +234,12 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17;
|
||||
double drySampleL = inputSampleL;
|
||||
double drySampleR = inputSampleR;
|
||||
double dryStageAL = 0.0;
|
||||
double dryStageBL = 0.0;
|
||||
double dryStageAR = 0.0;
|
||||
double dryStageBR = 0.0;
|
||||
double dryFinalBiquadL = 0.0;
|
||||
double dryFinalBiquadR = 0.0;
|
||||
double outSampleL = 0.0;
|
||||
double outSampleR = 0.0;
|
||||
|
||||
|
|
@ -232,11 +250,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadA[12] = biquadA[11]; biquadA[11] = inputSampleR; inputSampleR = outSampleR; biquadA[14] = biquadA[13]; biquadA[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleAL)*trim;
|
||||
lastSampleAL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
dryStageAL = inputSampleL = (inputSampleL * aWet) + (drySampleL * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
outSampleR = (inputSampleR - lastSampleAR)*trim;
|
||||
lastSampleAR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
dryStageAR = inputSampleR = (inputSampleR * aWet) + (drySampleR * (1.0-aWet));
|
||||
//first stage always runs, dry/wet between raw signal and this
|
||||
}
|
||||
|
||||
|
|
@ -247,11 +265,11 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadB[12] = biquadB[11]; biquadB[11] = inputSampleR; inputSampleR = outSampleR; biquadB[14] = biquadB[13]; biquadB[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleBL)*trim;
|
||||
lastSampleBL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * bWet) + (lastSampleAL * (1.0-bWet));
|
||||
dryStageBL = inputSampleL = (inputSampleL * bWet) + (dryStageAL * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleBR)*trim;
|
||||
lastSampleBR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * bWet) + (lastSampleAR * (1.0-bWet));
|
||||
dryStageBR = inputSampleR = (inputSampleR * bWet) + (dryStageAR * (1.0-bWet));
|
||||
//second stage adds upon first stage, crossfade between them
|
||||
}
|
||||
|
||||
|
|
@ -262,20 +280,26 @@ void SlewSonic::processDoubleReplacing(double **inputs, double **outputs, VstInt
|
|||
biquadC[12] = biquadC[11]; biquadC[11] = inputSampleR; inputSampleR = outSampleR; biquadC[14] = biquadC[13]; biquadC[13] = inputSampleR; //DF1 right
|
||||
outSampleL = (inputSampleL - lastSampleCL)*trim;
|
||||
lastSampleCL = inputSampleL; inputSampleL = outSampleL;
|
||||
inputSampleL = (inputSampleL * cWet) + (lastSampleBL * (1.0-cWet));
|
||||
inputSampleL = (inputSampleL * cWet) + (dryStageBL * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
outSampleR = (inputSampleR - lastSampleCR)*trim;
|
||||
lastSampleCR = inputSampleR; inputSampleR = outSampleR;
|
||||
inputSampleR = (inputSampleR * cWet) + (lastSampleBR * (1.0-cWet));
|
||||
inputSampleR = (inputSampleR * cWet) + (dryStageBR * (1.0-cWet));
|
||||
//third stage adds upon second stage, crossfade between them
|
||||
}
|
||||
|
||||
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
if (aWet > 0.0) {
|
||||
dryFinalBiquadL = inputSampleL;
|
||||
dryFinalBiquadR = inputSampleR;
|
||||
outSampleL = biquadD[2]*inputSampleL+biquadD[3]*biquadD[7]+biquadD[4]*biquadD[8]-biquadD[5]*biquadD[9]-biquadD[6]*biquadD[10];
|
||||
biquadD[8] = biquadD[7]; biquadD[7] = inputSampleL; inputSampleL = outSampleL; biquadD[10] = biquadD[9]; biquadD[9] = inputSampleL; //DF1 left
|
||||
outSampleR = biquadD[2]*inputSampleR+biquadD[3]*biquadD[11]+biquadD[4]*biquadD[12]-biquadD[5]*biquadD[13]-biquadD[6]*biquadD[14];
|
||||
biquadD[12] = biquadD[11]; biquadD[11] = inputSampleR; inputSampleR = outSampleR; biquadD[14] = biquadD[13]; biquadD[13] = inputSampleR; //DF1 right
|
||||
//final post-slew-only stage always runs, minimum of one stage on dry and two on single slew-only
|
||||
inputSampleL = (inputSampleL * aWet) + (dryFinalBiquadL * (1.0-aWet));
|
||||
inputSampleR = (inputSampleR * aWet) + (dryFinalBiquadR * (1.0-aWet));
|
||||
}
|
||||
|
||||
if (inputSampleL > 1.0) inputSampleL = 1.0;
|
||||
if (inputSampleL < -1.0) inputSampleL = -1.0;
|
||||
|
|
|
|||
1
what.txt
1
what.txt
|
|
@ -256,6 +256,7 @@ Slew is a slew clipper, which darkens treble in an unusual way.
|
|||
Slew2 works like a de-esser or acceleration limiter: controls extreme highs.
|
||||
Slew3 is a new approach to slew clipping meant for a more analog-like darkening effect.
|
||||
SlewOnly is a mix check plugin that shows you only the extreme highs.
|
||||
SlewSonic combines SlewOnly with ultrasonic filtering to solo brightness.
|
||||
Smooth can tame pointy sounds or make drums explode.
|
||||
SoftGate is a gate that can mute hiss and smooth sample tails.
|
||||
SpatializeDither is a high-performance clarity and accuracy dither.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue