1 #include "ADClip7.h"
2 #include "Air.h"
3 #include "Apicolypse.h"
4 #include "BassDrive.h"
5 #include "BitGlitter.h"
6 #include "BlockParty.h"
7 #include "BrightAmbience2.h"
8 #include "BussColors4.h"
9 #include "ButterComp2.h"
10 #include "Capacitor.h"
11 #include "Cojones.h"
12 #include "Compresaturator.h"
13 #include "CrunchyGrooveWear.h"
14 #include "DeBess.h"
15 #include "DeckWrecka.h"
16 #include "DeEss.h"
17 #include "Density.h"
18 #include "DeRez2.h"
19 #include "Drive.h"
20 #include "DrumSlam.h"
21 #include "DustBunny.h"
22 #include "Focus.h"
23 #include "Fracture.h"
24 #include "Galactic.h"
25 #include "GrooveWear.h"
26 #include "HardVacuum.h"
27 #include "Hombre.h"
28 #include "Infinity.h"
29 #include "IronOxide5.h"
30 #include "Logical4.h"
31 #include "Loud.h"
32 #include "MatrixVerb.h"
33 #include "Melt.h"
34 #include "Mojo.h"
35 #include "NCSeventeen.h"
36 #include "Noise.h"
37 #include "OneCornerClip.h"
38 #include "PocketVerbs.h"
39 #include "Point.h"
40 #include "Pop.h"
41 #include "Pressure4.h"
42 #include "PyeWacket.h"
43 #include "SingleEndedTriode.h"
44 #include "Slew.h"
45 #include "Slew2.h"
46 #include "Spiral2.h"
47 #include "StarChild.h"
48 #include "Surge.h"
49 #include "TripleSpread.h"
50 #include "ToTape6.h"
51 #include "UnBox.h"
52 #include "Verbity.h"
53 #include "VariMu.h"
54 #include "VoiceOfTheStarship.h"
55 #include <map>
56
57 namespace {
58 template<typename T>
create(int id,double sr,int dp)59 std::unique_ptr<AirWinBaseClass> create(int id, double sr, int dp)
60 {
61 auto res = std::make_unique<T>(id);
62 res->sr = sr;
63 res->displayPrecision = dp;
64 return res;
65 }
66 } // anonymous namespace
67
pluginRegistry()68 std::vector<AirWinBaseClass::Registration> AirWinBaseClass::pluginRegistry()
69 {
70 /*
71 * Static function, only called from audio thread, safe to have a static member here to avoid
72 * rebuild too often.
73 */
74 static std::vector<AirWinBaseClass::Registration> reg;
75
76 if( ! reg.empty() )
77 return reg;
78
79 /*
80 ** Register here with streaming ID (which must be increasing and can never change) and display order ID (which can be
81 ** really anything you want) and display name. So basically always add stuff to the end of this list but set the
82 ** display order to whatever you want. The nice thing is the display order doesn't need to be contiguous and the
83 ** order displayed is just a sort. So here I use values in steps of 10 so I can put stuff in between.
84 */
85
86 // Set up some group names
87 std::string gnClipping = "Clipping";
88 std::string gnDynamics = "Dynamics";
89 std::string gnFilter = "Filter";
90 std::string gnLoFi = "Lo-Fi";
91 std::string gnNoise = "Noise";
92 std::string gnAmbience = "Ambience";
93 std::string gnSaturation = "Saturation And More";
94 std::string gnStereo = "Stereo";
95 std::string gnTape = "Tape";
96
97 int id = 0; // add new effects only at the end of this list!
98
99 reg.emplace_back(create<ADClip7::ADClip7>, id++, 10, gnClipping, "AD Clip");
100 reg.emplace_back(create<BlockParty::BlockParty>, id++, 20, gnDynamics, "Block Party");
101 reg.emplace_back(create<ButterComp2::ButterComp2>, id++, 30, gnDynamics, "Butter Comp");
102 reg.emplace_back(create<Compresaturator::Compresaturator>, id++, 40, gnDynamics, "Compresaturator");
103 reg.emplace_back(create<Logical4::Logical4>, id++, 50, gnDynamics, "Logical");
104 reg.emplace_back(create<Mojo::Mojo>, id++, 355, gnSaturation, "Mojo");
105 reg.emplace_back(create<OneCornerClip::OneCornerClip>, id++, 70, gnClipping, "One Corner Clip");
106 reg.emplace_back(create<Point::Point>, id++, 80, gnDynamics, "Point");
107 reg.emplace_back(create<Pop::Pop>, id++, 90, gnDynamics, "Pop");
108 reg.emplace_back(create<Pressure4::Pressure4>, id++, 100, gnDynamics, "Pressure");
109 reg.emplace_back(create<PyeWacket::Pyewacket>, id++, 110, gnDynamics, "Pye Wacket");
110 reg.emplace_back(create<Surge::Surge>, id++, 120, gnDynamics, "Surge");
111 reg.emplace_back(create<VariMu::VariMu>, id++, 130, gnDynamics, "Vari-Mu");
112
113 reg.emplace_back(create<BitGlitter::BitGlitter>, id++, 140, gnLoFi, "Bit Glitter");
114 reg.emplace_back(create<CrunchyGrooveWear::CrunchyGrooveWear>, id++, 150, gnLoFi, "Crunchy Groove Wear");
115 reg.emplace_back(create<DeRez2::DeRez2>, id++, 160, gnLoFi, "DeRez");
116 reg.emplace_back(create<DeckWrecka::Deckwrecka>, id++, 170, gnLoFi, "Deck Wrecka");
117 reg.emplace_back(create<DustBunny::DustBunny>, id++, 180, gnNoise, "Dust Bunny");
118 reg.emplace_back(create<GrooveWear::GrooveWear>, id++, 190, gnLoFi, "Groove Wear");
119
120 reg.emplace_back(create<Noise::Noise>, id++, 200, gnNoise, "Noise");
121 reg.emplace_back(create<VoiceOfTheStarship::VoiceOfTheStarship>, id++, 210, gnNoise, "Voice Of The Starship");
122
123 reg.emplace_back(create<BrightAmbience2::BrightAmbience2>, id++, 220, gnAmbience, "Bright Ambience");
124 reg.emplace_back(create<Hombre::Hombre>, id++, 425, gnFilter, "Hombre");
125 reg.emplace_back(create<Melt::Melt>, id++, 240, gnAmbience, "Melt");
126 reg.emplace_back(create<PocketVerbs::PocketVerbs>, id++, 250, gnAmbience, "Pocket Verbs");
127 reg.emplace_back(create<StarChild::StarChild>, id++, 260, gnAmbience, "Star Child");
128
129 reg.emplace_back(create<Apicolypse::Apicolypse>, id++, 270, gnSaturation, "Apicolypse");
130 reg.emplace_back(create<BassDrive::BassDrive>, id++, 280, gnSaturation, "Bass Drive");
131 reg.emplace_back(create<Cojones::Cojones>, id++, 290, gnSaturation, "Cojones");
132 reg.emplace_back(create<Density::Density>, id++, 300, gnSaturation, "Density");
133 reg.emplace_back(create<Drive::Drive>, id++, 310, gnSaturation, "Drive");
134 reg.emplace_back(create<Focus::Focus>, id++, 320, gnSaturation, "Focus");
135 reg.emplace_back(create<Fracture::Fracture>, id++, 330, gnSaturation, "Fracture");
136 reg.emplace_back(create<HardVacuum::HardVacuum>, id++, 340, gnSaturation, "Hard Vacuum");
137 reg.emplace_back(create<Loud::Loud>, id++, 350, gnSaturation, "Loud");
138 reg.emplace_back(create<NCSeventeen::NCSeventeen>, id++, 360, gnSaturation, "NC-17");
139 reg.emplace_back(create<Spiral2::Spiral2>, id++, 390, gnSaturation, "Spiral");
140 reg.emplace_back(create<UnBox::UnBox>, id++, 400, gnSaturation, "Unbox");
141
142 reg.emplace_back(create<DeBess::DeBess>, id++, 420, gnFilter, "De-Bess");
143 reg.emplace_back(create<AirWindowsNoOp>, id++, -1, gnFilter, "NoOp (Was: DeEss)");
144
145 reg.emplace_back(create<SingleEndedTriode::SingleEndedTriode>, id++, 380, gnSaturation, "Single-Ended Triode");
146
147 reg.emplace_back(create<IronOxide5::IronOxide5>, id++, 450, gnTape, "Iron Oxide");
148 reg.emplace_back(create<ToTape6::ToTape6>, id++, 460, gnTape, "To Tape");
149
150 reg.emplace_back(create<Air::Air>, id++, 400, gnFilter, "Air");
151
152 reg.emplace_back(create<BussColors4::BussColors4>, id++, 285, gnSaturation, "Buss Colors");
153 reg.emplace_back(create<DrumSlam::DrumSlam>, id++, 46, gnDynamics, "Drum Slam");
154
155 reg.emplace_back(create<Capacitor::Capacitor>, id++, 415, gnFilter, "Capacitor");
156 reg.emplace_back(create<Slew::Slew>, id++, 113, gnClipping, "Slew 1");
157 reg.emplace_back(create<Slew2::Slew2>, id++, 114, gnClipping, "Slew 2");
158
159 // 1.9 additions
160 reg.emplace_back(create<Galactic::Galactic>, id++, 227, gnAmbience, "Galactic" );
161 reg.emplace_back(create<Infinity::Infinity>, id++, 230, gnAmbience, "Infinity" );
162 reg.emplace_back(create<MatrixVerb::MatrixVerb>, id++, 235, gnAmbience, "MatrixVerb" );
163 reg.emplace_back(create<Verbity::Verbity>, id++, 265, gnAmbience, "Verbity" );
164
165 reg.emplace_back(create<TripleSpread::TripleSpread>, id++, 440, gnStereo, "Triple Spread" );
166 return reg;
167 }
168
pluginRegistryOrdering()169 std::vector<int> AirWinBaseClass::pluginRegistryOrdering()
170 {
171 // See above on static
172 static auto res = std::vector<int>();
173 if( ! res.empty() )
174 return res;
175
176 auto r = pluginRegistry();
177 auto q = std::map<std::string, std::map<int, int>>();
178
179 for( auto const &el : r )
180 {
181 if( el.displayOrder >= 0 )
182 q[el.groupName][el.displayOrder] = el.id;
183 else
184 q[el.groupName][100000000] = -1;
185 }
186 for( auto const &sm : q )
187 {
188 for( auto const &tm : sm.second )
189 {
190 res.push_back( tm.second );
191 }
192 }
193 return res;
194 }