Krotos Modules 3
Loading...
Searching...
No Matches
Kwidget_CoreEngine.cpp
Go to the documentation of this file.
1namespace krotos
2{
3 const String Kwidget_CoreEngine::Parameters::Start = "Start";
4 const String Kwidget_CoreEngine::Parameters::Size = "Size";
5 const String Kwidget_CoreEngine::Parameters::Rate = "Rate";
6 const String Kwidget_CoreEngine::Parameters::Pitch = "Pitch";
7 const String Kwidget_CoreEngine::Parameters::PitchMod = "PitchMod";
8 const String Kwidget_CoreEngine::Parameters::Width = "Width";
9 const String Kwidget_CoreEngine::Parameters::Pan = "Pan";
10 const String Kwidget_CoreEngine::Parameters::Level = "Level";
11 const String Kwidget_CoreEngine::Parameters::SamplerLevel = "SamplerLevel";
12 const String Kwidget_CoreEngine::Parameters::GranularLevel = "GranularLevel";
13 const String Kwidget_CoreEngine::Parameters::VehicleLevel = "VehicleLevel";
14 const String Kwidget_CoreEngine::Parameters::LevelMod = "LevelMod";
15 const String Kwidget_CoreEngine::Parameters::StartRand = "StartRand";
16 const String Kwidget_CoreEngine::Parameters::SizeRand = "SizeRand";
17 const String Kwidget_CoreEngine::Parameters::RateRand = "RateRand";
18 const String Kwidget_CoreEngine::Parameters::PitchRand = "PitchRand";
19 const String Kwidget_CoreEngine::Parameters::WidthRand = "WidthRand";
20 const String Kwidget_CoreEngine::Parameters::PanRand = "PanRand";
21 const String Kwidget_CoreEngine::Parameters::LevelRand = "LevelRand";
22 const String Kwidget_CoreEngine::Parameters::Quench = "Quench";
23 const String Kwidget_CoreEngine::Parameters::NOR = "NOR";
24 const String Kwidget_CoreEngine::Parameters::Robin = "Robin";
25 const String Kwidget_CoreEngine::Parameters::SALoop = "SALoop";
26 const String Kwidget_CoreEngine::Parameters::AutoRate = "AutoRate";
27 const String Kwidget_CoreEngine::Parameters::PhaseLock = "PhaseLock";
28 const String Kwidget_CoreEngine::Parameters::PhaseSync = "PhaseSync";
29 const String Kwidget_CoreEngine::Parameters::Normalise = "Normalise";
30 const String Kwidget_CoreEngine::Parameters::MuteUp = "MuteUp";
31 const String Kwidget_CoreEngine::Parameters::MuteDown = "MuteDown";
32 const String Kwidget_CoreEngine::Parameters::Autoplay = "Autoplay";
33 const String Kwidget_CoreEngine::Parameters::Shape = "Shape";
34 const String Kwidget_CoreEngine::Parameters::GrainMax = "GrainMax";
35 const String Kwidget_CoreEngine::Parameters::Tracking = "Tracking";
36 const String Kwidget_CoreEngine::Parameters::Cycles = "Cycles";
37 const String Kwidget_CoreEngine::Parameters::Smoothing = "Smoothing";
38 const String Kwidget_CoreEngine::Parameters::Sensitivity = "Sensitivity";
39 const String Kwidget_CoreEngine::Parameters::ASize = "ASize";
40 const String Kwidget_CoreEngine::Parameters::ARate = "ARate";
41 const String Kwidget_CoreEngine::Parameters::ASpray = "ASpray";
42 const String Kwidget_CoreEngine::Parameters::AMix = "AMix";
43 const String Kwidget_CoreEngine::Parameters::BSize = "BSize";
44 const String Kwidget_CoreEngine::Parameters::BRate = "BRate";
45 const String Kwidget_CoreEngine::Parameters::BSpray = "BSpray";
46 const String Kwidget_CoreEngine::Parameters::BMix = "BMix";
47 const String Kwidget_CoreEngine::Parameters::Mode = "Mode";
48 const String Kwidget_CoreEngine::Parameters::SamplePaths = "SamplePaths";
49 const String Kwidget_CoreEngine::Parameters::TabIndex = "TabIndex";
50 const String Kwidget_CoreEngine::Parameters::SlotIndex = "SlotIndex";
51 const String Kwidget_CoreEngine::Parameters::Mute = "Mute";
52 const String Kwidget_CoreEngine::Parameters::Solo = "Solo";
53 const String Kwidget_CoreEngine::Parameters::MIDIMode = "MIDIMode";
54 const String Kwidget_CoreEngine::Parameters::Distance = "Distance";
55 const String Kwidget_CoreEngine::Parameters::Selections = "Selections";
56
57 // These strings will be used to populate the oscillator mode combobox
58 const StringArray Kwidget_CoreEngine::ModeNames = {"Sampler", "Granular", "Vehicle"};
59
60 // These strings will be used to populate the MIDI trigger combobox
61 const StringArray Kwidget_CoreEngine::MIDIModeNames = {
62 "All Notes", "C3", "C#3", "D3", "D#3", "E3", "F3", "F#3", "G3", "G#3", "A3", "A#3", "B3",
63 "C4", "C#4", "D4", "D#4", "E4", "F4", "F#4", "G4", "G#4", "A4", "A#4", "B4"};
64
65 /*
66 * Kwidget Version History
67 * 1.0 - Initial version
68 * 1.1 - MIDIMode parameter changed from KParameter to CustomParameter. Additional note options added.
69 */
70 const String Kwidget_CoreEngine::CoreEngineVersion{"1.1"};
71
72 Kwidget_CoreEngine::Kwidget_CoreEngine(const String& id) : Kwidget("CoreEngine", id)
73 {
75
77
78 File embeddingsFile = AssetManager::getMLEmbeddingsFile();
79 if (embeddingsFile.exists())
80 {
81 // Initialise nearest neighbour search
83 std::make_unique<NearestNeighbourSearch>(embeddingsFile.getFullPathName().toStdString());
84 }
85
86 // *** Deprecated: SamplePaths & Selections are now stored in the SamplesTree
89 // ***
90
91 // Samples Tree
93
94 // Called after a user file load action (drag and drop, file browser etc) has finished
95 // Initialises the SampleEngine with the loaded files and deals with any state that needs attached.
97
98 // Assign mute parameter to sample engine
99 m_samplesTree->sampleAdded = [this](SamplesTree::Sample& newSample) {
100 newSample.muteChanged = [this, &newSample]() {
101 m_soSound.getSampleEngine()->setSegmentMuted(newSample.getIndex(), newSample.muteValue);
102 };
103 };
104
105 m_samplesTree->sampleRemoved = [this](ValueTree& childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved) {
107 };
108
109 // SamplesPath parameter has been replaced by the SamplesTree, however this is left in for backwards
110 // compatibility
111 param.valueChanged = [this](const var& value) {
112 auto files = StringArray::fromLines(value.toString());
113
115
116 // SamplesTree backwards compatibility
117 // Parse file paths from parameter and insert into SamplesTree
118 AudioFormatManager formatManager;
119 formatManager.registerBasicFormats();
120 for (auto file : files)
121 {
122 auto convertedFile = AssetManager::convertFilePath(file);
123
124 File directoryPath(convertedFile);
125
126 if (directoryPath.isDirectory())
127 {
128 // Recursively add files from directories
129 auto foundFiles = directoryPath.findChildFiles(
130 File::findFiles, true, formatManager.getWildcardForAllFormats() + ";*" + ".kaf");
131 for (auto f : foundFiles)
132 {
133 samplesTree->updateSample(f.getFileNameWithoutExtension(), f.getFullPathName());
134 }
135 }
136 else
137 {
138 samplesTree->updateSample(convertedFile.getFileNameWithoutExtension(), file);
139 }
140 }
141
142 // Notify that the drop has completed, this will load the samples into the SampleEngine
143 samplesTree->dropCompleted();
144 }; // End SamplePaths valueChanged
145
148 auto midimodeParam =
150 midimodeParam->valueChanged = [this](const var& value) {
151 String newMode = value;
152 m_activeMIDIMode = static_cast<MIDIMode>(MIDIModeNames.indexOf(newMode));
153 };
154
155 init();
156
157 addParameterCallback(Parameters::Tracking, [this](float newValue) {
161 });
162
163 addParameterCallback(Parameters::Cycles, [this](float newValue) {
167 });
168
169 addParameterCallback(Parameters::Mode, [this](float newValue) {
170 GranularPlaybackMode activeMode = static_cast<GranularPlaybackMode>(
171 newValue * static_cast<float>(static_cast<int>(GranularPlaybackMode::NUM_MODES) - 1));
173 });
174
175 // Add a backwards compatibility callback for the legacy MIDIMode KParameter.
176 // This is only called if the incoming state is older than v1.1
177 addVersionedParameterCallback("1.1", Parameters::MIDIMode, [this](float newValue) {
178 const int oldNumberOfModes(5);
179 MIDIMode activeMode = static_cast<MIDIMode>(newValue * static_cast<float>(oldNumberOfModes));
180 setActiveMidiMode(activeMode);
181 });
182
183 // Broadcast message to listeners
184 addParameterCallback(Parameters::Solo, [this](float newValue) {
185 float muteVal = getParameter(Parameters::Mute)->get();
186
188 {
189 soloActivate();
190 }
191 else if (muteVal <= ParameterManager::OnOffThreshold && newValue <= ParameterManager::OnOffThreshold &&
193 {
195 }
196
197 m_previousSoloValue = newValue;
198 });
199
200 addParameterCallback(Parameters::Mute, [this](float newValue) {
201 float soloVal = getParameter(Parameters::Solo)->get();
203 {
205 }
206 });
207
209 [this](float newValue) { m_enableNOR = newValue > ParameterManager::OnOffThreshold; });
210
211 addParameterCallback(Parameters::Autoplay, [this](float newValue) {
212 m_listeners.call(&Listener::autoPlayChanged, this, newValue);
214 });
215
216 addParameterCallback(Parameters::SALoop, [this](float newValue) {
217 m_listeners.call(&Listener::loopEnableChanged, this, newValue);
218 });
219 }
220
221 void Kwidget_CoreEngine::loadFiles(const StringArray& files)
222 {
224 Array<File> filesToLoad;
225 try
226 {
227 filesToLoad = AssetManager::loadFiles(files, true, m_readSpecificFiles);
228 }
229 catch (EncryptedAssetException& ex)
230 {
232 }
233
234 if (!filesToLoad.isEmpty())
235 {
236 m_soSound.loadSounds(filesToLoad, false);
237 refreshState();
238 }
239
240#if ENABLE_REFORMER
241#ifdef ENABLE_COREENGINE_ANALYSIS
242 // Non reformer build CoreEngine will never call Analyse
243 // - in future it may have red line analysis for vehicles
244 if (!filesToLoad.isEmpty()) // no need to analyse when there are no samples
245 {
247 }
248#endif
249#endif
250 }
251
253 {
254 jassert(m_samplesTree);
255
256 // Todo - Refactor sample engine to populate from tree so this isn't necessary.
257 // Having to set the data from state after load since the samples don't exist before loadSounds is called.
258 for (int i = 0; i < m_samplesTree->getParameterTree().getNumChildren(); i++)
259 {
261 i, static_cast<bool>(m_samplesTree->getChild(i)[SamplesTree::Property::Mute]));
262 }
263
264 // This is a bit of a ~hack~ 'quick fix' to get the selection ranges to be set correctly.
265 // Empty ranges passed into setSelectionRanges are replaced with a default range calculated from 0 to
266 // segmentLength. Todo - Populate the sample engine directly from the SamplesTree
268 // The following get ensures that the default selections are saved.
270 }
271
277 {
278 String thisID = getKwidgetID();
279
280 bool stateChanging = isStateChanging();
281
282 if (getChildKwidgets().size() == 0)
283 {
284 // Add an ADSR for gain
286 processor.addChildKwidget(KwidgetFactory::KwidgetType::Adsr, thisID, "Adsr", stateChanging));
287 // Connect the modulation output of ADSR1 to the gain parameter of the new Core Engine kwidget
288 processor.parameterManager.addModulation(m_childKwidgets.back()->getKwidgetID(), 0, this->getKwidgetID(),
291
292 // Add an ADSR for pitch
294 processor.addChildKwidget(KwidgetFactory::KwidgetType::ScaledAdsr, thisID, "Adsr", stateChanging));
295 // Connect the modulation output of ADSR1 to the gain parameter of the new Core Engine kwidget
296 processor.parameterManager.addModulation(m_childKwidgets.back()->getKwidgetID(), 0, this->getKwidgetID(),
299 }
300 else
301 {
302 for (auto k : m_childKwidgets)
303 {
304 if (k->getKwidgetType() == KwidgetFactory::KwidgetType::Adsr)
305 {
306 processor.parameterManager.addModulation(k->getKwidgetID(), 0, this->getKwidgetID(),
309 }
310 else if (k->getKwidgetType() == KwidgetFactory::KwidgetType::ScaledAdsr)
311 {
312 processor.parameterManager.addModulation(k->getKwidgetID(), 0, this->getKwidgetID(),
315 }
316 }
317 }
318 }
319
321
322 inline bool Kwidget_CoreEngine::isDroneVoice(int voiceIdx)
323 {
324 return (voiceIdx >= NUM_VOICES_POLY) && (voiceIdx < (NUM_VOICES_POLY + NUM_VOICES_DRONE));
325 }
326
328 {
329 bool activeChild = false;
330 for (auto& child : this->getChildKwidgets())
331 {
332 if (child)
333 {
334 activeChild = child->isActive(voiceIdx);
335 break;
336 }
337 }
338
339 // We are only considered active if a child is active, and we are active
340 return activeChild && getVoice(voiceIdx)->isActive();
341 }
342
343 void Kwidget_CoreEngine::noteOnInternal(int voiceIdx, int midiNote, float velocity)
344 {
345 midiNote &= MIDI_NOTE_MASK; // Mask out any flags - keep only the MIDI note number
346 Kwidget::noteOn(voiceIdx, midiNote, velocity);
347
348 for (auto& child : this->getChildKwidgets())
349 {
350 child->noteOn(voiceIdx, midiNote, velocity);
351 }
352
353 if (auto* sampleEngine = m_soSound.getSampleEngine())
354 {
355 m_samplesTree->setSampleIndex(sampleEngine->getNextSegmentIndex());
356 }
357 }
358
359 void Kwidget_CoreEngine::noteOn(int voiceIdx, int midiNote, float velocity)
360 {
361 if (isDroneVoice(voiceIdx)) // If this is a drone voice
362 {
363 if (midiNote & MIDI_NOTE_FLAG_FLUSH) // and it is a 'flush' event
364 {
365 noteClearedInternal(voiceIdx);
366 }
367 else if (midiNote & MIDI_NOTE_FLAG_DRONE_NOTEUP) // and it is a 'note up' event
368 {
369 if (!m_autoplayEnabled) // and autoplay has been switched off
370 {
371 noteOffInternal(voiceIdx, velocity);
372 }
373 }
374 else // else this is a drone channel 'note down' event
375 {
377 {
378 noteOnInternal(voiceIdx, midiNote, velocity);
379 }
380 }
381 }
382 else // This is a normal polyphonic note down event
383 {
384 if (!m_autoplayEnabled) // Only respond to notes if autoplay is off
385 {
386 bool noteNORFlag = static_cast<bool>(midiNote & MIDI_NOTE_FLAG_NOR);
387 bool noteNORFlagMatchesMode = noteNORFlag == m_enableNOR;
388 if ((m_activeMIDIMode == MIDIMode::All) && noteNORFlagMatchesMode)
389 {
390 noteOnInternal(voiceIdx, midiNote, velocity);
391 }
392 else
393 {
394 auto triggerNote = MIDI_NOTE_NUMBER_C3 + static_cast<int>(m_activeMIDIMode) - 1;
395
396 if (((midiNote & MIDI_NOTE_MASK) == triggerNote) && noteNORFlagMatchesMode)
397 {
398 noteOnInternal(voiceIdx, MIDI_NOTE_NUMBER_C3, velocity);
399 }
400 }
401 }
402 }
403 }
404
405 void Kwidget_CoreEngine::noteOffInternal(int voiceIdx, float velocity)
406 {
407 Kwidget::noteOff(voiceIdx, velocity);
408
409 for (auto& child : this->getChildKwidgets())
410 {
411 child->noteOff(voiceIdx, velocity);
412 }
413 }
414
415 void Kwidget_CoreEngine::noteOff(int voiceIdx, float velocity)
416 {
417 if (!isDroneVoice(voiceIdx)) // If we are a drone voice, stop note can never switch us off, only startNote with
418 // stop flag
419 {
420 noteOffInternal(voiceIdx, velocity);
421 }
422 }
423
425 {
426 Kwidget::noteCleared(voiceIdx);
427
428 for (auto& child : this->getChildKwidgets())
429 {
430 child->noteCleared(voiceIdx);
431 }
432 }
433
435 {
436 if (!isDroneVoice(voiceIdx)) // If we are a drone voice, stop note can never switch us off, only startNote with
437 // stop flag
438 {
439 noteClearedInternal(voiceIdx);
440 }
441 }
442
455 std::vector<Kwidget::ParameterInfo> Kwidget_CoreEngine::createParameters()
456 {
457 return {// NormalisableRange( rangeStart, rangeEnd, intervalValue, skewFactor, useSymmetricSkew ) // For
458 // reference
459 // paramID, paramName, NormalisableRange<float> range, defaultValue
460 {Parameters::Start, Parameters::Start, {0.0f, 100.0f, 0.1f}, 50.0f},
461 {Parameters::Size, Parameters::Size, {0.0f, 100.0f, 0.1f}, 100.0f},
462 {Parameters::Rate, Parameters::Rate, {0.0f, 1000.0f, 0.001f, 0.3f}, 0.0f},
463 {Parameters::Pitch, Parameters::Pitch, {-48.0f, 48.0f, 0.01f, 0.5f, true}, 0.0f},
464 {Parameters::PitchMod, Parameters::PitchMod, {-48.0f, 48.0f}, 0.0f},
465 {Parameters::Width, Parameters::Width, {0.0f, 1.0f, 0.001f, 0.5f}, 0.0f},
466 {Parameters::Pan, Parameters::Pan, {-1.0f, 1.0f}, 0.0f},
470 {-96.0f, 12.0f, 1e-2f, DSPConstants::defaultSliderSkew},
471 0.0f},
474 {-96.0f, 12.0f, 1e-2f, DSPConstants::defaultSliderSkew},
475 0.0f},
478 {-96.0f, 12.0f, 1e-2f, DSPConstants::defaultSliderSkew},
479 0.0f},
480 {Parameters::LevelMod, Parameters::LevelMod, {0.0f, 1.0f}, 0.0f},
481 {Parameters::StartRand, Parameters::StartRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
482 {Parameters::SizeRand, Parameters::SizeRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
483 {Parameters::RateRand, Parameters::RateRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
484 {Parameters::PitchRand, Parameters::PitchRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
485 {Parameters::WidthRand, Parameters::WidthRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
486 {Parameters::PanRand, Parameters::PanRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
487 {Parameters::LevelRand, Parameters::LevelRand, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
488 {Parameters::Quench, Parameters::Quench, {0.0f, 1.0f}, 0.0f},
489 {Parameters::NOR, Parameters::NOR, {0.0f, 1.0f}, 0.0f},
490 {Parameters::Robin, Parameters::Robin, {0.0f, 1.0f}, 0.0f},
491 {Parameters::SALoop, Parameters::SALoop, {0.0f, 1.0f}, 0.0f},
492 {Parameters::AutoRate, Parameters::AutoRate, {0.0f, 1.0f}, 0.0f},
493 {Parameters::PhaseLock, Parameters::PhaseLock, {0.0f, 1.0f}, 0.0f},
494 {Parameters::PhaseSync, Parameters::PhaseSync, {0.0f, 1.0f}, 0.0f},
495 {Parameters::Normalise, Parameters::Normalise, {0.0f, 1.0f}, 0.0f},
496 {Parameters::MuteUp, Parameters::MuteUp, {0.0f, 1.0f}, 0.0f},
497 {Parameters::MuteDown, Parameters::MuteDown, {0.0f, 1.0f}, 0.0f},
498 {Parameters::Autoplay, Parameters::Autoplay, {0.0f, 1.0f}, 0.0f},
499 {Parameters::Shape, Parameters::Shape, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.0f},
500 {Parameters::GrainMax, Parameters::GrainMax, {1.f, 400.f, 1.f, 1.0f}, 25.0f},
501 {Parameters::Tracking, Parameters::Tracking, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.f},
502 {Parameters::Cycles, Parameters::Cycles, {500.0f, 20000.0f, 1.0f}, 1500.0f},
503 {Parameters::Smoothing, Parameters::Smoothing, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.5f},
504 {Parameters::Sensitivity, Parameters::Sensitivity, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.5f},
505 {Parameters::ASize, Parameters::ASize, {0.0f, 25.0f, 0.01f, 1.0f}, 5.f},
506 {Parameters::ARate, Parameters::ARate, {1.0f, 100.0f, 1.0f}, 1.0f},
507 {Parameters::ASpray, Parameters::ASpray, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.5f},
508 {Parameters::AMix, Parameters::AMix, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.5f},
509 {Parameters::BSize, Parameters::BSize, {0.0f, 25.0f, 0.01f, 1.0f}, 5.f},
510 {Parameters::BRate, Parameters::BRate, {1.0f, 100.0f, 1.0f}, 1.0f},
511 {Parameters::BSpray, Parameters::BSpray, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.5f},
512 {Parameters::BMix, Parameters::BMix, {0.0f, 1.0f, 0.000001f, 1.0f}, 0.5f},
513 {Parameters::Mode, Parameters::Mode, {0.0f, 1.0f}, 0.0f},
514 {Parameters::Mute, Parameters::Mute, {0.0f, 1.0f}, 0.0f},
515 {Parameters::Solo, Parameters::Solo, {0.0f, 1.0f}, 0.0f},
516 {Parameters::MIDIMode, Parameters::MIDIMode, {0.0f, 1.0f}, 0.0f},
517 {Parameters::Distance, Parameters::Distance, {1.0f, 70.0f, 1.0f, 1.0f}, 1.0f}};
518 }
519
520 std::unique_ptr<KwidgetProcessor> Kwidget_CoreEngine::createProcessor()
521 {
522 return std::make_unique<KwidgetProcessor_CoreEngine>(*this, m_soSound);
523 }
524
525 std::unique_ptr<KwidgetGUI> Kwidget_CoreEngine::createGUI()
526 {
527 return std::make_unique<KwidgetGUI_CoreEngine>(*this, m_soSound);
528 }
529
530 String Kwidget_CoreEngine::getGuiName(int id) { return m_coreEngineGuiTypes.at(id).first; }
531
532 void Kwidget_CoreEngine::addListener(Listener* listenerToAdd) { m_listeners.add(listenerToAdd); }
533
535 {
536 jassert(m_listeners.contains(listenerToRemove));
537 m_listeners.remove(listenerToRemove);
538 }
539
541 {
542 m_listeners.call([this](Listener& l) { l.soloActivated(this); });
543 }
544
546 {
547 m_listeners.call([this](Listener& l) { l.soloDeActivated(this); });
548 }
549
551 {
552 // update vtree state
554 if (midiParameter != nullptr)
555 {
556 midiParameter->setValue(MIDIModeNames[static_cast<int>(newMidiMode)]);
557 }
558
559 // set sample engine MIDI
561 m_activeMIDIMode = newMidiMode;
562 }
563
565} // namespace krotos
static Array< File > loadFiles(const StringArray &, const bool, const bool willLoadSpecificFiles)
Definition AssetManager.cpp:475
static File getMLEmbeddingsFile()
Definition AssetManager.cpp:413
static File convertFilePath(const String &)
Definition AssetManager.cpp:604
static void alertNonSubscriber()
Definition AssetManagerUI.cpp:17
A wrapper around juce::ValueTree designed to store custom plugin state (strings, arrays,...
Definition CustomParameter.h:9
void setValue(const var &newValue, bool selfUpdate=false)
Definition CustomParameter.cpp:46
const ValueTree & getParameterTree() const
Definition CustomParameterTree.h:55
ValueTree getChild(int index) const
Definition CustomParameterTree.cpp:54
static const float defaultSliderSkew
Definition constants.h:26
An exception for asset manager, specifc to encrypted assets.
Definition AssetManager.h:167
@ Unipolar
Definition KAttachment.h:122
float get() const
Definition KParameter.cpp:126
void set(float newValue)
Definition KParameter.cpp:128
void setTrackingCycles(float newValue)
Definition KrotosAudioBufferDSP.h:482
void analyse()
analyse Analyses the audio waveform stored in the buffer according to the selected scheme This method...
Definition KrotosAudioBufferDSP.cpp:35
void setTrackingValue(float newValue)
Definition KrotosAudioBufferDSP.h:480
void setAnalysisScheme(AnalysisScheme scheme)
Definition KrotosAudioBufferDSP.h:506
void canReadSpecificFiles(bool canRead)
Definition KrotosSynthesiserSound.h:46
SampleEngine * getSampleEngine() override
Definition KrotosSynthesiserSound.h:44
int loadSounds(juce::Array< File > audioSampleFiles, bool getNearest)
Definition KrotosSynthesiserSound.cpp:139
Definition Kwidget_CoreEngine.h:7
virtual void loopEnableChanged(Kwidget_CoreEngine *engine, float newValue)=0
virtual void soloActivated(Kwidget_CoreEngine *engine)=0
virtual void autoPlayChanged(Kwidget_CoreEngine *engine, float newValue)=0
virtual void soloDeActivated(Kwidget_CoreEngine *engine)=0
void noteOnInternal(int voiceIdx, int midiNote, float velocity)
Definition Kwidget_CoreEngine.cpp:343
SamplesTree * m_samplesTree
Definition Kwidget_CoreEngine.h:176
std::unique_ptr< NearestNeighbourSearch > m_nearestNeighbourSearch
Definition Kwidget_CoreEngine.h:132
std::unique_ptr< KwidgetProcessor > createProcessor() override
Definition Kwidget_CoreEngine.cpp:520
static const StringArray ModeNames
Definition Kwidget_CoreEngine.h:79
bool m_readSpecificFiles
Definition Kwidget_CoreEngine.h:172
static const String CoreEngineVersion
Definition Kwidget_CoreEngine.h:129
void createNestedKwidgets(KwidgetAudioProcessor &) override
Definition Kwidget_CoreEngine.cpp:276
void soloDeActivate()
Called When the state of our solo button is selected false [SOLO].
Definition Kwidget_CoreEngine.cpp:545
void noteCleared(int voiceIdx) override
Definition Kwidget_CoreEngine.cpp:434
Kwidget_CoreEngine(const String &id)
Definition Kwidget_CoreEngine.cpp:72
std::unique_ptr< KwidgetGUI > createGUI() override
Definition Kwidget_CoreEngine.cpp:525
std::vector< ParameterInfo > createParameters() override
Definition Kwidget_CoreEngine.cpp:455
float m_previousSoloValue
Definition Kwidget_CoreEngine.h:174
bool isDroneVoice(int voiceIdx)
Definition Kwidget_CoreEngine.cpp:322
MIDIMode m_activeMIDIMode
Definition Kwidget_CoreEngine.h:158
KrotosSampleOscillatorSound m_soSound
Definition Kwidget_CoreEngine.h:160
void setActiveMidiMode(MIDIMode newMidiMode)
Definition Kwidget_CoreEngine.cpp:550
bool m_enableNOR
Definition Kwidget_CoreEngine.h:157
static const StringArray MIDIModeNames
Definition Kwidget_CoreEngine.h:80
bool m_autoplayEnabled
Definition Kwidget_CoreEngine.h:159
void removeListener(Listener *listenerToRemove)
Definition Kwidget_CoreEngine.cpp:534
const std::vector< std::pair< String, GuiTypes > > m_coreEngineGuiTypes
Definition Kwidget_CoreEngine.h:138
void refreshState()
Definition Kwidget_CoreEngine.cpp:252
void loadFiles(const StringArray &files)
Definition Kwidget_CoreEngine.cpp:221
void noteOff(int voiceIdx, float velocity) override
Definition Kwidget_CoreEngine.cpp:415
void addListener(Listener *listenerToAdd)
Definition Kwidget_CoreEngine.cpp:532
void noteClearedInternal(int voiceIdx)
Definition Kwidget_CoreEngine.cpp:424
bool isMlEnabled()
Returns true if the ML nearest neighbour search has initialised successfully and is ready for use.
Definition Kwidget_CoreEngine.cpp:320
void soloActivate()
Called When the state of our solo button is selected true [SOLO].
Definition Kwidget_CoreEngine.cpp:540
String getGuiName(int id) override
Definition Kwidget_CoreEngine.cpp:530
bool isActive(int voiceIdx) override
Definition Kwidget_CoreEngine.cpp:327
void noteOn(int voiceIdx, int midiNote, float velocity) override
Definition Kwidget_CoreEngine.cpp:359
void noteOffInternal(int voiceIdx, float velocity)
Definition Kwidget_CoreEngine.cpp:405
ListenerList< Listener > m_listeners
Definition Kwidget_CoreEngine.h:170
MIDIMode getActiveMidiMode()
Definition Kwidget_CoreEngine.cpp:564
Definition KwidgetAudioProcessor.h:12
Kwidget * addChildKwidget(const String &kwidgetType, const String &parentID="", const String &childID="", int typeInstanceLimit=0)
Definition KwidgetAudioProcessor.cpp:600
ParameterManager parameterManager
Definition KwidgetAudioProcessor.h:217
Definition Kwidget.h:8
void init()
Definition Kwidget.cpp:27
std::vector< Kwidget * > & getChildKwidgets()
Definition Kwidget.h:219
void addVersionedParameterCallback(StringRef kwidgetVersionTheParameterChangedIn, const String &paramID, std::function< void(float)> callback)
Add an action to be performed when a specified parameter of a specific kwidget version changes value....
Definition Kwidget.cpp:464
void addChildKwidget(Kwidget *child)
Definition Kwidget.cpp:325
void setKwidgetVersion(const String &kwidgetVersionString)
Definition Kwidget.cpp:371
KwidgetProcessor * getVoice(int idx) const
Definition Kwidget.cpp:38
virtual void noteOn(int voiceIdx, int midiNote, float velocity)
Definition Kwidget.cpp:67
virtual void noteCleared(int voiceIdx)
Definition Kwidget.cpp:78
std::vector< Kwidget * > m_childKwidgets
Definition Kwidget.h:319
KParameter * getParameter(const String &parameterID) const noexcept
Get a raw pointer to a KParameter belonging to this Kwidget's KwidgetProcessor. Useful for low overhe...
Definition Kwidget.cpp:168
CustomParameter * createAndAddCustomParameter(const String &paramID, const var &value)
Definition Kwidget.cpp:419
const String & getKwidgetID() const
Definition Kwidget.cpp:367
CustomParameter * getCustomParameter(const String &parameterID)
Definition Kwidget.cpp:188
bool isStateChanging()
Definition Kwidget.h:230
virtual void noteOff(int voiceIdx, float velocity)
Definition Kwidget.cpp:76
void addParameterCallback(const String &paramID, std::function< void(float)> callback)
Definition Kwidget.cpp:458
virtual bool isActive()
Definition KwidgetProcessor.cpp:24
ValueTree addModulation(const String &sourceID, int modulatorIdx, const String &destinationID, const String &paramID, float depth=DefaultModDepth, KAttachment::Polarity=KAttachment::Polarity::Bipolar)
Definition ParameterManager.cpp:159
static const float OnOffThreshold
The threshold at which a toggle, or "on/off" parameter should change from on to off stage.
Definition ParameterManager.h:45
void setGranularOscillatorTypeIndicator(GranularPlaybackMode newType)
Definition SampleEngine.h:133
void setSegmentMuted(int segmentIndex, bool isMuted)
'Mutes' an audio segment in the sampler. In effect, this just means the sample is skipped in the roun...
Definition SampleEngine.cpp:372
void setSelectionRanges(const std::vector< Range< int > > &selectionRanges)
Sets the selection ranges of the audio segments.
Definition SampleEngine.cpp:106
std::vector< Range< int > > getSelectionRanges()
Returns an array of segment selection ranges.
Definition SampleEngine.cpp:96
void setGranularOscillatorMIDIMode(MIDIMode newMode)
Definition SampleEngine.h:141
A wrapper around an individual sample in the tree, with parameters for mute, solo,...
Definition SampleDataTree.h:38
void setSampleIndex(int index)
Set the current index of the sample playback queue.
Definition SampleDataTree.cpp:193
std::function< void()> dropCompleted
Assign this to do something once a "drop" action has been completed. This is called internally by the...
Definition SampleDataTree.h:175
std::function< void(Sample &newSample)> sampleAdded
Assign this to do something when a sample has been added to the tree.
Definition SampleDataTree.h:151
void setSampleSelections(const std::vector< Range< int > > &selections)
Set the selection ranges for all samples in the tree. The index of the selection range in the vector ...
Definition SampleDataTree.cpp:157
std::vector< Range< int > > getSampleSelections() const
Get the selection ranges for all samples in the tree. The index of the selection range in the vector ...
Definition SampleDataTree.cpp:145
std::function< void(ValueTree &childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved)> sampleRemoved
Assign this to do something when a sample has been removed from the tree.
Definition SampleDataTree.h:155
const StringArray getFiles() const
Compatibility method for KrotosSampleOscillatorSound which requires samples to be loaded all at once ...
Definition SampleDataTree.cpp:122
Definition AirAbsorptionFilter.cpp:2
static const int MIDI_NOTE_MASK
Definition OscillatorUtils.h:21
static const int NUM_VOICES_POLY
Definition OscillatorUtils.h:32
static const int NUM_VOICES_DRONE
Definition OscillatorUtils.h:33
GranularPlaybackMode
Definition SampleEngine.h:46
static const int MIDI_NOTE_FLAG_FLUSH
Definition OscillatorUtils.h:24
static const int MIDI_NOTE_FLAG_NOR
Definition OscillatorUtils.h:25
static const int MIDI_NOTE_FLAG_DRONE_NOTEUP
Definition OscillatorUtils.h:23
static const int MIDI_NOTE_NUMBER_C3
Definition OscillatorUtils.h:26
MIDIMode
Definition SampleEngine.h:54
static const String MIDIMode
Definition Kwidget_CoreEngine.h:71
static const String NOR
Definition Kwidget_CoreEngine.h:41
static const String TabIndex
Definition Kwidget_CoreEngine.h:67
static const String Mode
Definition Kwidget_CoreEngine.h:65
static const String PitchRand
Definition Kwidget_CoreEngine.h:36
static const String BMix
Definition Kwidget_CoreEngine.h:64
static const String BSpray
Definition Kwidget_CoreEngine.h:63
static const String PhaseSync
Definition Kwidget_CoreEngine.h:46
static const String Width
Definition Kwidget_CoreEngine.h:26
static const String PhaseLock
Definition Kwidget_CoreEngine.h:45
static const String Selections
Definition Kwidget_CoreEngine.h:73
static const String SizeRand
Definition Kwidget_CoreEngine.h:34
static const String Distance
Definition Kwidget_CoreEngine.h:72
static const String Solo
Definition Kwidget_CoreEngine.h:70
static const String MuteUp
Definition Kwidget_CoreEngine.h:48
static const String SamplerLevel
Definition Kwidget_CoreEngine.h:29
static const String SamplePaths
Definition Kwidget_CoreEngine.h:66
static const String VehicleLevel
Definition Kwidget_CoreEngine.h:31
static const String Pan
Definition Kwidget_CoreEngine.h:27
static const String Robin
Definition Kwidget_CoreEngine.h:42
static const String Start
Definition Kwidget_CoreEngine.h:21
static const String Mute
Definition Kwidget_CoreEngine.h:69
static const String AMix
Definition Kwidget_CoreEngine.h:60
static const String LevelMod
Definition Kwidget_CoreEngine.h:32
static const String GrainMax
Definition Kwidget_CoreEngine.h:52
static const String Pitch
Definition Kwidget_CoreEngine.h:24
static const String PanRand
Definition Kwidget_CoreEngine.h:38
static const String Level
Definition Kwidget_CoreEngine.h:28
static const String Size
Definition Kwidget_CoreEngine.h:22
static const String Smoothing
Definition Kwidget_CoreEngine.h:55
static const String Rate
Definition Kwidget_CoreEngine.h:23
static const String LevelRand
Definition Kwidget_CoreEngine.h:39
static const String ARate
Definition Kwidget_CoreEngine.h:58
static const String WidthRand
Definition Kwidget_CoreEngine.h:37
static const String Tracking
Definition Kwidget_CoreEngine.h:53
static const String Normalise
Definition Kwidget_CoreEngine.h:47
static const String Autoplay
Definition Kwidget_CoreEngine.h:50
static const String StartRand
Definition Kwidget_CoreEngine.h:33
static const String BRate
Definition Kwidget_CoreEngine.h:62
static const String SALoop
Definition Kwidget_CoreEngine.h:43
static const String BSize
Definition Kwidget_CoreEngine.h:61
static const String RateRand
Definition Kwidget_CoreEngine.h:35
static const String PitchMod
Definition Kwidget_CoreEngine.h:25
static const String AutoRate
Definition Kwidget_CoreEngine.h:44
static const String GranularLevel
Definition Kwidget_CoreEngine.h:30
static const String Shape
Definition Kwidget_CoreEngine.h:51
static const String ASpray
Definition Kwidget_CoreEngine.h:59
static const String Sensitivity
Definition Kwidget_CoreEngine.h:56
static const String SlotIndex
Definition Kwidget_CoreEngine.h:68
static const String Quench
Definition Kwidget_CoreEngine.h:40
static const String Cycles
Definition Kwidget_CoreEngine.h:54
static const String MuteDown
Definition Kwidget_CoreEngine.h:49
static const String ASize
Definition Kwidget_CoreEngine.h:57
static const String ScaledAdsr
Definition KwidgetFactory.h:23
static const String Adsr
Definition KwidgetFactory.h:19
static const Identifier Mute
Definition SampleDataTree.h:22
static const Identifier Samples
Definition SampleDataTree.h:13