AnalogTapeModel

Physical modelling signal processing for analog tape recording
Log | Files | Refs | Submodules | README | LICENSE

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 }