From 1bf3f7f7d15c009cfdb7d1b5050badc1bcd679ac Mon Sep 17 00:00:00 2001 From: GithubActions BaconPaul Bot Date: Sun, 17 Mar 2024 10:20:16 +0000 Subject: [PATCH] Update to Latest Airwin --- libs/airwindows | 2 +- res/awpdoc/Air3.txt | 21 + res/awpdoc/Overheads.txt | 17 + src/ModuleAdd.h | 672 ++++++++++++----------- src/autogen_airwin/Air3.cpp | 2 +- src/autogen_airwin/Air3.h | 25 +- src/autogen_airwin/Air3Proc.cpp | 142 +++-- src/autogen_airwin/BiquadNonLin.cpp | 143 +++++ src/autogen_airwin/BiquadNonLin.h | 100 ++++ src/autogen_airwin/BiquadNonLinProc.cpp | 300 ++++++++++ src/autogen_airwin/CMakeLists.txt | 6 + src/autogen_airwin/Discontinuity.cpp | 29 +- src/autogen_airwin/Discontinuity.h | 35 +- src/autogen_airwin/DiscontinuityProc.cpp | 194 ++++--- src/autogen_airwin/Kalman.cpp | 16 +- src/autogen_airwin/Kalman.h | 32 +- src/autogen_airwin/KalmanProc.cpp | 140 +++-- src/autogen_airwin/Pear2.cpp | 142 +++++ src/autogen_airwin/Pear2.h | 147 +++++ src/autogen_airwin/Pear2Proc.cpp | 161 ++++++ src/autogen_airwin/Trianglizer.cpp | 120 ++++ src/autogen_airwin/Trianglizer.h | 67 +++ src/autogen_airwin/TrianglizerProc.cpp | 118 ++++ 23 files changed, 2029 insertions(+), 602 deletions(-) create mode 100644 res/awpdoc/Air3.txt create mode 100644 res/awpdoc/Overheads.txt create mode 100644 src/autogen_airwin/BiquadNonLin.cpp create mode 100644 src/autogen_airwin/BiquadNonLin.h create mode 100644 src/autogen_airwin/BiquadNonLinProc.cpp create mode 100644 src/autogen_airwin/Pear2.cpp create mode 100644 src/autogen_airwin/Pear2.h create mode 100644 src/autogen_airwin/Pear2Proc.cpp create mode 100644 src/autogen_airwin/Trianglizer.cpp create mode 100644 src/autogen_airwin/Trianglizer.h create mode 100644 src/autogen_airwin/TrianglizerProc.cpp diff --git a/libs/airwindows b/libs/airwindows index a6dba1e..ba4ebeb 160000 --- a/libs/airwindows +++ b/libs/airwindows @@ -1 +1 @@ -Subproject commit a6dba1efc8bf7581e6f8c93d680f0e5c88432e5f +Subproject commit ba4ebeb3e2ac2d1c0d7591c6a443e3ba89b4c046 diff --git a/res/awpdoc/Air3.txt b/res/awpdoc/Air3.txt new file mode 100644 index 0000000..8433512 --- /dev/null +++ b/res/awpdoc/Air3.txt @@ -0,0 +1,21 @@ +# Air3 creates a new form of air-band EQ based on Kalman filtering. + +This should be fun :) + +Welcome to the experiment zone, once again, with Air3: an air band EQ based on an extension of Kalman filtering, which isn't normally used for audio purposes. As usual, Airwindows is bringing in algorithms that act weirdly because they come out of finance or science. In this case, it's science. + +What's Kalman filtering? You'll be hearing more about it, but it's a method of trying to bring accuracy out of noisy data by projecting what the real data might be, and then incorporating sensor readings based on how closely they correspond to the projection. The key idea there is 'based on', because Kalman is all about willingness to throw out bad data and try and zero in on what's really happening. + +Of course, in audio, it's ALL real. There's nothing to throw out, it's all legit. Give Air3 some audio, and it begins to do its analysis and projections based on something that doesn't exist: a hypothetical underlying sound, upon which your real-world cymbal sparkle or voice breathiness are just 'noise' to be removed. It's not even based on frequencies, it's trying to chart out a 'real' sound based on what's already a real sound. + +What happens? For one, you get a rolled-off sound that is very, very convincing. It's easy to believe the sound was just that way to start with. You don't get a sense of brightness reduction, it just sounds natural. Air3 is shunting off the whole air band to a separate control, and what it leaves behind is very plausible and doesn't sound filtered. Great for reduction of tizz, glare and detail. + +And then you take that redirected air band, bring it back in, and crank it up five times as loud, and Air3 comes alive. + +I've not heard a better EQ for this super-high stuff. It seems really good at lighting up any audio you send through it. Bear in mind that much like both Air and Air2 before it, this is not an EQ in the normal sense at all. Air and Air2 used the algorithms I also put in Energy, and what Air3 does has more in common with DeBess or Acceleration than it does an EQ. It's going way into concepts of measuring the rate of change of the rate of change and trying to project that onto expected future samples… it's got a large amount of boost on tap, but can be a bit unpredictable. If you simply cut the Gnd control (for Ground) you get just whatever air there was, if you cut the Air control you remove it, but if you boost the Air control lots and cut Gnd, you get another sound from the sheer intensity of boosting being done. + +I think this is going to be hard to beat for this purpose, especially used subtly, and expect to be including it into upcoming stuff that doesn't have to act like 'an EQ'. Still a lot of 'lettered' Console versions that need to be made, to emulate analog gear. This one's for imagining where we can go after that, for a new sort of mixing in the box that doesn't follow the constrictions of analog gear, letting you dial in tone characteristics as much as frequencies. + +For now, enjoy Air3, and if you've got opinions on what needs to follow it next, drop by a livestream: you have Air3 today because a livestream viewer asked for it to come out ASAP, and here we are. There's lots more. I'll keep working on all this stuff, it's great to see it all come together :) + + diff --git a/res/awpdoc/Overheads.txt b/res/awpdoc/Overheads.txt new file mode 100644 index 0000000..d226b80 --- /dev/null +++ b/res/awpdoc/Overheads.txt @@ -0,0 +1,17 @@ +# Overheads is for compressing only part of the sound, strangely! + +I could say this was a compressor for putting on drum overheads to take out the drums and leave only the cymbals, but that would only be scratching the surface… + +Overheads is one of those old Airwindows plugins built on really strange ideas. Let's assume we want to compress drums but leave cymbals. How might we do that? We could filter, but why would we do that when we could do something more perverse? Instead, let's take a really short delay, like a flange. Next, invert it: compression gets driven by the source audio minus the delayed. Then expand the delay. Then what? + +Then, high frequencies tend to slip through the cracks between the delay gap. They don't get affected as strongly. But deeper frequencies will produce one part louder than the other, and subtracting produces an output that can kick in the compression. Except it might not, because the sounds might not line up. So add a control called 'Node' to move the delay gap. But how do you know what to do with 'node'? Best change it to something else: 'Sharp', for instance (which is what happened). Then what? + +So, put 'Sharp' in the middle somewhere. Start cranking up Compr to compress it, and you'll hear the sound squish, then negate: an area in the sound will dynamically invert, as if you're deleting the snare or kick or whatever, but it will be weird. Move 'Sharp' around to adjust it: larger 'Sharp' should let it grab slightly deeper sounds, smaller 'Sharp' shifts the cancellation up a little. Push 'Compr' further to hear what it does. To actually use it for its intended purpose, back it off so you're only slightly clamping down the drums and leaving the cymbals, making space for spot mics. It'll mess with the cymbals: see if you like how that works. + +Or: do whatever go nuts, do crimes, ruin everything. Put it on every drum and set them all differently. Get a really bizarre sound that's not like anything else, live long, prosper. (if you do, join my Patreon!) + +No promises. + +Oh, also, as seen in the video, if you use this on a sine wave at just the right level, it will turn the sine wave into a triangle. I totally didn't mean for it to do that, and am not really sure how it manages it. Beware. Have fun :) + + diff --git a/src/ModuleAdd.h b/src/ModuleAdd.h index 86ea94f..15b52d2 100644 --- a/src/ModuleAdd.h +++ b/src/ModuleAdd.h @@ -1,37 +1,37 @@ #include "autogen_airwin/ADClip7.h" -int ADClip7_unused = AirwinRegistry::registerAirwindow({"ADClip7", "Clipping", 76, "ADClip7 is the original Airwindows loudness maximizer/ peak control.", airwin2rack::ADClip7::kNumParameters, []() { return std::make_unique(0); }}); +int ADClip7_unused = AirwinRegistry::registerAirwindow({"ADClip7", "Clipping", 77, "ADClip7 is the original Airwindows loudness maximizer/ peak control.", airwin2rack::ADClip7::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ADClip8.h" -int ADClip8_unused = AirwinRegistry::registerAirwindow({"ADClip8", "Clipping", 73, "ADClip8 is the ultimate Airwindows loudenator/biggenator.", airwin2rack::ADClip8::kNumParameters, []() { return std::make_unique(0); }}); +int ADClip8_unused = AirwinRegistry::registerAirwindow({"ADClip8", "Clipping", 74, "ADClip8 is the ultimate Airwindows loudenator/biggenator.", 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" -int AQuickVoiceClip_unused = AirwinRegistry::registerAirwindow({"AQuickVoiceClip", "Clipping", 77, "AQuickVoiceClip softens headset mic recordings that have been super hard clipped on capture.", airwin2rack::AQuickVoiceClip::kNumParameters, []() { return std::make_unique(0); }}); +int AQuickVoiceClip_unused = AirwinRegistry::registerAirwindow({"AQuickVoiceClip", "Clipping", 78, "AQuickVoiceClip softens headset mic recordings that have been super hard clipped on capture.", airwin2rack::AQuickVoiceClip::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Acceleration.h" -int Acceleration_unused = AirwinRegistry::registerAirwindow({"Acceleration", "Brightness", 64, "Acceleration is an acceleration limiter that tames edge, leaves brightness.", airwin2rack::Acceleration::kNumParameters, []() { return std::make_unique(0); }}); +int Acceleration_unused = AirwinRegistry::registerAirwindow({"Acceleration", "Brightness", 65, "Acceleration is an acceleration limiter that tames edge, leaves brightness.", airwin2rack::Acceleration::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Acceleration2.h" -int Acceleration2_unused = AirwinRegistry::registerAirwindow({"Acceleration2", "Brightness", 54, "Acceleration2 is Acceleration, better! Updated for high sample rate and more extreme effect.", airwin2rack::Acceleration2::kNumParameters, []() { return std::make_unique(0); }}); +int Acceleration2_unused = AirwinRegistry::registerAirwindow({"Acceleration2", "Brightness", 55, "Acceleration2 is Acceleration, better! Updated for high sample rate and more extreme effect.", airwin2rack::Acceleration2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Air.h" -int Air_unused = AirwinRegistry::registerAirwindow({"Air", "Brightness", 62, "Air is a different bright EQ from any other. Requires 44.1K.", airwin2rack::Air::kNumParameters, []() { return std::make_unique(0); }}); +int Air_unused = AirwinRegistry::registerAirwindow({"Air", "Brightness", 63, "Air is a different bright EQ from any other. Requires 44.1K.", airwin2rack::Air::kNumParameters, []() { return std::make_unique(0); }}); #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); }}); +int Air2_unused = AirwinRegistry::registerAirwindow({"Air2", "Brightness", 62, "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/Air3.h" -int Air3_unused = AirwinRegistry::registerAirwindow({"Air3", "Unclassified", -1, "", airwin2rack::Air3::kNumParameters, []() { return std::make_unique(0); }}); +int Air3_unused = AirwinRegistry::registerAirwindow({"Air3", "Brightness", 49, "Air3 creates a new form of air-band EQ based on Kalman filtering.", airwin2rack::Air3::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Apicolypse.h" -int Apicolypse_unused = AirwinRegistry::registerAirwindow({"Apicolypse", "Tone Color", 323, "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", 325, "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", 118, "AtmosphereBuss is Console5 processing with powerful new acoustic distance effects.", airwin2rack::AtmosphereBuss::kNumParameters, []() { return std::make_unique(0); }}); +int AtmosphereBuss_unused = AirwinRegistry::registerAirwindow({"AtmosphereBuss", "Consoles", 119, "AtmosphereBuss is Console5 processing with powerful new acoustic distance effects.", airwin2rack::AtmosphereBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/AtmosphereChannel.h" -int AtmosphereChannel_unused = AirwinRegistry::registerAirwindow({"AtmosphereChannel", "Consoles", 119, "AtmosphereChannel is Console5 processing with powerful new acoustic distance effects.", airwin2rack::AtmosphereChannel::kNumParameters, []() { return std::make_unique(0); }}); +int AtmosphereChannel_unused = AirwinRegistry::registerAirwindow({"AtmosphereChannel", "Consoles", 120, "AtmosphereChannel is Console5 processing with powerful new acoustic distance effects.", airwin2rack::AtmosphereChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Aura.h" -int Aura_unused = AirwinRegistry::registerAirwindow({"Aura", "Effects", 193, "Aura is a new kind of resonant lowpass EQ.", airwin2rack::Aura::kNumParameters, []() { return std::make_unique(0); }}); +int Aura_unused = AirwinRegistry::registerAirwindow({"Aura", "Effects", 195, "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", 294, "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", 296, "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", 218, "AverMatrix turns averaging into a full-featured EQ.", airwin2rack::AverMatrix::kNumParameters, []() { return std::make_unique(0); }}); +int AverMatrix_unused = AirwinRegistry::registerAirwindow({"AverMatrix", "Filter", 220, "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", 219, "Average is a distinctive sort of lowpass filter.", airwin2rack::Average::kNumParameters, []() { return std::make_unique(0); }}); +int Average_unused = AirwinRegistry::registerAirwindow({"Average", "Filter", 221, "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", 356, "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", 358, "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" @@ -39,11 +39,11 @@ int BassDrive_unused = AirwinRegistry::registerAirwindow({"BassDrive", "Amp Sims #include "autogen_airwin/BassKit.h" int BassKit_unused = AirwinRegistry::registerAirwindow({"BassKit", "Bass", 37, "BassKit is centered bass reinforcement with subs fill. Clean and controllable.", airwin2rack::BassKit::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Baxandall.h" -int Baxandall_unused = AirwinRegistry::registerAirwindow({"Baxandall", "Filter", 222, "Baxandall is a killer general-purpose EQ.", airwin2rack::Baxandall::kNumParameters, []() { return std::make_unique(0); }}); +int Baxandall_unused = AirwinRegistry::registerAirwindow({"Baxandall", "Filter", 224, "Baxandall is a killer general-purpose EQ.", airwin2rack::Baxandall::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Baxandall2.h" -int Baxandall2_unused = AirwinRegistry::registerAirwindow({"Baxandall2", "Filter", 207, "Baxandall2 is Baxandall, extended and made more powerful.", airwin2rack::Baxandall2::kNumParameters, []() { return std::make_unique(0); }}); +int Baxandall2_unused = AirwinRegistry::registerAirwindow({"Baxandall2", "Filter", 209, "Baxandall2 is Baxandall, extended and made more powerful.", airwin2rack::Baxandall2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Beam.h" -int Beam_unused = AirwinRegistry::registerAirwindow({"Beam", "Dithers", 142, "Beam is a wordlength reducer that tries to heighten sonority.", airwin2rack::Beam::kNumParameters, []() { return std::make_unique(0); }}); +int Beam_unused = AirwinRegistry::registerAirwindow({"Beam", "Dithers", 143, "Beam is a wordlength reducer that tries to heighten sonority.", airwin2rack::Beam::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BigAmp.h" int BigAmp_unused = AirwinRegistry::registerAirwindow({"BigAmp", "Amp Sims", 31, "BigAmp is a very flexible amplike thing with a taste for the bizarre.", airwin2rack::BigAmp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Biquad.h" @@ -52,6 +52,8 @@ int Biquad_unused = AirwinRegistry::registerAirwindow({"Biquad", "Biquads", 44, int Biquad2_unused = AirwinRegistry::registerAirwindow({"Biquad2", "Biquads", 48, "Biquad2 is the Airwindows biquad filter that's more sweepable and synthy.", airwin2rack::Biquad2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BiquadDouble.h" int BiquadDouble_unused = AirwinRegistry::registerAirwindow({"BiquadDouble", "Biquads", 45, "BiquadDouble is a handy Airwindows cascaded biquad filter: steeper roll-off before resonance.", airwin2rack::BiquadDouble::kNumParameters, []() { return std::make_unique(0); }}); +#include "autogen_airwin/BiquadNonLin.h" +int BiquadNonLin_unused = AirwinRegistry::registerAirwindow({"BiquadNonLin", "Unclassified", -1, "", airwin2rack::BiquadNonLin::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BiquadOneHalf.h" int BiquadOneHalf_unused = AirwinRegistry::registerAirwindow({"BiquadOneHalf", "Biquads", 46, "BiquadOneHalf is an interleaved biquad filter like Biquad.", airwin2rack::BiquadOneHalf::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BiquadPlus.h" @@ -59,17 +61,17 @@ int BiquadPlus_unused = AirwinRegistry::registerAirwindow({"BiquadPlus", "Biquad #include "autogen_airwin/BiquadTriple.h" int BiquadTriple_unused = AirwinRegistry::registerAirwindow({"BiquadTriple", "Biquads", 47, "BiquadTriple is a handy Airwindows cascaded biquad filter: steeper roll-off before resonance.", airwin2rack::BiquadTriple::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BitGlitter.h" -int BitGlitter_unused = AirwinRegistry::registerAirwindow({"BitGlitter", "Lo-Fi", 241, "BitGlitter is an old-sampler style digital lo-fi plugin.", airwin2rack::BitGlitter::kNumParameters, []() { return std::make_unique(0); }}); +int BitGlitter_unused = AirwinRegistry::registerAirwindow({"BitGlitter", "Lo-Fi", 243, "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", 340, "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", 342, "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", 339, "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", 341, "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", 246, "Bite is an unusual edge-maker.", airwin2rack::Bite::kNumParameters, []() { return std::make_unique(0); }}); +int Bite_unused = AirwinRegistry::registerAirwindow({"Bite", "Lo-Fi", 248, "Bite is an unusual edge-maker.", airwin2rack::Bite::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BlockParty.h" -int BlockParty_unused = AirwinRegistry::registerAirwindow({"BlockParty", "Dynamics", 169, "BlockParty is like a moderately saturated analog limiter.", airwin2rack::BlockParty::kNumParameters, []() { return std::make_unique(0); }}); +int BlockParty_unused = AirwinRegistry::registerAirwindow({"BlockParty", "Dynamics", 171, "BlockParty is like a moderately saturated analog limiter.", airwin2rack::BlockParty::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BrassRider.h" -int BrassRider_unused = AirwinRegistry::registerAirwindow({"BrassRider", "Dynamics", 175, "BrassRider is One Weird Trick for drum overheads in metal!", airwin2rack::BrassRider::kNumParameters, []() { return std::make_unique(0); }}); +int BrassRider_unused = AirwinRegistry::registerAirwindow({"BrassRider", "Dynamics", 177, "BrassRider is One Weird Trick for drum overheads in metal!", airwin2rack::BrassRider::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BrightAmbience.h" int BrightAmbience_unused = AirwinRegistry::registerAirwindow({"BrightAmbience", "Ambience", 19, "BrightAmbience is a plugin for very bright gated reverbs.", airwin2rack::BrightAmbience::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BrightAmbience2.h" @@ -77,537 +79,539 @@ int BrightAmbience2_unused = AirwinRegistry::registerAirwindow({"BrightAmbience2 #include "autogen_airwin/BrightAmbience3.h" int BrightAmbience3_unused = AirwinRegistry::registerAirwindow({"BrightAmbience3", "Ambience", 5, "BrightAmbience3 adds undersampling for high sample rates, and better feedback.", airwin2rack::BrightAmbience3::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/BuildATPDF.h" -int BuildATPDF_unused = AirwinRegistry::registerAirwindow({"BuildATPDF", "Dithers", 148, "BuildATPDF is a dither-making toolkit.", airwin2rack::BuildATPDF::kNumParameters, []() { return std::make_unique(0); }}); +int BuildATPDF_unused = AirwinRegistry::registerAirwindow({"BuildATPDF", "Dithers", 149, "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", 321, "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", 323, "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", 174, "ButterComp is my softest, smoothest compressor.", airwin2rack::ButterComp::kNumParameters, []() { return std::make_unique(0); }}); +int ButterComp_unused = AirwinRegistry::registerAirwindow({"ButterComp", "Dynamics", 176, "ButterComp is my softest, smoothest compressor.", airwin2rack::ButterComp::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ButterComp2.h" -int ButterComp2_unused = AirwinRegistry::registerAirwindow({"ButterComp2", "Dynamics", 165, "ButterComp2 is improved ButterComp with an output control and sound upgrades.", airwin2rack::ButterComp2::kNumParameters, []() { return std::make_unique(0); }}); +int ButterComp2_unused = AirwinRegistry::registerAirwindow({"ButterComp2", "Dynamics", 166, "ButterComp2 is improved ButterComp with an output control and sound upgrades.", airwin2rack::ButterComp2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/C5RawBuss.h" -int C5RawBuss_unused = AirwinRegistry::registerAirwindow({"C5RawBuss", "Consoles", 116, "C5RawBuss is the original Console5 algorithm, with optional very gentle DC suppression.", airwin2rack::C5RawBuss::kNumParameters, []() { return std::make_unique(0); }}); +int C5RawBuss_unused = AirwinRegistry::registerAirwindow({"C5RawBuss", "Consoles", 117, "C5RawBuss is the original Console5 algorithm, with optional very gentle DC suppression.", airwin2rack::C5RawBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/C5RawChannel.h" -int C5RawChannel_unused = AirwinRegistry::registerAirwindow({"C5RawChannel", "Consoles", 117, "C5RawChannel is the original Console5 algorithm, with optional very gentle DC suppression.", airwin2rack::C5RawChannel::kNumParameters, []() { return std::make_unique(0); }}); +int C5RawChannel_unused = AirwinRegistry::registerAirwindow({"C5RawChannel", "Consoles", 118, "C5RawChannel is the original Console5 algorithm, with optional very gentle DC suppression.", airwin2rack::C5RawChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/CStrip.h" int CStrip_unused = AirwinRegistry::registerAirwindow({"CStrip", "Unclassified", -1, "CStrip is an Airwindows channel strip.", airwin2rack::CStrip::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/CStrip2.h" -int CStrip2_unused = AirwinRegistry::registerAirwindow({"CStrip2", "Filter", 212, "CStrip2 refines and optimizes CStrip, by request!", airwin2rack::CStrip2::kNumParameters, []() { return std::make_unique(0); }}); +int CStrip2_unused = AirwinRegistry::registerAirwindow({"CStrip2", "Filter", 214, "CStrip2 refines and optimizes CStrip, by request!", airwin2rack::CStrip2::kNumParameters, []() { return std::make_unique(0); }}); #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", 326, "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", 328, "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", 225, "Capacitor is a lowpass/highpass filter of a new type.", airwin2rack::Capacitor::kNumParameters, []() { return std::make_unique(0); }}); +int Capacitor_unused = AirwinRegistry::registerAirwindow({"Capacitor", "Filter", 227, "Capacitor is a lowpass/highpass filter of a new type.", airwin2rack::Capacitor::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Capacitor2.h" -int Capacitor2_unused = AirwinRegistry::registerAirwindow({"Capacitor2", "Filter", 208, "Capacitor2 is Capacitor with extra analog modeling and mojo.", airwin2rack::Capacitor2::kNumParameters, []() { return std::make_unique(0); }}); +int Capacitor2_unused = AirwinRegistry::registerAirwindow({"Capacitor2", "Filter", 210, "Capacitor2 is Capacitor with extra analog modeling and mojo.", airwin2rack::Capacitor2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Chamber.h" -int Chamber_unused = AirwinRegistry::registerAirwindow({"Chamber", "Reverb", 267, "Chamber is a feedforward reverb based on the golden ratio.", airwin2rack::Chamber::kNumParameters, []() { return std::make_unique(0); }}); +int Chamber_unused = AirwinRegistry::registerAirwindow({"Chamber", "Reverb", 269, "Chamber is a feedforward reverb based on the golden ratio.", airwin2rack::Chamber::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Chamber2.h" -int Chamber2_unused = AirwinRegistry::registerAirwindow({"Chamber2", "Reverb", 266, "Chamber2 is a feedforward reverb, a blur delay, and a glitch topping!", airwin2rack::Chamber2::kNumParameters, []() { return std::make_unique(0); }}); +int Chamber2_unused = AirwinRegistry::registerAirwindow({"Chamber2", "Reverb", 268, "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", 335, "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", 337, "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", 334, "Channel5 is Channel for 2018, with new subtleties.", airwin2rack::Channel5::kNumParameters, []() { return std::make_unique(0); }}); +int Channel5_unused = AirwinRegistry::registerAirwindow({"Channel5", "Tone Color", 336, "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", 333, "Channel6 uses the Spiral algorithm.", airwin2rack::Channel6::kNumParameters, []() { return std::make_unique(0); }}); +int Channel6_unused = AirwinRegistry::registerAirwindow({"Channel6", "Tone Color", 335, "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", 332, "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", 334, "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", 331, "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", 333, "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", 322, "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", 324, "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" int ChorusEnsemble_unused = AirwinRegistry::registerAirwindow({"ChorusEnsemble", "Ambience", 23, "ChorusEnsemble is a more complex, multi-tap mono chorus.", airwin2rack::ChorusEnsemble::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ChromeOxide.h" -int ChromeOxide_unused = AirwinRegistry::registerAirwindow({"ChromeOxide", "Lo-Fi", 243, "ChromeOxide is an alternate path to vibey old tape sonics.", airwin2rack::ChromeOxide::kNumParameters, []() { return std::make_unique(0); }}); +int ChromeOxide_unused = AirwinRegistry::registerAirwindow({"ChromeOxide", "Lo-Fi", 245, "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", 327, "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", 329, "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" -int ClipOnly2_unused = AirwinRegistry::registerAirwindow({"ClipOnly2", "Clipping", 72, "ClipOnly2 suppresses the brightness of digital clipping without affecting unclipped samples, at any sample rate.", airwin2rack::ClipOnly2::kNumParameters, []() { return std::make_unique(0); }}); +int ClipOnly2_unused = AirwinRegistry::registerAirwindow({"ClipOnly2", "Clipping", 73, "ClipOnly2 suppresses the brightness of digital clipping without affecting unclipped samples, at any sample rate.", airwin2rack::ClipOnly2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ClipSoftly.h" -int ClipSoftly_unused = AirwinRegistry::registerAirwindow({"ClipSoftly", "Clipping", 74, "ClipSoftly is ClipOnly2 but as a softclipper: a very handy building block.", airwin2rack::ClipSoftly::kNumParameters, []() { return std::make_unique(0); }}); +int ClipSoftly_unused = AirwinRegistry::registerAirwindow({"ClipSoftly", "Clipping", 75, "ClipSoftly is ClipOnly2 but as a softclipper: a very handy building block.", airwin2rack::ClipSoftly::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/CloudCoat.h" -int CloudCoat_unused = AirwinRegistry::registerAirwindow({"CloudCoat", "Effects", 186, "CloudCoat is an array of blur effects with a taste for evil.", airwin2rack::CloudCoat::kNumParameters, []() { return std::make_unique(0); }}); +int CloudCoat_unused = AirwinRegistry::registerAirwindow({"CloudCoat", "Effects", 188, "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", 310, "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", 312, "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", 305, "Coils2 is a transformer overdrive emulator.", airwin2rack::Coils2::kNumParameters, []() { return std::make_unique(0); }}); +int Coils2_unused = AirwinRegistry::registerAirwindow({"Coils2", "Subtlety", 307, "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", 244, "Cojones is a new kind of distorty.", airwin2rack::Cojones::kNumParameters, []() { return std::make_unique(0); }}); +int Cojones_unused = AirwinRegistry::registerAirwindow({"Cojones", "Lo-Fi", 246, "Cojones is a new kind of distorty.", airwin2rack::Cojones::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Compresaturator.h" -int Compresaturator_unused = AirwinRegistry::registerAirwindow({"Compresaturator", "Dynamics", 172, "Compresaturator fades between compressing and soft clipping.", airwin2rack::Compresaturator::kNumParameters, []() { return std::make_unique(0); }}); +int Compresaturator_unused = AirwinRegistry::registerAirwindow({"Compresaturator", "Dynamics", 174, "Compresaturator fades between compressing and soft clipping.", airwin2rack::Compresaturator::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console0Buss.h" -int Console0Buss_unused = AirwinRegistry::registerAirwindow({"Console0Buss", "Consoles", 98, "Console0Buss is a radical, minimalist Console system.", airwin2rack::Console0Buss::kNumParameters, []() { return std::make_unique(0); }}); +int Console0Buss_unused = AirwinRegistry::registerAirwindow({"Console0Buss", "Consoles", 99, "Console0Buss is a radical, minimalist Console system.", airwin2rack::Console0Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console0Channel.h" -int Console0Channel_unused = AirwinRegistry::registerAirwindow({"Console0Channel", "Consoles", 97, "Console0Channel is a radical, minimalist Console system.", airwin2rack::Console0Channel::kNumParameters, []() { return std::make_unique(0); }}); +int Console0Channel_unused = AirwinRegistry::registerAirwindow({"Console0Channel", "Consoles", 98, "Console0Channel is a radical, minimalist Console system.", airwin2rack::Console0Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console4Buss.h" -int Console4Buss_unused = AirwinRegistry::registerAirwindow({"Console4Buss", "Consoles", 120, "Console4Buss is the original Airwindows ITB mixing system, a two-plugin mix buss replacement for DAWs.", airwin2rack::Console4Buss::kNumParameters, []() { return std::make_unique(0); }}); +int Console4Buss_unused = AirwinRegistry::registerAirwindow({"Console4Buss", "Consoles", 121, "Console4Buss is the original Airwindows ITB mixing system, a two-plugin mix buss replacement for DAWs.", airwin2rack::Console4Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console4Channel.h" -int Console4Channel_unused = AirwinRegistry::registerAirwindow({"Console4Channel", "Consoles", 121, "Console4Channel is the original Airwindows ITB mixing system, a two-plugin mix buss replacement for DAWs.", airwin2rack::Console4Channel::kNumParameters, []() { return std::make_unique(0); }}); +int Console4Channel_unused = AirwinRegistry::registerAirwindow({"Console4Channel", "Consoles", 122, "Console4Channel is the original Airwindows ITB mixing system, a two-plugin mix buss replacement for DAWs.", airwin2rack::Console4Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console5Buss.h" -int Console5Buss_unused = AirwinRegistry::registerAirwindow({"Console5Buss", "Consoles", 113, "Console5Buss is a richer, warmer Console system.", airwin2rack::Console5Buss::kNumParameters, []() { return std::make_unique(0); }}); +int Console5Buss_unused = AirwinRegistry::registerAirwindow({"Console5Buss", "Consoles", 114, "Console5Buss is a richer, warmer Console system.", airwin2rack::Console5Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console5Channel.h" -int Console5Channel_unused = AirwinRegistry::registerAirwindow({"Console5Channel", "Consoles", 114, "Console5Channel is a richer, warmer Console system.", airwin2rack::Console5Channel::kNumParameters, []() { return std::make_unique(0); }}); +int Console5Channel_unused = AirwinRegistry::registerAirwindow({"Console5Channel", "Consoles", 115, "Console5Channel is a richer, warmer Console system.", airwin2rack::Console5Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console5DarkCh.h" -int Console5DarkCh_unused = AirwinRegistry::registerAirwindow({"Console5DarkCh", "Consoles", 115, "Console5DarkCh is a richer, warmer Console system.", airwin2rack::Console5DarkCh::kNumParameters, []() { return std::make_unique(0); }}); +int Console5DarkCh_unused = AirwinRegistry::registerAirwindow({"Console5DarkCh", "Consoles", 116, "Console5DarkCh is a richer, warmer Console system.", airwin2rack::Console5DarkCh::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console6Buss.h" -int Console6Buss_unused = AirwinRegistry::registerAirwindow({"Console6Buss", "Consoles", 109, "Console6Buss is a new more intense Console that peaks at lower dB.", airwin2rack::Console6Buss::kNumParameters, []() { return std::make_unique(0); }}); +int Console6Buss_unused = AirwinRegistry::registerAirwindow({"Console6Buss", "Consoles", 110, "Console6Buss is a new more intense Console that peaks at lower dB.", airwin2rack::Console6Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console6Channel.h" -int Console6Channel_unused = AirwinRegistry::registerAirwindow({"Console6Channel", "Consoles", 110, "Console6Channel is a new more intense Console that peaks at lower dB.", airwin2rack::Console6Channel::kNumParameters, []() { return std::make_unique(0); }}); +int Console6Channel_unused = AirwinRegistry::registerAirwindow({"Console6Channel", "Consoles", 111, "Console6Channel is a new more intense Console that peaks at lower dB.", airwin2rack::Console6Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console7Buss.h" -int Console7Buss_unused = AirwinRegistry::registerAirwindow({"Console7Buss", "Consoles", 103, "Console7Buss adds anti-alias filtering and special saturation curves.", airwin2rack::Console7Buss::kNumParameters, []() { return std::make_unique(0); }}); +int Console7Buss_unused = AirwinRegistry::registerAirwindow({"Console7Buss", "Consoles", 104, "Console7Buss adds anti-alias filtering and special saturation curves.", airwin2rack::Console7Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console7Cascade.h" -int Console7Cascade_unused = AirwinRegistry::registerAirwindow({"Console7Cascade", "Consoles", 105, "Console7Cascade is a drop-in replacement for Console7Channel that allows for MUCH higher gain.", airwin2rack::Console7Cascade::kNumParameters, []() { return std::make_unique(0); }}); +int Console7Cascade_unused = AirwinRegistry::registerAirwindow({"Console7Cascade", "Consoles", 106, "Console7Cascade is a drop-in replacement for Console7Channel that allows for MUCH higher gain.", airwin2rack::Console7Cascade::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console7Channel.h" -int Console7Channel_unused = AirwinRegistry::registerAirwindow({"Console7Channel", "Consoles", 104, "Console7Channel adds anti-alias filtering and special saturation curves.", airwin2rack::Console7Channel::kNumParameters, []() { return std::make_unique(0); }}); +int Console7Channel_unused = AirwinRegistry::registerAirwindow({"Console7Channel", "Consoles", 105, "Console7Channel adds anti-alias filtering and special saturation curves.", airwin2rack::Console7Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console7Crunch.h" -int Console7Crunch_unused = AirwinRegistry::registerAirwindow({"Console7Crunch", "Consoles", 106, "Console7Crunch shows you Cascade but with its EQ weighted for more edge and grit.", airwin2rack::Console7Crunch::kNumParameters, []() { return std::make_unique(0); }}); +int Console7Crunch_unused = AirwinRegistry::registerAirwindow({"Console7Crunch", "Consoles", 107, "Console7Crunch shows you Cascade but with its EQ weighted for more edge and grit.", airwin2rack::Console7Crunch::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8BussHype.h" -int Console8BussHype_unused = AirwinRegistry::registerAirwindow({"Console8BussHype", "Consoles", 88, "Console8BussHype swaps out just the In section of Console8BussIn, for a brighter sparklier circuit.", airwin2rack::Console8BussHype::kNumParameters, []() { return std::make_unique(0); }}); +int Console8BussHype_unused = AirwinRegistry::registerAirwindow({"Console8BussHype", "Consoles", 89, "Console8BussHype swaps out just the In section of Console8BussIn, for a brighter sparklier circuit.", airwin2rack::Console8BussHype::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8BussIn.h" -int Console8BussIn_unused = AirwinRegistry::registerAirwindow({"Console8BussIn", "Consoles", 89, "Console8BussIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8BussIn::kNumParameters, []() { return std::make_unique(0); }}); +int Console8BussIn_unused = AirwinRegistry::registerAirwindow({"Console8BussIn", "Consoles", 90, "Console8BussIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8BussIn::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8BussOut.h" -int Console8BussOut_unused = AirwinRegistry::registerAirwindow({"Console8BussOut", "Consoles", 90, "Console8BussOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8BussOut::kNumParameters, []() { return std::make_unique(0); }}); +int Console8BussOut_unused = AirwinRegistry::registerAirwindow({"Console8BussOut", "Consoles", 91, "Console8BussOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8BussOut::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8ChannelHype.h" -int Console8ChannelHype_unused = AirwinRegistry::registerAirwindow({"Console8ChannelHype", "Consoles", 91, "Console8ChannelHype swaps out just the In section of Console8ChannelIn, for a brighter sparklier circuit.", airwin2rack::Console8ChannelHype::kNumParameters, []() { return std::make_unique(0); }}); +int Console8ChannelHype_unused = AirwinRegistry::registerAirwindow({"Console8ChannelHype", "Consoles", 92, "Console8ChannelHype swaps out just the In section of Console8ChannelIn, for a brighter sparklier circuit.", airwin2rack::Console8ChannelHype::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8ChannelIn.h" -int Console8ChannelIn_unused = AirwinRegistry::registerAirwindow({"Console8ChannelIn", "Consoles", 92, "Console8ChannelIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8ChannelIn::kNumParameters, []() { return std::make_unique(0); }}); +int Console8ChannelIn_unused = AirwinRegistry::registerAirwindow({"Console8ChannelIn", "Consoles", 93, "Console8ChannelIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8ChannelIn::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8ChannelOut.h" -int Console8ChannelOut_unused = AirwinRegistry::registerAirwindow({"Console8ChannelOut", "Consoles", 93, "Console8ChannelOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8ChannelOut::kNumParameters, []() { return std::make_unique(0); }}); +int Console8ChannelOut_unused = AirwinRegistry::registerAirwindow({"Console8ChannelOut", "Consoles", 94, "Console8ChannelOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8ChannelOut::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8LiteBuss.h" -int Console8LiteBuss_unused = AirwinRegistry::registerAirwindow({"Console8LiteBuss", "Consoles", 87, "Console8LiteBuss is simplified Console8, working with just a single mix buss.", airwin2rack::Console8LiteBuss::kNumParameters, []() { return std::make_unique(0); }}); +int Console8LiteBuss_unused = AirwinRegistry::registerAirwindow({"Console8LiteBuss", "Consoles", 88, "Console8LiteBuss is simplified Console8, working with just a single mix buss.", airwin2rack::Console8LiteBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8LiteChannel.h" -int Console8LiteChannel_unused = AirwinRegistry::registerAirwindow({"Console8LiteChannel", "Consoles", 86, "Console8LiteChannel is simplified Console8, working with just a single mix buss.", airwin2rack::Console8LiteChannel::kNumParameters, []() { return std::make_unique(0); }}); +int Console8LiteChannel_unused = AirwinRegistry::registerAirwindow({"Console8LiteChannel", "Consoles", 87, "Console8LiteChannel is simplified Console8, working with just a single mix buss.", airwin2rack::Console8LiteChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8SubHype.h" -int Console8SubHype_unused = AirwinRegistry::registerAirwindow({"Console8SubHype", "Consoles", 94, "Console8SubHype swaps out just the In section of Console8SubIn, for a brighter sparklier circuit.", airwin2rack::Console8SubHype::kNumParameters, []() { return std::make_unique(0); }}); +int Console8SubHype_unused = AirwinRegistry::registerAirwindow({"Console8SubHype", "Consoles", 95, "Console8SubHype swaps out just the In section of Console8SubIn, for a brighter sparklier circuit.", airwin2rack::Console8SubHype::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8SubIn.h" -int Console8SubIn_unused = AirwinRegistry::registerAirwindow({"Console8SubIn", "Consoles", 95, "Console8SubIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8SubIn::kNumParameters, []() { return std::make_unique(0); }}); +int Console8SubIn_unused = AirwinRegistry::registerAirwindow({"Console8SubIn", "Consoles", 96, "Console8SubIn moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8SubIn::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Console8SubOut.h" -int Console8SubOut_unused = AirwinRegistry::registerAirwindow({"Console8SubOut", "Consoles", 96, "Console8SubOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8SubOut::kNumParameters, []() { return std::make_unique(0); }}); +int Console8SubOut_unused = AirwinRegistry::registerAirwindow({"Console8SubOut", "Consoles", 97, "Console8SubOut moves to a channel/submix/buss topology and adds analog simulation.", airwin2rack::Console8SubOut::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ConsoleLABuss.h" -int ConsoleLABuss_unused = AirwinRegistry::registerAirwindow({"ConsoleLABuss", "Consoles", 80, "ConsoleLABuss is the Airwindows take on the Quad Eight console.", airwin2rack::ConsoleLABuss::kNumParameters, []() { return std::make_unique(0); }}); +int ConsoleLABuss_unused = AirwinRegistry::registerAirwindow({"ConsoleLABuss", "Consoles", 81, "ConsoleLABuss is the Airwindows take on the Quad Eight console.", airwin2rack::ConsoleLABuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ConsoleLAChannel.h" -int ConsoleLAChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleLAChannel", "Consoles", 81, "ConsoleLAChannel is the Airwindows take on the Quad Eight console.", airwin2rack::ConsoleLAChannel::kNumParameters, []() { return std::make_unique(0); }}); +int ConsoleLAChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleLAChannel", "Consoles", 82, "ConsoleLAChannel is the Airwindows take on the Quad Eight console.", airwin2rack::ConsoleLAChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ConsoleMCBuss.h" -int ConsoleMCBuss_unused = AirwinRegistry::registerAirwindow({"ConsoleMCBuss", "Consoles", 82, "ConsoleMCBuss is the initial, bright take on the MCI console.", airwin2rack::ConsoleMCBuss::kNumParameters, []() { return std::make_unique(0); }}); +int ConsoleMCBuss_unused = AirwinRegistry::registerAirwindow({"ConsoleMCBuss", "Consoles", 83, "ConsoleMCBuss is the initial, bright take on the MCI console.", airwin2rack::ConsoleMCBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ConsoleMCChannel.h" -int ConsoleMCChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleMCChannel", "Consoles", 83, "ConsoleMCChannel is the initial, bright take on the MCI console.", airwin2rack::ConsoleMCChannel::kNumParameters, []() { return std::make_unique(0); }}); +int ConsoleMCChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleMCChannel", "Consoles", 84, "ConsoleMCChannel is the initial, bright take on the MCI console.", airwin2rack::ConsoleMCChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ConsoleMDBuss.h" -int ConsoleMDBuss_unused = AirwinRegistry::registerAirwindow({"ConsoleMDBuss", "Consoles", 84, "ConsoleMDBuss goes for the tone shaping of the classic MCI console!", airwin2rack::ConsoleMDBuss::kNumParameters, []() { return std::make_unique(0); }}); +int ConsoleMDBuss_unused = AirwinRegistry::registerAirwindow({"ConsoleMDBuss", "Consoles", 85, "ConsoleMDBuss goes for the tone shaping of the classic MCI console!", airwin2rack::ConsoleMDBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/ConsoleMDChannel.h" -int ConsoleMDChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleMDChannel", "Consoles", 85, "ConsoleMDChannel goes for the tone shaping of the classic MCI console!", airwin2rack::ConsoleMDChannel::kNumParameters, []() { return std::make_unique(0); }}); +int ConsoleMDChannel_unused = AirwinRegistry::registerAirwindow({"ConsoleMDChannel", "Consoles", 86, "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", 275, "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", 277, "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", 237, "CrunchyGrooveWear is a version of GrooveWear for more edge and distortion.", airwin2rack::CrunchyGrooveWear::kNumParameters, []() { return std::make_unique(0); }}); +int CrunchyGrooveWear_unused = AirwinRegistry::registerAirwindow({"CrunchyGrooveWear", "Lo-Fi", 239, "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", 328, "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", 330, "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", 349, "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", 351, "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", 135, "Dark is a wordlength reducer that gives your music a blacker backdrop.", airwin2rack::Dark::kNumParameters, []() { return std::make_unique(0); }}); +int Dark_unused = AirwinRegistry::registerAirwindow({"Dark", "Dithers", 136, "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" -int DarkNoise_unused = AirwinRegistry::registerAirwindow({"DarkNoise", "Noise", 253, "DarkNoise is an alternative method for producing bassier noise directly. Sound design stuff.", airwin2rack::DarkNoise::kNumParameters, []() { return std::make_unique(0); }}); +int DarkNoise_unused = AirwinRegistry::registerAirwindow({"DarkNoise", "Noise", 255, "DarkNoise is an alternative method for producing bassier noise directly. Sound design stuff.", airwin2rack::DarkNoise::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DeBess.h" -int DeBess_unused = AirwinRegistry::registerAirwindow({"DeBess", "Brightness", 50, "DeBess is an improved DeEss, with perfect rejection of non-ess audio.", airwin2rack::DeBess::kNumParameters, []() { return std::make_unique(0); }}); +int DeBess_unused = AirwinRegistry::registerAirwindow({"DeBess", "Brightness", 51, "DeBess is an improved DeEss, with perfect rejection of non-ess audio.", airwin2rack::DeBess::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DeEss.h" -int DeEss_unused = AirwinRegistry::registerAirwindow({"DeEss", "Brightness", 55, "DeEss is the best de-essing solution there is. A go-to utility plugin.", airwin2rack::DeEss::kNumParameters, []() { return std::make_unique(0); }}); +int DeEss_unused = AirwinRegistry::registerAirwindow({"DeEss", "Brightness", 56, "DeEss is the best de-essing solution there is. A go-to utility plugin.", airwin2rack::DeEss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DeHiss.h" -int DeHiss_unused = AirwinRegistry::registerAirwindow({"DeHiss", "Brightness", 65, "DeHiss tries to suppress background hiss, like a hiss gate.", airwin2rack::DeHiss::kNumParameters, []() { return std::make_unique(0); }}); +int DeHiss_unused = AirwinRegistry::registerAirwindow({"DeHiss", "Brightness", 66, "DeHiss tries to suppress background hiss, like a hiss gate.", airwin2rack::DeHiss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DeRez.h" -int DeRez_unused = AirwinRegistry::registerAirwindow({"DeRez", "Lo-Fi", 242, "DeRez is an analog-style bit and sample rate crusher with continuous adjustments.", airwin2rack::DeRez::kNumParameters, []() { return std::make_unique(0); }}); +int DeRez_unused = AirwinRegistry::registerAirwindow({"DeRez", "Lo-Fi", 244, "DeRez is an analog-style bit and sample rate crusher with continuous adjustments.", airwin2rack::DeRez::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DeRez2.h" -int DeRez2_unused = AirwinRegistry::registerAirwindow({"DeRez2", "Lo-Fi", 240, "DeRez2 brings more authentic retro-digital hardware tones.", airwin2rack::DeRez2::kNumParameters, []() { return std::make_unique(0); }}); +int DeRez2_unused = AirwinRegistry::registerAirwindow({"DeRez2", "Lo-Fi", 242, "DeRez2 brings more authentic retro-digital hardware tones.", airwin2rack::DeRez2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Deckwrecka.h" -int Deckwrecka_unused = AirwinRegistry::registerAirwindow({"Deckwrecka", "Lo-Fi", 247, "Deckwrecka fattens and dirties up beats.", airwin2rack::Deckwrecka::kNumParameters, []() { return std::make_unique(0); }}); +int Deckwrecka_unused = AirwinRegistry::registerAirwindow({"Deckwrecka", "Lo-Fi", 249, "Deckwrecka fattens and dirties up beats.", airwin2rack::Deckwrecka::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Density.h" -int Density_unused = AirwinRegistry::registerAirwindow({"Density", "Distortion", 129, "Density is a Swiss Army Knife of saturation/antisaturation.", airwin2rack::Density::kNumParameters, []() { return std::make_unique(0); }}); +int Density_unused = AirwinRegistry::registerAirwindow({"Density", "Distortion", 130, "Density is a Swiss Army Knife of saturation/antisaturation.", airwin2rack::Density::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Density2.h" -int Density2_unused = AirwinRegistry::registerAirwindow({"Density2", "Distortion", 128, "Density2 is a different color for Density, some old code I had that people wanted.", airwin2rack::Density2::kNumParameters, []() { return std::make_unique(0); }}); +int Density2_unused = AirwinRegistry::registerAirwindow({"Density2", "Distortion", 129, "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", 311, "Desk is classic Airwindows subtle analog modeling.", airwin2rack::Desk::kNumParameters, []() { return std::make_unique(0); }}); +int Desk_unused = AirwinRegistry::registerAirwindow({"Desk", "Subtlety", 313, "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", 287, "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", 289, "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", 162, "DigitalBlack is a quick, staccato gate.", airwin2rack::DigitalBlack::kNumParameters, []() { return std::make_unique(0); }}); +int DigitalBlack_unused = AirwinRegistry::registerAirwindow({"DigitalBlack", "Dynamics", 163, "DigitalBlack is a quick, staccato gate.", airwin2rack::DigitalBlack::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Dirt.h" -int Dirt_unused = AirwinRegistry::registerAirwindow({"Dirt", "Distortion", 125, "Dirt is a soft-clip distortion in the spirit of Edge.", airwin2rack::Dirt::kNumParameters, []() { return std::make_unique(0); }}); +int Dirt_unused = AirwinRegistry::registerAirwindow({"Dirt", "Distortion", 126, "Dirt is a soft-clip distortion in the spirit of Edge.", airwin2rack::Dirt::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Discontinuity.h" int Discontinuity_unused = AirwinRegistry::registerAirwindow({"Discontinuity", "Unclassified", -1, "", airwin2rack::Discontinuity::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Distance.h" -int Distance_unused = AirwinRegistry::registerAirwindow({"Distance", "Filter", 232, "Distance is a sound design or reverb far-away-izer.", airwin2rack::Distance::kNumParameters, []() { return std::make_unique(0); }}); +int Distance_unused = AirwinRegistry::registerAirwindow({"Distance", "Filter", 234, "Distance is a sound design or reverb far-away-izer.", airwin2rack::Distance::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Distance2.h" -int Distance2_unused = AirwinRegistry::registerAirwindow({"Distance2", "Filter", 231, "Distance2 is a versatile space shaper for creating depth.", airwin2rack::Distance2::kNumParameters, []() { return std::make_unique(0); }}); +int Distance2_unused = AirwinRegistry::registerAirwindow({"Distance2", "Filter", 233, "Distance2 is a versatile space shaper for creating depth.", airwin2rack::Distance2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Distortion.h" -int Distortion_unused = AirwinRegistry::registerAirwindow({"Distortion", "Distortion", 123, "Distortion is a slightly dark analog-style distortion with several presets, like Focus.", airwin2rack::Distortion::kNumParameters, []() { return std::make_unique(0); }}); +int Distortion_unused = AirwinRegistry::registerAirwindow({"Distortion", "Distortion", 124, "Distortion is a slightly dark analog-style distortion with several presets, like Focus.", airwin2rack::Distortion::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DitherFloat.h" -int DitherFloat_unused = AirwinRegistry::registerAirwindow({"DitherFloat", "Dithers", 157, "DitherFloat is a demo of floating point truncation: can also dither to 32 bit float output.", airwin2rack::DitherFloat::kNumParameters, []() { return std::make_unique(0); }}); +int DitherFloat_unused = AirwinRegistry::registerAirwindow({"DitherFloat", "Dithers", 158, "DitherFloat is a demo of floating point truncation: can also dither to 32 bit float output.", airwin2rack::DitherFloat::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DitherMeDiskers.h" -int DitherMeDiskers_unused = AirwinRegistry::registerAirwindow({"DitherMeDiskers", "Dithers", 152, "DitherMeDiskers is dark deep 'dither' in a 16 bit version.", airwin2rack::DitherMeDiskers::kNumParameters, []() { return std::make_unique(0); }}); +int DitherMeDiskers_unused = AirwinRegistry::registerAirwindow({"DitherMeDiskers", "Dithers", 153, "DitherMeDiskers is dark deep 'dither' in a 16 bit version.", airwin2rack::DitherMeDiskers::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DitherMeTimbers.h" -int DitherMeTimbers_unused = AirwinRegistry::registerAirwindow({"DitherMeTimbers", "Dithers", 151, "DitherMeTimbers is dark deep 'dither' in a 24 bit version.", airwin2rack::DitherMeTimbers::kNumParameters, []() { return std::make_unique(0); }}); +int DitherMeTimbers_unused = AirwinRegistry::registerAirwindow({"DitherMeTimbers", "Dithers", 152, "DitherMeTimbers is dark deep 'dither' in a 24 bit version.", airwin2rack::DitherMeTimbers::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Ditherbox.h" -int Ditherbox_unused = AirwinRegistry::registerAirwindow({"Ditherbox", "Dithers", 147, "Ditherbox is a switchable selection of dithers in 16 and 24 bit, plus monitoring tools.", airwin2rack::Ditherbox::kNumParameters, []() { return std::make_unique(0); }}); +int Ditherbox_unused = AirwinRegistry::registerAirwindow({"Ditherbox", "Dithers", 148, "Ditherbox is a switchable selection of dithers in 16 and 24 bit, plus monitoring tools.", airwin2rack::Ditherbox::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DoublePaul.h" -int DoublePaul_unused = AirwinRegistry::registerAirwindow({"DoublePaul", "Dithers", 146, "DoublePaul is like PaulDither but more so.", airwin2rack::DoublePaul::kNumParameters, []() { return std::make_unique(0); }}); +int DoublePaul_unused = AirwinRegistry::registerAirwindow({"DoublePaul", "Dithers", 147, "DoublePaul is like PaulDither but more so.", airwin2rack::DoublePaul::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Doublelay.h" int Doublelay_unused = AirwinRegistry::registerAirwindow({"Doublelay", "Ambience", 2, "Doublelay is StereoDoubler with independent delays and feedback.", airwin2rack::Doublelay::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Drive.h" -int Drive_unused = AirwinRegistry::registerAirwindow({"Drive", "Distortion", 130, "Drive is the angry distortion!", airwin2rack::Drive::kNumParameters, []() { return std::make_unique(0); }}); +int Drive_unused = AirwinRegistry::registerAirwindow({"Drive", "Distortion", 131, "Drive is the angry distortion!", airwin2rack::Drive::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DrumSlam.h" -int DrumSlam_unused = AirwinRegistry::registerAirwindow({"DrumSlam", "Dynamics", 173, "DrumSlam is a heavy-processing tape modeler.", airwin2rack::DrumSlam::kNumParameters, []() { return std::make_unique(0); }}); +int DrumSlam_unused = AirwinRegistry::registerAirwindow({"DrumSlam", "Dynamics", 175, "DrumSlam is a heavy-processing tape modeler.", airwin2rack::DrumSlam::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DubCenter.h" int DubCenter_unused = AirwinRegistry::registerAirwindow({"DubCenter", "Bass", 38, "DubCenter is a version of DubSub where the bass reinforcement is purely mono.", airwin2rack::DubCenter::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DubSub.h" int DubSub_unused = AirwinRegistry::registerAirwindow({"DubSub", "Bass", 39, "DubSub is a fully featured bass doctor.", airwin2rack::DubSub::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Dubly.h" -int Dubly_unused = AirwinRegistry::registerAirwindow({"Dubly", "Effects", 188, "Dubly is a retro vibe and atmosphere maker.", airwin2rack::Dubly::kNumParameters, []() { return std::make_unique(0); }}); +int Dubly_unused = AirwinRegistry::registerAirwindow({"Dubly", "Effects", 190, "Dubly is a retro vibe and atmosphere maker.", airwin2rack::Dubly::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/DustBunny.h" -int DustBunny_unused = AirwinRegistry::registerAirwindow({"DustBunny", "Lo-Fi", 248, "DustBunny is unpredictable distorty noise, like dust wedged under your turntable needle.", airwin2rack::DustBunny::kNumParameters, []() { return std::make_unique(0); }}); +int DustBunny_unused = AirwinRegistry::registerAirwindow({"DustBunny", "Lo-Fi", 250, "DustBunny is unpredictable distorty noise, like dust wedged under your turntable needle.", airwin2rack::DustBunny::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Dynamics.h" -int Dynamics_unused = AirwinRegistry::registerAirwindow({"Dynamics", "Dynamics", 160, "Dynamics is a combination compressor gate.", airwin2rack::Dynamics::kNumParameters, []() { return std::make_unique(0); }}); +int Dynamics_unused = AirwinRegistry::registerAirwindow({"Dynamics", "Dynamics", 161, "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", 284, "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", 286, "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", 224, "EQ is just the EQ parts of CStrip.", airwin2rack::EQ::kNumParameters, []() { return std::make_unique(0); }}); +int EQ_unused = AirwinRegistry::registerAirwindow({"EQ", "Filter", 226, "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", 350, "EdIsDim is mid/side conversion utility plugins.", airwin2rack::EdIsDim::kNumParameters, []() { return std::make_unique(0); }}); +int EdIsDim_unused = AirwinRegistry::registerAirwindow({"EdIsDim", "Utility", 352, "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", 124, "Edge is a seven-stage distortion with Hypersonic filtering and tone shaping controls.", airwin2rack::Edge::kNumParameters, []() { return std::make_unique(0); }}); +int Edge_unused = AirwinRegistry::registerAirwindow({"Edge", "Distortion", 125, "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", 325, "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", 327, "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", 254, "ElectroHat is a hi-hat tone generator that uses the original sound as a control voltage.", airwin2rack::ElectroHat::kNumParameters, []() { return std::make_unique(0); }}); +int ElectroHat_unused = AirwinRegistry::registerAirwindow({"ElectroHat", "Noise", 256, "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" -int Energy_unused = AirwinRegistry::registerAirwindow({"Energy", "Effects", 200, "Energy is electrifying fixed-frequency treble boosts.", airwin2rack::Energy::kNumParameters, []() { return std::make_unique(0); }}); +int Energy_unused = AirwinRegistry::registerAirwindow({"Energy", "Effects", 202, "Energy is electrifying fixed-frequency treble boosts.", airwin2rack::Energy::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Energy2.h" -int Energy2_unused = AirwinRegistry::registerAirwindow({"Energy2", "Effects", 199, "Energy2 is electrifying fixed-frequency treble boosts for high sample rate.", airwin2rack::Energy2::kNumParameters, []() { return std::make_unique(0); }}); +int Energy2_unused = AirwinRegistry::registerAirwindow({"Energy2", "Effects", 201, "Energy2 is electrifying fixed-frequency treble boosts for high sample rate.", airwin2rack::Energy2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Ensemble.h" int Ensemble_unused = AirwinRegistry::registerAirwindow({"Ensemble", "Ambience", 24, "Ensemble is a weird flangey little modulation effect.", airwin2rack::Ensemble::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/EveryConsole.h" -int EveryConsole_unused = AirwinRegistry::registerAirwindow({"EveryConsole", "Consoles", 122, "EveryConsole is mix-and-match Airwindows Console.", airwin2rack::EveryConsole::kNumParameters, []() { return std::make_unique(0); }}); +int EveryConsole_unused = AirwinRegistry::registerAirwindow({"EveryConsole", "Consoles", 123, "EveryConsole is mix-and-match Airwindows Console.", airwin2rack::EveryConsole::kNumParameters, []() { return std::make_unique(0); }}); #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); }}); +int EverySlew_unused = AirwinRegistry::registerAirwindow({"EverySlew", "Brightness", 58, "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", 343, "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", 345, "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", 198, "Exciter is an Aural Exciter plugin that can be both subtle and extreme.", airwin2rack::Exciter::kNumParameters, []() { return std::make_unique(0); }}); +int Exciter_unused = AirwinRegistry::registerAirwindow({"Exciter", "Effects", 200, "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", 201, "Facet is a new kind of hard clip that adds two sharp corners into the wave.", airwin2rack::Facet::kNumParameters, []() { return std::make_unique(0); }}); +int Facet_unused = AirwinRegistry::registerAirwindow({"Facet", "Effects", 203, "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", "Clipping", 79, "FinalClip is one stage of ADClip8 set up to clip +6dB for Final Cut Pro.", airwin2rack::FinalClip::kNumParameters, []() { return std::make_unique(0); }}); +int FinalClip_unused = AirwinRegistry::registerAirwindow({"FinalClip", "Clipping", 80, "FinalClip is one stage of ADClip8 set up to clip +6dB for Final Cut Pro.", 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", 357, "Flipity is a channel phase flipper/swapper utility.", airwin2rack::Flipity::kNumParameters, []() { return std::make_unique(0); }}); +int Flipity_unused = AirwinRegistry::registerAirwindow({"Flipity", "Utility", 359, "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", 236, "Flutter is the most recent Airwindows flutter, standalone.", airwin2rack::Flutter::kNumParameters, []() { return std::make_unique(0); }}); +int Flutter_unused = AirwinRegistry::registerAirwindow({"Flutter", "Lo-Fi", 238, "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", 282, "Focus brings out clarity by distorting. Aggressive, subtle, flexible.", airwin2rack::Focus::kNumParameters, []() { return std::make_unique(0); }}); +int Focus_unused = AirwinRegistry::registerAirwindow({"Focus", "Saturation", 284, "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", 202, "Fracture is a frequency multiplier/waveshaper with a soft disruption to the sound.", airwin2rack::Fracture::kNumParameters, []() { return std::make_unique(0); }}); +int Fracture_unused = AirwinRegistry::registerAirwindow({"Fracture", "Effects", 204, "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", 187, "Fracture2 is a wavefolder that allows more extreme disruption.", airwin2rack::Fracture2::kNumParameters, []() { return std::make_unique(0); }}); +int Fracture2_unused = AirwinRegistry::registerAirwindow({"Fracture2", "Effects", 189, "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", 315, "FromTape is a minimalist, cleaner analog tape emulation.", airwin2rack::FromTape::kNumParameters, []() { return std::make_unique(0); }}); +int FromTape_unused = AirwinRegistry::registerAirwindow({"FromTape", "Tape", 317, "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", 263, "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", 265, "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", 264, "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", 266, "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", 185, "GalacticVibe is the stereo vibrato from the original Galactic reverb.", airwin2rack::GalacticVibe::kNumParameters, []() { return std::make_unique(0); }}); +int GalacticVibe_unused = AirwinRegistry::registerAirwindow({"GalacticVibe", "Effects", 187, "GalacticVibe is the stereo vibrato from the original Galactic reverb.", airwin2rack::GalacticVibe::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Gatelope.h" -int Gatelope_unused = AirwinRegistry::registerAirwindow({"Gatelope", "Dynamics", 177, "Gatelope is a special gate that applies filters.", airwin2rack::Gatelope::kNumParameters, []() { return std::make_unique(0); }}); +int Gatelope_unused = AirwinRegistry::registerAirwindow({"Gatelope", "Dynamics", 179, "Gatelope is a special gate that applies filters.", airwin2rack::Gatelope::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/GlitchShifter.h" -int GlitchShifter_unused = AirwinRegistry::registerAirwindow({"GlitchShifter", "Effects", 196, "GlitchShifter is a really gnarly, raw-sounding pitch shifter with a dose of insanity!", airwin2rack::GlitchShifter::kNumParameters, []() { return std::make_unique(0); }}); +int GlitchShifter_unused = AirwinRegistry::registerAirwindow({"GlitchShifter", "Effects", 198, "GlitchShifter is a really gnarly, raw-sounding pitch shifter with a dose of insanity!", airwin2rack::GlitchShifter::kNumParameters, []() { return std::make_unique(0); }}); #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); }}); +int GoldenSlew_unused = AirwinRegistry::registerAirwindow({"GoldenSlew", "Brightness", 52, "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", 348, "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", 350, "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" -int Gringer_unused = AirwinRegistry::registerAirwindow({"Gringer", "Effects", 197, "Gringer is a full-wave rectifier plugin, like a Green Ringer guitar effect.", airwin2rack::Gringer::kNumParameters, []() { return std::make_unique(0); }}); +int Gringer_unused = AirwinRegistry::registerAirwindow({"Gringer", "Effects", 199, "Gringer is a full-wave rectifier plugin, like a Green Ringer guitar effect.", airwin2rack::Gringer::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/GrooveWear.h" -int GrooveWear_unused = AirwinRegistry::registerAirwindow({"GrooveWear", "Lo-Fi", 238, "GrooveWear is for scrubbing highs off mechanically like a stylus would.", airwin2rack::GrooveWear::kNumParameters, []() { return std::make_unique(0); }}); +int GrooveWear_unused = AirwinRegistry::registerAirwindow({"GrooveWear", "Lo-Fi", 240, "GrooveWear is for scrubbing highs off mechanically like a stylus would.", airwin2rack::GrooveWear::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/GuitarConditioner.h" -int GuitarConditioner_unused = AirwinRegistry::registerAirwindow({"GuitarConditioner", "Effects", 192, "GuitarConditioner is like a Tube Screamer voicing without the squishiness and indistinctness.", airwin2rack::GuitarConditioner::kNumParameters, []() { return std::make_unique(0); }}); +int GuitarConditioner_unused = AirwinRegistry::registerAirwindow({"GuitarConditioner", "Effects", 194, "GuitarConditioner is like a Tube Screamer voicing without the squishiness and indistinctness.", airwin2rack::GuitarConditioner::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/HardVacuum.h" -int HardVacuum_unused = AirwinRegistry::registerAirwindow({"HardVacuum", "Distortion", 132, "HardVacuum is tube style saturation effects.", airwin2rack::HardVacuum::kNumParameters, []() { return std::make_unique(0); }}); +int HardVacuum_unused = AirwinRegistry::registerAirwindow({"HardVacuum", "Distortion", 133, "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", 344, "HermeTrim is Very Fine Adjustments, otherwise just like EveryTrim.", airwin2rack::HermeTrim::kNumParameters, []() { return std::make_unique(0); }}); +int HermeTrim_unused = AirwinRegistry::registerAirwindow({"HermeTrim", "Utility", 346, "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" -int HighGlossDither_unused = AirwinRegistry::registerAirwindow({"HighGlossDither", "Dithers", 156, "HighGlossDither is a hybrid between shiny dither and truncation! Unnatural science experiment.", airwin2rack::HighGlossDither::kNumParameters, []() { return std::make_unique(0); }}); +int HighGlossDither_unused = AirwinRegistry::registerAirwindow({"HighGlossDither", "Dithers", 157, "HighGlossDither is a hybrid between shiny dither and truncation! Unnatural science experiment.", airwin2rack::HighGlossDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/HighImpact.h" -int HighImpact_unused = AirwinRegistry::registerAirwindow({"HighImpact", "Distortion", 133, "HighImpact is distorted grit and punch without fatness.", airwin2rack::HighImpact::kNumParameters, []() { return std::make_unique(0); }}); +int HighImpact_unused = AirwinRegistry::registerAirwindow({"HighImpact", "Distortion", 134, "HighImpact is distorted grit and punch without fatness.", airwin2rack::HighImpact::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Highpass.h" -int Highpass_unused = AirwinRegistry::registerAirwindow({"Highpass", "Filter", 234, "Highpass is a time warp, for retro midrangey sounds.", airwin2rack::Highpass::kNumParameters, []() { return std::make_unique(0); }}); +int Highpass_unused = AirwinRegistry::registerAirwindow({"Highpass", "Filter", 236, "Highpass is a time warp, for retro midrangey sounds.", airwin2rack::Highpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Highpass2.h" -int Highpass2_unused = AirwinRegistry::registerAirwindow({"Highpass2", "Filter", 230, "Highpass2 is an unusual-sounding variable-slope highpass filter.", airwin2rack::Highpass2::kNumParameters, []() { return std::make_unique(0); }}); +int Highpass2_unused = AirwinRegistry::registerAirwindow({"Highpass2", "Filter", 232, "Highpass2 is an unusual-sounding variable-slope highpass filter.", airwin2rack::Highpass2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Holt.h" -int Holt_unused = AirwinRegistry::registerAirwindow({"Holt", "Filter", 216, "Holt is a synth-like resonant lowpass filter focussed on bass frequencies.", airwin2rack::Holt::kNumParameters, []() { return std::make_unique(0); }}); +int Holt_unused = AirwinRegistry::registerAirwindow({"Holt", "Filter", 218, "Holt is a synth-like resonant lowpass filter focussed on bass frequencies.", airwin2rack::Holt::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Holt2.h" -int Holt2_unused = AirwinRegistry::registerAirwindow({"Holt2", "Filter", 215, "Holt2 is a bass-cab-like resonant lowpass filter.", airwin2rack::Holt2::kNumParameters, []() { return std::make_unique(0); }}); +int Holt2_unused = AirwinRegistry::registerAirwindow({"Holt2", "Filter", 217, "Holt2 is a bass-cab-like resonant lowpass filter.", airwin2rack::Holt2::kNumParameters, []() { return std::make_unique(0); }}); #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", 276, "Huge is a dirty, dirty loudenator.", airwin2rack::Huge::kNumParameters, []() { return std::make_unique(0); }}); +int Huge_unused = AirwinRegistry::registerAirwindow({"Huge", "Saturation", 278, "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", 223, "Hull is an alternate form of highpass/lowpass filter.", airwin2rack::Hull::kNumParameters, []() { return std::make_unique(0); }}); +int Hull_unused = AirwinRegistry::registerAirwindow({"Hull", "Filter", 225, "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", 221, "Hull2 is a very clear three-band EQ.", airwin2rack::Hull2::kNumParameters, []() { return std::make_unique(0); }}); +int Hull2_unused = AirwinRegistry::registerAirwindow({"Hull2", "Filter", 223, "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", 299, "Hype is a treble softening experiment gone strangely awry :)", airwin2rack::Hype::kNumParameters, []() { return std::make_unique(0); }}); +int Hype_unused = AirwinRegistry::registerAirwindow({"Hype", "Subtlety", 301, "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); }}); +int HypersonX_unused = AirwinRegistry::registerAirwindow({"HypersonX", "Brightness", 68, "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); }}); +int Hypersonic_unused = AirwinRegistry::registerAirwindow({"Hypersonic", "Brightness", 67, "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", 271, "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", 273, "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", 268, "Infinity2 expands Infinity with more tone shaping and a much-requested kill-switch!", airwin2rack::Infinity2::kNumParameters, []() { return std::make_unique(0); }}); +int Infinity2_unused = AirwinRegistry::registerAirwindow({"Infinity2", "Reverb", 270, "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", 301, "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", 303, "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", 306, "Interstage is a subtle and sophisticated analogifier.", airwin2rack::Interstage::kNumParameters, []() { return std::make_unique(0); }}); +int Interstage_unused = AirwinRegistry::registerAirwindow({"Interstage", "Subtlety", 308, "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", 318, "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", 320, "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", 320, "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", 322, "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", 317, "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", 319, "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", 226, "Isolator is a steep highpass or lowpass filter, like you might find in a speaker crossover.", airwin2rack::Isolator::kNumParameters, []() { return std::make_unique(0); }}); +int Isolator_unused = AirwinRegistry::registerAirwindow({"Isolator", "Filter", 228, "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", 214, "Isolator2 is Isolator, but with control smoothing and a new resonance booster.", airwin2rack::Isolator2::kNumParameters, []() { return std::make_unique(0); }}); +int Isolator2_unused = AirwinRegistry::registerAirwindow({"Isolator2", "Filter", 216, "Isolator2 is Isolator, but with control smoothing and a new resonance booster.", airwin2rack::Isolator2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Kalman.h" int Kalman_unused = AirwinRegistry::registerAirwindow({"Kalman", "Unclassified", -1, "", airwin2rack::Kalman::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/LRFlipTimer.h" -int LRFlipTimer_unused = AirwinRegistry::registerAirwindow({"LRFlipTimer", "Stereo", 295, "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", 297, "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", 355, "LeftoMono copies one channel to both, losslessly.", airwin2rack::LeftoMono::kNumParameters, []() { return std::make_unique(0); }}); +int LeftoMono_unused = AirwinRegistry::registerAirwindow({"LeftoMono", "Utility", 357, "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" -int Logical4_unused = AirwinRegistry::registerAirwindow({"Logical4", "Dynamics", 163, "Logical4 is a classic 2-buss compressor.", airwin2rack::Logical4::kNumParameters, []() { return std::make_unique(0); }}); +int Logical4_unused = AirwinRegistry::registerAirwindow({"Logical4", "Dynamics", 164, "Logical4 is a classic 2-buss compressor.", airwin2rack::Logical4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Loud.h" -int Loud_unused = AirwinRegistry::registerAirwindow({"Loud", "Distortion", 131, "Loud is distortion and demolition of air molecules, modeled.", airwin2rack::Loud::kNumParameters, []() { return std::make_unique(0); }}); +int Loud_unused = AirwinRegistry::registerAirwindow({"Loud", "Distortion", 132, "Loud is distortion and demolition of air molecules, modeled.", airwin2rack::Loud::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Lowpass.h" -int Lowpass_unused = AirwinRegistry::registerAirwindow({"Lowpass", "Filter", 233, "Lowpass deepens the tone, leaves a gloss and textural modifications.", airwin2rack::Lowpass::kNumParameters, []() { return std::make_unique(0); }}); +int Lowpass_unused = AirwinRegistry::registerAirwindow({"Lowpass", "Filter", 235, "Lowpass deepens the tone, leaves a gloss and textural modifications.", airwin2rack::Lowpass::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Lowpass2.h" -int Lowpass2_unused = AirwinRegistry::registerAirwindow({"Lowpass2", "Filter", 229, "Lowpass2 is an unusual-sounding variable-slope lowpass filter.", airwin2rack::Lowpass2::kNumParameters, []() { return std::make_unique(0); }}); +int Lowpass2_unused = AirwinRegistry::registerAirwindow({"Lowpass2", "Filter", 231, "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", 330, "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", 332, "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", 296, "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", 298, "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" int MV2_unused = AirwinRegistry::registerAirwindow({"MV2", "Ambience", 8, "MV2 is a dual-mono reverb based on BitShiftGain and the old Midiverbs, adapted to high sample rates.", airwin2rack::MV2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/MackEQ.h" -int MackEQ_unused = AirwinRegistry::registerAirwindow({"MackEQ", "Filter", 220, "MackEQ is the Mackie distortion but with treble and bass controls added.", airwin2rack::MackEQ::kNumParameters, []() { return std::make_unique(0); }}); +int MackEQ_unused = AirwinRegistry::registerAirwindow({"MackEQ", "Filter", 222, "MackEQ is the Mackie distortion but with treble and bass controls added.", airwin2rack::MackEQ::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Mackity.h" -int Mackity_unused = AirwinRegistry::registerAirwindow({"Mackity", "Distortion", 126, "Mackity is an emulation of the input stage of a vintage Mackie 1202!", airwin2rack::Mackity::kNumParameters, []() { return std::make_unique(0); }}); +int Mackity_unused = AirwinRegistry::registerAirwindow({"Mackity", "Distortion", 127, "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", 272, "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", 274, "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", 351, "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", 353, "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", 358, "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", 360, "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", 283, "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", 285, "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", 338, "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", 340, "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", 337, "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", 339, "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", 336, "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", 338, "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", 134, "MultiBandDistortion is an old weird gnarly sound wrecker :)", airwin2rack::MultiBandDistortion::kNumParameters, []() { return std::make_unique(0); }}); +int MultiBandDistortion_unused = AirwinRegistry::registerAirwindow({"MultiBandDistortion", "Distortion", 135, "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", 277, "NCSeventeen is Dirty Loud!", airwin2rack::NCSeventeen::kNumParameters, []() { return std::make_unique(0); }}); +int NCSeventeen_unused = AirwinRegistry::registerAirwindow({"NCSeventeen", "Saturation", 279, "NCSeventeen is Dirty Loud!", airwin2rack::NCSeventeen::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NaturalizeDither.h" -int NaturalizeDither_unused = AirwinRegistry::registerAirwindow({"NaturalizeDither", "Dithers", 155, "NaturalizeDither is deterministic dither that uses Benford Realness calculations for each sample.", airwin2rack::NaturalizeDither::kNumParameters, []() { return std::make_unique(0); }}); +int NaturalizeDither_unused = AirwinRegistry::registerAirwindow({"NaturalizeDither", "Dithers", 156, "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", 324, "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", 326, "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", 206, "Nikola is an Audio Tesla Coil plugin! Note: audio tesla coils don't sound nice.", airwin2rack::Nikola::kNumParameters, []() { return std::make_unique(0); }}); +int Nikola_unused = AirwinRegistry::registerAirwindow({"Nikola", "Effects", 208, "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" -int NodeDither_unused = AirwinRegistry::registerAirwindow({"NodeDither", "Dithers", 149, "NodeDither is adjusta-TPDF-dither, like a dither flanger. Can do Paul and Tape settings.", airwin2rack::NodeDither::kNumParameters, []() { return std::make_unique(0); }}); +int NodeDither_unused = AirwinRegistry::registerAirwindow({"NodeDither", "Dithers", 150, "NodeDither is adjusta-TPDF-dither, like a dither flanger. Can do Paul and Tape settings.", airwin2rack::NodeDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Noise.h" -int Noise_unused = AirwinRegistry::registerAirwindow({"Noise", "Noise", 249, "Noise is the Airwindows deep noise oscillator, as a sound reinforcer.", airwin2rack::Noise::kNumParameters, []() { return std::make_unique(0); }}); +int Noise_unused = AirwinRegistry::registerAirwindow({"Noise", "Noise", 251, "Noise is the Airwindows deep noise oscillator, as a sound reinforcer.", airwin2rack::Noise::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NonlinearSpace.h" -int NonlinearSpace_unused = AirwinRegistry::registerAirwindow({"NonlinearSpace", "Reverb", 269, "NonlinearSpace is a flexible reverb plugin.", airwin2rack::NonlinearSpace::kNumParameters, []() { return std::make_unique(0); }}); +int NonlinearSpace_unused = AirwinRegistry::registerAirwindow({"NonlinearSpace", "Reverb", 271, "NonlinearSpace is a flexible reverb plugin.", airwin2rack::NonlinearSpace::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NotJustAnotherCD.h" -int NotJustAnotherCD_unused = AirwinRegistry::registerAirwindow({"NotJustAnotherCD", "Dithers", 141, "NotJustAnotherCD is a next-gen wordlength reducers for 16 bit with DeRez.", airwin2rack::NotJustAnotherCD::kNumParameters, []() { return std::make_unique(0); }}); +int NotJustAnotherCD_unused = AirwinRegistry::registerAirwindow({"NotJustAnotherCD", "Dithers", 142, "NotJustAnotherCD is a next-gen wordlength reducers for 16 bit with DeRez.", airwin2rack::NotJustAnotherCD::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/NotJustAnotherDither.h" -int NotJustAnotherDither_unused = AirwinRegistry::registerAirwindow({"NotJustAnotherDither", "Dithers", 140, "NotJustAnotherDither is a next-gen wordlength reducers for 24 bit with DeRez.", airwin2rack::NotJustAnotherDither::kNumParameters, []() { return std::make_unique(0); }}); +int NotJustAnotherDither_unused = AirwinRegistry::registerAirwindow({"NotJustAnotherDither", "Dithers", 141, "NotJustAnotherDither is a next-gen wordlength reducers for 24 bit with DeRez.", airwin2rack::NotJustAnotherDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/OneCornerClip.h" -int OneCornerClip_unused = AirwinRegistry::registerAirwindow({"OneCornerClip", "Clipping", 75, "OneCornerClip is an ultimate full-bandwidth clipper.", airwin2rack::OneCornerClip::kNumParameters, []() { return std::make_unique(0); }}); +int OneCornerClip_unused = AirwinRegistry::registerAirwindow({"OneCornerClip", "Clipping", 76, "OneCornerClip is an ultimate full-bandwidth clipper.", airwin2rack::OneCornerClip::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/OrbitKick.h" int OrbitKick_unused = AirwinRegistry::registerAirwindow({"OrbitKick", "Bass", 35, "OrbitKick is a bass generator and kick drum reinforcer.", airwin2rack::OrbitKick::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Overheads.h" -int Overheads_unused = AirwinRegistry::registerAirwindow({"Overheads", "Unclassified", -1, "", airwin2rack::Overheads::kNumParameters, []() { return std::make_unique(0); }}); +int Overheads_unused = AirwinRegistry::registerAirwindow({"Overheads", "Dynamics", 168, "Overheads is for compressing only part of the sound, strangely!", airwin2rack::Overheads::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PDBuss.h" -int PDBuss_unused = AirwinRegistry::registerAirwindow({"PDBuss", "Consoles", 111, "PDBuss is Console5 and PurestDrive, sittin’ in a tree… (i.e. both at once, on channels and buss)", airwin2rack::PDBuss::kNumParameters, []() { return std::make_unique(0); }}); +int PDBuss_unused = AirwinRegistry::registerAirwindow({"PDBuss", "Consoles", 112, "PDBuss is Console5 and PurestDrive, sittin’ in a tree… (i.e. both at once, on channels and buss)", airwin2rack::PDBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PDChannel.h" -int PDChannel_unused = AirwinRegistry::registerAirwindow({"PDChannel", "Consoles", 112, "PDChannel is Console5 and PurestDrive, sittin’ in a tree… (i.e. both at once, on channels and buss)", airwin2rack::PDChannel::kNumParameters, []() { return std::make_unique(0); }}); +int PDChannel_unused = AirwinRegistry::registerAirwindow({"PDChannel", "Consoles", 113, "PDChannel is Console5 and PurestDrive, sittin’ in a tree… (i.e. both at once, on channels and buss)", airwin2rack::PDChannel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pafnuty.h" int Pafnuty_unused = AirwinRegistry::registerAirwindow({"Pafnuty", "Unclassified", -1, "Pafnuty is a Chebyshev filter, that adds harmonics.", airwin2rack::Pafnuty::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pafnuty2.h" -int Pafnuty2_unused = AirwinRegistry::registerAirwindow({"Pafnuty2", "Effects", 189, "Pafnuty2 is a Chebyshev filter, that adds harmonics, and fits in the VCV Rack port.", airwin2rack::Pafnuty2::kNumParameters, []() { return std::make_unique(0); }}); +int Pafnuty2_unused = AirwinRegistry::registerAirwindow({"Pafnuty2", "Effects", 191, "Pafnuty2 is a Chebyshev filter, that adds harmonics, and fits in the VCV Rack port.", airwin2rack::Pafnuty2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PaulDither.h" -int PaulDither_unused = AirwinRegistry::registerAirwindow({"PaulDither", "Dithers", 137, "PaulDither is a highpassed TPDF dither. (quieter, airier)", airwin2rack::PaulDither::kNumParameters, []() { return std::make_unique(0); }}); +int PaulDither_unused = AirwinRegistry::registerAirwindow({"PaulDither", "Dithers", 138, "PaulDither is a highpassed TPDF dither. (quieter, airier)", airwin2rack::PaulDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PaulWide.h" -int PaulWide_unused = AirwinRegistry::registerAirwindow({"PaulWide", "Dithers", 136, "PaulWide is a highpassed TPDF wide dither. (quieter, airier AND wider)", airwin2rack::PaulWide::kNumParameters, []() { return std::make_unique(0); }}); +int PaulWide_unused = AirwinRegistry::registerAirwindow({"PaulWide", "Dithers", 137, "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", 347, "PeaksOnly is a transformative mix check tool.", airwin2rack::PeaksOnly::kNumParameters, []() { return std::make_unique(0); }}); +int PeaksOnly_unused = AirwinRegistry::registerAirwindow({"PeaksOnly", "Utility", 349, "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", 209, "Pear is the testbed for a new filter, implemented as a highpass/lowpass shelf.", airwin2rack::Pear::kNumParameters, []() { return std::make_unique(0); }}); +int Pear_unused = AirwinRegistry::registerAirwindow({"Pear", "Filter", 211, "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/Pear2.h" +int Pear2_unused = AirwinRegistry::registerAirwindow({"Pear2", "Unclassified", -1, "", airwin2rack::Pear2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PhaseNudge.h" -int PhaseNudge_unused = AirwinRegistry::registerAirwindow({"PhaseNudge", "Subtlety", 307, "PhaseNudge is a phase rotator/allpass filter.", airwin2rack::PhaseNudge::kNumParameters, []() { return std::make_unique(0); }}); +int PhaseNudge_unused = AirwinRegistry::registerAirwindow({"PhaseNudge", "Subtlety", 309, "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" -int PitchNasty_unused = AirwinRegistry::registerAirwindow({"PitchNasty", "Effects", 190, "PitchNasty is a primitive pitch shifter that also has primitive time-stretch artifacts.", airwin2rack::PitchNasty::kNumParameters, []() { return std::make_unique(0); }}); +int PitchNasty_unused = AirwinRegistry::registerAirwindow({"PitchNasty", "Effects", 192, "PitchNasty is a primitive pitch shifter that also has primitive time-stretch artifacts.", airwin2rack::PitchNasty::kNumParameters, []() { return std::make_unique(0); }}); #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); }}); +int PlatinumSlew_unused = AirwinRegistry::registerAirwindow({"PlatinumSlew", "Brightness", 50, "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", 273, "PocketVerbs is my popular old special effects reverbs plugin!", airwin2rack::PocketVerbs::kNumParameters, []() { return std::make_unique(0); }}); +int PocketVerbs_unused = AirwinRegistry::registerAirwindow({"PocketVerbs", "Reverb", 275, "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", 239, "Pockey is 12 bit (and under) lo-fi hiphop in a plugin.", airwin2rack::Pockey::kNumParameters, []() { return std::make_unique(0); }}); +int Pockey_unused = AirwinRegistry::registerAirwindow({"Pockey", "Lo-Fi", 241, "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" -int Pockey2_unused = AirwinRegistry::registerAirwindow({"Pockey2", "Lo-Fi", 235, "Pockey2 is more efficient, more intense lo-fi hiphop in a plugin.", airwin2rack::Pockey2::kNumParameters, []() { return std::make_unique(0); }}); +int Pockey2_unused = AirwinRegistry::registerAirwindow({"Pockey2", "Lo-Fi", 237, "Pockey2 is more efficient, more intense lo-fi hiphop in a plugin.", airwin2rack::Pockey2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Podcast.h" -int Podcast_unused = AirwinRegistry::registerAirwindow({"Podcast", "Dynamics", 179, "Podcast is a simpler pile of curve-style compressors with hard clipping.", airwin2rack::Podcast::kNumParameters, []() { return std::make_unique(0); }}); +int Podcast_unused = AirwinRegistry::registerAirwindow({"Podcast", "Dynamics", 181, "Podcast is a simpler pile of curve-style compressors with hard clipping.", airwin2rack::Podcast::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PodcastDeluxe.h" -int PodcastDeluxe_unused = AirwinRegistry::registerAirwindow({"PodcastDeluxe", "Dynamics", 178, "PodcastDeluxe is a pile of compressors (curve style) and phase rotators.", airwin2rack::PodcastDeluxe::kNumParameters, []() { return std::make_unique(0); }}); +int PodcastDeluxe_unused = AirwinRegistry::registerAirwindow({"PodcastDeluxe", "Dynamics", 180, "PodcastDeluxe is a pile of compressors (curve style) and phase rotators.", airwin2rack::PodcastDeluxe::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Point.h" -int Point_unused = AirwinRegistry::registerAirwindow({"Point", "Dynamics", 176, "Point is an explosive transient designer.", airwin2rack::Point::kNumParameters, []() { return std::make_unique(0); }}); +int Point_unused = AirwinRegistry::registerAirwindow({"Point", "Dynamics", 178, "Point is an explosive transient designer.", airwin2rack::Point::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pop.h" -int Pop_unused = AirwinRegistry::registerAirwindow({"Pop", "Dynamics", 161, "Pop is a crazy overcompressor with a very exaggerated sound.", airwin2rack::Pop::kNumParameters, []() { return std::make_unique(0); }}); +int Pop_unused = AirwinRegistry::registerAirwindow({"Pop", "Dynamics", 162, "Pop is a crazy overcompressor with a very exaggerated sound.", airwin2rack::Pop::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pop2.h" -int Pop2_unused = AirwinRegistry::registerAirwindow({"Pop2", "Dynamics", 158, "Pop2 adds control and punch to Pop.", airwin2rack::Pop2::kNumParameters, []() { return std::make_unique(0); }}); +int Pop2_unused = AirwinRegistry::registerAirwindow({"Pop2", "Dynamics", 159, "Pop2 adds control and punch to Pop.", airwin2rack::Pop2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PowerSag.h" -int PowerSag_unused = AirwinRegistry::registerAirwindow({"PowerSag", "Effects", 204, "PowerSag is for emulating power supply limitations in analog modeling.", airwin2rack::PowerSag::kNumParameters, []() { return std::make_unique(0); }}); +int PowerSag_unused = AirwinRegistry::registerAirwindow({"PowerSag", "Effects", 206, "PowerSag is for emulating power supply limitations in analog modeling.", airwin2rack::PowerSag::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PowerSag2.h" -int PowerSag2_unused = AirwinRegistry::registerAirwindow({"PowerSag2", "Effects", 203, "PowerSag2 is my improved circuit-starve plugin, now with inverse effect!", airwin2rack::PowerSag2::kNumParameters, []() { return std::make_unique(0); }}); +int PowerSag2_unused = AirwinRegistry::registerAirwindow({"PowerSag2", "Effects", 205, "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", 329, "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", 331, "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", 205, "Preponderant is Airwindows Anti-Soothe, a strange tone intensifier and balancer.", airwin2rack::Preponderant::kNumParameters, []() { return std::make_unique(0); }}); +int Preponderant_unused = AirwinRegistry::registerAirwindow({"Preponderant", "Effects", 207, "Preponderant is Airwindows Anti-Soothe, a strange tone intensifier and balancer.", airwin2rack::Preponderant::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pressure4.h" -int Pressure4_unused = AirwinRegistry::registerAirwindow({"Pressure4", "Dynamics", 182, "Pressure4 is a compressor adjustable between vari-mu and ‘new york’ peak-retaining behaviors.", airwin2rack::Pressure4::kNumParameters, []() { return std::make_unique(0); }}); +int Pressure4_unused = AirwinRegistry::registerAirwindow({"Pressure4", "Dynamics", 184, "Pressure4 is a compressor adjustable between vari-mu and ‘new york’ peak-retaining behaviors.", airwin2rack::Pressure4::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Pressure5.h" -int Pressure5_unused = AirwinRegistry::registerAirwindow({"Pressure5", "Dynamics", 159, "Pressure5 expands Pressure4 with after-boost and built-in ClipOnly2.", airwin2rack::Pressure5::kNumParameters, []() { return std::make_unique(0); }}); +int Pressure5_unused = AirwinRegistry::registerAirwindow({"Pressure5", "Dynamics", 160, "Pressure5 expands Pressure4 with after-boost and built-in ClipOnly2.", airwin2rack::Pressure5::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestAir.h" -int PurestAir_unused = AirwinRegistry::registerAirwindow({"PurestAir", "Brightness", 63, "PurestAir is a brightness experiment.", airwin2rack::PurestAir::kNumParameters, []() { return std::make_unique(0); }}); +int PurestAir_unused = AirwinRegistry::registerAirwindow({"PurestAir", "Brightness", 64, "PurestAir is a brightness experiment.", airwin2rack::PurestAir::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestConsole2Buss.h" -int PurestConsole2Buss_unused = AirwinRegistry::registerAirwindow({"PurestConsole2Buss", "Consoles", 101, "PurestConsole2Buss is the distributed filter version of PurestConsole.", airwin2rack::PurestConsole2Buss::kNumParameters, []() { return std::make_unique(0); }}); +int PurestConsole2Buss_unused = AirwinRegistry::registerAirwindow({"PurestConsole2Buss", "Consoles", 102, "PurestConsole2Buss is the distributed filter version of PurestConsole.", airwin2rack::PurestConsole2Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestConsole2Channel.h" -int PurestConsole2Channel_unused = AirwinRegistry::registerAirwindow({"PurestConsole2Channel", "Consoles", 102, "PurestConsole2Channel is the distributed filter version of PurestConsole.", airwin2rack::PurestConsole2Channel::kNumParameters, []() { return std::make_unique(0); }}); +int PurestConsole2Channel_unused = AirwinRegistry::registerAirwindow({"PurestConsole2Channel", "Consoles", 103, "PurestConsole2Channel is the distributed filter version of PurestConsole.", airwin2rack::PurestConsole2Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestConsole3Buss.h" -int PurestConsole3Buss_unused = AirwinRegistry::registerAirwindow({"PurestConsole3Buss", "Consoles", 99, "PurestConsole3Buss is an alternate algorithm for minimalist Console.", airwin2rack::PurestConsole3Buss::kNumParameters, []() { return std::make_unique(0); }}); +int PurestConsole3Buss_unused = AirwinRegistry::registerAirwindow({"PurestConsole3Buss", "Consoles", 100, "PurestConsole3Buss is an alternate algorithm for minimalist Console.", airwin2rack::PurestConsole3Buss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestConsole3Channel.h" -int PurestConsole3Channel_unused = AirwinRegistry::registerAirwindow({"PurestConsole3Channel", "Consoles", 100, "PurestConsole3Channel is an alternate algorithm for minimalist Console.", airwin2rack::PurestConsole3Channel::kNumParameters, []() { return std::make_unique(0); }}); +int PurestConsole3Channel_unused = AirwinRegistry::registerAirwindow({"PurestConsole3Channel", "Consoles", 101, "PurestConsole3Channel is an alternate algorithm for minimalist Console.", airwin2rack::PurestConsole3Channel::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestConsoleBuss.h" -int PurestConsoleBuss_unused = AirwinRegistry::registerAirwindow({"PurestConsoleBuss", "Consoles", 107, "PurestConsoleBuss is the most free from coloration Console system.", airwin2rack::PurestConsoleBuss::kNumParameters, []() { return std::make_unique(0); }}); +int PurestConsoleBuss_unused = AirwinRegistry::registerAirwindow({"PurestConsoleBuss", "Consoles", 108, "PurestConsoleBuss is the most free from coloration Console system.", airwin2rack::PurestConsoleBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/PurestConsoleChannel.h" -int PurestConsoleChannel_unused = AirwinRegistry::registerAirwindow({"PurestConsoleChannel", "Consoles", 108, "PurestConsoleChannel is the most free from coloration Console system.", airwin2rack::PurestConsoleChannel::kNumParameters, []() { return std::make_unique(0); }}); +int PurestConsoleChannel_unused = AirwinRegistry::registerAirwindow({"PurestConsoleChannel", "Consoles", 109, "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", 281, "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", 283, "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", 342, "PurestFade is just like PurestGain, but for LONG fades.", airwin2rack::PurestFade::kNumParameters, []() { return std::make_unique(0); }}); +int PurestFade_unused = AirwinRegistry::registerAirwindow({"PurestFade", "Utility", 344, "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", 341, "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", 343, "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", 181, "PurestSquish is an open-sounding compressor with bass bloom.", airwin2rack::PurestSquish::kNumParameters, []() { return std::make_unique(0); }}); +int PurestSquish_unused = AirwinRegistry::registerAirwindow({"PurestSquish", "Dynamics", 183, "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", 304, "PurestWarm is a subtle tone shaper and warmth adder.", airwin2rack::PurestWarm::kNumParameters, []() { return std::make_unique(0); }}); +int PurestWarm_unused = AirwinRegistry::registerAirwindow({"PurestWarm", "Subtlety", 306, "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", 303, "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", 305, "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", 168, "Pyewacket is an old school compressor for high definition transients. Adds no fatness, just energy.", airwin2rack::Pyewacket::kNumParameters, []() { return std::make_unique(0); }}); +int Pyewacket_unused = AirwinRegistry::registerAirwindow({"Pyewacket", "Dynamics", 170, "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" -int RawGlitters_unused = AirwinRegistry::registerAirwindow({"RawGlitters", "Dithers", 154, "RawGlitters is just the quantization from Dither Me Timbers… and the opposite, as a brightener.", airwin2rack::RawGlitters::kNumParameters, []() { return std::make_unique(0); }}); +int RawGlitters_unused = AirwinRegistry::registerAirwindow({"RawGlitters", "Dithers", 155, "RawGlitters is just the quantization from Dither Me Timbers… and the opposite, as a brightener.", airwin2rack::RawGlitters::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/RawTimbers.h" -int RawTimbers_unused = AirwinRegistry::registerAirwindow({"RawTimbers", "Dithers", 153, "RawTimbers is just the quantization from Dither Me Timbers… and the opposite, as a brightener.", airwin2rack::RawTimbers::kNumParameters, []() { return std::make_unique(0); }}); +int RawTimbers_unused = AirwinRegistry::registerAirwindow({"RawTimbers", "Dithers", 154, "RawTimbers is just the quantization from Dither Me Timbers… and the opposite, as a brightener.", airwin2rack::RawTimbers::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Recurve.h" -int Recurve_unused = AirwinRegistry::registerAirwindow({"Recurve", "Dynamics", 167, "Recurve is a special buss compressor with no threshold point.", airwin2rack::Recurve::kNumParameters, []() { return std::make_unique(0); }}); +int Recurve_unused = AirwinRegistry::registerAirwindow({"Recurve", "Dynamics", 169, "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", 308, "Remap puts the guts back into overloudenated audio!", airwin2rack::Remap::kNumParameters, []() { return std::make_unique(0); }}); +int Remap_unused = AirwinRegistry::registerAirwindow({"Remap", "Subtlety", 310, "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", 228, "ResEQ is a bank of mostly midrange resonances.", airwin2rack::ResEQ::kNumParameters, []() { return std::make_unique(0); }}); +int ResEQ_unused = AirwinRegistry::registerAirwindow({"ResEQ", "Filter", 230, "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", 210, "ResEQ2 is a single, sharp, sonorous mid peak.", airwin2rack::ResEQ2::kNumParameters, []() { return std::make_unique(0); }}); +int ResEQ2_unused = AirwinRegistry::registerAirwindow({"ResEQ2", "Filter", 212, "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", 274, "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", 276, "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", 288, "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", 290, "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", 354, "RightoMono copies one channel to both, losslessly.", airwin2rack::RightoMono::kNumParameters, []() { return std::make_unique(0); }}); +int RightoMono_unused = AirwinRegistry::registerAirwindow({"RightoMono", "Utility", 356, "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", 300, "Shape is an asymmetrical waveshaper for peak manipulating.", airwin2rack::Shape::kNumParameters, []() { return std::make_unique(0); }}); +int Shape_unused = AirwinRegistry::registerAirwindow({"Shape", "Subtlety", 302, "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", "Effects", 191, "ShortBuss chases second harmonic, to add or remove it.", airwin2rack::ShortBuss::kNumParameters, []() { return std::make_unique(0); }}); +int ShortBuss_unused = AirwinRegistry::registerAirwindow({"ShortBuss", "Effects", 193, "ShortBuss chases second harmonic, to add or remove it.", airwin2rack::ShortBuss::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SideDull.h" -int SideDull_unused = AirwinRegistry::registerAirwindow({"SideDull", "Stereo", 298, "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", 300, "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", 297, "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", 299, "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", 255, "Silhouette replaces the sound with raw noise sculpted to match its dynamics.", airwin2rack::Silhouette::kNumParameters, []() { return std::make_unique(0); }}); +int Silhouette_unused = AirwinRegistry::registerAirwindow({"Silhouette", "Noise", 257, "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); }}); +int Sinew_unused = AirwinRegistry::registerAirwindow({"Sinew", "Brightness", 53, "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", 309, "SingleEndedTriode is unusual analog modeling effects.", airwin2rack::SingleEndedTriode::kNumParameters, []() { return std::make_unique(0); }}); +int SingleEndedTriode_unused = AirwinRegistry::registerAirwindow({"SingleEndedTriode", "Subtlety", 311, "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); }}); +int Slew_unused = AirwinRegistry::registerAirwindow({"Slew", "Brightness", 61, "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" -int Slew2_unused = AirwinRegistry::registerAirwindow({"Slew2", "Brightness", 59, "Slew2 works like a de-esser or acceleration limiter: controls extreme highs.", airwin2rack::Slew2::kNumParameters, []() { return std::make_unique(0); }}); +int Slew2_unused = AirwinRegistry::registerAirwindow({"Slew2", "Brightness", 60, "Slew2 works like a de-esser or acceleration limiter: controls extreme highs.", airwin2rack::Slew2::kNumParameters, []() { return std::make_unique(0); }}); #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); }}); +int Slew3_unused = AirwinRegistry::registerAirwindow({"Slew3", "Brightness", 59, "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", 345, "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", 347, "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); }}); +int SlewSonic_unused = AirwinRegistry::registerAirwindow({"SlewSonic", "Brightness", 54, "SlewSonic combines SlewOnly with ultrasonic filtering to solo brightness.", airwin2rack::SlewSonic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Smooth.h" -int Smooth_unused = AirwinRegistry::registerAirwindow({"Smooth", "Brightness", 56, "Smooth can tame pointy sounds or make drums explode.", airwin2rack::Smooth::kNumParameters, []() { return std::make_unique(0); }}); +int Smooth_unused = AirwinRegistry::registerAirwindow({"Smooth", "Brightness", 57, "Smooth can tame pointy sounds or make drums explode.", airwin2rack::Smooth::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SoftGate.h" -int SoftGate_unused = AirwinRegistry::registerAirwindow({"SoftGate", "Dynamics", 170, "SoftGate is a gate that can mute hiss and smooth sample tails.", airwin2rack::SoftGate::kNumParameters, []() { return std::make_unique(0); }}); +int SoftGate_unused = AirwinRegistry::registerAirwindow({"SoftGate", "Dynamics", 172, "SoftGate is a gate that can mute hiss and smooth sample tails.", airwin2rack::SoftGate::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/SpatializeDither.h" -int SpatializeDither_unused = AirwinRegistry::registerAirwindow({"SpatializeDither", "Dithers", 144, "SpatializeDither is a high-performance clarity and accuracy dither.", airwin2rack::SpatializeDither::kNumParameters, []() { return std::make_unique(0); }}); +int SpatializeDither_unused = AirwinRegistry::registerAirwindow({"SpatializeDither", "Dithers", 145, "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", 285, "Spiral is the new best smoothest distortion algorithm.", airwin2rack::Spiral::kNumParameters, []() { return std::make_unique(0); }}); +int Spiral_unused = AirwinRegistry::registerAirwindow({"Spiral", "Saturation", 287, "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", 280, "Spiral2 is Spiral with controls including Presence.", airwin2rack::Spiral2::kNumParameters, []() { return std::make_unique(0); }}); +int Spiral2_unused = AirwinRegistry::registerAirwindow({"Spiral2", "Saturation", 282, "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", 289, "Srsly is a psychoacoustic stereo processor.", airwin2rack::Srsly::kNumParameters, []() { return std::make_unique(0); }}); +int Srsly_unused = AirwinRegistry::registerAirwindow({"Srsly", "Stereo", 291, "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", 290, "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", 292, "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" @@ -619,159 +623,161 @@ 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", 292, "StereoFX is an aggressive stereo widener.", airwin2rack::StereoFX::kNumParameters, []() { return std::make_unique(0); }}); +int StereoFX_unused = AirwinRegistry::registerAirwindow({"StereoFX", "Stereo", 294, "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", 150, "StudioTan is all the 'non-dither' dithers, up to date and convenient.", airwin2rack::StudioTan::kNumParameters, []() { return std::make_unique(0); }}); +int StudioTan_unused = AirwinRegistry::registerAirwindow({"StudioTan", "Dithers", 151, "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", 211, "SubTight uses a variation on the Creature algorithm to tighten sub-lows.", airwin2rack::SubTight::kNumParameters, []() { return std::make_unique(0); }}); +int SubTight_unused = AirwinRegistry::registerAirwindow({"SubTight", "Filter", 213, "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", 346, "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", 348, "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", 183, "Surge is a compressor for accentuating beats and pulses.", airwin2rack::Surge::kNumParameters, []() { return std::make_unique(0); }}); +int Surge_unused = AirwinRegistry::registerAirwindow({"Surge", "Dynamics", 185, "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", 184, "SurgeTide is a surge and flow dynamics plugin.", airwin2rack::SurgeTide::kNumParameters, []() { return std::make_unique(0); }}); +int SurgeTide_unused = AirwinRegistry::registerAirwindow({"SurgeTide", "Dynamics", 186, "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", 302, "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", 304, "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", 180, "Swell is Dial-an-attack, like sidechaining.", airwin2rack::Swell::kNumParameters, []() { return std::make_unique(0); }}); +int Swell_unused = AirwinRegistry::registerAirwindow({"Swell", "Dynamics", 182, "Swell is Dial-an-attack, like sidechaining.", airwin2rack::Swell::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TPDFDither.h" -int TPDFDither_unused = AirwinRegistry::registerAirwindow({"TPDFDither", "Dithers", 139, "TPDFDither is TPDF dither. With 16/24 bit output and a DeRez control.", airwin2rack::TPDFDither::kNumParameters, []() { return std::make_unique(0); }}); +int TPDFDither_unused = AirwinRegistry::registerAirwindow({"TPDFDither", "Dithers", 140, "TPDFDither is TPDF dither. With 16/24 bit output and a DeRez control.", airwin2rack::TPDFDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TPDFWide.h" -int TPDFWide_unused = AirwinRegistry::registerAirwindow({"TPDFWide", "Dithers", 138, "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); }}); +int TPDFWide_unused = AirwinRegistry::registerAirwindow({"TPDFWide", "Dithers", 139, "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", 316, "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", 318, "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" int TapeDelay2_unused = AirwinRegistry::registerAirwindow({"TapeDelay2", "Ambience", 1, "TapeDelay2 is a new implementation of a flexible tape echo.", airwin2rack::TapeDelay2::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TapeDither.h" -int TapeDither_unused = AirwinRegistry::registerAirwindow({"TapeDither", "Dithers", 143, "TapeDither is TPDF dither with noise like reel-to-reel tape.", airwin2rack::TapeDither::kNumParameters, []() { return std::make_unique(0); }}); +int TapeDither_unused = AirwinRegistry::registerAirwindow({"TapeDither", "Dithers", 144, "TapeDither is TPDF dither with noise like reel-to-reel tape.", airwin2rack::TapeDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TapeDust.h" -int TapeDust_unused = AirwinRegistry::registerAirwindow({"TapeDust", "Noise", 256, "TapeDust is just a special treble-erode noise, a ‘slew noise’ plugin.", airwin2rack::TapeDust::kNumParameters, []() { return std::make_unique(0); }}); +int TapeDust_unused = AirwinRegistry::registerAirwindow({"TapeDust", "Noise", 258, "TapeDust is just a special treble-erode noise, a ‘slew noise’ plugin.", airwin2rack::TapeDust::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TapeFat.h" -int TapeFat_unused = AirwinRegistry::registerAirwindow({"TapeFat", "Filter", 227, "TapeFat is the tone control from TapeDelay.", airwin2rack::TapeFat::kNumParameters, []() { return std::make_unique(0); }}); +int TapeFat_unused = AirwinRegistry::registerAirwindow({"TapeFat", "Filter", 229, "TapeFat is the tone control from TapeDelay.", airwin2rack::TapeFat::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Texturize.h" -int Texturize_unused = AirwinRegistry::registerAirwindow({"Texturize", "Noise", 250, "Texturize is a hidden-noise plugin for adding sonic texture to things.", airwin2rack::Texturize::kNumParameters, []() { return std::make_unique(0); }}); +int Texturize_unused = AirwinRegistry::registerAirwindow({"Texturize", "Noise", 252, "Texturize is a hidden-noise plugin for adding sonic texture to things.", airwin2rack::Texturize::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/TexturizeMS.h" -int TexturizeMS_unused = AirwinRegistry::registerAirwindow({"TexturizeMS", "Noise", 251, "TexturizeMS is a hidden-noise plugin for adding mid-side sonic texture to things.", airwin2rack::TexturizeMS::kNumParameters, []() { return std::make_unique(0); }}); +int TexturizeMS_unused = AirwinRegistry::registerAirwindow({"TexturizeMS", "Noise", 253, "TexturizeMS is a hidden-noise plugin for adding mid-side sonic texture to things.", airwin2rack::TexturizeMS::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/Thunder.h" -int Thunder_unused = AirwinRegistry::registerAirwindow({"Thunder", "Dynamics", 171, "Thunder is a compressor that retains or exaggerates subsonic bass when you push it.", airwin2rack::Thunder::kNumParameters, []() { return std::make_unique(0); }}); +int Thunder_unused = AirwinRegistry::registerAirwindow({"Thunder", "Dynamics", 173, "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", 319, "ToTape5 is Airwindows analog tape emulation.", airwin2rack::ToTape5::kNumParameters, []() { return std::make_unique(0); }}); +int ToTape5_unused = AirwinRegistry::registerAirwindow({"ToTape5", "Tape", 321, "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", 314, "ToTape6 is Airwindows tape emulation for 2020!", airwin2rack::ToTape6::kNumParameters, []() { return std::make_unique(0); }}); +int ToTape6_unused = AirwinRegistry::registerAirwindow({"ToTape6", "Tape", 316, "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", 293, "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", 295, "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", 217, "ToneSlant is a super-transparent ‘tilt EQ’ with very low Q.", airwin2rack::ToneSlant::kNumParameters, []() { return std::make_unique(0); }}); +int ToneSlant_unused = AirwinRegistry::registerAirwindow({"ToneSlant", "Filter", 219, "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", 312, "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", 314, "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", 194, "TremoSquare is a squarewave tremolo effect that only switches on zero crossings.", airwin2rack::TremoSquare::kNumParameters, []() { return std::make_unique(0); }}); +int TremoSquare_unused = AirwinRegistry::registerAirwindow({"TremoSquare", "Effects", 196, "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" -int Tremolo_unused = AirwinRegistry::registerAirwindow({"Tremolo", "Effects", 195, "Tremolo is fluctuating saturation curves for a tubey tremolo.", airwin2rack::Tremolo::kNumParameters, []() { return std::make_unique(0); }}); +int Tremolo_unused = AirwinRegistry::registerAirwindow({"Tremolo", "Effects", 197, "Tremolo is fluctuating saturation curves for a tubey tremolo.", airwin2rack::Tremolo::kNumParameters, []() { return std::make_unique(0); }}); +#include "autogen_airwin/Trianglizer.h" +int Trianglizer_unused = AirwinRegistry::registerAirwindow({"Trianglizer", "Unclassified", -1, "", airwin2rack::Trianglizer::kNumParameters, []() { return std::make_unique(0); }}); #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", 279, "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", 281, "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", 278, "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", 280, "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", 313, "TubeDesk is a tube recording console type tone coloring.", airwin2rack::TubeDesk::kNumParameters, []() { return std::make_unique(0); }}); +int TubeDesk_unused = AirwinRegistry::registerAirwindow({"TubeDesk", "Subtlety", 315, "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); }}); +int UltrasonX_unused = AirwinRegistry::registerAirwindow({"UltrasonX", "Brightness", 72, "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" -int Ultrasonic_unused = AirwinRegistry::registerAirwindow({"Ultrasonic", "Brightness", 68, "Ultrasonic is a very clean, plain, high quality supersonic filter, for using inside digital mixes.", airwin2rack::Ultrasonic::kNumParameters, []() { return std::make_unique(0); }}); +int Ultrasonic_unused = AirwinRegistry::registerAirwindow({"Ultrasonic", "Brightness", 69, "Ultrasonic is a very clean, plain, high quality supersonic filter, for using inside digital mixes.", airwin2rack::Ultrasonic::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/UltrasonicLite.h" -int UltrasonicLite_unused = AirwinRegistry::registerAirwindow({"UltrasonicLite", "Brightness", 69, "UltrasonicLite is just one stage of supersonic filter, for using inside digital mixes.", airwin2rack::UltrasonicLite::kNumParameters, []() { return std::make_unique(0); }}); +int UltrasonicLite_unused = AirwinRegistry::registerAirwindow({"UltrasonicLite", "Brightness", 70, "UltrasonicLite is just one stage of supersonic filter, for using inside digital mixes.", airwin2rack::UltrasonicLite::kNumParameters, []() { return std::make_unique(0); }}); #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); }}); +int UltrasonicMed_unused = AirwinRegistry::registerAirwindow({"UltrasonicMed", "Brightness", 71, "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", 286, "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", 288, "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", 164, "VariMu is a more organic variation on Pressure (a compressor)", airwin2rack::VariMu::kNumParameters, []() { return std::make_unique(0); }}); +int VariMu_unused = AirwinRegistry::registerAirwindow({"VariMu", "Dynamics", 165, "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", "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", 262, "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", 264, "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", 245, "Vibrato lets you vibrato, chorus, flange, and make odd FM noises.", airwin2rack::Vibrato::kNumParameters, []() { return std::make_unique(0); }}); +int Vibrato_unused = AirwinRegistry::registerAirwindow({"Vibrato", "Lo-Fi", 247, "Vibrato lets you vibrato, chorus, flange, and make odd FM noises.", airwin2rack::Vibrato::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/VinylDither.h" -int VinylDither_unused = AirwinRegistry::registerAirwindow({"VinylDither", "Dithers", 145, "VinylDither is a high-performance dither that converts digital noise to ‘groove noise’.", airwin2rack::VinylDither::kNumParameters, []() { return std::make_unique(0); }}); +int VinylDither_unused = AirwinRegistry::registerAirwindow({"VinylDither", "Dithers", 146, "VinylDither is a high-performance dither that converts digital noise to ‘groove noise’.", airwin2rack::VinylDither::kNumParameters, []() { return std::make_unique(0); }}); #include "autogen_airwin/VoiceOfTheStarship.h" -int VoiceOfTheStarship_unused = AirwinRegistry::registerAirwindow({"VoiceOfTheStarship", "Noise", 252, "VoiceOfTheStarship is a deep noise tone source.", airwin2rack::VoiceOfTheStarship::kNumParameters, []() { return std::make_unique(0); }}); +int VoiceOfTheStarship_unused = AirwinRegistry::registerAirwindow({"VoiceOfTheStarship", "Noise", 254, "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", 359, "VoiceTrick lets you record vocals while monitoring over speakers.", airwin2rack::VoiceTrick::kNumParameters, []() { return std::make_unique(0); }}); +int VoiceTrick_unused = AirwinRegistry::registerAirwindow({"VoiceTrick", "Utility", 361, "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", 213, "Weight is a very accurate sub-bass boost based on Holt.", airwin2rack::Weight::kNumParameters, []() { return std::make_unique(0); }}); +int Weight_unused = AirwinRegistry::registerAirwindow({"Weight", "Filter", 215, "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", 291, "Wider is Airwindows stereo space shaping.", airwin2rack::Wider::kNumParameters, []() { return std::make_unique(0); }}); +int Wider_unused = AirwinRegistry::registerAirwindow({"Wider", "Stereo", 293, "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", 377, "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", 379, "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", 378, "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", 380, "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", 379, "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", 381, "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", 380, "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", 382, "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", 381, "XRegion is distorted staggered bandpasses, for extreme soundmangling.", airwin2rack::XRegion::kNumParameters, []() { return std::make_unique(0); }}); +int XRegion_unused = AirwinRegistry::registerAirwindow({"XRegion", "XYZ Filters", 383, "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", 370, "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", 372, "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", 372, "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", 374, "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", 374, "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", 376, "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", 371, "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", 373, "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", 373, "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", 375, "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", 375, "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", 377, "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", 376, "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", 378, "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", 365, "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", 367, "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", 360, "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", 362, "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", 366, "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", 368, "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", 361, "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", 363, "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", 367, "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", 369, "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", 362, "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", 364, "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", 368, "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", 370, "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", 363, "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", 365, "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", 127, "ZOutputStage is the output clipping from the Emu e6400 style Z filters.", airwin2rack::ZOutputStage::kNumParameters, []() { return std::make_unique(0); }}); +int ZOutputStage_unused = AirwinRegistry::registerAirwindow({"ZOutputStage", "Distortion", 128, "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", 369, "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", 371, "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", 364, "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", 366, "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", 166, "curve is the simplest, purest form of Recurve with no extra boosts.", airwin2rack::curve::kNumParameters, []() { return std::make_unique(0); }}); +int curve_unused = AirwinRegistry::registerAirwindow({"curve", "Dynamics", 167, "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", 270, "kCathedral is a giant reverby space.", airwin2rack::kCathedral::kNumParameters, []() { return std::make_unique(0); }}); +int kCathedral_unused = AirwinRegistry::registerAirwindow({"kCathedral", "Reverb", 272, "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", "Reverb", 257, "kCathedral2 is a giant reverby space modeled after the Bricasti Cathedral.", airwin2rack::kCathedral2::kNumParameters, []() { return std::make_unique(0); }}); +int kCathedral2_unused = AirwinRegistry::registerAirwindow({"kCathedral2", "Reverb", 259, "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", 260, "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", 262, "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", 259, "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", 261, "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", 261, "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", 263, "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", 258, "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", 260, "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", 353, "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", 355, "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", 352, "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", 354, "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/Air3.cpp b/src/autogen_airwin/Air3.cpp index 7e5d6e1..c4a248d 100644 --- a/src/autogen_airwin/Air3.cpp +++ b/src/autogen_airwin/Air3.cpp @@ -17,7 +17,7 @@ Air3::Air3(audioMasterCallback audioMaster) : B = 0.5; for (int x = 0; x < air_total; x++) air[x] = 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. diff --git a/src/autogen_airwin/Air3.h b/src/autogen_airwin/Air3.h index e8b572f..8913c2f 100644 --- a/src/autogen_airwin/Air3.h +++ b/src/autogen_airwin/Air3.h @@ -60,33 +60,38 @@ class Air3 : pvSL1, accSL1, acc2SL1, - pvAR1, - pvSR1, - accSR1, - acc2SR1, pvAL2, pvSL2, accSL2, acc2SL2, + pvAL3, + pvSL3, + accSL3, + pvAL4, + pvSL4, + gndavgL, + outAL, + gainAL, + pvAR1, + pvSR1, + accSR1, + acc2SR1, pvAR2, pvSR2, accSR2, acc2SR2, - pvAL3, - pvSL3, - accSL3, pvAR3, pvSR3, accSR3, - pvAL4, - pvSL4, pvAR4, pvSR4, - gndavgL, gndavgR, + outAR, + gainAR, air_total }; double air[air_total]; + uint32_t fpdL; uint32_t fpdR; //default stuff diff --git a/src/autogen_airwin/Air3Proc.cpp b/src/autogen_airwin/Air3Proc.cpp index bd8f779..339601b 100644 --- a/src/autogen_airwin/Air3Proc.cpp +++ b/src/autogen_airwin/Air3Proc.cpp @@ -18,11 +18,11 @@ void Air3::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram double overallscale = 1.0; overallscale /= 44100.0; overallscale *= getSampleRate(); - + double airGain = A*2.0; if (airGain > 1.0) airGain = pow(airGain,3.0+sqrt(overallscale)); double gndGain = B*2.0; - + while (--sampleFrames >= 0) { double inputSampleL = *in1; @@ -32,33 +32,59 @@ void Air3::processReplacing(float **inputs, float **outputs, VstInt32 sampleFram double drySampleL = inputSampleL; double drySampleR = inputSampleR; - air[pvSL4] = air[pvAL4] - air[pvAL3]; air[pvSR4] = air[pvAR4] - air[pvAR3]; - air[pvSL3] = air[pvAL3] - air[pvAL2]; air[pvSR3] = air[pvAR3] - air[pvAR2]; - air[pvSL2] = air[pvAL2] - air[pvAL1]; air[pvSR2] = air[pvAR2] - air[pvAR1]; - air[pvSL1] = air[pvAL1] - inputSampleL; air[pvSR1] = air[pvAR1] - inputSampleR; + air[pvSL4] = air[pvAL4] - air[pvAL3]; + air[pvSL3] = air[pvAL3] - air[pvAL2]; + air[pvSL2] = air[pvAL2] - air[pvAL1]; + air[pvSL1] = air[pvAL1] - inputSampleL; + + air[accSL3] = air[pvSL4] - air[pvSL3]; + air[accSL2] = air[pvSL3] - air[pvSL2]; + air[accSL1] = air[pvSL2] - air[pvSL1]; + + air[acc2SL2] = air[accSL3] - air[accSL2]; + air[acc2SL1] = air[accSL2] - air[accSL1]; + + air[outAL] = -(air[pvAL1] + air[pvSL3] + air[acc2SL2] - ((air[acc2SL2] + air[acc2SL1])*0.5)); + + air[gainAL] *= 0.5; + air[gainAL] += fabs(drySampleL-air[outAL])*0.5; + if (air[gainAL] > 0.3*sqrt(overallscale)) air[gainAL] = 0.3*sqrt(overallscale); + air[pvAL4] = air[pvAL3]; + air[pvAL3] = air[pvAL2]; + air[pvAL2] = air[pvAL1]; + air[pvAL1] = (air[gainAL] * air[outAL]) + drySampleL; + + double gnd = drySampleL - ((air[outAL]*0.5)+(drySampleL*(0.457-(0.017*overallscale)))); + double temp = (gnd + air[gndavgL])*0.5; air[gndavgL] = gnd; gnd = temp; + + inputSampleL = ((drySampleL-gnd)*airGain)+(gnd*gndGain); - air[accSL3] = air[pvSL4] - air[pvSL3]; air[accSR3] = air[pvSR4] - air[pvSR3]; - air[accSL2] = air[pvSL3] - air[pvSL2]; air[accSR2] = air[pvSR3] - air[pvSR2]; - air[accSL1] = air[pvSL2] - air[pvSL1]; air[accSR1] = air[pvSR2] - air[pvSR1]; + air[pvSR4] = air[pvAR4] - air[pvAR3]; + air[pvSR3] = air[pvAR3] - air[pvAR2]; + air[pvSR2] = air[pvAR2] - air[pvAR1]; + air[pvSR1] = air[pvAR1] - inputSampleR; - air[acc2SL2] = air[accSL3] - air[accSL2]; air[acc2SR2] = air[accSR3] - air[accSR2]; - air[acc2SL1] = air[accSL2] - air[accSL1]; air[acc2SR1] = air[accSR2] - air[accSR1]; + air[accSR3] = air[pvSR4] - air[pvSR3]; + air[accSR2] = air[pvSR3] - air[pvSR2]; + air[accSR1] = air[pvSR2] - air[pvSR1]; - inputSampleL = -(air[pvAL1] + air[pvSL3] + air[acc2SL2] - ((air[acc2SL2] + air[acc2SL1])*0.5)); - inputSampleR = -(air[pvAR1] + air[pvSR3] + air[acc2SR2] - ((air[acc2SR2] + air[acc2SR1])*0.5)); + air[acc2SR2] = air[accSR3] - air[accSR2]; + air[acc2SR1] = air[accSR2] - air[accSR1]; - air[pvAL4] = air[pvAL3]; air[pvAR4] = air[pvAR3]; - air[pvAL3] = air[pvAL2]; air[pvAR3] = air[pvAR2]; - air[pvAL2] = air[pvAL1]; air[pvAR2] = air[pvAR1]; - air[pvAL1] = drySampleL; air[pvAR1] = drySampleR; + air[outAR] = -(air[pvAR1] + air[pvSR3] + air[acc2SR2] - ((air[acc2SR2] + air[acc2SR1])*0.5)); - double gndL = (drySampleL - ((inputSampleL+drySampleL)*0.5)); - double gndR = (drySampleR - ((inputSampleR+drySampleR)*0.5)); - double temp = (gndL + air[gndavgL])*0.5; air[gndavgL] = gndL; gndL = temp; - temp = (gndR + air[gndavgR])*0.5; air[gndavgR] = gndR; gndR = temp; + air[gainAR] *= 0.5; + air[gainAR] += fabs(drySampleR-air[outAR])*0.5; + if (air[gainAR] > 0.3*sqrt(overallscale)) air[gainAR] = 0.3*sqrt(overallscale); + air[pvAR4] = air[pvAR3]; + air[pvAR3] = air[pvAR2]; + air[pvAR2] = air[pvAR1]; + air[pvAR1] = (air[gainAR] * air[outAR]) + drySampleR; - inputSampleL = ((drySampleL-gndL)*airGain)+(gndL*gndGain); - inputSampleR = ((drySampleR-gndR)*airGain)+(gndR*gndGain); + gnd = drySampleR - ((air[outAR]*0.5)+(drySampleR*(0.457-(0.017*overallscale)))); + temp = (gnd + air[gndavgR])*0.5; air[gndavgR] = gnd; gnd = temp; + + inputSampleR = ((drySampleR-gnd)*airGain)+(gnd*gndGain); //begin 32 bit stereo floating point dither int expon; frexpf((float)inputSampleL, &expon); @@ -93,7 +119,7 @@ void Air3::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa double airGain = A*2.0; if (airGain > 1.0) airGain = pow(airGain,3.0+sqrt(overallscale)); double gndGain = B*2.0; - + while (--sampleFrames >= 0) { double inputSampleL = *in1; @@ -103,33 +129,59 @@ void Air3::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sa double drySampleL = inputSampleL; double drySampleR = inputSampleR; - air[pvSL4] = air[pvAL4] - air[pvAL3]; air[pvSR4] = air[pvAR4] - air[pvAR3]; - air[pvSL3] = air[pvAL3] - air[pvAL2]; air[pvSR3] = air[pvAR3] - air[pvAR2]; - air[pvSL2] = air[pvAL2] - air[pvAL1]; air[pvSR2] = air[pvAR2] - air[pvAR1]; - air[pvSL1] = air[pvAL1] - inputSampleL; air[pvSR1] = air[pvAR1] - inputSampleR; + air[pvSL4] = air[pvAL4] - air[pvAL3]; + air[pvSL3] = air[pvAL3] - air[pvAL2]; + air[pvSL2] = air[pvAL2] - air[pvAL1]; + air[pvSL1] = air[pvAL1] - inputSampleL; + + air[accSL3] = air[pvSL4] - air[pvSL3]; + air[accSL2] = air[pvSL3] - air[pvSL2]; + air[accSL1] = air[pvSL2] - air[pvSL1]; + + air[acc2SL2] = air[accSL3] - air[accSL2]; + air[acc2SL1] = air[accSL2] - air[accSL1]; + + air[outAL] = -(air[pvAL1] + air[pvSL3] + air[acc2SL2] - ((air[acc2SL2] + air[acc2SL1])*0.5)); + + air[gainAL] *= 0.5; + air[gainAL] += fabs(drySampleL-air[outAL])*0.5; + if (air[gainAL] > 0.3*sqrt(overallscale)) air[gainAL] = 0.3*sqrt(overallscale); + air[pvAL4] = air[pvAL3]; + air[pvAL3] = air[pvAL2]; + air[pvAL2] = air[pvAL1]; + air[pvAL1] = (air[gainAL] * air[outAL]) + drySampleL; + + double gnd = drySampleL - ((air[outAL]*0.5)+(drySampleL*(0.457-(0.017*overallscale)))); + double temp = (gnd + air[gndavgL])*0.5; air[gndavgL] = gnd; gnd = temp; + + inputSampleL = ((drySampleL-gnd)*airGain)+(gnd*gndGain); + + air[pvSR4] = air[pvAR4] - air[pvAR3]; + air[pvSR3] = air[pvAR3] - air[pvAR2]; + air[pvSR2] = air[pvAR2] - air[pvAR1]; + air[pvSR1] = air[pvAR1] - inputSampleR; - air[accSL3] = air[pvSL4] - air[pvSL3]; air[accSR3] = air[pvSR4] - air[pvSR3]; - air[accSL2] = air[pvSL3] - air[pvSL2]; air[accSR2] = air[pvSR3] - air[pvSR2]; - air[accSL1] = air[pvSL2] - air[pvSL1]; air[accSR1] = air[pvSR2] - air[pvSR1]; + air[accSR3] = air[pvSR4] - air[pvSR3]; + air[accSR2] = air[pvSR3] - air[pvSR2]; + air[accSR1] = air[pvSR2] - air[pvSR1]; - air[acc2SL2] = air[accSL3] - air[accSL2]; air[acc2SR2] = air[accSR3] - air[accSR2]; - air[acc2SL1] = air[accSL2] - air[accSL1]; air[acc2SR1] = air[accSR2] - air[accSR1]; + air[acc2SR2] = air[accSR3] - air[accSR2]; + air[acc2SR1] = air[accSR2] - air[accSR1]; - inputSampleL = -(air[pvAL1] + air[pvSL3] + air[acc2SL2] - ((air[acc2SL2] + air[acc2SL1])*0.5)); - inputSampleR = -(air[pvAR1] + air[pvSR3] + air[acc2SR2] - ((air[acc2SR2] + air[acc2SR1])*0.5)); + air[outAR] = -(air[pvAR1] + air[pvSR3] + air[acc2SR2] - ((air[acc2SR2] + air[acc2SR1])*0.5)); - air[pvAL4] = air[pvAL3]; air[pvAR4] = air[pvAR3]; - air[pvAL3] = air[pvAL2]; air[pvAR3] = air[pvAR2]; - air[pvAL2] = air[pvAL1]; air[pvAR2] = air[pvAR1]; - air[pvAL1] = drySampleL; air[pvAR1] = drySampleR; + air[gainAR] *= 0.5; + air[gainAR] += fabs(drySampleR-air[outAR])*0.5; + if (air[gainAR] > 0.3*sqrt(overallscale)) air[gainAR] = 0.3*sqrt(overallscale); + air[pvAR4] = air[pvAR3]; + air[pvAR3] = air[pvAR2]; + air[pvAR2] = air[pvAR1]; + air[pvAR1] = (air[gainAR] * air[outAR]) + drySampleR; - double gndL = (drySampleL - ((inputSampleL+drySampleL)*0.5)); - double gndR = (drySampleR - ((inputSampleR+drySampleR)*0.5)); - double temp = (gndL + air[gndavgL])*0.5; air[gndavgL] = gndL; gndL = temp; - temp = (gndR + air[gndavgR])*0.5; air[gndavgR] = gndR; gndR = temp; + gnd = drySampleR - ((air[outAR]*0.5)+(drySampleR*(0.457-(0.017*overallscale)))); + temp = (gnd + air[gndavgR])*0.5; air[gndavgR] = gnd; gnd = temp; - inputSampleL = ((drySampleL-gndL)*airGain)+(gndL*gndGain); - inputSampleR = ((drySampleR-gndR)*airGain)+(gndR*gndGain); + inputSampleR = ((drySampleR-gnd)*airGain)+(gnd*gndGain); //begin 64 bit stereo floating point dither //int expon; frexp((double)inputSampleL, &expon); diff --git a/src/autogen_airwin/BiquadNonLin.cpp b/src/autogen_airwin/BiquadNonLin.cpp new file mode 100644 index 0000000..19902a5 --- /dev/null +++ b/src/autogen_airwin/BiquadNonLin.cpp @@ -0,0 +1,143 @@ +/* ======================================== + * BiquadNonLin - BiquadNonLin.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __BiquadNonLin_H +#include "BiquadNonLin.h" +#endif +namespace airwin2rack::BiquadNonLin { + +AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new BiquadNonLin(audioMaster);} + +BiquadNonLin::BiquadNonLin(audioMasterCallback audioMaster) : + AudioEffectX(audioMaster, kNumPrograms, kNumParameters) +{ + A = 0.0; + B = 0.5; + C = 0.7071; + D = 0.0; + E = 1.0; + + for (int x = 0; x < biq_total; x++) {biquad[x] = 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 +} + +BiquadNonLin::~BiquadNonLin() {} +VstInt32 BiquadNonLin::getVendorVersion () {return 1000;} +void BiquadNonLin::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);} +void BiquadNonLin::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 BiquadNonLin::setParameter(VstInt32 index, float value) { + switch (index) { + case kParamA: A = value; break; + case kParamB: B = value; break; + case kParamC: C = value; break; + case kParamD: D = value; break; + case kParamE: E = value; break; + default: break; // unknown parameter, shouldn't happen! + } +} + +float BiquadNonLin::getParameter(VstInt32 index) { + switch (index) { + case kParamA: return A; break; + case kParamB: return B; break; + case kParamC: return C; break; + case kParamD: return D; break; + case kParamE: return E; 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 BiquadNonLin::getParameterName(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "Type", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "Freq", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "Q", kVstMaxParamStrLen); break; + case kParamD: vst_strncpy (text, "NonLin", kVstMaxParamStrLen); break; + case kParamE: vst_strncpy (text, "Inv/Wet", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this is our labels for displaying in the VST host +} + +void BiquadNonLin::getParameterDisplay(VstInt32 index, char *text) { + switch (index) { + case kParamA: float2string (A, text, kVstMaxParamStrLen); break; + case kParamB: float2string ((B*B*B*0.9999)+0.0001, text, kVstMaxParamStrLen); break; + case kParamC: float2string ((C*C*C*29.99)+0.01, text, kVstMaxParamStrLen); break; + case kParamD: float2string (D, text, kVstMaxParamStrLen); break; + case kParamE: float2string ((E*2.0)-1.0, text, kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this displays the values and handles 'popups' where it's discrete choices +} + +void BiquadNonLin::getParameterLabel(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamE: vst_strncpy (text, "", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } +} + +VstInt32 BiquadNonLin::canDo(char *text) +{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know + +bool BiquadNonLin::getEffectName(char* name) { + vst_strncpy(name, "BiquadNonLin", kVstMaxProductStrLen); return true; +} + +VstPlugCategory BiquadNonLin::getPlugCategory() {return kPlugCategEffect;} + +bool BiquadNonLin::getProductString(char* text) { + vst_strncpy (text, "airwindows BiquadNonLin", kVstMaxProductStrLen); return true; +} + +bool BiquadNonLin::getVendorString(char* text) { + vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true; +} +bool BiquadNonLin::parameterTextToValue(VstInt32 index, const char *text, float &value) { + switch(index) { + case kParamA: { auto b = string2float(text, value); return b; break; } + case kParamD: { auto b = string2float(text, value); return b; break; } + case kParamE: { auto b = string2float(text, value); if (b) { value = (value + 1.0) / (2.0); } return b; break; } + + } + return false; +} +bool BiquadNonLin::canConvertParameterTextToValue(VstInt32 index) { + switch(index) { + case kParamA: return true; + case kParamD: return true; + case kParamE: return true; + + } + return false; +} +} // end namespace diff --git a/src/autogen_airwin/BiquadNonLin.h b/src/autogen_airwin/BiquadNonLin.h new file mode 100644 index 0000000..8de2391 --- /dev/null +++ b/src/autogen_airwin/BiquadNonLin.h @@ -0,0 +1,100 @@ +/* ======================================== + * BiquadNonLin - BiquadNonLin.h + * Created 8/12/11 by SPIAdmin + * Copyright (c) Airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __BiquadNonLin_BiquadNonLin_H +#define __BiquadNonLin_BiquadNonLin_H + +#ifndef __audioeffect__ +#include "../airwin2rackbase.h" +#endif + +#include +#include +#include + +namespace airwin2rack::BiquadNonLin { +enum { + kParamA = 0, + kParamB = 1, + kParamC = 2, + kParamD = 3, + kParamE = 4, + kNumParameters = 5 +}; // + +const int kNumPrograms = 0; +const int kNumInputs = 2; +const int kNumOutputs = 2; +const unsigned long kUniqueId = 'binl'; //Change this to what the AU identity is! + +class BiquadNonLin : + public AudioEffectX +{ +public: + BiquadNonLin(audioMasterCallback audioMaster); + ~BiquadNonLin(); + 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 + + enum { + biq_freq, + biq_reso, + biq_a0, + biq_a1, + biq_a2, + biq_b1, + biq_b2, + biq_aA0, + biq_aA1, + biq_aA2, + biq_bA1, + biq_bA2, + biq_aB0, + biq_aB1, + biq_aB2, + biq_bB1, + biq_bB2, + biq_sL1, + biq_sL2, + biq_sR1, + biq_sR2, + biq_total + }; + double biquad[biq_total]; + + float A; + float B; + float C; + float D; + float E; //parameters. Always 0-1, and we scale/alter them elsewhere. + +}; + +#endif +} // end namespace diff --git a/src/autogen_airwin/BiquadNonLinProc.cpp b/src/autogen_airwin/BiquadNonLinProc.cpp new file mode 100644 index 0000000..4e2252e --- /dev/null +++ b/src/autogen_airwin/BiquadNonLinProc.cpp @@ -0,0 +1,300 @@ +/* ======================================== + * BiquadNonLin - BiquadNonLin.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __BiquadNonLin_H +#include "BiquadNonLin.h" +#endif +namespace airwin2rack::BiquadNonLin { + +void BiquadNonLin::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) +{ + float* in1 = inputs[0]; + float* in2 = inputs[1]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + VstInt32 inFramesToProcess = sampleFrames; //vst doesn't give us this as a separate variable so we'll make it + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + int type = 0; + if (A > 0.5) type = 1; + + biquad[biq_freq] = ((B*B*B*0.9999)+0.0001)*0.499; + if (biquad[biq_freq] < 0.0001) biquad[biq_freq] = 0.0001; + + biquad[biq_reso] = (C*C*C*29.99)+0.01; + if (biquad[biq_reso] < 0.0001) biquad[biq_reso] = 0.0001; + + double nonLin = pow(D,2); + //if you're using a 0.5 for a lowpass fixed frequency, value is 0.25 + + double wet = (E*2.0)-1.0; + + //biquad contains these values: + //[0] is frequency: 0.000001 to 0.499999 is near-zero to near-Nyquist + //[1] is resonance, 0.7071 is Butterworth. Also can't be zero + //[2] is a0 but you need distinct ones for additional biquad instances so it's here + //[3] is a1 but you need distinct ones for additional biquad instances so it's here + //[4] is a2 but you need distinct ones for additional biquad instances so it's here + //[5] is b1 but you need distinct ones for additional biquad instances so it's here + //[6] is b2 but you need distinct ones for additional biquad instances so it's here + //[7] is LEFT stored delayed sample (freq and res are stored so you can move them sample by sample) + //[8] is LEFT stored delayed sample (you have to include the coefficient making code if you do that) + //[9] is RIGHT stored delayed sample (freq and res are stored so you can move them sample by sample) + //[10] is RIGHT stored delayed sample (you have to include the coefficient making code if you do that) + + //to build a dedicated filter, rename 'biquad' to whatever the new filter is, then + //put this code either within the sample buffer (for smoothly modulating freq or res) + //or in this 'read the controls' area (for letting you change freq and res with controls) + //or in 'reset' if the freq and res are absolutely fixed (use GetSampleRate to define freq) + + biquad[biq_aA0] = biquad[biq_aB0]; + biquad[biq_aA1] = biquad[biq_aB1]; + biquad[biq_aA2] = biquad[biq_aB2]; + biquad[biq_bA1] = biquad[biq_bB1]; + biquad[biq_bA2] = biquad[biq_bB2]; + //previous run through the buffer is still in the filter, so we move it + //to the A section and now it's the new starting point. + + if (type == 0) { //lowpass + double K = tan(M_PI * biquad[biq_freq]); + double norm = 1.0 / (1.0 + K / biquad[biq_reso] + K * K); + biquad[biq_aB0] = K * K * norm; + biquad[biq_aB1] = 2.0 * biquad[biq_aB0]; + biquad[biq_aB2] = biquad[biq_aB0]; + biquad[biq_bB1] = 2.0 * (K * K - 1.0) * norm; + biquad[biq_bB2] = (1.0 - K / biquad[biq_reso] + K * K) * norm; + } + + if (type == 1) { //bandpass + double K = tan(M_PI * biquad[biq_freq]); + double norm = 1.0 / (1.0 + K / biquad[biq_reso] + K * K); + biquad[biq_aB0] = K / biquad[biq_reso] * norm; + biquad[biq_aB1] = 0.0; //bandpass can simplify the biquad kernel: leave out this multiply + biquad[biq_aB2] = -biquad[biq_aB0]; + biquad[biq_bB1] = 2.0 * (K * K - 1.0) * norm; + biquad[biq_bB2] = (1.0 - K / biquad[biq_reso] + K * K) * norm; + } + + if (biquad[biq_aA0] == 0.0) { // if we have just started, start directly with raw info + biquad[biq_aA0] = biquad[biq_aB0]; + biquad[biq_aA1] = biquad[biq_aB1]; + biquad[biq_aA2] = biquad[biq_aB2]; + biquad[biq_bA1] = biquad[biq_bB1]; + biquad[biq_bA2] = biquad[biq_bB2]; + } + + 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 drySampleL = inputSampleL; + double drySampleR = inputSampleR; + + double buf = (double)sampleFrames/inFramesToProcess; + biquad[biq_a0] = (biquad[biq_aA0]*buf)+(biquad[biq_aB0]*(1.0-buf)); + biquad[biq_a1] = (biquad[biq_aA1]*buf)+(biquad[biq_aB1]*(1.0-buf)); + biquad[biq_a2] = (biquad[biq_aA2]*buf)+(biquad[biq_aB2]*(1.0-buf)); + biquad[biq_b1] = (biquad[biq_bA1]*buf)+(biquad[biq_bB1]*(1.0-buf)); + biquad[biq_b2] = (biquad[biq_bA2]*buf)+(biquad[biq_bB2]*(1.0-buf)); + + double dia0 = fabs(biquad[biq_a0]*(1.0+(inputSampleL*nonLin))); if (dia0 > 1.0) dia0 = 1.0; + double dia2 = dia0; //if lowpass, use this in both places + if (type == 1) dia2 = -dia2; + //if bandpass, you must reverse polarity + double tempSample = (inputSampleL * dia0) + biquad[biq_sL1]; + biquad[biq_sL1] = (inputSampleL * biquad[biq_a1]) - (tempSample * biquad[biq_b1]) + biquad[biq_sL2]; + biquad[biq_sL2] = (inputSampleL * dia2) - (tempSample * biquad[biq_b2]); + inputSampleL = tempSample; + inputSampleL *= wet; + if (wet > 0.0) { + inputSampleL += (drySampleL*(1.0-wet)); + } else { + inputSampleL += drySampleL; + } //inv/dry/wet lets us turn LP into HP and band into notch + + dia0 = fabs(biquad[biq_a0]*(1.0+(inputSampleR*nonLin))); if (dia0 > 1.0) dia0 = 1.0; + dia2 = dia0; //if lowpass, use this in both places + if (type == 1) dia2 = -dia2; + //if bandpass, you must reverse polarity + tempSample = (inputSampleR * dia0) + biquad[biq_sR1]; + biquad[biq_sR1] = (inputSampleR * biquad[biq_a1]) - (tempSample * biquad[biq_b1]) + biquad[biq_sR2]; + biquad[biq_sR2] = (inputSampleR * dia2) - (tempSample * biquad[biq_b2]); + inputSampleR = tempSample; + inputSampleR *= wet; + if (wet > 0.0) { + inputSampleR += (drySampleR*(1.0-wet)); + } else { + inputSampleR += drySampleR; + } //inv/dry/wet lets us turn RP into HP and band into notch + + //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 BiquadNonLin::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) +{ + double* in1 = inputs[0]; + double* in2 = inputs[1]; + double* out1 = outputs[0]; + double* out2 = outputs[1]; + + VstInt32 inFramesToProcess = sampleFrames; //vst doesn't give us this as a separate variable so we'll make it + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + int type = 0; + if (A > 0.5) type = 1; + + biquad[biq_freq] = ((B*B*B*0.9999)+0.0001)*0.499; + if (biquad[biq_freq] < 0.0001) biquad[biq_freq] = 0.0001; + + biquad[biq_reso] = (C*C*C*29.99)+0.01; + if (biquad[biq_reso] < 0.0001) biquad[biq_reso] = 0.0001; + + double nonLin = pow(D,2); + //if you're using a 0.5 for a lowpass fixed frequency, value is 0.25 + + double wet = (E*2.0)-1.0; + + //biquad contains these values: + //[0] is frequency: 0.000001 to 0.499999 is near-zero to near-Nyquist + //[1] is resonance, 0.7071 is Butterworth. Also can't be zero + //[2] is a0 but you need distinct ones for additional biquad instances so it's here + //[3] is a1 but you need distinct ones for additional biquad instances so it's here + //[4] is a2 but you need distinct ones for additional biquad instances so it's here + //[5] is b1 but you need distinct ones for additional biquad instances so it's here + //[6] is b2 but you need distinct ones for additional biquad instances so it's here + //[7] is LEFT stored delayed sample (freq and res are stored so you can move them sample by sample) + //[8] is LEFT stored delayed sample (you have to include the coefficient making code if you do that) + //[9] is RIGHT stored delayed sample (freq and res are stored so you can move them sample by sample) + //[10] is RIGHT stored delayed sample (you have to include the coefficient making code if you do that) + + //to build a dedicated filter, rename 'biquad' to whatever the new filter is, then + //put this code either within the sample buffer (for smoothly modulating freq or res) + //or in this 'read the controls' area (for letting you change freq and res with controls) + //or in 'reset' if the freq and res are absolutely fixed (use GetSampleRate to define freq) + + biquad[biq_aA0] = biquad[biq_aB0]; + biquad[biq_aA1] = biquad[biq_aB1]; + biquad[biq_aA2] = biquad[biq_aB2]; + biquad[biq_bA1] = biquad[biq_bB1]; + biquad[biq_bA2] = biquad[biq_bB2]; + //previous run through the buffer is still in the filter, so we move it + //to the A section and now it's the new starting point. + + if (type == 0) { //lowpass + double K = tan(M_PI * biquad[biq_freq]); + double norm = 1.0 / (1.0 + K / biquad[biq_reso] + K * K); + biquad[biq_aB0] = K * K * norm; + biquad[biq_aB1] = 2.0 * biquad[biq_aB0]; + biquad[biq_aB2] = biquad[biq_aB0]; + biquad[biq_bB1] = 2.0 * (K * K - 1.0) * norm; + biquad[biq_bB2] = (1.0 - K / biquad[biq_reso] + K * K) * norm; + } + + if (type == 1) { //bandpass + double K = tan(M_PI * biquad[biq_freq]); + double norm = 1.0 / (1.0 + K / biquad[biq_reso] + K * K); + biquad[biq_aB0] = K / biquad[biq_reso] * norm; + biquad[biq_aB1] = 0.0; //bandpass can simplify the biquad kernel: leave out this multiply + biquad[biq_aB2] = -biquad[biq_aB0]; + biquad[biq_bB1] = 2.0 * (K * K - 1.0) * norm; + biquad[biq_bB2] = (1.0 - K / biquad[biq_reso] + K * K) * norm; + } + + if (biquad[biq_aA0] == 0.0) { // if we have just started, start directly with raw info + biquad[biq_aA0] = biquad[biq_aB0]; + biquad[biq_aA1] = biquad[biq_aB1]; + biquad[biq_aA2] = biquad[biq_aB2]; + biquad[biq_bA1] = biquad[biq_bB1]; + biquad[biq_bA2] = biquad[biq_bB2]; + } + + 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 drySampleL = inputSampleL; + double drySampleR = inputSampleR; + + double buf = (double)sampleFrames/inFramesToProcess; + biquad[biq_a0] = (biquad[biq_aA0]*buf)+(biquad[biq_aB0]*(1.0-buf)); + biquad[biq_a1] = (biquad[biq_aA1]*buf)+(biquad[biq_aB1]*(1.0-buf)); + biquad[biq_a2] = (biquad[biq_aA2]*buf)+(biquad[biq_aB2]*(1.0-buf)); + biquad[biq_b1] = (biquad[biq_bA1]*buf)+(biquad[biq_bB1]*(1.0-buf)); + biquad[biq_b2] = (biquad[biq_bA2]*buf)+(biquad[biq_bB2]*(1.0-buf)); + + double dia0 = fabs(biquad[biq_a0]*(1.0+(inputSampleL*nonLin))); if (dia0 > 1.0) dia0 = 1.0; + double dia2 = dia0; //if lowpass, use this in both places + if (type == 1) dia2 = -dia2; + //if bandpass, you must reverse polarity + double tempSample = (inputSampleL * dia0) + biquad[biq_sL1]; + biquad[biq_sL1] = (inputSampleL * biquad[biq_a1]) - (tempSample * biquad[biq_b1]) + biquad[biq_sL2]; + biquad[biq_sL2] = (inputSampleL * dia2) - (tempSample * biquad[biq_b2]); + inputSampleL = tempSample; + inputSampleL *= wet; + if (wet > 0.0) { + inputSampleL += (drySampleL*(1.0-wet)); + } else { + inputSampleL += drySampleL; + } //inv/dry/wet lets us turn LP into HP and band into notch + + dia0 = fabs(biquad[biq_a0]*(1.0+(inputSampleR*nonLin))); if (dia0 > 1.0) dia0 = 1.0; + dia2 = dia0; //if lowpass, use this in both places + if (type == 1) dia2 = -dia2; + //if bandpass, you must reverse polarity + tempSample = (inputSampleR * dia0) + biquad[biq_sR1]; + biquad[biq_sR1] = (inputSampleR * biquad[biq_a1]) - (tempSample * biquad[biq_b1]) + biquad[biq_sR2]; + biquad[biq_sR2] = (inputSampleR * dia2) - (tempSample * biquad[biq_b2]); + inputSampleR = tempSample; + inputSampleR *= wet; + if (wet > 0.0) { + inputSampleR += (drySampleR*(1.0-wet)); + } else { + inputSampleR += drySampleR; + } //inv/dry/wet lets us turn RP into HP and band into notch + + //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 3f4a22b..c7d07ca 100644 --- a/src/autogen_airwin/CMakeLists.txt +++ b/src/autogen_airwin/CMakeLists.txt @@ -53,6 +53,8 @@ set(AIRWIN_SOURCES src/autogen_airwin/Biquad2Proc.cpp src/autogen_airwin/BiquadDouble.cpp src/autogen_airwin/BiquadDoubleProc.cpp + src/autogen_airwin/BiquadNonLin.cpp + src/autogen_airwin/BiquadNonLinProc.cpp src/autogen_airwin/BiquadOneHalf.cpp src/autogen_airwin/BiquadOneHalfProc.cpp src/autogen_airwin/BiquadPlus.cpp @@ -485,6 +487,8 @@ set(AIRWIN_SOURCES src/autogen_airwin/PeaksOnlyProc.cpp src/autogen_airwin/Pear.cpp src/autogen_airwin/PearProc.cpp + src/autogen_airwin/Pear2.cpp + src/autogen_airwin/Pear2Proc.cpp src/autogen_airwin/PhaseNudge.cpp src/autogen_airwin/PhaseNudgeProc.cpp src/autogen_airwin/PitchDelay.cpp @@ -671,6 +675,8 @@ set(AIRWIN_SOURCES src/autogen_airwin/TremoSquareProc.cpp src/autogen_airwin/Tremolo.cpp src/autogen_airwin/TremoloProc.cpp + src/autogen_airwin/Trianglizer.cpp + src/autogen_airwin/TrianglizerProc.cpp src/autogen_airwin/TripleSpread.cpp src/autogen_airwin/TripleSpreadProc.cpp src/autogen_airwin/Tube.cpp diff --git a/src/autogen_airwin/Discontinuity.cpp b/src/autogen_airwin/Discontinuity.cpp index cd3f531..5c587ea 100644 --- a/src/autogen_airwin/Discontinuity.cpp +++ b/src/autogen_airwin/Discontinuity.cpp @@ -14,21 +14,26 @@ Discontinuity::Discontinuity(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, kNumPrograms, kNumParameters) { A = 0.5; - - for(int count = 0; count < predelay+2; count++) { + for(int count = 0; count < dscBuf+2; count++) { dBaL[count] = 0.0; - dBaR[count] = 0.0; dBbL[count] = 0.0; - dBbR[count] = 0.0; dBcL[count] = 0.0; + dBaR[count] = 0.0; + dBbR[count] = 0.0; dBcR[count] = 0.0; - dBdL[count] = 0.0; - dBdR[count] = 0.0; } - dBaX = 1; - dBbX = 1; - dBcX = 1; - dBdX = 1; + dBaPosL = 0.0; + dBbPosL = 0.0; + dBcPosL = 0.0; + dBaPosR = 0.0; + dBbPosR = 0.0; + dBcPosR = 0.0; + dBaXL = 1; + dBbXL = 1; + dBcXL = 1; + dBaXR = 1; + dBbXR = 1; + dBcXR = 1; fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX; fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX; @@ -83,7 +88,7 @@ void Discontinuity::getParameterName(VstInt32 index, char *text) { void Discontinuity::getParameterDisplay(VstInt32 index, char *text) { switch (index) { - case kParamA: float2string (80.0+(A*40.0), text, kVstMaxParamStrLen); break; + case kParamA: float2string ((A*70.0)+70.0, text, kVstMaxParamStrLen); break; default: break; // unknown parameter, shouldn't happen! } //this displays the values and handles 'popups' where it's discrete choices } @@ -113,12 +118,14 @@ bool Discontinuity::getVendorString(char* text) { } bool Discontinuity::parameterTextToValue(VstInt32 index, const char *text, float &value) { switch(index) { + case kParamA: { auto b = string2float(text, value); if (b) { value = (value - 70.0) / (70.0); } return b; break; } } return false; } bool Discontinuity::canConvertParameterTextToValue(VstInt32 index) { switch(index) { + case kParamA: return true; } return false; diff --git a/src/autogen_airwin/Discontinuity.h b/src/autogen_airwin/Discontinuity.h index 33085b6..03fcf02 100644 --- a/src/autogen_airwin/Discontinuity.h +++ b/src/autogen_airwin/Discontinuity.h @@ -21,12 +21,11 @@ enum { kNumParameters = 1 }; // -const int predelay = 420; - const int kNumPrograms = 0; const int kNumInputs = 2; const int kNumOutputs = 2; const unsigned long kUniqueId = 'disc'; //Change this to what the AU identity is! +const int dscBuf = 90; class Discontinuity : public AudioEffectX @@ -60,22 +59,30 @@ class Discontinuity : uint32_t fpdR; //default stuff - double dBaL[predelay+5]; - double dBaR[predelay+5]; - int dBaX; + double dBaL[dscBuf+5]; + double dBaPosL; + int dBaXL; - double dBbL[predelay+5]; - double dBbR[predelay+5]; - int dBbX; + double dBbL[dscBuf+5]; + double dBbPosL; + int dBbXL; - double dBcL[predelay+5]; - double dBcR[predelay+5]; - int dBcX; + double dBcL[dscBuf+5]; + double dBcPosL; + int dBcXL; + + double dBaR[dscBuf+5]; + double dBaPosR; + int dBaXR; - double dBdL[predelay+5]; - double dBdR[predelay+5]; - int dBdX; + double dBbR[dscBuf+5]; + double dBbPosR; + int dBbXR; + double dBcR[dscBuf+5]; + double dBcPosR; + int dBcXR; + float A; }; diff --git a/src/autogen_airwin/DiscontinuityProc.cpp b/src/autogen_airwin/DiscontinuityProc.cpp index f15ed2a..a9e99f2 100644 --- a/src/autogen_airwin/DiscontinuityProc.cpp +++ b/src/autogen_airwin/DiscontinuityProc.cpp @@ -19,14 +19,8 @@ void Discontinuity::processReplacing(float **inputs, float **outputs, VstInt32 s overallscale /= 44100.0; overallscale *= getSampleRate(); - double topdB = 80.0+(A*40.0); - - topdB = 0.000000064 * pow(10.0,topdB/20.0) * overallscale; - double dBpos; - //dBpos = pow((inputSampleL-1.0)*0.5,2) is the original formulation - //dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)) from 'Herbie' - double dBi; - int dBdly; + double refdB = (A*70.0)+70.0; + double topdB = 0.000000075 * pow(10.0,refdB/20.0) * overallscale; while (--sampleFrames >= 0) { @@ -35,54 +29,57 @@ void Discontinuity::processReplacing(float **inputs, float **outputs, VstInt32 s if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17; if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17; - inputSampleL *= topdB; inputSampleR *= topdB; - if (inputSampleL < -0.999) inputSampleL = -0.999; if (inputSampleL > 0.999) inputSampleL = 0.999; - if (inputSampleR < -0.999) inputSampleR = -0.999; if (inputSampleR > 0.999) inputSampleR = 0.999; + inputSampleL *= topdB; + if (inputSampleL < -0.222) inputSampleL = -0.222; if (inputSampleL > 0.222) inputSampleL = 0.222; + //Air Discontinuity A begin + dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5); + int dBdly = floor(dBaPosL*dscBuf); + double dBi = (dBaPosL*dscBuf)-dBdly; + inputSampleL = dBaL[dBaXL-dBdly +((dBaXL-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleL += dBaL[dBaXL-dBdly +((dBaXL-dBdly < 0)?dscBuf:0)]*dBi; + dBaXL++; if (dBaXL < 0 || dBaXL >= dscBuf) dBaXL = 0; + //Air Discontinuity A end + //Air Discontinuity B begin + dBbL[dBbXL] = inputSampleL; dBbPosL *= 0.5; dBbPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5); + dBdly = floor(dBbPosL*dscBuf); dBi = (dBbPosL*dscBuf)-dBdly; + inputSampleL = dBbL[dBbXL-dBdly +((dBbXL-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleL += dBbL[dBbXL-dBdly +((dBbXL-dBdly < 0)?dscBuf:0)]*dBi; + dBbXL++; if (dBbXL < 0 || dBbXL >= dscBuf) dBbXL = 0; + //Air Discontinuity B end + //Air Discontinuity C begin + dBcL[dBcXL] = inputSampleL; dBcPosL *= 0.5; dBcPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5); + dBdly = floor(dBcPosL*dscBuf); dBi = (dBcPosL*dscBuf)-dBdly; + inputSampleL = dBcL[dBcXL-dBdly +((dBcXL-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleL += dBcL[dBcXL-dBdly +((dBcXL-dBdly < 0)?dscBuf:0)]*dBi; + dBcXL++; if (dBcXL < 0 || dBcXL >= dscBuf) dBcXL = 0; + //Air Discontinuity C end + inputSampleL /= topdB; + + inputSampleR *= topdB; + if (inputSampleR < -0.222) inputSampleR = -0.222; if (inputSampleR > 0.222) inputSampleR = 0.222; //Air Discontinuity A begin - dBaL[dBaX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBaL[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBaL[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*dBi; - dBaR[dBaX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBaR[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBaR[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*dBi; - dBaX++; if (dBaX < 0 || dBaX > predelay) dBaX = 0; + dBaR[dBaXR] = inputSampleR; dBaPosR *= 0.5; dBaPosR += fabs((inputSampleR*((inputSampleR*0.25)-0.5))*0.5); + dBdly = floor(dBaPosR*dscBuf); + dBi = (dBaPosR*dscBuf)-dBdly; + inputSampleR = dBaR[dBaXR-dBdly +((dBaXR-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleR += dBaR[dBaXR-dBdly +((dBaXR-dBdly < 0)?dscBuf:0)]*dBi; + dBaXR++; if (dBaXR < 0 || dBaXR >= dscBuf) dBaXR = 0; //Air Discontinuity A end //Air Discontinuity B begin - dBbL[dBbX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBbL[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBbL[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*dBi; - dBbR[dBbX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBbR[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBbR[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*dBi; - dBbX++; if (dBbX < 0 || dBbX > predelay) dBbX = 0; + dBbR[dBbXR] = inputSampleR; dBbPosR *= 0.5; dBbPosR += fabs((inputSampleR*((inputSampleR*0.25)-0.5))*0.5); + dBdly = floor(dBbPosR*dscBuf); dBi = (dBbPosR*dscBuf)-dBdly; + inputSampleR = dBbR[dBbXR-dBdly +((dBbXR-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleR += dBbR[dBbXR-dBdly +((dBbXR-dBdly < 0)?dscBuf:0)]*dBi; + dBbXR++; if (dBbXR < 0 || dBbXR >= dscBuf) dBbXR = 0; //Air Discontinuity B end //Air Discontinuity C begin - dBcL[dBcX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBcL[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBcL[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*dBi; - dBcR[dBcX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBcR[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBcR[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*dBi; - dBcX++; if (dBcX < 0 || dBcX > predelay) dBcX = 0; + dBcR[dBcXR] = inputSampleR; dBcPosR *= 0.5; dBcPosR += fabs((inputSampleR*((inputSampleR*0.25)-0.5))*0.5); + dBdly = floor(dBcPosR*dscBuf); dBi = (dBcPosR*dscBuf)-dBdly; + inputSampleR = dBcR[dBcXR-dBdly +((dBcXR-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleR += dBcR[dBcXR-dBdly +((dBcXR-dBdly < 0)?dscBuf:0)]*dBi; + dBcXR++; if (dBcXR < 0 || dBcXR >= dscBuf) dBcXR = 0; //Air Discontinuity C end - //Air Discontinuity D begin - dBdL[dBdX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBdL[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBdL[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*dBi; - dBdR[dBdX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBdR[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBdR[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*dBi; - dBdX++; if (dBdX < 0 || dBdX > predelay) dBdX = 0; - //Air Discontinuity D end - inputSampleL /= topdB; inputSampleR /= topdB; + inputSampleR /= topdB; //begin 32 bit stereo floating point dither int expon; frexpf((float)inputSampleL, &expon); @@ -114,14 +111,8 @@ void Discontinuity::processDoubleReplacing(double **inputs, double **outputs, Vs overallscale /= 44100.0; overallscale *= getSampleRate(); - double topdB = 80.0+(A*40.0); - - topdB = 0.000000064 * pow(10.0,topdB/20.0) * overallscale; - double dBpos; - //dBpos = pow((inputSampleL-1.0)*0.5,2) is the original formulation - //dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)) from 'Herbie' - double dBi; - int dBdly; + double refdB = (A*70.0)+70.0; + double topdB = 0.000000075 * pow(10.0,refdB/20.0) * overallscale; while (--sampleFrames >= 0) { @@ -130,54 +121,57 @@ void Discontinuity::processDoubleReplacing(double **inputs, double **outputs, Vs if (fabs(inputSampleL)<1.18e-23) inputSampleL = fpdL * 1.18e-17; if (fabs(inputSampleR)<1.18e-23) inputSampleR = fpdR * 1.18e-17; - inputSampleL *= topdB; inputSampleR *= topdB; - if (inputSampleL < -0.999) inputSampleL = -0.999; if (inputSampleL > 0.999) inputSampleL = 0.999; - if (inputSampleR < -0.999) inputSampleR = -0.999; if (inputSampleR > 0.999) inputSampleR = 0.999; + inputSampleL *= topdB; + if (inputSampleL < -0.222) inputSampleL = -0.222; if (inputSampleL > 0.222) inputSampleL = 0.222; + //Air Discontinuity A begin + dBaL[dBaXL] = inputSampleL; dBaPosL *= 0.5; dBaPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5); + int dBdly = floor(dBaPosL*dscBuf); + double dBi = (dBaPosL*dscBuf)-dBdly; + inputSampleL = dBaL[dBaXL-dBdly +((dBaXL-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleL += dBaL[dBaXL-dBdly +((dBaXL-dBdly < 0)?dscBuf:0)]*dBi; + dBaXL++; if (dBaXL < 0 || dBaXL >= dscBuf) dBaXL = 0; + //Air Discontinuity A end + //Air Discontinuity B begin + dBbL[dBbXL] = inputSampleL; dBbPosL *= 0.5; dBbPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5); + dBdly = floor(dBbPosL*dscBuf); dBi = (dBbPosL*dscBuf)-dBdly; + inputSampleL = dBbL[dBbXL-dBdly +((dBbXL-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleL += dBbL[dBbXL-dBdly +((dBbXL-dBdly < 0)?dscBuf:0)]*dBi; + dBbXL++; if (dBbXL < 0 || dBbXL >= dscBuf) dBbXL = 0; + //Air Discontinuity B end + //Air Discontinuity C begin + dBcL[dBcXL] = inputSampleL; dBcPosL *= 0.5; dBcPosL += fabs((inputSampleL*((inputSampleL*0.25)-0.5))*0.5); + dBdly = floor(dBcPosL*dscBuf); dBi = (dBcPosL*dscBuf)-dBdly; + inputSampleL = dBcL[dBcXL-dBdly +((dBcXL-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleL += dBcL[dBcXL-dBdly +((dBcXL-dBdly < 0)?dscBuf:0)]*dBi; + dBcXL++; if (dBcXL < 0 || dBcXL >= dscBuf) dBcXL = 0; + //Air Discontinuity C end + inputSampleL /= topdB; + + inputSampleR *= topdB; + if (inputSampleR < -0.222) inputSampleR = -0.222; if (inputSampleR > 0.222) inputSampleR = 0.222; //Air Discontinuity A begin - dBaL[dBaX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBaL[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBaL[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*dBi; - dBaR[dBaX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBaR[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBaR[dBaX-dBdly +((dBaX-dBdly < 0)?predelay:0)]*dBi; - dBaX++; if (dBaX < 0 || dBaX > predelay) dBaX = 0; + dBaR[dBaXR] = inputSampleR; dBaPosR *= 0.5; dBaPosR += fabs((inputSampleR*((inputSampleR*0.25)-0.5))*0.5); + dBdly = floor(dBaPosR*dscBuf); + dBi = (dBaPosR*dscBuf)-dBdly; + inputSampleR = dBaR[dBaXR-dBdly +((dBaXR-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleR += dBaR[dBaXR-dBdly +((dBaXR-dBdly < 0)?dscBuf:0)]*dBi; + dBaXR++; if (dBaXR < 0 || dBaXR >= dscBuf) dBaXR = 0; //Air Discontinuity A end //Air Discontinuity B begin - dBbL[dBbX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBbL[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBbL[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*dBi; - dBbR[dBbX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBbR[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBbR[dBbX-dBdly +((dBbX-dBdly < 0)?predelay:0)]*dBi; - dBbX++; if (dBbX < 0 || dBbX > predelay) dBbX = 0; + dBbR[dBbXR] = inputSampleR; dBbPosR *= 0.5; dBbPosR += fabs((inputSampleR*((inputSampleR*0.25)-0.5))*0.5); + dBdly = floor(dBbPosR*dscBuf); dBi = (dBbPosR*dscBuf)-dBdly; + inputSampleR = dBbR[dBbXR-dBdly +((dBbXR-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleR += dBbR[dBbXR-dBdly +((dBbXR-dBdly < 0)?dscBuf:0)]*dBi; + dBbXR++; if (dBbXR < 0 || dBbXR >= dscBuf) dBbXR = 0; //Air Discontinuity B end //Air Discontinuity C begin - dBcL[dBcX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBcL[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBcL[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*dBi; - dBcR[dBcX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBcR[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBcR[dBcX-dBdly +((dBcX-dBdly < 0)?predelay:0)]*dBi; - dBcX++; if (dBcX < 0 || dBcX > predelay) dBcX = 0; + dBcR[dBcXR] = inputSampleR; dBcPosR *= 0.5; dBcPosR += fabs((inputSampleR*((inputSampleR*0.25)-0.5))*0.5); + dBdly = floor(dBcPosR*dscBuf); dBi = (dBcPosR*dscBuf)-dBdly; + inputSampleR = dBcR[dBcXR-dBdly +((dBcXR-dBdly < 0)?dscBuf:0)]*(1.0-dBi); + dBdly++; inputSampleR += dBcR[dBcXR-dBdly +((dBcXR-dBdly < 0)?dscBuf:0)]*dBi; + dBcXR++; if (dBcXR < 0 || dBcXR >= dscBuf) dBcXR = 0; //Air Discontinuity C end - //Air Discontinuity D begin - dBdL[dBdX] = inputSampleL; dBpos = 0.25+(inputSampleL*((inputSampleL*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleL = dBdL[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleL += dBdL[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*dBi; - dBdR[dBdX] = inputSampleR; dBpos = 0.25+(inputSampleR*((inputSampleR*0.25)-0.5)); - if (dBpos>1.0) dBpos=1.0; dBdly = floor(dBpos*predelay); dBi = (dBpos*predelay)-dBdly; - inputSampleR = dBdR[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*(1.0-dBi); - dBdly++; inputSampleR += dBdR[dBdX-dBdly +((dBdX-dBdly < 0)?predelay:0)]*dBi; - dBdX++; if (dBdX < 0 || dBdX > predelay) dBdX = 0; - //Air Discontinuity D end - inputSampleL /= topdB; inputSampleR /= topdB; + inputSampleR /= topdB; //begin 64 bit stereo floating point dither //int expon; frexp((double)inputSampleL, &expon); diff --git a/src/autogen_airwin/Kalman.cpp b/src/autogen_airwin/Kalman.cpp index 4ae5573..e51ca65 100644 --- a/src/autogen_airwin/Kalman.cpp +++ b/src/autogen_airwin/Kalman.cpp @@ -14,11 +14,10 @@ Kalman::Kalman(audioMasterCallback audioMaster) : AudioEffectX(audioMaster, kNumPrograms, kNumParameters) { A = 0.5; - B = 0.5; - C = 0.0; - + B = 1.0; + for (int x = 0; x < kal_total; x++) kal[x] = 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. @@ -53,7 +52,6 @@ void Kalman::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! } } @@ -62,7 +60,6 @@ float Kalman::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 } @@ -70,8 +67,7 @@ float Kalman::getParameter(VstInt32 index) { void Kalman::getParameterName(VstInt32 index, char *text) { switch (index) { case kParamA: vst_strncpy (text, "Kalman", kVstMaxParamStrLen); break; - case kParamB: vst_strncpy (text, "Drive", kVstMaxParamStrLen); break; - case kParamC: vst_strncpy (text, "Dry/Wet", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "Inv/Wet", kVstMaxParamStrLen); break; default: break; // unknown parameter, shouldn't happen! } //this is our labels for displaying in the VST host } @@ -80,7 +76,6 @@ void Kalman::getParameterDisplay(VstInt32 index, char *text) { switch (index) { case kParamA: float2string (A, text, kVstMaxParamStrLen); break; case kParamB: float2string (B, text, kVstMaxParamStrLen); break; - case kParamC: float2string (C, text, kVstMaxParamStrLen); break; default: break; // unknown parameter, shouldn't happen! } //this displays the values and handles 'popups' where it's discrete choices } @@ -89,7 +84,6 @@ void Kalman::getParameterLabel(VstInt32 index, char *text) { switch (index) { case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break; case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break; - case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break; default: break; // unknown parameter, shouldn't happen! } } @@ -114,7 +108,6 @@ bool Kalman::parameterTextToValue(VstInt32 index, const char *text, float &value switch(index) { case kParamA: { auto b = string2float(text, value); return b; break; } case kParamB: { auto b = string2float(text, value); return b; break; } - case kParamC: { auto b = string2float(text, value); return b; break; } } return false; @@ -123,7 +116,6 @@ bool Kalman::canConvertParameterTextToValue(VstInt32 index) { switch(index) { case kParamA: return true; case kParamB: return true; - case kParamC: return true; } return false; diff --git a/src/autogen_airwin/Kalman.h b/src/autogen_airwin/Kalman.h index 0abe521..4f5da28 100644 --- a/src/autogen_airwin/Kalman.h +++ b/src/autogen_airwin/Kalman.h @@ -19,8 +19,7 @@ namespace airwin2rack::Kalman { enum { kParamA = 0, kParamB = 1, - kParamC = 2, - kNumParameters = 3 + kNumParameters = 2 }; // const int kNumPrograms = 0; @@ -56,40 +55,39 @@ class Kalman : char _programName[kVstMaxProgNameLen + 1]; std::set< std::string > _canDo; + uint32_t fpdL; + uint32_t fpdR; + //default stuff + enum { prevSampL1, prevSlewL1, accSlewL1, - prevSampR1, - prevSlewR1, - accSlewR1, prevSampL2, prevSlewL2, accSlewL2, - prevSampR2, - prevSlewR2, - accSlewR2, prevSampL3, prevSlewL3, accSlewL3, + kalGainL, + kalOutL, + prevSampR1, + prevSlewR1, + accSlewR1, + prevSampR2, + prevSlewR2, + accSlewR2, prevSampR3, prevSlewR3, accSlewR3, - kalGainL, kalGainR, - kalOutL, kalOutR, kal_total }; - double kal[kal_total]; - - uint32_t fpdL; - uint32_t fpdR; - //default stuff - + double kal[kal_total]; + float A; float B; - float C; }; #endif diff --git a/src/autogen_airwin/KalmanProc.cpp b/src/autogen_airwin/KalmanProc.cpp index 2918edc..2833e79 100644 --- a/src/autogen_airwin/KalmanProc.cpp +++ b/src/autogen_airwin/KalmanProc.cpp @@ -19,12 +19,10 @@ void Kalman::processReplacing(float **inputs, float **outputs, VstInt32 sampleFr overallscale /= 44100.0; overallscale *= getSampleRate(); - double kalman = 1.0-pow(1.0-A,2); - double kaldrive = B; - double kalgain = kalman*8.0; - double kalthresh = kalman*0.5; - double kalDryTrim = 1.0 - (0.68+(kalthresh*0.314)); - double wet = C; + double kalman = 1.0-pow(A,2); + double wet = (B*2.0)-1.0; //inv-dry-wet for highpass + double dry = 2.0-(B*2.0); + if (dry > 1.0) dry = 1.0; //full dry for use with inv, to 0.0 at full wet while (--sampleFrames >= 0) { @@ -36,49 +34,63 @@ void Kalman::processReplacing(float **inputs, float **outputs, VstInt32 sampleFr double drySampleR = inputSampleR; //begin Kalman Filter - double dryKalL = inputSampleL = inputSampleL*(1.0-kalman)*kaldrive; - double dryKalR = inputSampleR = inputSampleR*(1.0-kalman)*kaldrive; - inputSampleL *= (1.0-kalman); inputSampleR *= (1.0-kalman); + double dryKal = inputSampleL = inputSampleL*(1.0-kalman)*0.777; + inputSampleL *= (1.0-kalman); //set up gain levels to control the beast kal[prevSlewL3] += kal[prevSampL3] - kal[prevSampL2]; kal[prevSlewL3] *= 0.5; - kal[prevSlewR3] += kal[prevSampR3] - kal[prevSampR2]; kal[prevSlewR3] *= 0.5; kal[prevSlewL2] += kal[prevSampL2] - kal[prevSampL1]; kal[prevSlewL2] *= 0.5; - kal[prevSlewR2] += kal[prevSampR2] - kal[prevSampR1]; kal[prevSlewR2] *= 0.5; kal[prevSlewL1] += kal[prevSampL1] - inputSampleL; kal[prevSlewL1] *= 0.5; - kal[prevSlewR1] += kal[prevSampR1] - inputSampleR; kal[prevSlewR1] *= 0.5; //make slews from each set of samples used kal[accSlewL2] += kal[prevSlewL3] - kal[prevSlewL2]; kal[accSlewL2] *= 0.5; - kal[accSlewR2] += kal[prevSlewR3] - kal[prevSlewR2]; kal[accSlewR2] *= 0.5; kal[accSlewL1] += kal[prevSlewL2] - kal[prevSlewL1]; kal[accSlewL1] *= 0.5; - kal[accSlewR1] += kal[prevSlewR2] - kal[prevSlewR1]; kal[accSlewR1] *= 0.5; //differences between slews: rate of change of rate of change kal[accSlewL3] += (kal[accSlewL2] - kal[accSlewL1]); kal[accSlewL3] *= 0.5; - kal[accSlewR3] += (kal[accSlewR2] - kal[accSlewR1]); kal[accSlewR3] *= 0.5; //entering the abyss, what even is this kal[kalOutL] += kal[prevSampL1] + kal[prevSlewL2] + kal[accSlewL3]; kal[kalOutL] *= 0.5; - kal[kalOutR] += kal[prevSampR1] + kal[prevSlewR2] + kal[accSlewR3]; kal[kalOutR] *= 0.5; //resynthesizing predicted result (all iir smoothed) - kal[kalGainL] += fabs(dryKalL-kal[kalOutL])*kalgain; kal[kalGainL] *= 0.5; - kal[kalGainR] += fabs(dryKalR-kal[kalOutR])*kalgain; kal[kalGainR] *= 0.5; + kal[kalGainL] += fabs(dryKal-kal[kalOutL])*kalman*8.0; kal[kalGainL] *= 0.5; //madness takes its toll. Kalman Gain: how much dry to retain - if (kal[kalGainL] > kalthresh) kal[kalGainL] = kalthresh; - if (kal[kalGainR] > kalthresh) kal[kalGainR] = kalthresh; + if (kal[kalGainL] > kalman*0.5) kal[kalGainL] = kalman*0.5; //attempts to avoid explosions - kal[kalOutL] += (dryKalL*kalDryTrim); kal[kalOutR] += (dryKalR*kalDryTrim); + kal[kalOutL] += (dryKal*(1.0-(0.68+(kalman*0.157)))); //this is for tuning a really complete cancellation up around Nyquist - kal[prevSampL3] = kal[prevSampL2]; kal[prevSampR3] = kal[prevSampR2]; - kal[prevSampL2] = kal[prevSampL1]; kal[prevSampR2] = kal[prevSampR1]; - kal[prevSampL1] = (kal[kalGainL] * kal[kalOutL]) + ((1.0-kal[kalGainL])*dryKalL); - kal[prevSampR1] = (kal[kalGainR] * kal[kalOutR]) + ((1.0-kal[kalGainR])*dryKalR); + kal[prevSampL3] = kal[prevSampL2]; + kal[prevSampL2] = kal[prevSampL1]; + kal[prevSampL1] = (kal[kalGainL] * kal[kalOutL]) + ((1.0-kal[kalGainL])*dryKal); //feed the chain of previous samples if (kal[prevSampL1] > 1.0) kal[prevSampL1] = 1.0; if (kal[prevSampL1] < -1.0) kal[prevSampL1] = -1.0; + //end Kalman Filter, except for trim on output + inputSampleL = (drySampleL*dry)+(kal[kalOutL]*wet*0.777); + //now the right channel + dryKal = inputSampleR = inputSampleR*(1.0-kalman)*0.777; + inputSampleR *= (1.0-kalman); + //set up gain levels to control the beast + kal[prevSlewR3] += kal[prevSampR3] - kal[prevSampR2]; kal[prevSlewR3] *= 0.5; + kal[prevSlewR2] += kal[prevSampR2] - kal[prevSampR1]; kal[prevSlewR2] *= 0.5; + kal[prevSlewR1] += kal[prevSampR1] - inputSampleR; kal[prevSlewR1] *= 0.5; + //make slews from each set of samples used + kal[accSlewR2] += kal[prevSlewR3] - kal[prevSlewR2]; kal[accSlewR2] *= 0.5; + kal[accSlewR1] += kal[prevSlewR2] - kal[prevSlewR1]; kal[accSlewR1] *= 0.5; + //differences between slews: rate of change of rate of change + kal[accSlewR3] += (kal[accSlewR2] - kal[accSlewR1]); kal[accSlewR3] *= 0.5; + //entering the abyss, what even is this + kal[kalOutR] += kal[prevSampR1] + kal[prevSlewR2] + kal[accSlewR3]; kal[kalOutR] *= 0.5; + //resynthesizing predicted result (all iir smoothed) + kal[kalGainR] += fabs(dryKal-kal[kalOutR])*kalman*8.0; kal[kalGainR] *= 0.5; + //madness takes its toll. Kalman Gain: how much dry to retain + if (kal[kalGainR] > kalman*0.5) kal[kalGainR] = kalman*0.5; + //attempts to avoid explosions + kal[kalOutR] += (dryKal*(1.0-(0.68+(kalman*0.157)))); + //this is for tuning a really complete cancellation up around Nyquist + kal[prevSampR3] = kal[prevSampR2]; + kal[prevSampR2] = kal[prevSampR1]; + kal[prevSampR1] = (kal[kalGainR] * kal[kalOutR]) + ((1.0-kal[kalGainR])*dryKal); + //feed the chain of previous samples if (kal[prevSampR1] > 1.0) kal[prevSampR1] = 1.0; if (kal[prevSampR1] < -1.0) kal[prevSampR1] = -1.0; - //end Kalman Filter, except for kaldrive trim on output - - inputSampleL = (drySampleL*(1.0-wet))+(kal[kalOutL]*wet*kaldrive); - inputSampleR = (drySampleR*(1.0-wet))+(kal[kalOutR]*wet*kaldrive); + //end Kalman Filter, except for trim on output + inputSampleR = (drySampleR*dry)+(kal[kalOutR]*wet*0.777); //begin 32 bit stereo floating point dither int expon; frexpf((float)inputSampleL, &expon); @@ -110,12 +122,10 @@ void Kalman::processDoubleReplacing(double **inputs, double **outputs, VstInt32 overallscale /= 44100.0; overallscale *= getSampleRate(); - double kalman = 1.0-pow(1.0-A,2); - double kaldrive = B; - double kalgain = kalman*8.0; - double kalthresh = kalman*0.5; - double kalDryTrim = 1.0 - (0.68+(kalthresh*0.314)); - double wet = C; + double kalman = 1.0-pow(A,2); + double wet = (B*2.0)-1.0; //inv-dry-wet for highpass + double dry = 2.0-(B*2.0); + if (dry > 1.0) dry = 1.0; //full dry for use with inv, to 0.0 at full wet while (--sampleFrames >= 0) { @@ -127,49 +137,63 @@ void Kalman::processDoubleReplacing(double **inputs, double **outputs, VstInt32 double drySampleR = inputSampleR; //begin Kalman Filter - double dryKalL = inputSampleL = inputSampleL*(1.0-kalman)*kaldrive; - double dryKalR = inputSampleR = inputSampleR*(1.0-kalman)*kaldrive; - inputSampleL *= (1.0-kalman); inputSampleR *= (1.0-kalman); + double dryKal = inputSampleL = inputSampleL*(1.0-kalman)*0.777; + inputSampleL *= (1.0-kalman); //set up gain levels to control the beast kal[prevSlewL3] += kal[prevSampL3] - kal[prevSampL2]; kal[prevSlewL3] *= 0.5; - kal[prevSlewR3] += kal[prevSampR3] - kal[prevSampR2]; kal[prevSlewR3] *= 0.5; kal[prevSlewL2] += kal[prevSampL2] - kal[prevSampL1]; kal[prevSlewL2] *= 0.5; - kal[prevSlewR2] += kal[prevSampR2] - kal[prevSampR1]; kal[prevSlewR2] *= 0.5; kal[prevSlewL1] += kal[prevSampL1] - inputSampleL; kal[prevSlewL1] *= 0.5; - kal[prevSlewR1] += kal[prevSampR1] - inputSampleR; kal[prevSlewR1] *= 0.5; //make slews from each set of samples used kal[accSlewL2] += kal[prevSlewL3] - kal[prevSlewL2]; kal[accSlewL2] *= 0.5; - kal[accSlewR2] += kal[prevSlewR3] - kal[prevSlewR2]; kal[accSlewR2] *= 0.5; kal[accSlewL1] += kal[prevSlewL2] - kal[prevSlewL1]; kal[accSlewL1] *= 0.5; - kal[accSlewR1] += kal[prevSlewR2] - kal[prevSlewR1]; kal[accSlewR1] *= 0.5; //differences between slews: rate of change of rate of change kal[accSlewL3] += (kal[accSlewL2] - kal[accSlewL1]); kal[accSlewL3] *= 0.5; - kal[accSlewR3] += (kal[accSlewR2] - kal[accSlewR1]); kal[accSlewR3] *= 0.5; //entering the abyss, what even is this kal[kalOutL] += kal[prevSampL1] + kal[prevSlewL2] + kal[accSlewL3]; kal[kalOutL] *= 0.5; - kal[kalOutR] += kal[prevSampR1] + kal[prevSlewR2] + kal[accSlewR3]; kal[kalOutR] *= 0.5; //resynthesizing predicted result (all iir smoothed) - kal[kalGainL] += fabs(dryKalL-kal[kalOutL])*kalgain; kal[kalGainL] *= 0.5; - kal[kalGainR] += fabs(dryKalR-kal[kalOutR])*kalgain; kal[kalGainR] *= 0.5; + kal[kalGainL] += fabs(dryKal-kal[kalOutL])*kalman*8.0; kal[kalGainL] *= 0.5; //madness takes its toll. Kalman Gain: how much dry to retain - if (kal[kalGainL] > kalthresh) kal[kalGainL] = kalthresh; - if (kal[kalGainR] > kalthresh) kal[kalGainR] = kalthresh; + if (kal[kalGainL] > kalman*0.5) kal[kalGainL] = kalman*0.5; //attempts to avoid explosions - kal[kalOutL] += (dryKalL*kalDryTrim); kal[kalOutR] += (dryKalR*kalDryTrim); + kal[kalOutL] += (dryKal*(1.0-(0.68+(kalman*0.157)))); //this is for tuning a really complete cancellation up around Nyquist - kal[prevSampL3] = kal[prevSampL2]; kal[prevSampR3] = kal[prevSampR2]; - kal[prevSampL2] = kal[prevSampL1]; kal[prevSampR2] = kal[prevSampR1]; - kal[prevSampL1] = (kal[kalGainL] * kal[kalOutL]) + ((1.0-kal[kalGainL])*dryKalL); - kal[prevSampR1] = (kal[kalGainR] * kal[kalOutR]) + ((1.0-kal[kalGainR])*dryKalR); + kal[prevSampL3] = kal[prevSampL2]; + kal[prevSampL2] = kal[prevSampL1]; + kal[prevSampL1] = (kal[kalGainL] * kal[kalOutL]) + ((1.0-kal[kalGainL])*dryKal); //feed the chain of previous samples if (kal[prevSampL1] > 1.0) kal[prevSampL1] = 1.0; if (kal[prevSampL1] < -1.0) kal[prevSampL1] = -1.0; + //end Kalman Filter, except for trim on output + inputSampleL = (drySampleL*dry)+(kal[kalOutL]*wet*0.777); + //now the right channel + dryKal = inputSampleR = inputSampleR*(1.0-kalman)*0.777; + inputSampleR *= (1.0-kalman); + //set up gain levels to control the beast + kal[prevSlewR3] += kal[prevSampR3] - kal[prevSampR2]; kal[prevSlewR3] *= 0.5; + kal[prevSlewR2] += kal[prevSampR2] - kal[prevSampR1]; kal[prevSlewR2] *= 0.5; + kal[prevSlewR1] += kal[prevSampR1] - inputSampleR; kal[prevSlewR1] *= 0.5; + //make slews from each set of samples used + kal[accSlewR2] += kal[prevSlewR3] - kal[prevSlewR2]; kal[accSlewR2] *= 0.5; + kal[accSlewR1] += kal[prevSlewR2] - kal[prevSlewR1]; kal[accSlewR1] *= 0.5; + //differences between slews: rate of change of rate of change + kal[accSlewR3] += (kal[accSlewR2] - kal[accSlewR1]); kal[accSlewR3] *= 0.5; + //entering the abyss, what even is this + kal[kalOutR] += kal[prevSampR1] + kal[prevSlewR2] + kal[accSlewR3]; kal[kalOutR] *= 0.5; + //resynthesizing predicted result (all iir smoothed) + kal[kalGainR] += fabs(dryKal-kal[kalOutR])*kalman*8.0; kal[kalGainR] *= 0.5; + //madness takes its toll. Kalman Gain: how much dry to retain + if (kal[kalGainR] > kalman*0.5) kal[kalGainR] = kalman*0.5; + //attempts to avoid explosions + kal[kalOutR] += (dryKal*(1.0-(0.68+(kalman*0.157)))); + //this is for tuning a really complete cancellation up around Nyquist + kal[prevSampR3] = kal[prevSampR2]; + kal[prevSampR2] = kal[prevSampR1]; + kal[prevSampR1] = (kal[kalGainR] * kal[kalOutR]) + ((1.0-kal[kalGainR])*dryKal); + //feed the chain of previous samples if (kal[prevSampR1] > 1.0) kal[prevSampR1] = 1.0; if (kal[prevSampR1] < -1.0) kal[prevSampR1] = -1.0; - //end Kalman Filter, except for kaldrive trim on output - - inputSampleL = (drySampleL*(1.0-wet))+(kal[kalOutL]*wet*kaldrive); - inputSampleR = (drySampleR*(1.0-wet))+(kal[kalOutR]*wet*kaldrive); + //end Kalman Filter, except for trim on output + inputSampleR = (drySampleR*dry)+(kal[kalOutR]*wet*0.777); //begin 64 bit stereo floating point dither //int expon; frexp((double)inputSampleL, &expon); diff --git a/src/autogen_airwin/Pear2.cpp b/src/autogen_airwin/Pear2.cpp new file mode 100644 index 0000000..f41bb3d --- /dev/null +++ b/src/autogen_airwin/Pear2.cpp @@ -0,0 +1,142 @@ +/* ======================================== + * Pear2 - Pear2.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __Pear2_H +#include "Pear2.h" +#endif +namespace airwin2rack::Pear2 { + +AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new Pear2(audioMaster);} + +Pear2::Pear2(audioMasterCallback audioMaster) : + AudioEffectX(audioMaster, kNumPrograms, kNumParameters) +{ + A = 1.0; + B = 0.5; + C = 0.5; + D = 1.0; + + for (int x = 0; x < pear_total; x++) pear[x] = 0.0; + freqA = freqB = 0.5; + nonLinA = nonLinB = 0.0; + wetA = wetB = 0.5; + + 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 +} + +Pear2::~Pear2() {} +VstInt32 Pear2::getVendorVersion () {return 1000;} +void Pear2::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);} +void Pear2::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 Pear2::setParameter(VstInt32 index, float value) { + switch (index) { + case kParamA: A = value; break; + case kParamB: B = value; break; + case kParamC: C = value; break; + case kParamD: D = value; break; + default: break; // unknown parameter, shouldn't happen! + } +} + +float Pear2::getParameter(VstInt32 index) { + switch (index) { + case kParamA: return A; break; + case kParamB: return B; break; + case kParamC: return C; break; + case kParamD: return D; 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 Pear2::getParameterName(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "Freq", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "NonLin", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "Poles", kVstMaxParamStrLen); break; + case kParamD: vst_strncpy (text, "Inv/Wet", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this is our labels for displaying in the VST host +} + +void Pear2::getParameterDisplay(VstInt32 index, char *text) { + switch (index) { + case kParamA: float2string (A, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + case kParamC: float2string (C, text, kVstMaxParamStrLen); break; + case kParamD: float2string (D, text, kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this displays the values and handles 'popups' where it's discrete choices +} + +void Pear2::getParameterLabel(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamC: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamD: vst_strncpy (text, "", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } +} + +VstInt32 Pear2::canDo(char *text) +{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know + +bool Pear2::getEffectName(char* name) { + vst_strncpy(name, "Pear2", kVstMaxProductStrLen); return true; +} + +VstPlugCategory Pear2::getPlugCategory() {return kPlugCategEffect;} + +bool Pear2::getProductString(char* text) { + vst_strncpy (text, "airwindows Pear2", kVstMaxProductStrLen); return true; +} + +bool Pear2::getVendorString(char* text) { + vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true; +} +bool Pear2::parameterTextToValue(VstInt32 index, const char *text, float &value) { + switch(index) { + case kParamA: { auto b = string2float(text, value); return b; break; } + case kParamB: { auto b = string2float(text, value); return b; break; } + case kParamC: { auto b = string2float(text, value); return b; break; } + case kParamD: { auto b = string2float(text, value); return b; break; } + + } + return false; +} +bool Pear2::canConvertParameterTextToValue(VstInt32 index) { + switch(index) { + case kParamA: return true; + case kParamB: return true; + case kParamC: return true; + case kParamD: return true; + + } + return false; +} +} // end namespace diff --git a/src/autogen_airwin/Pear2.h b/src/autogen_airwin/Pear2.h new file mode 100644 index 0000000..5ad9464 --- /dev/null +++ b/src/autogen_airwin/Pear2.h @@ -0,0 +1,147 @@ +/* ======================================== + * Pear2 - Pear2.h + * Created 8/12/11 by SPIAdmin + * Copyright (c) Airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __Pear2_Pear2_H +#define __Pear2_Pear2_H + +#ifndef __audioeffect__ +#include "../airwin2rackbase.h" +#endif + +#include +#include +#include + +namespace airwin2rack::Pear2 { +enum { + kParamA = 0, + kParamB = 1, + kParamC = 2, + kParamD = 3, + kNumParameters = 4 +}; // + +const int kNumPrograms = 0; +const int kNumInputs = 2; +const int kNumOutputs = 2; +const unsigned long kUniqueId = 'peas'; //Change this to what the AU identity is! + +class Pear2 : + public AudioEffectX +{ +public: + Pear2(audioMasterCallback audioMaster); + ~Pear2(); + 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 + + enum { + prevSampL1, + prevSlewL1, + prevSampR1, + prevSlewR1, + prevSampL2, + prevSlewL2, + prevSampR2, + prevSlewR2, + prevSampL3, + prevSlewL3, + prevSampR3, + prevSlewR3, + prevSampL4, + prevSlewL4, + prevSampR4, + prevSlewR4, + prevSampL5, + prevSlewL5, + prevSampR5, + prevSlewR5, + prevSampL6, + prevSlewL6, + prevSampR6, + prevSlewR6, + prevSampL7, + prevSlewL7, + prevSampR7, + prevSlewR7, + prevSampL8, + prevSlewL8, + prevSampR8, + prevSlewR8, + prevSampL9, + prevSlewL9, + prevSampR9, + prevSlewR9, + prevSampL10, + prevSlewL10, + prevSampR10, + prevSlewR10, + prevSampL11, + prevSlewL11, + prevSampR11, + prevSlewR11, + prevSampL12, + prevSlewL12, + prevSampR12, + prevSlewR12, + prevSampL13, + prevSlewL13, + prevSampR13, + prevSlewR13, + prevSampL14, + prevSlewL14, + prevSampR14, + prevSlewR14, + prevSampL15, + prevSlewL15, + prevSampR15, + prevSlewR15, + prevSampL16, + prevSlewL16, + prevSampR16, + prevSlewR16, + pear_total + }; //fixed frequency pear filter for ultrasonics, stereo + double pear[pear_total]; //probably worth just using a number here + + double freqA; + double freqB; + double nonLinA; + double nonLinB; + double wetA; + double wetB; + + float A; + float B; + float C; + float D; +}; + +#endif +} // end namespace diff --git a/src/autogen_airwin/Pear2Proc.cpp b/src/autogen_airwin/Pear2Proc.cpp new file mode 100644 index 0000000..d21cee7 --- /dev/null +++ b/src/autogen_airwin/Pear2Proc.cpp @@ -0,0 +1,161 @@ +/* ======================================== + * Pear2 - Pear2.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __Pear2_H +#include "Pear2.h" +#endif +namespace airwin2rack::Pear2 { + +void Pear2::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) +{ + float* in1 = inputs[0]; + float* in2 = inputs[1]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + VstInt32 inFramesToProcess = sampleFrames; //vst doesn't give us this as a separate variable so we'll make it + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + freqA = freqB; + freqB = pow(A,2); + if (freqB < 0.0001) freqB = 0.0001; + nonLinA = nonLinB; + nonLinB = pow(B,2); + double maxPoles = pow(C,3)*pear_total; + wetA = wetB; + wetB = D; //inv-dry-wet for highpass + + 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 drySampleL = inputSampleL; + double drySampleR = inputSampleR; + + double temp = (double)sampleFrames/inFramesToProcess; + double freq = (freqA*temp)+(freqB*(1.0-temp)); + double nonLin = (nonLinA*temp)+(nonLinB*(1.0-temp)); + double wet = (wetA*temp)+(wetB*(1.0-temp)); + double dry = 2.0-(wet*2.0); + if (dry > 1.0) dry = 1.0; //full dry for use with inv, to 0.0 at full wet + wet = (wet*2.0)-1.0; //inv-dry-wet for highpass + + for (int x = 0; x < maxPoles; x += 4) { + double di = fabs(freq*(1.0+(inputSampleL*nonLin))); if (di > 1.0) di = 1.0; + double slew = ((inputSampleL - pear[x]) + pear[x+1])*di*0.5; + pear[x] = inputSampleL = (di * inputSampleL) + ((1.0-di) * (pear[x] + pear[x+1])); + pear[x+1] = slew; + di = fabs(freq*(1.0+(inputSampleR*nonLin))); if (di > 1.0) di = 1.0; + slew = ((inputSampleR - pear[x+2]) + pear[x+3])*di*0.5; + pear[x+2] = inputSampleR = (di * inputSampleR) + ((1.0-di) * (pear[x+2] + pear[x+3])); + pear[x+3] = slew; + } + + inputSampleL *= wet; + inputSampleR *= wet; + drySampleL *= dry; + drySampleR *= dry; + inputSampleL += drySampleL; + inputSampleR += drySampleR; + + //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 Pear2::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) +{ + double* in1 = inputs[0]; + double* in2 = inputs[1]; + double* out1 = outputs[0]; + double* out2 = outputs[1]; + + + VstInt32 inFramesToProcess = sampleFrames; //vst doesn't give us this as a separate variable so we'll make it + double overallscale = 1.0; + overallscale /= 44100.0; + overallscale *= getSampleRate(); + + freqA = freqB; + freqB = pow(A,2); + if (freqB < 0.0001) freqB = 0.0001; + nonLinA = nonLinB; + nonLinB = pow(B,2); + double maxPoles = pow(C,3)*pear_total; + wetA = wetB; + wetB = D; //inv-dry-wet for highpass + + 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 drySampleL = inputSampleL; + double drySampleR = inputSampleR; + + double temp = (double)sampleFrames/inFramesToProcess; + double freq = (freqA*temp)+(freqB*(1.0-temp)); + double nonLin = (nonLinA*temp)+(nonLinB*(1.0-temp)); + double wet = (wetA*temp)+(wetB*(1.0-temp)); + double dry = 2.0-(wet*2.0); + if (dry > 1.0) dry = 1.0; //full dry for use with inv, to 0.0 at full wet + wet = (wet*2.0)-1.0; //inv-dry-wet for highpass + + for (int x = 0; x < maxPoles; x += 4) { + double di = fabs(freq*(1.0+(inputSampleL*nonLin))); if (di > 1.0) di = 1.0; + double slew = ((inputSampleL - pear[x]) + pear[x+1])*di*0.5; + pear[x] = inputSampleL = (di * inputSampleL) + ((1.0-di) * (pear[x] + pear[x+1])); + pear[x+1] = slew; + di = fabs(freq*(1.0+(inputSampleR*nonLin))); if (di > 1.0) di = 1.0; + slew = ((inputSampleR - pear[x+2]) + pear[x+3])*di*0.5; + pear[x+2] = inputSampleR = (di * inputSampleR) + ((1.0-di) * (pear[x+2] + pear[x+3])); + pear[x+3] = slew; + } + + inputSampleL *= wet; + inputSampleR *= wet; + drySampleL *= dry; + drySampleR *= dry; + inputSampleL += drySampleL; + inputSampleR += drySampleR; + + //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/Trianglizer.cpp b/src/autogen_airwin/Trianglizer.cpp new file mode 100644 index 0000000..577d3e5 --- /dev/null +++ b/src/autogen_airwin/Trianglizer.cpp @@ -0,0 +1,120 @@ +/* ======================================== + * Trianglizer - Trianglizer.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __Trianglizer_H +#include "Trianglizer.h" +#endif +namespace airwin2rack::Trianglizer { + +AudioEffect* createEffectInstance(audioMasterCallback audioMaster) {return new Trianglizer(audioMaster);} + +Trianglizer::Trianglizer(audioMasterCallback audioMaster) : + AudioEffectX(audioMaster, kNumPrograms, kNumParameters) +{ + A = 0.0; + B = 1.0; + fpdL = 1.0; while (fpdL < 16386) fpdL = rand()*UINT32_MAX; + fpdR = 1.0; while (fpdR < 16386) fpdR = rand()*UINT32_MAX; + //this is reset: values being initialized only once. Startup values, whatever they are. + + _canDo.insert("plugAsChannelInsert"); // plug-in can be used as a channel insert effect. + _canDo.insert("plugAsSend"); // plug-in can be used as a send effect. + _canDo.insert("x2in2out"); + setNumInputs(kNumInputs); + setNumOutputs(kNumOutputs); + setUniqueID(kUniqueId); + canProcessReplacing(); // supports output replacing + canDoubleReplacing(); // supports double precision processing + programsAreChunks(true); + vst_strncpy (_programName, "Default", kVstMaxProgNameLen); // default program name +} + +Trianglizer::~Trianglizer() {} +VstInt32 Trianglizer::getVendorVersion () {return 1000;} +void Trianglizer::setProgramName(char *name) {vst_strncpy (_programName, name, kVstMaxProgNameLen);} +void Trianglizer::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 Trianglizer::setParameter(VstInt32 index, float value) { + switch (index) { + case kParamA: A = value; break; + case kParamB: B = value; break; + default: break; // unknown parameter, shouldn't happen! + } +} + +float Trianglizer::getParameter(VstInt32 index) { + switch (index) { + case kParamA: return A; break; + case kParamB: return B; 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 Trianglizer::getParameterName(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "Tri/Fat", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "Dry/Wet", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this is our labels for displaying in the VST host +} + +void Trianglizer::getParameterDisplay(VstInt32 index, char *text) { + switch (index) { + case kParamA: float2string (A, text, kVstMaxParamStrLen); break; + case kParamB: float2string (B, text, kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } //this displays the values and handles 'popups' where it's discrete choices +} + +void Trianglizer::getParameterLabel(VstInt32 index, char *text) { + switch (index) { + case kParamA: vst_strncpy (text, "", kVstMaxParamStrLen); break; + case kParamB: vst_strncpy (text, "", kVstMaxParamStrLen); break; + default: break; // unknown parameter, shouldn't happen! + } +} + +VstInt32 Trianglizer::canDo(char *text) +{ return (_canDo.find(text) == _canDo.end()) ? -1: 1; } // 1 = yes, -1 = no, 0 = don't know + +bool Trianglizer::getEffectName(char* name) { + vst_strncpy(name, "Trianglizer", kVstMaxProductStrLen); return true; +} + +VstPlugCategory Trianglizer::getPlugCategory() {return kPlugCategEffect;} + +bool Trianglizer::getProductString(char* text) { + vst_strncpy (text, "airwindows Trianglizer", kVstMaxProductStrLen); return true; +} + +bool Trianglizer::getVendorString(char* text) { + vst_strncpy (text, "airwindows", kVstMaxVendorStrLen); return true; +} +bool Trianglizer::parameterTextToValue(VstInt32 index, const char *text, float &value) { + switch(index) { + case kParamA: { auto b = string2float(text, value); return b; break; } + case kParamB: { auto b = string2float(text, value); return b; break; } + + } + return false; +} +bool Trianglizer::canConvertParameterTextToValue(VstInt32 index) { + switch(index) { + case kParamA: return true; + case kParamB: return true; + + } + return false; +} +} // end namespace diff --git a/src/autogen_airwin/Trianglizer.h b/src/autogen_airwin/Trianglizer.h new file mode 100644 index 0000000..b0ee65b --- /dev/null +++ b/src/autogen_airwin/Trianglizer.h @@ -0,0 +1,67 @@ +/* ======================================== + * Trianglizer - Trianglizer.h + * Created 8/12/11 by SPIAdmin + * Copyright (c) Airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __Trianglizer_Trianglizer_H +#define __Trianglizer_Trianglizer_H + +#ifndef __audioeffect__ +#include "../airwin2rackbase.h" +#endif + +#include +#include +#include + +namespace airwin2rack::Trianglizer { +enum { + kParamA = 0, + kParamB = 1, + kNumParameters = 2 +}; // + +const int kNumPrograms = 0; +const int kNumInputs = 2; +const int kNumOutputs = 2; +const unsigned long kUniqueId = 'tria'; //Change this to what the AU identity is! + +class Trianglizer : + public AudioEffectX +{ +public: + Trianglizer(audioMasterCallback audioMaster); + ~Trianglizer(); + 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 + + float A; + float B; +}; + +#endif +} // end namespace diff --git a/src/autogen_airwin/TrianglizerProc.cpp b/src/autogen_airwin/TrianglizerProc.cpp new file mode 100644 index 0000000..ff3ba96 --- /dev/null +++ b/src/autogen_airwin/TrianglizerProc.cpp @@ -0,0 +1,118 @@ +/* ======================================== + * Trianglizer - Trianglizer.h + * Copyright (c) airwindows, Airwindows uses the MIT license + * ======================================== */ + +#ifndef __Trianglizer_H +#include "Trianglizer.h" +#endif +namespace airwin2rack::Trianglizer { + +void Trianglizer::processReplacing(float **inputs, float **outputs, VstInt32 sampleFrames) +{ + float* in1 = inputs[0]; + float* in2 = inputs[1]; + float* out1 = outputs[0]; + float* out2 = outputs[1]; + + double offset = (A+1.0)*0.5; + double inverter = (offset*2.0)-1.0; + double wet = B; + + 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 drySampleL = inputSampleL; + double drySampleR = inputSampleR; + + if (inputSampleL > 1.0) inputSampleL = 1.0; + else if (inputSampleL > 0.0) inputSampleL = -expm1((log1p(-inputSampleL) * (offset+(inputSampleL*inverter)))); + if (inputSampleL < -1.0) inputSampleL = -1.0; + else if (inputSampleL < 0.0) inputSampleL = expm1((log1p(inputSampleL) * (offset-(inputSampleL*inverter)))); + + if (inputSampleR > 1.0) inputSampleR = 1.0; + else if (inputSampleR > 0.0) inputSampleR = -expm1((log1p(-inputSampleR) * (offset+(inputSampleR*inverter)))); + if (inputSampleR < -1.0) inputSampleR = -1.0; + else if (inputSampleR < 0.0) inputSampleR = expm1((log1p(inputSampleR) * (offset-(inputSampleR*inverter)))); + + if (wet !=1.0) { + inputSampleL = (inputSampleL * wet) + (drySampleL * (1.0-wet)); + inputSampleR = (inputSampleR * wet) + (drySampleR * (1.0-wet)); + } + + //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 Trianglizer::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) +{ + double* in1 = inputs[0]; + double* in2 = inputs[1]; + double* out1 = outputs[0]; + double* out2 = outputs[1]; + + double offset = (A+1.0)*0.5; + double inverter = (offset*2.0)-1.0; + double wet = B; + + 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 drySampleL = inputSampleL; + double drySampleR = inputSampleR; + + if (inputSampleL > 1.0) inputSampleL = 1.0; + else if (inputSampleL > 0.0) inputSampleL = -expm1((log1p(-inputSampleL) * (offset+(inputSampleL*inverter)))); + if (inputSampleL < -1.0) inputSampleL = -1.0; + else if (inputSampleL < 0.0) inputSampleL = expm1((log1p(inputSampleL) * (offset-(inputSampleL*inverter)))); + + if (inputSampleR > 1.0) inputSampleR = 1.0; + else if (inputSampleR > 0.0) inputSampleR = -expm1((log1p(-inputSampleR) * (offset+(inputSampleR*inverter)))); + if (inputSampleR < -1.0) inputSampleR = -1.0; + else if (inputSampleR < 0.0) inputSampleR = expm1((log1p(inputSampleR) * (offset-(inputSampleR*inverter)))); + + if (wet !=1.0) { + inputSampleL = (inputSampleL * wet) + (drySampleL * (1.0-wet)); + inputSampleR = (inputSampleR * wet) + (drySampleR * (1.0-wet)); + } + + //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