/*
  ==============================================================================

  This is an automatically generated GUI class created by the Introjucer!

  Be careful when adding custom code to these files, as only the code within
  the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded
  and re-saved.

  Created with Introjucer version: 3.1.0

  ------------------------------------------------------------------------------

  The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions"
  Copyright 2004-13 by Raw Material Software Ltd.

  ==============================================================================
*/

//[Headers] You can add your own extra header files here...
//[/Headers]

#include "JaySynthAudioProcessorEditor.h"


//[MiscUserDefs] You can add your own user definitions and misc code here...
//[/MiscUserDefs]

using namespace juce;

//==============================================================================
JaySynthAudioProcessorEditor::JaySynthAudioProcessorEditor (JaySynthAudioProcessor* ownerFilter, bool has_wt)
    : AudioProcessorEditor (ownerFilter)
{
    m_fileChooserDirectory = File::getSpecialLocation (File::currentExecutableFile).getParentDirectory();

    addAndMakeVisible (m_label_colon = new Label ("Colon",
                                                  TRANS(":")));
    m_label_colon->setFont (Font ("Times New Roman", 20.00f, Font::plain));
    m_label_colon->setJustificationType (Justification::centredLeft);
    m_label_colon->setEditable (false, false, false);
    m_label_colon->setColour (Label::textColourId, Colours::white);
    m_label_colon->setColour (TextEditor::textColourId, Colours::black);
    m_label_colon->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_slider_master_volume = new Slider ("Master volume"));
    m_slider_master_volume->setTooltip (TRANS("Master volume [%]"));
    m_slider_master_volume->setRange (0, 1, 0);
    m_slider_master_volume->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_master_volume->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_master_volume->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_master_volume->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_master_volume->addListener (this);

    addAndMakeVisible (m_slider_vcf_f = new Slider ("VCF Cutoff"));
    m_slider_vcf_f->setTooltip (TRANS("VCF Cutoff [Hz]"));
    m_slider_vcf_f->setRange (0, 1, 0);
    m_slider_vcf_f->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_f->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_f->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_f->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_f->addListener (this);

    addAndMakeVisible (m_slider_vcf_q = new Slider ("VCF Resonance"));
    m_slider_vcf_q->setTooltip (TRANS("VCF Resonance. Value = 1.0 means no resonance"));
    m_slider_vcf_q->setRange (0, 1, 0);
    m_slider_vcf_q->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_q->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_q->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_q->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_q->addListener (this);

    addAndMakeVisible (m_slider_osc0_det = new Slider ("OSC 1 Detune"));
    m_slider_osc0_det->setTooltip (TRANS("OSC 1 Detune [cent]"));
    m_slider_osc0_det->setRange (0, 1, 0);
    m_slider_osc0_det->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_det->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_det->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_det->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_det->addListener (this);

    addAndMakeVisible (m_slider_osc1_det = new Slider ("OSC 2 Detune"));
    m_slider_osc1_det->setTooltip (TRANS("OSC 2 Detune [cent]"));
    m_slider_osc1_det->setRange (0, 1, 0);
    m_slider_osc1_det->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_det->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_det->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_det->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_det->addListener (this);

    addAndMakeVisible (m_slider_osc0_transpose = new Slider ("OSC 1 Transpose"));
    m_slider_osc0_transpose->setTooltip (TRANS("OSC 1 Transpose [semitones]"));
    m_slider_osc0_transpose->setRange (0, 1, 0);
    m_slider_osc0_transpose->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_transpose->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_transpose->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_osc0_transpose->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_transpose->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_transpose->addListener (this);

    addAndMakeVisible (m_slider_osc1_transpose = new Slider ("OSC 2 Transpose"));
    m_slider_osc1_transpose->setTooltip (TRANS("OSC 2 Transpose [semitones]"));
    m_slider_osc1_transpose->setRange (0, 1, 0);
    m_slider_osc1_transpose->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_transpose->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_transpose->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_transpose->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_transpose->addListener (this);

    addAndMakeVisible (m_slider_vca_env_attack = new Slider ("VCA Attack"));
    m_slider_vca_env_attack->setTooltip (TRANS("VCA Attack Time [ms]"));
    m_slider_vca_env_attack->setRange (0, 1, 0);
    m_slider_vca_env_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_env_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_env_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_env_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_env_attack->addListener (this);

    addAndMakeVisible (m_slider_vca_env_decay = new Slider ("VCA Decay"));
    m_slider_vca_env_decay->setTooltip (TRANS("VCA Decay Time [ms]"));
    m_slider_vca_env_decay->setRange (0, 1, 0);
    m_slider_vca_env_decay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_env_decay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_env_decay->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_vca_env_decay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_env_decay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_env_decay->addListener (this);

    addAndMakeVisible (m_slider_vca_env_release = new Slider ("VCA Release"));
    m_slider_vca_env_release->setTooltip (TRANS("VCA Release Time [ms]"));
    m_slider_vca_env_release->setRange (0, 1, 0);
    m_slider_vca_env_release->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_env_release->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_env_release->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_env_release->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_env_release->addListener (this);

    addAndMakeVisible (m_slider_vca_env_sustain = new Slider ("VCA Sustain"));
    m_slider_vca_env_sustain->setTooltip (TRANS("VCA Sustain Level [%]"));
    m_slider_vca_env_sustain->setRange (0, 1, 0);
    m_slider_vca_env_sustain->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_env_sustain->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_env_sustain->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_env_sustain->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_env_sustain->addListener (this);

    addAndMakeVisible (m_slider_vcf_env_attack = new Slider ("VCF Attack"));
    m_slider_vcf_env_attack->setTooltip (TRANS("VCF Attack Time [ms]"));
    m_slider_vcf_env_attack->setRange (0, 1, 0);
    m_slider_vcf_env_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_env_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_env_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_env_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_env_attack->addListener (this);

    addAndMakeVisible (m_slider_vcf_env_decay = new Slider ("VCF Decay"));
    m_slider_vcf_env_decay->setTooltip (TRANS("VCF Decay Time [ms]"));
    m_slider_vcf_env_decay->setRange (0, 1, 0);
    m_slider_vcf_env_decay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_env_decay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_env_decay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_env_decay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_env_decay->addListener (this);

    addAndMakeVisible (m_slider_vcf_env_release = new Slider ("VCF Release"));
    m_slider_vcf_env_release->setTooltip (TRANS("VCF Release Time [ms]"));
    m_slider_vcf_env_release->setRange (0, 1, 0);
    m_slider_vcf_env_release->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_env_release->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_env_release->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_env_release->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_env_release->addListener (this);

    addAndMakeVisible (m_slider_vcf_env_sustain = new Slider ("VCF Sustain"));
    m_slider_vcf_env_sustain->setTooltip (TRANS("VCF Sustain Level [%]"));
    m_slider_vcf_env_sustain->setRange (0, 1, 0);
    m_slider_vcf_env_sustain->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_env_sustain->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_env_sustain->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_env_sustain->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_env_sustain->addListener (this);

    addAndMakeVisible (m_slider_vcf_env_amount = new Slider ("VCF ENV Amount"));
    m_slider_vcf_env_amount->setTooltip (TRANS("VCF Envelope Amount [%]"));
    m_slider_vcf_env_amount->setRange (0, 1, 0);
    m_slider_vcf_env_amount->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_env_amount->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_env_amount->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_env_amount->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_env_amount->addListener (this);

    addAndMakeVisible (m_label_vcf_env_attack = new Label ("VCF Attack",
                                                           TRANS("value")));
    m_label_vcf_env_attack->setFont (Font (14.00f, Font::plain));
    m_label_vcf_env_attack->setJustificationType (Justification::centred);
    m_label_vcf_env_attack->setEditable (true, true, false);
    m_label_vcf_env_attack->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_env_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_env_attack->addListener (this);

    addAndMakeVisible (m_label_vcf_f = new Label ("VCF Cutoff",
                                                  TRANS("value")));
    m_label_vcf_f->setFont (Font (14.00f, Font::plain));
    m_label_vcf_f->setJustificationType (Justification::centred);
    m_label_vcf_f->setEditable (true, true, false);
    m_label_vcf_f->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_f->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_f->addListener (this);

    addAndMakeVisible (m_label_vca_env_attack = new Label ("VCA Attack",
                                                           TRANS("value")));
    m_label_vca_env_attack->setFont (Font (14.00f, Font::plain));
    m_label_vca_env_attack->setJustificationType (Justification::centred);
    m_label_vca_env_attack->setEditable (true, true, false);
    m_label_vca_env_attack->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_env_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_env_attack->addListener (this);

    addAndMakeVisible (m_label_vca_env_decay = new Label ("VCA Decay",
                                                          TRANS("value")));
    m_label_vca_env_decay->setFont (Font (14.00f, Font::plain));
    m_label_vca_env_decay->setJustificationType (Justification::centred);
    m_label_vca_env_decay->setEditable (true, true, false);
    m_label_vca_env_decay->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_env_decay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_env_decay->addListener (this);

    addAndMakeVisible (m_label_vca_env_sustain = new Label ("VCA Sustain",
                                                            TRANS("value")));
    m_label_vca_env_sustain->setFont (Font (14.00f, Font::plain));
    m_label_vca_env_sustain->setJustificationType (Justification::centred);
    m_label_vca_env_sustain->setEditable (true, true, false);
    m_label_vca_env_sustain->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_env_sustain->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_env_sustain->addListener (this);

    addAndMakeVisible (m_label_vca_env_release = new Label ("VCA Release",
                                                            TRANS("value")));
    m_label_vca_env_release->setFont (Font (14.00f, Font::plain));
    m_label_vca_env_release->setJustificationType (Justification::centred);
    m_label_vca_env_release->setEditable (true, true, false);
    m_label_vca_env_release->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_env_release->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_env_release->addListener (this);

    addAndMakeVisible (m_label_vcf_env_decay = new Label ("VCF Decay",
                                                          TRANS("value")));
    m_label_vcf_env_decay->setFont (Font (14.00f, Font::plain));
    m_label_vcf_env_decay->setJustificationType (Justification::centred);
    m_label_vcf_env_decay->setEditable (true, true, false);
    m_label_vcf_env_decay->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_env_decay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_env_decay->addListener (this);

    addAndMakeVisible (m_label_vcf_env_sustain = new Label ("VCF Sustain",
                                                            TRANS("value")));
    m_label_vcf_env_sustain->setFont (Font (14.00f, Font::plain));
    m_label_vcf_env_sustain->setJustificationType (Justification::centred);
    m_label_vcf_env_sustain->setEditable (true, true, false);
    m_label_vcf_env_sustain->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_env_sustain->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_env_sustain->addListener (this);

    addAndMakeVisible (m_label_vcf_env_release = new Label ("VCF Release",
                                                            TRANS("value")));
    m_label_vcf_env_release->setFont (Font (14.00f, Font::plain));
    m_label_vcf_env_release->setJustificationType (Justification::centred);
    m_label_vcf_env_release->setEditable (true, true, false);
    m_label_vcf_env_release->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_env_release->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_env_release->addListener (this);

    addAndMakeVisible (m_label_vcf_q = new Label ("VCF Resonance",
                                                  TRANS("value")));
    m_label_vcf_q->setFont (Font (14.00f, Font::plain));
    m_label_vcf_q->setJustificationType (Justification::centred);
    m_label_vcf_q->setEditable (true, true, false);
    m_label_vcf_q->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_q->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_q->addListener (this);

    addAndMakeVisible (m_label_vcf_env_amount = new Label ("VCF ENV Amount",
                                                           TRANS("value")));
    m_label_vcf_env_amount->setFont (Font (14.00f, Font::plain));
    m_label_vcf_env_amount->setJustificationType (Justification::centred);
    m_label_vcf_env_amount->setEditable (true, true, false);
    m_label_vcf_env_amount->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_env_amount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_env_amount->addListener (this);

    addAndMakeVisible (m_label_master_volume = new Label ("Master volume",
                                                          TRANS("value")));
    m_label_master_volume->setFont (Font (14.00f, Font::plain));
    m_label_master_volume->setJustificationType (Justification::centred);
    m_label_master_volume->setEditable (true, true, false);
    m_label_master_volume->setColour (TextEditor::textColourId, Colours::black);
    m_label_master_volume->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_master_volume->addListener (this);

    addAndMakeVisible (m_label_osc0_transpose = new Label ("OSC 1 Transpose",
                                                           TRANS("value")));
    m_label_osc0_transpose->setFont (Font (14.00f, Font::plain));
    m_label_osc0_transpose->setJustificationType (Justification::centred);
    m_label_osc0_transpose->setEditable (true, true, false);
    m_label_osc0_transpose->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_transpose->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_transpose->addListener (this);

    addAndMakeVisible (m_label_osc1_transpose = new Label ("OSC 2 Transpose",
                                                           TRANS("value")));
    m_label_osc1_transpose->setFont (Font (14.00f, Font::plain));
    m_label_osc1_transpose->setJustificationType (Justification::centred);
    m_label_osc1_transpose->setEditable (true, true, false);
    m_label_osc1_transpose->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_transpose->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_transpose->addListener (this);

    addAndMakeVisible (m_label_osc0_det = new Label ("OSC 1 Detune",
                                                     TRANS("value")));
    m_label_osc0_det->setFont (Font (14.00f, Font::plain));
    m_label_osc0_det->setJustificationType (Justification::centred);
    m_label_osc0_det->setEditable (true, true, false);
    m_label_osc0_det->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_det->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_det->addListener (this);

    addAndMakeVisible (m_label_osc1_det = new Label ("OSC 2 Detune",
                                                     TRANS("value")));
    m_label_osc1_det->setFont (Font (14.00f, Font::plain));
    m_label_osc1_det->setJustificationType (Justification::centred);
    m_label_osc1_det->setEditable (true, true, false);
    m_label_osc1_det->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_det->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_det->addListener (this);

    addAndMakeVisible (m_slider_vca_env_amount = new Slider ("VCA ENV Amount"));
    m_slider_vca_env_amount->setTooltip (TRANS("VCA Envelope Amount [%]"));
    m_slider_vca_env_amount->setRange (0, 1, 0);
    m_slider_vca_env_amount->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_env_amount->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_env_amount->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_env_amount->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_env_amount->addListener (this);

    addAndMakeVisible (m_label_vca_env_amount = new Label ("VCA ENV Amount",
                                                           TRANS("value")));
    m_label_vca_env_amount->setFont (Font (14.00f, Font::plain));
    m_label_vca_env_amount->setJustificationType (Justification::centred);
    m_label_vca_env_amount->setEditable (true, true, false);
    m_label_vca_env_amount->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_env_amount->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_env_amount->addListener (this);

    addAndMakeVisible (m_slider_osc0_dutycycle = new Slider ("OSC 1 pulse width"));
    m_slider_osc0_dutycycle->setTooltip (TRANS("OSC 1 pulse width [%]"));
    m_slider_osc0_dutycycle->setRange (0, 1, 0);
    m_slider_osc0_dutycycle->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_dutycycle->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_dutycycle->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_dutycycle->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_dutycycle->addListener (this);

    addAndMakeVisible (m_slider_osc1_dutycycle = new Slider ("OSC 2 pulse width"));
    m_slider_osc1_dutycycle->setTooltip (TRANS("OSC 2 pulse width [%]"));
    m_slider_osc1_dutycycle->setRange (0, 1, 0);
    m_slider_osc1_dutycycle->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_dutycycle->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_dutycycle->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_dutycycle->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_dutycycle->addListener (this);

    addAndMakeVisible (m_label_osc0_dutycycle = new Label ("OSC 1 pulse width",
                                                           TRANS("value")));
    m_label_osc0_dutycycle->setFont (Font (14.00f, Font::plain));
    m_label_osc0_dutycycle->setJustificationType (Justification::centred);
    m_label_osc0_dutycycle->setEditable (true, true, false);
    m_label_osc0_dutycycle->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_dutycycle->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_dutycycle->addListener (this);

    addAndMakeVisible (m_label_osc1_dutycycle = new Label ("OSC 2 pulse width",
                                                           TRANS("value")));
    m_label_osc1_dutycycle->setFont (Font (14.00f, Font::plain));
    m_label_osc1_dutycycle->setJustificationType (Justification::centred);
    m_label_osc1_dutycycle->setEditable (true, true, false);
    m_label_osc1_dutycycle->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_dutycycle->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_dutycycle->addListener (this);

    addAndMakeVisible (m_slider_lfo0_speed = new Slider ("LFO 1 speed"));
    m_slider_lfo0_speed->setTooltip (TRANS("LFO 1 speed [Hz]"));
    m_slider_lfo0_speed->setRange (0, 1, 0);
    m_slider_lfo0_speed->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo0_speed->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo0_speed->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo0_speed->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo0_speed->addListener (this);

    addAndMakeVisible (m_slider_osc1_fm_amt0 = new Slider ("OSC 2 FM amount 1"));
    m_slider_osc1_fm_amt0->setTooltip (TRANS("OSC 2 FM amount [semitones]"));
    m_slider_osc1_fm_amt0->setRange (0, 1, 0);
    m_slider_osc1_fm_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_fm_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_fm_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_fm_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_fm_amt0->addListener (this);

    addAndMakeVisible (m_slider_osc0_fm_amt0 = new Slider ("OSC 1 FM amount 1"));
    m_slider_osc0_fm_amt0->setTooltip (TRANS("OSC 1 FM amount [semitones]"));
    m_slider_osc0_fm_amt0->setRange (0, 1, 0);
    m_slider_osc0_fm_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_fm_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_fm_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_fm_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_fm_amt0->addListener (this);

    addAndMakeVisible (m_label_lfo0_speed = new Label ("LFO 1 speed",
                                                       TRANS("value")));
    m_label_lfo0_speed->setFont (Font (14.00f, Font::plain));
    m_label_lfo0_speed->setJustificationType (Justification::centred);
    m_label_lfo0_speed->setEditable (true, true, false);
    m_label_lfo0_speed->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo0_speed->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo0_speed->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo0_speed->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo0_speed->addListener (this);

    addAndMakeVisible (m_label_osc0_fm_amt0 = new Label ("OSC 1 FM amt 1",
                                                         TRANS("value")));
    m_label_osc0_fm_amt0->setFont (Font (14.00f, Font::plain));
    m_label_osc0_fm_amt0->setJustificationType (Justification::centred);
    m_label_osc0_fm_amt0->setEditable (true, true, false);
    m_label_osc0_fm_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_fm_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_fm_amt0->addListener (this);

    addAndMakeVisible (m_label_osc1_fm_amt0 = new Label ("OSC 2 FM amt 1",
                                                         TRANS("value")));
    m_label_osc1_fm_amt0->setFont (Font (14.00f, Font::plain));
    m_label_osc1_fm_amt0->setJustificationType (Justification::centred);
    m_label_osc1_fm_amt0->setEditable (true, true, false);
    m_label_osc1_fm_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_fm_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_fm_amt0->addListener (this);

    addAndMakeVisible (m_slider_vcf_f_amt0 = new Slider ("VCF Cutoff amount 1"));
    m_slider_vcf_f_amt0->setTooltip (TRANS("VCF Cutoff Amount [%]"));
    m_slider_vcf_f_amt0->setRange (0, 1, 0);
    m_slider_vcf_f_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_f_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_f_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_f_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_f_amt0->addListener (this);

    addAndMakeVisible (m_label_vcf_f_amt0 = new Label ("VCF Cutoff amount 1",
                                                       TRANS("value")));
    m_label_vcf_f_amt0->setFont (Font (14.00f, Font::plain));
    m_label_vcf_f_amt0->setJustificationType (Justification::centred);
    m_label_vcf_f_amt0->setEditable (true, true, false);
    m_label_vcf_f_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_f_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_f_amt0->addListener (this);

    addAndMakeVisible (m_slider_lfo1_speed = new Slider ("LFO 2 speed"));
    m_slider_lfo1_speed->setTooltip (TRANS("LFO 2 speed [Hz]"));
    m_slider_lfo1_speed->setRange (0, 1, 0);
    m_slider_lfo1_speed->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo1_speed->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo1_speed->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo1_speed->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo1_speed->addListener (this);

    addAndMakeVisible (m_label_lfo1_speed = new Label ("LFO 2 speed",
                                                       TRANS("value")));
    m_label_lfo1_speed->setFont (Font (14.00f, Font::plain));
    m_label_lfo1_speed->setJustificationType (Justification::centred);
    m_label_lfo1_speed->setEditable (true, true, false);
    m_label_lfo1_speed->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo1_speed->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo1_speed->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_shape = new ComboBox ("OSC 1 shape"));
    m_comboBox_osc0_shape->setTooltip (TRANS("OSC 1 shape"));
    m_comboBox_osc0_shape->setEditableText (false);
    m_comboBox_osc0_shape->setJustificationType (Justification::centred);
    m_comboBox_osc0_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_shape->addItem (TRANS("Saw"), 1);
    m_comboBox_osc0_shape->addItem (TRANS("Pulse"), 2);
    m_comboBox_osc0_shape->addItem (TRANS("Tri"), 3);
    m_comboBox_osc0_shape->addItem (TRANS("Sine"), 4);
    m_comboBox_osc0_shape->addItem (TRANS("Impulse"), 5);
    m_comboBox_osc0_shape->addListener (this);

    addAndMakeVisible (m_comboBox_osc1_shape = new ComboBox ("OSC 2 shape"));
    m_comboBox_osc1_shape->setTooltip (TRANS("OSC 2 shape"));
    m_comboBox_osc1_shape->setEditableText (false);
    m_comboBox_osc1_shape->setJustificationType (Justification::centred);
    m_comboBox_osc1_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_shape->addItem (TRANS("Saw"), 1);
    m_comboBox_osc1_shape->addItem (TRANS("Pulse"), 2);
    m_comboBox_osc1_shape->addItem (TRANS("Tri"), 3);
    m_comboBox_osc1_shape->addItem (TRANS("Sine"), 4);
    m_comboBox_osc1_shape->addItem (TRANS("Impulse"), 5);
    m_comboBox_osc1_shape->addListener (this);

    addAndMakeVisible (m_comboBox_lfo0_shape = new ComboBox ("LFO 1 shape"));
    m_comboBox_lfo0_shape->setTooltip (TRANS("LFO 1 shape"));
    m_comboBox_lfo0_shape->setEditableText (false);
    m_comboBox_lfo0_shape->setJustificationType (Justification::centred);
    m_comboBox_lfo0_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_lfo0_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_lfo0_shape->addItem (TRANS("Sine"), 1);
    m_comboBox_lfo0_shape->addItem (TRANS("Cosine"), 2);
    m_comboBox_lfo0_shape->addItem (TRANS("Saw"), 3);
    m_comboBox_lfo0_shape->addItem (TRANS("Square"), 4);
    m_comboBox_lfo0_shape->addItem (TRANS("Tri"), 5);
    m_comboBox_lfo0_shape->addItem (TRANS("S&H 1"), 6);
    m_comboBox_lfo0_shape->addItem (TRANS("S&H 2"), 7);
    m_comboBox_lfo0_shape->addItem (TRANS("1-Sine"), 8);
    m_comboBox_lfo0_shape->addItem (TRANS("1-Cosine"), 9);
    m_comboBox_lfo0_shape->addItem (TRANS("1-Saw"), 10);
    m_comboBox_lfo0_shape->addItem (TRANS("1-Square"), 11);
    m_comboBox_lfo0_shape->addItem (TRANS("1-Tri"), 12);
    m_comboBox_lfo0_shape->addListener (this);

    addAndMakeVisible (m_comboBox_lfo1_shape = new ComboBox ("LFO 2 shape"));
    m_comboBox_lfo1_shape->setTooltip (TRANS("LFO 2 shape"));
    m_comboBox_lfo1_shape->setEditableText (false);
    m_comboBox_lfo1_shape->setJustificationType (Justification::centred);
    m_comboBox_lfo1_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_lfo1_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_lfo1_shape->addItem (TRANS("Sine"), 1);
    m_comboBox_lfo1_shape->addItem (TRANS("Cosine"), 2);
    m_comboBox_lfo1_shape->addItem (TRANS("Saw"), 3);
    m_comboBox_lfo1_shape->addItem (TRANS("Square"), 4);
    m_comboBox_lfo1_shape->addItem (TRANS("Tri"), 5);
    m_comboBox_lfo1_shape->addItem (TRANS("S&H 1"), 6);
    m_comboBox_lfo1_shape->addItem (TRANS("S&H 2"), 7);
    m_comboBox_lfo1_shape->addItem (TRANS("1-Sine"), 8);
    m_comboBox_lfo1_shape->addItem (TRANS("1-Cosine"), 9);
    m_comboBox_lfo1_shape->addItem (TRANS("1-Saw"), 10);
    m_comboBox_lfo1_shape->addItem (TRANS("1-Square"), 11);
    m_comboBox_lfo1_shape->addItem (TRANS("1-Tri"), 12);
    m_comboBox_lfo1_shape->addListener (this);

    addAndMakeVisible (m_slider_lfo2_speed = new Slider ("LFO 3 speed"));
    m_slider_lfo2_speed->setTooltip (TRANS("LFO 3 speed [Hz]"));
    m_slider_lfo2_speed->setRange (0, 1, 0);
    m_slider_lfo2_speed->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo2_speed->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo2_speed->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo2_speed->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo2_speed->addListener (this);

    addAndMakeVisible (m_slider_lfo3_speed = new Slider ("LFO 4 speed"));
    m_slider_lfo3_speed->setTooltip (TRANS("LFO 4 speed [Hz]"));
    m_slider_lfo3_speed->setRange (0, 1, 0);
    m_slider_lfo3_speed->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo3_speed->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo3_speed->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo3_speed->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo3_speed->addListener (this);

    addAndMakeVisible (m_comboBox_lfo2_shape = new ComboBox ("LFO 3 shape"));
    m_comboBox_lfo2_shape->setTooltip (TRANS("LFO 3 shape"));
    m_comboBox_lfo2_shape->setEditableText (false);
    m_comboBox_lfo2_shape->setJustificationType (Justification::centred);
    m_comboBox_lfo2_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_lfo2_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_lfo2_shape->addItem (TRANS("Sine"), 1);
    m_comboBox_lfo2_shape->addItem (TRANS("Cosine"), 2);
    m_comboBox_lfo2_shape->addItem (TRANS("Saw"), 3);
    m_comboBox_lfo2_shape->addItem (TRANS("Square"), 4);
    m_comboBox_lfo2_shape->addItem (TRANS("Tri"), 5);
    m_comboBox_lfo2_shape->addItem (TRANS("S&H 1"), 6);
    m_comboBox_lfo2_shape->addItem (TRANS("S&H 2"), 7);
    m_comboBox_lfo2_shape->addItem (TRANS("1-Sine"), 8);
    m_comboBox_lfo2_shape->addItem (TRANS("1-Cosine"), 9);
    m_comboBox_lfo2_shape->addItem (TRANS("1-Saw"), 10);
    m_comboBox_lfo2_shape->addItem (TRANS("1-Square"), 11);
    m_comboBox_lfo2_shape->addItem (TRANS("1-Tri"), 12);
    m_comboBox_lfo2_shape->addListener (this);

    addAndMakeVisible (m_comboBox_lfo3_shape = new ComboBox ("LFO 4 shape"));
    m_comboBox_lfo3_shape->setTooltip (TRANS("LFO 4 shape"));
    m_comboBox_lfo3_shape->setEditableText (false);
    m_comboBox_lfo3_shape->setJustificationType (Justification::centred);
    m_comboBox_lfo3_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_lfo3_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_lfo3_shape->addItem (TRANS("Sine"), 1);
    m_comboBox_lfo3_shape->addItem (TRANS("Cosine"), 2);
    m_comboBox_lfo3_shape->addItem (TRANS("Saw"), 3);
    m_comboBox_lfo3_shape->addItem (TRANS("Square"), 4);
    m_comboBox_lfo3_shape->addItem (TRANS("Tri"), 5);
    m_comboBox_lfo3_shape->addItem (TRANS("S&H 1"), 6);
    m_comboBox_lfo3_shape->addItem (TRANS("S&H 2"), 7);
    m_comboBox_lfo3_shape->addItem (TRANS("1-Sine"), 8);
    m_comboBox_lfo3_shape->addItem (TRANS("1-Cosine"), 9);
    m_comboBox_lfo3_shape->addItem (TRANS("1-Saw"), 10);
    m_comboBox_lfo3_shape->addItem (TRANS("1-Square"), 11);
    m_comboBox_lfo3_shape->addItem (TRANS("1-Tri"), 12);
    m_comboBox_lfo3_shape->addListener (this);

    addAndMakeVisible (m_label_lfo2_speed = new Label ("LFO 3 speed",
                                                       TRANS("value")));
    m_label_lfo2_speed->setFont (Font (14.00f, Font::plain));
    m_label_lfo2_speed->setJustificationType (Justification::centred);
    m_label_lfo2_speed->setEditable (true, true, false);
    m_label_lfo2_speed->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo2_speed->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo2_speed->addListener (this);

    addAndMakeVisible (m_label_lfo3_speed = new Label ("LFO 3 speed",
                                                       TRANS("value")));
    m_label_lfo3_speed->setFont (Font (14.00f, Font::plain));
    m_label_lfo3_speed->setJustificationType (Justification::centred);
    m_label_lfo3_speed->setEditable (true, true, false);
    m_label_lfo3_speed->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo3_speed->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo3_speed->addListener (this);

    addAndMakeVisible (m_comboBox_vcf_f_src0 = new ComboBox ("VCF Cutoff Source 1"));
    m_comboBox_vcf_f_src0->setTooltip (TRANS("VCF Cutoff Modulation Source 1"));
    m_comboBox_vcf_f_src0->setEditableText (false);
    m_comboBox_vcf_f_src0->setJustificationType (Justification::centred);
    m_comboBox_vcf_f_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_vcf_f_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vcf_f_src0->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_fm_src0 = new ComboBox ("OSC 1 FM Source 1"));
    m_comboBox_osc0_fm_src0->setTooltip (TRANS("OSC 1 FM Modulation Source 1"));
    m_comboBox_osc0_fm_src0->setEditableText (false);
    m_comboBox_osc0_fm_src0->setJustificationType (Justification::centred);
    m_comboBox_osc0_fm_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_fm_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_fm_src0->addListener (this);

    addAndMakeVisible (m_comboBox_osc1_fm_src0 = new ComboBox ("OSC 2 FM Source 1"));
    m_comboBox_osc1_fm_src0->setTooltip (TRANS("OSC 2 FM Modulation Source 1"));
    m_comboBox_osc1_fm_src0->setEditableText (false);
    m_comboBox_osc1_fm_src0->setJustificationType (Justification::centred);
    m_comboBox_osc1_fm_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_fm_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_fm_src0->addListener (this);

    addAndMakeVisible (m_slider_vca_am_amt0 = new Slider ("Tremolo amt"));
    m_slider_vca_am_amt0->setTooltip (TRANS("Tremolo Amount [%]"));
    m_slider_vca_am_amt0->setRange (0, 1, 0);
    m_slider_vca_am_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_am_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_am_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_am_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_am_amt0->addListener (this);

    addAndMakeVisible (m_label_vca_am_amt0 = new Label ("Tremolo amt",
                                                        TRANS("value")));
    m_label_vca_am_amt0->setFont (Font (14.00f, Font::plain));
    m_label_vca_am_amt0->setJustificationType (Justification::centred);
    m_label_vca_am_amt0->setEditable (true, true, false);
    m_label_vca_am_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_am_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_am_amt0->addListener (this);

    addAndMakeVisible (m_comboBox_vca_am_src0 = new ComboBox ("Tremolo Source 1"));
    m_comboBox_vca_am_src0->setTooltip (TRANS("Tremolo Modulation Source 1"));
    m_comboBox_vca_am_src0->setEditableText (false);
    m_comboBox_vca_am_src0->setJustificationType (Justification::centred);
    m_comboBox_vca_am_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_vca_am_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vca_am_src0->addListener (this);

    addAndMakeVisible (m_slider_vca_pan_amt0 = new Slider ("Stereo pan amt"));
    m_slider_vca_pan_amt0->setTooltip (TRANS("Stereo Pan Amount [%]"));
    m_slider_vca_pan_amt0->setRange (0, 1, 0);
    m_slider_vca_pan_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vca_pan_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vca_pan_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vca_pan_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vca_pan_amt0->addListener (this);

    addAndMakeVisible (m_label_vca_pan_amt0 = new Label ("Stereo pan amt",
                                                         TRANS("value")));
    m_label_vca_pan_amt0->setFont (Font (14.00f, Font::plain));
    m_label_vca_pan_amt0->setJustificationType (Justification::centred);
    m_label_vca_pan_amt0->setEditable (true, true, false);
    m_label_vca_pan_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_vca_pan_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vca_pan_amt0->addListener (this);

    addAndMakeVisible (m_comboBox_vca_pan_src0 = new ComboBox ("Stereo pan Source"));
    m_comboBox_vca_pan_src0->setTooltip (TRANS("Stereo Pan Modulation Source 1"));
    m_comboBox_vca_pan_src0->setEditableText (false);
    m_comboBox_vca_pan_src0->setJustificationType (Justification::centred);
    m_comboBox_vca_pan_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_vca_pan_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vca_pan_src0->addListener (this);

    addAndMakeVisible (m_label_synth_name = new Label ("Synth Name",
                                                       TRANS("Jay Synth")));
    m_label_synth_name->setFont (Font ("Arial", 20.00f, Font::plain));
    m_label_synth_name->setJustificationType (Justification::centredLeft);
    m_label_synth_name->setEditable (false, false, false);
    m_label_synth_name->setColour (Label::textColourId, Colours::white);
    m_label_synth_name->setColour (TextEditor::textColourId, Colours::black);
    m_label_synth_name->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_label_synth_version = new Label ("Synth Version",
                                                          TRANS("V 1.0.0")));
    m_label_synth_version->setFont (Font ("Arial", 14.00f, Font::plain));
    m_label_synth_version->setJustificationType (Justification::centredRight);
    m_label_synth_version->setEditable (false, false, false);
    m_label_synth_version->setColour (Label::textColourId, Colours::white);
    m_label_synth_version->setColour (TextEditor::textColourId, Colours::black);
    m_label_synth_version->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_comboBox_vcf_type = new ComboBox ("VCF Type"));
    m_comboBox_vcf_type->setTooltip (TRANS("VCF Type"));
    m_comboBox_vcf_type->setEditableText (false);
    m_comboBox_vcf_type->setJustificationType (Justification::centred);
    m_comboBox_vcf_type->setTextWhenNothingSelected (String::empty);
    m_comboBox_vcf_type->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vcf_type->addItem (TRANS("LPF"), 1);
    m_comboBox_vcf_type->addItem (TRANS("HPF"), 2);
    m_comboBox_vcf_type->addItem (TRANS("BPF"), 3);
    m_comboBox_vcf_type->addListener (this);

    addAndMakeVisible (m_slider_lfo0_smooth = new Slider ("LFO 1 smooth"));
    m_slider_lfo0_smooth->setTooltip (TRANS("LFO 1 smooth [%]"));
    m_slider_lfo0_smooth->setRange (0, 1, 0);
    m_slider_lfo0_smooth->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo0_smooth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo0_smooth->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo0_smooth->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo0_smooth->addListener (this);

    addAndMakeVisible (m_label_lfo0_smooth = new Label ("LFO 1 smooth",
                                                        TRANS("value")));
    m_label_lfo0_smooth->setFont (Font (14.00f, Font::plain));
    m_label_lfo0_smooth->setJustificationType (Justification::centred);
    m_label_lfo0_smooth->setEditable (true, true, false);
    m_label_lfo0_smooth->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo0_smooth->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo0_smooth->addListener (this);

    addAndMakeVisible (m_slider_lfo1_smooth = new Slider ("LFO 2 smooth"));
    m_slider_lfo1_smooth->setTooltip (TRANS("LFO 2 smooth [%]"));
    m_slider_lfo1_smooth->setRange (0, 1, 0);
    m_slider_lfo1_smooth->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo1_smooth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo1_smooth->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo1_smooth->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo1_smooth->addListener (this);

    addAndMakeVisible (m_label_lfo1_smooth = new Label ("LFO 2 smooth",
                                                        TRANS("value")));
    m_label_lfo1_smooth->setFont (Font (14.00f, Font::plain));
    m_label_lfo1_smooth->setJustificationType (Justification::centred);
    m_label_lfo1_smooth->setEditable (true, true, false);
    m_label_lfo1_smooth->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo1_smooth->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo1_smooth->addListener (this);

    addAndMakeVisible (m_slider_lfo2_smooth = new Slider ("LFO 3 smooth"));
    m_slider_lfo2_smooth->setTooltip (TRANS("LFO 3 smooth [%]"));
    m_slider_lfo2_smooth->setRange (0, 1, 0);
    m_slider_lfo2_smooth->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo2_smooth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo2_smooth->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo2_smooth->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo2_smooth->addListener (this);

    addAndMakeVisible (m_label_lfo2_smooth = new Label ("LFO 3 smooth",
                                                        TRANS("value")));
    m_label_lfo2_smooth->setFont (Font (14.00f, Font::plain));
    m_label_lfo2_smooth->setJustificationType (Justification::centred);
    m_label_lfo2_smooth->setEditable (true, true, false);
    m_label_lfo2_smooth->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo2_smooth->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo2_smooth->addListener (this);

    addAndMakeVisible (m_slider_lfo3_smooth = new Slider ("LFO 4 smooth"));
    m_slider_lfo3_smooth->setTooltip (TRANS("LFO 4 smooth [%]"));
    m_slider_lfo3_smooth->setRange (0, 1, 0);
    m_slider_lfo3_smooth->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo3_smooth->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo3_smooth->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo3_smooth->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo3_smooth->addListener (this);

    addAndMakeVisible (m_label_lfo3_smooth = new Label ("LFO 4 smooth",
                                                        TRANS("value")));
    m_label_lfo3_smooth->setFont (Font (14.00f, Font::plain));
    m_label_lfo3_smooth->setJustificationType (Justification::centred);
    m_label_lfo3_smooth->setEditable (true, true, false);
    m_label_lfo3_smooth->setColour (TextEditor::textColourId, Colours::black);
    m_label_lfo3_smooth->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo3_smooth->addListener (this);

    addAndMakeVisible (m_slider_osc0_pwm_amt0 = new Slider ("OSC 1 PWM amount 1"));
    m_slider_osc0_pwm_amt0->setTooltip (TRANS("OSC 1 PWM Amount [%]"));
    m_slider_osc0_pwm_amt0->setRange (0, 1, 0);
    m_slider_osc0_pwm_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_pwm_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_pwm_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_pwm_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_pwm_amt0->addListener (this);

    addAndMakeVisible (m_label_osc0_pwm_amt0 = new Label ("OSC 1 PWM 1",
                                                          TRANS("value")));
    m_label_osc0_pwm_amt0->setFont (Font (14.00f, Font::plain));
    m_label_osc0_pwm_amt0->setJustificationType (Justification::centred);
    m_label_osc0_pwm_amt0->setEditable (true, true, false);
    m_label_osc0_pwm_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_pwm_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_pwm_amt0->addListener (this);

    addAndMakeVisible (m_slider_osc1_pwm_amt0 = new Slider ("OSC 2 PWM amount 1"));
    m_slider_osc1_pwm_amt0->setTooltip (TRANS("OSC 2 PWM Amount [%]"));
    m_slider_osc1_pwm_amt0->setRange (0, 1, 0);
    m_slider_osc1_pwm_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_pwm_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_pwm_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_pwm_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_pwm_amt0->addListener (this);

    addAndMakeVisible (m_label_osc1_pwm_amt0 = new Label ("OSC 2 PWM amount 1",
                                                          TRANS("value")));
    m_label_osc1_pwm_amt0->setFont (Font (14.00f, Font::plain));
    m_label_osc1_pwm_amt0->setJustificationType (Justification::centred);
    m_label_osc1_pwm_amt0->setEditable (true, true, false);
    m_label_osc1_pwm_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_pwm_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_pwm_amt0->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_pwm_src0 = new ComboBox ("OSC 1 PWM Source 1"));
    m_comboBox_osc0_pwm_src0->setTooltip (TRANS("OSC 1 PWM Modulation Source 1"));
    m_comboBox_osc0_pwm_src0->setEditableText (false);
    m_comboBox_osc0_pwm_src0->setJustificationType (Justification::centred);
    m_comboBox_osc0_pwm_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_pwm_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_pwm_src0->addListener (this);

    addAndMakeVisible (m_comboBox_osc1_pwm_src0 = new ComboBox ("OSC 2 PWM Source 1"));
    m_comboBox_osc1_pwm_src0->setTooltip (TRANS("OSC 2 PWM Modulation Source 1"));
    m_comboBox_osc1_pwm_src0->setEditableText (false);
    m_comboBox_osc1_pwm_src0->setJustificationType (Justification::centred);
    m_comboBox_osc1_pwm_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_pwm_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_pwm_src0->addListener (this);

    addAndMakeVisible (m_slider_osc0_level = new Slider ("OSC 1 Level"));
    m_slider_osc0_level->setTooltip (TRANS("OSC 1 Level [%]"));
    m_slider_osc0_level->setRange (0, 1, 0);
    m_slider_osc0_level->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_level->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_level->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_osc0_level->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_level->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_level->addListener (this);

    addAndMakeVisible (m_label_osc0_level = new Label ("OSC 1 Level",
                                                       TRANS("value")));
    m_label_osc0_level->setFont (Font (14.00f, Font::plain));
    m_label_osc0_level->setJustificationType (Justification::centred);
    m_label_osc0_level->setEditable (true, true, false);
    m_label_osc0_level->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_level->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_level->addListener (this);

    addAndMakeVisible (m_slider_osc1_level = new Slider ("OSC 2 Level"));
    m_slider_osc1_level->setTooltip (TRANS("OSC 2 Level [%]"));
    m_slider_osc1_level->setRange (0, 1, 0);
    m_slider_osc1_level->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_level->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_level->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_osc1_level->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_level->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_level->addListener (this);

    addAndMakeVisible (m_label_osc1_level = new Label ("OSC 2 Level",
                                                       TRANS("value")));
    m_label_osc1_level->setFont (Font (14.00f, Font::plain));
    m_label_osc1_level->setJustificationType (Justification::centred);
    m_label_osc1_level->setEditable (true, true, false);
    m_label_osc1_level->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_level->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_level->addListener (this);

    addAndMakeVisible (m_slider_noise_level = new Slider ("Noise Level"));
    m_slider_noise_level->setTooltip (TRANS("Noise Level [%]"));
    m_slider_noise_level->setRange (0, 1, 0);
    m_slider_noise_level->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_noise_level->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_noise_level->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_noise_level->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_noise_level->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_noise_level->addListener (this);

    addAndMakeVisible (m_label_noise_level = new Label ("Noise Level",
                                                        TRANS("value")));
    m_label_noise_level->setFont (Font (14.00f, Font::plain));
    m_label_noise_level->setJustificationType (Justification::centred);
    m_label_noise_level->setEditable (true, true, false);
    m_label_noise_level->setColour (TextEditor::textColourId, Colours::black);
    m_label_noise_level->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_noise_level->addListener (this);

    addAndMakeVisible (m_comboBox_noise_shape = new ComboBox ("Noise shape"));
    m_comboBox_noise_shape->setTooltip (TRANS("Noise shape"));
    m_comboBox_noise_shape->setEditableText (false);
    m_comboBox_noise_shape->setJustificationType (Justification::centred);
    m_comboBox_noise_shape->setTextWhenNothingSelected (String::empty);
    m_comboBox_noise_shape->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_noise_shape->addItem (TRANS("Uniform"), 1);
    m_comboBox_noise_shape->addItem (TRANS("Gauss"), 2);
    m_comboBox_noise_shape->addListener (this);

    addAndMakeVisible (m_btn_noise_enable_led = new ButtonLED (L"Noise On/Off"));
    addAndMakeVisible (m_btn_osc0_enable = new ButtonLED (L"OSC 1 On/Off"));
    addAndMakeVisible (m_btn_osc1_enable = new ButtonLED (L"OSC 2 On/Off"));
    addAndMakeVisible (m_label_patch_name = new Label ("Label Patch Name",
                                                       TRANS("Patch name")));
    m_label_patch_name->setFont (Font (20.00f, Font::plain));
    m_label_patch_name->setJustificationType (Justification::centredLeft);
    m_label_patch_name->setEditable (true, true, false);
    m_label_patch_name->setColour (Label::textColourId, Colours::white);
    m_label_patch_name->setColour (TextEditor::textColourId, Colours::black);
    m_label_patch_name->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_patch_name->addListener (this);

    addAndMakeVisible (m_button_patch_incr = new TextButton ("Patch Increment"));
    m_button_patch_incr->setTooltip (TRANS("Next Patch"));
    m_button_patch_incr->setButtonText (TRANS("+"));

    addAndMakeVisible (m_button_patch_decr = new TextButton ("Patch Decrement"));
    m_button_patch_decr->setTooltip (TRANS("Previous Patch"));
    m_button_patch_decr->setButtonText (TRANS("-"));

    addAndMakeVisible (m_label_patch_number = new Label ("Label Patch Number",
                                                         TRANS("00")));
    m_label_patch_number->setFont (Font (20.00f, Font::plain));
    m_label_patch_number->setJustificationType (Justification::centredLeft);
    m_label_patch_number->setEditable (true, true, false);
    m_label_patch_number->setColour (Label::textColourId, Colours::white);
    m_label_patch_number->setColour (TextEditor::textColourId, Colours::black);
    m_label_patch_number->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_patch_number->addListener (this);

    addAndMakeVisible (m_label_osc1_pb_min = new Label ("OSC 2 Pitch bender min",
                                                        TRANS("-24")));
    m_label_osc1_pb_min->setTooltip (TRANS("OSC 2 pitch bender minimum [semitones]"));
    m_label_osc1_pb_min->setFont (Font (12.00f, Font::plain));
    m_label_osc1_pb_min->setJustificationType (Justification::centred);
    m_label_osc1_pb_min->setEditable (true, true, false);
    m_label_osc1_pb_min->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_pb_min->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_pb_min->addListener (this);

    addAndMakeVisible (m_label_osc1_pb_max = new Label ("OSC 2 Pitch bender max",
                                                        TRANS("+24")));
    m_label_osc1_pb_max->setTooltip (TRANS("OSC 2 pitch bender maximum [semitones]"));
    m_label_osc1_pb_max->setFont (Font (12.00f, Font::plain));
    m_label_osc1_pb_max->setJustificationType (Justification::centred);
    m_label_osc1_pb_max->setEditable (true, true, false);
    m_label_osc1_pb_max->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_pb_max->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_pb_max->addListener (this);

    addAndMakeVisible (m_label_osc0_pb_max = new Label ("OSC 1 Pitch bender max",
                                                        TRANS("+24")));
    m_label_osc0_pb_max->setTooltip (TRANS("OSC 1 pitch bender maximum [semitones]"));
    m_label_osc0_pb_max->setFont (Font (12.00f, Font::plain));
    m_label_osc0_pb_max->setJustificationType (Justification::centred);
    m_label_osc0_pb_max->setEditable (true, true, false);
    m_label_osc0_pb_max->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_pb_max->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_pb_max->addListener (this);

    addAndMakeVisible (m_label_osc0_pb_min = new Label ("OSC 1 Pitch bender min",
                                                        TRANS("-24")));
    m_label_osc0_pb_min->setTooltip (TRANS("OSC 1 pitch bender minimum [semitones]"));
    m_label_osc0_pb_min->setFont (Font (12.00f, Font::plain));
    m_label_osc0_pb_min->setJustificationType (Justification::centred);
    m_label_osc0_pb_min->setEditable (true, true, false);
    m_label_osc0_pb_min->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_pb_min->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_pb_min->addListener (this);

    addAndMakeVisible (m_slider_master_tune = new Slider ("Master tune"));
    m_slider_master_tune->setTooltip (TRANS("Master tune [semitones]"));
    m_slider_master_tune->setRange (0, 1, 0);
    m_slider_master_tune->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_master_tune->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_master_tune->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_master_tune->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_master_tune->addListener (this);

    addAndMakeVisible (m_label_master_tune = new Label ("Master tune",
                                                        TRANS("value")));
    m_label_master_tune->setFont (Font (14.00f, Font::plain));
    m_label_master_tune->setJustificationType (Justification::centred);
    m_label_master_tune->setEditable (true, true, false);
    m_label_master_tune->setColour (TextEditor::textColourId, Colours::black);
    m_label_master_tune->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_master_tune->addListener (this);

    addAndMakeVisible (m_button_humanize_enable = new ToggleButton ("Humanize Enable"));
    m_button_humanize_enable->setTooltip (TRANS("Humanize spreads individual voice parameter to get a more vivid sound\\n. Humanize alters VCO tune, VCF cutoff and ENV times."));
    m_button_humanize_enable->setButtonText (TRANS("Humanize"));
    m_button_humanize_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_comboBox_vcf_order = new ComboBox ("VCF Order"));
    m_comboBox_vcf_order->setTooltip (TRANS("VCF Order"));
    m_comboBox_vcf_order->setEditableText (false);
    m_comboBox_vcf_order->setJustificationType (Justification::centred);
    m_comboBox_vcf_order->setTextWhenNothingSelected (String::empty);
    m_comboBox_vcf_order->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vcf_order->addItem (TRANS("12 dB/Oct."), 1);
    m_comboBox_vcf_order->addItem (TRANS("24 dB/Oct."), 2);
    m_comboBox_vcf_order->addSeparator();
    m_comboBox_vcf_order->addListener (this);

    addAndMakeVisible (m_slider_portamento_time = new Slider ("Portamento Time"));
    m_slider_portamento_time->setTooltip (TRANS("Portamento Time [s]"));
    m_slider_portamento_time->setRange (0, 1, 0);
    m_slider_portamento_time->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_portamento_time->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_portamento_time->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_portamento_time->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_portamento_time->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_portamento_time->addListener (this);

    addAndMakeVisible (m_label_portamento_time = new Label ("Portamento Time",
                                                            TRANS("value")));
    m_label_portamento_time->setFont (Font (14.00f, Font::plain));
    m_label_portamento_time->setJustificationType (Justification::centred);
    m_label_portamento_time->setEditable (true, true, false);
    m_label_portamento_time->setColour (TextEditor::textColourId, Colours::black);
    m_label_portamento_time->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_portamento_time->addListener (this);

    addAndMakeVisible (m_button_unisono_enable = new ToggleButton ("Unisono Enable"));
    m_button_unisono_enable->setTooltip (TRANS("This button switches unisono mode on and off"));
    m_button_unisono_enable->setButtonText (TRANS("Unisono"));
    m_button_unisono_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_slider_humanize_var_vco = new Slider ("Humanize Variance VCO"));
    m_slider_humanize_var_vco->setTooltip (TRANS("Humanize spread VCO [%]"));
    m_slider_humanize_var_vco->setRange (0, 1, 0);
    m_slider_humanize_var_vco->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_humanize_var_vco->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_humanize_var_vco->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_humanize_var_vco->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_humanize_var_vco->addListener (this);

    addAndMakeVisible (m_slider_voice_pan_spread = new Slider ("Voice Pan Spread"));
    m_slider_voice_pan_spread->setTooltip (TRANS("Voice Pan Spread [%]"));
    m_slider_voice_pan_spread->setRange (0, 1, 0);
    m_slider_voice_pan_spread->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_voice_pan_spread->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_voice_pan_spread->setColour (Slider::trackColourId, Colour (0x7fffffff));
    m_slider_voice_pan_spread->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_voice_pan_spread->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_voice_pan_spread->addListener (this);

    addAndMakeVisible (m_label_voice_pan_spread = new Label ("Voice Pan Spread",
                                                             TRANS("value")));
    m_label_voice_pan_spread->setFont (Font (14.00f, Font::plain));
    m_label_voice_pan_spread->setJustificationType (Justification::centred);
    m_label_voice_pan_spread->setEditable (true, true, false);
    m_label_voice_pan_spread->setColour (TextEditor::textColourId, Colours::black);
    m_label_voice_pan_spread->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_voice_pan_spread->addListener (this);

    addAndMakeVisible (m_slider_humanize_var_vcf = new Slider ("Humanize Variance VCF"));
    m_slider_humanize_var_vcf->setTooltip (TRANS("Humanize spread VCF [%]"));
    m_slider_humanize_var_vcf->setRange (0, 1, 0);
    m_slider_humanize_var_vcf->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_humanize_var_vcf->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_humanize_var_vcf->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_humanize_var_vcf->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_humanize_var_vcf->addListener (this);

    addAndMakeVisible (m_slider_humanize_var_env = new Slider ("Humanize Variance ENV"));
    m_slider_humanize_var_env->setTooltip (TRANS("Humanize spread Envelopes [%]"));
    m_slider_humanize_var_env->setRange (0, 1, 0);
    m_slider_humanize_var_env->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_humanize_var_env->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_humanize_var_env->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_humanize_var_env->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_humanize_var_env->addListener (this);

    addAndMakeVisible (m_label_unisono_num_voices = new Label ("Unisono Number of Voices",
                                                               TRANS("999")));
    m_label_unisono_num_voices->setTooltip (TRANS("Unisono number of voices to allocate"));
    m_label_unisono_num_voices->setFont (Font (14.00f, Font::plain));
    m_label_unisono_num_voices->setJustificationType (Justification::centred);
    m_label_unisono_num_voices->setEditable (true, true, false);
    m_label_unisono_num_voices->setColour (TextEditor::textColourId, Colours::black);
    m_label_unisono_num_voices->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_unisono_num_voices->addListener (this);

    addAndMakeVisible (m_button_osc0_restart_enable = new ToggleButton ("Restart VCO 1 Enable"));
    m_button_osc0_restart_enable->setTooltip (TRANS("If not set the VCO runs free, starting with different phases on each note trigger. If set, phase is reset on note trigger. This may add more punch to the sound if set on both VCOs."));
    m_button_osc0_restart_enable->setButtonText (TRANS("Restart"));
    m_button_osc0_restart_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_osc1_restart_enable = new ToggleButton ("Restart VCO 2 Enable"));
    m_button_osc1_restart_enable->setTooltip (TRANS("If not set the VCO runs free, starting with different phases on each note trigger. If set, phase is reset on note trigger. This may add more punch to the sound if set on both VCOs."));
    m_button_osc1_restart_enable->setButtonText (TRANS("Restart"));
    m_button_osc1_restart_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_mono_enable = new ToggleButton ("Monophonic Enable"));
    m_button_mono_enable->setTooltip (TRANS("This button switches monophonic mode on and off"));
    m_button_mono_enable->setButtonText (TRANS("Monophonic"));
    m_button_mono_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_comboBox_osc1_fm_src1 = new ComboBox ("OSC 2 FM Source 2"));
    m_comboBox_osc1_fm_src1->setTooltip (TRANS("OSC 2 FM Modulation Source 2"));
    m_comboBox_osc1_fm_src1->setEditableText (false);
    m_comboBox_osc1_fm_src1->setJustificationType (Justification::centred);
    m_comboBox_osc1_fm_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_fm_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_fm_src1->addListener (this);

    addAndMakeVisible (m_comboBox_osc1_pwm_src1 = new ComboBox ("OSC 2 PWM Source 2"));
    m_comboBox_osc1_pwm_src1->setTooltip (TRANS("OSC 2 PWM Modulation Source 2"));
    m_comboBox_osc1_pwm_src1->setEditableText (false);
    m_comboBox_osc1_pwm_src1->setJustificationType (Justification::centred);
    m_comboBox_osc1_pwm_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_pwm_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_pwm_src1->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_fm_src1 = new ComboBox ("OSC 1 FM Source 2"));
    m_comboBox_osc0_fm_src1->setTooltip (TRANS("OSC 1 FM Modulation Source 2"));
    m_comboBox_osc0_fm_src1->setEditableText (false);
    m_comboBox_osc0_fm_src1->setJustificationType (Justification::centred);
    m_comboBox_osc0_fm_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_fm_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_fm_src1->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_pwm_src1 = new ComboBox ("OSC 1 PWM Source 2"));
    m_comboBox_osc0_pwm_src1->setTooltip (TRANS("OSC 1 PWM Modulation Source 2"));
    m_comboBox_osc0_pwm_src1->setEditableText (false);
    m_comboBox_osc0_pwm_src1->setJustificationType (Justification::centred);
    m_comboBox_osc0_pwm_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_pwm_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_pwm_src1->addListener (this);

    addAndMakeVisible (m_comboBox_osc1_am_src0 = new ComboBox ("OSC 2 AM Source 1"));
    m_comboBox_osc1_am_src0->setTooltip (TRANS("OSC 2 AM Modulation Source 1"));
    m_comboBox_osc1_am_src0->setEditableText (false);
    m_comboBox_osc1_am_src0->setJustificationType (Justification::centred);
    m_comboBox_osc1_am_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_am_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_am_src0->addListener (this);

    addAndMakeVisible (m_comboBox_osc1_am_src1 = new ComboBox ("OSC 2 AM Source 2"));
    m_comboBox_osc1_am_src1->setTooltip (TRANS("OSC 2 AM Modulation Source 2"));
    m_comboBox_osc1_am_src1->setEditableText (false);
    m_comboBox_osc1_am_src1->setJustificationType (Justification::centred);
    m_comboBox_osc1_am_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc1_am_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc1_am_src1->addListener (this);

    addAndMakeVisible (m_slider_osc1_am_amt0 = new Slider ("OSC 2 AM amount 1"));
    m_slider_osc1_am_amt0->setTooltip (TRANS("OSC 2 AM amount [%]"));
    m_slider_osc1_am_amt0->setRange (0, 1, 0);
    m_slider_osc1_am_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_am_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_am_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_am_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_am_amt0->addListener (this);

    addAndMakeVisible (m_label_osc1_am_amt0 = new Label ("OSC 2 AM amt 1",
                                                         TRANS("value")));
    m_label_osc1_am_amt0->setFont (Font (14.00f, Font::plain));
    m_label_osc1_am_amt0->setJustificationType (Justification::centred);
    m_label_osc1_am_amt0->setEditable (true, true, false);
    m_label_osc1_am_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_am_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_am_amt0->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_am_src0 = new ComboBox ("OSC 1 AM Source 1"));
    m_comboBox_osc0_am_src0->setTooltip (TRANS("OSC 1 AM Modulation Source 1"));
    m_comboBox_osc0_am_src0->setEditableText (false);
    m_comboBox_osc0_am_src0->setJustificationType (Justification::centred);
    m_comboBox_osc0_am_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_am_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_am_src0->addListener (this);

    addAndMakeVisible (m_comboBox_osc0_am_src1 = new ComboBox ("OSC 1 AM Source 2"));
    m_comboBox_osc0_am_src1->setTooltip (TRANS("OSC 1 AM Modulation Source 2"));
    m_comboBox_osc0_am_src1->setEditableText (false);
    m_comboBox_osc0_am_src1->setJustificationType (Justification::centred);
    m_comboBox_osc0_am_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_osc0_am_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_osc0_am_src1->addListener (this);

    addAndMakeVisible (m_slider_osc0_am_amt0 = new Slider ("OSC 1 AM amount 1"));
    m_slider_osc0_am_amt0->setTooltip (TRANS("OSC 1 AM amount [%]"));
    m_slider_osc0_am_amt0->setRange (0, 1, 0);
    m_slider_osc0_am_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_am_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_am_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_am_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_am_amt0->addListener (this);

    addAndMakeVisible (m_label_osc0_am_amt0 = new Label ("OSC 1 AM amt 1",
                                                         TRANS("value")));
    m_label_osc0_am_amt0->setFont (Font (14.00f, Font::plain));
    m_label_osc0_am_amt0->setJustificationType (Justification::centred);
    m_label_osc0_am_amt0->setEditable (true, true, false);
    m_label_osc0_am_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_am_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_am_amt0->addListener (this);

    addAndMakeVisible (m_slider_env2_attack = new Slider ("ENV 3 Attack"));
    m_slider_env2_attack->setTooltip (TRANS("ENV 3 Attack Time [ms]"));
    m_slider_env2_attack->setRange (0, 1, 0);
    m_slider_env2_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env2_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env2_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env2_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env2_attack->addListener (this);

    addAndMakeVisible (m_slider_env2_decay = new Slider ("ENV 3 Decay"));
    m_slider_env2_decay->setTooltip (TRANS("ENV 3 Decay Time [ms]"));
    m_slider_env2_decay->setRange (0, 1, 0);
    m_slider_env2_decay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env2_decay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env2_decay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env2_decay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env2_decay->addListener (this);

    addAndMakeVisible (m_slider_env2_release = new Slider ("ENV 3 Release"));
    m_slider_env2_release->setTooltip (TRANS("ENV 3 Release Time [ms]"));
    m_slider_env2_release->setRange (0, 1, 0);
    m_slider_env2_release->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env2_release->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env2_release->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env2_release->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env2_release->addListener (this);

    addAndMakeVisible (m_slider_env2_sustain = new Slider ("ENV 3 Sustain"));
    m_slider_env2_sustain->setTooltip (TRANS("ENV 3 Sustain Level [%]"));
    m_slider_env2_sustain->setRange (0, 1, 0);
    m_slider_env2_sustain->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env2_sustain->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env2_sustain->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env2_sustain->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env2_sustain->addListener (this);

    addAndMakeVisible (m_label_env2_attack = new Label ("ENV 3 Attack",
                                                        TRANS("value")));
    m_label_env2_attack->setFont (Font (14.00f, Font::plain));
    m_label_env2_attack->setJustificationType (Justification::centred);
    m_label_env2_attack->setEditable (true, true, false);
    m_label_env2_attack->setColour (TextEditor::textColourId, Colours::black);
    m_label_env2_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env2_attack->addListener (this);

    addAndMakeVisible (m_label_env2_decay = new Label ("ENV 3 Decay",
                                                       TRANS("value")));
    m_label_env2_decay->setFont (Font (14.00f, Font::plain));
    m_label_env2_decay->setJustificationType (Justification::centred);
    m_label_env2_decay->setEditable (true, true, false);
    m_label_env2_decay->setColour (TextEditor::textColourId, Colours::black);
    m_label_env2_decay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env2_decay->addListener (this);

    addAndMakeVisible (m_label_env2_sustain = new Label ("ENV 3 Sustain",
                                                         TRANS("value")));
    m_label_env2_sustain->setFont (Font (14.00f, Font::plain));
    m_label_env2_sustain->setJustificationType (Justification::centred);
    m_label_env2_sustain->setEditable (true, true, false);
    m_label_env2_sustain->setColour (TextEditor::textColourId, Colours::black);
    m_label_env2_sustain->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env2_sustain->addListener (this);

    addAndMakeVisible (m_label_env2_release = new Label ("ENV 3 Release",
                                                         TRANS("value")));
    m_label_env2_release->setFont (Font (14.00f, Font::plain));
    m_label_env2_release->setJustificationType (Justification::centred);
    m_label_env2_release->setEditable (true, true, false);
    m_label_env2_release->setColour (TextEditor::textColourId, Colours::black);
    m_label_env2_release->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env2_release->addListener (this);

    addAndMakeVisible (m_slider_env3_attack = new Slider ("ENV 4 Attack"));
    m_slider_env3_attack->setTooltip (TRANS("ENV 4 Attack Time [ms]"));
    m_slider_env3_attack->setRange (0, 1, 0);
    m_slider_env3_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env3_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env3_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env3_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env3_attack->addListener (this);

    addAndMakeVisible (m_slider_env3_decay = new Slider ("ENV 4 Decay"));
    m_slider_env3_decay->setTooltip (TRANS("ENV 4 Decay Time [ms]"));
    m_slider_env3_decay->setRange (0, 1, 0);
    m_slider_env3_decay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env3_decay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env3_decay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env3_decay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env3_decay->addListener (this);

    addAndMakeVisible (m_slider_env3_release = new Slider ("ENV 4 Release"));
    m_slider_env3_release->setTooltip (TRANS("ENV 4 Release Time [ms]"));
    m_slider_env3_release->setRange (0, 1, 0);
    m_slider_env3_release->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env3_release->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env3_release->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env3_release->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env3_release->addListener (this);

    addAndMakeVisible (m_slider_env3_sustain = new Slider ("ENV 4 Sustain"));
    m_slider_env3_sustain->setTooltip (TRANS("ENV 4 Sustain Level [%]"));
    m_slider_env3_sustain->setRange (0, 1, 0);
    m_slider_env3_sustain->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_env3_sustain->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_env3_sustain->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_env3_sustain->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_env3_sustain->addListener (this);

    addAndMakeVisible (m_label_env3_attack = new Label ("ENV 4 Attack",
                                                        TRANS("value")));
    m_label_env3_attack->setFont (Font (14.00f, Font::plain));
    m_label_env3_attack->setJustificationType (Justification::centred);
    m_label_env3_attack->setEditable (true, true, false);
    m_label_env3_attack->setColour (TextEditor::textColourId, Colours::black);
    m_label_env3_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env3_attack->addListener (this);

    addAndMakeVisible (m_label_env3_decay = new Label ("ENV 4 Decay",
                                                       TRANS("value")));
    m_label_env3_decay->setFont (Font (14.00f, Font::plain));
    m_label_env3_decay->setJustificationType (Justification::centred);
    m_label_env3_decay->setEditable (true, true, false);
    m_label_env3_decay->setColour (TextEditor::textColourId, Colours::black);
    m_label_env3_decay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env3_decay->addListener (this);

    addAndMakeVisible (m_label_env3_sustain = new Label ("ENV 4 Sustain",
                                                         TRANS("value")));
    m_label_env3_sustain->setFont (Font (14.00f, Font::plain));
    m_label_env3_sustain->setJustificationType (Justification::centred);
    m_label_env3_sustain->setEditable (true, true, false);
    m_label_env3_sustain->setColour (TextEditor::textColourId, Colours::black);
    m_label_env3_sustain->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env3_sustain->addListener (this);

    addAndMakeVisible (m_label_env3_release = new Label ("ENV 4 Release",
                                                         TRANS("value")));
    m_label_env3_release->setFont (Font (14.00f, Font::plain));
    m_label_env3_release->setJustificationType (Justification::centred);
    m_label_env3_release->setEditable (true, true, false);
    m_label_env3_release->setColour (TextEditor::textColourId, Colours::black);
    m_label_env3_release->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_env3_release->addListener (this);

    addAndMakeVisible (m_comboBox_vcf_f_src1 = new ComboBox ("VCF Cutoff Source 2"));
    m_comboBox_vcf_f_src1->setTooltip (TRANS("VCF Cutoff Modulation Source 2"));
    m_comboBox_vcf_f_src1->setEditableText (false);
    m_comboBox_vcf_f_src1->setJustificationType (Justification::centred);
    m_comboBox_vcf_f_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_vcf_f_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vcf_f_src1->addListener (this);

    addAndMakeVisible (m_slider_vcf_q_amt0 = new Slider ("VCF Resonance amount 1"));
    m_slider_vcf_q_amt0->setTooltip (TRANS("VCF Resonance Amount [%]"));
    m_slider_vcf_q_amt0->setRange (0, 1, 0);
    m_slider_vcf_q_amt0->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_q_amt0->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_q_amt0->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_q_amt0->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_q_amt0->addListener (this);

    addAndMakeVisible (m_label_vcf_q_amt0 = new Label ("VCF Resonance amount 1",
                                                       TRANS("value")));
    m_label_vcf_q_amt0->setFont (Font (14.00f, Font::plain));
    m_label_vcf_q_amt0->setJustificationType (Justification::centred);
    m_label_vcf_q_amt0->setEditable (true, true, false);
    m_label_vcf_q_amt0->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_q_amt0->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_q_amt0->addListener (this);

    addAndMakeVisible (m_comboBox_vcf_q_src0 = new ComboBox ("VCF Resonance Source 1"));
    m_comboBox_vcf_q_src0->setTooltip (TRANS("VCF Resonance Modulation Source 1"));
    m_comboBox_vcf_q_src0->setEditableText (false);
    m_comboBox_vcf_q_src0->setJustificationType (Justification::centred);
    m_comboBox_vcf_q_src0->setTextWhenNothingSelected (String::empty);
    m_comboBox_vcf_q_src0->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vcf_q_src0->addListener (this);

    addAndMakeVisible (m_comboBox_vcf_q_src1 = new ComboBox ("VCF Resonance Source 2"));
    m_comboBox_vcf_q_src1->setTooltip (TRANS("VCF Resonance Modulation Source 2"));
    m_comboBox_vcf_q_src1->setEditableText (false);
    m_comboBox_vcf_q_src1->setJustificationType (Justification::centred);
    m_comboBox_vcf_q_src1->setTextWhenNothingSelected (String::empty);
    m_comboBox_vcf_q_src1->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_vcf_q_src1->addListener (this);

    addAndMakeVisible (m_label_humanize_var_vco = new Label ("Humanize Variance VCO",
                                                             TRANS("value")));
    m_label_humanize_var_vco->setFont (Font (14.00f, Font::plain));
    m_label_humanize_var_vco->setJustificationType (Justification::centred);
    m_label_humanize_var_vco->setEditable (true, true, false);
    m_label_humanize_var_vco->setColour (TextEditor::textColourId, Colours::black);
    m_label_humanize_var_vco->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_humanize_var_vco->addListener (this);

    addAndMakeVisible (m_label_humanize_var_vcf = new Label ("Humanize Variance VCF",
                                                             TRANS("value")));
    m_label_humanize_var_vcf->setFont (Font (14.00f, Font::plain));
    m_label_humanize_var_vcf->setJustificationType (Justification::centred);
    m_label_humanize_var_vcf->setEditable (true, true, false);
    m_label_humanize_var_vcf->setColour (TextEditor::textColourId, Colours::black);
    m_label_humanize_var_vcf->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_humanize_var_vcf->addListener (this);

    addAndMakeVisible (m_label_humanize_var_env = new Label ("Humanize Variance ENV",
                                                             TRANS("value")));
    m_label_humanize_var_env->setFont (Font (14.00f, Font::plain));
    m_label_humanize_var_env->setJustificationType (Justification::centred);
    m_label_humanize_var_env->setEditable (true, true, false);
    m_label_humanize_var_env->setColour (TextEditor::textColourId, Colours::black);
    m_label_humanize_var_env->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_humanize_var_env->addListener (this);

    addAndMakeVisible (m_btn_limiter_led = new ButtonLED (L"Limiter 1 On/Off"));
    addAndMakeVisible (m_label_limiter_led = new Label ("Limiter LED Text",
                                                        TRANS("Limiting")));
    m_label_limiter_led->setFont (Font ("Arial", 12.00f, Font::plain));
    m_label_limiter_led->setJustificationType (Justification::centredLeft);
    m_label_limiter_led->setEditable (false, false, false);
    m_label_limiter_led->setColour (Label::textColourId, Colours::white);
    m_label_limiter_led->setColour (TextEditor::textColourId, Colours::black);
    m_label_limiter_led->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_slider_lfo0_delay = new Slider ("LFO 1 Delay"));
    m_slider_lfo0_delay->setTooltip (TRANS("LFO 1 Delay [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo0_delay->setRange (0, 1, 0);
    m_slider_lfo0_delay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo0_delay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo0_delay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo0_delay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo0_delay->addListener (this);

    addAndMakeVisible (m_label_lfo0_delay = new Label ("LFO 1 Delay",
                                                       TRANS("value")));
    m_label_lfo0_delay->setFont (Font (14.00f, Font::plain));
    m_label_lfo0_delay->setJustificationType (Justification::centred);
    m_label_lfo0_delay->setEditable (true, true, false);
    m_label_lfo0_delay->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo0_delay->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo0_delay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo0_delay->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo0_delay->addListener (this);

    addAndMakeVisible (m_slider_lfo0_attack = new Slider ("LFO 1 Attack"));
    m_slider_lfo0_attack->setTooltip (TRANS("LFO 1 Attack Time [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo0_attack->setRange (0, 1, 0);
    m_slider_lfo0_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo0_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo0_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo0_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo0_attack->addListener (this);

    addAndMakeVisible (m_label_lfo0_attack = new Label ("LFO 1 Attack",
                                                        TRANS("value")));
    m_label_lfo0_attack->setFont (Font (14.00f, Font::plain));
    m_label_lfo0_attack->setJustificationType (Justification::centred);
    m_label_lfo0_attack->setEditable (true, true, false);
    m_label_lfo0_attack->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo0_attack->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo0_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo0_attack->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo0_attack->addListener (this);

    addAndMakeVisible (m_slider_lfo1_delay = new Slider ("LFO 2 Delay"));
    m_slider_lfo1_delay->setTooltip (TRANS("LFO 2 Delay [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo1_delay->setRange (0, 1, 0);
    m_slider_lfo1_delay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo1_delay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo1_delay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo1_delay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo1_delay->addListener (this);

    addAndMakeVisible (m_label_lfo1_delay = new Label ("LFO 2 Delay",
                                                       TRANS("value")));
    m_label_lfo1_delay->setFont (Font (14.00f, Font::plain));
    m_label_lfo1_delay->setJustificationType (Justification::centred);
    m_label_lfo1_delay->setEditable (true, true, false);
    m_label_lfo1_delay->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo1_delay->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo1_delay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo1_delay->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo1_delay->addListener (this);

    addAndMakeVisible (m_slider_lfo1_attack = new Slider ("LFO 2 Attack"));
    m_slider_lfo1_attack->setTooltip (TRANS("LFO 2 Attack Time [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo1_attack->setRange (0, 1, 0);
    m_slider_lfo1_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo1_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo1_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo1_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo1_attack->addListener (this);

    addAndMakeVisible (m_label_lfo1_attack = new Label ("LFO 2 Attack",
                                                        TRANS("value")));
    m_label_lfo1_attack->setFont (Font (14.00f, Font::plain));
    m_label_lfo1_attack->setJustificationType (Justification::centred);
    m_label_lfo1_attack->setEditable (true, true, false);
    m_label_lfo1_attack->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo1_attack->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo1_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo1_attack->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo1_attack->addListener (this);

    addAndMakeVisible (m_slider_lfo2_delay = new Slider ("LFO 3 Delay"));
    m_slider_lfo2_delay->setTooltip (TRANS("LFO 3 Delay [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo2_delay->setRange (0, 1, 0);
    m_slider_lfo2_delay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo2_delay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo2_delay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo2_delay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo2_delay->addListener (this);

    addAndMakeVisible (m_label_lfo2_delay = new Label ("LFO 3 Delay",
                                                       TRANS("value")));
    m_label_lfo2_delay->setFont (Font (14.00f, Font::plain));
    m_label_lfo2_delay->setJustificationType (Justification::centred);
    m_label_lfo2_delay->setEditable (true, true, false);
    m_label_lfo2_delay->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo2_delay->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo2_delay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo2_delay->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo2_delay->addListener (this);

    addAndMakeVisible (m_slider_lfo2_attack = new Slider ("LFO 3 Attack"));
    m_slider_lfo2_attack->setTooltip (TRANS("LFO 3 Attack Time [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo2_attack->setRange (0, 1, 0);
    m_slider_lfo2_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo2_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo2_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo2_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo2_attack->addListener (this);

    addAndMakeVisible (m_label_lfo2_attack = new Label ("LFO 3 Attack",
                                                        TRANS("value")));
    m_label_lfo2_attack->setFont (Font (14.00f, Font::plain));
    m_label_lfo2_attack->setJustificationType (Justification::centred);
    m_label_lfo2_attack->setEditable (true, true, false);
    m_label_lfo2_attack->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo2_attack->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo2_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo2_attack->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo2_attack->addListener (this);

    addAndMakeVisible (m_slider_lfo3_delay = new Slider ("LFO 4 Delay"));
    m_slider_lfo3_delay->setTooltip (TRANS("LFO 4 Delay [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo3_delay->setRange (0, 1, 0);
    m_slider_lfo3_delay->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo3_delay->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo3_delay->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo3_delay->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo3_delay->addListener (this);

    addAndMakeVisible (m_label_lfo3_delay = new Label ("LFO 4 Delay",
                                                       TRANS("value")));
    m_label_lfo3_delay->setFont (Font (14.00f, Font::plain));
    m_label_lfo3_delay->setJustificationType (Justification::centred);
    m_label_lfo3_delay->setEditable (true, true, false);
    m_label_lfo3_delay->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo3_delay->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo3_delay->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo3_delay->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo3_delay->addListener (this);

    addAndMakeVisible (m_slider_lfo3_attack = new Slider ("LFO 4 Attack"));
    m_slider_lfo3_attack->setTooltip (TRANS("LFO 4 Attack Time [ms]. Use with Sync = \'Restart\'."));
    m_slider_lfo3_attack->setRange (0, 1, 0);
    m_slider_lfo3_attack->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo3_attack->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo3_attack->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo3_attack->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo3_attack->addListener (this);

    addAndMakeVisible (m_label_lfo3_attack = new Label ("LFO 4 Attack",
                                                        TRANS("value")));
    m_label_lfo3_attack->setFont (Font (14.00f, Font::plain));
    m_label_lfo3_attack->setJustificationType (Justification::centred);
    m_label_lfo3_attack->setEditable (true, true, false);
    m_label_lfo3_attack->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo3_attack->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo3_attack->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo3_attack->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo3_attack->addListener (this);

    addAndMakeVisible (m_button_lfo0_restart_enable = new ToggleButton ("Restart LFO 1 Enable"));
    m_button_lfo0_restart_enable->setTooltip (TRANS("Use \'Restart\' to reset LFO phase on each note trigger. Use \'Free\' to use a free running LFO."));
    m_button_lfo0_restart_enable->setButtonText (String::empty);
    m_button_lfo0_restart_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_lfo0_individual_enable = new ToggleButton ("LFO 1 Global Enable"));
    m_button_lfo0_individual_enable->setTooltip (TRANS("Set this to \'Global\' to use the LFO for all voices. Set this to \'Individual\' to make voices have their own LFO."));
    m_button_lfo0_individual_enable->setButtonText (String::empty);
    m_button_lfo0_individual_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_slider_lfo0_symmetry = new Slider ("LFO 1 Symmetry"));
    m_slider_lfo0_symmetry->setTooltip (TRANS("LFO 1 Symmetry [%]"));
    m_slider_lfo0_symmetry->setRange (0, 1, 0);
    m_slider_lfo0_symmetry->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo0_symmetry->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo0_symmetry->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo0_symmetry->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo0_symmetry->addListener (this);

    addAndMakeVisible (m_label_lfo0_symmetry = new Label ("LFO 1 Symmetry",
                                                          TRANS("value")));
    m_label_lfo0_symmetry->setFont (Font (14.00f, Font::plain));
    m_label_lfo0_symmetry->setJustificationType (Justification::centred);
    m_label_lfo0_symmetry->setEditable (true, true, false);
    m_label_lfo0_symmetry->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo0_symmetry->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo0_symmetry->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo0_symmetry->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo0_symmetry->addListener (this);

    addAndMakeVisible (m_slider_lfo1_symmetry = new Slider ("LFO 2 Symmetry"));
    m_slider_lfo1_symmetry->setTooltip (TRANS("LFO 2 Symmetry [%]"));
    m_slider_lfo1_symmetry->setRange (0, 1, 0);
    m_slider_lfo1_symmetry->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo1_symmetry->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo1_symmetry->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo1_symmetry->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo1_symmetry->addListener (this);

    addAndMakeVisible (m_label_lfo1_symmetry = new Label ("LFO 2 Symmetry",
                                                          TRANS("value")));
    m_label_lfo1_symmetry->setFont (Font (14.00f, Font::plain));
    m_label_lfo1_symmetry->setJustificationType (Justification::centred);
    m_label_lfo1_symmetry->setEditable (true, true, false);
    m_label_lfo1_symmetry->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo1_symmetry->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo1_symmetry->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo1_symmetry->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo1_symmetry->addListener (this);

    addAndMakeVisible (m_button_lfo1_restart_enable = new ToggleButton ("Restart LFO 2 Enable"));
    m_button_lfo1_restart_enable->setTooltip (TRANS("Use \'Restart\' to reset LFO phase on each note trigger. Use \'Free\' to use a free running LFO."));
    m_button_lfo1_restart_enable->setButtonText (String::empty);
    m_button_lfo1_restart_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_lfo1_individual_enable = new ToggleButton ("LFO 2 Global Enable"));
    m_button_lfo1_individual_enable->setTooltip (TRANS("Set this to \'Global\' to use the LFO for all voices. Set this to \'Individual\' to make voices have their own LFO."));
    m_button_lfo1_individual_enable->setButtonText (String::empty);
    m_button_lfo1_individual_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_lfo2_restart_enable = new ToggleButton ("Restart LFO 3 Enable"));
    m_button_lfo2_restart_enable->setTooltip (TRANS("Use \'Restart\' to reset LFO phase on each note trigger. Use \'Free\' to use a free running LFO."));
    m_button_lfo2_restart_enable->setButtonText (String::empty);
    m_button_lfo2_restart_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_lfo2_individual_enable = new ToggleButton ("LFO 3 Global Enable"));
    m_button_lfo2_individual_enable->setTooltip (TRANS("Set this to \'Global\' to use the LFO for all voices. Set this to \'Individual\' to make voices have their own LFO."));
    m_button_lfo2_individual_enable->setButtonText (String::empty);
    m_button_lfo2_individual_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_slider_lfo2_symmetry = new Slider ("LFO 3 Symmetry"));
    m_slider_lfo2_symmetry->setTooltip (TRANS("LFO 3 Symmetry [%]"));
    m_slider_lfo2_symmetry->setRange (0, 1, 0);
    m_slider_lfo2_symmetry->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo2_symmetry->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo2_symmetry->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo2_symmetry->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo2_symmetry->addListener (this);

    addAndMakeVisible (m_label_lfo2_symmetry = new Label ("LFO 3 Symmetry",
                                                          TRANS("value")));
    m_label_lfo2_symmetry->setFont (Font (14.00f, Font::plain));
    m_label_lfo2_symmetry->setJustificationType (Justification::centred);
    m_label_lfo2_symmetry->setEditable (true, true, false);
    m_label_lfo2_symmetry->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo2_symmetry->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo2_symmetry->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo2_symmetry->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo2_symmetry->addListener (this);

    addAndMakeVisible (m_slider_lfo3_symmetry = new Slider ("LFO 4 Symmetry"));
    m_slider_lfo3_symmetry->setTooltip (TRANS("LFO 4 Symmetry [%]"));
    m_slider_lfo3_symmetry->setRange (0, 1, 0);
    m_slider_lfo3_symmetry->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo3_symmetry->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo3_symmetry->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo3_symmetry->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo3_symmetry->addListener (this);

    addAndMakeVisible (m_label_lfo3_symmetry = new Label ("LFO 4 Symmetry",
                                                          TRANS("value")));
    m_label_lfo3_symmetry->setFont (Font (14.00f, Font::plain));
    m_label_lfo3_symmetry->setJustificationType (Justification::centred);
    m_label_lfo3_symmetry->setEditable (true, true, false);
    m_label_lfo3_symmetry->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo3_symmetry->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo3_symmetry->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo3_symmetry->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo3_symmetry->addListener (this);

    addAndMakeVisible (m_button_lfo3_restart_enable = new ToggleButton ("Restart LFO 4 Enable"));
    m_button_lfo3_restart_enable->setTooltip (TRANS("Use \'Restart\' to reset LFO phase on each note trigger. Use \'Free\' to use a free running LFO."));
    m_button_lfo3_restart_enable->setButtonText (String::empty);
    m_button_lfo3_restart_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_button_lfo3_individual_enable = new ToggleButton ("LFO 4 Global Enable"));
    m_button_lfo3_individual_enable->setTooltip (TRANS("Set this to \'Global\' to use the LFO for all voices. Set this to \'Individual\' to make voices have their own LFO."));
    m_button_lfo3_individual_enable->setButtonText (String::empty);
    m_button_lfo3_individual_enable->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_slider_osc0_fm_amt1 = new Slider ("OSC 1 FM amount 2"));
    m_slider_osc0_fm_amt1->setTooltip (TRANS("OSC 1 FM amount [%]"));
    m_slider_osc0_fm_amt1->setRange (0, 1, 0);
    m_slider_osc0_fm_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_fm_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_fm_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_fm_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_fm_amt1->addListener (this);

    addAndMakeVisible (m_label_osc0_fm_amt1 = new Label ("OSC 1 FM amt 2",
                                                         TRANS("value")));
    m_label_osc0_fm_amt1->setFont (Font (14.00f, Font::plain));
    m_label_osc0_fm_amt1->setJustificationType (Justification::centred);
    m_label_osc0_fm_amt1->setEditable (true, true, false);
    m_label_osc0_fm_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_fm_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_fm_amt1->addListener (this);

    addAndMakeVisible (m_slider_osc0_pwm_amt1 = new Slider ("OSC 1 PWM amount 2"));
    m_slider_osc0_pwm_amt1->setTooltip (TRANS("OSC 1 PWM Amount [%]"));
    m_slider_osc0_pwm_amt1->setRange (0, 1, 0);
    m_slider_osc0_pwm_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_pwm_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_pwm_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_pwm_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_pwm_amt1->addListener (this);

    addAndMakeVisible (m_label_osc0_pwm_amt1 = new Label ("OSC 1 PWM amt 2",
                                                          TRANS("value")));
    m_label_osc0_pwm_amt1->setFont (Font (14.00f, Font::plain));
    m_label_osc0_pwm_amt1->setJustificationType (Justification::centred);
    m_label_osc0_pwm_amt1->setEditable (true, true, false);
    m_label_osc0_pwm_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_pwm_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_pwm_amt1->addListener (this);

    addAndMakeVisible (m_slider_osc0_am_amt1 = new Slider ("OSC 1 AM amount 2"));
    m_slider_osc0_am_amt1->setTooltip (TRANS("OSC 1 AM amount [%]"));
    m_slider_osc0_am_amt1->setRange (0, 1, 0);
    m_slider_osc0_am_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc0_am_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc0_am_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc0_am_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc0_am_amt1->addListener (this);

    addAndMakeVisible (m_label_osc0_am_amt1 = new Label ("OSC 1 AM amt 2",
                                                         TRANS("value")));
    m_label_osc0_am_amt1->setFont (Font (14.00f, Font::plain));
    m_label_osc0_am_amt1->setJustificationType (Justification::centred);
    m_label_osc0_am_amt1->setEditable (true, true, false);
    m_label_osc0_am_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc0_am_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc0_am_amt1->addListener (this);

    addAndMakeVisible (m_slider_osc1_fm_amt1 = new Slider ("OSC 2 FM amount 2"));
    m_slider_osc1_fm_amt1->setTooltip (TRANS("OSC 2 FM amount [%]"));
    m_slider_osc1_fm_amt1->setRange (0, 1, 0);
    m_slider_osc1_fm_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_fm_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_fm_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_fm_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_fm_amt1->addListener (this);

    addAndMakeVisible (m_label_osc1_fm_amt1 = new Label ("OSC 2 FM amt 2",
                                                         TRANS("value")));
    m_label_osc1_fm_amt1->setFont (Font (14.00f, Font::plain));
    m_label_osc1_fm_amt1->setJustificationType (Justification::centred);
    m_label_osc1_fm_amt1->setEditable (true, true, false);
    m_label_osc1_fm_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_fm_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_fm_amt1->addListener (this);

    addAndMakeVisible (m_slider_osc1_pwm_amt1 = new Slider ("OSC 2 PWM amount 2"));
    m_slider_osc1_pwm_amt1->setTooltip (TRANS("OSC 2 PWM Amount [%]"));
    m_slider_osc1_pwm_amt1->setRange (0, 1, 0);
    m_slider_osc1_pwm_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_pwm_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_pwm_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_pwm_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_pwm_amt1->addListener (this);

    addAndMakeVisible (m_label_osc1_pwm_amt1 = new Label ("OSC 2 PWM amt 2",
                                                          TRANS("value")));
    m_label_osc1_pwm_amt1->setFont (Font (14.00f, Font::plain));
    m_label_osc1_pwm_amt1->setJustificationType (Justification::centred);
    m_label_osc1_pwm_amt1->setEditable (true, true, false);
    m_label_osc1_pwm_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_pwm_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_pwm_amt1->addListener (this);

    addAndMakeVisible (m_slider_osc1_am_amt1 = new Slider ("OSC 2 AM amount 2"));
    m_slider_osc1_am_amt1->setTooltip (TRANS("OSC 2 AM amount [%]"));
    m_slider_osc1_am_amt1->setRange (0, 1, 0);
    m_slider_osc1_am_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_osc1_am_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_osc1_am_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_osc1_am_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_osc1_am_amt1->addListener (this);

    addAndMakeVisible (m_label_osc1_am_amt1 = new Label ("OSC 2 AM amt 2",
                                                         TRANS("value")));
    m_label_osc1_am_amt1->setFont (Font (14.00f, Font::plain));
    m_label_osc1_am_amt1->setJustificationType (Justification::centred);
    m_label_osc1_am_amt1->setEditable (true, true, false);
    m_label_osc1_am_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_osc1_am_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_osc1_am_amt1->addListener (this);

    addAndMakeVisible (m_slider_vcf_f_amt1 = new Slider ("VCF Cutoff amount 2"));
    m_slider_vcf_f_amt1->setTooltip (TRANS("VCF Cutoff Amount [%]"));
    m_slider_vcf_f_amt1->setRange (0, 1, 0);
    m_slider_vcf_f_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_f_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_f_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_f_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_f_amt1->addListener (this);

    addAndMakeVisible (m_label_vcf_f_amt1 = new Label ("VCF Cutoff amount 2",
                                                       TRANS("value")));
    m_label_vcf_f_amt1->setFont (Font (14.00f, Font::plain));
    m_label_vcf_f_amt1->setJustificationType (Justification::centred);
    m_label_vcf_f_amt1->setEditable (true, true, false);
    m_label_vcf_f_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_f_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_f_amt1->addListener (this);

    addAndMakeVisible (m_slider_vcf_q_amt1 = new Slider ("VCF Resonance amount 2"));
    m_slider_vcf_q_amt1->setTooltip (TRANS("VCF Resonance Amount [%]"));
    m_slider_vcf_q_amt1->setRange (0, 1, 0);
    m_slider_vcf_q_amt1->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_vcf_q_amt1->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_vcf_q_amt1->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_vcf_q_amt1->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_vcf_q_amt1->addListener (this);

    addAndMakeVisible (m_label_vcf_q_amt1 = new Label ("VCF Resonance amount 2",
                                                       TRANS("value")));
    m_label_vcf_q_amt1->setFont (Font (14.00f, Font::plain));
    m_label_vcf_q_amt1->setJustificationType (Justification::centred);
    m_label_vcf_q_amt1->setEditable (true, true, false);
    m_label_vcf_q_amt1->setColour (TextEditor::textColourId, Colours::black);
    m_label_vcf_q_amt1->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_vcf_q_amt1->addListener (this);

    addAndMakeVisible (m_button_mono_retrigger = new ToggleButton ("Monophonic Retrigger"));
    m_button_mono_retrigger->setTooltip (TRANS("This button switches monophonic retrigger mode on and off"));
    m_button_mono_retrigger->setButtonText (TRANS("Mono Retrigger"));
    m_button_mono_retrigger->setColour (ToggleButton::textColourId, Colours::white);

    addAndMakeVisible (m_label_max_num_voices = new Label ("Maximum number of voices (Polyphony)",
                                                           TRANS("999")));
    m_label_max_num_voices->setTooltip (TRANS("Unisono number of voices to allocate"));
    m_label_max_num_voices->setFont (Font (14.00f, Font::plain));
    m_label_max_num_voices->setJustificationType (Justification::centred);
    m_label_max_num_voices->setEditable (true, true, false);
    m_label_max_num_voices->setColour (TextEditor::textColourId, Colours::black);
    m_label_max_num_voices->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_max_num_voices->addListener (this);

    addAndMakeVisible (m_label_num_voices_playing = new Label ("Number of Voices Playing",
                                                               TRANS("0")));
    m_label_num_voices_playing->setTooltip (TRANS("Number of voices currently playing"));
    m_label_num_voices_playing->setFont (Font (14.00f, Font::plain));
    m_label_num_voices_playing->setJustificationType (Justification::centred);
    m_label_num_voices_playing->setEditable (true, true, false);
    m_label_num_voices_playing->setColour (Label::textColourId, Colours::yellow);
    m_label_num_voices_playing->setColour (TextEditor::textColourId, Colours::black);
    m_label_num_voices_playing->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_num_voices_playing->addListener (this);

    addAndMakeVisible (m_labelDebug = new Label ("Debug Label",
                                                 TRANS("label text")));
    m_labelDebug->setFont (Font (15.00f, Font::plain));
    m_labelDebug->setJustificationType (Justification::centredLeft);
    m_labelDebug->setEditable (false, false, false);
    m_labelDebug->setColour (Label::textColourId, Colours::white);
    m_labelDebug->setColour (TextEditor::textColourId, Colours::black);
    m_labelDebug->setColour (TextEditor::backgroundColourId, Colour (0x00000000));

    addAndMakeVisible (m_btn_midiClockLed = new ButtonLED (L"MidiClock"));
    addAndMakeVisible (m_label_lfo0_midisync_factor = new Label ("LFO 1 Midi Sync. Factor",
                                                                 TRANS("value")));
    m_label_lfo0_midisync_factor->setTooltip (TRANS("LFO 1 Midi Sync. Factor"));
    m_label_lfo0_midisync_factor->setFont (Font (14.00f, Font::plain));
    m_label_lfo0_midisync_factor->setJustificationType (Justification::centred);
    m_label_lfo0_midisync_factor->setEditable (true, true, false);
    m_label_lfo0_midisync_factor->setColour (Label::outlineColourId, Colour (0x00000000));
    m_label_lfo0_midisync_factor->setColour (TextEditor::textColourId, Colours::azure);
    m_label_lfo0_midisync_factor->setColour (TextEditor::backgroundColourId, Colour (0x00000000));
    m_label_lfo0_midisync_factor->setColour (TextEditor::highlightColourId, Colour (0x00f7f7f7));
    m_label_lfo0_midisync_factor->addListener (this);

    addAndMakeVisible (m_slider_lfo0_midisync_divisor = new Slider ("LFO 1 Midi Sync Divisor"));
    m_slider_lfo0_midisync_divisor->setTooltip (TRANS("LFO 1 Midi Sync Divisor"));
    m_slider_lfo0_midisync_divisor->setRange (0, 1, 0);
    m_slider_lfo0_midisync_divisor->setSliderStyle (Slider::RotaryVerticalDrag);
    m_slider_lfo0_midisync_divisor->setTextBoxStyle (Slider::NoTextBox, false, 80, 20);
    m_slider_lfo0_midisync_divisor->setColour (Slider::rotarySliderFillColourId, Colour (0x7fffffff));
    m_slider_lfo0_midisync_divisor->setColour (Slider::rotarySliderOutlineColourId, Colour (0x66ffffff));
    m_slider_lfo0_midisync_divisor->addListener (this);

    addAndMakeVisible (m_comboBox_lfo0_midisync_mode = new juce::ComboBox ("LFO 1 Midi Sync Mode"));
    m_comboBox_lfo0_midisync_mode->setTooltip (TRANS("LFO 1 Midi Sync Mode"));
    m_comboBox_lfo0_midisync_mode->setEditableText (false);
    m_comboBox_lfo0_midisync_mode->setJustificationType (Justification::centred);
    m_comboBox_lfo0_midisync_mode->setTextWhenNothingSelected (String::empty);
    m_comboBox_lfo0_midisync_mode->setTextWhenNoChoicesAvailable (TRANS("(no choices)"));
    m_comboBox_lfo0_midisync_mode->addItem (TRANS("Off"), 1);
    m_comboBox_lfo0_midisync_mode->addItem (TRANS("F"), 2);
    m_comboBox_lfo0_midisync_mode->addItem (TRANS("P"), 3);
    m_comboBox_lfo0_midisync_mode->addItem (TRANS("F + P"), 4);
    m_comboBox_lfo0_midisync_mode->addListener (this);

    addAndMakeVisible (m_button_bank_load = new juce::TextButton (L"Bank Load"));
    m_button_bank_load->setTooltip (TRANS("Load a bank"));
    m_button_bank_load->addListener (this);

    addAndMakeVisible (m_button_bank_save = new juce::TextButton (L"Bank Save"));
    m_button_bank_save->setTooltip (TRANS("Save a bank"));
	m_button_bank_save->addListener (this);

    addAndMakeVisible (m_button_patch_load = new juce::TextButton (L"Patch Load"));
    m_button_patch_load->setTooltip (TRANS("Load a patch"));
    m_button_patch_load->addListener (this);

    addAndMakeVisible (m_button_patch_save = new juce::TextButton (L"Patch Save"));
    m_button_patch_save->setTooltip (TRANS("Save a patch"));
	m_button_patch_save->addListener (this);

    //[UserPreSize]
    //[/UserPreSize]

    setSize (1120, 720);


    //[Constructor] You can add your own custom stuff here..

	// Combobox entries
	// WaveTable
	if (has_wt)
	{
		int k = 1;
		for (int i=0; i < WT_NUM_WAVETABLES; i++)
		{
			m_comboBox_osc0_shape->addItem (String(L"WT ") + String::formatted("%02d", k), OSC_WAVEFORM_WAVETABLE+i+1);
			m_comboBox_osc1_shape->addItem (String(L"WT ") + String::formatted("%02d", k), OSC_WAVEFORM_WAVETABLE+i+1);

			if (k == 28)
				k = 53;
			else
				k++;
		}
	}
	// Modulation sources
	m_mod_src0_names[VOICE_MOD_SRC_0_DISABLED] = String(L"Off");
	m_mod_src0_names[VOICE_MOD_SRC_0_LFO_0] = String(L"LFO 1");
	m_mod_src0_names[VOICE_MOD_SRC_0_LFO_1] = String(L"LFO 2");
	m_mod_src0_names[VOICE_MOD_SRC_0_LFO_2] = String(L"LFO 3");
	m_mod_src0_names[VOICE_MOD_SRC_0_LFO_3] = String(L"LFO 4");
	m_mod_src0_names[VOICE_MOD_SRC_0_ENV_0] = String(L"VCF ENV");
	m_mod_src0_names[VOICE_MOD_SRC_0_ENV_1] = String(L"VCA ENV");
	m_mod_src0_names[VOICE_MOD_SRC_0_ENV_2] = String(L"ENV 3");
	m_mod_src0_names[VOICE_MOD_SRC_0_ENV_3] = String(L"ENV 4");
	m_mod_src0_names[VOICE_MOD_SRC_0_VCO_0] = String(L"VCO 1");

	m_mod_src1_names[VOICE_MOD_SRC_1_DISABLED] = String(L"Off");
	m_mod_src1_names[VOICE_MOD_SRC_1_LFO_0] = String(L"LFO 1");
	m_mod_src1_names[VOICE_MOD_SRC_1_LFO_1] = String(L"LFO 2");
	m_mod_src1_names[VOICE_MOD_SRC_1_LFO_2] = String(L"LFO 3");
	m_mod_src1_names[VOICE_MOD_SRC_1_LFO_3] = String(L"LFO 4");
	m_mod_src1_names[VOICE_MOD_SRC_1_ENV_0] = String(L"VCF ENV");
	m_mod_src1_names[VOICE_MOD_SRC_1_ENV_1] = String(L"VCA ENV");
	m_mod_src1_names[VOICE_MOD_SRC_1_ENV_2] = String(L"ENV 3");
	m_mod_src1_names[VOICE_MOD_SRC_1_ENV_3] = String(L"ENV 4");

	m_mod_src_op_names[VOICE_MOD_SRC_OP_ADD] = String(L"+");
	m_mod_src_op_names[VOICE_MOD_SRC_OP_MUL] = String(L"*");

	for (int i=0; i < VOICE_NUM_MOD_SOURCES_0; i++)
	{
		m_mod_src0_cb_names[i] = m_mod_src0_names[i];
		m_comboBox_osc0_am_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_osc1_am_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_osc0_fm_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_osc1_fm_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_osc0_pwm_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_osc1_pwm_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_vcf_f_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_vcf_q_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_vca_am_src0->addItem (m_mod_src0_cb_names[i], i+1);
		m_comboBox_vca_pan_src0->addItem (m_mod_src0_cb_names[i], i+1);
	}

	int k = 0;
	m_mod_src1_cb_names[k] = m_mod_src1_names[VOICE_MOD_SRC_1_DISABLED];
	m_comboBox_osc0_am_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_osc1_am_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_osc0_fm_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_osc1_fm_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_osc0_pwm_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_osc1_pwm_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_vcf_f_src1->addItem (m_mod_src1_cb_names[k], 1);
	m_comboBox_vcf_q_src1->addItem (m_mod_src1_cb_names[k], 1);
	k++;
	for (int j=0; j < VOICE_NUM_MOD_OPS; j++)
	{
		for (int i=1; i < VOICE_NUM_MOD_SOURCES_1; i++)
		{
			m_mod_src1_cb_names[k] = m_mod_src_op_names[j] + String(" ") + m_mod_src1_names[i];
			m_comboBox_osc0_am_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_osc1_am_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_osc0_fm_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_osc1_fm_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_osc0_pwm_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_osc1_pwm_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_vcf_f_src1->addItem (m_mod_src1_cb_names[k], k+1);
			m_comboBox_vcf_q_src1->addItem (m_mod_src1_cb_names[k], k+1);
			k++;
		}
	}

	startTimer (500);
#ifdef DEBUG
		m_label_synth_version->setText(String("V ") + String(JucePlugin_VersionString) + String(" (DEBUG)"), juce::NotificationType::sendNotification);
#else
		m_label_synth_version->setText(String("V ") + String(JucePlugin_VersionString), juce::NotificationType::sendNotification);
#endif
	m_btn_noise_enable_led->addListener (this);
	m_btn_noise_enable_led->setTriggeredOnMouseDown (true);
	m_btn_noise_enable_led->setClickingTogglesState(true);

	m_btn_osc0_enable->addListener (this);
	m_btn_osc0_enable->setTriggeredOnMouseDown (true);
	m_btn_osc0_enable->setClickingTogglesState(true);

	m_btn_osc1_enable->addListener (this);
	m_btn_osc1_enable->setTriggeredOnMouseDown (true);
	m_btn_osc1_enable->setClickingTogglesState(true);

	m_button_patch_incr->addListener (this);
	m_button_patch_decr->addListener (this);

	m_button_humanize_enable->addListener (this);
	m_button_humanize_enable->setTriggeredOnMouseDown (true);
	m_button_humanize_enable->setClickingTogglesState(true);

	m_button_mono_enable->addListener (this);
	m_button_mono_enable->setTriggeredOnMouseDown (true);
	m_button_mono_enable->setClickingTogglesState(true);

	m_button_mono_retrigger->addListener (this);
	m_button_mono_retrigger->setTriggeredOnMouseDown (true);
	m_button_mono_retrigger->setClickingTogglesState(true);

	m_button_unisono_enable->addListener (this);
	m_button_unisono_enable->setTriggeredOnMouseDown (true);
	m_button_unisono_enable->setClickingTogglesState(true);

	m_button_osc0_restart_enable->addListener (this);
	m_button_osc0_restart_enable->setTriggeredOnMouseDown (true);
	m_button_osc0_restart_enable->setClickingTogglesState(true);

	m_button_osc1_restart_enable->addListener (this);
	m_button_osc1_restart_enable->setTriggeredOnMouseDown (true);
	m_button_osc1_restart_enable->setClickingTogglesState(true);

	m_button_lfo0_restart_enable->addListener (this);
	m_button_lfo0_restart_enable->setTriggeredOnMouseDown (true);
	m_button_lfo0_restart_enable->setClickingTogglesState(true);

	m_button_lfo1_restart_enable->addListener (this);
	m_button_lfo1_restart_enable->setTriggeredOnMouseDown (true);
	m_button_lfo1_restart_enable->setClickingTogglesState(true);

	m_button_lfo2_restart_enable->addListener (this);
	m_button_lfo2_restart_enable->setTriggeredOnMouseDown (true);
	m_button_lfo2_restart_enable->setClickingTogglesState(true);

	m_button_lfo3_restart_enable->addListener (this);
	m_button_lfo3_restart_enable->setTriggeredOnMouseDown (true);
	m_button_lfo3_restart_enable->setClickingTogglesState(true);

	m_button_lfo0_individual_enable->addListener (this);
	m_button_lfo0_individual_enable->setTriggeredOnMouseDown (true);
	m_button_lfo0_individual_enable->setClickingTogglesState(true);

	m_button_lfo1_individual_enable->addListener (this);
	m_button_lfo1_individual_enable->setTriggeredOnMouseDown (true);
	m_button_lfo1_individual_enable->setClickingTogglesState(true);

	m_button_lfo2_individual_enable->addListener (this);
	m_button_lfo2_individual_enable->setTriggeredOnMouseDown (true);
	m_button_lfo2_individual_enable->setClickingTogglesState(true);

	m_button_lfo3_individual_enable->addListener (this);
	m_button_lfo3_individual_enable->setTriggeredOnMouseDown (true);
	m_button_lfo3_individual_enable->setClickingTogglesState(true);

	m_label_synth_name->setTooltip(String("Jay Synth V ") + String(JucePlugin_VersionString) + String(", 2012, Jens Ahrensfeld"));
	m_tooltipWindow  = new TooltipWindow (this, 700);
	m_MidiCC_PopUp = 0;
	m_VelKey_PopUp = 0;

	// --------------------------------------------------------------------
	// Buttons
	// --------------------------------------------------------------------
	m_btn_osc0_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_OSC_0_ENABLE));
	m_btn_osc1_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_OSC_1_ENABLE));
	m_btn_noise_enable_led->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_NOISE_ENABLE));
	m_button_humanize_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_HUMANIZE_ENABLE));
	m_button_mono_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_MONOPHONIC_ENABLE));
	m_button_mono_retrigger->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_MONOPHONIC_RETRIGGER_ENABLE));
	m_button_unisono_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_UNISONO_ENABLE));

	m_button_osc0_restart_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_OSC_0_RESTART_ON_TRIGGER));
	m_button_osc1_restart_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_OSC_1_RESTART_ON_TRIGGER));

	m_button_lfo0_restart_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_0_SYNC));
	m_button_lfo1_restart_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_1_SYNC));
	m_button_lfo2_restart_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_2_SYNC));
	m_button_lfo3_restart_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_3_SYNC));

	m_button_lfo0_individual_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_0_MODE));
	m_button_lfo1_individual_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_1_MODE));
	m_button_lfo2_individual_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_2_MODE));
	m_button_lfo3_individual_enable->setComponentID(String("PARAM_BUTTON ") + String(SYNTH_PARAM_LFO_3_MODE));

	// --------------------------------------------------------------------
	// Sliders
	// --------------------------------------------------------------------
	m_slider_master_volume->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VOLUME));
	m_slider_master_tune->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_TUNE));
	m_slider_humanize_var_vco->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_HUMANIZE_VAR_VCO));
	m_slider_humanize_var_vcf->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_HUMANIZE_VAR_VCF));
	m_slider_humanize_var_env->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_HUMANIZE_VAR_ENV));
	m_slider_voice_pan_spread->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VOICE_PAN_SPREAD));
	m_slider_portamento_time->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_PORTAMENTO_TIME));

	m_slider_osc0_level->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_LEVEL));
	m_slider_osc1_level->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_LEVEL));
	m_slider_osc0_dutycycle->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_DUTYCYCLE));
	m_slider_osc1_dutycycle->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_DUTYCYCLE));
	m_slider_osc0_det->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_DETUNE));
	m_slider_osc1_det->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_DETUNE));
	m_slider_osc0_transpose->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_TRANSPOSE));
	m_slider_osc1_transpose->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_TRANSPOSE));

	m_slider_osc0_fm_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_FM_AMT_0));
	m_slider_osc1_fm_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_FM_AMT_0));
	m_slider_osc0_am_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_AM_AMT_0));
	m_slider_osc1_am_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_AM_AMT_0));
	m_slider_osc0_pwm_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_PWM_AMT_0));
	m_slider_osc1_pwm_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_PWM_AMT_0));

	m_slider_osc0_fm_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_FM_AMT_1));
	m_slider_osc1_fm_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_FM_AMT_1));
	m_slider_osc0_am_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_AM_AMT_1));
	m_slider_osc1_am_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_AM_AMT_1));
	m_slider_osc0_pwm_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_0_PWM_AMT_1));
	m_slider_osc1_pwm_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_OSC_1_PWM_AMT_1));

	m_slider_noise_level->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_NOISE_LEVEL));
	m_slider_vca_env_amount->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_ENV_AMT));
	m_slider_vca_am_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_AM_AMT_0));
	m_slider_vca_pan_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_PAN_AMT_0));

	m_slider_vca_env_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_ENV_A));
	m_slider_vca_env_decay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_ENV_D));
	m_slider_vca_env_sustain->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_ENV_S));
	m_slider_vca_env_release->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCA_ENV_R));

	m_slider_vcf_env_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_ENV_A));
	m_slider_vcf_env_decay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_ENV_D));
	m_slider_vcf_env_sustain->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_ENV_S));
	m_slider_vcf_env_release->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_ENV_R));

	m_slider_env2_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_2_A));
	m_slider_env2_decay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_2_D));
	m_slider_env2_sustain->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_2_S));
	m_slider_env2_release->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_2_R));

	m_slider_env3_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_3_A));
	m_slider_env3_decay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_3_D));
	m_slider_env3_sustain->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_3_S));
	m_slider_env3_release->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_ENV_3_R));

	m_slider_vcf_f->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_F));
	m_slider_vcf_q->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_Q));
	m_slider_vcf_env_amount->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_ENV_AMT));

	m_slider_vcf_f_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_F_AMT_0));
	m_slider_vcf_q_amt0->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_Q_AMT_0));
	m_slider_vcf_f_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_F_AMT_1));
	m_slider_vcf_q_amt1->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_VCF_Q_AMT_1));

	m_slider_lfo0_speed->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_0_SPEED));
	m_slider_lfo1_speed->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_1_SPEED));
	m_slider_lfo2_speed->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_2_SPEED));
	m_slider_lfo3_speed->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_3_SPEED));
	m_slider_lfo0_smooth->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_0_SMOOTH));
	m_slider_lfo1_smooth->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_1_SMOOTH));
	m_slider_lfo2_smooth->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_2_SMOOTH));
	m_slider_lfo3_smooth->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_3_SMOOTH));
	m_slider_lfo0_delay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_0_DELAY));
	m_slider_lfo1_delay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_1_DELAY));
	m_slider_lfo2_delay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_2_DELAY));
	m_slider_lfo3_delay->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_3_DELAY));
	m_slider_lfo0_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_0_ATTACK));
	m_slider_lfo1_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_1_ATTACK));
	m_slider_lfo2_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_2_ATTACK));
	m_slider_lfo3_attack->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_3_ATTACK));
	m_slider_lfo0_symmetry->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_0_SYMMETRY));
	m_slider_lfo1_symmetry->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_1_SYMMETRY));
	m_slider_lfo2_symmetry->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_2_SYMMETRY));
	m_slider_lfo3_symmetry->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_3_SYMMETRY));
	m_slider_lfo0_midisync_divisor->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_0_MIDISYNC_BEATDIV));
//	m_slider_lfo1_midisync_divisor->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_1_MIDISYNC_BEATDIV));
//	m_slider_lfo2_midisync_divisor->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_2_MIDISYNC_BEATDIV));
//	m_slider_lfo3_midisync_divisor->setComponentID(String("PARAM_SLIDER ") + String(SYNTH_PARAM_LFO_3_MIDISYNC_BEATDIV));

	// --------------------------------------------------------------------
	// Labels
	// --------------------------------------------------------------------
	m_label_master_volume->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VOLUME));
	m_label_master_tune->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_TUNE));
	m_label_humanize_var_vco->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_HUMANIZE_VAR_VCO));
	m_label_humanize_var_vcf->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_HUMANIZE_VAR_VCF));
	m_label_humanize_var_env->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_HUMANIZE_VAR_ENV));
	m_label_voice_pan_spread->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VOICE_PAN_SPREAD));
	m_label_portamento_time->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_PORTAMENTO_TIME));
	m_label_unisono_num_voices->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_UNISONO_NUM_VOICES));
	m_label_max_num_voices->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_TOTAL_NUM_VOICES));

	m_label_osc0_level->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_LEVEL));
	m_label_osc1_level->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_LEVEL));
	m_label_osc0_dutycycle->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_DUTYCYCLE));
	m_label_osc1_dutycycle->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_DUTYCYCLE));
	m_label_osc0_det->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_DETUNE));
	m_label_osc1_det->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_DETUNE));
	m_label_osc0_transpose->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_TRANSPOSE));
	m_label_osc1_transpose->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_TRANSPOSE));

	m_label_osc0_pb_min->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_PB_RANGE_MIN));
	m_label_osc0_pb_max->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_PB_RANGE_MAX));
	m_label_osc1_pb_min->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_PB_RANGE_MIN));
	m_label_osc1_pb_max->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_PB_RANGE_MAX));

	m_label_osc0_fm_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_FM_AMT_0));
	m_label_osc1_fm_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_FM_AMT_0));
	m_label_osc0_am_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_AM_AMT_0));
	m_label_osc1_am_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_AM_AMT_0));
	m_label_osc0_pwm_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_PWM_AMT_0));
	m_label_osc1_pwm_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_PWM_AMT_0));

	m_label_osc0_fm_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_FM_AMT_1));
	m_label_osc1_fm_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_FM_AMT_1));
	m_label_osc0_am_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_AM_AMT_1));
	m_label_osc1_am_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_AM_AMT_1));
	m_label_osc0_pwm_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_0_PWM_AMT_1));
	m_label_osc1_pwm_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_OSC_1_PWM_AMT_1));

	m_label_noise_level->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_NOISE_LEVEL));
	m_label_vca_env_amount->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_ENV_AMT));
	m_label_vca_am_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_AM_AMT_0));
	m_label_vca_pan_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_PAN_AMT_0));

	m_label_vca_env_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_ENV_A));
	m_label_vca_env_decay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_ENV_D));
	m_label_vca_env_sustain->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_ENV_S));
	m_label_vca_env_release->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCA_ENV_R));

	m_label_vcf_env_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_ENV_A));
	m_label_vcf_env_decay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_ENV_D));
	m_label_vcf_env_sustain->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_ENV_S));
	m_label_vcf_env_release->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_ENV_R));

	m_label_env2_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_2_A));
	m_label_env2_decay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_2_D));
	m_label_env2_sustain->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_2_S));
	m_label_env2_release->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_2_R));

	m_label_env3_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_3_A));
	m_label_env3_decay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_3_D));
	m_label_env3_sustain->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_3_S));
	m_label_env3_release->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_ENV_3_R));

	m_label_vcf_f->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_F));
	m_label_vcf_q->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_Q));
	m_label_vcf_env_amount->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_ENV_AMT));

	m_label_vcf_f_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_F_AMT_0));
	m_label_vcf_q_amt0->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_Q_AMT_0));
	m_label_vcf_f_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_F_AMT_1));
	m_label_vcf_q_amt1->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_VCF_Q_AMT_1));

	m_label_lfo0_speed->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_0_SPEED));
	m_label_lfo1_speed->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_1_SPEED));
	m_label_lfo2_speed->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_2_SPEED));
	m_label_lfo3_speed->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_3_SPEED));
	m_label_lfo0_smooth->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_0_SMOOTH));
	m_label_lfo1_smooth->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_1_SMOOTH));
	m_label_lfo2_smooth->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_2_SMOOTH));
	m_label_lfo3_smooth->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_3_SMOOTH));
	m_label_lfo0_delay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_0_DELAY));
	m_label_lfo1_delay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_1_DELAY));
	m_label_lfo2_delay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_2_DELAY));
	m_label_lfo3_delay->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_3_DELAY));
	m_label_lfo0_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_0_ATTACK));
	m_label_lfo1_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_1_ATTACK));
	m_label_lfo2_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_2_ATTACK));
	m_label_lfo3_attack->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_3_ATTACK));
	m_label_lfo0_symmetry->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_0_SYMMETRY));
	m_label_lfo1_symmetry->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_1_SYMMETRY));
	m_label_lfo2_symmetry->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_2_SYMMETRY));
	m_label_lfo3_symmetry->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_3_SYMMETRY));
	m_label_lfo0_midisync_factor->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_0_MIDISYNC_BEATDIV));
//	m_label_lfo1_midisync_factor->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_1_MIDISYNC_BEATDIV));
//	m_label_lfo2_midisync_factor->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_2_MIDISYNC_BEATDIV));
//	m_label_lfo3_midisync_factor->setComponentID(String("PARAM_LABEL ") + String(SYNTH_PARAM_LFO_3_MIDISYNC_BEATDIV));

	// --------------------------------------------------------------------
	// Comboboxes
	// --------------------------------------------------------------------
	m_comboBox_osc0_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_WAVEFORM));
	m_comboBox_osc1_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_WAVEFORM));
	m_comboBox_osc0_fm_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_FM_SRC_0));
	m_comboBox_osc1_fm_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_FM_SRC_0));
	m_comboBox_osc0_fm_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_FM_SRC_1));
	m_comboBox_osc1_fm_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_FM_SRC_1));
	m_comboBox_osc0_am_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_AM_SRC_0));
	m_comboBox_osc1_am_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_AM_SRC_0));
	m_comboBox_osc0_am_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_AM_SRC_1));
	m_comboBox_osc1_am_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_AM_SRC_1));
	m_comboBox_osc0_pwm_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_PWM_SRC_0));
	m_comboBox_osc1_pwm_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_PWM_SRC_0));
	m_comboBox_osc0_pwm_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_0_PWM_SRC_1));
	m_comboBox_osc1_pwm_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_OSC_1_PWM_SRC_1));
	m_comboBox_noise_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_NOISE_SHAPE));
	m_comboBox_vca_am_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCA_AM_SRC_0));
	m_comboBox_vca_pan_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCA_PAN_SRC_0));
	m_comboBox_vcf_type->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCF_TYPE));

	m_comboBox_vcf_f_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCF_F_SRC_0));
	m_comboBox_vcf_f_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCF_F_SRC_1));
	m_comboBox_vcf_q_src0->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCF_Q_SRC_0));
	m_comboBox_vcf_q_src1->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCF_Q_SRC_1));

	m_comboBox_lfo0_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_0_SHAPE));
	m_comboBox_lfo1_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_1_SHAPE));
	m_comboBox_lfo2_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_2_SHAPE));
	m_comboBox_lfo3_shape->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_3_SHAPE));
	m_comboBox_vcf_order->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_VCF_ORDER));

	m_comboBox_lfo0_midisync_mode->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_0_MIDISYNC_MODE));
//	m_comboBox_lfo1_midisync_mode->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_1_MIDISYNC_MODE));
//	m_comboBox_lfo2_midisync_mode->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_2_MIDISYNC_MODE));
//	m_comboBox_lfo3_midisync_mode->setComponentID(String("PARAM_COMBOBOX ") + String(SYNTH_PARAM_LFO_3_MIDISYNC_MODE));

	// --------------------------------------------------------------------
    getProcessor()->addActionListener(this);

	for (int i=0; i < SYNTH_NUM_PARAMS; i++)
	{
		Button *pButton;
		pButton = (Button*)findChildWithID(String("PARAM_BUTTON ") + String(i));
		if (pButton)
			pButton->addMouseListener (this, false);
	}

	for (int i=0; i < SYNTH_NUM_PARAMS; i++)
	{
		Slider *pSlider;
		pSlider = (Slider*)findChildWithID(String("PARAM_SLIDER ") + String(i));
		if (pSlider)
			pSlider->addMouseListener (this, false);

	}

	for (int i=0; i < SYNTH_NUM_PARAMS; i++)
	{
		Label *pLabel;
		pLabel = (Label*)findChildWithID(String("PARAM_LABEL ") + String(i));
		if (pLabel)
			pLabel->addMouseListener (this, false);
	}

	for (int i=0; i < SYNTH_NUM_PARAMS; i++)
	{
		ComboBox *pComboBox;
		pComboBox = (ComboBox*)findChildWithID(String("PARAM_COMBOBOX ") + String(i));
		if (pComboBox)
			pComboBox->addMouseListener (this, false);
	}

    //[/Constructor]
}

JaySynthAudioProcessorEditor::~JaySynthAudioProcessorEditor()
{
    //[Destructor_pre]. You can add your own custom destruction code here..
	getProcessor()->removeActionListener(this);
	deleteAndZero(m_tooltipWindow);
	deleteAndZero(m_MidiCC_PopUp);
	deleteAndZero(m_VelKey_PopUp);
    //[/Destructor_pre]

    m_label_colon = nullptr;
    m_slider_master_volume = nullptr;
    m_slider_vcf_f = nullptr;
    m_slider_vcf_q = nullptr;
    m_slider_osc0_det = nullptr;
    m_slider_osc1_det = nullptr;
    m_slider_osc0_transpose = nullptr;
    m_slider_osc1_transpose = nullptr;
    m_slider_vca_env_attack = nullptr;
    m_slider_vca_env_decay = nullptr;
    m_slider_vca_env_release = nullptr;
    m_slider_vca_env_sustain = nullptr;
    m_slider_vcf_env_attack = nullptr;
    m_slider_vcf_env_decay = nullptr;
    m_slider_vcf_env_release = nullptr;
    m_slider_vcf_env_sustain = nullptr;
    m_slider_vcf_env_amount = nullptr;
    m_label_vcf_env_attack = nullptr;
    m_label_vcf_f = nullptr;
    m_label_vca_env_attack = nullptr;
    m_label_vca_env_decay = nullptr;
    m_label_vca_env_sustain = nullptr;
    m_label_vca_env_release = nullptr;
    m_label_vcf_env_decay = nullptr;
    m_label_vcf_env_sustain = nullptr;
    m_label_vcf_env_release = nullptr;
    m_label_vcf_q = nullptr;
    m_label_vcf_env_amount = nullptr;
    m_label_master_volume = nullptr;
    m_label_osc0_transpose = nullptr;
    m_label_osc1_transpose = nullptr;
    m_label_osc0_det = nullptr;
    m_label_osc1_det = nullptr;
    m_slider_vca_env_amount = nullptr;
    m_label_vca_env_amount = nullptr;
    m_slider_osc0_dutycycle = nullptr;
    m_slider_osc1_dutycycle = nullptr;
    m_label_osc0_dutycycle = nullptr;
    m_label_osc1_dutycycle = nullptr;
    m_slider_lfo0_speed = nullptr;
    m_slider_osc1_fm_amt0 = nullptr;
    m_slider_osc0_fm_amt0 = nullptr;
    m_label_lfo0_speed = nullptr;
    m_label_osc0_fm_amt0 = nullptr;
    m_label_osc1_fm_amt0 = nullptr;
    m_slider_vcf_f_amt0 = nullptr;
    m_label_vcf_f_amt0 = nullptr;
    m_slider_lfo1_speed = nullptr;
    m_label_lfo1_speed = nullptr;
    m_comboBox_osc0_shape = nullptr;
    m_comboBox_osc1_shape = nullptr;
    m_comboBox_lfo0_shape = nullptr;
    m_comboBox_lfo1_shape = nullptr;
    m_slider_lfo2_speed = nullptr;
    m_slider_lfo3_speed = nullptr;
    m_comboBox_lfo2_shape = nullptr;
    m_comboBox_lfo3_shape = nullptr;
    m_label_lfo2_speed = nullptr;
    m_label_lfo3_speed = nullptr;
    m_comboBox_vcf_f_src0 = nullptr;
    m_comboBox_osc0_fm_src0 = nullptr;
    m_comboBox_osc1_fm_src0 = nullptr;
    m_slider_vca_am_amt0 = nullptr;
    m_label_vca_am_amt0 = nullptr;
    m_comboBox_vca_am_src0 = nullptr;
    m_slider_vca_pan_amt0 = nullptr;
    m_label_vca_pan_amt0 = nullptr;
    m_comboBox_vca_pan_src0 = nullptr;
    m_label_synth_name = nullptr;
    m_label_synth_version = nullptr;
    m_comboBox_vcf_type = nullptr;
    m_slider_lfo0_smooth = nullptr;
    m_label_lfo0_smooth = nullptr;
    m_slider_lfo1_smooth = nullptr;
    m_label_lfo1_smooth = nullptr;
    m_slider_lfo2_smooth = nullptr;
    m_label_lfo2_smooth = nullptr;
    m_slider_lfo3_smooth = nullptr;
    m_label_lfo3_smooth = nullptr;
    m_slider_osc0_pwm_amt0 = nullptr;
    m_label_osc0_pwm_amt0 = nullptr;
    m_slider_osc1_pwm_amt0 = nullptr;
    m_label_osc1_pwm_amt0 = nullptr;
    m_comboBox_osc0_pwm_src0 = nullptr;
    m_comboBox_osc1_pwm_src0 = nullptr;
    m_slider_osc0_level = nullptr;
    m_label_osc0_level = nullptr;
    m_slider_osc1_level = nullptr;
    m_label_osc1_level = nullptr;
    m_slider_noise_level = nullptr;
    m_label_noise_level = nullptr;
    m_comboBox_noise_shape = nullptr;
    m_btn_noise_enable_led = nullptr;
    m_btn_osc0_enable = nullptr;
    m_btn_osc1_enable = nullptr;
    m_label_patch_name = nullptr;
    m_button_patch_incr = nullptr;
    m_button_patch_decr = nullptr;
    m_label_patch_number = nullptr;
    m_label_osc1_pb_min = nullptr;
    m_label_osc1_pb_max = nullptr;
    m_label_osc0_pb_max = nullptr;
    m_label_osc0_pb_min = nullptr;
    m_slider_master_tune = nullptr;
    m_label_master_tune = nullptr;
    m_button_humanize_enable = nullptr;
    m_comboBox_vcf_order = nullptr;
    m_slider_portamento_time = nullptr;
    m_label_portamento_time = nullptr;
    m_button_unisono_enable = nullptr;
    m_slider_humanize_var_vco = nullptr;
    m_slider_voice_pan_spread = nullptr;
    m_label_voice_pan_spread = nullptr;
    m_slider_humanize_var_vcf = nullptr;
    m_slider_humanize_var_env = nullptr;
    m_label_unisono_num_voices = nullptr;
    m_button_osc0_restart_enable = nullptr;
    m_button_osc1_restart_enable = nullptr;
    m_button_mono_enable = nullptr;
    m_comboBox_osc1_fm_src1 = nullptr;
    m_comboBox_osc1_pwm_src1 = nullptr;
    m_comboBox_osc0_fm_src1 = nullptr;
    m_comboBox_osc0_pwm_src1 = nullptr;
    m_comboBox_osc1_am_src0 = nullptr;
    m_comboBox_osc1_am_src1 = nullptr;
    m_slider_osc1_am_amt0 = nullptr;
    m_label_osc1_am_amt0 = nullptr;
    m_comboBox_osc0_am_src0 = nullptr;
    m_comboBox_osc0_am_src1 = nullptr;
    m_slider_osc0_am_amt0 = nullptr;
    m_label_osc0_am_amt0 = nullptr;
    m_slider_env2_attack = nullptr;
    m_slider_env2_decay = nullptr;
    m_slider_env2_release = nullptr;
    m_slider_env2_sustain = nullptr;
    m_label_env2_attack = nullptr;
    m_label_env2_decay = nullptr;
    m_label_env2_sustain = nullptr;
    m_label_env2_release = nullptr;
    m_slider_env3_attack = nullptr;
    m_slider_env3_decay = nullptr;
    m_slider_env3_release = nullptr;
    m_slider_env3_sustain = nullptr;
    m_label_env3_attack = nullptr;
    m_label_env3_decay = nullptr;
    m_label_env3_sustain = nullptr;
    m_label_env3_release = nullptr;
    m_comboBox_vcf_f_src1 = nullptr;
    m_slider_vcf_q_amt0 = nullptr;
    m_label_vcf_q_amt0 = nullptr;
    m_comboBox_vcf_q_src0 = nullptr;
    m_comboBox_vcf_q_src1 = nullptr;
    m_label_humanize_var_vco = nullptr;
    m_label_humanize_var_vcf = nullptr;
    m_label_humanize_var_env = nullptr;
    m_btn_limiter_led = nullptr;
    m_label_limiter_led = nullptr;
    m_slider_lfo0_delay = nullptr;
    m_label_lfo0_delay = nullptr;
    m_slider_lfo0_attack = nullptr;
    m_label_lfo0_attack = nullptr;
    m_slider_lfo1_delay = nullptr;
    m_label_lfo1_delay = nullptr;
    m_slider_lfo1_attack = nullptr;
    m_label_lfo1_attack = nullptr;
    m_slider_lfo2_delay = nullptr;
    m_label_lfo2_delay = nullptr;
    m_slider_lfo2_attack = nullptr;
    m_label_lfo2_attack = nullptr;
    m_slider_lfo3_delay = nullptr;
    m_label_lfo3_delay = nullptr;
    m_slider_lfo3_attack = nullptr;
    m_label_lfo3_attack = nullptr;
    m_button_lfo0_restart_enable = nullptr;
    m_button_lfo0_individual_enable = nullptr;
    m_slider_lfo0_symmetry = nullptr;
    m_label_lfo0_symmetry = nullptr;
    m_slider_lfo1_symmetry = nullptr;
    m_label_lfo1_symmetry = nullptr;
    m_button_lfo1_restart_enable = nullptr;
    m_button_lfo1_individual_enable = nullptr;
    m_button_lfo2_restart_enable = nullptr;
    m_button_lfo2_individual_enable = nullptr;
    m_slider_lfo2_symmetry = nullptr;
    m_label_lfo2_symmetry = nullptr;
    m_slider_lfo3_symmetry = nullptr;
    m_label_lfo3_symmetry = nullptr;
    m_button_lfo3_restart_enable = nullptr;
    m_button_lfo3_individual_enable = nullptr;
    m_slider_osc0_fm_amt1 = nullptr;
    m_label_osc0_fm_amt1 = nullptr;
    m_slider_osc0_pwm_amt1 = nullptr;
    m_label_osc0_pwm_amt1 = nullptr;
    m_slider_osc0_am_amt1 = nullptr;
    m_label_osc0_am_amt1 = nullptr;
    m_slider_osc1_fm_amt1 = nullptr;
    m_label_osc1_fm_amt1 = nullptr;
    m_slider_osc1_pwm_amt1 = nullptr;
    m_label_osc1_pwm_amt1 = nullptr;
    m_slider_osc1_am_amt1 = nullptr;
    m_label_osc1_am_amt1 = nullptr;
    m_slider_vcf_f_amt1 = nullptr;
    m_label_vcf_f_amt1 = nullptr;
    m_slider_vcf_q_amt1 = nullptr;
    m_label_vcf_q_amt1 = nullptr;
    m_button_mono_retrigger = nullptr;
    m_label_max_num_voices = nullptr;
    m_label_num_voices_playing = nullptr;
    m_labelDebug = nullptr;
    m_btn_midiClockLed = nullptr;
    m_label_lfo0_midisync_factor = nullptr;
    m_slider_lfo0_midisync_divisor = nullptr;
    m_comboBox_lfo0_midisync_mode = nullptr;
    m_button_bank_load = nullptr;
    m_button_bank_save = nullptr;
    m_button_patch_load = nullptr;
    m_button_patch_save = nullptr;


    //[Destructor]. You can add your own custom destruction code here..
    //[/Destructor]
}

//==============================================================================
void JaySynthAudioProcessorEditor::paint (Graphics& g)
{
    //[UserPrePaint] Add your own custom painting code here..
    //[/UserPrePaint]

    g.fillAll (Colour (0xff8b94bd));

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (644.0f, 4.0f, 80.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (644.0f, 318.0f, 80.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (962.0f, 4.0f, 154.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (962.0f, 318.0f, 154.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (560.0f, 318.0f, 80.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (560.0f, 4.0f, 80.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (4.0f, 632.0f, 1112.0f, 84.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (4.0f, 318.0f, 324.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (446.0f, 318.0f, 110.0f, 310.0f, 10.000f);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (446.0f, 4.0f, 110.0f, 310.0f, 10.000f);

    g.setColour (Colours::black);
    g.setFont (Font (15.00f, Font::plain));
    g.drawText (TRANS("OSC 1 tune"),
                12, -108, 76, 30,
                Justification::centred, true);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (728.0f, 318.0f, 230.0f, 310.0f, 10.000f);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("VCA"),
                732, 322, 48, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Env. amt."),
                740, 504, 52, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Volume"),
                968, 572, 40, 16,
                Justification::centred, true);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (728.0f, 4.0f, 230.0f, 310.0f, 10.000f);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("VCF"),
                732, 8, 48, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Env. amt."),
                886, 156, 52, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Reson."),
                816, 88, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Cutoff"),
                746, 88, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Sustain"),
                664, 222, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Decay"),
                664, 156, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Release"),
                660, 290, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                660, 88, 48, 16,
                Justification::centred, true);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (4.0f, 4.0f, 324.0f, 310.0f, 10.000f);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("VCO 1"),
                6, 8, 72, 32,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Detune"),
                96, 86, 54, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Transpose"),
                246, 154, 58, 16,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("VCO 2"),
                6, 322, 72, 32,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Pulse Width"),
                160, 86, 68, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Shape"),
                242, 86, 64, 16,
                Justification::centred, true);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (332.0f, 4.0f, 110.0f, 310.0f, 10.000f);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("LFO 1"),
                336, 8, 60, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM amt. 1"),
                90, 154, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Speed"),
                338, 120, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Shape"),
                348, 54, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Mod. amt. 1"),
                736, 156, 64, 16,
                Justification::centred, true);

    g.setColour (Colour (0xff2a64a5));
    g.fillRoundedRectangle (332.0f, 318.0f, 110.0f, 310.0f, 10.000f);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("LFO 2"),
                450, 8, 60, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Polyphon"),
                388, 290, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Restart"),
                346, 290, 30, 16,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("LFO 3"),
                336, 322, 60, 24,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("LFO 4"),
                450, 322, 60, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Tremolo"),
                736, 402, 60, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Stereo pan"),
                810, 402, 60, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM Source 1"),
                94, 188, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Source"),
                804, 436, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Source"),
                732, 436, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Source 2"),
                732, 290, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("VCF type"),
                878, 54, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Smooth"),
                386, 256, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM amt. 1"),
                160, 154, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM Source 1"),
                166, 188, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Level"),
                30, 86, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Noise level"),
                802, 504, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Noise shape"),
                810, 540, 60, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Tune"),
                1018, 572, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("VCF Order"),
                878, 90, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Portamento"),
                1058, 376, 60, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Voice pan."),
                1064, 572, 52, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("VCO hum."),
                966, 504, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("VCF hum."),
                1016, 504, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("ENV hum."),
                1068, 504, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (11.00f, Font::plain));
    g.drawText (TRANS("Unison num. voices :"),
                966, 414, 100, 18,
                Justification::centredRight, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM Source 2"),
                94, 290, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM Source 2"),
                166, 290, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM source 1"),
                22, 188, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM source 2"),
                22, 290, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM amt. 1"),
                20, 154, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Detune"),
                96, 400, 54, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Transpose"),
                246, 468, 58, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Pulse Width"),
                160, 400, 68, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Shape"),
                242, 400, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Level"),
                30, 400, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Speed"),
                338, 434, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Shape"),
                348, 368, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Smooth"),
                386, 434, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Speed"),
                452, 120, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Shape"),
                462, 54, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Smooth"),
                500, 120, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Speed"),
                452, 434, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Shape"),
                462, 368, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Smooth"),
                500, 434, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("VCF ENV"),
                562, 8, 76, 24,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("VCA ENV"),
                648, 8, 72, 24,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("ENV 3"),
                562, 322, 76, 24,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("ENV 4"),
                648, 322, 72, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Sustain"),
                664, 534, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Decay"),
                664, 470, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Release"),
                660, 604, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                660, 402, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Sustain"),
                580, 222, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Decay"),
                580, 156, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Release"),
                576, 290, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                576, 88, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Sustain"),
                580, 534, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Decay"),
                580, 470, 40, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Release"),
                576, 604, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                576, 402, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Source 1"),
                732, 190, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Mod. amt. 1"),
                808, 156, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Source 2"),
                804, 290, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Source 1"),
                804, 190, 72, 16,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (16.00f, Font::plain));
    g.drawText (TRANS("Misc."),
                966, 322, 58, 24,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Delay"),
                338, 188, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                384, 188, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Delay"),
                452, 188, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                498, 188, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Delay"),
                452, 502, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                498, 502, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Delay"),
                338, 502, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Attack"),
                384, 502, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Symmetry"),
                338, 256, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Polyphon"),
                500, 290, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Restart"),
                458, 290, 30, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Symmetry"),
                476, 256, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Polyphon"),
                388, 604, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Restart"),
                346, 604, 30, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Polyphon"),
                500, 604, 44, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Restart"),
                458, 604, 30, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Symmetry"),
                362, 570, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Symmetry"),
                476, 570, 48, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM amt. 2"),
                90, 256, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM amt. 2"),
                160, 256, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM amt. 2"),
                20, 256, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM amt. 1"),
                90, 468, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM amt. 1"),
                160, 468, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM amt. 1"),
                20, 468, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM Source 1"),
                94, 502, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM Source 1"),
                166, 502, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM source 1"),
                22, 502, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM amt. 2"),
                90, 570, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM amt. 2"),
                160, 570, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM amt. 2"),
                20, 570, 70, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("FM Source 2"),
                92, 604, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("PWM Source 2"),
                164, 604, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("AM source 2"),
                20, 604, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Mod. amt. 2"),
                736, 258, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Mod. amt. 2"),
                810, 258, 64, 16,
                Justification::centred, true);

    g.setColour (Colours::white);
    g.setFont (Font (11.00f, Font::plain));
    g.drawText (TRANS("Max. Polyphony :"),
                966, 394, 100, 18,
                Justification::centredRight, true);

    g.setColour (Colours::black);
    g.setFont (Font (10.00f, Font::plain));
    g.drawText (TRANS("Divisor"),
                386, 119, 48, 16,
                Justification::centred, true);

    //[UserPaint] Add your own custom painting code here..
    //[/UserPaint]
}

void JaySynthAudioProcessorEditor::resized()
{
    m_label_colon->setBounds (220, 660, 24, 28);
    m_slider_master_volume->setBounds (972, 542, 36, 36);
    m_slider_vcf_f->setBounds (748, 56, 36, 36);
    m_slider_vcf_q->setBounds (820, 56, 36, 36);
    m_slider_osc0_det->setBounds (106, 54, 36, 36);
    m_slider_osc1_det->setBounds (106, 368, 36, 36);
    m_slider_osc0_transpose->setBounds (256, 122, 36, 36);
    m_slider_osc1_transpose->setBounds (256, 436, 36, 36);
    m_slider_vca_env_attack->setBounds (666, 56, 36, 36);
    m_slider_vca_env_decay->setBounds (666, 124, 36, 36);
    m_slider_vca_env_release->setBounds (666, 258, 36, 36);
    m_slider_vca_env_sustain->setBounds (666, 190, 36, 36);
    m_slider_vcf_env_attack->setBounds (582, 56, 36, 36);
    m_slider_vcf_env_decay->setBounds (582, 124, 36, 36);
    m_slider_vcf_env_release->setBounds (582, 258, 36, 36);
    m_slider_vcf_env_sustain->setBounds (582, 190, 36, 36);
    m_slider_vcf_env_amount->setBounds (892, 124, 36, 36);
    m_label_vcf_env_attack->setBounds (574, 38, 52, 20);
    m_label_vcf_f->setBounds (740, 38, 52, 20);
    m_label_vca_env_attack->setBounds (658, 38, 52, 20);
    m_label_vca_env_decay->setBounds (658, 106, 52, 20);
    m_label_vca_env_sustain->setBounds (658, 172, 52, 20);
    m_label_vca_env_release->setBounds (658, 240, 52, 20);
    m_label_vcf_env_decay->setBounds (574, 106, 52, 20);
    m_label_vcf_env_sustain->setBounds (574, 172, 52, 20);
    m_label_vcf_env_release->setBounds (574, 240, 52, 20);
    m_label_vcf_q->setBounds (812, 38, 52, 20);
    m_label_vcf_env_amount->setBounds (884, 106, 52, 20);
    m_label_master_volume->setBounds (968, 524, 44, 20);
    m_label_osc0_transpose->setBounds (248, 104, 52, 20);
    m_label_osc1_transpose->setBounds (248, 418, 52, 20);
    m_label_osc0_det->setBounds (98, 36, 52, 20);
    m_label_osc1_det->setBounds (98, 350, 52, 20);
    m_slider_vca_env_amount->setBounds (748, 472, 36, 36);
    m_label_vca_env_amount->setBounds (740, 454, 52, 20);
    m_slider_osc0_dutycycle->setBounds (176, 54, 36, 36);
    m_slider_osc1_dutycycle->setBounds (176, 368, 36, 36);
    m_label_osc0_dutycycle->setBounds (168, 36, 52, 20);
    m_label_osc1_dutycycle->setBounds (168, 350, 52, 20);
    m_slider_lfo0_speed->setBounds (346, 88, 36, 36);
    m_slider_osc1_fm_amt0->setBounds (106, 436, 36, 36);
    m_slider_osc0_fm_amt0->setBounds (106, 122, 36, 36);
    m_label_lfo0_speed->setBounds (338, 70, 52, 20);
    m_label_osc0_fm_amt0->setBounds (98, 104, 52, 20);
    m_label_osc1_fm_amt0->setBounds (98, 418, 52, 20);
    m_slider_vcf_f_amt0->setBounds (748, 124, 36, 36);
    m_label_vcf_f_amt0->setBounds (740, 106, 52, 20);
    m_slider_lfo1_speed->setBounds (460, 88, 36, 36);
    m_label_lfo1_speed->setBounds (452, 70, 52, 20);
    m_comboBox_osc0_shape->setBounds (244, 68, 64, 16);
    m_comboBox_osc1_shape->setBounds (244, 382, 64, 16);
    m_comboBox_lfo0_shape->setBounds (355, 38, 64, 16);
    m_comboBox_lfo1_shape->setBounds (470, 38, 64, 16);
    m_slider_lfo2_speed->setBounds (346, 402, 36, 36);
    m_slider_lfo3_speed->setBounds (460, 402, 36, 36);
    m_comboBox_lfo2_shape->setBounds (354, 352, 64, 16);
    m_comboBox_lfo3_shape->setBounds (470, 352, 64, 16);
    m_label_lfo2_speed->setBounds (338, 384, 52, 20);
    m_label_lfo3_speed->setBounds (452, 384, 52, 20);
    m_comboBox_vcf_f_src0->setBounds (736, 174, 64, 16);
    m_comboBox_osc0_fm_src0->setBounds (94, 172, 64, 16);
    m_comboBox_osc1_fm_src0->setBounds (94, 486, 64, 16);
    m_slider_vca_am_amt0->setBounds (748, 370, 36, 36);
    m_label_vca_am_amt0->setBounds (740, 352, 52, 20);
    m_comboBox_vca_am_src0->setBounds (736, 420, 64, 16);
    m_slider_vca_pan_amt0->setBounds (820, 370, 36, 36);
    m_label_vca_pan_amt0->setBounds (812, 352, 52, 20);
    m_comboBox_vca_pan_src0->setBounds (808, 420, 64, 16);
    m_label_synth_name->setBounds (12, 662, 92, 24);
    m_label_synth_version->setBounds (978, 662, 132, 24);
    m_comboBox_vcf_type->setBounds (880, 74, 68, 16);
    m_slider_lfo0_smooth->setBounds (392, 224, 36, 36);
    m_label_lfo0_smooth->setBounds (384, 206, 52, 20);
    m_slider_lfo1_smooth->setBounds (506, 88, 36, 36);
    m_label_lfo1_smooth->setBounds (498, 70, 52, 20);
    m_slider_lfo2_smooth->setBounds (392, 402, 36, 36);
    m_label_lfo2_smooth->setBounds (384, 384, 52, 20);
    m_slider_lfo3_smooth->setBounds (506, 402, 36, 36);
    m_label_lfo3_smooth->setBounds (498, 384, 52, 20);
    m_slider_osc0_pwm_amt0->setBounds (176, 122, 36, 36);
    m_label_osc0_pwm_amt0->setBounds (168, 104, 52, 20);
    m_slider_osc1_pwm_amt0->setBounds (176, 436, 36, 36);
    m_label_osc1_pwm_amt0->setBounds (168, 418, 52, 20);
    m_comboBox_osc0_pwm_src0->setBounds (166, 172, 64, 16);
    m_comboBox_osc1_pwm_src0->setBounds (166, 486, 64, 16);
    m_slider_osc0_level->setBounds (36, 54, 36, 36);
    m_label_osc0_level->setBounds (28, 36, 52, 20);
    m_slider_osc1_level->setBounds (36, 368, 36, 36);
    m_label_osc1_level->setBounds (28, 350, 52, 20);
    m_slider_noise_level->setBounds (820, 472, 36, 36);
    m_label_noise_level->setBounds (810, 454, 56, 20);
    m_comboBox_noise_shape->setBounds (808, 524, 64, 16);
    m_btn_noise_enable_led->setBounds (862, 472, 32, 32);
    m_btn_osc0_enable->setBounds (72, 8, 32, 32);
    m_btn_osc1_enable->setBounds (72, 322, 32, 32);
    m_label_patch_name->setBounds (232, 658, 308, 32);
    m_button_patch_incr->setBounds (156, 662, 28, 24);
    m_button_patch_decr->setBounds (120, 662, 28, 24);
    m_label_patch_number->setBounds (192, 658, 32, 32);
    m_label_osc1_pb_min->setBounds (228, 442, 32, 20);
    m_label_osc1_pb_max->setBounds (288, 442, 32, 20);
    m_label_osc0_pb_max->setBounds (288, 128, 32, 20);
    m_label_osc0_pb_min->setBounds (228, 128, 32, 20);
    m_slider_master_tune->setBounds (1022, 542, 36, 36);
    m_label_master_tune->setBounds (1018, 524, 44, 20);
    m_button_humanize_enable->setBounds (1040, 436, 72, 16);
    m_comboBox_vcf_order->setBounds (880, 38, 68, 16);
    m_slider_portamento_time->setBounds (1070, 346, 36, 36);
    m_label_portamento_time->setBounds (1066, 328, 44, 20);
    m_button_unisono_enable->setBounds (966, 436, 76, 16);
    m_slider_humanize_var_vco->setBounds (972, 472, 36, 36);
    m_slider_voice_pan_spread->setBounds (1072, 542, 36, 36);
    m_label_voice_pan_spread->setBounds (1068, 524, 44, 20);
    m_slider_humanize_var_vcf->setBounds (1022, 472, 36, 36);
    m_slider_humanize_var_env->setBounds (1072, 472, 36, 36);
    m_label_unisono_num_voices->setBounds (1064, 414, 42, 18);
    m_button_osc0_restart_enable->setBounds (246, 46, 58, 16);
    m_button_osc1_restart_enable->setBounds (246, 360, 58, 16);
    m_button_mono_enable->setBounds (965, 346, 86, 16);
    m_comboBox_osc1_fm_src1->setBounds (94, 588, 64, 16);
    m_comboBox_osc1_pwm_src1->setBounds (166, 588, 64, 16);
    m_comboBox_osc0_fm_src1->setBounds (94, 274, 64, 16);
    m_comboBox_osc0_pwm_src1->setBounds (166, 274, 64, 16);
    m_comboBox_osc1_am_src0->setBounds (22, 486, 64, 16);
    m_comboBox_osc1_am_src1->setBounds (22, 588, 64, 16);
    m_slider_osc1_am_amt0->setBounds (36, 436, 36, 36);
    m_label_osc1_am_amt0->setBounds (28, 418, 52, 20);
    m_comboBox_osc0_am_src0->setBounds (22, 172, 64, 16);
    m_comboBox_osc0_am_src1->setBounds (22, 274, 64, 16);
    m_slider_osc0_am_amt0->setBounds (36, 122, 36, 36);
    m_label_osc0_am_amt0->setBounds (28, 104, 52, 20);
    m_slider_env2_attack->setBounds (582, 370, 36, 36);
    m_slider_env2_decay->setBounds (582, 438, 36, 36);
    m_slider_env2_release->setBounds (582, 572, 36, 36);
    m_slider_env2_sustain->setBounds (582, 502, 36, 36);
    m_label_env2_attack->setBounds (574, 352, 52, 20);
    m_label_env2_decay->setBounds (574, 420, 52, 20);
    m_label_env2_sustain->setBounds (574, 486, 52, 20);
    m_label_env2_release->setBounds (574, 554, 52, 20);
    m_slider_env3_attack->setBounds (666, 370, 36, 36);
    m_slider_env3_decay->setBounds (666, 438, 36, 36);
    m_slider_env3_release->setBounds (666, 572, 36, 36);
    m_slider_env3_sustain->setBounds (666, 502, 36, 36);
    m_label_env3_attack->setBounds (658, 352, 52, 20);
    m_label_env3_decay->setBounds (658, 419, 52, 20);
    m_label_env3_sustain->setBounds (658, 485, 52, 20);
    m_label_env3_release->setBounds (658, 553, 52, 20);
    m_comboBox_vcf_f_src1->setBounds (736, 274, 64, 16);
    m_slider_vcf_q_amt0->setBounds (820, 124, 36, 36);
    m_label_vcf_q_amt0->setBounds (812, 106, 52, 20);
    m_comboBox_vcf_q_src0->setBounds (808, 174, 64, 16);
    m_comboBox_vcf_q_src1->setBounds (808, 274, 64, 16);
    m_label_humanize_var_vco->setBounds (968, 454, 44, 20);
    m_label_humanize_var_vcf->setBounds (1018, 454, 44, 20);
    m_label_humanize_var_env->setBounds (1068, 454, 44, 20);
    m_btn_limiter_led->setBounds (974, 590, 32, 32);
    m_label_limiter_led->setBounds (998, 594, 92, 24);
    m_slider_lfo0_delay->setBounds (346, 156, 36, 36);
    m_label_lfo0_delay->setBounds (338, 138, 52, 20);
    m_slider_lfo0_attack->setBounds (392, 156, 36, 36);
    m_label_lfo0_attack->setBounds (384, 138, 52, 20);
    m_slider_lfo1_delay->setBounds (460, 156, 36, 36);
    m_label_lfo1_delay->setBounds (452, 138, 52, 20);
    m_slider_lfo1_attack->setBounds (506, 156, 36, 36);
    m_label_lfo1_attack->setBounds (498, 138, 52, 20);
    m_slider_lfo2_delay->setBounds (346, 470, 36, 36);
    m_label_lfo2_delay->setBounds (338, 452, 52, 20);
    m_slider_lfo2_attack->setBounds (392, 470, 36, 36);
    m_label_lfo2_attack->setBounds (384, 452, 52, 20);
    m_slider_lfo3_delay->setBounds (460, 470, 36, 36);
    m_label_lfo3_delay->setBounds (452, 452, 52, 20);
    m_slider_lfo3_attack->setBounds (506, 470, 36, 36);
    m_label_lfo3_attack->setBounds (498, 452, 52, 20);
    m_button_lfo0_restart_enable->setBounds (356, 278, 16, 16);
    m_button_lfo0_individual_enable->setBounds (402, 278, 16, 16);
    m_slider_lfo0_symmetry->setBounds (346, 224, 36, 36);
    m_label_lfo0_symmetry->setBounds (338, 206, 52, 20);
    m_slider_lfo1_symmetry->setBounds (484, 224, 36, 36);
    m_label_lfo1_symmetry->setBounds (476, 206, 52, 20);
    m_button_lfo1_restart_enable->setBounds (468, 277, 16, 16);
    m_button_lfo1_individual_enable->setBounds (514, 277, 16, 16);
    m_button_lfo2_restart_enable->setBounds (356, 592, 16, 16);
    m_button_lfo2_individual_enable->setBounds (402, 592, 16, 16);
    m_slider_lfo2_symmetry->setBounds (370, 538, 36, 36);
    m_label_lfo2_symmetry->setBounds (362, 520, 52, 20);
    m_slider_lfo3_symmetry->setBounds (484, 538, 36, 36);
    m_label_lfo3_symmetry->setBounds (476, 520, 52, 20);
    m_button_lfo3_restart_enable->setBounds (468, 591, 16, 16);
    m_button_lfo3_individual_enable->setBounds (514, 591, 16, 16);
    m_slider_osc0_fm_amt1->setBounds (106, 224, 36, 36);
    m_label_osc0_fm_amt1->setBounds (98, 206, 52, 20);
    m_slider_osc0_pwm_amt1->setBounds (176, 224, 36, 36);
    m_label_osc0_pwm_amt1->setBounds (168, 206, 52, 20);
    m_slider_osc0_am_amt1->setBounds (36, 224, 36, 36);
    m_label_osc0_am_amt1->setBounds (28, 206, 52, 20);
    m_slider_osc1_fm_amt1->setBounds (106, 538, 36, 36);
    m_label_osc1_fm_amt1->setBounds (98, 520, 52, 20);
    m_slider_osc1_pwm_amt1->setBounds (176, 538, 36, 36);
    m_label_osc1_pwm_amt1->setBounds (168, 520, 52, 20);
    m_slider_osc1_am_amt1->setBounds (36, 538, 36, 36);
    m_label_osc1_am_amt1->setBounds (28, 520, 52, 20);
    m_slider_vcf_f_amt1->setBounds (748, 226, 36, 36);
    m_label_vcf_f_amt1->setBounds (740, 208, 52, 20);
    m_slider_vcf_q_amt1->setBounds (820, 226, 36, 36);
    m_label_vcf_q_amt1->setBounds (812, 208, 52, 20);
    m_button_mono_retrigger->setBounds (965, 364, 86, 16);
    m_label_max_num_voices->setBounds (1064, 394, 42, 18);
    m_label_num_voices_playing->setBounds (1060, 598, 42, 18);
    m_labelDebug->setBounds (966, 274, 150, 24);
    m_btn_midiClockLed->setBounds (1058, 272, 32, 32);
    m_label_lfo0_midisync_factor->setBounds (384, 70, 52, 20);
    m_slider_lfo0_midisync_divisor->setBounds (392, 88, 36, 36);
    m_comboBox_lfo0_midisync_mode->setBounds (393, 12, 47, 16);
    m_button_bank_load->setBounds (1000, 70, 80, 20);
    m_button_bank_save->setBounds (1000, 100, 80, 20);
    m_button_patch_load->setBounds (1000, 140, 80, 20);
    m_button_patch_save->setBounds (1000, 170, 80, 20);
    //[UserResized] Add your own custom resize handling here..
    //[/UserResized]
}

void JaySynthAudioProcessorEditor::sliderValueChanged (Slider* sliderThatWasMoved)
{
    //[UsersliderValueChanged_Pre]
	int paramID;
	float value;
	param_info_t *pParamInfo;

	paramID = (int)(sliderThatWasMoved->getComponentID()).getTrailingIntValue();
	value = (float)sliderThatWasMoved->getValue();

	pParamInfo = getParamInfo(paramID);
	if (pParamInfo)
		getProcessor()->setParam(paramID, toParam(pParamInfo, (synth_float_t)value), true, true);

    if (sliderThatWasMoved == m_slider_humanize_var_vco)
	{
		getProcessor()->humanizeVarianceChanged_VCO();
	}
    else if (sliderThatWasMoved == m_slider_humanize_var_vcf)
	{
		getProcessor()->humanizeVarianceChanged_VCF();
	}
    else if (sliderThatWasMoved == m_slider_humanize_var_env)
	{
		getProcessor()->humanizeVarianceChanged_ENV();
	}

	return;
    //[/UsersliderValueChanged_Pre]

    if (sliderThatWasMoved == m_slider_master_volume)
    {
        //[UserSliderCode_m_slider_master_volume] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_master_volume]
    }
    else if (sliderThatWasMoved == m_slider_vcf_f)
    {
        //[UserSliderCode_m_slider_vcf_f] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_f]
    }
    else if (sliderThatWasMoved == m_slider_vcf_q)
    {
        //[UserSliderCode_m_slider_vcf_q] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_q]
    }
    else if (sliderThatWasMoved == m_slider_osc0_det)
    {
        //[UserSliderCode_m_slider_osc0_det] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_det]
    }
    else if (sliderThatWasMoved == m_slider_osc1_det)
    {
        //[UserSliderCode_m_slider_osc1_det] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_det]
    }
    else if (sliderThatWasMoved == m_slider_osc0_transpose)
    {
        //[UserSliderCode_m_slider_osc0_transpose] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_transpose]
    }
    else if (sliderThatWasMoved == m_slider_osc1_transpose)
    {
        //[UserSliderCode_m_slider_osc1_transpose] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_transpose]
    }
    else if (sliderThatWasMoved == m_slider_vca_env_attack)
    {
        //[UserSliderCode_m_slider_vca_env_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_env_attack]
    }
    else if (sliderThatWasMoved == m_slider_vca_env_decay)
    {
        //[UserSliderCode_m_slider_vca_env_decay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_env_decay]
    }
    else if (sliderThatWasMoved == m_slider_vca_env_release)
    {
        //[UserSliderCode_m_slider_vca_env_release] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_env_release]
    }
    else if (sliderThatWasMoved == m_slider_vca_env_sustain)
    {
        //[UserSliderCode_m_slider_vca_env_sustain] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_env_sustain]
    }
    else if (sliderThatWasMoved == m_slider_vcf_env_attack)
    {
        //[UserSliderCode_m_slider_vcf_env_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_env_attack]
    }
    else if (sliderThatWasMoved == m_slider_vcf_env_decay)
    {
        //[UserSliderCode_m_slider_vcf_env_decay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_env_decay]
    }
    else if (sliderThatWasMoved == m_slider_vcf_env_release)
    {
        //[UserSliderCode_m_slider_vcf_env_release] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_env_release]
    }
    else if (sliderThatWasMoved == m_slider_vcf_env_sustain)
    {
        //[UserSliderCode_m_slider_vcf_env_sustain] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_env_sustain]
    }
    else if (sliderThatWasMoved == m_slider_vcf_env_amount)
    {
        //[UserSliderCode_m_slider_vcf_env_amount] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_env_amount]
    }
    else if (sliderThatWasMoved == m_slider_vca_env_amount)
    {
        //[UserSliderCode_m_slider_vca_env_amount] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_env_amount]
    }
    else if (sliderThatWasMoved == m_slider_osc0_dutycycle)
    {
        //[UserSliderCode_m_slider_osc0_dutycycle] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_dutycycle]
    }
    else if (sliderThatWasMoved == m_slider_osc1_dutycycle)
    {
        //[UserSliderCode_m_slider_osc1_dutycycle] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_dutycycle]
    }
    else if (sliderThatWasMoved == m_slider_lfo0_speed)
    {
        //[UserSliderCode_m_slider_lfo0_speed] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo0_speed]
    }
    else if (sliderThatWasMoved == m_slider_osc1_fm_amt0)
    {
        //[UserSliderCode_m_slider_osc1_fm_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_fm_amt0]
    }
    else if (sliderThatWasMoved == m_slider_osc0_fm_amt0)
    {
        //[UserSliderCode_m_slider_osc0_fm_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_fm_amt0]
    }
    else if (sliderThatWasMoved == m_slider_vcf_f_amt0)
    {
        //[UserSliderCode_m_slider_vcf_f_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_f_amt0]
    }
    else if (sliderThatWasMoved == m_slider_lfo1_speed)
    {
        //[UserSliderCode_m_slider_lfo1_speed] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo1_speed]
    }
    else if (sliderThatWasMoved == m_slider_lfo2_speed)
    {
        //[UserSliderCode_m_slider_lfo2_speed] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo2_speed]
    }
    else if (sliderThatWasMoved == m_slider_lfo3_speed)
    {
        //[UserSliderCode_m_slider_lfo3_speed] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo3_speed]
    }
    else if (sliderThatWasMoved == m_slider_vca_am_amt0)
    {
        //[UserSliderCode_m_slider_vca_am_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_am_amt0]
    }
    else if (sliderThatWasMoved == m_slider_vca_pan_amt0)
    {
        //[UserSliderCode_m_slider_vca_pan_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vca_pan_amt0]
    }
    else if (sliderThatWasMoved == m_slider_lfo1_smooth)
    {
        //[UserSliderCode_m_slider_lfo1_smooth] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo1_smooth]
    }
    else if (sliderThatWasMoved == m_slider_lfo0_smooth)
    {
        //[UserSliderCode_m_slider_lfo0_smooth] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo0_smooth]
    }
    else if (sliderThatWasMoved == m_slider_lfo2_smooth)
    {
        //[UserSliderCode_m_slider_lfo2_smooth] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo2_smooth]
    }
    else if (sliderThatWasMoved == m_slider_lfo3_smooth)
    {
        //[UserSliderCode_m_slider_lfo3_smooth] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo3_smooth]
    }
    else if (sliderThatWasMoved == m_slider_osc0_pwm_amt0)
    {
        //[UserSliderCode_m_slider_osc0_pwm_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_pwm_amt0]
    }
    else if (sliderThatWasMoved == m_slider_osc1_pwm_amt0)
    {
        //[UserSliderCode_m_slider_osc1_pwm_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_pwm_amt0]
    }
    else if (sliderThatWasMoved == m_slider_osc0_level)
    {
        //[UserSliderCode_m_slider_osc0_level] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_level]
    }
    else if (sliderThatWasMoved == m_slider_osc1_level)
    {
        //[UserSliderCode_m_slider_osc1_level] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_level]
    }
    else if (sliderThatWasMoved == m_slider_noise_level)
    {
        //[UserSliderCode_m_slider_noise_level] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_noise_level]
    }
    else if (sliderThatWasMoved == m_slider_master_tune)
    {
        //[UserSliderCode_m_slider_master_tune] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_master_tune]
    }
    else if (sliderThatWasMoved == m_slider_portamento_time)
    {
        //[UserSliderCode_m_slider_portamento_time] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_portamento_time]
    }
    else if (sliderThatWasMoved == m_slider_humanize_var_vco)
    {
        //[UserSliderCode_m_slider_humanize_var_vco] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_humanize_var_vco]
    }
    else if (sliderThatWasMoved == m_slider_voice_pan_spread)
    {
        //[UserSliderCode_m_slider_voice_pan_spread] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_voice_pan_spread]
    }
    else if (sliderThatWasMoved == m_slider_humanize_var_vcf)
    {
        //[UserSliderCode_m_slider_humanize_var_vcf] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_humanize_var_vcf]
    }
    else if (sliderThatWasMoved == m_slider_humanize_var_env)
    {
        //[UserSliderCode_m_slider_humanize_var_env] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_humanize_var_env]
    }
    else if (sliderThatWasMoved == m_slider_osc1_am_amt0)
    {
        //[UserSliderCode_m_slider_osc1_am_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_am_amt0]
    }
    else if (sliderThatWasMoved == m_slider_osc0_am_amt0)
    {
        //[UserSliderCode_m_slider_osc0_am_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_am_amt0]
    }
    else if (sliderThatWasMoved == m_slider_env2_attack)
    {
        //[UserSliderCode_m_slider_env2_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env2_attack]
    }
    else if (sliderThatWasMoved == m_slider_env2_decay)
    {
        //[UserSliderCode_m_slider_env2_decay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env2_decay]
    }
    else if (sliderThatWasMoved == m_slider_env2_release)
    {
        //[UserSliderCode_m_slider_env2_release] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env2_release]
    }
    else if (sliderThatWasMoved == m_slider_env2_sustain)
    {
        //[UserSliderCode_m_slider_env2_sustain] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env2_sustain]
    }
    else if (sliderThatWasMoved == m_slider_env3_attack)
    {
        //[UserSliderCode_m_slider_env3_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env3_attack]
    }
    else if (sliderThatWasMoved == m_slider_env3_decay)
    {
        //[UserSliderCode_m_slider_env3_decay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env3_decay]
    }
    else if (sliderThatWasMoved == m_slider_env3_release)
    {
        //[UserSliderCode_m_slider_env3_release] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env3_release]
    }
    else if (sliderThatWasMoved == m_slider_env3_sustain)
    {
        //[UserSliderCode_m_slider_env3_sustain] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_env3_sustain]
    }
    else if (sliderThatWasMoved == m_slider_vcf_q_amt0)
    {
        //[UserSliderCode_m_slider_vcf_q_amt0] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_q_amt0]
    }
    else if (sliderThatWasMoved == m_slider_lfo0_delay)
    {
        //[UserSliderCode_m_slider_lfo0_delay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo0_delay]
    }
    else if (sliderThatWasMoved == m_slider_lfo0_attack)
    {
        //[UserSliderCode_m_slider_lfo0_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo0_attack]
    }
    else if (sliderThatWasMoved == m_slider_lfo1_delay)
    {
        //[UserSliderCode_m_slider_lfo1_delay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo1_delay]
    }
    else if (sliderThatWasMoved == m_slider_lfo1_attack)
    {
        //[UserSliderCode_m_slider_lfo1_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo1_attack]
    }
    else if (sliderThatWasMoved == m_slider_lfo2_delay)
    {
        //[UserSliderCode_m_slider_lfo2_delay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo2_delay]
    }
    else if (sliderThatWasMoved == m_slider_lfo2_attack)
    {
        //[UserSliderCode_m_slider_lfo2_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo2_attack]
    }
    else if (sliderThatWasMoved == m_slider_lfo3_delay)
    {
        //[UserSliderCode_m_slider_lfo3_delay] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo3_delay]
    }
    else if (sliderThatWasMoved == m_slider_lfo3_attack)
    {
        //[UserSliderCode_m_slider_lfo3_attack] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo3_attack]
    }
    else if (sliderThatWasMoved == m_slider_lfo0_symmetry)
    {
        //[UserSliderCode_m_slider_lfo0_symmetry] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo0_symmetry]
    }
    else if (sliderThatWasMoved == m_slider_lfo1_symmetry)
    {
        //[UserSliderCode_m_slider_lfo1_symmetry] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo1_symmetry]
    }
    else if (sliderThatWasMoved == m_slider_lfo2_symmetry)
    {
        //[UserSliderCode_m_slider_lfo2_symmetry] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo2_symmetry]
    }
    else if (sliderThatWasMoved == m_slider_lfo3_symmetry)
    {
        //[UserSliderCode_m_slider_lfo3_symmetry] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo3_symmetry]
    }
    else if (sliderThatWasMoved == m_slider_osc0_fm_amt1)
    {
        //[UserSliderCode_m_slider_osc0_fm_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_fm_amt1]
    }
    else if (sliderThatWasMoved == m_slider_osc0_pwm_amt1)
    {
        //[UserSliderCode_m_slider_osc0_pwm_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_pwm_amt1]
    }
    else if (sliderThatWasMoved == m_slider_osc0_am_amt1)
    {
        //[UserSliderCode_m_slider_osc0_am_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc0_am_amt1]
    }
    else if (sliderThatWasMoved == m_slider_osc1_fm_amt1)
    {
        //[UserSliderCode_m_slider_osc1_fm_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_fm_amt1]
    }
    else if (sliderThatWasMoved == m_slider_osc1_pwm_amt1)
    {
        //[UserSliderCode_m_slider_osc1_pwm_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_pwm_amt1]
    }
    else if (sliderThatWasMoved == m_slider_osc1_am_amt1)
    {
        //[UserSliderCode_m_slider_osc1_am_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_osc1_am_amt1]
    }
    else if (sliderThatWasMoved == m_slider_vcf_f_amt1)
    {
        //[UserSliderCode_m_slider_vcf_f_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_f_amt1]
    }
    else if (sliderThatWasMoved == m_slider_vcf_q_amt1)
    {
        //[UserSliderCode_m_slider_vcf_q_amt1] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_vcf_q_amt1]
    }
    else if (sliderThatWasMoved == m_slider_lfo0_midisync_divisor)
    {
        //[UserSliderCode_m_slider_lfo0_midisync_divisor] -- add your slider handling code here..
        //[/UserSliderCode_m_slider_lfo0_midisync_divisor]
    }

    //[UsersliderValueChanged_Post]
    //[/UsersliderValueChanged_Post]
}

void JaySynthAudioProcessorEditor::labelTextChanged (Label* labelThatHasChanged)
{
    //[UserlabelTextChanged_Pre]
	int paramID;
	float value;

    if (labelThatHasChanged == m_label_patch_name)
    {
		getProcessor()->setCurrentProgramName(labelThatHasChanged->getText());
		labelThatHasChanged->setText(getProcessor()->getCurrentProgramName(), juce::NotificationType::dontSendNotification);
		return;
    }
    else if (labelThatHasChanged == m_label_patch_number)
    {
		getProcessor()->setCurrentProgram(labelThatHasChanged->getText().getIntValue());
		return;
    }

	paramID = (int)(labelThatHasChanged->getComponentID()).getTrailingIntValue();
	value = (float)String(labelThatHasChanged->getText()).getFloatValue();
	getProcessor()->setParam(paramID, value, true, true);

    if (labelThatHasChanged == m_label_unisono_num_voices)
    {
		getProcessor()->unisonoModeChanged();
	}
    else if (labelThatHasChanged == m_label_max_num_voices)
    {
		getProcessor()->unisonoModeChanged();
	}
    else if (labelThatHasChanged == m_label_humanize_var_vco)
    {
		getProcessor()->humanizeVarianceChanged_VCO();
    }
    else if (labelThatHasChanged == m_label_humanize_var_vcf)
    {
		getProcessor()->humanizeVarianceChanged_VCF();
    }
    else if (labelThatHasChanged == m_label_humanize_var_env)
    {
		getProcessor()->humanizeVarianceChanged_ENV();
    }
	return;
    //[/UserlabelTextChanged_Pre]

    if (labelThatHasChanged == m_label_vcf_env_attack)
    {
        //[UserLabelCode_m_label_vcf_env_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_env_attack]
    }
    else if (labelThatHasChanged == m_label_vcf_f)
    {
        //[UserLabelCode_m_label_vcf_f] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_f]
    }
    else if (labelThatHasChanged == m_label_vca_env_attack)
    {
        //[UserLabelCode_m_label_vca_env_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_env_attack]
    }
    else if (labelThatHasChanged == m_label_vca_env_decay)
    {
        //[UserLabelCode_m_label_vca_env_decay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_env_decay]
    }
    else if (labelThatHasChanged == m_label_vca_env_sustain)
    {
        //[UserLabelCode_m_label_vca_env_sustain] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_env_sustain]
    }
    else if (labelThatHasChanged == m_label_vca_env_release)
    {
        //[UserLabelCode_m_label_vca_env_release] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_env_release]
    }
    else if (labelThatHasChanged == m_label_vcf_env_decay)
    {
        //[UserLabelCode_m_label_vcf_env_decay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_env_decay]
    }
    else if (labelThatHasChanged == m_label_vcf_env_sustain)
    {
        //[UserLabelCode_m_label_vcf_env_sustain] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_env_sustain]
    }
    else if (labelThatHasChanged == m_label_vcf_env_release)
    {
        //[UserLabelCode_m_label_vcf_env_release] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_env_release]
    }
    else if (labelThatHasChanged == m_label_vcf_q)
    {
        //[UserLabelCode_m_label_vcf_q] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_q]
    }
    else if (labelThatHasChanged == m_label_vcf_env_amount)
    {
        //[UserLabelCode_m_label_vcf_env_amount] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_env_amount]
    }
    else if (labelThatHasChanged == m_label_master_volume)
    {
        //[UserLabelCode_m_label_master_volume] -- add your label text handling code here..
        //[/UserLabelCode_m_label_master_volume]
    }
    else if (labelThatHasChanged == m_label_osc0_transpose)
    {
        //[UserLabelCode_m_label_osc0_transpose] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_transpose]
    }
    else if (labelThatHasChanged == m_label_osc1_transpose)
    {
        //[UserLabelCode_m_label_osc1_transpose] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_transpose]
    }
    else if (labelThatHasChanged == m_label_osc0_det)
    {
        //[UserLabelCode_m_label_osc0_det] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_det]
    }
    else if (labelThatHasChanged == m_label_osc1_det)
    {
        //[UserLabelCode_m_label_osc1_det] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_det]
    }
    else if (labelThatHasChanged == m_label_vca_env_amount)
    {
        //[UserLabelCode_m_label_vca_env_amount] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_env_amount]
    }
    else if (labelThatHasChanged == m_label_osc0_dutycycle)
    {
        //[UserLabelCode_m_label_osc0_dutycycle] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_dutycycle]
    }
    else if (labelThatHasChanged == m_label_osc1_dutycycle)
    {
        //[UserLabelCode_m_label_osc1_dutycycle] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_dutycycle]
    }
    else if (labelThatHasChanged == m_label_lfo0_speed)
    {
        //[UserLabelCode_m_label_lfo0_speed] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo0_speed]
    }
    else if (labelThatHasChanged == m_label_osc0_fm_amt0)
    {
        //[UserLabelCode_m_label_osc0_fm_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_fm_amt0]
    }
    else if (labelThatHasChanged == m_label_osc1_fm_amt0)
    {
        //[UserLabelCode_m_label_osc1_fm_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_fm_amt0]
    }
    else if (labelThatHasChanged == m_label_vcf_f_amt0)
    {
        //[UserLabelCode_m_label_vcf_f_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_f_amt0]
    }
    else if (labelThatHasChanged == m_label_lfo1_speed)
    {
        //[UserLabelCode_m_label_lfo1_speed] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo1_speed]
    }
    else if (labelThatHasChanged == m_label_lfo2_speed)
    {
        //[UserLabelCode_m_label_lfo2_speed] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo2_speed]
    }
    else if (labelThatHasChanged == m_label_lfo3_speed)
    {
        //[UserLabelCode_m_label_lfo3_speed] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo3_speed]
    }
    else if (labelThatHasChanged == m_label_vca_am_amt0)
    {
        //[UserLabelCode_m_label_vca_am_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_am_amt0]
    }
    else if (labelThatHasChanged == m_label_vca_pan_amt0)
    {
        //[UserLabelCode_m_label_vca_pan_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vca_pan_amt0]
    }
    else if (labelThatHasChanged == m_label_lfo1_smooth)
    {
        //[UserLabelCode_m_label_lfo1_smooth] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo1_smooth]
    }
    else if (labelThatHasChanged == m_label_lfo0_smooth)
    {
        //[UserLabelCode_m_label_lfo0_smooth] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo0_smooth]
    }
    else if (labelThatHasChanged == m_label_lfo2_smooth)
    {
        //[UserLabelCode_m_label_lfo2_smooth] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo2_smooth]
    }
    else if (labelThatHasChanged == m_label_lfo3_smooth)
    {
        //[UserLabelCode_m_label_lfo3_smooth] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo3_smooth]
    }
    else if (labelThatHasChanged == m_label_osc0_pwm_amt0)
    {
        //[UserLabelCode_m_label_osc0_pwm_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_pwm_amt0]
    }
    else if (labelThatHasChanged == m_label_osc1_pwm_amt0)
    {
        //[UserLabelCode_m_label_osc1_pwm_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_pwm_amt0]
    }
    else if (labelThatHasChanged == m_label_osc0_level)
    {
        //[UserLabelCode_m_label_osc0_level] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_level]
    }
    else if (labelThatHasChanged == m_label_osc1_level)
    {
        //[UserLabelCode_m_label_osc1_level] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_level]
    }
    else if (labelThatHasChanged == m_label_noise_level)
    {
        //[UserLabelCode_m_label_noise_level] -- add your label text handling code here..
        //[/UserLabelCode_m_label_noise_level]
    }
    else if (labelThatHasChanged == m_label_patch_name)
    {
        //[UserLabelCode_m_label_patch_name] -- add your label text handling code here..
        //[/UserLabelCode_m_label_patch_name]
    }
    else if (labelThatHasChanged == m_label_patch_number)
    {
        //[UserLabelCode_m_label_patch_number] -- add your label text handling code here..
        //[/UserLabelCode_m_label_patch_number]
    }
    else if (labelThatHasChanged == m_label_osc1_pb_min)
    {
        //[UserLabelCode_m_label_osc1_pb_min] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_pb_min]
    }
    else if (labelThatHasChanged == m_label_osc1_pb_max)
    {
        //[UserLabelCode_m_label_osc1_pb_max] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_pb_max]
    }
    else if (labelThatHasChanged == m_label_osc0_pb_max)
    {
        //[UserLabelCode_m_label_osc0_pb_max] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_pb_max]
    }
    else if (labelThatHasChanged == m_label_osc0_pb_min)
    {
        //[UserLabelCode_m_label_osc0_pb_min] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_pb_min]
    }
    else if (labelThatHasChanged == m_label_master_tune)
    {
        //[UserLabelCode_m_label_master_tune] -- add your label text handling code here..
        //[/UserLabelCode_m_label_master_tune]
    }
    else if (labelThatHasChanged == m_label_portamento_time)
    {
        //[UserLabelCode_m_label_portamento_time] -- add your label text handling code here..
        //[/UserLabelCode_m_label_portamento_time]
    }
    else if (labelThatHasChanged == m_label_voice_pan_spread)
    {
        //[UserLabelCode_m_label_voice_pan_spread] -- add your label text handling code here..
        //[/UserLabelCode_m_label_voice_pan_spread]
    }
    else if (labelThatHasChanged == m_label_unisono_num_voices)
    {
        //[UserLabelCode_m_label_unisono_num_voices] -- add your label text handling code here..
        //[/UserLabelCode_m_label_unisono_num_voices]
    }
    else if (labelThatHasChanged == m_label_osc1_am_amt0)
    {
        //[UserLabelCode_m_label_osc1_am_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_am_amt0]
    }
    else if (labelThatHasChanged == m_label_osc0_am_amt0)
    {
        //[UserLabelCode_m_label_osc0_am_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_am_amt0]
    }
    else if (labelThatHasChanged == m_label_env2_attack)
    {
        //[UserLabelCode_m_label_env2_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env2_attack]
    }
    else if (labelThatHasChanged == m_label_env2_decay)
    {
        //[UserLabelCode_m_label_env2_decay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env2_decay]
    }
    else if (labelThatHasChanged == m_label_env2_sustain)
    {
        //[UserLabelCode_m_label_env2_sustain] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env2_sustain]
    }
    else if (labelThatHasChanged == m_label_env2_release)
    {
        //[UserLabelCode_m_label_env2_release] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env2_release]
    }
    else if (labelThatHasChanged == m_label_env3_attack)
    {
        //[UserLabelCode_m_label_env3_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env3_attack]
    }
    else if (labelThatHasChanged == m_label_env3_decay)
    {
        //[UserLabelCode_m_label_env3_decay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env3_decay]
    }
    else if (labelThatHasChanged == m_label_env3_sustain)
    {
        //[UserLabelCode_m_label_env3_sustain] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env3_sustain]
    }
    else if (labelThatHasChanged == m_label_env3_release)
    {
        //[UserLabelCode_m_label_env3_release] -- add your label text handling code here..
        //[/UserLabelCode_m_label_env3_release]
    }
    else if (labelThatHasChanged == m_label_vcf_q_amt0)
    {
        //[UserLabelCode_m_label_vcf_q_amt0] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_q_amt0]
    }
    else if (labelThatHasChanged == m_label_humanize_var_vco)
    {
        //[UserLabelCode_m_label_humanize_var_vco] -- add your label text handling code here..
        //[/UserLabelCode_m_label_humanize_var_vco]
    }
    else if (labelThatHasChanged == m_label_humanize_var_vcf)
    {
        //[UserLabelCode_m_label_humanize_var_vcf] -- add your label text handling code here..
        //[/UserLabelCode_m_label_humanize_var_vcf]
    }
    else if (labelThatHasChanged == m_label_humanize_var_env)
    {
        //[UserLabelCode_m_label_humanize_var_env] -- add your label text handling code here..
        //[/UserLabelCode_m_label_humanize_var_env]
    }
    else if (labelThatHasChanged == m_label_lfo0_delay)
    {
        //[UserLabelCode_m_label_lfo0_delay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo0_delay]
    }
    else if (labelThatHasChanged == m_label_lfo0_attack)
    {
        //[UserLabelCode_m_label_lfo0_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo0_attack]
    }
    else if (labelThatHasChanged == m_label_lfo1_delay)
    {
        //[UserLabelCode_m_label_lfo1_delay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo1_delay]
    }
    else if (labelThatHasChanged == m_label_lfo1_attack)
    {
        //[UserLabelCode_m_label_lfo1_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo1_attack]
    }
    else if (labelThatHasChanged == m_label_lfo2_delay)
    {
        //[UserLabelCode_m_label_lfo2_delay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo2_delay]
    }
    else if (labelThatHasChanged == m_label_lfo2_attack)
    {
        //[UserLabelCode_m_label_lfo2_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo2_attack]
    }
    else if (labelThatHasChanged == m_label_lfo3_delay)
    {
        //[UserLabelCode_m_label_lfo3_delay] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo3_delay]
    }
    else if (labelThatHasChanged == m_label_lfo3_attack)
    {
        //[UserLabelCode_m_label_lfo3_attack] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo3_attack]
    }
    else if (labelThatHasChanged == m_label_lfo0_symmetry)
    {
        //[UserLabelCode_m_label_lfo0_symmetry] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo0_symmetry]
    }
    else if (labelThatHasChanged == m_label_lfo1_symmetry)
    {
        //[UserLabelCode_m_label_lfo1_symmetry] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo1_symmetry]
    }
    else if (labelThatHasChanged == m_label_lfo2_symmetry)
    {
        //[UserLabelCode_m_label_lfo2_symmetry] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo2_symmetry]
    }
    else if (labelThatHasChanged == m_label_lfo3_symmetry)
    {
        //[UserLabelCode_m_label_lfo3_symmetry] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo3_symmetry]
    }
    else if (labelThatHasChanged == m_label_osc0_fm_amt1)
    {
        //[UserLabelCode_m_label_osc0_fm_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_fm_amt1]
    }
    else if (labelThatHasChanged == m_label_osc0_pwm_amt1)
    {
        //[UserLabelCode_m_label_osc0_pwm_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_pwm_amt1]
    }
    else if (labelThatHasChanged == m_label_osc0_am_amt1)
    {
        //[UserLabelCode_m_label_osc0_am_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc0_am_amt1]
    }
    else if (labelThatHasChanged == m_label_osc1_fm_amt1)
    {
        //[UserLabelCode_m_label_osc1_fm_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_fm_amt1]
    }
    else if (labelThatHasChanged == m_label_osc1_pwm_amt1)
    {
        //[UserLabelCode_m_label_osc1_pwm_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_pwm_amt1]
    }
    else if (labelThatHasChanged == m_label_osc1_am_amt1)
    {
        //[UserLabelCode_m_label_osc1_am_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_osc1_am_amt1]
    }
    else if (labelThatHasChanged == m_label_vcf_f_amt1)
    {
        //[UserLabelCode_m_label_vcf_f_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_f_amt1]
    }
    else if (labelThatHasChanged == m_label_vcf_q_amt1)
    {
        //[UserLabelCode_m_label_vcf_q_amt1] -- add your label text handling code here..
        //[/UserLabelCode_m_label_vcf_q_amt1]
    }
    else if (labelThatHasChanged == m_label_max_num_voices)
    {
        //[UserLabelCode_m_label_max_num_voices] -- add your label text handling code here..
        //[/UserLabelCode_m_label_max_num_voices]
    }
    else if (labelThatHasChanged == m_label_num_voices_playing)
    {
        //[UserLabelCode_m_label_num_voices_playing] -- add your label text handling code here..
        //[/UserLabelCode_m_label_num_voices_playing]
    }
    else if (labelThatHasChanged == m_label_lfo0_midisync_factor)
    {
        //[UserLabelCode_m_label_lfo0_midisync_factor] -- add your label text handling code here..
        //[/UserLabelCode_m_label_lfo0_midisync_factor]
    }

    //[UserlabelTextChanged_Post]
    //[/UserlabelTextChanged_Post]
}

void JaySynthAudioProcessorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged)
{
    //[UsercomboBoxChanged_Pre]
 	int paramID, srcID, opID;
	float value;
	param_info_t *pParamInfo;

	paramID = (int)(comboBoxThatHasChanged->getComponentID()).getTrailingIntValue();
	value = (float)(comboBoxThatHasChanged->getSelectedId()-1);
	pParamInfo = getParamInfo(paramID);
	if (pParamInfo)
		getProcessor()->setParam(paramID, (synth_float_t)value, true, true);

    if (comboBoxThatHasChanged == m_comboBox_osc0_fm_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_fm_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_pwm_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_pwm_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_am_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_am_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_f_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_q_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_vca_am_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_vca_pan_src0)
    {
		srcID = ModSrc0_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_fm_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_OSC_0_FM_SRC_OP, (synth_float_t)opID, true, true);
	}
    else if (comboBoxThatHasChanged == m_comboBox_osc1_fm_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_OSC_1_FM_SRC_OP, (synth_float_t)opID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_pwm_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_OSC_0_PWM_SRC_OP, (synth_float_t)opID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_pwm_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_OSC_1_PWM_SRC_OP, (synth_float_t)opID, true, true);
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_am_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_OSC_0_AM_SRC_OP, (synth_float_t)opID, true, true);
	}
    else if (comboBoxThatHasChanged == m_comboBox_osc1_am_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_OSC_1_AM_SRC_OP, (synth_float_t)opID, true, true);
	}
    else if (comboBoxThatHasChanged == m_comboBox_vcf_f_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_VCF_F_SRC_OP, (synth_float_t)opID, true, true);
	}
    else if (comboBoxThatHasChanged == m_comboBox_vcf_q_src1)
    {
		srcID = ModSrc1_findByName(comboBoxThatHasChanged->getText());
		if (srcID >= 0)
			getProcessor()->setParam(paramID, (synth_float_t)srcID, true, true);

		opID = ModSrcOP_findByName(comboBoxThatHasChanged->getText());
		if (opID >= 0)
			getProcessor()->setParam(SYNTH_PARAM_VCF_Q_SRC_OP, (synth_float_t)opID, true, true);
	}
	return;
    //[/UsercomboBoxChanged_Pre]

    if (comboBoxThatHasChanged == m_comboBox_osc0_shape)
    {
        //[UserComboBoxCode_m_comboBox_osc0_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_shape)
    {
        //[UserComboBoxCode_m_comboBox_osc1_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_lfo0_shape)
    {
        //[UserComboBoxCode_m_comboBox_lfo0_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_lfo0_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_lfo1_shape)
    {
        //[UserComboBoxCode_m_comboBox_lfo1_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_lfo1_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_lfo2_shape)
    {
        //[UserComboBoxCode_m_comboBox_lfo2_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_lfo2_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_lfo3_shape)
    {
        //[UserComboBoxCode_m_comboBox_lfo3_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_lfo3_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_f_src0)
    {
        //[UserComboBoxCode_m_comboBox_vcf_f_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vcf_f_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_fm_src0)
    {
        //[UserComboBoxCode_m_comboBox_osc0_fm_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_fm_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_fm_src0)
    {
        //[UserComboBoxCode_m_comboBox_osc1_fm_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_fm_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vca_am_src0)
    {
        //[UserComboBoxCode_m_comboBox_vca_am_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vca_am_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vca_pan_src0)
    {
        //[UserComboBoxCode_m_comboBox_vca_pan_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vca_pan_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_type)
    {
        //[UserComboBoxCode_m_comboBox_vcf_type] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vcf_type]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_pwm_src0)
    {
        //[UserComboBoxCode_m_comboBox_osc0_pwm_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_pwm_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_pwm_src0)
    {
        //[UserComboBoxCode_m_comboBox_osc1_pwm_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_pwm_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_noise_shape)
    {
        //[UserComboBoxCode_m_comboBox_noise_shape] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_noise_shape]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_order)
    {
        //[UserComboBoxCode_m_comboBox_vcf_order] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vcf_order]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_fm_src1)
    {
        //[UserComboBoxCode_m_comboBox_osc1_fm_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_fm_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_pwm_src1)
    {
        //[UserComboBoxCode_m_comboBox_osc1_pwm_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_pwm_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_fm_src1)
    {
        //[UserComboBoxCode_m_comboBox_osc0_fm_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_fm_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_pwm_src1)
    {
        //[UserComboBoxCode_m_comboBox_osc0_pwm_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_pwm_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_am_src0)
    {
        //[UserComboBoxCode_m_comboBox_osc1_am_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_am_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc1_am_src1)
    {
        //[UserComboBoxCode_m_comboBox_osc1_am_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc1_am_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_am_src0)
    {
        //[UserComboBoxCode_m_comboBox_osc0_am_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_am_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_osc0_am_src1)
    {
        //[UserComboBoxCode_m_comboBox_osc0_am_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_osc0_am_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_f_src1)
    {
        //[UserComboBoxCode_m_comboBox_vcf_f_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vcf_f_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_q_src0)
    {
        //[UserComboBoxCode_m_comboBox_vcf_q_src0] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vcf_q_src0]
    }
    else if (comboBoxThatHasChanged == m_comboBox_vcf_q_src1)
    {
        //[UserComboBoxCode_m_comboBox_vcf_q_src1] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_vcf_q_src1]
    }
    else if (comboBoxThatHasChanged == m_comboBox_lfo0_midisync_mode)
    {
        //[UserComboBoxCode_m_comboBox_lfo0_midisync_mode] -- add your combo box handling code here..
        //[/UserComboBoxCode_m_comboBox_lfo0_midisync_mode]
    }

    //[UsercomboBoxChanged_Post]
    //[/UsercomboBoxChanged_Post]
}



//[MiscUserCode] You can add your own definitions of your custom methods or any other code here...
int JaySynthAudioProcessorEditor::ModSrc0_findByName(String name)
{
	int i;

	for (i=0; i < VOICE_NUM_MOD_SOURCES_0; i++)
	{
		if (name.contains(m_mod_src0_names[i]))
			break;
	}

	if (i == VOICE_NUM_MOD_SOURCES_0)
		return -1;

	return i;
}

int JaySynthAudioProcessorEditor::ModSrc1_findByName(String name)
{
	int i;

	for (i=0; i < VOICE_NUM_MOD_SOURCES_1; i++)
	{
		if (name.contains(m_mod_src1_names[i]))
			break;
	}

	if (i == VOICE_NUM_MOD_SOURCES_1)
		return -1;

	return i;
}

int JaySynthAudioProcessorEditor::ModSrcOP_findByName(String name)
{
	int i;

	for (i=0; i < VOICE_NUM_MOD_OPS; i++)
	{
		if (name.substring(0, 2).contains(m_mod_src_op_names[i]))
			break;
	}

	if (i == VOICE_NUM_MOD_OPS)
		return -1;

	return i;
}

int JaySynthAudioProcessorEditor::ModSrc1_CB_getIndex(int srcID, int opID)
{
	if (srcID == 0)
		return 1;

	return 1 + opID*(VOICE_NUM_MOD_SOURCES_1-1) + srcID;
}

void JaySynthAudioProcessorEditor::buttonClicked (Button* buttonThatWasClicked)
{
 	int paramID;
	float value;
	param_info_t *pParamInfo;

    if (buttonThatWasClicked == m_button_bank_load)
    {
        String filePatterns("*.fxb;*.xmb");
        FileChooser fc("Load bank", m_fileChooserDirectory, filePatterns, false);
        if (fc.browseForFileToOpen())
        {
            File const &file = fc.getResult();
            getProcessor()->loadBankFromFile(file);
            m_fileChooserDirectory = file;
        }
    }
    else if (buttonThatWasClicked == m_button_bank_save)
    {
        String filePatterns("*.fxb;*.xmb");
        FileChooser fc("Save bank", m_fileChooserDirectory, filePatterns, false);
        if (fc.browseForFileToSave(true))
        {
            File const &file = fc.getResult();
            getProcessor()->saveBankToFile(file);
            m_fileChooserDirectory = file;
        }
    }
    else if (buttonThatWasClicked == m_button_patch_load)
    {
        String filePatterns("*.fxp;*.xmp");
        FileChooser fc("Load patch", m_fileChooserDirectory, filePatterns, false);
        if (fc.browseForFileToOpen())
        {
            File const &file = fc.getResult();
            getProcessor()->loadPatchFromFile(file, 0);
            m_fileChooserDirectory = file;
        }
    }
    else if (buttonThatWasClicked == m_button_patch_save)
    {
        String filePatterns("*.fxp;*.xmp");
        FileChooser fc("Save patch", m_fileChooserDirectory, filePatterns, false);
        if (fc.browseForFileToSave(true))
        {
            File const &file = fc.getResult();
            getProcessor()->savePatchToFile(file, 0);
            m_fileChooserDirectory = file;
       }
    }
    else if (buttonThatWasClicked == m_button_patch_incr)
    {
		getProcessor()->setCurrentProgram(getProcessor()->getCurrentProgram()+1);
		return;
    }
    else if (buttonThatWasClicked == m_button_patch_decr)
    {
		getProcessor()->setCurrentProgram(getProcessor()->getCurrentProgram()-1);
		return;
    }

    if (buttonThatWasClicked->getComponentID().startsWith("PARAM"))
    {
        paramID = (int)(buttonThatWasClicked->getComponentID()).getTrailingIntValue();
        value = (float)buttonThatWasClicked->getToggleState();
        pParamInfo = getParamInfo(paramID);
        if (pParamInfo)
        {
            getProcessor()->setParam(paramID, toParam(pParamInfo, (synth_float_t)value), true, true);
        }
    }

    if (buttonThatWasClicked == m_button_humanize_enable)
    {
		getProcessor()->humanizeModeChanged();
	}

    if (buttonThatWasClicked == m_button_unisono_enable)
    {
		getProcessor()->unisonoModeChanged();
	}

    if (buttonThatWasClicked == m_button_mono_enable)
    {
		getProcessor()->unisonoModeChanged();
	}
}

void JaySynthAudioProcessorEditor::mouseDown (const MouseEvent &m)
{
	int paramID;
	Component *componentThatWasClicked = (Component*)m.eventComponent;
	paramID = componentThatWasClicked->getComponentID().getTrailingIntValue();

	if (m.mods.isRightButtonDown() && !m.mods.isShiftDown())
	{
		if (componentThatWasClicked->getComponentID().contains(String("PARAM_SLIDER")))
		{
			switch (paramID)
			{
				// These parameters don't support per voice modulation
				case SYNTH_PARAM_VOLUME:
				case SYNTH_PARAM_TUNE:
				case SYNTH_PARAM_VOICE_PAN_SPREAD:
				case SYNTH_PARAM_HUMANIZE_VAR_VCO:
				case SYNTH_PARAM_HUMANIZE_VAR_VCF:
				case SYNTH_PARAM_HUMANIZE_VAR_ENV:
				case SYNTH_PARAM_PORTAMENTO_TIME:
					return;

				default:
					break;
			}
			VelKey_PopUp_show(componentThatWasClicked);
		}
	}

	if (m.mods.isRightButtonDown() && m.mods.isShiftDown())
	{
		// Comboboxes don't support midicontroller assignments
		MidiCC_PopUp_show(componentThatWasClicked);
	}
}

void JaySynthAudioProcessorEditor::mouseDoubleClick (const MouseEvent &/*m*/)
{
}

void JaySynthAudioProcessorEditor::VelKey_PopUp_show(Component *componentThatWasClicked)
{
	int paramID, compX, compY, mainSizeX, mainSizeY, popupSizeX, popupSizeY;
	synth_float_t currentParamValue;
	JaySynthMidiCC *pMidiCC;
	JaySynth::midi_note_info_t *pCurrentMidiNoteInfo;

	if (m_VelKey_PopUp)
		return;

	if (componentThatWasClicked->getName().isEmpty())
		return;

	paramID = (int)(componentThatWasClicked->getComponentID()).getTrailingIntValue();
	currentParamValue = getProcessor()->getParam(paramID);
	pCurrentMidiNoteInfo = getProcessor()->getLastMidiNoteInfos();

	pMidiCC = getProcessor()->getMidiCC_editBuffer();
	addChildComponent (m_VelKey_PopUp = new VelKey_PopUp(pMidiCC, paramID, currentParamValue, pCurrentMidiNoteInfo, componentThatWasClicked->getName(), this));

	compX = componentThatWasClicked->getX();
	compY = componentThatWasClicked->getY();
	mainSizeX = this->getWidth();
	mainSizeY = this->getHeight();
	popupSizeX = m_VelKey_PopUp->getWidth();
	popupSizeY = m_VelKey_PopUp->getHeight();

	if ((compX + popupSizeX) > mainSizeX)
		compX = mainSizeX - popupSizeX;

	if ((compY + popupSizeY) > mainSizeY)
		compY = mainSizeY - popupSizeY;

	m_VelKey_PopUp->setBounds(compX, compY, popupSizeX, popupSizeY);
	m_VelKey_PopUp->show();
//	m_VelKey_PopUp->enterModalState();

}

void JaySynthAudioProcessorEditor::VelKey_PopUp_event(int event)
{
	int paramID;
	switch (event)
	{
		case VelKey_PopUp::POPUP_OK:
			paramID = m_VelKey_PopUp->getParamID();
			m_label_patch_name->setText(getProcessor()->getCurrentProgramName(), juce::NotificationType::dontSendNotification);
			paramUpdate(paramID, false);
			deleteAndZero (m_VelKey_PopUp);
			break;

			case VelKey_PopUp::POPUP_PARAM_CHANGED:
				paramID = m_VelKey_PopUp->getParamID();
				m_label_patch_name->setText(getProcessor()->getCurrentProgramName(), juce::NotificationType::dontSendNotification);
				getProcessor()->perVoiceControlChanged(paramID);
				paramUpdate(paramID, false);
			break;

		default:
			break;
	}
};

void JaySynthAudioProcessorEditor::MidiCC_PopUp_show(Component *componentThatWasClicked)
{
	int paramID, compX, compY, mainSizeX, mainSizeY, popupSizeX, popupSizeY;
	synth_float_t currentParamValue;
	JaySynthMidiCC *pMidiCC;
	JaySynth::midiCC_info_t *pCurrentMidiCCinfo;

	if (m_MidiCC_PopUp)
		return;

	if (componentThatWasClicked->getName().isEmpty())
		return;

	paramID = (int)(componentThatWasClicked->getComponentID()).getTrailingIntValue();
	currentParamValue = getProcessor()->getParam(paramID);
	pCurrentMidiCCinfo = getProcessor()->getLastMidiControllers();

	pMidiCC = getProcessor()->getMidiCC_editBuffer();
	addChildComponent (m_MidiCC_PopUp = new MidiCC_PopUp(pMidiCC, paramID, currentParamValue, pCurrentMidiCCinfo, componentThatWasClicked->getName(), this));
	compX = componentThatWasClicked->getX();
	compY = componentThatWasClicked->getY();
	mainSizeX = this->getWidth();
	mainSizeY = this->getHeight();
	popupSizeX = m_MidiCC_PopUp->getWidth();
	popupSizeY = m_MidiCC_PopUp->getHeight();

	if ((compX + popupSizeX) > mainSizeX)
		compX = mainSizeX - popupSizeX;

	if ((compY + popupSizeY) > mainSizeY)
		compY = mainSizeY - popupSizeY;

	m_MidiCC_PopUp->setBounds(compX, compY, popupSizeX, popupSizeY);
	m_MidiCC_PopUp->show();
//	m_MidiCC_PopUp->enterModalState();

}

void JaySynthAudioProcessorEditor::MidiCC_PopUp_event(int event)
{
	int paramID;
	switch (event)
	{
		case MidiCC_PopUp::POPUP_OK:
			deleteAndZero (m_MidiCC_PopUp);
			break;

			case MidiCC_PopUp::POPUP_PARAM_CHANGED:
				paramID = m_MidiCC_PopUp->getParamID();
				getProcessor()->setParam(paramID, m_MidiCC_PopUp->getCurrentParamValue(), false, false);
				getProcessor()->controlParam(paramID, m_MidiCC_PopUp->getCurrentControlValue());
			break;

		default:
			break;
	}
};

void JaySynthAudioProcessorEditor::actionListenerCallback (const String &message)
{
	int type, paramID, note, limiter_on;
	String key, value;
	StringPairArray spa;
	String s = message;
	float velocity;

	do
	{
		key = s.substring(0, s.indexOfChar('='));
		s = s.trimCharactersAtStart(key + "=");
		value = s.substring(0, s.indexOfChar(' '));
		s = s.trimCharactersAtStart(value + "=");
		spa.set(key, value);
		s = s.substring(s.indexOfChar(' ')+1);

	} while (s != String::empty);

	type = spa.getValue("type", "-1").getIntValue();
	switch (type)
	{
		case JaySynthActionListener::JAYSYNTH_CHANGED_PARAM:
			paramID = spa.getValue("paramID", "-1").getIntValue();
			if (paramID < 0)
				break;
			paramUpdate(paramID, false);
			m_label_patch_name->setText(getProcessor()->getCurrentProgramName(), juce::NotificationType::dontSendNotification);
			if (m_VelKey_PopUp)
				m_VelKey_PopUp->setCurrParam(paramID, (float)getProcessor()->getParam(paramID));
		break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_MIDICC:
			JaySynth::midiCC_info_t midi_info;
			midi_info.channel = spa.getValue("ch", "-1").getIntValue();
			midi_info.ID = spa.getValue("id", "-1").getIntValue();
			midi_info.value = spa.getValue("value", "-1").getFloatValue();

			if (m_MidiCC_PopUp)
				m_MidiCC_PopUp->setControllerID(midi_info.ID);

			break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_NOTE_PRESSED:
			note = spa.getValue("note", "-1").getIntValue();
			velocity = spa.getValue("velocity", "-1").getFloatValue();

			if (m_VelKey_PopUp)
				m_VelKey_PopUp->setKeyVel(note, velocity);

			break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_NOTE_RELEASED:
			note = spa.getValue("note", "-1").getIntValue();
			velocity = spa.getValue("velocity", "-1").getFloatValue();

			break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_PROGRAM:
			m_label_patch_name->setText(getProcessor()->getCurrentProgramName(), juce::NotificationType::dontSendNotification);
			m_label_patch_number->setText(String::formatted("%02d", getProcessor()->getCurrentProgram()), juce::NotificationType::dontSendNotification);
			break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_LIMITER:
			limiter_on = spa.getValue("value", "-1").getIntValue();
			m_btn_limiter_led->setToggleState(limiter_on != 0, juce::NotificationType::dontSendNotification);
		break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_NUM_VOICES_PLAYING:
			paramID = spa.getValue("value", "-1").getIntValue();
			if (paramID < 0)
				break;
			m_label_num_voices_playing->setText(String::formatted("%d", paramID), juce::NotificationType::dontSendNotification);
		break;

		case JaySynthActionListener::JAYSYNTH_CHANGED_MIDICLOCK:
		{
			uint32_t bpm = spa.getValue("bpm", "-1").getIntValue();
			uint32_t brightness = spa.getValue("brightness", "-1").getIntValue();
			m_btn_midiClockLed->flash(brightness*50, brightness);
			m_labelDebug->setText(String("BPM = ") + String(bpm), juce::NotificationType::dontSendNotification);
		}
		break;

		default:
			break;
	}
}

void JaySynthAudioProcessorEditor::paramUpdate(int paramID, bool doHostUpdate)
{
	Slider *pSlider;
	Label *pLabel;
	ComboBox *pComboBox;
	Button *pButton;
	JaySynthMidiCC *pMidiCC;
	midiCC_container_t *pMidiCC_container;
	Colour slider_colour;
	Colour label_colour;
	Colour combobox_colour;

	pMidiCC = getProcessor()->getMidiCC_editBuffer();
	pMidiCC_container = pMidiCC->getAtParamID(paramID);

	if (doHostUpdate)
		getProcessor()->sendParamChangeToHost(paramID, getProcessor()->getParameter(paramID));

	combobox_colour = Colour(0xffffffff);
	slider_colour = Colour(0x7fffffff);
	label_colour = Colour(0xff000000);
	if (pMidiCC->isAssigned(pMidiCC_container))
	{
		combobox_colour = Colour(0xffffff00);
		slider_colour = Colour(0xffffff00);
		if (pMidiCC->doChangeParameter(pMidiCC_container))
		{
			combobox_colour = Colour(0xffffff00);
			slider_colour = Colour(0xffffff00);
		}
	}
	if (pMidiCC->isAssignedVel(pMidiCC_container))
	{
		label_colour = Colour(0xffffff00);
	}
	if (pMidiCC->isAssignedKey(pMidiCC_container))
	{
		label_colour = Colour(0xffffff00);
	}

	pSlider = (Slider*)findChildWithID(String("PARAM_SLIDER ") + String(paramID));
	if (pSlider)
	{
		pSlider->setValue(getProcessor()->getParameter(paramID), juce::NotificationType::dontSendNotification);
	    pSlider->setColour (Slider::rotarySliderFillColourId, slider_colour);
	}

	pLabel = (Label*)findChildWithID(String("PARAM_LABEL ") + String(paramID));
	if (pLabel)
	{
		pLabel->setText((String)getProcessor()->getParameterText(paramID), juce::NotificationType::dontSendNotification);
	    pLabel->setColour (Label::textColourId, label_colour);
	}

	pComboBox = (ComboBox*)findChildWithID(String("PARAM_COMBOBOX ") + String(paramID));
	if (pComboBox)
	{
		switch(paramID)
		{
			case SYNTH_PARAM_OSC_0_FM_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_OSC_0_FM_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_OSC_1_FM_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_OSC_1_FM_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_OSC_0_AM_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_OSC_0_AM_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_OSC_1_AM_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_OSC_1_AM_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_OSC_0_PWM_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_OSC_0_PWM_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_OSC_1_PWM_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_OSC_1_PWM_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_VCF_F_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_VCF_F_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;
			case SYNTH_PARAM_VCF_Q_SRC_1:
				pComboBox->setSelectedId(ModSrc1_CB_getIndex((int)getProcessor()->getParam(paramID), (int)getProcessor()->getParam(SYNTH_PARAM_VCF_Q_SRC_OP)), juce::NotificationType::dontSendNotification);
				break;

			default:
			pComboBox->setSelectedId(1 + (int)getProcessor()->getParam(paramID), juce::NotificationType::dontSendNotification);
			break;
		}
		pComboBox->setColour (ComboBox:: backgroundColourId, combobox_colour);
	}

	pButton = (Button*)findChildWithID(String("PARAM_BUTTON ") + String(paramID));
	if (pButton)
	{
		pButton->setToggleState(getProcessor()->getParameter(paramID) > 0.5, juce::NotificationType::dontSendNotification);
		
        if (pButton == m_button_humanize_enable)
        {
            getProcessor()->humanizeModeChanged();
        }
        else if (pButton == m_button_unisono_enable)
        {
            getProcessor()->unisonoModeChanged();
        }

	}

}

// This timer periodically checks whether any of the vcf's parameters have changed...
void JaySynthAudioProcessorEditor::timerCallback()
{
}
//[/MiscUserCode]


//==============================================================================
// Binary resources - be careful not to edit any of these sections!

// JUCER_RESOURCE: led_23_red_png, 820, "C:/Users/jens/Pictures/led_23_red.png"
static const unsigned char resource_JaySynthAudioProcessorEditor_led_23_red_png[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122,244,0,0,0,1,115,82,71,66,0,174,
206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,2,201,73,68,65,84,88,71,237,84,77,79,26,81,20,125,51,128,56,200,48,10,242,49,45,
6,148,50,72,45,137,74,213,64,210,16,43,196,208,32,154,74,109,218,212,29,38,74,237,166,11,235,166,254,0,22,46,92,179,169,174,26,211,96,93,117,221,244,159,116,103,210,29,173,216,152,156,222,59,66,226,162,
59,199,38,77,120,201,201,187,51,239,222,123,206,189,239,67,136,222,232,117,160,215,129,94,7,254,215,14,36,18,9,111,50,153,124,96,24,70,238,159,214,80,169,84,222,44,46,46,54,106,181,218,175,157,157,29,
108,111,111,131,190,207,253,126,255,161,162,40,183,43,38,151,203,45,111,109,109,181,26,141,6,154,205,38,78,78,154,56,58,58,66,189,94,71,181,90,133,174,235,63,169,27,43,183,210,145,124,62,159,221,216,216,
104,29,28,28,224,248,248,35,90,173,31,56,59,251,142,201,201,73,238,0,214,215,215,81,40,20,160,170,42,139,120,111,181,8,185,88,44,30,238,238,238,98,111,111,15,167,167,159,112,121,217,194,254,126,29,195,
195,195,112,58,157,112,187,221,72,167,211,136,70,163,32,242,15,4,217,74,17,246,181,181,181,246,230,230,38,150,150,150,48,59,59,131,233,233,105,208,190,131,246,29,146,36,193,227,81,77,17,154,166,241,119,
155,200,251,173,18,32,5,131,65,163,84,42,161,92,46,155,196,99,99,99,8,4,2,112,185,92,144,108,14,24,70,2,153,204,44,188,222,33,174,190,139,123,100,75,86,136,112,208,190,38,178,217,44,166,166,166,16,139,
197,64,130,224,86,61,144,6,52,40,129,48,50,243,5,100,30,229,232,16,222,185,46,96,142,200,29,86,8,112,201,178,60,154,74,165,218,76,30,10,133,160,122,60,176,15,250,209,63,18,135,158,158,67,118,245,41,50,
165,34,84,22,208,215,199,34,46,8,35,4,197,10,1,78,74,18,165,170,63,155,228,170,10,89,113,195,17,140,32,52,147,65,120,225,49,178,47,159,35,62,159,131,208,117,8,218,22,242,255,194,49,4,142,189,241,232,227,
100,118,187,125,153,200,207,109,202,0,132,234,131,8,142,64,142,39,32,167,82,38,132,97,116,5,240,1,92,237,8,224,216,27,15,62,205,119,9,51,66,150,223,9,215,96,91,120,67,16,209,81,136,241,113,136,137,137,
171,153,175,159,207,119,97,250,176,239,85,140,37,91,96,167,68,94,194,4,161,64,4,175,133,170,125,19,225,240,111,17,137,64,140,146,16,182,53,237,43,173,213,76,159,43,95,142,225,216,27,15,126,80,184,146,
48,225,33,225,9,225,25,225,133,176,217,222,154,130,132,120,213,249,199,107,236,195,190,28,99,217,99,100,163,100,30,66,164,67,144,167,185,68,88,233,128,237,133,206,26,251,176,175,37,213,119,219,199,15,
10,39,228,196,92,221,125,66,154,192,119,157,193,118,146,192,251,222,37,183,228,17,234,10,224,153,19,114,39,184,181,67,4,157,192,119,157,193,54,255,227,53,246,177,156,252,111,66,248,142,51,33,131,237,91,
39,190,46,162,103,247,58,96,89,7,254,0,38,229,208,224,232,174,221,11,0,0,0,0,73,69,78,68,174,66,96,130,0,0};

const char* JaySynthAudioProcessorEditor::led_23_red_png = (const char*) resource_JaySynthAudioProcessorEditor_led_23_red_png;
const int JaySynthAudioProcessorEditor::led_23_red_pngSize = 820;

// JUCER_RESOURCE: led_23_red1_png, 1556, "C:/Users/jens/Pictures/led_23_red1.png"
static const unsigned char resource_JaySynthAudioProcessorEditor_led_23_red1_png[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122,244,0,0,0,1,115,82,71,66,0,
174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,5,169,73,68,65,84,88,71,197,87,11,80,148,85,20,62,139,15,18,36,205,23,246,
82,18,199,28,84,124,101,78,22,154,142,212,48,105,54,49,162,77,106,84,44,67,142,137,174,38,141,137,173,248,66,69,99,65,217,101,97,5,97,137,76,5,241,177,147,47,124,84,12,96,234,16,249,200,199,84,128,89,
12,54,129,153,186,66,167,243,237,254,59,187,12,168,187,232,232,206,124,243,223,189,247,124,223,61,247,156,123,207,127,127,162,182,252,204,172,34,51,123,9,218,43,64,91,213,22,41,247,57,206,9,189,101,50,
31,129,159,160,139,2,180,209,135,49,56,229,229,190,240,189,44,157,19,119,82,38,237,38,79,127,193,83,130,103,21,160,141,62,140,193,25,216,62,0,71,204,220,78,132,58,10,58,11,158,80,38,121,70,158,207,9,158,
23,12,82,128,54,250,48,6,71,96,11,14,184,237,238,181,198,150,227,246,28,99,114,132,20,43,234,46,120,82,208,87,48,64,48,88,48,66,240,162,2,180,209,135,49,216,192,22,28,112,161,1,45,15,246,136,61,236,32,
98,21,8,43,4,3,4,88,105,176,96,148,224,21,193,4,5,104,163,15,99,176,129,45,56,224,66,3,90,110,238,11,251,228,29,4,216,84,93,5,8,105,31,1,86,135,9,176,234,177,130,80,193,36,5,104,163,15,99,176,129,45,56,
224,66,3,90,208,188,135,19,45,67,223,67,72,200,107,127,1,66,140,85,134,8,94,19,188,41,152,170,0,109,244,97,12,54,176,5,7,92,104,184,153,10,187,3,174,171,239,45,255,145,211,129,130,225,130,49,130,137,130,
201,202,196,51,229,9,192,17,244,97,12,54,176,5,7,92,104,184,70,225,14,123,193,89,92,28,187,30,155,232,105,65,160,178,34,132,247,85,65,152,32,92,149,125,235,189,246,250,63,230,119,72,253,45,78,254,207,
64,159,50,6,27,216,34,10,224,66,3,90,142,83,113,135,162,213,60,252,143,11,161,167,0,231,28,249,28,166,172,108,98,39,99,109,100,96,252,206,67,225,171,205,214,168,141,5,60,107,195,87,60,70,163,179,250,168,
211,143,169,82,170,163,92,162,0,14,184,208,128,22,52,239,114,34,236,14,160,120,60,38,64,133,235,37,112,132,127,164,180,67,186,166,94,212,76,209,26,111,36,237,40,102,243,225,147,156,127,172,130,51,247,
31,231,21,249,7,57,114,195,86,238,253,238,202,155,180,230,140,6,182,2,112,28,105,128,22,52,161,141,57,90,73,67,243,138,135,156,33,119,40,46,65,130,81,157,13,191,79,157,188,56,245,70,66,174,133,179,246,
151,242,181,127,235,249,207,134,191,57,104,237,81,126,93,119,128,103,164,236,226,80,109,14,251,69,44,191,73,186,234,8,112,20,46,52,28,251,224,46,21,178,249,6,68,37,195,57,238,39,24,76,57,77,163,135,44,
48,238,139,94,151,205,115,245,5,188,253,196,69,110,108,186,206,73,37,85,220,99,77,57,251,45,59,202,221,227,10,121,228,146,124,14,152,99,98,138,249,250,27,112,108,92,187,6,180,160,233,56,142,173,70,192,
245,4,192,24,245,29,155,104,8,25,235,95,158,16,187,214,26,161,53,240,248,181,22,30,170,175,224,96,253,143,220,99,221,9,246,91,85,206,222,203,75,185,95,82,9,251,125,178,151,187,104,138,88,165,206,179,82,
90,237,56,27,215,174,1,45,143,28,64,5,179,59,176,229,118,176,111,66,201,180,49,177,201,28,178,40,93,66,126,132,251,126,113,130,123,38,157,100,223,245,167,217,75,247,11,79,179,92,102,109,73,13,7,233,79,
49,105,15,49,45,42,100,250,188,100,42,184,46,14,64,211,237,8,56,29,48,93,31,214,241,211,125,211,131,230,108,226,192,185,153,220,119,213,17,246,151,149,251,232,46,178,42,163,150,123,110,187,202,218,74,
65,197,21,126,169,232,28,83,198,247,76,73,22,166,184,61,31,146,112,219,234,128,51,5,134,186,225,180,96,247,219,1,243,54,91,123,47,200,99,255,101,7,217,87,119,129,189,179,235,56,192,210,192,227,203,235,
57,225,82,29,107,207,95,230,62,187,43,152,204,135,153,210,10,111,211,66,203,20,50,92,69,65,106,83,10,156,155,48,165,102,4,205,43,120,171,91,108,206,119,254,241,22,246,75,252,129,85,250,106,238,181,243,
47,142,168,104,224,119,42,235,120,197,133,43,28,94,122,129,41,79,86,111,148,213,47,205,42,3,135,192,245,96,19,58,174,88,56,42,206,99,152,82,51,140,98,119,76,105,23,101,252,204,119,245,113,171,215,198,
159,153,114,107,88,181,187,150,125,14,93,225,78,251,126,229,142,69,103,152,190,44,99,202,60,192,148,188,205,74,234,180,120,112,196,1,164,192,163,99,216,178,16,25,174,14,150,20,132,209,7,233,106,138,49,
153,200,120,214,74,5,85,76,7,4,123,46,49,21,96,242,114,38,83,49,83,202,206,219,20,157,106,18,219,104,210,236,10,35,67,29,142,33,138,153,91,133,200,245,18,226,44,197,166,235,3,41,254,219,113,20,179,101,
6,205,212,197,81,148,222,64,169,71,206,81,209,233,70,218,46,57,207,147,201,51,138,27,73,155,127,150,222,215,25,108,54,176,5,7,92,15,75,49,210,208,252,101,148,211,216,159,146,206,191,64,11,247,78,38,245,
230,24,154,149,186,148,34,211,214,83,84,230,38,250,56,103,43,205,222,146,39,109,189,173,15,99,176,129,45,56,224,186,253,50,194,197,236,78,175,227,140,134,65,180,242,84,136,8,135,83,76,206,108,82,155,226,
41,58,43,145,62,50,39,219,128,182,122,243,18,138,201,157,109,179,129,173,177,30,247,69,15,94,199,78,7,92,239,130,246,11,73,110,83,127,210,203,113,76,172,28,79,139,139,195,73,83,164,166,249,133,26,201,
243,98,27,236,237,40,219,24,108,96,11,142,199,23,18,187,19,173,95,201,114,155,6,80,230,181,225,164,171,10,161,213,149,147,40,161,124,58,45,43,139,180,1,237,196,159,222,176,141,153,254,193,228,109,188,
146,57,238,199,119,187,148,230,254,55,148,178,111,141,150,13,54,86,28,10,181,1,109,244,97,236,190,47,165,173,167,226,33,95,203,157,145,120,68,31,38,174,159,42,143,244,211,172,117,71,30,242,199,105,107,
31,118,15,240,243,252,127,1,108,76,65,198,225,150,95,0,0,0,0,73,69,78,68,174,66,96,130,0,0};

const char* JaySynthAudioProcessorEditor::led_23_red1_png = (const char*) resource_JaySynthAudioProcessorEditor_led_23_red1_png;
const int JaySynthAudioProcessorEditor::led_23_red1_pngSize = 1556;


//[EndFile] You can add extra defines here...
//[/EndFile]
