50 if (m_inputDataAnalyzer)
51 m_inputDataAnalyzer->setUseProcessingTypes(
true,
true,
false);
52 if (m_outputDataAnalyzer)
53 m_outputDataAnalyzer->setUseProcessingTypes(
true,
true,
false);
55 auto resizeRequired =
false;
57 if (!m_inputMeteringComponent)
60 m_inputMeteringComponent->setChannelCount(m_currentIOCount.first);
61 addAndMakeVisible(m_inputMeteringComponent.get());
62 if (m_inputDataAnalyzer)
63 m_inputDataAnalyzer->addListener(m_inputMeteringComponent.get());
64 resizeRequired =
true;
66 if (!m_outputMeteringComponent)
69 m_outputMeteringComponent->setChannelCount(m_currentIOCount.second);
70 addAndMakeVisible(m_outputMeteringComponent.get());
71 if (m_outputDataAnalyzer)
72 m_outputDataAnalyzer->addListener(m_outputMeteringComponent.get());
73 resizeRequired =
true;
77 if (m_outputFieldComponent)
79 if (m_outputDataAnalyzer)
80 m_outputDataAnalyzer->removeListener(m_outputFieldComponent.get());
82 removeChildComponent(m_outputFieldComponent.get());
83 m_outputFieldComponent.reset();
84 resizeRequired =
true;
87 if (m_waveformComponent)
89 if (m_outputDataAnalyzer)
90 m_outputDataAnalyzer->removeListener(m_waveformComponent.get());
92 removeChildComponent(m_waveformComponent.get());
93 m_waveformComponent.reset();
94 resizeRequired =
true;
97 if (m_spectrumComponent)
99 if (m_outputDataAnalyzer)
100 m_outputDataAnalyzer->removeListener(m_spectrumComponent.get());
102 removeChildComponent(m_spectrumComponent.get());
103 m_spectrumComponent.reset();
104 resizeRequired =
true;
107 if (resizeRequired && !getLocalBounds().isEmpty())
114 if (m_inputDataAnalyzer)
115 m_inputDataAnalyzer->setUseProcessingTypes(
true,
true,
false);
116 if (m_outputDataAnalyzer)
117 m_outputDataAnalyzer->setUseProcessingTypes(
true,
true,
false);
119 auto resizeRequired =
false;
121 if (!m_inputMeteringComponent)
124 m_inputMeteringComponent->setChannelCount(m_currentIOCount.first);
125 addAndMakeVisible(m_inputMeteringComponent.get());
126 if (m_inputDataAnalyzer)
127 m_inputDataAnalyzer->addListener(m_inputMeteringComponent.get());
128 resizeRequired =
true;
130 if (!m_outputFieldComponent)
132 m_outputFieldComponent = std::make_unique<Mema::TwoDFieldOutputComponent>();
133 addAndMakeVisible(m_outputFieldComponent.get());
134 if (m_outputDataAnalyzer)
135 m_outputDataAnalyzer->addListener(m_outputFieldComponent.get());
136 resizeRequired =
true;
138 if (m_outputFieldComponent->setChannelConfiguration(channelConfiguration))
139 resizeRequired =
true;
142 if (m_outputMeteringComponent)
144 if (m_outputDataAnalyzer)
145 m_outputDataAnalyzer->removeListener(m_outputMeteringComponent.get());
147 removeChildComponent(m_outputMeteringComponent.get());
148 m_outputMeteringComponent.reset();
149 resizeRequired =
true;
152 if (m_waveformComponent)
154 if (m_outputDataAnalyzer)
155 m_outputDataAnalyzer->removeListener(m_waveformComponent.get());
157 removeChildComponent(m_waveformComponent.get());
158 m_waveformComponent.reset();
159 resizeRequired =
true;
162 if (m_spectrumComponent)
164 if (m_outputDataAnalyzer)
165 m_outputDataAnalyzer->removeListener(m_spectrumComponent.get());
167 removeChildComponent(m_spectrumComponent.get());
168 m_spectrumComponent.reset();
169 resizeRequired =
true;
172 if (resizeRequired && !getLocalBounds().isEmpty())
179 if (m_inputDataAnalyzer)
180 m_inputDataAnalyzer->setUseProcessingTypes(
true,
true,
false);
181 if (m_outputDataAnalyzer)
182 m_outputDataAnalyzer->setUseProcessingTypes(
true,
true,
false);
184 auto resizeRequired =
false;
186 if (!m_waveformComponent)
188 m_waveformComponent = std::make_unique<Mema::WaveformAudioComponent>();
189 addAndMakeVisible(m_waveformComponent.get());
190 if (m_outputDataAnalyzer)
191 m_outputDataAnalyzer->addListener(m_waveformComponent.get());
192 resizeRequired =
true;
196 if (m_inputMeteringComponent)
198 if (m_inputDataAnalyzer)
199 m_inputDataAnalyzer->removeListener(m_inputMeteringComponent.get());
201 removeChildComponent(m_inputMeteringComponent.get());
202 m_inputMeteringComponent.reset();
203 resizeRequired =
true;
206 if (m_outputMeteringComponent)
208 if (m_outputDataAnalyzer)
209 m_outputDataAnalyzer->removeListener(m_outputMeteringComponent.get());
211 removeChildComponent(m_outputMeteringComponent.get());
212 m_outputMeteringComponent.reset();
213 resizeRequired =
true;
216 if (m_outputFieldComponent)
218 if (m_outputDataAnalyzer)
219 m_outputDataAnalyzer->removeListener(m_outputFieldComponent.get());
221 removeChildComponent(m_outputFieldComponent.get());
222 m_outputFieldComponent.reset();
223 resizeRequired =
true;
226 if (m_spectrumComponent)
228 if (m_outputDataAnalyzer)
229 m_outputDataAnalyzer->removeListener(m_spectrumComponent.get());
231 removeChildComponent(m_spectrumComponent.get());
232 m_spectrumComponent.reset();
233 resizeRequired =
true;
236 if (resizeRequired && !getLocalBounds().isEmpty())
243 if (m_inputDataAnalyzer)
244 m_inputDataAnalyzer->setUseProcessingTypes(
true,
true,
true);
245 if (m_outputDataAnalyzer)
246 m_outputDataAnalyzer->setUseProcessingTypes(
true,
true,
true);
248 auto resizeRequired =
false;
250 if (!m_spectrumComponent)
252 m_spectrumComponent = std::make_unique<Mema::SpectrumAudioComponent>();
253 addAndMakeVisible(m_spectrumComponent.get());
254 if (m_outputDataAnalyzer)
255 m_outputDataAnalyzer->addListener(m_spectrumComponent.get());
256 resizeRequired =
true;
260 if (m_inputMeteringComponent)
262 if (m_inputDataAnalyzer)
263 m_inputDataAnalyzer->removeListener(m_inputMeteringComponent.get());
265 removeChildComponent(m_inputMeteringComponent.get());
266 m_inputMeteringComponent.reset();
267 resizeRequired =
true;
270 if (m_outputMeteringComponent)
272 if (m_outputDataAnalyzer)
273 m_outputDataAnalyzer->removeListener(m_outputMeteringComponent.get());
275 removeChildComponent(m_outputMeteringComponent.get());
276 m_outputMeteringComponent.reset();
277 resizeRequired =
true;
280 if (m_outputFieldComponent)
282 if (m_outputDataAnalyzer)
283 m_outputDataAnalyzer->removeListener(m_outputFieldComponent.get());
285 removeChildComponent(m_outputFieldComponent.get());
286 m_outputFieldComponent.reset();
287 resizeRequired =
true;
290 if (m_waveformComponent)
292 if (m_outputDataAnalyzer)
293 m_outputDataAnalyzer->removeListener(m_waveformComponent.get());
295 removeChildComponent(m_waveformComponent.get());
296 m_waveformComponent.reset();
297 resizeRequired =
true;
300 if (resizeRequired && !getLocalBounds().isEmpty())
325 if (m_inputMeteringComponent && m_outputFieldComponent)
328 auto bounds = getLocalBounds().reduced(margin, margin);
329 auto boundsAspect = bounds.toFloat().getAspectRatio();
330 auto fieldAspect = m_outputFieldComponent->getRequiredAspectRatio();
331 if (boundsAspect >= 1 / fieldAspect)
334 auto outputsBounds = bounds.removeFromRight(
int(bounds.getHeight() / fieldAspect));
335 outputsBounds.removeFromLeft(margin / 2);
336 auto inputsBounds = bounds;
337 inputsBounds.removeFromRight(margin / 2);
339 m_inputMeteringComponent->setBounds(inputsBounds);
340 m_outputFieldComponent->setBounds(outputsBounds);
345 auto outputBounds = bounds.removeFromBottom(
int(bounds.getWidth() * fieldAspect));
346 outputBounds.removeFromTop(margin / 2);
347 auto inputBounds = bounds;
348 inputBounds.removeFromBottom(margin / 2);
350 m_inputMeteringComponent->setBounds(inputBounds);
351 m_outputFieldComponent->setBounds(outputBounds);
354 else if (m_inputMeteringComponent && m_outputMeteringComponent)
357 auto bounds = getLocalBounds().reduced(margin, margin);
358 if (!bounds.isEmpty() && bounds.getAspectRatio() >= 1)
361 if (m_inputMeteringComponent && m_outputMeteringComponent)
363 auto ic = float(m_inputMeteringComponent->getChannelCount());
364 auto oc = float(m_outputMeteringComponent->getChannelCount());
366 if (0.0f != ic && 0.0f != oc)
367 m_ioRatio = ic / (ic + oc);
370 auto inputsBounds = bounds.removeFromLeft(
int(bounds.getWidth() * m_ioRatio));
371 inputsBounds.removeFromRight(margin / 2);
372 auto outputsBounds = bounds;
373 outputsBounds.removeFromLeft(margin / 2);
375 m_inputMeteringComponent->setBounds(inputsBounds);
376 m_outputMeteringComponent->setBounds(outputsBounds);
381 auto inputBounds = bounds.removeFromTop(bounds.getHeight() / 2);
382 inputBounds.removeFromBottom(margin / 2);
383 auto outputBounds = bounds;
384 outputBounds.removeFromTop(margin / 2);
386 m_inputMeteringComponent->setBounds(inputBounds);
387 m_outputMeteringComponent->setBounds(outputBounds);
390 else if (m_waveformComponent)
393 auto bounds = getLocalBounds().reduced(margin, margin);
394 m_waveformComponent->setBounds(bounds);
396 else if (m_spectrumComponent)
399 auto bounds = getLocalBounds().reduced(margin, margin);
400 m_spectrumComponent->setBounds(bounds);
414 auto sampleRate = apm->getSampleRate();
415 jassert(sampleRate > 0);
416 auto maximumExpectedSamplesPerBlock = apm->getMaximumExpectedSamplesPerBlock();
417 jassert(maximumExpectedSamplesPerBlock > 0);
419 if (m_inputDataAnalyzer)
420 m_inputDataAnalyzer->initializeParameters(sampleRate, maximumExpectedSamplesPerBlock);
421 if (m_outputDataAnalyzer)
422 m_outputDataAnalyzer->initializeParameters(sampleRate, maximumExpectedSamplesPerBlock);
426 auto inputCount = iom->getInputCount();
427 jassert(inputCount > 0);
428 if (m_inputMeteringComponent)
429 m_inputMeteringComponent->setChannelCount(inputCount);
430 auto outputCount = iom->getOutputCount();
431 jassert(outputCount > 0);
432 if (m_outputMeteringComponent)
433 m_outputMeteringComponent->setChannelCount(outputCount);
435 m_currentIOCount = std::make_pair(inputCount, outputCount);
443 m_inputDataAnalyzer->analyzeData(m->getAudioBuffer());
447 m_outputDataAnalyzer->analyzeData(m->getAudioBuffer());