Krotos Modules 3
Loading...
Searching...
No Matches
KwidgetAudioProcessor.h
Go to the documentation of this file.
1#pragma once
2
3namespace krotos
4{
6 : public AudioProcessor,
7 public AudioProcessorParameter::Listener,
8 public Kwidget_CoreEngine::Listener, // listen to events raised by Kwidgets of type Kwidget_CoreEngine [SOLO]
9 public Kwidget_Reformer::Listener, // listen to events raised by Kwidgets of type Kwidget_Reformer [SOLO]
11 public Timer
12 {
13 public:
16
17 // A const array defining the "static" kwidget types.
18 // A static kwidget is a special type of kwidget which is not fully managed by the processor.
19 // Typically they are instantiated in the processor constructor before dynamic kwidgets, and persist across
20 // setState calls. The AudioOut kwidget is static as it must be instantiated first, and has a special i/o
21 // configuration in the processing chain. Unlike dynamic kwidgets, adding its type to this array prevents
22 // removal or recreation during state recall. Instantiation and audio connections must be implemented manually.
23 // The static kwidget design is likely to be deprecated in the future, so think carefully before adding a new
24 // static kwidget.
25 static const StringArray StaticKwidgetTypes;
26 static const StringArray StaticKwidgetIDs;
27
28 KwidgetAudioProcessor(const BusesProperties& ioLayouts, size_t numBusses, size_t channelsPerStereoBus,
29 size_t numRecorders, size_t numInputChannels, size_t numOutputChannels);
30
31 ~KwidgetAudioProcessor() override;
32
33 struct KListener
34 {
35 virtual void kwidgetAdded(Kwidget*) = 0;
36 virtual void kwidgetRemoved(Kwidget*) = 0;
37 virtual ~KListener() = default;
38 };
39
40 void addKListener(KListener* l);
42
43 void prepareToPlay(double sampleRate, int samplesPerBlock) override;
44 void processBlock(AudioBuffer<float>&, MidiBuffer&) override;
45 void releaseResources() override {}
46
47 void removeEngines();
48
66 Kwidget* addUserKwidget(const String& kwidgetType, const String& idModifier = "", int typeInstanceLimit = 0);
67
82 Kwidget* addChildKwidget(const String& kwidgetType, const String& parentID = "", const String& childID = "",
83 int typeInstanceLimit = 0);
84
92 Kwidget* addKwidgetFromState(const ValueTree& kwidgetTree);
93
95 void removeKwidget(const String& kwidgetID);
96
99
101 void removeKwidgetsExcluding(const StringArray& kwidgetsToExclude);
102
104 void removeKwidgetsOfType(const StringArray& kwidgetTypesToRemove);
105
110 bool addConnection(const String& sourceID, const String& destID);
111
117
119 void clearModulation();
120
122 bool setState(const ValueTree& newState);
123
129 void loadBundle(const File& bundleDirectory);
130
132 bool validateState(const ValueTree& newState, bool repairEnabled);
133
136
138 ValueTree getState();
139
141 const Array<Kwidget*>& getKwidgets();
142
149 Kwidget* getKwidget(const String& kwidgetID);
150
156 const Array<Kwidget*> getKwidgetsOfType(const String kwidgetType);
157
164 const Array<Kwidget*> getKwidgetsOfTypeWithAccessPermission(const StringRef kwidgetType, const StringRef reqId);
165
173 Kwidget* getKwidgetWithAccessPermission(const String& kwidgetID, const StringRef reqId);
174
175 void getStateInformation(MemoryBlock& destData) override;
176 void setStateInformation(const void* data, int sizeInBytes) override;
177 void setLastPresetPath(String inLastPresetPath);
178 String& getLastPresetPath();
179 const String getName() const override;
180 bool acceptsMidi() const override;
181 bool producesMidi() const override;
182 bool isMidiEffect() const override;
183 double getTailLengthSeconds() const override;
184 int getNumPrograms() override;
185 int getCurrentProgram() override;
186 void setCurrentProgram(int index) override;
187 const String getProgramName(int index) override;
188 void changeProgramName(int index, const String& newName) override;
189 bool isBusesLayoutSupported(const BusesLayout&) const override;
190
192 void timerCallback() override;
193
195 bool isRecording();
197
198 inline const bool isAStaticKwidgetType(const String& kType)
199 {
200 return std::find(StaticKwidgetTypes.begin(), StaticKwidgetTypes.end(), kType) != StaticKwidgetTypes.end();
201 };
202
203 const bool isAStaticKwidget(const Kwidget& kwidget);
204
208 void setReadSpecificFiles(bool canRead);
209
212 void setAddedFromState(bool isAddedFromState) { m_addedFromState = isAddedFromState; };
213
215 std::function<void()> onAutoplayTimerStop;
216
220
222
223 PluginHostType host;
224
225 std::unique_ptr<ValueTree> presetInfoTree;
226
227 // settings consts
228 static const String autoPlayMaxDuration;
229 static const String recorderReleaseTime;
230 static const String DroppedFileNameFormat;
231 static const String DefaultDroppedFileNameFormat;
232 static const String T2PStrictMode;
233
234 /* TODO: KST-1954 - this is a workaround to allow host projects to determine the UNIT_TEST define, due to a
235 * currently unknown preprocessor issue */
236#if UNIT_TEST == 1
237 const bool unitTest{true};
238#else
239 const bool unitTest{false};
240#endif
241 protected:
242 bool bypassPostFx{false};
243
244 private:
248 void initialiseRecorders();
249 void initialiseMasterFX();
250
251 void setInitialState();
252
255 Kwidget* addKwidgetWithID(const String& kwidgetType, const String& kwidgetID, bool useEndParams = false,
256 bool isChildKwidget = false);
257
258 void addKwidgetInternal(std::unique_ptr<Kwidget> kwidget);
260 void triggerRecordingStart(); // trigger recording start with note on
261 void triggerRecordingStop(); // trigger recording start with note off, recording stops after release time
262
264 virtual void parameterValueChanged(int /*parameterIndex*/, float newValue) override;
265 void parameterGestureChanged(int /*parameterIndex*/, bool /*gestureIsStarting*/) override {}
266
267 // CoreEngine::Listener functions [SOLO]
268 virtual void soloActivated(Kwidget_CoreEngine* engine) override;
269 virtual void soloDeActivated(Kwidget_CoreEngine* engine) override;
270 virtual void autoPlayChanged(Kwidget_CoreEngine* engine, float newValue) override;
271 virtual void loopEnableChanged(Kwidget_CoreEngine* engine, float newValue) override;
272
273 // Reformer::Listener functions [SOLO]
274 virtual void soloActivated(Kwidget_Reformer* engine) override;
275 virtual void soloDeActivated(Kwidget_Reformer* engine) override;
276 virtual void autoPlayChanged(Kwidget_Reformer* engine, float newValue) override {}
277 virtual void loopEnableChanged(Kwidget_Reformer* engine, float newValue) override {}
278
284 void soloActivatedAllEngines(const String& callingID);
285
291 void soloDeActivatedAllEngines(const String& callingID);
292
293 // TriggerButton::Listener functions
294 virtual void onClickChanged(Kwidget_TriggerButton* triggerButton, float newValue,
295 MIDIMode midiModeValue) override;
296
297 void autoPlayGlobalChanged(bool newVal);
298
299 void recordOutput(AudioBuffer<float>& buffer, MidiBuffer& midiMessages);
300
301 // Set data for all recorders kwidgets drag and drop file naming
302 void setRecordersNameData(String currentPresetName);
303
307 AudioBuffer<float> extractStereoBuffer(int numChannel1, int numChannel2,
308 AudioBuffer<float>& multiChannelBuffer);
309
313
314 std::vector<Kwidget*> m_audioOuts;
315 const String m_masterAudioOutID{"Master"};
317
318#if ENABLE_SANDBOX
319 Kwidget* m_audioOutSandBox{nullptr};
320#endif
321 std::unique_ptr<Kwidget> m_masterFilter;
322 std::unique_ptr<Kwidget> m_masterReverb;
323 std::unique_ptr<Kwidget> m_intensityMacro;
324
325 std::vector<std::unique_ptr<Kwidget>> m_recorders{m_numRecorders};
327 Array<Kwidget_Recorder*> m_recorderPtrs;
328
331
332 const int m_numVoices;
334 std::map<juce::String, bool> m_autoplay;
335 bool m_xypadTriggerOn{false};
336
337 bool m_addedFromState{false};
338
339 bool m_isRecording{false};
341
343
346
347 KwidgetSynth m_synthPoly; // Synth instance for normal polyphony
348 KwidgetSynth m_synthDrone; // Synth instance for autoplay
349
350 std::unique_ptr<ValueTreeAttachment> m_connectionAttachment;
351 std::unique_ptr<ValueTreeAttachment> m_modulationAttachment;
352 OwnedArray<CustomParameter> m_modulationInstances;
353
354 Array<Kwidget*> m_kwidgets;
355 std::map<String, Kwidget*> m_kwidgetLookup;
356
357 ListenerList<KListener> m_listeners;
358
359 std::atomic<bool> m_shouldInit{true};
360
361 // true only on first plugin Instantiation
363
365
367
368 CriticalSection m_lock;
369
370 WeakReference<KwidgetAudioProcessor>::Master masterReference;
371 friend class WeakReference<KwidgetAudioProcessor>;
372
373 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(KwidgetAudioProcessor)
374 };
375} // namespace krotos
Helper class for handling audio files.
Definition AssetManager.h:18
Internal Kwidget parameter that can receive changes from a GenericParameter.
Definition KParameter.h:17
Definition Kwidget_CoreEngine.h:7
Definition Kwidget_CoreEngine.h:4
Definition Kwidget_Reformer.h:7
Definition Kwidget_Reformer.h:4
Definition Kwidget_TriggerButton.h:7
Definition Kwidget_TriggerButton.h:4
Definition KwidgetAudioProcessor.h:12
static const String autoPlayMaxDuration
Definition KwidgetAudioProcessor.h:228
const Array< Kwidget * > getKwidgetsOfTypeWithAccessPermission(const StringRef kwidgetType, const StringRef reqId)
Get a list of all Kwidgets of type m_kwidgetType that have been added for which access permission can...
KParameter * m_audioOutFxEnabledParameter
Definition KwidgetAudioProcessor.h:326
void notifyAllKwidgetsParametersListeners()
Definition KwidgetAudioProcessor.cpp:1041
bool acceptsMidi() const override
Definition KwidgetAudioProcessor.cpp:1210
void removeKwidgetsExcluding(const StringArray &kwidgetsToExclude)
Definition KwidgetAudioProcessor.cpp:746
Kwidget * getKwidget(const String &kwidgetID)
Attempt to find a kwidget by its ID.
Definition KwidgetAudioProcessor.cpp:1061
void changeProgramName(int index, const String &newName) override
Definition KwidgetAudioProcessor.cpp:1218
void removeKwidgetsOfType(const StringArray &kwidgetTypesToRemove)
Definition KwidgetAudioProcessor.cpp:768
AssetManager assetManager
Definition KwidgetAudioProcessor.h:219
std::map< juce::String, bool > m_autoplay
Definition KwidgetAudioProcessor.h:334
static const StringArray StaticKwidgetIDs
Definition KwidgetAudioProcessor.h:26
bool isRecording()
Definition KwidgetAudioProcessor.cpp:1418
ValueTree getState()
Definition KwidgetAudioProcessor.cpp:1049
void triggerRecordingStop()
Definition KwidgetAudioProcessor.cpp:374
std::vector< Kwidget * > m_audioOuts
Definition KwidgetAudioProcessor.h:314
virtual void autoPlayChanged(Kwidget_Reformer *engine, float newValue) override
Definition KwidgetAudioProcessor.h:276
AudioBuffer< float > extractStereoBuffer(int numChannel1, int numChannel2, AudioBuffer< float > &multiChannelBuffer)
Definition KwidgetAudioProcessor.cpp:430
String & getLastPresetPath()
Definition KwidgetAudioProcessor.cpp:1207
void setRecordersNameData(String currentPresetName)
Definition KwidgetAudioProcessor.cpp:1475
static const StringArray StaticKwidgetTypes
Definition KwidgetAudioProcessor.h:25
const bool isAStaticKwidget(const Kwidget &kwidget)
Definition KwidgetAudioProcessor.cpp:786
const Array< Kwidget * > getKwidgetsOfType(const String kwidgetType)
Get a list of all Kwidgets of type m_kwidgetType that have been added.
void getStateInformation(MemoryBlock &destData) override
Definition KwidgetAudioProcessor.cpp:1148
String m_initPresetPath
Definition KwidgetAudioProcessor.h:329
std::vector< std::unique_ptr< Kwidget > > m_recorders
Definition KwidgetAudioProcessor.h:325
virtual void loopEnableChanged(Kwidget_CoreEngine *engine, float newValue) override
Definition KwidgetAudioProcessor.cpp:491
std::unique_ptr< Kwidget > m_intensityMacro
Definition KwidgetAudioProcessor.h:323
Array< Kwidget * > m_kwidgets
Definition KwidgetAudioProcessor.h:354
bool makeStaticConnectionsForKwidget(Kwidget *kwidget)
Definition KwidgetAudioProcessor.cpp:826
virtual void autoPlayChanged(Kwidget_CoreEngine *engine, float newValue) override
Definition KwidgetAudioProcessor.cpp:485
static SettingsFile settingsFile
Definition KwidgetAudioProcessor.h:221
bool isKwidgetAddedFromState() const
Definition KwidgetAudioProcessor.h:211
void setReadSpecificFiles(bool canRead)
Definition KwidgetAudioProcessor.cpp:1456
bool isBusesLayoutSupported(const BusesLayout &) const override
Definition KwidgetAudioProcessor.cpp:1219
bool m_isRecording
Definition KwidgetAudioProcessor.h:339
const String getProgramName(int index) override
Definition KwidgetAudioProcessor.cpp:1217
Kwidget * addKwidgetWithID(const String &kwidgetType, const String &kwidgetID, bool useEndParams=false, bool isChildKwidget=false)
Definition KwidgetAudioProcessor.cpp:583
size_t m_numBusses
Definition KwidgetAudioProcessor.h:310
void triggerRecordingStart()
Definition KwidgetAudioProcessor.cpp:353
Kwidget * addUserKwidget(const String &kwidgetType, const String &idModifier="", int typeInstanceLimit=0)
Definition KwidgetAudioProcessor.cpp:624
void initialiseMasterFX()
Definition KwidgetAudioProcessor.cpp:225
virtual void soloDeActivated(Kwidget_CoreEngine *engine) override
Definition KwidgetAudioProcessor.cpp:280
bool producesMidi() const override
Definition KwidgetAudioProcessor.cpp:1211
bool setState(const ValueTree &newState)
Definition KwidgetAudioProcessor.cpp:893
CriticalSection m_lock
Definition KwidgetAudioProcessor.h:368
ListenerList< KListener > m_listeners
Definition KwidgetAudioProcessor.h:357
const Array< Kwidget * > & getKwidgets()
Definition KwidgetAudioProcessor.cpp:1059
Kwidget * addChildKwidget(const String &kwidgetType, const String &parentID="", const String &childID="", int typeInstanceLimit=0)
Definition KwidgetAudioProcessor.cpp:600
const bool isAStaticKwidgetType(const String &kType)
Definition KwidgetAudioProcessor.h:198
void addKwidgetInternal(std::unique_ptr< Kwidget > kwidget)
Definition KwidgetAudioProcessor.cpp:1296
static const String DroppedFileNameFormat
Definition KwidgetAudioProcessor.h:230
KwidgetSynth m_synthDrone
Definition KwidgetAudioProcessor.h:348
Array< Kwidget_Recorder * > m_recorderPtrs
Definition KwidgetAudioProcessor.h:327
void removeKListener(KListener *l)
Definition KwidgetAudioProcessor.cpp:495
bool m_editorShouldShowWelcomeDialog
Definition KwidgetAudioProcessor.h:362
void initialiseRecorders()
Definition KwidgetAudioProcessor.cpp:210
bool bypassPostFx
Definition KwidgetAudioProcessor.h:242
void initialiseAudioOutConfiguration()
Definition KwidgetAudioProcessor.cpp:165
bool addConnection(const String &sourceID, const String &destID)
Definition KwidgetAudioProcessor.cpp:793
std::unique_ptr< ValueTreeAttachment > m_connectionAttachment
Definition KwidgetAudioProcessor.h:350
void soloActivatedAllEngines(const String &callingID)
Definition KwidgetAudioProcessor.cpp:290
void removeEngines()
Definition KwidgetAudioProcessor.cpp:143
static const String DefaultDroppedFileNameFormat
Definition KwidgetAudioProcessor.h:231
Kwidget * m_masterAudioOut
Definition KwidgetAudioProcessor.h:316
std::unique_ptr< ValueTreeAttachment > m_modulationAttachment
Definition KwidgetAudioProcessor.h:351
std::unique_ptr< Kwidget > m_masterReverb
Definition KwidgetAudioProcessor.h:322
void setAddedFromState(bool isAddedFromState)
Definition KwidgetAudioProcessor.h:212
const int m_numVoices
Definition KwidgetAudioProcessor.h:332
void prepareToPlay(double sampleRate, int samplesPerBlock) override
Definition KwidgetAudioProcessor.cpp:497
void initialiseSettingsFileValues()
Definition KwidgetAudioProcessor.cpp:150
std::map< String, Kwidget * > m_kwidgetLookup
Definition KwidgetAudioProcessor.h:355
void processBlock(AudioBuffer< float > &, MidiBuffer &) override
Definition KwidgetAudioProcessor.cpp:524
std::atomic< bool > m_shouldInit
Definition KwidgetAudioProcessor.h:359
int getNumPrograms() override
Definition KwidgetAudioProcessor.cpp:1214
KwidgetProcessorGraph m_mainGraph
Definition KwidgetAudioProcessor.h:344
void setCurrentProgram(int index) override
Definition KwidgetAudioProcessor.cpp:1216
WeakReference< KwidgetAudioProcessor >::Master masterReference
Definition KwidgetAudioProcessor.h:370
bool validateState(const ValueTree &newState, bool repairEnabled)
Definition KwidgetAudioProcessor.cpp:1017
virtual void loopEnableChanged(Kwidget_Reformer *engine, float newValue) override
Definition KwidgetAudioProcessor.h:277
KwidgetSynth m_synthPoly
Definition KwidgetAudioProcessor.h:347
std::function< void()> onAutoplayTimerStop
Definition KwidgetAudioProcessor.h:215
virtual void parameterValueChanged(int, float newValue) override
Definition KwidgetAudioProcessor.cpp:384
PresetEventMiddleware m_presetEventMiddleware
Definition KwidgetAudioProcessor.h:366
Kwidget * getKwidgetWithAccessPermission(const String &kwidgetID, const StringRef reqId)
Attempt to find a kwidget by its ID, and use its ResourceLock to guarantee access.
const bool unitTest
Definition KwidgetAudioProcessor.h:239
ParameterManager parameterManager
Definition KwidgetAudioProcessor.h:217
void removeDynamicKwidgets()
Definition KwidgetAudioProcessor.cpp:744
const String getName() const override
Definition KwidgetAudioProcessor.cpp:1209
float m_previousTriggerValue
Definition KwidgetAudioProcessor.h:342
bool m_globalAutoplayOn
Definition KwidgetAudioProcessor.h:333
void loadBundle(const File &bundleDirectory)
Load a preset bundle from a directory.
Definition KwidgetAudioProcessor.cpp:887
void recordOutput(AudioBuffer< float > &buffer, MidiBuffer &midiMessages)
Definition KwidgetAudioProcessor.cpp:560
void setLastPresetPath(String inLastPresetPath)
Definition KwidgetAudioProcessor.cpp:1202
bool m_xypadTriggerOn
Definition KwidgetAudioProcessor.h:335
int getCurrentProgram() override
Definition KwidgetAudioProcessor.cpp:1215
void addKListener(KListener *l)
Definition KwidgetAudioProcessor.cpp:493
std::unique_ptr< ValueTree > presetInfoTree
Definition KwidgetAudioProcessor.h:225
size_t m_numRecorders
Definition KwidgetAudioProcessor.h:312
~KwidgetAudioProcessor() override
Definition KwidgetAudioProcessor.cpp:73
bool m_addedFromState
Definition KwidgetAudioProcessor.h:337
const bool isRecordingTriggerStarted()
Definition KwidgetAudioProcessor.h:196
void timerCallback() override
Definition KwidgetAudioProcessor.cpp:475
void autoPlayGlobalChanged(bool newVal)
Definition KwidgetAudioProcessor.cpp:439
virtual void soloActivated(Kwidget_CoreEngine *engine) override
Definition KwidgetAudioProcessor.cpp:270
String m_lastLoadedPresetPath
Definition KwidgetAudioProcessor.h:330
std::unique_ptr< Kwidget > m_masterFilter
Definition KwidgetAudioProcessor.h:321
bool m_readSpecificFiles
Definition KwidgetAudioProcessor.h:364
void releaseResources() override
Definition KwidgetAudioProcessor.h:45
static const String recorderReleaseTime
Definition KwidgetAudioProcessor.h:229
Kwidget * addKwidgetFromState(const ValueTree &kwidgetTree)
Definition KwidgetAudioProcessor.cpp:1221
void setStateInformation(const void *data, int sizeInBytes) override
Definition KwidgetAudioProcessor.cpp:1179
PluginHostType host
Definition KwidgetAudioProcessor.h:223
void setInitialState()
Definition KwidgetAudioProcessor.cpp:89
bool isMidiEffect() const override
Definition KwidgetAudioProcessor.cpp:1212
bool m_recordingTriggerStarted
Definition KwidgetAudioProcessor.h:340
void removeKwidget(const String &kwidgetID)
Definition KwidgetAudioProcessor.cpp:688
OwnedArray< CustomParameter > m_modulationInstances
Definition KwidgetAudioProcessor.h:352
static const String T2PStrictMode
Definition KwidgetAudioProcessor.h:232
KwidgetAudioProcessor(const BusesProperties &ioLayouts, size_t numBusses, size_t channelsPerStereoBus, size_t numRecorders, size_t numInputChannels, size_t numOutputChannels)
Definition KwidgetAudioProcessor.cpp:25
void initialiseStateListeners()
Definition KwidgetAudioProcessor.cpp:1329
PresetManager presetManager
Definition KwidgetAudioProcessor.h:218
void parameterGestureChanged(int, bool) override
Definition KwidgetAudioProcessor.h:265
KwidgetProcessorGraph m_modulatorGraph
Definition KwidgetAudioProcessor.h:345
void soloDeActivatedAllEngines(const String &callingID)
Definition KwidgetAudioProcessor.cpp:331
virtual void onClickChanged(Kwidget_TriggerButton *triggerButton, float newValue, MIDIMode midiModeValue) override
Definition KwidgetAudioProcessor.cpp:1433
void clearModulation()
Definition KwidgetAudioProcessor.cpp:875
const String m_masterAudioOutID
Definition KwidgetAudioProcessor.h:315
size_t m_channelsPerStereoBus
Definition KwidgetAudioProcessor.h:311
double getTailLengthSeconds() const override
Definition KwidgetAudioProcessor.cpp:1213
Definition Kwidget.h:8
Uses juce::AudioProcessorGraph to store Kwidgets and their audio connections, and process audio throu...
Definition KwidgetProcessorGraph.h:18
A subclass of juce::Synthesiser for creating polyphonic output from a modular arrangement of Kwidgets...
Definition KwidgetSynthesiser.h:62
Holds the overall state of a plugin that uses Kwidgets, including parameters, custom parameters,...
Definition ParameterManager.h:25
Middleware class for managing preset events and hooks.
Definition PresetEventMiddleware.h:101
Helper class for saving and loading presets.
Definition PresetManager.h:16
A class to manage the settings.json file, derived privately from JsonFile.
Definition SettingsFile.h:10
Definition AirAbsorptionFilter.cpp:2
MIDIMode
Definition SampleEngine.h:54
Definition KwidgetAudioProcessor.h:34
virtual void kwidgetAdded(Kwidget *)=0
virtual void kwidgetRemoved(Kwidget *)=0
Definition KwidgetFactory.h:38
Definition KwidgetFactory.h:7