diff --git a/libs/airwindows b/libs/airwindows index 6e9aeb1..8953569 160000 --- a/libs/airwindows +++ b/libs/airwindows @@ -1 +1 @@ -Subproject commit 6e9aeb129aa2da112026d1816953c079d887bc75 +Subproject commit 895356997803cd51ac6d02876c3b937c88ee2d78 diff --git a/res/awpdoc/kCathedral2.txt b/res/awpdoc/kCathedral2.txt new file mode 100644 index 0000000..f749eb7 --- /dev/null +++ b/res/awpdoc/kCathedral2.txt @@ -0,0 +1,17 @@ +# kCathedral2 is a giant reverby space modeled after the Bricasti Cathedral. + +Here we go: this should do nicely. + +This is still a 5x5 Householder matrix like the last time, but that's about the only similarity, and it's not at all the same matrix as last time. I am keeping that as kCathedral because I know full well that people find uses for things, but you can hear pretty plainly in my video on kCathedral2 that this is in another league (as they will all be, going forward). + +How was that done? A lot of it was time spent generating possible reverb matrices. There's a wide array of ways to evaluate how those become reverbs, none of which existed when I made the original kCathedral. I knew what I wanted but I had no way to measure it… and no way to generate thousands, millions, billions of possible options and automate the process of throwing out the metallic or lame ones. And that changed, over months of work on the tools. + +There's also new things that didn't exist in the more purist, uncompromising kCathedral. The new one uses one of my reverb delays differently, by turning it into a single solitary allpass (well, two, one per channel) and also adding the very subtlest of modulation to just that one allpass (not inside it, as a separate effect). None of this was present in the original, but even though it's only the tiniest amount, it's felt. + +But most of all, this time around it's using a completely different approach to early reflections. The real Bricasti Cathedral uses early reflections so strong I mistook them for dry signal being let in. Original kCathedral used a 3x3 matrix, very gingerly, trying not to be obvious because I thought I was hearing dry energy off the Bricasti, therefore the early reflections had to be much quieter, right? kCathedral2 uses a 4x4 matrix… which means it's able to literally use a patch from ClearCoat/CloudCoat, except without regeneration (the sound literally bounces away into the cathedral and doesn't even enter the deep reverb field). That's early reflections that can stand alone as their own reverb. + +It's subtle, but it's also where I was able to step away from the Bricasti sound and try to establish my own. I think you'll find that the deep room tone is about the same, and the depth of space, but I want those early reflections to be a lot more diffuse (but NOT allpassy), so I've scaled them up and spread them out. It should sound more like detail in the actual room rather than an obvious back wall, which I think will be more useful for how I'll be using it. And I've got a lot closer to that textural butter-sound of the real Bricasti, while retaining some of my own goals for the project. + +Welcome to kCathedral2. Oops, I did it again (this time more like what I intended for the first time). Thanks to my Patreon patrons, who are literally the reason I can persist at goals like this, and without whom I might have to stop halfway and not get to stuff like this. Hope you like it! + + diff --git a/src/ModuleAdd.h b/src/ModuleAdd.h index 82daeb2..7d9b394 100644 --- a/src/ModuleAdd.h +++ b/src/ModuleAdd.h @@ -1,5 +1,7 @@ #include "autogen_airwin/ADClip7.h" int ADClip7_unused = AirwinRegistry::registerAirwindow({"ADClip7", "Clipping", 75, "ADClip7 is the ultimate Airwindows loudness maximizer/ peak control.", airwin2rack::ADClip7::kNumParameters, []() { return std::make_unique(0); }}); +#include "autogen_airwin/ADClip8.h" +int ADClip8_unused = AirwinRegistry::registerAirwindow({"ADClip8", "Unclassified", -1, "", airwin2rack::ADClip8::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ADT.h" int ADT_unused = AirwinRegistry::registerAirwindow({"ADT", "Ambience", 10, "ADT is a double short delay tap with saturation.", airwin2rack::ADT::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/AQuickVoiceClip.h" @@ -13,7 +15,7 @@ int Air_unused = AirwinRegistry::registerAirwindow({"Air", "Brightness", 62, "Ai #include "autogen_airwin/Air2.h" int Air2_unused = AirwinRegistry::registerAirwindow({"Air2", "Brightness", 61, "Air2 is a different bright EQ with silk tone and high sample rate support.", airwin2rack::Air2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Apicolypse.h" -int Apicolypse_unused = AirwinRegistry::registerAirwindow({"Apicolypse", "Tone Color", 319, "Apicolypse is a re-release of my old API-style color adder, exacly as it was.", airwin2rack::Apicolypse::kNumParameters, []() { return std::make_unique(0); }}); +int Apicolypse_unused = AirwinRegistry::registerAirwindow({"Apicolypse", "Tone Color", 320, "Apicolypse is a re-release of my old API-style color adder, exacly as it was.", airwin2rack::Apicolypse::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/AtmosphereBuss.h" int AtmosphereBuss_unused = AirwinRegistry::registerAirwindow({"AtmosphereBuss", "Consoles", 116, "AtmosphereBuss is Console5 processing with powerful new acoustic distance effects.", airwin2rack::AtmosphereBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/AtmosphereChannel.h" @@ -21,13 +23,13 @@ int AtmosphereChannel_unused = AirwinRegistry::registerAirwindow({"AtmosphereCha #include "autogen_airwin/Aura.h" int Aura_unused = AirwinRegistry::registerAirwindow({"Aura", "Effects", 190, "Aura is a new kind of resonant lowpass EQ.", airwin2rack::Aura::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/AutoPan.h" -int AutoPan_unused = AirwinRegistry::registerAirwindow({"AutoPan", "Stereo", 290, "AutoPan is for getting some organic stereo movement into your mix.", airwin2rack::AutoPan::kNumParameters, []() { return std::make_unique(0); }}); +int AutoPan_unused = AirwinRegistry::registerAirwindow({"AutoPan", "Stereo", 291, "AutoPan is for getting some organic stereo movement into your mix.", airwin2rack::AutoPan::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/AverMatrix.h" int AverMatrix_unused = AirwinRegistry::registerAirwindow({"AverMatrix", "Filter", 215, "AverMatrix turns averaging into a full-featured EQ.", airwin2rack::AverMatrix::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Average.h" int Average_unused = AirwinRegistry::registerAirwindow({"Average", "Filter", 216, "Average is a distinctive sort of lowpass filter.", airwin2rack::Average::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Balanced.h" -int Balanced_unused = AirwinRegistry::registerAirwindow({"Balanced", "Utility", 352, "Balanced lets you run an XLR input into a stereo input, sum it to mono, and use it.", airwin2rack::Balanced::kNumParameters, []() { return std::make_unique(0); }}); +int Balanced_unused = AirwinRegistry::registerAirwindow({"Balanced", "Utility", 353, "Balanced lets you run an XLR input into a stereo input, sum it to mono, and use it.", airwin2rack::Balanced::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BassAmp.h" int BassAmp_unused = AirwinRegistry::registerAirwindow({"BassAmp", "Amp Sims", 34, "BassAmp is an old plugin with new tweaks, that gives some bass guitar tones.", airwin2rack::BassAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BassDrive.h" @@ -57,9 +59,9 @@ int BiquadTriple_unused = AirwinRegistry::registerAirwindow({"BiquadTriple", "Bi #include "autogen_airwin/BitGlitter.h" int BitGlitter_unused = AirwinRegistry::registerAirwindow({"BitGlitter", "Lo-Fi", 238, "BitGlitter is an old-sampler style digital lo-fi plugin.", airwin2rack::BitGlitter::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BitShiftGain.h" -int BitShiftGain_unused = AirwinRegistry::registerAirwindow({"BitShiftGain", "Utility", 336, "BitShiftGain is the ‘One Weird Trick’ perfect boost/pad, but in 6db increments ONLY.", airwin2rack::BitShiftGain::kNumParameters, []() { return std::make_unique(0); }}); +int BitShiftGain_unused = AirwinRegistry::registerAirwindow({"BitShiftGain", "Utility", 337, "BitShiftGain is the ‘One Weird Trick’ perfect boost/pad, but in 6db increments ONLY.", airwin2rack::BitShiftGain::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BitShiftPan.h" -int BitShiftPan_unused = AirwinRegistry::registerAirwindow({"BitShiftPan", "Utility", 335, "BitShiftPan gives you a gain and a pan control that are ONLY done using bit shifts.", airwin2rack::BitShiftPan::kNumParameters, []() { return std::make_unique(0); }}); +int BitShiftPan_unused = AirwinRegistry::registerAirwindow({"BitShiftPan", "Utility", 336, "BitShiftPan gives you a gain and a pan control that are ONLY done using bit shifts.", airwin2rack::BitShiftPan::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Bite.h" int Bite_unused = AirwinRegistry::registerAirwindow({"Bite", "Lo-Fi", 243, "Bite is an unusual edge-maker.", airwin2rack::Bite::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BlockParty.h" @@ -75,7 +77,7 @@ int BrightAmbience3_unused = AirwinRegistry::registerAirwindow({"BrightAmbience3 #include "autogen_airwin/BuildATPDF.h" int BuildATPDF_unused = AirwinRegistry::registerAirwindow({"BuildATPDF", "Dithers", 146, "BuildATPDF is a dither-making toolkit.", airwin2rack::BuildATPDF::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BussColors4.h" -int BussColors4_unused = AirwinRegistry::registerAirwindow({"BussColors4", "Tone Color", 317, "BussColors4 is the Airwindows console emulations, now working up to 192K correctly.", airwin2rack::BussColors4::kNumParameters, []() { return std::make_unique(0); }}); +int BussColors4_unused = AirwinRegistry::registerAirwindow({"BussColors4", "Tone Color", 318, "BussColors4 is the Airwindows console emulations, now working up to 192K correctly.", airwin2rack::BussColors4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ButterComp.h" int ButterComp_unused = AirwinRegistry::registerAirwindow({"ButterComp", "Dynamics", 172, "ButterComp is my softest, smoothest compressor.", airwin2rack::ButterComp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ButterComp2.h" @@ -91,7 +93,7 @@ int CStrip2_unused = AirwinRegistry::registerAirwindow({"CStrip2", "Filter", 209 #include "autogen_airwin/Cabs.h" int Cabs_unused = AirwinRegistry::registerAirwindow({"Cabs", "Amp Sims", 32, "Cabs is an Airwindows guitar speaker cabinet simulator.", airwin2rack::Cabs::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Calibre.h" -int Calibre_unused = AirwinRegistry::registerAirwindow({"Calibre", "Tone Color", 322, "Calibre is a re-release of another old Character plugin.", airwin2rack::Calibre::kNumParameters, []() { return std::make_unique(0); }}); +int Calibre_unused = AirwinRegistry::registerAirwindow({"Calibre", "Tone Color", 323, "Calibre is a re-release of another old Character plugin.", airwin2rack::Calibre::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Capacitor.h" int Capacitor_unused = AirwinRegistry::registerAirwindow({"Capacitor", "Filter", 222, "Capacitor is a lowpass/highpass filter of a new type.", airwin2rack::Capacitor::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Capacitor2.h" @@ -101,17 +103,17 @@ int Chamber_unused = AirwinRegistry::registerAirwindow({"Chamber", "Reverb", 264 #include "autogen_airwin/Chamber2.h" int Chamber2_unused = AirwinRegistry::registerAirwindow({"Chamber2", "Reverb", 263, "Chamber2 is a feedforward reverb, a blur delay, and a glitch topping!", airwin2rack::Chamber2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Channel4.h" -int Channel4_unused = AirwinRegistry::registerAirwindow({"Channel4", "Tone Color", 331, "Channel4 is a tone coloring plugin that gives more of an analog feel.", airwin2rack::Channel4::kNumParameters, []() { return std::make_unique(0); }}); +int Channel4_unused = AirwinRegistry::registerAirwindow({"Channel4", "Tone Color", 332, "Channel4 is a tone coloring plugin that gives more of an analog feel.", airwin2rack::Channel4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Channel5.h" -int Channel5_unused = AirwinRegistry::registerAirwindow({"Channel5", "Tone Color", 330, "Channel5 is Channel for 2018, with new subtleties.", airwin2rack::Channel5::kNumParameters, []() { return std::make_unique(0); }}); +int Channel5_unused = AirwinRegistry::registerAirwindow({"Channel5", "Tone Color", 331, "Channel5 is Channel for 2018, with new subtleties.", airwin2rack::Channel5::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Channel6.h" -int Channel6_unused = AirwinRegistry::registerAirwindow({"Channel6", "Tone Color", 329, "Channel6 uses the Spiral algorithm.", airwin2rack::Channel6::kNumParameters, []() { return std::make_unique(0); }}); +int Channel6_unused = AirwinRegistry::registerAirwindow({"Channel6", "Tone Color", 330, "Channel6 uses the Spiral algorithm.", airwin2rack::Channel6::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Channel7.h" -int Channel7_unused = AirwinRegistry::registerAirwindow({"Channel7", "Tone Color", 328, "Channel7 improves slew clipping and lets you blend Channel 6 and 5.", airwin2rack::Channel7::kNumParameters, []() { return std::make_unique(0); }}); +int Channel7_unused = AirwinRegistry::registerAirwindow({"Channel7", "Tone Color", 329, "Channel7 improves slew clipping and lets you blend Channel 6 and 5.", airwin2rack::Channel7::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Channel8.h" -int Channel8_unused = AirwinRegistry::registerAirwindow({"Channel8", "Tone Color", 327, "Channel8 is Channel7 with updates from Capacitor2 and Slew3. More and better of what Channel is.", airwin2rack::Channel8::kNumParameters, []() { return std::make_unique(0); }}); +int Channel8_unused = AirwinRegistry::registerAirwindow({"Channel8", "Tone Color", 328, "Channel8 is Channel7 with updates from Capacitor2 and Slew3. More and better of what Channel is.", airwin2rack::Channel8::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Channel9.h" -int Channel9_unused = AirwinRegistry::registerAirwindow({"Channel9", "Tone Color", 318, "Channel9 is Channel8 with ultrasonic filtering, and new Teac and Mackie 'low end' settings.", airwin2rack::Channel9::kNumParameters, []() { return std::make_unique(0); }}); +int Channel9_unused = AirwinRegistry::registerAirwindow({"Channel9", "Tone Color", 319, "Channel9 is Channel8 with ultrasonic filtering, and new Teac and Mackie 'low end' settings.", airwin2rack::Channel9::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Chorus.h" int Chorus_unused = AirwinRegistry::registerAirwindow({"Chorus", "Ambience", 22, "Chorus is a mono chorus, also works as a vibrato.", airwin2rack::Chorus::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ChorusEnsemble.h" @@ -119,7 +121,7 @@ int ChorusEnsemble_unused = AirwinRegistry::registerAirwindow({"ChorusEnsemble", #include "autogen_airwin/ChromeOxide.h" int ChromeOxide_unused = AirwinRegistry::registerAirwindow({"ChromeOxide", "Lo-Fi", 240, "ChromeOxide is an alternate path to vibey old tape sonics.", airwin2rack::ChromeOxide::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Cider.h" -int Cider_unused = AirwinRegistry::registerAirwindow({"Cider", "Tone Color", 323, "Cider is a re-release of another old Character plugin.", airwin2rack::Cider::kNumParameters, []() { return std::make_unique(0); }}); +int Cider_unused = AirwinRegistry::registerAirwindow({"Cider", "Tone Color", 324, "Cider is a re-release of another old Character plugin.", airwin2rack::Cider::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ClearCoat.h" int ClearCoat_unused = AirwinRegistry::registerAirwindow({"ClearCoat", "Ambience", 0, "ClearCoat is an array of bright ambience reverbs.", airwin2rack::ClearCoat::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ClipOnly2.h" @@ -129,9 +131,9 @@ int ClipSoftly_unused = AirwinRegistry::registerAirwindow({"ClipSoftly", "Clippi #include "autogen_airwin/CloudCoat.h" int CloudCoat_unused = AirwinRegistry::registerAirwindow({"CloudCoat", "Effects", 184, "CloudCoat is an array of blur effects with a taste for evil.", airwin2rack::CloudCoat::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Coils.h" -int Coils_unused = AirwinRegistry::registerAirwindow({"Coils", "Subtlety", 306, "Coils models the types of distortion you'll find in transformers.", airwin2rack::Coils::kNumParameters, []() { return std::make_unique(0); }}); +int Coils_unused = AirwinRegistry::registerAirwindow({"Coils", "Subtlety", 307, "Coils models the types of distortion you'll find in transformers.", airwin2rack::Coils::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Coils2.h" -int Coils2_unused = AirwinRegistry::registerAirwindow({"Coils2", "Subtlety", 301, "Coils2 is a transformer overdrive emulator.", airwin2rack::Coils2::kNumParameters, []() { return std::make_unique(0); }}); +int Coils2_unused = AirwinRegistry::registerAirwindow({"Coils2", "Subtlety", 302, "Coils2 is a transformer overdrive emulator.", airwin2rack::Coils2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Cojones.h" int Cojones_unused = AirwinRegistry::registerAirwindow({"Cojones", "Lo-Fi", 241, "Cojones is a new kind of distorty.", airwin2rack::Cojones::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Compresaturator.h" @@ -197,15 +199,15 @@ int ConsoleMDBuss_unused = AirwinRegistry::registerAirwindow({"ConsoleMDBuss", " #include "autogen_airwin/ConsoleMDChannel.h" int ConsoleMDChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleMDChannel", "Consoles", 83, "ConsoleMDChannel goes for the tone shaping of the classic MCI console!", airwin2rack::ConsoleMDChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Creature.h" -int Creature_unused = AirwinRegistry::registerAirwindow({"Creature", "Saturation", 271, "Creature is a soft slew saturator, a new class of noisechanger.", airwin2rack::Creature::kNumParameters, []() { return std::make_unique(0); }}); +int Creature_unused = AirwinRegistry::registerAirwindow({"Creature", "Saturation", 272, "Creature is a soft slew saturator, a new class of noisechanger.", airwin2rack::Creature::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/CrickBass.h" int CrickBass_unused = AirwinRegistry::registerAirwindow({"CrickBass", "Amp Sims", 28, "CrickBass is a flexible but aggressive bass tone for dual pickups.", airwin2rack::CrickBass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/CrunchyGrooveWear.h" int CrunchyGrooveWear_unused = AirwinRegistry::registerAirwindow({"CrunchyGrooveWear", "Lo-Fi", 234, "CrunchyGrooveWear is a version of GrooveWear for more edge and distortion.", airwin2rack::CrunchyGrooveWear::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Crystal.h" -int Crystal_unused = AirwinRegistry::registerAirwindow({"Crystal", "Tone Color", 324, "Crystal is a tone shaper and buss soft-clipper.", airwin2rack::Crystal::kNumParameters, []() { return std::make_unique(0); }}); +int Crystal_unused = AirwinRegistry::registerAirwindow({"Crystal", "Tone Color", 325, "Crystal is a tone shaper and buss soft-clipper.", airwin2rack::Crystal::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DCVoltage.h" -int DCVoltage_unused = AirwinRegistry::registerAirwindow({"DCVoltage", "Utility", 345, "DCVoltage is literally a DC control voltage, in a plugin.", airwin2rack::DCVoltage::kNumParameters, []() { return std::make_unique(0); }}); +int DCVoltage_unused = AirwinRegistry::registerAirwindow({"DCVoltage", "Utility", 346, "DCVoltage is literally a DC control voltage, in a plugin.", airwin2rack::DCVoltage::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Dark.h" int Dark_unused = AirwinRegistry::registerAirwindow({"Dark", "Dithers", 133, "Dark is a wordlength reducer that gives your music a blacker backdrop.", airwin2rack::Dark::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DarkNoise.h" @@ -227,9 +229,9 @@ int Density_unused = AirwinRegistry::registerAirwindow({"Density", "Distortion", #include "autogen_airwin/Density2.h" int Density2_unused = AirwinRegistry::registerAirwindow({"Density2", "Distortion", 126, "Density2 is a different color for Density, some old code I had that people wanted.", airwin2rack::Density2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Desk.h" -int Desk_unused = AirwinRegistry::registerAirwindow({"Desk", "Subtlety", 307, "Desk is classic Airwindows subtle analog modeling.", airwin2rack::Desk::kNumParameters, []() { return std::make_unique(0); }}); +int Desk_unused = AirwinRegistry::registerAirwindow({"Desk", "Subtlety", 308, "Desk is classic Airwindows subtle analog modeling.", airwin2rack::Desk::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Desk4.h" -int Desk4_unused = AirwinRegistry::registerAirwindow({"Desk4", "Saturation", 283, "Desk4 is distinctive analog coloration (a tuneable version of the control-less Desk plugins)", airwin2rack::Desk4::kNumParameters, []() { return std::make_unique(0); }}); +int Desk4_unused = AirwinRegistry::registerAirwindow({"Desk4", "Saturation", 284, "Desk4 is distinctive analog coloration (a tuneable version of the control-less Desk plugins)", airwin2rack::Desk4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DigitalBlack.h" int DigitalBlack_unused = AirwinRegistry::registerAirwindow({"DigitalBlack", "Dynamics", 160, "DigitalBlack is a quick, staccato gate.", airwin2rack::DigitalBlack::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Dirt.h" @@ -267,15 +269,15 @@ int DustBunny_unused = AirwinRegistry::registerAirwindow({"DustBunny", "Lo-Fi", #include "autogen_airwin/Dynamics.h" int Dynamics_unused = AirwinRegistry::registerAirwindow({"Dynamics", "Dynamics", 158, "Dynamics is a combination compressor gate.", airwin2rack::Dynamics::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Dyno.h" -int Dyno_unused = AirwinRegistry::registerAirwindow({"Dyno", "Saturation", 280, "Dyno is a lot like Mojo, but for intensity instead of loudness.", airwin2rack::Dyno::kNumParameters, []() { return std::make_unique(0); }}); +int Dyno_unused = AirwinRegistry::registerAirwindow({"Dyno", "Saturation", 281, "Dyno is a lot like Mojo, but for intensity instead of loudness.", airwin2rack::Dyno::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/EQ.h" int EQ_unused = AirwinRegistry::registerAirwindow({"EQ", "Filter", 221, "EQ is just the EQ parts of CStrip.", airwin2rack::EQ::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/EdIsDim.h" -int EdIsDim_unused = AirwinRegistry::registerAirwindow({"EdIsDim", "Utility", 346, "EdIsDim is mid/side conversion utility plugins.", airwin2rack::EdIsDim::kNumParameters, []() { return std::make_unique(0); }}); +int EdIsDim_unused = AirwinRegistry::registerAirwindow({"EdIsDim", "Utility", 347, "EdIsDim is mid/side conversion utility plugins.", airwin2rack::EdIsDim::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Edge.h" int Edge_unused = AirwinRegistry::registerAirwindow({"Edge", "Distortion", 122, "Edge is a seven-stage distortion with Hypersonic filtering and tone shaping controls.", airwin2rack::Edge::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Elation.h" -int Elation_unused = AirwinRegistry::registerAirwindow({"Elation", "Tone Color", 321, "Elation is a re-release of another old Character plugin.", airwin2rack::Elation::kNumParameters, []() { return std::make_unique(0); }}); +int Elation_unused = AirwinRegistry::registerAirwindow({"Elation", "Tone Color", 322, "Elation is a re-release of another old Character plugin.", airwin2rack::Elation::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ElectroHat.h" int ElectroHat_unused = AirwinRegistry::registerAirwindow({"ElectroHat", "Noise", 251, "ElectroHat is a hi-hat tone generator that uses the original sound as a control voltage.", airwin2rack::ElectroHat::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Energy.h" @@ -289,33 +291,35 @@ int EveryConsole_unused = AirwinRegistry::registerAirwindow({"EveryConsole", "Co #include "autogen_airwin/EverySlew.h" int EverySlew_unused = AirwinRegistry::registerAirwindow({"EverySlew", "Brightness", 57, "EverySlew is a wide variety of unique sound processing tools.", airwin2rack::EverySlew::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/EveryTrim.h" -int EveryTrim_unused = AirwinRegistry::registerAirwindow({"EveryTrim", "Utility", 339, "EveryTrim is Left/Right, Mid/Side, and Master in one plugin.", airwin2rack::EveryTrim::kNumParameters, []() { return std::make_unique(0); }}); +int EveryTrim_unused = AirwinRegistry::registerAirwindow({"EveryTrim", "Utility", 340, "EveryTrim is Left/Right, Mid/Side, and Master in one plugin.", airwin2rack::EveryTrim::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Exciter.h" int Exciter_unused = AirwinRegistry::registerAirwindow({"Exciter", "Effects", 195, "Exciter is an Aural Exciter plugin that can be both subtle and extreme.", airwin2rack::Exciter::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Facet.h" int Facet_unused = AirwinRegistry::registerAirwindow({"Facet", "Effects", 198, "Facet is a new kind of hard clip that adds two sharp corners into the wave.", airwin2rack::Facet::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/FathomFive.h" int FathomFive_unused = AirwinRegistry::registerAirwindow({"FathomFive", "Bass", 42, "FathomFive is a way of supplementing extreme bass that’s not just EQ.", airwin2rack::FathomFive::kNumParameters, []() { return std::make_unique(0); }}); +#include "autogen_airwin/FinalClip.h" +int FinalClip_unused = AirwinRegistry::registerAirwindow({"FinalClip", "Unclassified", -1, "", airwin2rack::FinalClip::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/FireAmp.h" int FireAmp_unused = AirwinRegistry::registerAirwindow({"FireAmp", "Amp Sims", 26, "FireAmp is a bright, loud, tubey amp sim for leads and dirt guitar.", airwin2rack::FireAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Flipity.h" -int Flipity_unused = AirwinRegistry::registerAirwindow({"Flipity", "Utility", 353, "Flipity is a channel phase flipper/swapper utility.", airwin2rack::Flipity::kNumParameters, []() { return std::make_unique(0); }}); +int Flipity_unused = AirwinRegistry::registerAirwindow({"Flipity", "Utility", 354, "Flipity is a channel phase flipper/swapper utility.", airwin2rack::Flipity::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Floor.h" int Floor_unused = AirwinRegistry::registerAirwindow({"Floor", "Bass", 40, "Floor is fake bottom octave for fun and profit!", airwin2rack::Floor::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Flutter.h" int Flutter_unused = AirwinRegistry::registerAirwindow({"Flutter", "Lo-Fi", 233, "Flutter is the most recent Airwindows flutter, standalone.", airwin2rack::Flutter::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Focus.h" -int Focus_unused = AirwinRegistry::registerAirwindow({"Focus", "Saturation", 278, "Focus brings out clarity by distorting. Aggressive, subtle, flexible.", airwin2rack::Focus::kNumParameters, []() { return std::make_unique(0); }}); +int Focus_unused = AirwinRegistry::registerAirwindow({"Focus", "Saturation", 279, "Focus brings out clarity by distorting. Aggressive, subtle, flexible.", airwin2rack::Focus::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Fracture.h" int Fracture_unused = AirwinRegistry::registerAirwindow({"Fracture", "Effects", 199, "Fracture is a frequency multiplier/waveshaper with a soft disruption to the sound.", airwin2rack::Fracture::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Fracture2.h" int Fracture2_unused = AirwinRegistry::registerAirwindow({"Fracture2", "Effects", 185, "Fracture2 is a wavefolder that allows more extreme disruption.", airwin2rack::Fracture2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/FromTape.h" -int FromTape_unused = AirwinRegistry::registerAirwindow({"FromTape", "Tape", 311, "FromTape is a minimalist, cleaner analog tape emulation.", airwin2rack::FromTape::kNumParameters, []() { return std::make_unique(0); }}); +int FromTape_unused = AirwinRegistry::registerAirwindow({"FromTape", "Tape", 312, "FromTape is a minimalist, cleaner analog tape emulation.", airwin2rack::FromTape::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Galactic.h" -int Galactic_unused = AirwinRegistry::registerAirwindow({"Galactic", "Reverb", 259, "Galactic is a super-reverb designed specially for pads and space ambient.", airwin2rack::Galactic::kNumParameters, []() { return std::make_unique(0); }}); +int Galactic_unused = AirwinRegistry::registerAirwindow({"Galactic", "Reverb", 260, "Galactic is a super-reverb designed specially for pads and space ambient.", airwin2rack::Galactic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Galactic2.h" -int Galactic2_unused = AirwinRegistry::registerAirwindow({"Galactic2", "Reverb", 260, "Galactic2 is a super-reverb REdesigned specially for pads and space ambient.", airwin2rack::Galactic2::kNumParameters, []() { return std::make_unique(0); }}); +int Galactic2_unused = AirwinRegistry::registerAirwindow({"Galactic2", "Reverb", 261, "Galactic2 is a super-reverb REdesigned specially for pads and space ambient.", airwin2rack::Galactic2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/GalacticVibe.h" int GalacticVibe_unused = AirwinRegistry::registerAirwindow({"GalacticVibe", "Effects", 183, "GalacticVibe is the stereo vibrato from the original Galactic reverb.", airwin2rack::GalacticVibe::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Gatelope.h" @@ -325,7 +329,7 @@ int GlitchShifter_unused = AirwinRegistry::registerAirwindow({"GlitchShifter", " #include "autogen_airwin/GoldenSlew.h" int GoldenSlew_unused = AirwinRegistry::registerAirwindow({"GoldenSlew", "Brightness", 51, "GoldenSlew is a multistage slew clipper based on the Golden Ratio.", airwin2rack::GoldenSlew::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Golem.h" -int Golem_unused = AirwinRegistry::registerAirwindow({"Golem", "Utility", 344, "Golem lets you blend a stereo track of two mics on an amp.", airwin2rack::Golem::kNumParameters, []() { return std::make_unique(0); }}); +int Golem_unused = AirwinRegistry::registerAirwindow({"Golem", "Utility", 345, "Golem lets you blend a stereo track of two mics on an amp.", airwin2rack::Golem::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/GrindAmp.h" int GrindAmp_unused = AirwinRegistry::registerAirwindow({"GrindAmp", "Amp Sims", 25, "GrindAmp is a heavier amp sim for many purposes.", airwin2rack::GrindAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Gringer.h" @@ -337,7 +341,7 @@ int GuitarConditioner_unused = AirwinRegistry::registerAirwindow({"GuitarConditi #include "autogen_airwin/HardVacuum.h" int HardVacuum_unused = AirwinRegistry::registerAirwindow({"HardVacuum", "Distortion", 130, "HardVacuum is tube style saturation effects.", airwin2rack::HardVacuum::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/HermeTrim.h" -int HermeTrim_unused = AirwinRegistry::registerAirwindow({"HermeTrim", "Utility", 340, "HermeTrim is Very Fine Adjustments, otherwise just like EveryTrim.", airwin2rack::HermeTrim::kNumParameters, []() { return std::make_unique(0); }}); +int HermeTrim_unused = AirwinRegistry::registerAirwindow({"HermeTrim", "Utility", 341, "HermeTrim is Very Fine Adjustments, otherwise just like EveryTrim.", airwin2rack::HermeTrim::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Hermepass.h" int Hermepass_unused = AirwinRegistry::registerAirwindow({"Hermepass", "Bass", 36, "Hermepass is a mastering highpass to set by ear only.", airwin2rack::Hermepass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/HighGlossDither.h" @@ -355,43 +359,43 @@ int Holt2_unused = AirwinRegistry::registerAirwindow({"Holt2", "Filter", 212, "H #include "autogen_airwin/Hombre.h" int Hombre_unused = AirwinRegistry::registerAirwindow({"Hombre", "Ambience", 17, "Hombre is atmosphere and texture (through very short delays).", airwin2rack::Hombre::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Huge.h" -int Huge_unused = AirwinRegistry::registerAirwindow({"Huge", "Saturation", 272, "Huge is a dirty, dirty loudenator.", airwin2rack::Huge::kNumParameters, []() { return std::make_unique(0); }}); +int Huge_unused = AirwinRegistry::registerAirwindow({"Huge", "Saturation", 273, "Huge is a dirty, dirty loudenator.", airwin2rack::Huge::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Hull.h" int Hull_unused = AirwinRegistry::registerAirwindow({"Hull", "Filter", 220, "Hull is an alternate form of highpass/lowpass filter.", airwin2rack::Hull::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Hull2.h" int Hull2_unused = AirwinRegistry::registerAirwindow({"Hull2", "Filter", 218, "Hull2 is a very clear three-band EQ.", airwin2rack::Hull2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Hype.h" -int Hype_unused = AirwinRegistry::registerAirwindow({"Hype", "Subtlety", 295, "Hype is a treble softening experiment gone strangely awry :)", airwin2rack::Hype::kNumParameters, []() { return std::make_unique(0); }}); +int Hype_unused = AirwinRegistry::registerAirwindow({"Hype", "Subtlety", 296, "Hype is a treble softening experiment gone strangely awry :)", airwin2rack::Hype::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/HypersonX.h" int HypersonX_unused = AirwinRegistry::registerAirwindow({"HypersonX", "Brightness", 67, "HypersonX is like UltrasonX but with seven stages instead of five.", airwin2rack::HypersonX::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Hypersonic.h" int Hypersonic_unused = AirwinRegistry::registerAirwindow({"Hypersonic", "Brightness", 66, "Hypersonic is Ultrasonic, but steeper and higher cutoff.", airwin2rack::Hypersonic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Infinity.h" -int Infinity_unused = AirwinRegistry::registerAirwindow({"Infinity", "Reverb", 267, "Infinity is a MatrixVerb specifically designed to sustain and layer sounds forever.", airwin2rack::Infinity::kNumParameters, []() { return std::make_unique(0); }}); +int Infinity_unused = AirwinRegistry::registerAirwindow({"Infinity", "Reverb", 268, "Infinity is a MatrixVerb specifically designed to sustain and layer sounds forever.", airwin2rack::Infinity::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Infinity2.h" int Infinity2_unused = AirwinRegistry::registerAirwindow({"Infinity2", "Reverb", 265, "Infinity2 expands Infinity with more tone shaping and a much-requested kill-switch!", airwin2rack::Infinity2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Inflamer.h" -int Inflamer_unused = AirwinRegistry::registerAirwindow({"Inflamer", "Subtlety", 297, "Inflamer is an Airwindowsized take on the waveshapers in Oxford Inflator.", airwin2rack::Inflamer::kNumParameters, []() { return std::make_unique(0); }}); +int Inflamer_unused = AirwinRegistry::registerAirwindow({"Inflamer", "Subtlety", 298, "Inflamer is an Airwindowsized take on the waveshapers in Oxford Inflator.", airwin2rack::Inflamer::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Infrasonic.h" int Infrasonic_unused = AirwinRegistry::registerAirwindow({"Infrasonic", "Bass", 41, "Infrasonic is a very steep subsonic filter, built like Ultrasonic.", airwin2rack::Infrasonic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Interstage.h" -int Interstage_unused = AirwinRegistry::registerAirwindow({"Interstage", "Subtlety", 302, "Interstage is a subtle and sophisticated analogifier.", airwin2rack::Interstage::kNumParameters, []() { return std::make_unique(0); }}); +int Interstage_unused = AirwinRegistry::registerAirwindow({"Interstage", "Subtlety", 303, "Interstage is a subtle and sophisticated analogifier.", airwin2rack::Interstage::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/IronOxide5.h" -int IronOxide5_unused = AirwinRegistry::registerAirwindow({"IronOxide5", "Tape", 314, "IronOxide5 is the old school, heavily colored Airwindows tape emulation.", airwin2rack::IronOxide5::kNumParameters, []() { return std::make_unique(0); }}); +int IronOxide5_unused = AirwinRegistry::registerAirwindow({"IronOxide5", "Tape", 315, "IronOxide5 is the old school, heavily colored Airwindows tape emulation.", airwin2rack::IronOxide5::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/IronOxideClassic.h" -int IronOxideClassic_unused = AirwinRegistry::registerAirwindow({"IronOxideClassic", "Tape", 316, "IronOxideClassic is the purer, simpler, early form of Iron Oxide before all the features.", airwin2rack::IronOxideClassic::kNumParameters, []() { return std::make_unique(0); }}); +int IronOxideClassic_unused = AirwinRegistry::registerAirwindow({"IronOxideClassic", "Tape", 317, "IronOxideClassic is the purer, simpler, early form of Iron Oxide before all the features.", airwin2rack::IronOxideClassic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/IronOxideClassic2.h" -int IronOxideClassic2_unused = AirwinRegistry::registerAirwindow({"IronOxideClassic2", "Tape", 313, "IronOxideClassic2 is my bandpassy tape sim, updated for high sample rate and aliasing control.", airwin2rack::IronOxideClassic2::kNumParameters, []() { return std::make_unique(0); }}); +int IronOxideClassic2_unused = AirwinRegistry::registerAirwindow({"IronOxideClassic2", "Tape", 314, "IronOxideClassic2 is my bandpassy tape sim, updated for high sample rate and aliasing control.", airwin2rack::IronOxideClassic2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Isolator.h" int Isolator_unused = AirwinRegistry::registerAirwindow({"Isolator", "Filter", 223, "Isolator is a steep highpass or lowpass filter, like you might find in a speaker crossover.", airwin2rack::Isolator::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Isolator2.h" int Isolator2_unused = AirwinRegistry::registerAirwindow({"Isolator2", "Filter", 211, "Isolator2 is Isolator, but with control smoothing and a new resonance booster.", airwin2rack::Isolator2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/LRFlipTimer.h" -int LRFlipTimer_unused = AirwinRegistry::registerAirwindow({"LRFlipTimer", "Stereo", 291, "LRFlipTimer is a utility that swaps Left with Right every few (1-10) minutes.", airwin2rack::LRFlipTimer::kNumParameters, []() { return std::make_unique(0); }}); +int LRFlipTimer_unused = AirwinRegistry::registerAirwindow({"LRFlipTimer", "Stereo", 292, "LRFlipTimer is a utility that swaps Left with Right every few (1-10) minutes.", airwin2rack::LRFlipTimer::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/LeadAmp.h" int LeadAmp_unused = AirwinRegistry::registerAirwindow({"LeadAmp", "Amp Sims", 27, "LeadAmp is an amp sim with a clear, penetrating, vocal tone.", airwin2rack::LeadAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/LeftoMono.h" -int LeftoMono_unused = AirwinRegistry::registerAirwindow({"LeftoMono", "Utility", 351, "LeftoMono copies one channel to both, losslessly.", airwin2rack::LeftoMono::kNumParameters, []() { return std::make_unique(0); }}); +int LeftoMono_unused = AirwinRegistry::registerAirwindow({"LeftoMono", "Utility", 352, "LeftoMono copies one channel to both, losslessly.", airwin2rack::LeftoMono::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/LilAmp.h" int LilAmp_unused = AirwinRegistry::registerAirwindow({"LilAmp", "Amp Sims", 29, "LilAmp is a tiny amp sim, like a little bitty practice amp without that much gain.", airwin2rack::LilAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Logical4.h" @@ -403,9 +407,9 @@ int Lowpass_unused = AirwinRegistry::registerAirwindow({"Lowpass", "Filter", 230 #include "autogen_airwin/Lowpass2.h" int Lowpass2_unused = AirwinRegistry::registerAirwindow({"Lowpass2", "Filter", 226, "Lowpass2 is an unusual-sounding variable-slope lowpass filter.", airwin2rack::Lowpass2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Luxor.h" -int Luxor_unused = AirwinRegistry::registerAirwindow({"Luxor", "Tone Color", 326, "Luxor is a re-release of another old Character plugin.", airwin2rack::Luxor::kNumParameters, []() { return std::make_unique(0); }}); +int Luxor_unused = AirwinRegistry::registerAirwindow({"Luxor", "Tone Color", 327, "Luxor is a re-release of another old Character plugin.", airwin2rack::Luxor::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MSFlipTimer.h" -int MSFlipTimer_unused = AirwinRegistry::registerAirwindow({"MSFlipTimer", "Stereo", 292, "MSFlipTimer is a utility that swaps stereo with mono every few (1-10) minutes.", airwin2rack::MSFlipTimer::kNumParameters, []() { return std::make_unique(0); }}); +int MSFlipTimer_unused = AirwinRegistry::registerAirwindow({"MSFlipTimer", "Stereo", 293, "MSFlipTimer is a utility that swaps stereo with mono every few (1-10) minutes.", airwin2rack::MSFlipTimer::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MV.h" int MV_unused = AirwinRegistry::registerAirwindow({"MV", "Ambience", 9, "MV is a dual-mono reverb based on BitShiftGain and the old Midiverbs.", airwin2rack::MV::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MV2.h" @@ -415,31 +419,31 @@ int MackEQ_unused = AirwinRegistry::registerAirwindow({"MackEQ", "Filter", 217, #include "autogen_airwin/Mackity.h" int Mackity_unused = AirwinRegistry::registerAirwindow({"Mackity", "Distortion", 124, "Mackity is an emulation of the input stage of a vintage Mackie 1202!", airwin2rack::Mackity::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MatrixVerb.h" -int MatrixVerb_unused = AirwinRegistry::registerAirwindow({"MatrixVerb", "Reverb", 268, "MatrixVerb is a wildly adjustable, strangely colorful reverb for deep and flexible spaces.", airwin2rack::MatrixVerb::kNumParameters, []() { return std::make_unique(0); }}); +int MatrixVerb_unused = AirwinRegistry::registerAirwindow({"MatrixVerb", "Reverb", 269, "MatrixVerb is a wildly adjustable, strangely colorful reverb for deep and flexible spaces.", airwin2rack::MatrixVerb::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Melt.h" int Melt_unused = AirwinRegistry::registerAirwindow({"Melt", "Ambience", 7, "Melt is a wobbly chorusy weird diffuse effect.", airwin2rack::Melt::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MidAmp.h" int MidAmp_unused = AirwinRegistry::registerAirwindow({"MidAmp", "Amp Sims", 30, "MidAmp is a clean amp sim meant to work like a loud Twin or something of that nature.", airwin2rack::MidAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MidSide.h" -int MidSide_unused = AirwinRegistry::registerAirwindow({"MidSide", "Utility", 347, "MidSide is the other side of the EdIsDim mid/side conversion utility plugin.", airwin2rack::MidSide::kNumParameters, []() { return std::make_unique(0); }}); +int MidSide_unused = AirwinRegistry::registerAirwindow({"MidSide", "Utility", 348, "MidSide is the other side of the EdIsDim mid/side conversion utility plugin.", airwin2rack::MidSide::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MoNoam.h" -int MoNoam_unused = AirwinRegistry::registerAirwindow({"MoNoam", "Utility", 354, "MoNoam gives you variations on mono, mid, and side in different channels.", airwin2rack::MoNoam::kNumParameters, []() { return std::make_unique(0); }}); +int MoNoam_unused = AirwinRegistry::registerAirwindow({"MoNoam", "Utility", 355, "MoNoam gives you variations on mono, mid, and side in different channels.", airwin2rack::MoNoam::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Mojo.h" -int Mojo_unused = AirwinRegistry::registerAirwindow({"Mojo", "Saturation", 279, "Mojo is a biggenator that also works as a loudenator.", airwin2rack::Mojo::kNumParameters, []() { return std::make_unique(0); }}); +int Mojo_unused = AirwinRegistry::registerAirwindow({"Mojo", "Saturation", 280, "Mojo is a biggenator that also works as a loudenator.", airwin2rack::Mojo::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Monitoring.h" -int Monitoring_unused = AirwinRegistry::registerAirwindow({"Monitoring", "Utility", 334, "Monitoring is your one-stop shop for final 2-buss work!", airwin2rack::Monitoring::kNumParameters, []() { return std::make_unique(0); }}); +int Monitoring_unused = AirwinRegistry::registerAirwindow({"Monitoring", "Utility", 335, "Monitoring is your one-stop shop for final 2-buss work!", airwin2rack::Monitoring::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Monitoring2.h" -int Monitoring2_unused = AirwinRegistry::registerAirwindow({"Monitoring2", "Utility", 333, "Monitoring2 is Monitoring, but with Dark as the wordlength reducer.", airwin2rack::Monitoring2::kNumParameters, []() { return std::make_unique(0); }}); +int Monitoring2_unused = AirwinRegistry::registerAirwindow({"Monitoring2", "Utility", 334, "Monitoring2 is Monitoring, but with Dark as the wordlength reducer.", airwin2rack::Monitoring2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Monitoring3.h" -int Monitoring3_unused = AirwinRegistry::registerAirwindow({"Monitoring3", "Utility", 332, "Monitoring3 is Monitoring, but with Ten Nines into Dark as the wordlength reducer.", airwin2rack::Monitoring3::kNumParameters, []() { return std::make_unique(0); }}); +int Monitoring3_unused = AirwinRegistry::registerAirwindow({"Monitoring3", "Utility", 333, "Monitoring3 is Monitoring, but with Ten Nines into Dark as the wordlength reducer.", airwin2rack::Monitoring3::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MultiBandDistortion.h" int MultiBandDistortion_unused = AirwinRegistry::registerAirwindow({"MultiBandDistortion", "Distortion", 132, "MultiBandDistortion is an old weird gnarly sound wrecker :)", airwin2rack::MultiBandDistortion::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NCSeventeen.h" -int NCSeventeen_unused = AirwinRegistry::registerAirwindow({"NCSeventeen", "Saturation", 273, "NCSeventeen is Dirty Loud!", airwin2rack::NCSeventeen::kNumParameters, []() { return std::make_unique(0); }}); +int NCSeventeen_unused = AirwinRegistry::registerAirwindow({"NCSeventeen", "Saturation", 274, "NCSeventeen is Dirty Loud!", airwin2rack::NCSeventeen::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NaturalizeDither.h" int NaturalizeDither_unused = AirwinRegistry::registerAirwindow({"NaturalizeDither", "Dithers", 153, "NaturalizeDither is deterministic dither that uses Benford Realness calculations for each sample.", airwin2rack::NaturalizeDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Neverland.h" -int Neverland_unused = AirwinRegistry::registerAirwindow({"Neverland", "Tone Color", 320, "Neverland is a re-release of my old Neve-style color adder, exacly as it was.", airwin2rack::Neverland::kNumParameters, []() { return std::make_unique(0); }}); +int Neverland_unused = AirwinRegistry::registerAirwindow({"Neverland", "Tone Color", 321, "Neverland is a re-release of my old Neve-style color adder, exacly as it was.", airwin2rack::Neverland::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Nikola.h" int Nikola_unused = AirwinRegistry::registerAirwindow({"Nikola", "Effects", 203, "Nikola is an Audio Tesla Coil plugin! Note: audio tesla coils don't sound nice.", airwin2rack::Nikola::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NodeDither.h" @@ -471,11 +475,11 @@ int PaulDither_unused = AirwinRegistry::registerAirwindow({"PaulDither", "Dither #include "autogen_airwin/PaulWide.h" int PaulWide_unused = AirwinRegistry::registerAirwindow({"PaulWide", "Dithers", 134, "PaulWide is a highpassed TPDF wide dither. (quieter, airier AND wider)", airwin2rack::PaulWide::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PeaksOnly.h" -int PeaksOnly_unused = AirwinRegistry::registerAirwindow({"PeaksOnly", "Utility", 343, "PeaksOnly is a transformative mix check tool.", airwin2rack::PeaksOnly::kNumParameters, []() { return std::make_unique(0); }}); +int PeaksOnly_unused = AirwinRegistry::registerAirwindow({"PeaksOnly", "Utility", 344, "PeaksOnly is a transformative mix check tool.", airwin2rack::PeaksOnly::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pear.h" int Pear_unused = AirwinRegistry::registerAirwindow({"Pear", "Filter", 206, "Pear is the testbed for a new filter, implemented as a highpass/lowpass shelf.", airwin2rack::Pear::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PhaseNudge.h" -int PhaseNudge_unused = AirwinRegistry::registerAirwindow({"PhaseNudge", "Subtlety", 303, "PhaseNudge is a phase rotator/allpass filter.", airwin2rack::PhaseNudge::kNumParameters, []() { return std::make_unique(0); }}); +int PhaseNudge_unused = AirwinRegistry::registerAirwindow({"PhaseNudge", "Subtlety", 304, "PhaseNudge is a phase rotator/allpass filter.", airwin2rack::PhaseNudge::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PitchDelay.h" int PitchDelay_unused = AirwinRegistry::registerAirwindow({"PitchDelay", "Ambience", 3, "PitchDelay is TapeDelay2 but with pitch shift instead of flutter.", airwin2rack::PitchDelay::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PitchNasty.h" @@ -483,7 +487,7 @@ int PitchNasty_unused = AirwinRegistry::registerAirwindow({"PitchNasty", "Effect #include "autogen_airwin/PlatinumSlew.h" int PlatinumSlew_unused = AirwinRegistry::registerAirwindow({"PlatinumSlew", "Brightness", 49, "PlatinumSlew is the best easy-to-use slew clipper.", airwin2rack::PlatinumSlew::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PocketVerbs.h" -int PocketVerbs_unused = AirwinRegistry::registerAirwindow({"PocketVerbs", "Reverb", 269, "PocketVerbs is my popular old special effects reverbs plugin!", airwin2rack::PocketVerbs::kNumParameters, []() { return std::make_unique(0); }}); +int PocketVerbs_unused = AirwinRegistry::registerAirwindow({"PocketVerbs", "Reverb", 270, "PocketVerbs is my popular old special effects reverbs plugin!", airwin2rack::PocketVerbs::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pockey.h" int Pockey_unused = AirwinRegistry::registerAirwindow({"Pockey", "Lo-Fi", 236, "Pockey is 12 bit (and under) lo-fi hiphop in a plugin.", airwin2rack::Pockey::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pockey2.h" @@ -503,7 +507,7 @@ int PowerSag_unused = AirwinRegistry::registerAirwindow({"PowerSag", "Effects", #include "autogen_airwin/PowerSag2.h" int PowerSag2_unused = AirwinRegistry::registerAirwindow({"PowerSag2", "Effects", 200, "PowerSag2 is my improved circuit-starve plugin, now with inverse effect!", airwin2rack::PowerSag2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Precious.h" -int Precious_unused = AirwinRegistry::registerAirwindow({"Precious", "Tone Color", 325, "Precious is a re-release of another old Character plugin.", airwin2rack::Precious::kNumParameters, []() { return std::make_unique(0); }}); +int Precious_unused = AirwinRegistry::registerAirwindow({"Precious", "Tone Color", 326, "Precious is a re-release of another old Character plugin.", airwin2rack::Precious::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Preponderant.h" int Preponderant_unused = AirwinRegistry::registerAirwindow({"Preponderant", "Effects", 202, "Preponderant is Airwindows Anti-Soothe, a strange tone intensifier and balancer.", airwin2rack::Preponderant::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pressure4.h" @@ -525,19 +529,19 @@ int PurestConsoleBuss_unused = AirwinRegistry::registerAirwindow({"PurestConsole #include "autogen_airwin/PurestConsoleChannel.h" int PurestConsoleChannel_unused = AirwinRegistry::registerAirwindow({"PurestConsoleChannel", "Consoles", 106, "PurestConsoleChannel is the most free from coloration Console system.", airwin2rack::PurestConsoleChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestDrive.h" -int PurestDrive_unused = AirwinRegistry::registerAirwindow({"PurestDrive", "Saturation", 277, "PurestDrive is the magic saturation plugin of subtlety and French House tone.", airwin2rack::PurestDrive::kNumParameters, []() { return std::make_unique(0); }}); +int PurestDrive_unused = AirwinRegistry::registerAirwindow({"PurestDrive", "Saturation", 278, "PurestDrive is the magic saturation plugin of subtlety and French House tone.", airwin2rack::PurestDrive::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestEcho.h" int PurestEcho_unused = AirwinRegistry::registerAirwindow({"PurestEcho", "Ambience", 13, "PurestEcho is optimized Airwindows echo with exactly four evenly spaced taps on tap.", airwin2rack::PurestEcho::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestFade.h" -int PurestFade_unused = AirwinRegistry::registerAirwindow({"PurestFade", "Utility", 338, "PurestFade is just like PurestGain, but for LONG fades.", airwin2rack::PurestFade::kNumParameters, []() { return std::make_unique(0); }}); +int PurestFade_unused = AirwinRegistry::registerAirwindow({"PurestFade", "Utility", 339, "PurestFade is just like PurestGain, but for LONG fades.", airwin2rack::PurestFade::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestGain.h" -int PurestGain_unused = AirwinRegistry::registerAirwindow({"PurestGain", "Utility", 337, "PurestGain is a high-res noise shaped gain, with smoothed fader.", airwin2rack::PurestGain::kNumParameters, []() { return std::make_unique(0); }}); +int PurestGain_unused = AirwinRegistry::registerAirwindow({"PurestGain", "Utility", 338, "PurestGain is a high-res noise shaped gain, with smoothed fader.", airwin2rack::PurestGain::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestSquish.h" int PurestSquish_unused = AirwinRegistry::registerAirwindow({"PurestSquish", "Dynamics", 179, "PurestSquish is an open-sounding compressor with bass bloom.", airwin2rack::PurestSquish::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestWarm.h" -int PurestWarm_unused = AirwinRegistry::registerAirwindow({"PurestWarm", "Subtlety", 300, "PurestWarm is a subtle tone shaper and warmth adder.", airwin2rack::PurestWarm::kNumParameters, []() { return std::make_unique(0); }}); +int PurestWarm_unused = AirwinRegistry::registerAirwindow({"PurestWarm", "Subtlety", 301, "PurestWarm is a subtle tone shaper and warmth adder.", airwin2rack::PurestWarm::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestWarm2.h" -int PurestWarm2_unused = AirwinRegistry::registerAirwindow({"PurestWarm2", "Subtlety", 299, "PurestWarm2 adds dual dry/wet controls for each side of the waveform.", airwin2rack::PurestWarm2::kNumParameters, []() { return std::make_unique(0); }}); +int PurestWarm2_unused = AirwinRegistry::registerAirwindow({"PurestWarm2", "Subtlety", 300, "PurestWarm2 adds dual dry/wet controls for each side of the waveform.", airwin2rack::PurestWarm2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pyewacket.h" int Pyewacket_unused = AirwinRegistry::registerAirwindow({"Pyewacket", "Dynamics", 166, "Pyewacket is an old school compressor for high definition transients. Adds no fatness, just energy.", airwin2rack::Pyewacket::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/RawGlitters.h" @@ -547,33 +551,33 @@ int RawTimbers_unused = AirwinRegistry::registerAirwindow({"RawTimbers", "Dither #include "autogen_airwin/Recurve.h" int Recurve_unused = AirwinRegistry::registerAirwindow({"Recurve", "Dynamics", 165, "Recurve is a special buss compressor with no threshold point.", airwin2rack::Recurve::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Remap.h" -int Remap_unused = AirwinRegistry::registerAirwindow({"Remap", "Subtlety", 304, "Remap puts the guts back into overloudenated audio!", airwin2rack::Remap::kNumParameters, []() { return std::make_unique(0); }}); +int Remap_unused = AirwinRegistry::registerAirwindow({"Remap", "Subtlety", 305, "Remap puts the guts back into overloudenated audio!", airwin2rack::Remap::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ResEQ.h" int ResEQ_unused = AirwinRegistry::registerAirwindow({"ResEQ", "Filter", 225, "ResEQ is a bank of mostly midrange resonances.", airwin2rack::ResEQ::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ResEQ2.h" int ResEQ2_unused = AirwinRegistry::registerAirwindow({"ResEQ2", "Filter", 207, "ResEQ2 is a single, sharp, sonorous mid peak.", airwin2rack::ResEQ2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Reverb.h" -int Reverb_unused = AirwinRegistry::registerAirwindow({"Reverb", "Reverb", 270, "Reverb is simplified and tuned MatrixVerb, adjusting everything for each optimum verb size.", airwin2rack::Reverb::kNumParameters, []() { return std::make_unique(0); }}); +int Reverb_unused = AirwinRegistry::registerAirwindow({"Reverb", "Reverb", 271, "Reverb is simplified and tuned MatrixVerb, adjusting everything for each optimum verb size.", airwin2rack::Reverb::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Righteous4.h" -int Righteous4_unused = AirwinRegistry::registerAirwindow({"Righteous4", "Saturation", 284, "Righteous4 is a final output stage for targeting dynamic range.", airwin2rack::Righteous4::kNumParameters, []() { return std::make_unique(0); }}); +int Righteous4_unused = AirwinRegistry::registerAirwindow({"Righteous4", "Saturation", 285, "Righteous4 is a final output stage for targeting dynamic range.", airwin2rack::Righteous4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/RightoMono.h" -int RightoMono_unused = AirwinRegistry::registerAirwindow({"RightoMono", "Utility", 350, "RightoMono copies one channel to both, losslessly.", airwin2rack::RightoMono::kNumParameters, []() { return std::make_unique(0); }}); +int RightoMono_unused = AirwinRegistry::registerAirwindow({"RightoMono", "Utility", 351, "RightoMono copies one channel to both, losslessly.", airwin2rack::RightoMono::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SampleDelay.h" int SampleDelay_unused = AirwinRegistry::registerAirwindow({"SampleDelay", "Ambience", 4, "SampleDelay is three delays combined: millisecond, sample and subsample.", airwin2rack::SampleDelay::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Shape.h" -int Shape_unused = AirwinRegistry::registerAirwindow({"Shape", "Subtlety", 296, "Shape is an asymmetrical waveshaper for peak manipulating.", airwin2rack::Shape::kNumParameters, []() { return std::make_unique(0); }}); +int Shape_unused = AirwinRegistry::registerAirwindow({"Shape", "Subtlety", 297, "Shape is an asymmetrical waveshaper for peak manipulating.", airwin2rack::Shape::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ShortBuss.h" int ShortBuss_unused = AirwinRegistry::registerAirwindow({"ShortBuss", "Unclassified", -1, "", airwin2rack::ShortBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SideDull.h" -int SideDull_unused = AirwinRegistry::registerAirwindow({"SideDull", "Stereo", 294, "SideDull is like Sidepass, but a lowpass on the side channel. Treble-centerer.", airwin2rack::SideDull::kNumParameters, []() { return std::make_unique(0); }}); +int SideDull_unused = AirwinRegistry::registerAirwindow({"SideDull", "Stereo", 295, "SideDull is like Sidepass, but a lowpass on the side channel. Treble-centerer.", airwin2rack::SideDull::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Sidepass.h" -int Sidepass_unused = AirwinRegistry::registerAirwindow({"Sidepass", "Stereo", 293, "Sidepass is a simple utility plugin, a highpass on the side channel. Mono-maker.", airwin2rack::Sidepass::kNumParameters, []() { return std::make_unique(0); }}); +int Sidepass_unused = AirwinRegistry::registerAirwindow({"Sidepass", "Stereo", 294, "Sidepass is a simple utility plugin, a highpass on the side channel. Mono-maker.", airwin2rack::Sidepass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Silhouette.h" int Silhouette_unused = AirwinRegistry::registerAirwindow({"Silhouette", "Noise", 252, "Silhouette replaces the sound with raw noise sculpted to match its dynamics.", airwin2rack::Silhouette::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Sinew.h" int Sinew_unused = AirwinRegistry::registerAirwindow({"Sinew", "Brightness", 52, "Sinew combines sines and slew clipping for a tape bias effect!", airwin2rack::Sinew::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SingleEndedTriode.h" -int SingleEndedTriode_unused = AirwinRegistry::registerAirwindow({"SingleEndedTriode", "Subtlety", 305, "SingleEndedTriode is unusual analog modeling effects.", airwin2rack::SingleEndedTriode::kNumParameters, []() { return std::make_unique(0); }}); +int SingleEndedTriode_unused = AirwinRegistry::registerAirwindow({"SingleEndedTriode", "Subtlety", 306, "SingleEndedTriode is unusual analog modeling effects.", airwin2rack::SingleEndedTriode::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Slew.h" int Slew_unused = AirwinRegistry::registerAirwindow({"Slew", "Brightness", 60, "Slew is a slew clipper, which darkens treble in an unusual way.", airwin2rack::Slew::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Slew2.h" @@ -581,7 +585,7 @@ int Slew2_unused = AirwinRegistry::registerAirwindow({"Slew2", "Brightness", 59, #include "autogen_airwin/Slew3.h" int Slew3_unused = AirwinRegistry::registerAirwindow({"Slew3", "Brightness", 58, "Slew3 is a new approach to slew clipping meant for a more analog-like darkening effect.", airwin2rack::Slew3::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SlewOnly.h" -int SlewOnly_unused = AirwinRegistry::registerAirwindow({"SlewOnly", "Utility", 341, "SlewOnly is a mix check plugin that shows you only the extreme highs.", airwin2rack::SlewOnly::kNumParameters, []() { return std::make_unique(0); }}); +int SlewOnly_unused = AirwinRegistry::registerAirwindow({"SlewOnly", "Utility", 342, "SlewOnly is a mix check plugin that shows you only the extreme highs.", airwin2rack::SlewOnly::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SlewSonic.h" int SlewSonic_unused = AirwinRegistry::registerAirwindow({"SlewSonic", "Brightness", 53, "SlewSonic combines SlewOnly with ultrasonic filtering to solo brightness.", airwin2rack::SlewSonic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Smooth.h" @@ -591,13 +595,13 @@ int SoftGate_unused = AirwinRegistry::registerAirwindow({"SoftGate", "Dynamics", #include "autogen_airwin/SpatializeDither.h" int SpatializeDither_unused = AirwinRegistry::registerAirwindow({"SpatializeDither", "Dithers", 142, "SpatializeDither is a high-performance clarity and accuracy dither.", airwin2rack::SpatializeDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Spiral.h" -int Spiral_unused = AirwinRegistry::registerAirwindow({"Spiral", "Saturation", 281, "Spiral is the new best smoothest distortion algorithm.", airwin2rack::Spiral::kNumParameters, []() { return std::make_unique(0); }}); +int Spiral_unused = AirwinRegistry::registerAirwindow({"Spiral", "Saturation", 282, "Spiral is the new best smoothest distortion algorithm.", airwin2rack::Spiral::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Spiral2.h" -int Spiral2_unused = AirwinRegistry::registerAirwindow({"Spiral2", "Saturation", 276, "Spiral2 is Spiral with controls including Presence.", airwin2rack::Spiral2::kNumParameters, []() { return std::make_unique(0); }}); +int Spiral2_unused = AirwinRegistry::registerAirwindow({"Spiral2", "Saturation", 277, "Spiral2 is Spiral with controls including Presence.", airwin2rack::Spiral2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Srsly.h" -int Srsly_unused = AirwinRegistry::registerAirwindow({"Srsly", "Stereo", 285, "Srsly is a psychoacoustic stereo processor.", airwin2rack::Srsly::kNumParameters, []() { return std::make_unique(0); }}); +int Srsly_unused = AirwinRegistry::registerAirwindow({"Srsly", "Stereo", 286, "Srsly is a psychoacoustic stereo processor.", airwin2rack::Srsly::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Srsly2.h" -int Srsly2_unused = AirwinRegistry::registerAirwindow({"Srsly2", "Stereo", 286, "Srsly2 is a revisit of Srsly, to make the stereo widening more extreme.", airwin2rack::Srsly2::kNumParameters, []() { return std::make_unique(0); }}); +int Srsly2_unused = AirwinRegistry::registerAirwindow({"Srsly2", "Stereo", 287, "Srsly2 is a revisit of Srsly, to make the stereo widening more extreme.", airwin2rack::Srsly2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/StarChild.h" int StarChild_unused = AirwinRegistry::registerAirwindow({"StarChild", "Ambience", 16, "StarChild is a weird digital ambience/echo plugin.", airwin2rack::StarChild::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/StarChild2.h" @@ -609,19 +613,19 @@ int StereoDoubler_unused = AirwinRegistry::registerAirwindow({"StereoDoubler", " #include "autogen_airwin/StereoEnsemble.h" int StereoEnsemble_unused = AirwinRegistry::registerAirwindow({"StereoEnsemble", "Ambience", 20, "StereoEnsemble is a sort of hyperchorus blast from the past.", airwin2rack::StereoEnsemble::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/StereoFX.h" -int StereoFX_unused = AirwinRegistry::registerAirwindow({"StereoFX", "Stereo", 288, "StereoFX is an aggressive stereo widener.", airwin2rack::StereoFX::kNumParameters, []() { return std::make_unique(0); }}); +int StereoFX_unused = AirwinRegistry::registerAirwindow({"StereoFX", "Stereo", 289, "StereoFX is an aggressive stereo widener.", airwin2rack::StereoFX::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/StudioTan.h" int StudioTan_unused = AirwinRegistry::registerAirwindow({"StudioTan", "Dithers", 148, "StudioTan is all the 'non-dither' dithers, up to date and convenient.", airwin2rack::StudioTan::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SubTight.h" int SubTight_unused = AirwinRegistry::registerAirwindow({"SubTight", "Filter", 208, "SubTight uses a variation on the Creature algorithm to tighten sub-lows.", airwin2rack::SubTight::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SubsOnly.h" -int SubsOnly_unused = AirwinRegistry::registerAirwindow({"SubsOnly", "Utility", 342, "SubsOnly is a mix check plugin that shows you only the extreme lows.", airwin2rack::SubsOnly::kNumParameters, []() { return std::make_unique(0); }}); +int SubsOnly_unused = AirwinRegistry::registerAirwindow({"SubsOnly", "Utility", 343, "SubsOnly is a mix check plugin that shows you only the extreme lows.", airwin2rack::SubsOnly::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Surge.h" int Surge_unused = AirwinRegistry::registerAirwindow({"Surge", "Dynamics", 181, "Surge is a compressor for accentuating beats and pulses.", airwin2rack::Surge::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SurgeTide.h" int SurgeTide_unused = AirwinRegistry::registerAirwindow({"SurgeTide", "Dynamics", 182, "SurgeTide is a surge and flow dynamics plugin.", airwin2rack::SurgeTide::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Sweeten.h" -int Sweeten_unused = AirwinRegistry::registerAirwindow({"Sweeten", "Subtlety", 298, "Sweeten is where you can find super-clean second harmonic.", airwin2rack::Sweeten::kNumParameters, []() { return std::make_unique(0); }}); +int Sweeten_unused = AirwinRegistry::registerAirwindow({"Sweeten", "Subtlety", 299, "Sweeten is where you can find super-clean second harmonic.", airwin2rack::Sweeten::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Swell.h" int Swell_unused = AirwinRegistry::registerAirwindow({"Swell", "Dynamics", 178, "Swell is Dial-an-attack, like sidechaining.", airwin2rack::Swell::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TPDFDither.h" @@ -629,7 +633,7 @@ int TPDFDither_unused = AirwinRegistry::registerAirwindow({"TPDFDither", "Dither #include "autogen_airwin/TPDFWide.h" int TPDFWide_unused = AirwinRegistry::registerAirwindow({"TPDFWide", "Dithers", 136, "TPDFWide is still TPDF dither but better and wider. With 16/24 bit output and a DeRez control.", airwin2rack::TPDFWide::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Tape.h" -int Tape_unused = AirwinRegistry::registerAirwindow({"Tape", "Tape", 312, "Tape is simplified, all-purpose tape mojo: my personal jam.", airwin2rack::Tape::kNumParameters, []() { return std::make_unique(0); }}); +int Tape_unused = AirwinRegistry::registerAirwindow({"Tape", "Tape", 313, "Tape is simplified, all-purpose tape mojo: my personal jam.", airwin2rack::Tape::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TapeDelay.h" int TapeDelay_unused = AirwinRegistry::registerAirwindow({"TapeDelay", "Ambience", 14, "TapeDelay is an old school tape echo with pitch swerve effects.", airwin2rack::TapeDelay::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TapeDelay2.h" @@ -647,15 +651,15 @@ int TexturizeMS_unused = AirwinRegistry::registerAirwindow({"TexturizeMS", "Nois #include "autogen_airwin/Thunder.h" int Thunder_unused = AirwinRegistry::registerAirwindow({"Thunder", "Dynamics", 169, "Thunder is a compressor that retains or exaggerates subsonic bass when you push it.", airwin2rack::Thunder::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ToTape5.h" -int ToTape5_unused = AirwinRegistry::registerAirwindow({"ToTape5", "Tape", 315, "ToTape5 is Airwindows analog tape emulation.", airwin2rack::ToTape5::kNumParameters, []() { return std::make_unique(0); }}); +int ToTape5_unused = AirwinRegistry::registerAirwindow({"ToTape5", "Tape", 316, "ToTape5 is Airwindows analog tape emulation.", airwin2rack::ToTape5::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ToTape6.h" -int ToTape6_unused = AirwinRegistry::registerAirwindow({"ToTape6", "Tape", 310, "ToTape6 is Airwindows tape emulation for 2020!", airwin2rack::ToTape6::kNumParameters, []() { return std::make_unique(0); }}); +int ToTape6_unused = AirwinRegistry::registerAirwindow({"ToTape6", "Tape", 311, "ToTape6 is Airwindows tape emulation for 2020!", airwin2rack::ToTape6::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ToVinyl4.h" -int ToVinyl4_unused = AirwinRegistry::registerAirwindow({"ToVinyl4", "Stereo", 289, "ToVinyl4 is a vinyl-mastering simulator bringing several vinyl-type colors.", airwin2rack::ToVinyl4::kNumParameters, []() { return std::make_unique(0); }}); +int ToVinyl4_unused = AirwinRegistry::registerAirwindow({"ToVinyl4", "Stereo", 290, "ToVinyl4 is a vinyl-mastering simulator bringing several vinyl-type colors.", airwin2rack::ToVinyl4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ToneSlant.h" int ToneSlant_unused = AirwinRegistry::registerAirwindow({"ToneSlant", "Filter", 214, "ToneSlant is a super-transparent ‘tilt EQ’ with very low Q.", airwin2rack::ToneSlant::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TransDesk.h" -int TransDesk_unused = AirwinRegistry::registerAirwindow({"TransDesk", "Subtlety", 308, "TransDesk is more of a transistory, rock desk analog modeling.", airwin2rack::TransDesk::kNumParameters, []() { return std::make_unique(0); }}); +int TransDesk_unused = AirwinRegistry::registerAirwindow({"TransDesk", "Subtlety", 309, "TransDesk is more of a transistory, rock desk analog modeling.", airwin2rack::TransDesk::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TremoSquare.h" int TremoSquare_unused = AirwinRegistry::registerAirwindow({"TremoSquare", "Effects", 191, "TremoSquare is a squarewave tremolo effect that only switches on zero crossings.", airwin2rack::TremoSquare::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Tremolo.h" @@ -663,11 +667,11 @@ int Tremolo_unused = AirwinRegistry::registerAirwindow({"Tremolo", "Effects", 19 #include "autogen_airwin/TripleSpread.h" int TripleSpread_unused = AirwinRegistry::registerAirwindow({"TripleSpread", "Ambience", 6, "TripleSpread is a stereo tripler with extra wideness and GlitchShifter processing.", airwin2rack::TripleSpread::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Tube.h" -int Tube_unused = AirwinRegistry::registerAirwindow({"Tube", "Saturation", 275, "Tube is a tube style SoundBetterIzer using a new algorithm for analog modeling!", airwin2rack::Tube::kNumParameters, []() { return std::make_unique(0); }}); +int Tube_unused = AirwinRegistry::registerAirwindow({"Tube", "Saturation", 276, "Tube is a tube style SoundBetterIzer using a new algorithm for analog modeling!", airwin2rack::Tube::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Tube2.h" -int Tube2_unused = AirwinRegistry::registerAirwindow({"Tube2", "Saturation", 274, "Tube2 extends Tube, with more sophisticated processing and input trim.", airwin2rack::Tube2::kNumParameters, []() { return std::make_unique(0); }}); +int Tube2_unused = AirwinRegistry::registerAirwindow({"Tube2", "Saturation", 275, "Tube2 extends Tube, with more sophisticated processing and input trim.", airwin2rack::Tube2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TubeDesk.h" -int TubeDesk_unused = AirwinRegistry::registerAirwindow({"TubeDesk", "Subtlety", 309, "TubeDesk is a tube recording console type tone coloring.", airwin2rack::TubeDesk::kNumParameters, []() { return std::make_unique(0); }}); +int TubeDesk_unused = AirwinRegistry::registerAirwindow({"TubeDesk", "Subtlety", 310, "TubeDesk is a tube recording console type tone coloring.", airwin2rack::TubeDesk::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/UltrasonX.h" int UltrasonX_unused = AirwinRegistry::registerAirwindow({"UltrasonX", "Brightness", 71, "UltrasonX is a method for rolling your own Console-type systems with total control over your ultrasonic filtering.", airwin2rack::UltrasonX::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Ultrasonic.h" @@ -677,13 +681,13 @@ int UltrasonicLite_unused = AirwinRegistry::registerAirwindow({"UltrasonicLite", #include "autogen_airwin/UltrasonicMed.h" int UltrasonicMed_unused = AirwinRegistry::registerAirwindow({"UltrasonicMed", "Brightness", 70, "UltrasonicMed is two stages of supersonic filter, for using inside digital mixes.", airwin2rack::UltrasonicMed::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/UnBox.h" -int UnBox_unused = AirwinRegistry::registerAirwindow({"UnBox", "Saturation", 282, "UnBox is a distortion where only the harmonics that don't alias are allowed to distort.", airwin2rack::UnBox::kNumParameters, []() { return std::make_unique(0); }}); +int UnBox_unused = AirwinRegistry::registerAirwindow({"UnBox", "Saturation", 283, "UnBox is a distortion where only the harmonics that don't alias are allowed to distort.", airwin2rack::UnBox::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/VariMu.h" int VariMu_unused = AirwinRegistry::registerAirwindow({"VariMu", "Dynamics", 162, "VariMu is a more organic variation on Pressure (a compressor)", airwin2rack::VariMu::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Verbity.h" -int Verbity_unused = AirwinRegistry::registerAirwindow({"Verbity", "Reverb", 262, "Verbity is a dual-mono reverb, which uses feedforward reverb topology.", airwin2rack::Verbity::kNumParameters, []() { return std::make_unique(0); }}); +int Verbity_unused = AirwinRegistry::registerAirwindow({"Verbity", "Unclassified", -1, "Verbity is a dual-mono reverb, which uses feedforward reverb topology.", airwin2rack::Verbity::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Verbity2.h" -int Verbity2_unused = AirwinRegistry::registerAirwindow({"Verbity2", "Reverb", 258, "Verbity2 adds stereo crossmodulation and expands Verbity's feedforward reverb topology.", airwin2rack::Verbity2::kNumParameters, []() { return std::make_unique(0); }}); +int Verbity2_unused = AirwinRegistry::registerAirwindow({"Verbity2", "Reverb", 259, "Verbity2 adds stereo crossmodulation and expands Verbity's feedforward reverb topology.", airwin2rack::Verbity2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Vibrato.h" int Vibrato_unused = AirwinRegistry::registerAirwindow({"Vibrato", "Lo-Fi", 242, "Vibrato lets you vibrato, chorus, flange, and make odd FM noises.", airwin2rack::Vibrato::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/VinylDither.h" @@ -691,77 +695,77 @@ int VinylDither_unused = AirwinRegistry::registerAirwindow({"VinylDither", "Dith #include "autogen_airwin/VoiceOfTheStarship.h" int VoiceOfTheStarship_unused = AirwinRegistry::registerAirwindow({"VoiceOfTheStarship", "Noise", 249, "VoiceOfTheStarship is a deep noise tone source.", airwin2rack::VoiceOfTheStarship::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/VoiceTrick.h" -int VoiceTrick_unused = AirwinRegistry::registerAirwindow({"VoiceTrick", "Utility", 355, "VoiceTrick lets you record vocals while monitoring over speakers.", airwin2rack::VoiceTrick::kNumParameters, []() { return std::make_unique(0); }}); +int VoiceTrick_unused = AirwinRegistry::registerAirwindow({"VoiceTrick", "Utility", 356, "VoiceTrick lets you record vocals while monitoring over speakers.", airwin2rack::VoiceTrick::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Weight.h" int Weight_unused = AirwinRegistry::registerAirwindow({"Weight", "Filter", 210, "Weight is a very accurate sub-bass boost based on Holt.", airwin2rack::Weight::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Wider.h" -int Wider_unused = AirwinRegistry::registerAirwindow({"Wider", "Stereo", 287, "Wider is Airwindows stereo space shaping.", airwin2rack::Wider::kNumParameters, []() { return std::make_unique(0); }}); +int Wider_unused = AirwinRegistry::registerAirwindow({"Wider", "Stereo", 288, "Wider is Airwindows stereo space shaping.", airwin2rack::Wider::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/XBandpass.h" -int XBandpass_unused = AirwinRegistry::registerAirwindow({"XBandpass", "XYZ Filters", 373, "XBandpass is a distorted digital EQ, inspired by retro sampler DSP.", airwin2rack::XBandpass::kNumParameters, []() { return std::make_unique(0); }}); +int XBandpass_unused = AirwinRegistry::registerAirwindow({"XBandpass", "XYZ Filters", 374, "XBandpass is a distorted digital EQ, inspired by retro sampler DSP.", airwin2rack::XBandpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/XHighpass.h" -int XHighpass_unused = AirwinRegistry::registerAirwindow({"XHighpass", "XYZ Filters", 374, "XHighpass is a distorted digital EQ, inspired by retro sampler DSP.", airwin2rack::XHighpass::kNumParameters, []() { return std::make_unique(0); }}); +int XHighpass_unused = AirwinRegistry::registerAirwindow({"XHighpass", "XYZ Filters", 375, "XHighpass is a distorted digital EQ, inspired by retro sampler DSP.", airwin2rack::XHighpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/XLowpass.h" -int XLowpass_unused = AirwinRegistry::registerAirwindow({"XLowpass", "XYZ Filters", 375, "XLowpass is a distorted digital EQ, inspired by retro sampler DSP.", airwin2rack::XLowpass::kNumParameters, []() { return std::make_unique(0); }}); +int XLowpass_unused = AirwinRegistry::registerAirwindow({"XLowpass", "XYZ Filters", 376, "XLowpass is a distorted digital EQ, inspired by retro sampler DSP.", airwin2rack::XLowpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/XNotch.h" -int XNotch_unused = AirwinRegistry::registerAirwindow({"XNotch", "XYZ Filters", 376, "XNotch is a distorted digital EQ, not as glitchy as the others.", airwin2rack::XNotch::kNumParameters, []() { return std::make_unique(0); }}); +int XNotch_unused = AirwinRegistry::registerAirwindow({"XNotch", "XYZ Filters", 377, "XNotch is a distorted digital EQ, not as glitchy as the others.", airwin2rack::XNotch::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/XRegion.h" -int XRegion_unused = AirwinRegistry::registerAirwindow({"XRegion", "XYZ Filters", 377, "XRegion is distorted staggered bandpasses, for extreme soundmangling.", airwin2rack::XRegion::kNumParameters, []() { return std::make_unique(0); }}); +int XRegion_unused = AirwinRegistry::registerAirwindow({"XRegion", "XYZ Filters", 378, "XRegion is distorted staggered bandpasses, for extreme soundmangling.", airwin2rack::XRegion::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YBandpass.h" -int YBandpass_unused = AirwinRegistry::registerAirwindow({"YBandpass", "XYZ Filters", 366, "YBandpass is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YBandpass::kNumParameters, []() { return std::make_unique(0); }}); +int YBandpass_unused = AirwinRegistry::registerAirwindow({"YBandpass", "XYZ Filters", 367, "YBandpass is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YBandpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YHighpass.h" -int YHighpass_unused = AirwinRegistry::registerAirwindow({"YHighpass", "XYZ Filters", 368, "YHighpass is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YHighpass::kNumParameters, []() { return std::make_unique(0); }}); +int YHighpass_unused = AirwinRegistry::registerAirwindow({"YHighpass", "XYZ Filters", 369, "YHighpass is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YHighpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YLowpass.h" -int YLowpass_unused = AirwinRegistry::registerAirwindow({"YLowpass", "XYZ Filters", 370, "YLowpass is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YLowpass::kNumParameters, []() { return std::make_unique(0); }}); +int YLowpass_unused = AirwinRegistry::registerAirwindow({"YLowpass", "XYZ Filters", 371, "YLowpass is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YLowpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YNotBandpass.h" -int YNotBandpass_unused = AirwinRegistry::registerAirwindow({"YNotBandpass", "XYZ Filters", 367, "YNotBandpass is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotBandpass::kNumParameters, []() { return std::make_unique(0); }}); +int YNotBandpass_unused = AirwinRegistry::registerAirwindow({"YNotBandpass", "XYZ Filters", 368, "YNotBandpass is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotBandpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YNotHighpass.h" -int YNotHighpass_unused = AirwinRegistry::registerAirwindow({"YNotHighpass", "XYZ Filters", 369, "YNotHighpass is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotHighpass::kNumParameters, []() { return std::make_unique(0); }}); +int YNotHighpass_unused = AirwinRegistry::registerAirwindow({"YNotHighpass", "XYZ Filters", 370, "YNotHighpass is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotHighpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YNotLowpass.h" -int YNotLowpass_unused = AirwinRegistry::registerAirwindow({"YNotLowpass", "XYZ Filters", 371, "YNotLowpass is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotLowpass::kNumParameters, []() { return std::make_unique(0); }}); +int YNotLowpass_unused = AirwinRegistry::registerAirwindow({"YNotLowpass", "XYZ Filters", 372, "YNotLowpass is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotLowpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YNotNotch.h" int YNotNotch_unused = AirwinRegistry::registerAirwindow({"YNotNotch", "Unclassified", -1, "YNotNotch is soft and smooth to nasty, edgy texture-varying filtering, no control smoothing.", airwin2rack::YNotNotch::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/YNotch.h" -int YNotch_unused = AirwinRegistry::registerAirwindow({"YNotch", "XYZ Filters", 372, "YNotch is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YNotch::kNumParameters, []() { return std::make_unique(0); }}); +int YNotch_unused = AirwinRegistry::registerAirwindow({"YNotch", "XYZ Filters", 373, "YNotch is soft and smooth to nasty, edgy texture-varying filtering.", airwin2rack::YNotch::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZBandpass.h" -int ZBandpass_unused = AirwinRegistry::registerAirwindow({"ZBandpass", "XYZ Filters", 361, "ZBandpass is a bandpass made to sound and act like the Emu e6400 Ultra bandpass.", airwin2rack::ZBandpass::kNumParameters, []() { return std::make_unique(0); }}); +int ZBandpass_unused = AirwinRegistry::registerAirwindow({"ZBandpass", "XYZ Filters", 362, "ZBandpass is a bandpass made to sound and act like the Emu e6400 Ultra bandpass.", airwin2rack::ZBandpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZBandpass2.h" -int ZBandpass2_unused = AirwinRegistry::registerAirwindow({"ZBandpass2", "XYZ Filters", 356, "ZBandpass2 acts more like the Emu e6400 Ultra bandpass in motion, with control smoothing.", airwin2rack::ZBandpass2::kNumParameters, []() { return std::make_unique(0); }}); +int ZBandpass2_unused = AirwinRegistry::registerAirwindow({"ZBandpass2", "XYZ Filters", 357, "ZBandpass2 acts more like the Emu e6400 Ultra bandpass in motion, with control smoothing.", airwin2rack::ZBandpass2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZHighpass.h" -int ZHighpass_unused = AirwinRegistry::registerAirwindow({"ZHighpass", "XYZ Filters", 362, "ZHighpass is a highpass made to sound and act like the Emu e6400 Ultra highpass.", airwin2rack::ZHighpass::kNumParameters, []() { return std::make_unique(0); }}); +int ZHighpass_unused = AirwinRegistry::registerAirwindow({"ZHighpass", "XYZ Filters", 363, "ZHighpass is a highpass made to sound and act like the Emu e6400 Ultra highpass.", airwin2rack::ZHighpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZHighpass2.h" -int ZHighpass2_unused = AirwinRegistry::registerAirwindow({"ZHighpass2", "XYZ Filters", 357, "ZHighpass2 acts more like the Emu e6400 Ultra highpass in motion, with control smoothing.", airwin2rack::ZHighpass2::kNumParameters, []() { return std::make_unique(0); }}); +int ZHighpass2_unused = AirwinRegistry::registerAirwindow({"ZHighpass2", "XYZ Filters", 358, "ZHighpass2 acts more like the Emu e6400 Ultra highpass in motion, with control smoothing.", airwin2rack::ZHighpass2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZLowpass.h" -int ZLowpass_unused = AirwinRegistry::registerAirwindow({"ZLowpass", "XYZ Filters", 363, "ZLowpass is a lowpass made to sound and act like the Emu e6400 Ultra lowpass.", airwin2rack::ZLowpass::kNumParameters, []() { return std::make_unique(0); }}); +int ZLowpass_unused = AirwinRegistry::registerAirwindow({"ZLowpass", "XYZ Filters", 364, "ZLowpass is a lowpass made to sound and act like the Emu e6400 Ultra lowpass.", airwin2rack::ZLowpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZLowpass2.h" -int ZLowpass2_unused = AirwinRegistry::registerAirwindow({"ZLowpass2", "XYZ Filters", 358, "ZLowpass2 acts more like the Emu e6400 Ultra lowpass in motion, with control smoothing.", airwin2rack::ZLowpass2::kNumParameters, []() { return std::make_unique(0); }}); +int ZLowpass2_unused = AirwinRegistry::registerAirwindow({"ZLowpass2", "XYZ Filters", 359, "ZLowpass2 acts more like the Emu e6400 Ultra lowpass in motion, with control smoothing.", airwin2rack::ZLowpass2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZNotch.h" -int ZNotch_unused = AirwinRegistry::registerAirwindow({"ZNotch", "XYZ Filters", 364, "ZNotch is a notch filter made to sound and act like the Emu e6400 Phaser.", airwin2rack::ZNotch::kNumParameters, []() { return std::make_unique(0); }}); +int ZNotch_unused = AirwinRegistry::registerAirwindow({"ZNotch", "XYZ Filters", 365, "ZNotch is a notch filter made to sound and act like the Emu e6400 Phaser.", airwin2rack::ZNotch::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZNotch2.h" -int ZNotch2_unused = AirwinRegistry::registerAirwindow({"ZNotch2", "XYZ Filters", 359, "ZNotch2 acts more like the Emu e6400 Ultra phaser in motion, with control smoothing.", airwin2rack::ZNotch2::kNumParameters, []() { return std::make_unique(0); }}); +int ZNotch2_unused = AirwinRegistry::registerAirwindow({"ZNotch2", "XYZ Filters", 360, "ZNotch2 acts more like the Emu e6400 Ultra phaser in motion, with control smoothing.", airwin2rack::ZNotch2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZOutputStage.h" int ZOutputStage_unused = AirwinRegistry::registerAirwindow({"ZOutputStage", "Distortion", 125, "ZOutputStage is the output clipping from the Emu e6400 style Z filters.", airwin2rack::ZOutputStage::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZRegion.h" -int ZRegion_unused = AirwinRegistry::registerAirwindow({"ZRegion", "XYZ Filters", 365, "ZRegion is an Emu e6400 style Airwindows Region filter.", airwin2rack::ZRegion::kNumParameters, []() { return std::make_unique(0); }}); +int ZRegion_unused = AirwinRegistry::registerAirwindow({"ZRegion", "XYZ Filters", 366, "ZRegion is an Emu e6400 style Airwindows Region filter.", airwin2rack::ZRegion::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ZRegion2.h" -int ZRegion2_unused = AirwinRegistry::registerAirwindow({"ZRegion2", "XYZ Filters", 360, "ZRegion2 is an Emu e6400 style Airwindows Region filter, with control smoothing.", airwin2rack::ZRegion2::kNumParameters, []() { return std::make_unique(0); }}); +int ZRegion2_unused = AirwinRegistry::registerAirwindow({"ZRegion2", "XYZ Filters", 361, "ZRegion2 is an Emu e6400 style Airwindows Region filter, with control smoothing.", airwin2rack::ZRegion2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/curve.h" int curve_unused = AirwinRegistry::registerAirwindow({"curve", "Dynamics", 164, "curve is the simplest, purest form of Recurve with no extra boosts.", airwin2rack::curve::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kCathedral.h" -int kCathedral_unused = AirwinRegistry::registerAirwindow({"kCathedral", "Reverb", 261, "kCathedral is a giant reverby space.", airwin2rack::kCathedral::kNumParameters, []() { return std::make_unique(0); }}); +int kCathedral_unused = AirwinRegistry::registerAirwindow({"kCathedral", "Reverb", 267, "kCathedral is a giant reverby space.", airwin2rack::kCathedral::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kCathedral2.h" -int kCathedral2_unused = AirwinRegistry::registerAirwindow({"kCathedral2", "Unclassified", -1, "", airwin2rack::kCathedral2::kNumParameters, []() { return std::make_unique(0); }}); +int kCathedral2_unused = AirwinRegistry::registerAirwindow({"kCathedral2", "Reverb", 254, "kCathedral2 is a giant reverby space modeled after the Bricasti Cathedral.", airwin2rack::kCathedral2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kChamberAR.h" int kChamberAR_unused = AirwinRegistry::registerAirwindow({"kChamberAR", "Ambience", 11, "kChamberAR is a take on tape echo into chamber echo.", airwin2rack::kChamberAR::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kPlateA.h" -int kPlateA_unused = AirwinRegistry::registerAirwindow({"kPlateA", "Reverb", 256, "kPlateA is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateA::kNumParameters, []() { return std::make_unique(0); }}); +int kPlateA_unused = AirwinRegistry::registerAirwindow({"kPlateA", "Reverb", 257, "kPlateA is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateA::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kPlateB.h" -int kPlateB_unused = AirwinRegistry::registerAirwindow({"kPlateB", "Reverb", 255, "kPlateB is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateB::kNumParameters, []() { return std::make_unique(0); }}); +int kPlateB_unused = AirwinRegistry::registerAirwindow({"kPlateB", "Reverb", 256, "kPlateB is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateB::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kPlateC.h" -int kPlateC_unused = AirwinRegistry::registerAirwindow({"kPlateC", "Reverb", 257, "kPlateC is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateC::kNumParameters, []() { return std::make_unique(0); }}); +int kPlateC_unused = AirwinRegistry::registerAirwindow({"kPlateC", "Reverb", 258, "kPlateC is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateC::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/kPlateD.h" -int kPlateD_unused = AirwinRegistry::registerAirwindow({"kPlateD", "Reverb", 254, "kPlateD is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateD::kNumParameters, []() { return std::make_unique(0); }}); +int kPlateD_unused = AirwinRegistry::registerAirwindow({"kPlateD", "Reverb", 255, "kPlateD is a plate reverb, not unlike its namesake atop Abbey Road.", airwin2rack::kPlateD::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/uLawDecode.h" -int uLawDecode_unused = AirwinRegistry::registerAirwindow({"uLawDecode", "Utility", 349, "uLawDecode is a Console-like encode/decode pair, but much more extreme.", airwin2rack::uLawDecode::kNumParameters, []() { return std::make_unique(0); }}); +int uLawDecode_unused = AirwinRegistry::registerAirwindow({"uLawDecode", "Utility", 350, "uLawDecode is a Console-like encode/decode pair, but much more extreme.", airwin2rack::uLawDecode::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/uLawEncode.h" -int uLawEncode_unused = AirwinRegistry::registerAirwindow({"uLawEncode", "Utility", 348, "uLawEncode is a Console-like encode/decode pair, but much more extreme.", airwin2rack::uLawEncode::kNumParameters, []() { return std::make_unique(0); }}); +int uLawEncode_unused = AirwinRegistry::registerAirwindow({"uLawEncode", "Utility", 349, "uLawEncode is a Console-like encode/decode pair, but much more extreme.", airwin2rack::uLawEncode::kNumParameters, []() { return std::make_unique(0); }}); int unusedComplete = AirwinRegistry::completeRegistry(); diff --git a/src/autogen_airwin/ADClip8.cpp b/src/autogen_airwin/ADClip8.cpp new file mode 100644 index 0000000..c902459 --- /dev/null +++ b/src/autogen_airwin/ADClip8.cpp @@ -0,0 +1,146 @@ +/* ======================================== + * ADClip8 - ADClip8.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __ADClip8_H +#include "ADClip8.h" +#endif +namespace airwin2rack::ADClip8 { + +AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new ADClip8(audioMaster);} + +ADClip8::ADClip8(audioMasterCallback audioMaster) : + AudioEffectX(audioMaster, kNumPrograms, kNumParameters) +{ + A = 0.0; + B = 0.883; + C = 0.0; + for (int stage = 0; stage < 8; stage++) { + lastSampleL[stage] = 0.0; + lastSampleR[stage] = 0.0; + wasPosClipL[stage] = false; + wasPosClipR[stage] = false; + wasNegClipL[stage] = false; + wasNegClipR[stage] = false; + for (int x = 0; x < 16; x++) {intermediateL[x][stage] = 0.0;intermediateR[x][stage] = 0.0;} + } + + fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX; + fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX; + //this is reset: values being initialized only once. Startup values, whatever they are. + + _canDo.insert("plugAsChannelInsert"); // plug-in can be used as a channel insert effect. + _canDo.insert("plugAsSend"); // plug-in can be used as a send effect. + _canDo.insert("x2in2out"); + setNumInputs(kNumInputs); + setNumOutputs(kNumOutputs); + setUniqueID(kUniqueId); + canProcessReplacing(); // supports output replacing + canDoubleReplacing(); // supports double precision processing + programsAreChunks(true); + vst_strncpy (_programName, "Default", kVstMaxProgNameLen); // default program name +} + +ADClip8::~ADClip8() {} +VstInt32 ADClip8::getVendorVersion () {return 1000;} +void ADClip8::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);} +void ADClip8::getProgramName(char *name) {vst_strncpy (name, _programName, kVstMaxProgNameLen);} +//airwindows likes to ignore this stuff. Make your own programs, and make a different plugin rather than +//trying to do versioning and preventing people from using older versions. Maybe they like the old one! + +static float pinParameter(float data) +{ + if (data < 0.0f) return 0.0f; + if (data > 1.0f) return 1.0f; + return data; +} + +void ADClip8::setParameter(VstInt32 index, float value) { + switch (index) { + case kParamA: A = value; break; + case kParamB: B = value; break; + case kParamC: C = value; break; + default: break; // unknown parameter, shouldn't happen! + } +} + +float ADClip8::getParameter(VstInt32 index) { + switch (index) { + case kParamA: return A; break; + case kParamB: return B; break; + case kParamC: return C; break; + default: break; // unknown parameter, shouldn't happen! + } return 0.0; //we only need to update the relevant name, this is simple to manage +} + +void ADClip8::getParameterName(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "Boost", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "Ceiling", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "Mode", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this is our labels for displaying in the VST host +} + +void ADClip8::getParameterDisplay(VstInt32 index, char *text) { + switch (index) { + case kParamA: float2string (A*18.0, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + case kParamC: switch((VstInt32)( C * 7.999 )) //0 to almost edge of # of params + {case 0: vst_strncpy (text, "Normal", kVstMaxParamStrLen); break; + case 1: vst_strncpy (text, "Atten", kVstMaxParamStrLen); break; + case 2: vst_strncpy (text, "Clips", kVstMaxParamStrLen); break; + case 3: vst_strncpy (text, "Afterbr", kVstMaxParamStrLen); break; + case 4: vst_strncpy (text, "Explode", kVstMaxParamStrLen); break; + case 5: vst_strncpy (text, "Nuke", kVstMaxParamStrLen); break; + case 6: vst_strncpy (text, "Apocaly", kVstMaxParamStrLen); break; + case 7: vst_strncpy (text, "Apothes", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } break; + default: break; // unknown parameter, shouldn't happen! + } //this displays the values and handles 'popups' where it's discrete choices +} + +void ADClip8::getParameterLabel(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "dB", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } +} + +VstInt32 ADClip8::canDo(char *text) +{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know + +bool ADClip8::getEffectName(char* name) { + vst_strncpy(name, "ADClip8", kVstMaxProductStrLen); return true; +} + +VstPlugCategory ADClip8::getPlugCategory() {return kPlugCategEffect;} + +bool ADClip8::getProductString(char* text) { + vst_strncpy (text, "airwindows ADClip8", kVstMaxProductStrLen); return true; +} + +bool ADClip8::getVendorString(char* text) { + vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true; +} +bool ADClip8::parameterTextToValue(VstInt32 index, const char *text, float &value) { + switch(index) { + case kParamA: { auto b = string2float(text, value); if (b) { value = value / (18.0); } return b; break; } + case kParamB: { auto b = string2float(text, value); return b; break; } + + } + return false; +} +bool ADClip8::canConvertParameterTextToValue(VstInt32 index) { + switch(index) { + case kParamA: return true; + case kParamB: return true; + + } + return false; +} +} // end namespace diff --git a/src/autogen_airwin/ADClip8.h b/src/autogen_airwin/ADClip8.h new file mode 100644 index 0000000..2efa6d1 --- /dev/null +++ b/src/autogen_airwin/ADClip8.h @@ -0,0 +1,78 @@ +/* ======================================== + * ADClip8 - ADClip8.h + * Created 8/12/11 by SPIAdmin + * Copyright (c) Airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __ADClip8_ADClip8_H +#define __ADClip8_ADClip8_H + +#ifndef __audioeffect__ +#include "../airwin2rackbase.h" +#endif + +#include +#include +#include + +namespace airwin2rack::ADClip8 { +enum { + kParamA = 0, + kParamB = 1, + kParamC = 2, + kNumParameters = 3 +}; // + +const int kNumPrograms = 0; +const int kNumInputs = 2; +const int kNumOutputs = 2; +const unsigned long kUniqueId = 'adcs'; //Change this to what the AU identity is! + +class ADClip8 : + public AudioEffectX +{ +public: + ADClip8(audioMasterCallback audioMaster); + ~ADClip8(); + virtual bool getEffectName(char* name); // The plug-in name + virtual VstPlugCategory getPlugCategory(); // The general category for the plug-in + virtual bool getProductString(char* text); // This is a unique plug-in string provided by Steinberg + virtual bool getVendorString(char* text); // Vendor info + virtual VstInt32 getVendorVersion(); // Version number + virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); + virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames); + virtual void getProgramName(char *name); // read the name from the host + virtual void setProgramName(char *name); // changes the name of the preset displayed in the host + virtual float getParameter(VstInt32 index); // get the parameter value at the specified index + virtual void setParameter(VstInt32 index, float value); // set the parameter at index to value + virtual void getParameterLabel(VstInt32 index, char *text); // label for the parameter (eg dB) + virtual void getParameterName(VstInt32 index, char *text); // name of the parameter + virtual void getParameterDisplay(VstInt32 index, char *text); // text description of the current value + // Added by the perl as inverses + virtual bool parameterTextToValue(VstInt32 index, const char *text, float &value); + virtual bool canConvertParameterTextToValue(VstInt32 index); + virtual VstInt32 canDo(char *text); +private: + char _programName[kVstMaxProgNameLen + 1]; + std::set< std::string > _canDo; + + uint32_t fpdL; + uint32_t fpdR; + //default stuff + + double lastSampleL[8]; + double intermediateL[16][8]; + bool wasPosClipL[8]; + bool wasNegClipL[8]; + double lastSampleR[8]; + double intermediateR[16][8]; + bool wasPosClipR[8]; + bool wasNegClipR[8]; + + float A; + float B; + float C; +}; + +#endif +} // end namespace diff --git a/src/autogen_airwin/ADClip8Proc.cpp b/src/autogen_airwin/ADClip8Proc.cpp new file mode 100644 index 0000000..8bcc9c9 --- /dev/null +++ b/src/autogen_airwin/ADClip8Proc.cpp @@ -0,0 +1,262 @@ +/* ======================================== + * ADClip8 - ADClip8.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __ADClip8_H +#include "ADClip8.h" +#endif +namespace airwin2rack::ADClip8 { + +void ADClip8::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) +{ + float* in1 = inputs[0]; + float* in2 = inputs[1]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + int spacing = floor(overallscale); //should give us working basic scaling, usually 2 or 4 + if (spacing < 1) spacing = 1; if (spacing > 16) spacing = 16; + //double hardness = 0.618033988749894; // golden ratio + //double softness = 0.381966011250105; // 1.0 - hardness + //double refclip = 1.618033988749894; // -0.2dB we're making all this pure raw code + //refclip*hardness = 1.0 to use ClipOnly as a prefab code-chunk. + //refclip*softness = 0.618033988749894 Seven decimal places is plenty as it's + //not related to the original sound much: it's an arbitrary position in softening. + double inputGain = pow(10.0,(A*18.0)/20.0); + + double ceiling = (1.0+(B*0.23594733))*0.5; + int mode = (int) (C*7.999)+1; + int stageSetting = mode-2; + if (stageSetting < 1) stageSetting = 1; + inputGain = ((inputGain-1.0)/stageSetting)+1.0; + + while (--sampleFrames >= 0) + { + double inputSampleL = *in1; + double inputSampleR = *in2; + if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17; + if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17; + double overshootL = 0.0; + double overshootR = 0.0; + inputSampleL *= 2.0; + inputSampleR *= 2.0; + + for (int stage = 0; stage < stageSetting; stage++) { + if (inputGain != 1.0) { + inputSampleL *= inputGain; + inputSampleR *= inputGain; + } + if (stage == 0){ + overshootL = fabs(inputSampleL) - 1.618033988749894; + if (overshootL < 0.0) overshootL = 0.0; + overshootR = fabs(inputSampleR) - 1.618033988749894; + if (overshootR < 0.0) overshootR = 0.0; + } + if (inputSampleL > 4.0) inputSampleL = 4.0; if (inputSampleL < -4.0) inputSampleL = -4.0; + if (inputSampleL - lastSampleL[stage] > 0.618033988749894) inputSampleL = lastSampleL[stage] + 0.618033988749894; + if (inputSampleL - lastSampleL[stage] < -0.618033988749894) inputSampleL = lastSampleL[stage] - 0.618033988749894; + if (inputSampleR > 4.0) inputSampleR = 4.0; if (inputSampleR < -4.0) inputSampleR = -4.0; + if (inputSampleR - lastSampleR[stage] > 0.618033988749894) inputSampleR = lastSampleR[stage] + 0.618033988749894; + if (inputSampleR - lastSampleR[stage] < -0.618033988749894) inputSampleR = lastSampleR[stage] - 0.618033988749894; + //same as slew clippage + + //begin ClipOnly2 as a little, compressed chunk that can be dropped into code + if (wasPosClipL[stage] == true) { //current will be over + if (inputSampleL1.618033988749894) {wasPosClipL[stage]=true;inputSampleL=1.0+(lastSampleL[stage]*0.381966011250105);} + if (wasNegClipL[stage] == true) { //current will be -over + if (inputSampleL > lastSampleL[stage]) lastSampleL[stage]=-1.0+(inputSampleL*0.381966011250105); + else lastSampleL[stage]=-0.618033988749894+(lastSampleL[stage]*0.618033988749894); + } wasNegClipL[stage] = false; + if (inputSampleL<-1.618033988749894) {wasNegClipL[stage]=true;inputSampleL=-1.0+(lastSampleL[stage]*0.381966011250105);} + intermediateL[spacing][stage] = inputSampleL; + inputSampleL = lastSampleL[stage]; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateL[x-1][stage] = intermediateL[x][stage]; + lastSampleL[stage] = intermediateL[0][stage]; //run a little buffer to handle this + //end ClipOnly2 as a little, compressed chunk that can be dropped into code + + //begin ClipOnly2 as a little, compressed chunk that can be dropped into code + if (wasPosClipR[stage] == true) { //current will be over + if (inputSampleR1.618033988749894) {wasPosClipR[stage]=true;inputSampleR=1.0+(lastSampleR[stage]*0.381966011250105);} + if (wasNegClipR[stage] == true) { //current will be -over + if (inputSampleR > lastSampleR[stage]) lastSampleR[stage]=-1.0+(inputSampleR*0.381966011250105); + else lastSampleR[stage]=-0.618033988749894+(lastSampleR[stage]*0.618033988749894); + } wasNegClipR[stage] = false; + if (inputSampleR<-1.618033988749894) {wasNegClipR[stage]=true;inputSampleR=-1.0+(lastSampleR[stage]*0.381966011250105);} + intermediateR[spacing][stage] = inputSampleR; + inputSampleR = lastSampleR[stage]; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateR[x-1][stage] = intermediateR[x][stage]; + lastSampleR[stage] = intermediateR[0][stage]; //run a little buffer to handle this + //end ClipOnly2 as a little, compressed chunk that can be dropped into code + } + + switch (mode) + { + case 1: break; //Normal + case 2: inputSampleL /= inputGain; inputSampleR /= inputGain; break; //Gain Match + case 3: inputSampleL = overshootL; inputSampleR = overshootR; break; //Clip Only + case 4: break; //Afterburner + case 5: break; //Explode + case 6: break; //Nuke + case 7: break; //Apocalypse + case 8: break; //Apotheosis + } + //this is our output mode switch, showing the effects + inputSampleL *= ceiling; + inputSampleR *= ceiling; + + //begin 32 bit stereo floating point dither + int expon; frexpf((float)inputSampleL, &expon); + fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5; + inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62)); + frexpf((float)inputSampleR, &expon); + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5; + inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62)); + //end 32 bit stereo floating point dither + + *out1 = inputSampleL; + *out2 = inputSampleR; + + in1++; + in2++; + out1++; + out2++; + } +} + +void ADClip8::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) +{ + double* in1 = inputs[0]; + double* in2 = inputs[1]; + double* out1 = outputs[0]; + double* out2 = outputs[1]; + + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + int spacing = floor(overallscale); //should give us working basic scaling, usually 2 or 4 + if (spacing < 1) spacing = 1; if (spacing > 16) spacing = 16; + //double hardness = 0.618033988749894; // golden ratio + //double softness = 0.381966011250105; // 1.0 - hardness + //double refclip = 1.618033988749894; // -0.2dB we're making all this pure raw code + //refclip*hardness = 1.0 to use ClipOnly as a prefab code-chunk. + //refclip*softness = 0.618033988749894 Seven decimal places is plenty as it's + //not related to the original sound much: it's an arbitrary position in softening. + double inputGain = pow(10.0,(A*18.0)/20.0); + + double ceiling = (1.0+(B*0.23594733))*0.5; + int mode = (int) (C*7.999)+1; + int stageSetting = mode-2; + if (stageSetting < 1) stageSetting = 1; + inputGain = ((inputGain-1.0)/stageSetting)+1.0; + + while (--sampleFrames >= 0) + { + double inputSampleL = *in1; + double inputSampleR = *in2; + if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17; + if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17; + double overshootL = 0.0; + double overshootR = 0.0; + inputSampleL *= 2.0; + inputSampleR *= 2.0; + + for (int stage = 0; stage < stageSetting; stage++) { + if (inputGain != 1.0) { + inputSampleL *= inputGain; + inputSampleR *= inputGain; + } + if (stage == 0){ + overshootL = fabs(inputSampleL) - 1.618033988749894; + if (overshootL < 0.0) overshootL = 0.0; + overshootR = fabs(inputSampleR) - 1.618033988749894; + if (overshootR < 0.0) overshootR = 0.0; + } + if (inputSampleL > 4.0) inputSampleL = 4.0; if (inputSampleL < -4.0) inputSampleL = -4.0; + if (inputSampleL - lastSampleL[stage] > 0.618033988749894) inputSampleL = lastSampleL[stage] + 0.618033988749894; + if (inputSampleL - lastSampleL[stage] < -0.618033988749894) inputSampleL = lastSampleL[stage] - 0.618033988749894; + if (inputSampleR > 4.0) inputSampleR = 4.0; if (inputSampleR < -4.0) inputSampleR = -4.0; + if (inputSampleR - lastSampleR[stage] > 0.618033988749894) inputSampleR = lastSampleR[stage] + 0.618033988749894; + if (inputSampleR - lastSampleR[stage] < -0.618033988749894) inputSampleR = lastSampleR[stage] - 0.618033988749894; + //same as slew clippage + + //begin ClipOnly2 as a little, compressed chunk that can be dropped into code + if (wasPosClipL[stage] == true) { //current will be over + if (inputSampleL1.618033988749894) {wasPosClipL[stage]=true;inputSampleL=1.0+(lastSampleL[stage]*0.381966011250105);} + if (wasNegClipL[stage] == true) { //current will be -over + if (inputSampleL > lastSampleL[stage]) lastSampleL[stage]=-1.0+(inputSampleL*0.381966011250105); + else lastSampleL[stage]=-0.618033988749894+(lastSampleL[stage]*0.618033988749894); + } wasNegClipL[stage] = false; + if (inputSampleL<-1.618033988749894) {wasNegClipL[stage]=true;inputSampleL=-1.0+(lastSampleL[stage]*0.381966011250105);} + intermediateL[spacing][stage] = inputSampleL; + inputSampleL = lastSampleL[stage]; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateL[x-1][stage] = intermediateL[x][stage]; + lastSampleL[stage] = intermediateL[0][stage]; //run a little buffer to handle this + //end ClipOnly2 as a little, compressed chunk that can be dropped into code + + //begin ClipOnly2 as a little, compressed chunk that can be dropped into code + if (wasPosClipR[stage] == true) { //current will be over + if (inputSampleR1.618033988749894) {wasPosClipR[stage]=true;inputSampleR=1.0+(lastSampleR[stage]*0.381966011250105);} + if (wasNegClipR[stage] == true) { //current will be -over + if (inputSampleR > lastSampleR[stage]) lastSampleR[stage]=-1.0+(inputSampleR*0.381966011250105); + else lastSampleR[stage]=-0.618033988749894+(lastSampleR[stage]*0.618033988749894); + } wasNegClipR[stage] = false; + if (inputSampleR<-1.618033988749894) {wasNegClipR[stage]=true;inputSampleR=-1.0+(lastSampleR[stage]*0.381966011250105);} + intermediateR[spacing][stage] = inputSampleR; + inputSampleR = lastSampleR[stage]; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateR[x-1][stage] = intermediateR[x][stage]; + lastSampleR[stage] = intermediateR[0][stage]; //run a little buffer to handle this + //end ClipOnly2 as a little, compressed chunk that can be dropped into code + } + + switch (mode) + { + case 1: break; //Normal + case 2: inputSampleL /= inputGain; inputSampleR /= inputGain; break; //Gain Match + case 3: inputSampleL = overshootL; inputSampleR = overshootR; break; //Clip Only + case 4: break; //Afterburner + case 5: break; //Explode + case 6: break; //Nuke + case 7: break; //Apocalypse + case 8: break; //Apotheosis + } + //this is our output mode switch, showing the effects + inputSampleL *= ceiling; + inputSampleR *= ceiling; + + //begin 64 bit stereo floating point dither + //int expon; frexp((double)inputSampleL, &expon); + fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5; + //inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62)); + //frexp((double)inputSampleR, &expon); + fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5; + //inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62)); + //end 64 bit stereo floating point dither + + *out1 = inputSampleL; + *out2 = inputSampleR; + + in1++; + in2++; + out1++; + out2++; + } +} +} // end namespace diff --git a/src/autogen_airwin/CMakeLists.txt b/src/autogen_airwin/CMakeLists.txt index a95e02d..c0f90f5 100644 --- a/src/autogen_airwin/CMakeLists.txt +++ b/src/autogen_airwin/CMakeLists.txt @@ -1,6 +1,8 @@ set(AIRWIN_SOURCES src/autogen_airwin/ADClip7.cpp src/autogen_airwin/ADClip7Proc.cpp + src/autogen_airwin/ADClip8.cpp + src/autogen_airwin/ADClip8Proc.cpp src/autogen_airwin/ADT.cpp src/autogen_airwin/ADTProc.cpp src/autogen_airwin/AQuickVoiceClip.cpp @@ -297,6 +299,8 @@ set(AIRWIN_SOURCES src/autogen_airwin/FacetProc.cpp src/autogen_airwin/FathomFive.cpp src/autogen_airwin/FathomFiveProc.cpp + src/autogen_airwin/FinalClip.cpp + src/autogen_airwin/FinalClipProc.cpp src/autogen_airwin/FireAmp.cpp src/autogen_airwin/FireAmpProc.cpp src/autogen_airwin/Flipity.cpp diff --git a/src/autogen_airwin/FinalClip.cpp b/src/autogen_airwin/FinalClip.cpp new file mode 100644 index 0000000..e5ae4d3 --- /dev/null +++ b/src/autogen_airwin/FinalClip.cpp @@ -0,0 +1,104 @@ +/* ======================================== + * FinalClip - FinalClip.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __FinalClip_H +#include "FinalClip.h" +#endif +namespace airwin2rack::FinalClip { + +AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new FinalClip(audioMaster);} + +FinalClip::FinalClip(audioMasterCallback audioMaster) : + AudioEffectX(audioMaster, kNumPrograms, kNumParameters) +{ + lastSampleL = 0.0; + wasPosClipL = false; + wasNegClipL = false; + lastSampleR = 0.0; + wasPosClipR = false; + wasNegClipR = false; + for (int x = 0; x < 16; x++) {intermediateL[x] = 0.0; intermediateR[x] = 0.0;} + //fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX; + //fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX; //leave off for ClipOnly + //this is reset: values being initialized only once. Startup values, whatever they are. + + _canDo.insert("plugAsChannelInsert"); // plug-in can be used as a channel insert effect. + _canDo.insert("plugAsSend"); // plug-in can be used as a send effect. + _canDo.insert("x2in2out"); + setNumInputs(kNumInputs); + setNumOutputs(kNumOutputs); + setUniqueID(kUniqueId); + canProcessReplacing(); // supports output replacing + canDoubleReplacing(); // supports double precision processing + programsAreChunks(true); + vst_strncpy (_programName, "Default", kVstMaxProgNameLen); // default program name +} + +FinalClip::~FinalClip() {} +VstInt32 FinalClip::getVendorVersion () {return 1000;} +void FinalClip::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);} +void FinalClip::getProgramName(char *name) {vst_strncpy (name, _programName, kVstMaxProgNameLen);} +//airwindows likes to ignore this stuff. Make your own programs, and make a different plugin rather than +//trying to do versioning and preventing people from using older versions. Maybe they like the old one! + +void FinalClip::setParameter(VstInt32 index, float value) { + switch (index) { + default: break; // unknown parameter, shouldn't happen! + } +} + +float FinalClip::getParameter(VstInt32 index) { + switch (index) { + default: break; // unknown parameter, shouldn't happen! + } return 0.0; //we only need to update the relevant name, this is simple to manage +} + +void FinalClip::getParameterName(VstInt32 index, char *text) { + switch (index) { + default: break; // unknown parameter, shouldn't happen! + } //this is our labels for displaying in the VST host +} + +void FinalClip::getParameterDisplay(VstInt32 index, char *text) { + switch (index) { + default: break; // unknown parameter, shouldn't happen! + } //this displays the values and handles 'popups' where it's discrete choices +} + +void FinalClip::getParameterLabel(VstInt32 index, char *text) { + switch (index) { + default: break; // unknown parameter, shouldn't happen! + } +} + +VstInt32 FinalClip::canDo(char *text) +{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know + +bool FinalClip::getEffectName(char* name) { + vst_strncpy(name, "FinalClip", kVstMaxProductStrLen); return true; +} + +VstPlugCategory FinalClip::getPlugCategory() {return kPlugCategEffect;} + +bool FinalClip::getProductString(char* text) { + vst_strncpy (text, "airwindows FinalClip", kVstMaxProductStrLen); return true; +} + +bool FinalClip::getVendorString(char* text) { + vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true; +} +bool FinalClip::parameterTextToValue(VstInt32 index, const char *text, float &value) { + switch(index) { + + } + return false; +} +bool FinalClip::canConvertParameterTextToValue(VstInt32 index) { + switch(index) { + + } + return false; +} +} // end namespace diff --git a/src/autogen_airwin/FinalClip.h b/src/autogen_airwin/FinalClip.h new file mode 100644 index 0000000..3fb601a --- /dev/null +++ b/src/autogen_airwin/FinalClip.h @@ -0,0 +1,72 @@ +/* ======================================== + * FinalClip - FinalClip.h + * Created 8/12/11 by SPIAdmin + * Copyright (c) Airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __FinalClip_FinalClip_H +#define __FinalClip_FinalClip_H + +#ifndef __audioeffect__ +#include "../airwin2rackbase.h" +#endif + +#include +#include +#include + +namespace airwin2rack::FinalClip { +enum { + kNumParameters = 0 +}; // + +const int kNumPrograms = 0; +const int kNumInputs = 2; +const int kNumOutputs = 2; +const unsigned long kUniqueId = 'fncp'; //Change this to what the AU identity is! + +class FinalClip : + public AudioEffectX +{ +public: + FinalClip(audioMasterCallback audioMaster); + ~FinalClip(); + virtual bool getEffectName(char* name); // The plug-in name + virtual VstPlugCategory getPlugCategory(); // The general category for the plug-in + virtual bool getProductString(char* text); // This is a unique plug-in string provided by Steinberg + virtual bool getVendorString(char* text); // Vendor info + virtual VstInt32 getVendorVersion(); // Version number + virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); + virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames); + virtual void getProgramName(char *name); // read the name from the host + virtual void setProgramName(char *name); // changes the name of the preset displayed in the host + virtual float getParameter(VstInt32 index); // get the parameter value at the specified index + virtual void setParameter(VstInt32 index, float value); // set the parameter at index to value + virtual void getParameterLabel(VstInt32 index, char *text); // label for the parameter (eg dB) + virtual void getParameterName(VstInt32 index, char *text); // name of the parameter + virtual void getParameterDisplay(VstInt32 index, char *text); // text description of the current value + // Added by the perl as inverses + virtual bool parameterTextToValue(VstInt32 index, const char *text, float &value); + virtual bool canConvertParameterTextToValue(VstInt32 index); + virtual VstInt32 canDo(char *text); +private: + char _programName[kVstMaxProgNameLen + 1]; + std::set< std::string > _canDo; + + double lastSampleL; + double intermediateL[16]; + bool wasPosClipL; + bool wasNegClipL; + double lastSampleR; + double intermediateR[16]; + bool wasPosClipR; + bool wasNegClipR; //Stereo ClipOnly2 + + //uint32_t fpdL; + //uint32_t fpdR; //leave off + //default stuff + +}; + +#endif +} // end namespace diff --git a/src/autogen_airwin/FinalClipProc.cpp b/src/autogen_airwin/FinalClipProc.cpp new file mode 100644 index 0000000..7a64f2a --- /dev/null +++ b/src/autogen_airwin/FinalClipProc.cpp @@ -0,0 +1,199 @@ +/* ======================================== + * FinalClip - FinalClip.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __FinalClip_H +#include "FinalClip.h" +#endif +namespace airwin2rack::FinalClip { + +void FinalClip::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) +{ + float* in1 = inputs[0]; + float* in2 = inputs[1]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + int spacing = floor(overallscale); //should give us working basic scaling, usually 2 or 4 + if (spacing < 1) spacing = 1; if (spacing > 16) spacing = 16; + //double hardness = 0.7390851332151606; // x == cos(x) + //double softness = 0.260914866784839; // 1.0 - hardness + //double refclip = 0.9549925859; // -0.2dB we're making all this pure raw code + //refclip*hardness = 0.705820822569392 to use ClipOnly as a prefab code-chunk. + //refclip*softness = 0.249171763330607 Seven decimal places is plenty as it's + //not related to the original sound much: it's an arbitrary position in softening. + //This is where the numbers come from, referencing the code of the original ClipOnly + + //double hardness = 0.618033988749894; // golden ratio + //double softness = 0.381966011250105; // 1.0 - hardness + //double refclip = 1.618033988749894; // -0.2dB we're making all this pure raw code + //refclip*hardness = 1.0 to use ClipOnly as a prefab code-chunk. + //refclip*softness = 0.618033988749894 Seven decimal places is plenty as it's + //not related to the original sound much: it's an arbitrary position in softening. + + while (--sampleFrames >= 0) + { + float inputSampleL = *in1; + float inputSampleR = *in2; + // if (fabs(inputSampleL)<1.18e-37) inputSampleL = fpdL * 1.18e-37; + // if (fabs(inputSampleR)<1.18e-37) inputSampleR = fpdR * 1.18e-37; + //do NOT use on ClipOnly, it is almost always a pure bypass + + if (inputSampleL > 4.0) inputSampleL = 4.0; if (inputSampleL < -4.0) inputSampleL = -4.0; + if (inputSampleL - lastSampleL > 0.618033988749894) inputSampleL = lastSampleL + 0.618033988749894; + if (inputSampleL - lastSampleL < -0.618033988749894) inputSampleL = lastSampleL - 0.618033988749894; + //same as slew clippage + + //begin ClipOnly2 stereo as a little, compressed chunk that can be dropped into code + if (wasPosClipL == true) { //current will be over + if (inputSampleL1.618033988749894) {wasPosClipL=true;inputSampleL=1.0+(lastSampleL*0.381966011250105);} + if (wasNegClipL == true) { //current will be -over + if (inputSampleL > lastSampleL) lastSampleL=-1.0+(inputSampleL*0.381966011250105); + else lastSampleL=-0.618033988749894+(lastSampleL*0.618033988749894); + } wasNegClipL = false; + if (inputSampleL<-1.618033988749894) {wasNegClipL=true;inputSampleL=-1.0+(lastSampleL*0.381966011250105);} + intermediateL[spacing] = inputSampleL; + inputSampleL = lastSampleL; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateL[x-1] = intermediateL[x]; + lastSampleL = intermediateL[0]; //run a little buffer to handle this + + if (inputSampleR > 4.0) inputSampleR = 4.0; if (inputSampleR < -4.0) inputSampleR = -4.0; + if (inputSampleR - lastSampleR > 0.618033988749894) inputSampleR = lastSampleR + 0.618033988749894; + if (inputSampleR - lastSampleR < -0.618033988749894) inputSampleR = lastSampleR - 0.618033988749894; + //same as slew clippage + + if (wasPosClipR == true) { //current will be over + if (inputSampleR1.618033988749894) {wasPosClipR=true;inputSampleR=1.0+(lastSampleR*0.381966011250105);} + if (wasNegClipR == true) { //current will be -over + if (inputSampleR > lastSampleR) lastSampleR=-1.0+(inputSampleR*0.381966011250105); + else lastSampleR=-0.618033988749894+(lastSampleR*0.618033988749894); + } wasNegClipR = false; + if (inputSampleR<-1.618033988749894) {wasNegClipR=true;inputSampleR=-1.0+(lastSampleR*0.381966011250105);} + intermediateR[spacing] = inputSampleR; + inputSampleR = lastSampleR; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateR[x-1] = intermediateR[x]; + lastSampleR = intermediateR[0]; //run a little buffer to handle this + //end ClipOnly2 stereo as a little, compressed chunk that can be dropped into code + + //begin 32 bit stereo floating point dither + // int expon; frexpf((float)inputSampleL, &expon); + // fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5; + // inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62)); + // frexpf((float)inputSampleR, &expon); + // fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5; + // inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 5.5e-36l * pow(2,expon+62)); + //end 32 bit stereo floating point dither + //do NOT use on ClipOnly, it is almost always a pure bypass + + *out1 = inputSampleL; + *out2 = inputSampleR; + + in1++; + in2++; + out1++; + out2++; + } +} + +void FinalClip::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) +{ + double* in1 = inputs[0]; + double* in2 = inputs[1]; + double* out1 = outputs[0]; + double* out2 = outputs[1]; + + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + int spacing = floor(overallscale); //should give us working basic scaling, usually 2 or 4 + if (spacing < 1) spacing = 1; if (spacing > 16) spacing = 16; + //double hardness = 0.7390851332151606; // x == cos(x) + //double softness = 0.260914866784839; // 1.0 - hardness + //double refclip = 0.9549925859; // -0.2dB we're making all this pure raw code + //refclip*hardness = 0.705820822569392 to use ClipOnly as a prefab code-chunk. + //refclip*softness = 0.249171763330607 Seven decimal places is plenty as it's + //not related to the original sound much: it's an arbitrary position in softening. + //This is where the numbers come from, referencing the code of the original ClipOnly + + while (--sampleFrames >= 0) + { + double inputSampleL = *in1; + double inputSampleR = *in2; + // if (fabs(inputSampleL)<1.18e-43) inputSampleL = fpdL * 1.18e-43; + // if (fabs(inputSampleR)<1.18e-43) inputSampleR = fpdR * 1.18e-43; + //do NOT use on ClipOnly, it is almost always a pure bypass + + if (inputSampleL > 4.0) inputSampleL = 4.0; if (inputSampleL < -4.0) inputSampleL = -4.0; + if (inputSampleL - lastSampleL > 0.618033988749894) inputSampleL = lastSampleL + 0.618033988749894; + if (inputSampleL - lastSampleL < -0.618033988749894) inputSampleL = lastSampleL - 0.618033988749894; + //same as slew clippage + + //begin ClipOnly2 stereo as a little, compressed chunk that can be dropped into code + if (wasPosClipL == true) { //current will be over + if (inputSampleL1.618033988749894) {wasPosClipL=true;inputSampleL=1.0+(lastSampleL*0.381966011250105);} + if (wasNegClipL == true) { //current will be -over + if (inputSampleL > lastSampleL) lastSampleL=-1.0+(inputSampleL*0.381966011250105); + else lastSampleL=-0.618033988749894+(lastSampleL*0.618033988749894); + } wasNegClipL = false; + if (inputSampleL<-1.618033988749894) {wasNegClipL=true;inputSampleL=-1.0+(lastSampleL*0.381966011250105);} + intermediateL[spacing] = inputSampleL; + inputSampleL = lastSampleL; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateL[x-1] = intermediateL[x]; + lastSampleL = intermediateL[0]; //run a little buffer to handle this + + if (inputSampleR > 4.0) inputSampleR = 4.0; if (inputSampleR < -4.0) inputSampleR = -4.0; + if (inputSampleR - lastSampleR > 0.618033988749894) inputSampleR = lastSampleR + 0.618033988749894; + if (inputSampleR - lastSampleR < -0.618033988749894) inputSampleR = lastSampleR - 0.618033988749894; + //same as slew clippage + + if (wasPosClipR == true) { //current will be over + if (inputSampleR1.618033988749894) {wasPosClipR=true;inputSampleR=1.0+(lastSampleR*0.381966011250105);} + if (wasNegClipR == true) { //current will be -over + if (inputSampleR > lastSampleR) lastSampleR=-1.0+(inputSampleR*0.381966011250105); + else lastSampleR=-0.618033988749894+(lastSampleR*0.618033988749894); + } wasNegClipR = false; + if (inputSampleR<-1.618033988749894) {wasNegClipR=true;inputSampleR=-1.0+(lastSampleR*0.381966011250105);} + intermediateR[spacing] = inputSampleR; + inputSampleR = lastSampleR; //Latency is however many samples equals one 44.1k sample + for (int x = spacing; x > 0; x--) intermediateR[x-1] = intermediateR[x]; + lastSampleR = intermediateR[0]; //run a little buffer to handle this + //end ClipOnly2 stereo as a little, compressed chunk that can be dropped into code + + //begin 64 bit stereo floating point dither + // int expon; frexp((double)inputSampleL, &expon); + // fpdL ^= fpdL << 13; fpdL ^= fpdL >> 17; fpdL ^= fpdL << 5; + // inputSampleL += ((double(fpdL)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62)); + // frexp((double)inputSampleR, &expon); + // fpdR ^= fpdR << 13; fpdR ^= fpdR >> 17; fpdR ^= fpdR << 5; + // inputSampleR += ((double(fpdR)-uint32_t(0x7fffffff)) * 1.1e-44l * pow(2,expon+62)); + //end 64 bit stereo floating point dither + //do NOT use on ClipOnly, it is almost always a pure bypass + + *out1 = inputSampleL; + *out2 = inputSampleR; + + in1++; + in2++; + out1++; + out2++; + } +} +} // end namespace diff --git a/src/autogen_airwin/kCathedral2.cpp b/src/autogen_airwin/kCathedral2.cpp index b6b4a04..4a86268 100644 --- a/src/autogen_airwin/kCathedral2.cpp +++ b/src/autogen_airwin/kCathedral2.cpp @@ -171,7 +171,10 @@ kCathedral2::kCathedral2(audioMasterCallback audioMaster) : for (int x = 0; x < pear_total; x++) {pearA[x] = 0.0; pearB[x] = 0.0; pearC[x] = 0.0; pearD[x] = 0.0; pearE[x] = 0.0; pearF[x] = 0.0;} //from PearEQ - + + vibratoL = vibAL = vibAR = vibBL = vibBR = 0.0; + vibratoR = M_PI_4; + subAL = subAR = subBL = subBR = subCL = subCR = 0.0; sbAL = sbAR = sbBL = sbBR = sbCL = sbCR = 0.0; //from SubTight diff --git a/src/autogen_airwin/kCathedral2.h b/src/autogen_airwin/kCathedral2.h index be0a361..85750fe 100644 --- a/src/autogen_airwin/kCathedral2.h +++ b/src/autogen_airwin/kCathedral2.h @@ -319,7 +319,13 @@ class kCathedral2 : double pearE[pear_total]; //probably worth just using a number here double pearF[pear_total]; //probably worth just using a number here - + double vibratoL; + double vibratoR; + double vibAL; + double vibAR; + double vibBL; + double vibBR; + double subAL; double subAR; double subBL; diff --git a/src/autogen_airwin/kCathedral2Proc.cpp b/src/autogen_airwin/kCathedral2Proc.cpp index 2c341e3..b51f7de 100644 --- a/src/autogen_airwin/kCathedral2Proc.cpp +++ b/src/autogen_airwin/kCathedral2Proc.cpp @@ -421,6 +421,19 @@ void kCathedral2::processReplacing(float **inputs, float **outputs, VstInt32 sam outUR += aUR[countUR-((countUR > delayU)?delayU+1:0)]; //the 11-length delay slot becomes a sole allpass + vibBL = vibAL; vibAL = outUL; + vibBR = vibAR; vibAR = outUR; //tiny two sample delay chains + vibratoL += fpdL * 0.5e-13; if (vibratoL > M_PI*2.0) vibratoL -= M_PI*2.0; + vibratoR += fpdR * 0.5e-13; if (vibratoR > M_PI*2.0) vibratoR -= M_PI*2.0; + double quadL = sin(vibratoL)+1.0; + double quadR = sin(vibratoR)+1.0; + //quadrature delay points play back from a position in delay chains + if (quadL < 1.0) outUL = (outUL*(1.0-quadL))+(vibAL*quadL); + else outUL = (vibAL*(1.0-(quadL-1.0)))+(vibBL*(quadL-1.0)); + if (quadR < 1.0) outUR = (outUR*(1.0-quadR))+(vibAR*quadR); + else outUR = (vibAR*(1.0-(quadR-1.0)))+(vibBR*(quadR-1.0)); + //also, pitch drift this allpass slot for very subtle motion + countVL++; if (countVL < 0 || countVL > delayV) countVL = 0; countWL++; if (countWL < 0 || countWL > delayW) countWL = 0; countXL++; if (countXL < 0 || countXL > delayX) countXL = 0; @@ -1026,6 +1039,19 @@ void kCathedral2::processDoubleReplacing(double **inputs, double **outputs, VstI outUR += aUR[countUR-((countUR > delayU)?delayU+1:0)]; //the 11-length delay slot becomes a sole allpass + vibBL = vibAL; vibAL = outUL; + vibBR = vibAR; vibAR = outUR; //tiny two sample delay chains + vibratoL += fpdL * 0.5e-13; if (vibratoL > M_PI*2.0) vibratoL -= M_PI*2.0; + vibratoR += fpdR * 0.5e-13; if (vibratoR > M_PI*2.0) vibratoR -= M_PI*2.0; + double quadL = sin(vibratoL)+1.0; + double quadR = sin(vibratoR)+1.0; + //quadrature delay points play back from a position in delay chains + if (quadL < 1.0) outUL = (outUL*(1.0-quadL))+(vibAL*quadL); + else outUL = (vibAL*(1.0-(quadL-1.0)))+(vibBL*(quadL-1.0)); + if (quadR < 1.0) outUR = (outUR*(1.0-quadR))+(vibAR*quadR); + else outUR = (vibAR*(1.0-(quadR-1.0)))+(vibBR*(quadR-1.0)); + //also, pitch drift this allpass slot for very subtle motion + countVL++; if (countVL < 0 || countVL > delayV) countVL = 0; countWL++; if (countWL < 0 || countWL > delayW) countWL = 0; countXL++; if (countXL < 0 || countXL > delayX) countXL = 0;