diff --git a/CrystalizerEQ/PluginEditor.cpp b/CrystalizerEQ/PluginEditor.cpp index 0eab92e..a0166c6 100644 --- a/CrystalizerEQ/PluginEditor.cpp +++ b/CrystalizerEQ/PluginEditor.cpp @@ -16,34 +16,222 @@ using Colours = DesignSystem::Colours; using Typography = DesignSystem::Typography; using Spacing = DesignSystem::Spacing; using Shape = DesignSystem::Shape; - using Opacity = DesignSystem::Opacity; using Layout = DesignSystem::Layout; +//region setupModeBoxes +void CrystalizerEQAudioProcessorEditor::setupModeBoxes() { + if (auto* choice = dynamic_cast( + audioProcessor.apvts.getParameter("LowBandModes"))) + { + lowBandModeBox.addItemList (choice->choices, 1); + lowBandModeBox.setSelectedItemIndex (choice->getIndex(), juce::dontSendNotification); -//============================================================================== -CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (CrystalizerEQAudioProcessor& p) - : AudioProcessorEditor (&p), audioProcessor (p), spectrumAnalyzer(p.audioFIFO, p) { - // Make sure that before the constructor has finished, you've set the - // editor's size to whatever you need it to be. - setSize (1280, 720); - // these define the parameters of our slider object + lowBandModeAttach = std::make_unique( + audioProcessor.apvts, "LowBandModes", lowBandModeBox); + } - startTimerHz(60); + if (auto* choice = dynamic_cast( + audioProcessor.apvts.getParameter("HighBandModes"))) + { + highBandModeBox.addItemList (choice->choices, 1); + highBandModeBox.setSelectedItemIndex (choice->getIndex(), juce::dontSendNotification); + + highBandModeAttach = std::make_unique( + audioProcessor.apvts, "HighBandModes", highBandModeBox); + } +} +//endregion setupModeBoxes + +//region setupSliders +void CrystalizerEQAudioProcessorEditor::setupSliders() { + auto style = juce::Slider::RotaryHorizontalVerticalDrag; + + for (auto* s : { + &testNoiseSlider, &lowBandFreqSlider, &lowBandSlopeSlider, &lowBandGainSlider, &lowBandQSlider, + + &peak1FreqSlider, &peak1GainSlider, &peak1QSlider, + &peak2FreqSlider, &peak2GainSlider, &peak2QSlider, + &peak3FreqSlider, &peak3GainSlider, &peak3QSlider, + + &highBandFreqSlider, &highBandSlopeSlider, &highBandGainSlider, &highBandQSlider, + + &inputSlider, &outputSlider }) + { + s->setSliderStyle (style); + s->setTextBoxStyle (juce::Slider::TextBoxBelow, true, 70, 18); + s->setColour (juce::Slider::textBoxTextColourId, juce::Colours::black); + + } +} +//endregion setupSliders + +//region setupAttachments +void CrystalizerEQAudioProcessorEditor::setupAttachments() { + testNoiseAttach = std::make_unique(audioProcessor.apvts, "TestNoiseLevel", testNoiseSlider); + + lowBandFreqAttach = std::make_unique(audioProcessor.apvts, "LowBandFreq", lowBandFreqSlider); + lowBandSlopeAttach = std::make_unique(audioProcessor.apvts, "LowBandSlope", lowBandSlopeSlider); + lowBandGainAttach = std::make_unique(audioProcessor.apvts, "LowBandGain", lowBandGainSlider); + lowBandQAttach = std::make_unique(audioProcessor.apvts, "LowBandQ", lowBandQSlider); + lowBandModeAttach = std::make_unique(audioProcessor.apvts, "LowBandModes", lowBandModeBox); + + peak1FreqAttach = std::make_unique(audioProcessor.apvts, "Peak1Freq", peak1FreqSlider); + peak1GainAttach = std::make_unique(audioProcessor.apvts, "Peak1Gain", peak1GainSlider); + peak1QAttach = std::make_unique(audioProcessor.apvts, "Peak1Q", peak1QSlider); + + peak2FreqAttach = std::make_unique(audioProcessor.apvts, "Peak2Freq", peak2FreqSlider); + peak2GainAttach = std::make_unique(audioProcessor.apvts, "Peak2Gain", peak2GainSlider); + peak2QAttach = std::make_unique(audioProcessor.apvts, "Peak2Q", peak2QSlider); + + peak3FreqAttach = std::make_unique(audioProcessor.apvts, "Peak3Freq", peak3FreqSlider); + peak3GainAttach = std::make_unique(audioProcessor.apvts, "Peak3Gain", peak3GainSlider); + peak3QAttach = std::make_unique(audioProcessor.apvts, "Peak3Q", peak3QSlider); + + highBandFreqAttach = std::make_unique(audioProcessor.apvts, "HighBandFreq", highBandFreqSlider); + highBandSlopeAttach = std::make_unique(audioProcessor.apvts, "HighBandSlope", highBandSlopeSlider); + highBandGainAttach = std::make_unique(audioProcessor.apvts, "HighBandGain", highBandGainSlider); + highBandQAttach = std::make_unique(audioProcessor.apvts, "HighBandQ", highBandQSlider); + highBandModeAttach = std::make_unique(audioProcessor.apvts, "HighBandModes", highBandModeBox); + + inputAttach = std::make_unique(audioProcessor.apvts, "InputGain", inputSlider); + outputAttach = std::make_unique(audioProcessor.apvts, "OutputGain", outputSlider); +} +//endregion setupAttachments + +//region setupDisplayNames +void CrystalizerEQAudioProcessorEditor::setupDisplayNames() { + titleLabel.setText("Crystalizer", juce::dontSendNotification); + + testNoiseSlider.setName("TestNoise"); + + lowBandFreqSlider.setName ("LowBand Freq"); + lowBandSlopeSlider.setName ("LowBand Slope"); + lowBandGainSlider.setName ("LowBand Gain"); + lowBandQSlider.setName ("LowBand Q"); + + peak1FreqSlider.setName("Peak1 Freq"); + peak1GainSlider.setName("Peak1 Gain"); + peak1QSlider.setName ("Peak1 Q"); + + peak2FreqSlider.setName("Peak2 Freq"); + peak2GainSlider.setName("Peak2 Gain"); + peak2QSlider.setName ("Peak2 Q"); + + peak3FreqSlider.setName("Peak3 Freq"); + peak3GainSlider.setName("Peak3 Gain"); + peak3QSlider.setName ("Peak3 Q"); + + highBandFreqSlider.setName ("HighBand Freq"); + highBandSlopeSlider.setName ("HighBand Slope"); + highBandGainSlider.setName ("HighBand Gain"); + highBandQSlider.setName ("HighBand Q"); + + inputSlider.setName ("Input"); + outputSlider.setName ("Output"); + + testNoiseSlider.setTextValueSuffix(" Gain"); + + lowBandFreqSlider.setTextValueSuffix (" Hz"); + lowBandSlopeSlider.setTextValueSuffix (" dB/Oct"); + lowBandGainSlider.setTextValueSuffix(" Gain"); + lowBandQSlider.setTextValueSuffix (" Q"); + + peak1FreqSlider.setTextValueSuffix(" Hz"); + peak1GainSlider.setTextValueSuffix(" dB"); + peak1QSlider.setTextValueSuffix(" Q"); + peak1BypassButton.setName("peak1Bypass"); + peak1BypassButton.setButtonText("Low-Mid Bypass"); + + peak2FreqSlider.setTextValueSuffix(" Hz"); + peak2GainSlider.setTextValueSuffix(" dB"); + peak2QSlider.setTextValueSuffix(" Q"); + peak2BypassButton.setName("peak2Bypass"); + peak2BypassButton.setButtonText("Mid Bypass"); + + peak3FreqSlider.setTextValueSuffix(" Hz"); + peak3GainSlider.setTextValueSuffix(" dB"); + peak3QSlider.setTextValueSuffix(" Q"); + peak3BypassButton.setName("peak3Bypass"); + peak3BypassButton.setButtonText("High-Mid Bypass"); + + highBandFreqSlider.setTextValueSuffix (" Hz"); + highBandSlopeSlider.setTextValueSuffix (" dB/Oct"); + highBandGainSlider.setTextValueSuffix(" Gain"); + highBandQSlider.setTextValueSuffix (" Q"); + + inputSlider.setTextValueSuffix(" IN"); + outputSlider.setTextValueSuffix(" OUT"); + + testNoiseButton.setName("TestNoise"); + testNoiseButton.setButtonText("Test Noise"); + + crystalizeButton.setName("CrystalizeButton"); + crystalizeButton.setButtonText("Crystalize"); + + resetButton.setName("ResetButton"); + resetButton.setButtonText("Reset"); + + masterBypassButton.setName("MasterBypass"); + masterBypassButton.setButtonText("Master Bypass"); + + savePresetButton.setName("SavePresetButton"); + savePresetButton.setButtonText("Save Preset"); + + deletePresetButton.setName("DeletePresetButton"); + deletePresetButton.setButtonText("Delete Preset"); +} +//endregion setupDisplayNames + +//region setupToggleButtons +void CrystalizerEQAudioProcessorEditor::setupToggleButtons() { + for (auto* b : {&peak1BypassButton, &peak2BypassButton, &peak3BypassButton, &crystalizeButton, &masterBypassButton}) { + b->onClick = [this, b]() { + juce::String paramID; // nimm juce::String statt std::string + + if (b == &peak1BypassButton) paramID = "Peak1Bypass"; + else if (b == &peak2BypassButton) paramID = "Peak2Bypass"; + else if (b == &peak3BypassButton) paramID = "Peak3Bypass"; + else if (b == &crystalizeButton) paramID = "CrystalizeButton"; + else if (b == &masterBypassButton) paramID = "MasterBypass"; + + else {return; } + + b->setColour(juce::ToggleButton::textColourId, juce::Colours::black); + b->setColour(juce::ToggleButton::tickColourId, juce::Colours::black); + + if (auto* param = audioProcessor.apvts.getParameter(paramID)) + { + const bool isToggled = b->getToggleState(); + + const float target = isToggled ? 1.0f : 0.0f; + + // Nur senden, wenn sich wirklich etwas ändert (Schwelle 0.5f) + if ((param->getValue() >= 0.5f) != isToggled) + { + param->beginChangeGesture(); + param->setValueNotifyingHost(target); + param->endChangeGesture(); + } + } + }; + } +} +//endregion setupToggleButtons + +//region addComponentsToLayout +void CrystalizerEQAudioProcessorEditor::addComponentsToLayout() { addAndMakeVisible(headerBar); headerBar.addAndMakeVisible(titleLabel); - - headerBar.addAndMakeVisible(presetArea); presetArea.addAndMakeVisible(presetBoxLabel); presetArea.addAndMakeVisible(resetButton); presetArea.addAndMakeVisible(presetBox); presetArea.addAndMakeVisible(presetMenuButton); - headerBar.addAndMakeVisible(presetMenu); presetMenu.addAndMakeVisible(presetNameInput); presetMenu.addAndMakeVisible(savePresetButton); @@ -128,14 +316,11 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize globalControlArea.addAndMakeVisible(inputSlider); globalControlArea.addAndMakeVisible(outputSlider); globalControlArea.addAndMakeVisible(masterBypassButton); +} +//endregion addComponentsToLayout - - Spacing::setDensity(Spacing::DensityMode::Wide); - - titleLabel.setText("Crystalizer", juce::dontSendNotification); - - - +//region setupLabels +void CrystalizerEQAudioProcessorEditor::setupLabels() { auto setupLabel = [] (juce::Label& label, const juce::String& text) { label.setText (text, juce::dontSendNotification); @@ -178,242 +363,11 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize setupLabel(inputLabel, "Input"); setupLabel(outputLabel, "Output"); } +} +//endregion setupLabels - - auto presets = audioProcessor.getPresetNamesArray(); - presetBox.addItemList(presets, 1); - presetBox.setSelectedId(1, juce::dontSendNotification); - - presetMenuButton.setName("PresetMenuButton"); - presetMenuButton.setButtonText("Preset Menu"); - presetMenuButton.setColour (juce::ToggleButton::textColourId, juce::Colours::black); - presetMenuButton.setColour(juce::ToggleButton::tickColourId, juce::Colours::black); - presetMenuButton.setToggleState(false, juce::dontSendNotification); - - presetNameInput.setTextToShowWhenEmpty("Preset Name", juce::Colours::grey); - presetNameInput.setJustification(juce::Justification::centred); - presetNameInput.setColour(juce::TextEditor::backgroundColourId, juce::Colours::black); - presetNameInput.setColour(juce::TextEditor::textColourId, juce::Colours::white); - - - - if (auto* choice = dynamic_cast( - audioProcessor.apvts.getParameter("LowBandModes"))) - { - // Items 1-basiert hinzufügen - lowBandModeBox.addItemList (choice->choices, 1); - - // aktuellen Index spiegeln (0-basiert -> setSelectedItemIndex) - lowBandModeBox.setSelectedItemIndex (choice->getIndex(), juce::dontSendNotification); - - // Attachment erst, wenn Items existieren - lowBandModeAttach = std::make_unique( - audioProcessor.apvts, "LowBandModes", lowBandModeBox); - } - - if (auto* choice = dynamic_cast( - audioProcessor.apvts.getParameter("HighBandModes"))) - { - // Items 1-basiert hinzufügen - highBandModeBox.addItemList (choice->choices, 1); - - // aktuellen Index spiegeln (0-basiert -> setSelectedItemIndex) - highBandModeBox.setSelectedItemIndex (choice->getIndex(), juce::dontSendNotification); - - // Attachment erst, wenn Items existieren - highBandModeAttach = std::make_unique( - audioProcessor.apvts, "HighBandModes", highBandModeBox); - } - - - - auto style = juce::Slider::RotaryHorizontalVerticalDrag; - - for (auto* s : { - &testNoiseSlider, &lowBandFreqSlider, &lowBandSlopeSlider, &lowBandGainSlider, &lowBandQSlider, - - &peak1FreqSlider, &peak1GainSlider, &peak1QSlider, - &peak2FreqSlider, &peak2GainSlider, &peak2QSlider, - &peak3FreqSlider, &peak3GainSlider, &peak3QSlider, - - &highBandFreqSlider, &highBandSlopeSlider, &highBandGainSlider, &highBandQSlider, - - &inputSlider, &outputSlider }) - { - s->setSliderStyle (style); - s->setTextBoxStyle (juce::Slider::TextBoxBelow, true, 70, 18); - s->setColour (juce::Slider::textBoxTextColourId, juce::Colours::black); - - } - - - // Attachments verbinden GUI <-> apvts Parameter-IDs - { - testNoiseAttach = std::make_unique(audioProcessor.apvts, "TestNoiseLevel", testNoiseSlider); - - lowBandFreqAttach = std::make_unique(audioProcessor.apvts, "LowBandFreq", lowBandFreqSlider); - lowBandSlopeAttach = std::make_unique(audioProcessor.apvts, "LowBandSlope", lowBandSlopeSlider); - lowBandGainAttach = std::make_unique(audioProcessor.apvts, "LowBandGain", lowBandGainSlider); - lowBandQAttach = std::make_unique(audioProcessor.apvts, "LowBandQ", lowBandQSlider); - lowBandModeAttach = std::make_unique(audioProcessor.apvts, "LowBandModes", lowBandModeBox); - - peak1FreqAttach = std::make_unique(audioProcessor.apvts, "Peak1Freq", peak1FreqSlider); - peak1GainAttach = std::make_unique(audioProcessor.apvts, "Peak1Gain", peak1GainSlider); - peak1QAttach = std::make_unique(audioProcessor.apvts, "Peak1Q", peak1QSlider); - - peak2FreqAttach = std::make_unique(audioProcessor.apvts, "Peak2Freq", peak2FreqSlider); - peak2GainAttach = std::make_unique(audioProcessor.apvts, "Peak2Gain", peak2GainSlider); - peak2QAttach = std::make_unique(audioProcessor.apvts, "Peak2Q", peak2QSlider); - - peak3FreqAttach = std::make_unique(audioProcessor.apvts, "Peak3Freq", peak3FreqSlider); - peak3GainAttach = std::make_unique(audioProcessor.apvts, "Peak3Gain", peak3GainSlider); - peak3QAttach = std::make_unique(audioProcessor.apvts, "Peak3Q", peak3QSlider); - - highBandFreqAttach = std::make_unique(audioProcessor.apvts, "HighBandFreq", highBandFreqSlider); - highBandSlopeAttach = std::make_unique(audioProcessor.apvts, "HighBandSlope", highBandSlopeSlider); - highBandGainAttach = std::make_unique(audioProcessor.apvts, "HighBandGain", highBandGainSlider); - highBandQAttach = std::make_unique(audioProcessor.apvts, "HighBandQ", highBandQSlider); - highBandModeAttach = std::make_unique(audioProcessor.apvts, "HighBandModes", highBandModeBox); - - inputAttach = std::make_unique(audioProcessor.apvts, "InputGain", inputSlider); - outputAttach = std::make_unique(audioProcessor.apvts, "OutputGain", outputSlider); - } - - // Display-Namen - { - testNoiseSlider.setName("TestNoise"); - - lowBandFreqSlider.setName ("LowBand Freq"); - lowBandSlopeSlider.setName ("LowBand Slope"); - lowBandGainSlider.setName ("LowBand Gain"); - lowBandQSlider.setName ("LowBand Q"); - - peak1FreqSlider.setName("Peak1 Freq"); - peak1GainSlider.setName("Peak1 Gain"); - peak1QSlider.setName ("Peak1 Q"); - - peak2FreqSlider.setName("Peak2 Freq"); - peak2GainSlider.setName("Peak2 Gain"); - peak2QSlider.setName ("Peak2 Q"); - - peak3FreqSlider.setName("Peak3 Freq"); - peak3GainSlider.setName("Peak3 Gain"); - peak3QSlider.setName ("Peak3 Q"); - - highBandFreqSlider.setName ("HighBand Freq"); - highBandSlopeSlider.setName ("HighBand Slope"); - highBandGainSlider.setName ("HighBand Gain"); - highBandQSlider.setName ("HighBand Q"); - - inputSlider.setName ("Input"); - outputSlider.setName ("Output"); - - testNoiseSlider.setTextValueSuffix(" Gain"); - - lowBandFreqSlider.setTextValueSuffix (" Hz"); - lowBandSlopeSlider.setTextValueSuffix (" dB/Oct"); - lowBandGainSlider.setTextValueSuffix(" Gain"); - lowBandQSlider.setTextValueSuffix (" Q"); - - peak1FreqSlider.setTextValueSuffix(" Hz"); - peak1GainSlider.setTextValueSuffix(" dB"); - peak1QSlider.setTextValueSuffix(" Q"); - peak1BypassButton.setName("peak1Bypass"); - peak1BypassButton.setButtonText("Low-Mid Bypass"); - - peak2FreqSlider.setTextValueSuffix(" Hz"); - peak2GainSlider.setTextValueSuffix(" dB"); - peak2QSlider.setTextValueSuffix(" Q"); - peak2BypassButton.setName("peak2Bypass"); - peak2BypassButton.setButtonText("Mid Bypass"); - - peak3FreqSlider.setTextValueSuffix(" Hz"); - peak3GainSlider.setTextValueSuffix(" dB"); - peak3QSlider.setTextValueSuffix(" Q"); - peak3BypassButton.setName("peak3Bypass"); - peak3BypassButton.setButtonText("High-Mid Bypass"); - - highBandFreqSlider.setTextValueSuffix (" Hz"); - highBandSlopeSlider.setTextValueSuffix (" dB/Oct"); - highBandGainSlider.setTextValueSuffix(" Gain"); - highBandQSlider.setTextValueSuffix (" Q"); - - inputSlider.setTextValueSuffix(" IN"); - outputSlider.setTextValueSuffix(" OUT"); - - testNoiseButton.setName("TestNoise"); - testNoiseButton.setButtonText("Test Noise"); - - crystalizeButton.setName("CrystalizeButton"); - crystalizeButton.setButtonText("Crystalize"); - - resetButton.setName("ResetButton"); - resetButton.setButtonText("Reset"); - - masterBypassButton.setName("MasterBypass"); - masterBypassButton.setButtonText("Master Bypass"); - - savePresetButton.setName("SavePresetButton"); - savePresetButton.setButtonText("Save Preset"); - - deletePresetButton.setName("DeletePresetButton"); - deletePresetButton.setButtonText("Delete Preset"); - } - - addAndMakeVisible (testNoiseButton); - - testNoiseButton.onClick = [this]() { - if (auto* param = audioProcessor.apvts.getParameter("TestNoiseEnabled")) - { - if (param->getValue() == false) { - param->beginChangeGesture(); - - param->setValueNotifyingHost (1.0f); - - param->endChangeGesture(); - } else { - param->beginChangeGesture(); - - param->setValueNotifyingHost (0.0f); // -> true - - param->endChangeGesture(); - } - } - }; - - - for (auto* b : {&peak1BypassButton, &peak2BypassButton, &peak3BypassButton, &crystalizeButton, &masterBypassButton}) { - b->onClick = [this, b]() { - juce::String paramID; // nimm juce::String statt std::string - - if (b == &peak1BypassButton) paramID = "Peak1Bypass"; - else if (b == &peak2BypassButton) paramID = "Peak2Bypass"; - else if (b == &peak3BypassButton) paramID = "Peak3Bypass"; - else if (b == &crystalizeButton) paramID = "CrystalizeButton"; - else if (b == &masterBypassButton) paramID = "MasterBypass"; - - else {return; } - - b->setColour(juce::ToggleButton::textColourId, juce::Colours::black); - b->setColour(juce::ToggleButton::tickColourId, juce::Colours::black); - - if (auto* param = audioProcessor.apvts.getParameter(paramID)) - { - const bool isToggled = b->getToggleState(); - - const float target = isToggled ? 1.0f : 0.0f; - - // Nur senden, wenn sich wirklich etwas ändert (Schwelle 0.5f) - if ((param->getValue() >= 0.5f) != isToggled) - { - param->beginChangeGesture(); - param->setValueNotifyingHost(target); - param->endChangeGesture(); - } - } - }; - } - +//region setupEventListeners +void CrystalizerEQAudioProcessorEditor::setupEventListeners() { presetMenuButton.onClick = [this]() { bool menuOpened = presetMenuButton.getToggleState(); presetMenu.setVisible(menuOpened); @@ -474,9 +428,65 @@ CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (Crystalize resetAllCheckboxes(); presetBox.setSelectedId(1, juce::dontSendNotification); }; +} +//endregion setupEventListeners + +//region initPresetSystem +void CrystalizerEQAudioProcessorEditor::initPresetSystem() { + auto presets = audioProcessor.getPresetNamesArray(); + presetBox.addItemList(presets, 1); + presetBox.setSelectedId(1, juce::dontSendNotification); + + presetMenuButton.setName("PresetMenuButton"); + presetMenuButton.setButtonText("Preset Menu"); + presetMenuButton.setColour (juce::ToggleButton::textColourId, juce::Colours::black); + presetMenuButton.setColour(juce::ToggleButton::tickColourId, juce::Colours::black); + presetMenuButton.setToggleState(false, juce::dontSendNotification); + + presetNameInput.setTextToShowWhenEmpty("Preset Name", juce::Colours::grey); + presetNameInput.setJustification(juce::Justification::centred); + presetNameInput.setColour(juce::TextEditor::backgroundColourId, juce::Colours::black); + presetNameInput.setColour(juce::TextEditor::textColourId, juce::Colours::white); +} +//endregion initPresetSystem + +//============================================================================== +CrystalizerEQAudioProcessorEditor::CrystalizerEQAudioProcessorEditor (CrystalizerEQAudioProcessor& p) + : AudioProcessorEditor (&p), audioProcessor (p), spectrumAnalyzer(p.audioFIFO, p) { + + setSize (1280, 720); + startTimerHz(60); + addComponentsToLayout(); + setupLabels(); + setupModeBoxes(); + setupSliders(); + setupAttachments(); + setupDisplayNames(); + setupToggleButtons(); + setupEventListeners(); + initPresetSystem(); + addAndMakeVisible (testNoiseButton); + testNoiseButton.onClick = [this]() { + if (auto* param = audioProcessor.apvts.getParameter("TestNoiseEnabled")) + { + if (param->getValue() == false) { + param->beginChangeGesture(); + + param->setValueNotifyingHost (1.0f); + + param->endChangeGesture(); + } else { + param->beginChangeGesture(); + + param->setValueNotifyingHost (0.0f); // -> true + + param->endChangeGesture(); + } + } + }; } @@ -484,15 +494,101 @@ CrystalizerEQAudioProcessorEditor::~CrystalizerEQAudioProcessorEditor() { stopTimer(); }; +//region paintAnalyzer +void CrystalizerEQAudioProcessorEditor::paintAnalyzer(juce::Graphics &g) { + analyzerRect = getLocalArea(&analyzerArea, analyzerArea.getLocalBounds()); + juce::Graphics::ScopedSaveState guard(g); + g.reduceClipRegion(analyzerRect); + + auto r = analyzerRect.toFloat(); + + // Hintergrund des Analyzer-Bereichs + g.setColour(juce::Colours::black); + g.fillRect(r); + + // Grid + g.setColour(juce::Colours::darkgrey.withAlpha(0.6f)); + for (float db = -120.f; db <= 6.f; db += 12.f) + { + const float y = juce::jmap(db, + spectrumAnalyzer.MINDB, spectrumAnalyzer.MAXDB, + r.getBottom(), r.getY()); + g.drawLine(r.getX(), y, r.getRight(), y, 1.f); + } + + // Bars + if (!spectrumAnalyzer.renderValuesDb.empty()) + { + const int n = (int) spectrumAnalyzer.renderValuesDb.size(); + + g.setColour(AXIOM::DesignSystem::Colours::ACCENTCOLOUR); + + juce::Path eqCurve; + + bool hasStart = false; + + const float visibleFloor = spectrumAnalyzer.MINDB; + + for (int k = 0; k < n; ++k) + { + + const float dB = juce::jlimit(spectrumAnalyzer.MINDB, spectrumAnalyzer.MAXDB, + spectrumAnalyzer.renderValuesDb[(size_t) k]); + float yTop = juce::jmap(dB, + spectrumAnalyzer.MINDB, spectrumAnalyzer.MAXDB, + r.getBottom(), r.getY()); + + if (dB <= visibleFloor) { + yTop = r.getBottom(); + DBG ("Test"); + + } + + + float freq = k * spectrumAnalyzer.deltaF; // Frequenz des aktuellen Bins + + if (k == 0) { + freq = 1e-12; + } + + // Frequenz auf log-X-Koordinate (0.0–1.0) mappen + const float normX = std::log(freq / spectrumAnalyzer.MINFREQ) / std::log(spectrumAnalyzer.MAXFREQ / spectrumAnalyzer.MINFREQ); + + // ...und in Pixel umrechnen: + float x = r.getX() + normX * r.getWidth(); + + //TODO: ANSTATT FFTSIZE VERDOPPELN, NUR DIE LINIEN VERDOPPELN -> HIGHER RESOLUTION + + if (!hasStart) { eqCurve.startNewSubPath(x, yTop); hasStart = true; } + else { + eqCurve.lineTo(x, yTop); + } + + + } + g.strokePath(eqCurve, juce::PathStrokeType(1.5f)); + juce::Path area = eqCurve; + area.lineTo(r.getRight(), r.getBottom()); + area.lineTo(r.getX(), r.getBottom()); + area.closeSubPath(); + + g.setColour(AXIOM::DesignSystem::Colours::ACCENTCOLOUR.withAlpha(0.2f));; + g.fillPath(area); + } + + // Rahmen (optional) + g.setColour(juce::Colours::grey); + g.drawRect(analyzerRect); +} +//endregion paintAnalyzer + //============================================================================== void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g) { - // (Our component is opaque, so we must completely fill the background with a solid colour) - // fill the whole window white + g.fillAll (Colours::BACKGROUNDCOLOUR); g.setColour (AXIOM::DesignSystem::Colours::FOREGROUNDCOLOUR); - if constexpr (false) // -> auf false setzen, wenn nicht gebraucht { for (auto* c : getChildren()) // headerBar, mainPanel, footerBar @@ -618,137 +714,49 @@ void CrystalizerEQAudioProcessorEditor::paint (juce::Graphics& g) } - //ANALYZER // VERSTEHEN!!!!!! + paintAnalyzer(g); +} - - - analyzerRect = getLocalArea(&analyzerArea, analyzerArea.getLocalBounds()); - juce::Graphics::ScopedSaveState guard(g); - g.reduceClipRegion(analyzerRect); - - auto r = analyzerRect.toFloat(); - - // Hintergrund des Analyzer-Bereichs - g.setColour(juce::Colours::black); - g.fillRect(r); - - // Grid - g.setColour(juce::Colours::darkgrey.withAlpha(0.6f)); - for (float db = -120.f; db <= 6.f; db += 12.f) - { - const float y = juce::jmap(db, - spectrumAnalyzer.MINDB, spectrumAnalyzer.MAXDB, - r.getBottom(), r.getY()); - g.drawLine(r.getX(), y, r.getRight(), y, 1.f); - } - - // Bars - if (!spectrumAnalyzer.renderValuesDb.empty()) - { - const int n = (int) spectrumAnalyzer.renderValuesDb.size(); - - g.setColour(AXIOM::DesignSystem::Colours::ACCENTCOLOUR); - - juce::Path eqCurve; - - bool hasStart = false; - - const float visibleFloor = spectrumAnalyzer.MINDB; - - for (int k = 0; k < n; ++k) - { - - const float dB = juce::jlimit(spectrumAnalyzer.MINDB, spectrumAnalyzer.MAXDB, - spectrumAnalyzer.renderValuesDb[(size_t) k]); - float yTop = juce::jmap(dB, - spectrumAnalyzer.MINDB, spectrumAnalyzer.MAXDB, - r.getBottom(), r.getY()); - - if (dB <= visibleFloor) { - yTop = r.getBottom(); - DBG ("Test"); - - } - - - float freq = k * spectrumAnalyzer.deltaF; // Frequenz des aktuellen Bins - - if (k == 0) { - freq = 1e-12; - } - - // Frequenz auf log-X-Koordinate (0.0–1.0) mappen - const float normX = std::log(freq / spectrumAnalyzer.MINFREQ) / std::log(spectrumAnalyzer.MAXFREQ / spectrumAnalyzer.MINFREQ); - - // ...und in Pixel umrechnen: - float x = r.getX() + normX * r.getWidth(); - - //TODO: ANSTATT FFTSIZE VERDOPPELN, NUR DIE LINIEN VERDOPPELN -> HIGHER RESOLUTION - - if (!hasStart) { eqCurve.startNewSubPath(x, yTop); hasStart = true; } - else { - eqCurve.lineTo(x, yTop); - } - - - } - g.strokePath(eqCurve, juce::PathStrokeType(1.5f)); - juce::Path area = eqCurve; - area.lineTo(r.getRight(), r.getBottom()); - area.lineTo(r.getX(), r.getBottom()); - area.closeSubPath(); - - g.setColour(AXIOM::DesignSystem::Colours::ACCENTCOLOUR.withAlpha(0.2f));; - g.fillPath(area); - } - - // Rahmen (optional) - g.setColour(juce::Colours::grey); - g.drawRect(analyzerRect); - } - - - - -void CrystalizerEQAudioProcessorEditor::timerCallback() -{ +//region setKnobVisibility +void CrystalizerEQAudioProcessorEditor::setKnobVisibility() { const int lowMode = (int) audioProcessor.apvts - .getRawParameterValue("LowBandModes")->load(); // 0..3 + .getRawParameterValue("LowBandModes")->load(); // 0..3 lowBandFreqSlider.setVisible (lowMode >= 1); lowBandFreqLabel.setVisible (lowMode >= 1); lowBandSlopeSlider.setVisible (lowMode == 1); lowBandSlopeLabel.setVisible (lowMode == 1); -//HIER SLOPE BUTTON IMPLEMENTIEREN lowBandGainSlider.setVisible(lowMode >= 2); lowBandGainLabel .setVisible(lowMode >= 2); lowBandQSlider .setVisible(lowMode >= 1); lowBandQLabel .setVisible(lowMode >= 1); const int highMode = (int) audioProcessor.apvts - .getRawParameterValue("HighBandModes")->load(); // 0..3 + .getRawParameterValue("HighBandModes")->load(); // 0..3 highBandFreqSlider.setVisible (highMode >= 1); highBandFreqLabel.setVisible (highMode >= 1); highBandSlopeSlider.setVisible (highMode == 1); highBandSlopeLabel.setVisible (highMode == 1); - //HIER SLOPE BUTTON IMPLEMENTIEREN highBandGainSlider.setVisible(highMode >= 2); highBandGainLabel .setVisible(highMode >= 2); highBandQSlider .setVisible(highMode >= 1); highBandQLabel .setVisible(highMode >= 1); - // optional: Layout neu berechnen, damit keine Lücke bleibt +} +//endregion setKnobVisibility + +//region timerCallback +void CrystalizerEQAudioProcessorEditor::timerCallback() +{ + setKnobVisibility(); spectrumAnalyzer.processSamples(); repaint(analyzerRect); resized(); - } - +//endregion timerCallback void CrystalizerEQAudioProcessorEditor::resized() { - // This is generally where you'll want to lay out the positions of any - // subcomponents in your editor. Typography::applyToLabel(titleLabel, Typography::Style::Display, 1.f); titleLabel.setColour(juce::Label::textColourId, Colours::ACCENTCOLOUR); @@ -767,6 +775,7 @@ void CrystalizerEQAudioProcessorEditor::resized() } +//region resetAllCheckboxes void CrystalizerEQAudioProcessorEditor::resetAllCheckboxes() { const auto notify = juce::dontSendNotification; masterBypassButton.setToggleState(false, notify); @@ -774,13 +783,10 @@ void CrystalizerEQAudioProcessorEditor::resetAllCheckboxes() { peak1BypassButton.setToggleState(false, notify); peak2BypassButton.setToggleState(false, notify); peak3BypassButton.setToggleState(false, notify); - presetMenuButton.setToggleState(false, notify); - - presetMenu.setVisible(false); - } +//endregion resetAllCheckboxes - +//region scalePluginWindow void CrystalizerEQAudioProcessorEditor::scalePluginWindow(juce::Rectangle area) { if (area.getWidth() < 520) Spacing::setUiScale(Spacing::uiScaleMode::XS); @@ -789,7 +795,9 @@ void CrystalizerEQAudioProcessorEditor::scalePluginWindow(juce::Rectangle a else if (area.getWidth() < 1366) Spacing::setUiScale(Spacing::uiScaleMode::L); else Spacing::setUiScale(Spacing::uiScaleMode::XL); } +//endregion scalePluginWindow +//region setupMainGrid void CrystalizerEQAudioProcessorEditor::setupMainGrid(juce::Rectangle area) { const float headerHeight = static_cast(getHeight()) * 0.1f; const float footerHeight = static_cast(getHeight()) * 0.1f; @@ -804,7 +812,9 @@ void CrystalizerEQAudioProcessorEditor::setupMainGrid(juce::Rectangle area) Layout::grid(area, spec, { &headerBar, &mainPanel, &footerBar }); } +//endregion setupMainGrid +//region setupHeader void CrystalizerEQAudioProcessorEditor::setupHeader() { const auto bounds = headerBar.getLocalBounds(); @@ -864,9 +874,9 @@ void CrystalizerEQAudioProcessorEditor::setupHeader() { } +//endregion setupHeader - - +//region setupBody void CrystalizerEQAudioProcessorEditor::setupBody() { const auto bounds = mainPanel.getLocalBounds(); @@ -921,7 +931,9 @@ void CrystalizerEQAudioProcessorEditor::setupBody() { setupHighBandLayout(); } +//endregion setupBody +//region setupLowBandLayout void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() { const auto bounds = lowFilterArea.getLocalBounds(); const auto areaWidth = static_cast(bounds.getWidth()); @@ -949,6 +961,9 @@ void CrystalizerEQAudioProcessorEditor::setupLowBandLayout() { }); } +//endregion setupLowBandLayout + +//region setupLowMidBandLayout void CrystalizerEQAudioProcessorEditor::setupLowMidBandLayout() { const auto bounds = lowMidFilterArea.getLocalBounds(); const auto areaWidth = static_cast(bounds.getWidth()); @@ -973,6 +988,9 @@ void CrystalizerEQAudioProcessorEditor::setupLowMidBandLayout() { Layout::area(peak1BypassButton, 3, 2, 4, 3) }); } +//endregion setupLowMidBandLayout + +//region setupMidBandLayout void CrystalizerEQAudioProcessorEditor::setupMidBandLayout() { const auto bounds = midFilterArea.getLocalBounds(); const auto areaWidth = static_cast(bounds.getWidth()); @@ -997,6 +1015,9 @@ void CrystalizerEQAudioProcessorEditor::setupMidBandLayout() { Layout::area(peak2BypassButton, 3, 2, 4, 3) }); } +//endregion setupMidBandLayout + +//region setupHighMidBandLayout void CrystalizerEQAudioProcessorEditor::setupHighMidBandLayout() { const auto bounds = highMidFilterArea.getLocalBounds(); const auto areaWidth = static_cast(bounds.getWidth()); @@ -1021,6 +1042,9 @@ void CrystalizerEQAudioProcessorEditor::setupHighMidBandLayout() { Layout::area(peak3BypassButton, 3, 2, 4, 3) }); } +//endregion setupHighMidBandLayout + +//region setupHighBandLayout void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() { const auto bounds = highFilterArea.getLocalBounds(); const auto areaWidth = static_cast(bounds.getWidth()); @@ -1047,8 +1071,9 @@ void CrystalizerEQAudioProcessorEditor::setupHighBandLayout() { Layout::area(highBandSlopeSlider, 3, 3, 4, 4) }); } +//endregion setupHighBandLayout - +//region setupFooter void CrystalizerEQAudioProcessorEditor::setupFooter() { const auto bounds = footerBar.getLocalBounds(); @@ -1087,16 +1112,18 @@ void CrystalizerEQAudioProcessorEditor::setupFooter() { }); } +//endregion setupFooter - - +//region processSamples void SpectrumAnalyzer::processSamples() { auto samples = audioFIFO.sendSamplesToEditor(); getFftFrame(samples); } +//endregion processSamples +//region getFftFrame void SpectrumAnalyzer::getFftFrame(juce::Array& samples) { const int needed = FFTSIZE - fftFrame.size(); @@ -1121,13 +1148,17 @@ void SpectrumAnalyzer::getFftFrame(juce::Array& samples) { applyWindowOnFftFrame(fullFrame); } } +//endregion getFftFrame +//region applyWindowOnFftFrame void SpectrumAnalyzer::applyWindowOnFftFrame(std::vector &fullFrame) { if (fullFrame.size()!= FFTSIZE) return; window.multiplyWithWindowingTable(fullFrame.data(), FFTSIZE); processWindowedFrame(fullFrame); } +//endregion applyWindowOnFftFrame +//region processWindowedFrame void SpectrumAnalyzer::processWindowedFrame(std::vector &windowedFrame) { if (windowedFrame.size() != FFTSIZE || fftData.size() != FFTSIZE * 2) return; fillFftDataFromFrame(windowedFrame); @@ -1138,14 +1169,18 @@ void SpectrumAnalyzer::processWindowedFrame(std::vector &windowedFrame) { renderValuesDb = getRenderValues(); } +//endregion processWindowedFrame +//region fillFftDataFromFrame void SpectrumAnalyzer::fillFftDataFromFrame(std::vector &windowedFrame) { for (int n = 0; n < FFTSIZE; ++n) { fftData[2*n] = windowedFrame[n]; fftData[2*n + 1] = 0.0f; } } +//endregion fillFftDataFromFrame +//region buildMagnitudeSpectrum void SpectrumAnalyzer::buildMagnitudeSpectrum() { for (int k = 0; k < BINS; ++k) { float re = 0.f; @@ -1162,7 +1197,9 @@ void SpectrumAnalyzer::buildMagnitudeSpectrum() { magnitudes[k] = mag; } } +//endregion buildMagnitudeSpectrum +//region convertToDb void SpectrumAnalyzer::convertToDb() { for (int k = 0; k < magnitudes.size(); ++k) { float mag = magnitudes[k]; @@ -1171,13 +1208,17 @@ void SpectrumAnalyzer::convertToDb() { magnitudesDb[k] = dB; } } +//endregion convertToDb +//region applySmoothing void SpectrumAnalyzer::applySmoothing() { applyEMA(); applyFreqSmoothing(); applyPeakHoldAndFalloff(); } +//endregion applySmoothing +//region applyEMA void SpectrumAnalyzer::applyEMA() { for (int k = 0; k < magnitudesDb.size(); ++k) { float smoothedVal = smoothingFactor * magnitudesDb[k] + (1 - smoothingFactor) * emaSmoothedMagnitudesDb[k]; @@ -1185,7 +1226,9 @@ void SpectrumAnalyzer::applyEMA() { } } +//endregion applyEMA +//region applyFreqSmoothing void SpectrumAnalyzer::applyFreqSmoothing() { for (int k = 0; k < BINS; ++k) { @@ -1214,7 +1257,9 @@ void SpectrumAnalyzer::applyFreqSmoothing() { } } +//endregion applyFreqSmoothing +//region applyPeakHoldAndFalloff void SpectrumAnalyzer::applyPeakHoldAndFalloff() { std::vector prevPeak = peakHoldMagnitudesDb; for (int k = 0; k < BINS; ++k) { @@ -1223,11 +1268,14 @@ void SpectrumAnalyzer::applyPeakHoldAndFalloff() { peakHoldMagnitudesDb[k] = std::max(current, prev - FALLOFFRATE * DELTAT); } } +//endregion applyPeakHoldAndFalloff +//region getRenderValues std::vector SpectrumAnalyzer::getRenderValues() { std::vector renderValues = peakHoldMagnitudesDb; return renderValues; } +//endregion getRenderValues diff --git a/CrystalizerEQ/PluginEditor.h b/CrystalizerEQ/PluginEditor.h index 5a4cda0..6cf6f6a 100644 --- a/CrystalizerEQ/PluginEditor.h +++ b/CrystalizerEQ/PluginEditor.h @@ -126,12 +126,17 @@ class CrystalizerEQAudioProcessorEditor : public juce::AudioProcessorEditor, pr { public: + CrystalizerEQAudioProcessorEditor (CrystalizerEQAudioProcessor&); ~CrystalizerEQAudioProcessorEditor() override; + void paintAnalyzer(juce::Graphics &g); + //=================================================================== void timerCallback(); void paint (juce::Graphics&) override; + + void resized() override; void resetAllCheckboxes(); @@ -183,7 +188,24 @@ private: juce::TextEditor presetNameInput; + void setKnobVisibility(); + void setupModeBoxes(); + void setupSliders(); + + void setupAttachments(); + + void setupDisplayNames(); + + void setupToggleButtons(); + + void addComponentsToLayout(); + + void setupLabels(); + + void setupEventListeners(); + + void initPresetSystem(); //SPECRTRUM ANALYZER diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_deps b/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_deps index 720885a..2d3c516 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_deps and b/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_deps differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_log b/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_log index 589dd2b..0534870 100644 --- a/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_log +++ b/CrystalizerEQ/cmake-build-debug-visual-studio/.ninja_log @@ -1,31 +1,31 @@ # ninja log v6 432 697 7828210853694756 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp.obj f36e41d3022e3470 5580 12586 7828210679067275 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_dsp/juce_dsp.cpp.obj 39d5d800f19dc6d0 -6 240 7836183580269391 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -327 447 7828210626527378 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_processors/juce_audio_processors_ara.cpp.obj 7b19d5a02f5dc1e +6 265 7837945860767552 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 469 689 7828210854071140 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp.obj d54f82e8148febf7 368 7251 7828210626941156 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_events/juce_events.cpp.obj 3056a230265f826c -380 460 7828210627062325 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_core/juce_core_CompilationTime.cpp.obj edc53a02ed0841a2 +327 447 7828210626527378 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_processors/juce_audio_processors_ara.cpp.obj 7b19d5a02f5dc1e 386 5578 7828210627124898 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_data_structures/juce_data_structures.cpp.obj 561c667a2c5f1198 +380 460 7828210627062325 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_core/juce_core_CompilationTime.cpp.obj edc53a02ed0841a2 331 454 7828210626577431 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_processors/juce_audio_processors_lv2_libs.cpp.obj 38667c9bc47b25a1 -360 606 7828210626868075 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_graphics/juce_graphics_Sheenbidi.c.obj 77c70d33232e8886 365 432 7828210853508994 CrystalizerEQ_artefacts/JuceLibraryCode/CrystalizerEQ_resources.rc d1a3ba4056995d67 +360 606 7828210626868075 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_graphics/juce_graphics_Sheenbidi.c.obj 77c70d33232e8886 448 8158 7828210627741822 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_basics/juce_audio_basics.cpp.obj f40c0a570733a2c8 374 9765 7828210627003931 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_core/juce_core.cpp.obj 3e25033c5c2fcda8 -242 1419 7830045112447143 build.ninja a6be2c7dedf50871 +338 928 7837944930539373 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e 460 9913 7828210627862191 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_formats/juce_audio_formats.cpp.obj 2df754ec2487daad -267 805 7836183289230887 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e +242 1419 7830045112447143 build.ninja a6be2c7dedf50871 607 11276 7828210629331277 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_devices/juce_audio_devices.cpp.obj 58bf78f608bf2f83 -253 5099 7836183582744053 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 454 12862 7828210627804301 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_utils/juce_audio_utils.cpp.obj f12414597820454e -340 6954 7836156557278279 CMakeFiles/CrystalizerEQ.dir/PluginProcessor.cpp.obj f49ea9ae57418054 -337 13065 7828210626632439 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_gui_extra/juce_gui_extra.cpp.obj 45d8186a1b2f6524 -444 689 7828210853819193 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_ARA.cpp.obj 4ff2f2829cb109de +287 5949 7837945863569425 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 +282 6080 7837945863517766 CMakeFiles/CrystalizerEQ.dir/PluginProcessor.cpp.obj f49ea9ae57418054 438 697 7828210853754469 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX_utils.cpp.obj 2797a864e825dc34 +444 689 7828210853819193 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_ARA.cpp.obj 4ff2f2829cb109de +337 13065 7828210626632439 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_gui_extra/juce_gui_extra.cpp.obj 45d8186a1b2f6524 322 14369 7828210626482370 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_audio_processors/juce_audio_processors.cpp.obj bdd44e5c9965d536 348 16270 7828210626744013 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_graphics/juce_graphics.cpp.obj 17c70bd7835a67e4 +6080 6704 7837945921498516 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df 354 17057 7828210626798669 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_graphics/juce_graphics_Harfbuzz.cpp.obj babac8068a5cbb35 -5100 5720 7836183631211217 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df 343 21749 7828210626689029 CMakeFiles/CrystalizerEQ.dir/JUCE/modules/juce_gui_basics/juce_gui_basics.cpp.obj eff617cd2d5e1485 365 432 7828210853508994 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/JuceLibraryCode/CrystalizerEQ_resources.rc d1a3ba4056995d67 478 648 7828210854156157 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp.obj 94a6138c6437320c @@ -34,54 +34,11 @@ 493 795 7828210854316185 CMakeFiles/CrystalizerEQ_rc_lib.dir/CrystalizerEQ_artefacts/JuceLibraryCode/CrystalizerEQ_resources.rc.res 6234bb35ee153fd0 458 5782 7828210853953251 CMakeFiles/CrystalizerEQ_Standalone.dir/JUCE/modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp.obj 87ce7c25ac4a4f5a 293 1334 7829211846304973 CMakeFiles/CrystalizerEQ.dir/JuceLibraryCode/BinaryData.cpp.obj 98c4237ee105319c -7 245 7836183638143545 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -261 768 7836183640689176 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -6 247 7836183853238534 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -260 5264 7836183855790987 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -5264 5851 7836183905828428 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -7 244 7836183912443539 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -262 769 7836183915000248 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -7 262 7836184128140358 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -275 5517 7836184130824663 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -5517 6119 7836184183248310 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -7 257 7836184189913032 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -274 807 7836184192583847 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -7 266 7836186612198576 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -280 5978 7836186614934794 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -5978 6602 7836186671915786 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -7 252 7836186678928032 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -270 773 7836186681558414 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -6 274 7836187791118767 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -290 6137 7836187793960140 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -6137 6770 7836187852428092 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -7 260 7836187859415217 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -277 799 7836187862114227 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -23 338 7836200622273055 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -359 7189 7836200625639295 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -8 324 7836200802854475 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -352 6953 7836200806289169 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -345 7118 7836200806229282 CMakeFiles/CrystalizerEQ.dir/PluginProcessor.cpp.obj f49ea9ae57418054 -7118 8291 7836200873953217 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -8 336 7836200886636510 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -360 1838 7836200890156678 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -7 310 7836202593218581 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -328 5475 7836202596423842 CMakeFiles/CrystalizerEQ.dir/PluginProcessor.cpp.obj f49ea9ae57418054 -5475 6126 7836202647901292 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -7 261 7836202655195093 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -278 908 7836202657904542 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -7 269 7836203577333210 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -288 5871 7836203580147553 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -283 5932 7836203580097153 CMakeFiles/CrystalizerEQ.dir/PluginProcessor.cpp.obj f49ea9ae57418054 -5932 6556 7836203636583908 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -6 245 7836203643587912 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -262 819 7836203646149633 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -6 250 7836206120014918 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -263 5227 7836206122583884 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -5228 5869 7836206172227648 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -7 277 7836206179420975 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -296 847 7836206182309479 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e -6 266 7836207557650876 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -281 5948 7836207560399173 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 -5949 6604 7836207617081804 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df -6 268 7836207624426437 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 -286 817 7836207627227690 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e +7 248 7837945928452763 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 +263 885 7837945931012934 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e +6 240 7837954957976234 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 +259 5860 7837954960510016 CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj 44b08ed233e258e6 +255 5875 7837954960470004 CMakeFiles/CrystalizerEQ.dir/PluginProcessor.cpp.obj f49ea9ae57418054 +5875 6510 7837955016672923 CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib ab4ea4347209d0df +6 248 7837955023837529 C:/Users/deppe/Desktop/Projects/main_crystalizereq/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/cmake.verify_globs 154243cd2d50ef70 +264 799 7837955026417374 CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe f99e08f773a02d9e diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/CrystalizerEQ.pdb b/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/CrystalizerEQ.pdb index 055fdc1..cf45cc7 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/CrystalizerEQ.pdb and b/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/CrystalizerEQ.pdb differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj b/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj index 097aece..974306f 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj and b/CrystalizerEQ/cmake-build-debug-visual-studio/CMakeFiles/CrystalizerEQ.dir/PluginEditor.cpp.obj differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib index 0755aba..d94542d 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib and b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/CrystalizerEQ_SharedCode.lib differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe index 1cd0627..efa8233 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe and b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.exe differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.ilk b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.ilk index 70c48cb..bdc6248 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.ilk and b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.ilk differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.pdb b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.pdb index ab1fb13..10a31b2 100644 Binary files a/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.pdb and b/CrystalizerEQ/cmake-build-debug-visual-studio/CrystalizerEQ_artefacts/Debug/Standalone/CrystalizerEQ.pdb differ diff --git a/CrystalizerEQ/cmake-build-debug-visual-studio/Testing/Temporary/LastTest.log b/CrystalizerEQ/cmake-build-debug-visual-studio/Testing/Temporary/LastTest.log index 8456bc9..a117c0e 100644 --- a/CrystalizerEQ/cmake-build-debug-visual-studio/Testing/Temporary/LastTest.log +++ b/CrystalizerEQ/cmake-build-debug-visual-studio/Testing/Temporary/LastTest.log @@ -1,3 +1,3 @@ -Start testing: Oct 31 14:32 Mitteleuropäische Zeit +Start testing: Nov 02 15:05 Mitteleuropäische Zeit ---------------------------------------------------------- -End testing: Oct 31 14:32 Mitteleuropäische Zeit +End testing: Nov 02 15:05 Mitteleuropäische Zeit