OversamplingMenu.cpp (1672B)
1 #include "OversamplingMenu.h" 2 3 namespace 4 { 5 const StringArray latencyChangeParameters { "loss_onoff", "hyst_onoff", "comp_onoff" }; 6 } 7 8 OversamplingMenu::OversamplingMenu (OversamplerType& osManager, 9 AudioProcessorValueTreeState& vtState) : BaseOSMenuType (osManager, vtState), 10 vts (vtState), 11 processor (vts.processor) 12 { 13 generateComboBoxMenu(); 14 15 for (const auto& tag : latencyChangeParameters) 16 vts.addParameterListener (tag, this); 17 } 18 19 OversamplingMenu::~OversamplingMenu() 20 { 21 for (const auto& tag : latencyChangeParameters) 22 vts.removeParameterListener (tag, this); 23 } 24 25 void OversamplingMenu::parameterChanged (const String&, float) 26 { 27 generateComboBoxMenu(); 28 } 29 30 void OversamplingMenu::generateComboBoxMenu() 31 { 32 // update menu after parameter change has propagated 33 Timer::callAfterDelay ( 34 50, 35 [this, safeComp = Component::SafePointer<OversamplingMenu> (this)] 36 { 37 if (safeComp != nullptr) 38 { 39 BaseOSMenuType::generateComboBoxMenu(); 40 41 auto* menu = getRootMenu(); 42 if (! menu->containsAnyActiveItems()) 43 return; 44 45 auto totalLatencyMs = ((double) processor.getLatencySamples() / processor.getSampleRate()) * 1000.0; 46 totalLatencyMs = totalLatencyMs < 0.025 ? 0.0 : totalLatencyMs; 47 menu->addSectionHeader ("Total Latency: " + juce::String (totalLatencyMs, 3) + " ms"); 48 } 49 }); 50 }