27 m_faderbankCtrlComponent = std::make_unique<Mema::FaderbankControlComponent>();
28 m_faderbankCtrlComponent->onInputMutesChanged = [=](
const std::map<std::uint16_t, bool>& inputMuteStates) {
29 std::map<std::uint16_t, bool> outputMuteStates;
30 std::map<std::uint16_t, std::map<std::uint16_t, bool>> crosspointStates;
31 std::map<std::uint16_t, std::map<std::uint16_t, float>> crosspointValues;
33 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
35 m_faderbankCtrlComponent->onOutputMutesChanged = [=](
const std::map<std::uint16_t, bool>& outputMuteStates) {
36 std::map<std::uint16_t, bool> inputMuteStates;
37 std::map<std::uint16_t, std::map<std::uint16_t, bool>> crosspointStates;
38 std::map<std::uint16_t, std::map<std::uint16_t, float>> crosspointValues;
40 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
42 m_faderbankCtrlComponent->onCrosspointStatesChanged = [=](
const std::map<std::uint16_t, std::map<std::uint16_t, bool>>& crosspointStates) {
43 std::map<std::uint16_t, bool> inputMuteStates;
44 std::map<std::uint16_t, bool> outputMuteStates;
45 std::map<std::uint16_t, std::map<std::uint16_t, float>> crosspointValues;
47 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
49 m_faderbankCtrlComponent->onCrosspointValuesChanged = [=](
const std::map<std::uint16_t, std::map<std::uint16_t, float>>& crosspointValues) {
50 std::map<std::uint16_t, bool> inputMuteStates;
51 std::map<std::uint16_t, bool> outputMuteStates;
52 std::map<std::uint16_t, std::map<std::uint16_t, bool>> crosspointStates;
54 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
56 addChildComponent(m_faderbankCtrlComponent.get());
58 m_panningCtrlComponent = std::make_unique<Mema::PanningControlComponent>();
59 m_panningCtrlComponent->onInputMutesChanged = [=](
const std::map<std::uint16_t, bool>& inputMuteStates) {
60 std::map<std::uint16_t, bool> outputMuteStates;
61 std::map<std::uint16_t, std::map<std::uint16_t, bool>> crosspointStates;
62 std::map<std::uint16_t, std::map<std::uint16_t, float>> crosspointValues;
64 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
66 m_panningCtrlComponent->onOutputMutesChanged = [=](
const std::map<std::uint16_t, bool>& outputMuteStates) {
67 std::map<std::uint16_t, bool> inputMuteStates;
68 std::map<std::uint16_t, std::map<std::uint16_t, bool>> crosspointStates;
69 std::map<std::uint16_t, std::map<std::uint16_t, float>> crosspointValues;
71 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
73 m_panningCtrlComponent->onCrosspointStatesChanged = [=](
const std::map<std::uint16_t, std::map<std::uint16_t, bool>>& crosspointStates) {
74 std::map<std::uint16_t, bool> inputMuteStates;
75 std::map<std::uint16_t, bool> outputMuteStates;
76 std::map<std::uint16_t, std::map<std::uint16_t, float>> crosspointValues;
78 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
80 m_panningCtrlComponent->onCrosspointValuesChanged = [=](
const std::map<std::uint16_t, std::map<std::uint16_t, float>>& crosspointValues) {
81 std::map<std::uint16_t, bool> inputMuteStates;
82 std::map<std::uint16_t, bool> outputMuteStates;
83 std::map<std::uint16_t, std::map<std::uint16_t, bool>> crosspointStates;
85 onMessageReadyToSend(std::make_unique<Mema::ControlParametersMessage>(inputMuteStates, outputMuteStates, crosspointStates, crosspointValues)->getSerializedMessage());
87 m_panningCtrlComponent->setExternalControlSettings(std::get<0>(m_externalAdmOscSettings), std::get<1>(m_externalAdmOscSettings), std::get<2>(m_externalAdmOscSettings));
88 addChildComponent(m_panningCtrlComponent.get());
90 m_pluginCtrlComponent = std::make_unique<Mema::PluginControlComponent>();
91 m_pluginCtrlComponent->onPluginParameterValueChanged = [=](std::uint16_t parameterIndex, std::string parameterId,
float value) {
92 DBG(juce::String(__FUNCTION__) +
" sending to net (" + juce::String(parameterIndex) +
"; " + juce::String(parameterId) +
"; " + juce::String(value) +
") ...");
94 onMessageReadyToSend(std::make_unique<Mema::PluginParameterValueMessage>(parameterIndex, parameterId, value)->getSerializedMessage());
96 m_pluginCtrlComponent->onPluginEnabledChanged = [=](
bool enabled) {
97 m_pluginEnabled = enabled;
98 DBG(juce::String(__FUNCTION__) +
" sending enabled state to net: " + juce::String(
int(enabled)));
100 onMessageReadyToSend(std::make_unique<Mema::PluginProcessingStateMessage>(m_pluginEnabled, m_pluginPost)->getSerializedMessage());
102 m_pluginCtrlComponent->onPluginPrePostChanged = [=](
bool post) {
104 DBG(juce::String(__FUNCTION__) +
" sending pre/post state to net: " + juce::String(
int(post)));
106 onMessageReadyToSend(std::make_unique<Mema::PluginProcessingStateMessage>(m_pluginEnabled, m_pluginPost)->getSerializedMessage());
108 addChildComponent(m_pluginCtrlComponent.get());
149 auto resizeRequired =
false;
151 if (m_panningCtrlComponent)
153 if (!m_panningCtrlComponent->isVisible())
155 m_panningCtrlComponent->setIOCount(m_currentIOCount);
156 m_panningCtrlComponent->setVisible(
true);
157 if (!m_inputMuteStates.empty())
158 m_panningCtrlComponent->setInputMuteStates(m_inputMuteStates);
159 if (!m_outputMuteStates.empty())
160 m_panningCtrlComponent->setOutputMuteStates(m_outputMuteStates);
161 if (!m_crosspointStates.empty())
162 m_panningCtrlComponent->setCrosspointStates(m_crosspointStates);
163 if (!m_crosspointValues.empty())
164 m_panningCtrlComponent->setCrosspointValues(m_crosspointValues);
165 resizeRequired =
true;
167 m_panningCtrlComponent->setChannelConfig(channelConfiguration);
169 if (m_faderbankCtrlComponent && m_faderbankCtrlComponent->isVisible())
171 m_faderbankCtrlComponent->resetCtrl();
172 m_faderbankCtrlComponent->setVisible(
false);
173 resizeRequired =
true;
175 if (m_pluginCtrlComponent && m_pluginCtrlComponent->isVisible())
177 m_pluginCtrlComponent->resetCtrl();
178 m_pluginCtrlComponent->setVisible(
false);
179 resizeRequired =
true;
182 if (resizeRequired && !getLocalBounds().isEmpty())
304 DBG(juce::String(__FUNCTION__) +
" ignoring unexpected AnalyzerParametersMessage...");
309 DBG(juce::String(__FUNCTION__) +
" ignoring unexpected AudiBufferMessage...");
313 DBG(juce::String(__FUNCTION__) +
" handling ReinitIOCountMessage...");
315 auto inputCount = iom->getInputCount();
316 jassert(inputCount > 0);
317 auto outputCount = iom->getOutputCount();
318 jassert(outputCount > 0);
320 m_currentIOCount = std::make_pair(inputCount, outputCount);
322 if (m_faderbankCtrlComponent)
323 m_faderbankCtrlComponent->setIOCount(m_currentIOCount);
324 if (m_panningCtrlComponent && m_panningCtrlComponent->isVisible())
325 m_panningCtrlComponent->setIOCount(m_currentIOCount);
331 DBG(juce::String(__FUNCTION__) +
" handling ControlParametersMessage...");
333 for (
auto const& inputMuteState : cpm->getInputMuteStates())
334 m_inputMuteStates[inputMuteState.first] = inputMuteState.second;
335 if (!m_inputMuteStates.empty())
337 if (m_faderbankCtrlComponent)
338 m_faderbankCtrlComponent->setInputMuteStates(m_inputMuteStates);
339 if (m_panningCtrlComponent && m_panningCtrlComponent->isVisible())
340 m_panningCtrlComponent->setInputMuteStates(m_inputMuteStates);
343 for (
auto const& outputMuteState : cpm->getOutputMuteStates())
344 m_outputMuteStates[outputMuteState.first] = outputMuteState.second;
345 if (!m_outputMuteStates.empty())
347 if (m_faderbankCtrlComponent)
348 m_faderbankCtrlComponent->setOutputMuteStates(m_outputMuteStates);
349 if (m_panningCtrlComponent && m_panningCtrlComponent->isVisible())
350 m_panningCtrlComponent->setOutputMuteStates(m_outputMuteStates);
353 for (
auto const& cpsIKV : cpm->getCrosspointStates())
354 for (
auto const& cpsOKV : cpsIKV.second)
355 m_crosspointStates[cpsIKV.first][cpsOKV.first] = cpsOKV.second;
356 if (!m_crosspointStates.empty())
358 if (m_faderbankCtrlComponent)
359 m_faderbankCtrlComponent->setCrosspointStates(m_crosspointStates);
360 if (m_panningCtrlComponent && m_panningCtrlComponent->isVisible())
361 m_panningCtrlComponent->setCrosspointStates(m_crosspointStates);
364 for (
auto const& cpvIKV : cpm->getCrosspointValues())
365 for (
auto const& cpvOKV : cpvIKV.second)
366 m_crosspointValues[cpvIKV.first][cpvOKV.first] = cpvOKV.second;
367 if (!m_crosspointValues.empty())
369 if (m_faderbankCtrlComponent)
370 m_faderbankCtrlComponent->setCrosspointValues(m_crosspointValues);
371 if (m_panningCtrlComponent && m_panningCtrlComponent->isVisible())
372 m_panningCtrlComponent->setCrosspointValues(m_crosspointValues);
379 DBG(juce::String(__FUNCTION__) +
" handling PluginParameterInfosMessage (" + juce::String(ppim->getParameterInfos().size()) +
") ...");
381 m_pluginName = ppim->getPluginName().toStdString();
382 m_pluginParameterInfos = ppim->getParameterInfos();
383 m_pluginEnabled = ppim->isPluginEnabled();
384 m_pluginPost = ppim->isPluginPost();
386 if (m_pluginCtrlComponent && m_pluginCtrlComponent->isVisible())
388 m_pluginCtrlComponent->setPluginName(m_pluginName);
389 m_pluginCtrlComponent->setParameterInfos(m_pluginParameterInfos);
390 m_pluginCtrlComponent->setPluginEnabled(m_pluginEnabled);
391 m_pluginCtrlComponent->setPluginPrePost(m_pluginPost);
398 DBG(juce::String(__FUNCTION__) +
" handling PluginProcessingStateMessage (enabled:" + juce::String(
int(pesm->isEnabled())) +
" post:" + juce::String(
int(pesm->isPost())) +
") ...");
400 m_pluginEnabled = pesm->isEnabled();
401 m_pluginPost = pesm->isPost();
403 if (m_pluginCtrlComponent && m_pluginCtrlComponent->isVisible())
405 m_pluginCtrlComponent->setPluginEnabled(m_pluginEnabled);
406 m_pluginCtrlComponent->setPluginPrePost(m_pluginPost);
411 DBG(juce::String(__FUNCTION__) +
" handling PluginParameterValueMessage (" + juce::String(ppvm->getParameterIndex()) +
"; " + ppvm->getParameterId() +
"; " + juce::String(ppvm->getCurrentValue()) +
") ...");
413 auto paramIdx = ppvm->getParameterIndex();
414 if (paramIdx < m_pluginParameterInfos.size())
416 m_pluginParameterInfos[paramIdx].currentValue = ppvm->getCurrentValue();
417 m_pluginParameterInfos[paramIdx].id = ppvm->getParameterId();
420 if (m_pluginCtrlComponent && m_pluginCtrlComponent->isVisible())
421 m_pluginCtrlComponent->setParameterValue(paramIdx, ppvm->getParameterId().toStdString(), ppvm->getCurrentValue());