
//------------------------------------------------------------------------------
// This file was generated using the Faust compiler (https://faust.grame.fr),
// and the Faust post-processor (https://github.com/jpcima/faustpp).
//
// Source: master_me.dsp
// Name: master_me
// Description: 
// Author: Klaus Scheuermann
// Copyright: 
// License: GPLv3+
// Version: 1.0
//------------------------------------------------------------------------------






#pragma once

#define DISTRHO_PLUGIN_NAME "master_me"
#define DISTRHO_PLUGIN_URI  "https://github.com/trummerschlunk/master_me"

#define DISTRHO_PLUGIN_HAS_UI          1
#define DISTRHO_PLUGIN_IS_RT_SAFE      1
#define DISTRHO_PLUGIN_NUM_INPUTS      2
#define DISTRHO_PLUGIN_NUM_OUTPUTS     2

enum Parameters {
    // inputs
    kParameter_global_bypass,
    kParameter_target,
    kParameter_in_gain,
    kParameter_phase_l,
    kParameter_phase_r,
    kParameter_mono,
    kParameter_dc_blocker,
    kParameter_stereo_correct,
    kParameter_gate_bypass,
    kParameter_gate_threshold,
    kParameter_gate_attack,
    kParameter_gate_hold,
    kParameter_gate_release,
    kParameter_eq_bypass,
    kParameter_eq_highpass_freq,
    kParameter_eq_tilt_gain,
    kParameter_eq_side_gain,
    kParameter_eq_side_freq,
    kParameter_eq_side_bandwidth,
    kParameter_leveler_bypass,
    kParameter_leveler_speed,
    kParameter_leveler_brake_threshold,
    kParameter_leveler_max_plus,
    kParameter_leveler_max_minus,
    kParameter_kneecomp_bypass,
    kParameter_kneecomp_strength,
    kParameter_kneecomp_threshold,
    kParameter_kneecomp_attack,
    kParameter_kneecomp_release,
    kParameter_kneecomp_knee,
    kParameter_kneecomp_link,
    kParameter_kneecomp_fffb,
    kParameter_kneecomp_makeup,
    kParameter_kneecomp_drywet,
    kParameter_mscomp_bypass,
    kParameter_mscomp_low_strength,
    kParameter_mscomp_low_threshold,
    kParameter_mscomp_low_attack,
    kParameter_mscomp_low_release,
    kParameter_mscomp_low_knee,
    kParameter_mscomp_low_link,
    kParameter_mscomp_low_crossover,
    kParameter_mscomp_high_strength,
    kParameter_mscomp_high_threshold,
    kParameter_mscomp_high_attack,
    kParameter_mscomp_high_release,
    kParameter_mscomp_high_knee,
    kParameter_mscomp_high_link,
    kParameter_mscomp_high_crossover,
    kParameter_mscomp_output_gain,
    kParameter_limiter_bypass,
    kParameter_limiter_strength,
    kParameter_limiter_threshold,
    kParameter_limiter_attack,
    kParameter_limiter_release,
    kParameter_limiter_knee,
    kParameter_limiter_fffb,
    kParameter_limiter_makeup,
    kParameter_brickwall_bypass,
    kParameter_brickwall_ceiling,
    kParameter_brickwall_release,
    
    // outputs
    kParameter_peakmeter_in_l,
    kParameter_peakmeter_in_r,
    kParameter_lufs_in,
    kParameter_leveler_gain,
    kParameter_lufs_out,
    kParameter_peakmeter_out_l,
    kParameter_peakmeter_out_r,
    kParameter_gate_meter,
    kParameter_leveler_brake,
    kParameter_kneecomp_meter_0,
    kParameter_kneecomp_meter_1,
    kParameter_msredux11,
    kParameter_msredux12,
    kParameter_msredux21,
    kParameter_msredux22,
    kParameter_msredux31,
    kParameter_msredux32,
    kParameter_msredux41,
    kParameter_msredux42,
    kParameter_msredux51,
    kParameter_msredux52,
    kParameter_msredux61,
    kParameter_msredux62,
    kParameter_msredux71,
    kParameter_msredux72,
    kParameter_msredux81,
    kParameter_msredux82,
    kParameter_limiter_gain_reduction,
    kParameter_brickwall_limit,
    
    // terminator
    kParameterCount
};

enum Programs {
    kProgramCount
};

enum States {
    kStateCount
};

static constexpr const char* kParameterNames[90] = {
    // inputs
    "global bypass",
    "Target",
    "input gain",
    "phase L",
    "phase R",
    "mono",
    "dc blocker",
    "stereo correct",
    "gate bypass",
    "gate threshold",
    "gate attack",
    "gate hold",
    "gate release",
    "eq bypass",
    "eq highpass freq",
    "eq tilt gain",
    "eq side gain",
    "eq side freq",
    "eq side bandwidth",
    "leveler bypass",
    "leveler speed",
    "leveler brake threshold",
    "leveler max +",
    "leveler max -",
    "kneecomp bypass",
    "kneecomp strength",
    "kneecomp tar-thresh",
    "kneecomp attack",
    "kneecomp release",
    "kneecomp knee",
    "kneecomp link",
    "kneecomp ff-fb",
    "kneecomp makeup",
    "kneecomp dry/wet",
    "mscomp bypass",
    "low strength",
    "low tar-thresh",
    "low attack",
    "low release",
    "low knee",
    "low link",
    "low crossover",
    "high strength",
    "high tar-thresh",
    "high attack",
    "high release",
    "high knee",
    "high link",
    "high crossover",
    "makeup",
    "limiter bypass",
    "limiter strength",
    "limiter tar-thresh",
    "limiter attack",
    "limiter release",
    "limiter knee",
    "limiter ff-fb",
    "limiter makeup",
    "brickwall bypass",
    "brickwall ceiling",
    "brickwall release",
    
    // ouputs
    "in L",
    "in R",
    "in lufs-s",
    "leveler gain",
    "out lufs-s",
    "out L",
    "out R",
    "gate meter",
    "leveler brake",
    "kneecomp meter 0",
    "kneecomp meter 1",
    "0x564c5cc47db0",
    "0x564c5cce9770",
    "0x564c5cc2c910",
    "0x564c5cce6360",
    "0x564c5cbfdbb0",
    "0x564c5cce3040",
    "0x564c5cbced90",
    "0x564c5ccdfd20",
    "0x564c5cb9ff70",
    "0x564c5ccdca00",
    "0x564c5cb71150",
    "0x564c5ccd96e0",
    "0x564c5cb42330",
    "0x564c5ccd63c0",
    "0x564c5cb14060",
    "0x564c5ccd3f00",
    "limiter gain reduction",
    "lim",
    
};

static constexpr const struct { float def, min, max; } kParameterRanges[90] = {
    // inputs
    { 0, 0, 1 },
    { -18, -50, -2 },
    { 0, -100, 24 },
    { 0, 0, 1 },
    { 0, 0, 1 },
    { 0, 0, 1 },
    { 0, 0, 1 },
    { 0, 0, 1 },
    { 0, 0, 1 },
    { -90, -90, 0 },
    { 0, 0, 100 },
    { 50, 0, 500 },
    { 500, 50, 5000 },
    { 0, 0, 1 },
    { 5, 5, 1000 },
    { 0, -6, 6 },
    { 0, 0, 12 },
    { 600, 200, 5000 },
    { 1, 0.5, 4 },
    { 0, 0, 1 },
    { 20, 0, 100 },
    { -14, -90, 0 },
    { 20, 0, 60 },
    { 20, 0, 60 },
    { 0, 0, 1 },
    { 20, 0, 100 },
    { -6, -12, 6 },
    { 20, 1, 100 },
    { 200, 1, 1000 },
    { 6, 0, 30 },
    { 60, 0, 100 },
    { 50, 0, 100 },
    { 0, -10, 10 },
    { 100, 0, 100 },
    { 0, 0, 1 },
    { 10, 0, 100 },
    { -6, -12, 12 },
    { 15, 0, 100 },
    { 150, 1, 1000 },
    { 12, 0, 30 },
    { 60, 0, 100 },
    { 60, 20, 4000 },
    { 10, 0, 100 },
    { -12, -12, 12 },
    { 3, 0, 100 },
    { 30, 1, 1000 },
    { 12, 0, 30 },
    { 30, 0, 100 },
    { 8000, 5000, 20000 },
    { 1, -6, 6 },
    { 0, 0, 1 },
    { 80, 0, 100 },
    { 6, -12, 12 },
    { 1, 0, 100 },
    { 40, 1, 400 },
    { 8, 0, 12 },
    { 50, 0, 100 },
    { 0, -10, 10 },
    { 0, 0, 1 },
    { -1, -6, 0 },
    { 75, 5, 100 },
    
    // ouputs
    { 0, -70, 0 },
    { 0, -70, 0 },
    { 0, -70, 0 },
    { 0, -50, 50 },
    { 0, -70, 0 },
    { 0, -70, 0 },
    { 0, -70, 0 },
    { 0, -70, 0 },
    { 0, 0, 100 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -6, 0 },
    { 0, -12, 0 },
    { 0, -20, 0 },
    
};

static constexpr const char* kParameterSymbols[90] = {
    // inputs
    "global_bypass",
    "target",
    "in_gain",
    "phase_l",
    "phase_r",
    "mono",
    "dc_blocker",
    "stereo_correct",
    "gate_bypass",
    "gate_threshold",
    "gate_attack",
    "gate_hold",
    "gate_release",
    "eq_bypass",
    "eq_highpass_freq",
    "eq_tilt_gain",
    "eq_side_gain",
    "eq_side_freq",
    "eq_side_bandwidth",
    "leveler_bypass",
    "leveler_speed",
    "leveler_brake_threshold",
    "leveler_max_plus",
    "leveler_max_minus",
    "kneecomp_bypass",
    "kneecomp_strength",
    "kneecomp_threshold",
    "kneecomp_attack",
    "kneecomp_release",
    "kneecomp_knee",
    "kneecomp_link",
    "kneecomp_fffb",
    "kneecomp_makeup",
    "kneecomp_drywet",
    "mscomp_bypass",
    "mscomp_low_strength",
    "mscomp_low_threshold",
    "mscomp_low_attack",
    "mscomp_low_release",
    "mscomp_low_knee",
    "mscomp_low_link",
    "mscomp_low_crossover",
    "mscomp_high_strength",
    "mscomp_high_threshold",
    "mscomp_high_attack",
    "mscomp_high_release",
    "mscomp_high_knee",
    "mscomp_high_link",
    "mscomp_high_crossover",
    "mscomp_output_gain",
    "limiter_bypass",
    "limiter_strength",
    "limiter_threshold",
    "limiter_attack",
    "limiter_release",
    "limiter_knee",
    "limiter_fffb",
    "limiter_makeup",
    "brickwall_bypass",
    "brickwall_ceiling",
    "brickwall_release",
    
    // ouputs
    "peakmeter_in_l",
    "peakmeter_in_r",
    "lufs_in",
    "leveler_gain",
    "lufs_out",
    "peakmeter_out_l",
    "peakmeter_out_r",
    "gate_meter",
    "leveler_brake",
    "kneecomp_meter_0",
    "kneecomp_meter_1",
    "msredux11",
    "msredux12",
    "msredux21",
    "msredux22",
    "msredux31",
    "msredux32",
    "msredux41",
    "msredux42",
    "msredux51",
    "msredux52",
    "msredux61",
    "msredux62",
    "msredux71",
    "msredux72",
    "msredux81",
    "msredux82",
    "limiter_gain_reduction",
    "brickwall_limit",
    
};

static constexpr const char* kParameterUnits[90] = {
    // inputs
    "",
    "dB",
    "dB",
    "",
    "",
    "",
    "",
    "",
    "",
    "dB",
    "ms",
    "ms",
    "ms",
    "",
    "Hz",
    "dB",
    "dB",
    "Hz",
    "",
    "",
    "%",
    "dB",
    "dB",
    "dB",
    "",
    "%",
    "dB",
    "ms",
    "ms",
    "dB",
    "%",
    "%",
    "dB",
    "%",
    "",
    "%",
    "dB",
    "ms",
    "ms",
    "dB",
    "%",
    "Hz",
    "%",
    "dB",
    "ms",
    "ms",
    "dB",
    "%",
    "Hz",
    "dB",
    "",
    "%",
    "dB",
    "ms",
    "ms",
    "dB",
    "%",
    "dB",
    "",
    "dB",
    "ms",
    
    // ouputs
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "%",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    "dB",
    
};

// #if __has_include("ExtraProperties.h")
#include "ExtraProperties.h"
// #endif



