Dual-stage compressor (optical + VCA) with output transformer saturation. - Port-Hamiltonian T4B opto-cell model with implicit trapezoidal integration - Feed-forward VCA with 7 ratios, 6 attack/release presets, Dual release mode - 3 transformer types (Nickel/Iron/Steel) with 4x oversampled waveshaping - Analog-style needle VU meters, horizontal GR meters - Sidechain HPF, stereo link, independent section bypass - Full state save/restore, CI/CD for Windows/macOS/Linux
56 sor
1.3 KiB
C++
56 sor
1.3 KiB
C++
#pragma once
|
|
#include <JuceHeader.h>
|
|
#include "PluginProcessor.h"
|
|
#include "LookAndFeel.h"
|
|
#include "OpticalPanel.h"
|
|
#include "DiscretePanel.h"
|
|
#include "TransformerPanel.h"
|
|
#include "OutputPanel.h"
|
|
#include "GRMeter.h"
|
|
#include "NeedleVuMeter.h"
|
|
|
|
static constexpr const char* kInstaShadowVersion = "v1.0";
|
|
|
|
class InstaShadowEditor : public juce::AudioProcessorEditor,
|
|
public juce::Timer
|
|
{
|
|
public:
|
|
explicit InstaShadowEditor (InstaShadowProcessor&);
|
|
~InstaShadowEditor() override;
|
|
|
|
void paint (juce::Graphics&) override;
|
|
void resized() override;
|
|
void timerCallback() override;
|
|
|
|
private:
|
|
InstaShadowProcessor& processor;
|
|
InstaShadowLookAndFeel lookAndFeel;
|
|
|
|
// Top bar
|
|
juce::Label titleLabel;
|
|
juce::Label versionLabel;
|
|
juce::ToggleButton linkToggle;
|
|
juce::Label linkLabel;
|
|
juce::ToggleButton bypassToggle;
|
|
juce::Label bypassLabel;
|
|
|
|
// Side panels
|
|
OpticalPanel opticalPanel;
|
|
DiscretePanel discretePanel;
|
|
|
|
// Center: needle VU meters + GR bars
|
|
NeedleVuMeter vuMeterL;
|
|
NeedleVuMeter vuMeterR;
|
|
GRMeter optoGrMeter;
|
|
GRMeter vcaGrMeter;
|
|
|
|
// Bottom panels
|
|
TransformerPanel transformerPanel;
|
|
OutputPanel outputPanel;
|
|
|
|
void syncKnobsToEngine();
|
|
void syncEngineFromKnobs();
|
|
|
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (InstaShadowEditor)
|
|
};
|