MCPcopy Create free account
hub / github.com/aethersdr/AetherSDR / tickFftAnalyzer

Method tickFftAnalyzer

src/gui/StripEqPanel.cpp:369–400  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

367StripEqPanel::~StripEqPanel() = default;
368
369void StripEqPanel::tickFftAnalyzer()
370{
371 if (!m_audio || !m_canvas || !m_fftAnalyzer) return;
372
373 std::vector<float> samples(ClientEqFftAnalyzer::kFftSize, 0.0f);
374 bool ok = false;
375 if (m_path == ClientEqApplet::Path::Rx) {
376 ok = m_audio->copyRecentClientEqRxSamples(
377 samples.data(), ClientEqFftAnalyzer::kFftSize);
378 } else {
379 ok = m_audio->copyRecentClientEqTxSamples(
380 samples.data(), ClientEqFftAnalyzer::kFftSize);
381 }
382 if (!ok) return;
383
384 m_fftAnalyzer->update(samples.data(), ClientEqFftAnalyzer::kFftSize);
385
386 ClientEq* eq = (m_path == ClientEqApplet::Path::Rx)
387 ? m_audio->clientEqRx() : m_audio->clientEqTx();
388 const double fs = eq ? eq->sampleRate() : 24000.0;
389 m_canvas->setFftBinsDb(m_fftAnalyzer->magnitudesDb(), fs);
390
391 // Feed the output fader a peak level from the same samples. Cheap —
392 // one pass over the 2048-sample block while we already have it warm.
393 if (m_outFader) {
394 float peak = 0.0f;
395 for (float s : samples) {
396 peak = std::max(peak, std::fabs(s));
397 }
398 m_outFader->setPeakLinear(peak);
399 }
400}
401
402void StripEqPanel::syncBypassFromEq()
403{

Callers

nothing calls this directly

Calls 9

updateMethod · 0.80
clientEqRxMethod · 0.80
clientEqTxMethod · 0.80
setFftBinsDbMethod · 0.80
dataMethod · 0.45
sampleRateMethod · 0.45
setPeakLinearMethod · 0.45

Tested by

no test coverage detected