From 92383753b001d3018c5d49a220e56065f345e300 Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 25 Feb 2021 12:22:00 +0100 Subject: [PATCH 1/8] Update PluginProcessor.cpp Program Change support --- Source/PluginProcessor.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 230d669..6a520ad 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -268,6 +268,18 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter { synth.allSoundOff(); } + char* midi_data = (char*)midiMsg->getRawData(); + int const status = midi_data[0] & 0xF0; + if (status == 0xC0) + { + { + //const ScopedUnlock unlocker(criticalSection); + // TODO - must issue setProgram + setCurrentProgram(midi_data[1]); + } + //sendChangeMessage(); + //updateHostDisplay(); + } } } @@ -381,7 +393,7 @@ void ObxdAudioProcessor::setStateInformation(const void* data, int sizeInBytes) if (xmlState) { XmlElement* xprogs = xmlState->getFirstChildElement(); - if (xprogs->hasTagName(S("programs"))) + if (xprogs && xprogs->hasTagName(S("programs"))) { int i = 0; forEachXmlChildElement(*xprogs, e) From 576e6f52bcb2a292e39fbc8d49f5e09b34627b7e Mon Sep 17 00:00:00 2001 From: George Reales Date: Tue, 30 Mar 2021 18:27:29 +0200 Subject: [PATCH 2/8] 2.3 update Preset management. Dark background menu. JUCE 6.0.8 update. --- Source/Components/SetPresetNameWindow.cpp | 206 +++++++++++++++++ Source/Components/SetPresetNameWindow.h | 75 +++++++ Source/Images/main.psd | Bin 0 -> 401632 bytes Source/PluginEditor.cpp | 260 +++++++++++++++++++++- Source/PluginEditor.h | 26 ++- Source/PluginProcessor.cpp | 196 ++++++++++++---- Source/PluginProcessor.h | 22 +- 7 files changed, 735 insertions(+), 50 deletions(-) create mode 100644 Source/Components/SetPresetNameWindow.cpp create mode 100644 Source/Components/SetPresetNameWindow.h create mode 100644 Source/Images/main.psd diff --git a/Source/Components/SetPresetNameWindow.cpp b/Source/Components/SetPresetNameWindow.cpp new file mode 100644 index 0000000..7283cc4 --- /dev/null +++ b/Source/Components/SetPresetNameWindow.cpp @@ -0,0 +1,206 @@ +/* + ============================================================================== + + This is an automatically generated GUI class created by the Projucer! + + 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 Projucer version: 6.0.8 + + ------------------------------------------------------------------------------ + + The Projucer is part of the JUCE library. + Copyright (c) 2020 - Raw Material Software Limited. + + ============================================================================== +*/ + +//[Headers] You can add your own extra header files here... +//[/Headers] + +#include "SetPresetNameWindow.h" + + +//[MiscUserDefs] You can add your own user definitions and misc code here... +//[/MiscUserDefs] + +//============================================================================== +SetPresetNameWindow::SetPresetNameWindow () +{ + //[Constructor_pre] You can add your own custom stuff here.. + //[/Constructor_pre] + + nameTextEditor.reset (new juce::TextEditor ("nameTextEditor")); + addAndMakeVisible (nameTextEditor.get()); + nameTextEditor->setMultiLine (false); + nameTextEditor->setReturnKeyStartsNewLine (false); + nameTextEditor->setReadOnly (false); + nameTextEditor->setScrollbarsShown (true); + nameTextEditor->setCaretVisible (true); + nameTextEditor->setPopupMenuEnabled (false); + nameTextEditor->setColour (juce::TextEditor::backgroundColourId, juce::Colours::black); + nameTextEditor->setColour (juce::CaretComponent::caretColourId, juce::Colours::white); + nameTextEditor->setText (juce::String()); + + cancel.reset (new juce::TextButton ("cancel")); + addAndMakeVisible (cancel.get()); + cancel->setButtonText (TRANS("Cancel")); + cancel->addListener (this); + cancel->setColour (juce::TextButton::buttonColourId, juce::Colours::black); + + Ok.reset (new juce::TextButton ("Ok")); + addAndMakeVisible (Ok.get()); + Ok->setButtonText (TRANS("OK")); + Ok->addListener (this); + Ok->setColour (juce::TextButton::buttonColourId, juce::Colours::black); + + + //[UserPreSize] + cancel->setColour (juce::ComboBox::ColourIds::outlineColourId, juce::Colours::white); + Ok->setColour (juce::ComboBox::ColourIds::outlineColourId, juce::Colours::white); + //[/UserPreSize] + + setSize (300, 150); + + + //[Constructor] You can add your own custom stuff here.. + //[/Constructor] +} + +SetPresetNameWindow::~SetPresetNameWindow() +{ + //[Destructor_pre]. You can add your own custom destruction code here.. + //[/Destructor_pre] + + nameTextEditor = nullptr; + cancel = nullptr; + Ok = nullptr; + + + //[Destructor]. You can add your own custom destruction code here.. + //[/Destructor] +} + +//============================================================================== +void SetPresetNameWindow::paint (juce::Graphics& g) +{ + //[UserPrePaint] Add your own custom painting code here.. + //[/UserPrePaint] + + g.fillAll (juce::Colours::black); + + { + int x = 0, y = proportionOfHeight (0.0000f), width = proportionOfWidth (1.0000f), height = proportionOfHeight (1.0000f); + juce::Colour fillColour = juce::Colours::black; + juce::Colour strokeColour = juce::Colour (0xff666666); + //[UserPaintCustomArguments] Customize the painting arguments here.. + //[/UserPaintCustomArguments] + g.setColour (fillColour); + g.fillRect (x, y, width, height); + g.setColour (strokeColour); + g.drawRect (x, y, width, height, 1); + + } + + { + int x = proportionOfWidth (0.0000f), y = proportionOfHeight (0.1000f), width = proportionOfWidth (1.0000f), height = proportionOfHeight (0.2000f); + juce::String text (TRANS("Preset Name")); + juce::Colour fillColour = juce::Colours::white; + //[UserPaintCustomArguments] Customize the painting arguments here.. + //[/UserPaintCustomArguments] + g.setColour (fillColour); + g.setFont (juce::Font (15.00f, juce::Font::plain).withTypefaceStyle ("Regular")); + g.drawText (text, x, y, width, height, + juce::Justification::centred, true); + } + + //[UserPaint] Add your own custom painting code here.. + //[/UserPaint] +} + +void SetPresetNameWindow::resized() +{ + //[UserPreResize] Add your own custom resize code here.. + //[/UserPreResize] + + nameTextEditor->setBounds (proportionOfWidth (0.1500f), proportionOfHeight (0.3467f), proportionOfWidth (0.7000f), proportionOfHeight (0.1733f)); + cancel->setBounds (proportionOfWidth (0.2000f), proportionOfHeight (0.7000f), proportionOfWidth (0.2500f), proportionOfHeight (0.1600f)); + Ok->setBounds (proportionOfWidth (0.5500f), proportionOfHeight (0.7000f), proportionOfWidth (0.2500f), proportionOfHeight (0.1600f)); + //[UserResized] Add your own custom resize handling here.. + //[/UserResized] +} + +void SetPresetNameWindow::buttonClicked (juce::Button* buttonThatWasClicked) +{ + //[UserbuttonClicked_Pre] + //[/UserbuttonClicked_Pre] + + if (buttonThatWasClicked == cancel.get()) + { + //[UserButtonCode_cancel] -- add your button handler code here.. + callback(0, nameTextEditor->getText()); + //[/UserButtonCode_cancel] + } + else if (buttonThatWasClicked == Ok.get()) + { + //[UserButtonCode_Ok] -- add your button handler code here.. + callback(1, nameTextEditor->getText()); + //[/UserButtonCode_Ok] + } + + //[UserbuttonClicked_Post] + //[/UserbuttonClicked_Post] +} + + + +//[MiscUserCode] You can add your own definitions of your custom methods or any other code here... +void SetPresetNameWindow::grabTextEditorFocus() +{ + nameTextEditor->grabKeyboardFocus(); +}; +//[/MiscUserCode] + + +//============================================================================== +#if 0 +/* -- Projucer information section -- + + This is where the Projucer stores the metadata that describe this GUI layout, so + make changes in here at your peril! + +BEGIN_JUCER_METADATA + + + + + + + + + + + +END_JUCER_METADATA +*/ +#endif + + +//[EndFile] You can add extra defines here... +//[/EndFile] + diff --git a/Source/Components/SetPresetNameWindow.h b/Source/Components/SetPresetNameWindow.h new file mode 100644 index 0000000..6478180 --- /dev/null +++ b/Source/Components/SetPresetNameWindow.h @@ -0,0 +1,75 @@ +/* + ============================================================================== + + This is an automatically generated GUI class created by the Projucer! + + 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 Projucer version: 6.0.8 + + ------------------------------------------------------------------------------ + + The Projucer is part of the JUCE library. + Copyright (c) 2020 - Raw Material Software Limited. + + ============================================================================== +*/ + +#pragma once + +//[Headers] -- You can add your own extra header files here -- +#include +//[/Headers] + + + +//============================================================================== +/** + //[Comments] + An auto-generated component, created by the Projucer. + + Describe your class and how it works here! + //[/Comments] +*/ +class SetPresetNameWindow : public juce::Component, + public juce::Button::Listener +{ +public: + //============================================================================== + SetPresetNameWindow (); + ~SetPresetNameWindow() override; + + //============================================================================== + //[UserMethods] -- You can add your own custom methods in this section. + std::function callback; + void setText(const String &txt){ + nameTextEditor->setText(txt); + } + void grabTextEditorFocus(); + //[/UserMethods] + + void paint (juce::Graphics& g) override; + void resized() override; + void buttonClicked (juce::Button* buttonThatWasClicked) override; + + + +private: + //[UserVariables] -- You can add your own custom variables in this section. + //[/UserVariables] + + //============================================================================== + std::unique_ptr nameTextEditor; + std::unique_ptr cancel; + std::unique_ptr Ok; + + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SetPresetNameWindow) +}; + +//[EndFile] You can add extra defines here... +//[/EndFile] + diff --git a/Source/Images/main.psd b/Source/Images/main.psd new file mode 100644 index 0000000000000000000000000000000000000000..c7b831ee831ec4da0764ca9f239641ee9d202166 GIT binary patch literal 401632 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 nH!AmAsXvvoN8?YB(processor.getActiveEditor())) + { + + auto w = proportionOfWidth(0.25f); + auto h = proportionOfHeight(0.3f); + auto x = proportionOfWidth(0.5f) - (w / 2); + auto y = wrapper->getY(); + + if (setPresetNameWindow != nullptr) + { + y += proportionOfHeight(0.15f); + setPresetNameWindow->setBounds(x, y, w, h); + } + } + } +} void ObxdAudioProcessorEditor::loadSkin (ObxdAudioProcessor& ownerFilter) { knobAttachments.clear(); @@ -377,13 +402,64 @@ void ObxdAudioProcessorEditor::rebuildComponents (ObxdAudioProcessor& ownerFilte void ObxdAudioProcessorEditor::createMenu () { + popupMenus.clear(); PopupMenu* menu = new PopupMenu(); PopupMenu progMenu; PopupMenu bankMenu; PopupMenu skinMenu; - + PopupMenu fileMenu; skins = processor.getSkinFiles(); banks = processor.getBankFiles(); + { + + fileMenu.addItem(static_cast(MenuAction::ImportPreset), + "Import Preset...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::ImportBank), + "Import Bank...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::ExportPreset), + "Export Preset...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::ExportBank), + "Export Bank...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::SavePreset), + "Save Preset...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::RenamePreset), + "Rename Preset...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::NewPreset), + "New Preset...", + true,//enableNewPresetOption, + false); + + fileMenu.addItem(static_cast(MenuAction::DeletePreset), + "Delete Preset...", + true, + false); + + /* + fileMenu.addItem(static_cast(MenuAction::DeleteBank), + "Delete Bank...", + true, + false); + */ + menu->addSubMenu("File", fileMenu); + } { for (int i = 0; i < processor.getNumPrograms(); ++i) @@ -463,8 +539,180 @@ void ObxdAudioProcessorEditor::resultFromMenu (const Point pos) clean(); loadSkin (processor); } + else if (result < progStart){ + MenuActionCallback(result); + } } +void ObxdAudioProcessorEditor::MenuActionCallback(int action){ + + + if (action == MenuAction::ImportBank) + { + fileChooser = std::make_unique("Import Bank (*.fxb)", juce::File(), "*.fxb", true); + + if (fileChooser->browseForFileToOpen()) { + File result = fileChooser->getResult(); + auto name = result.getFileName().replace("%20", " "); + auto file = processor.getBanksFolder().getChildFile(name); + + if (result == file || result.copyFileTo(file)){ + processor.loadFromFXBFile(file); + processor.scanAndUpdateBanks(); + createMenu(); + } + } + }; + + if (action == MenuAction::ExportBank) + { + auto file = processor.getDocumentFolder().getChildFile("Banks"); + FileChooser myChooser ("Export Bank (*.fxb)", file, "*.fxb", true); + if(myChooser.browseForFileToSave(true)) + { + File result = myChooser.getResult(); + + String temp = result.getFullPathName(); + if (!temp.endsWith(".fxb")) { + temp += ".fxb"; + } + processor.saveBank(File(temp)); + + } + }; + + if (action == MenuAction::DeleteBank) + { + if(NativeMessageBox::showOkCancelBox(AlertWindow::NoIcon, "Delete Bank", "Delete current bank: " + processor.currentBank + "?")){ + processor.deleteBank(); + } + } + + + if (action == MenuAction::SavePreset) + { + auto presetName = processor.currentPreset; + if (presetName.isEmpty() ) + { + processor.saveBank(); + return; + } + processor.savePreset(); + processor.saveBank(); + } + + if (action == MenuAction::NewPreset) + { + setPresetNameWindow = std::make_unique(); + //preventBackgroundClick(); + addAndMakeVisible(setPresetNameWindow.get()); + resized(); + + auto callback = [this](int i, juce::String name) + { + if (i) + { + if (name.isNotEmpty()) + { + processor.newPreset(name); + createMenu(); + } + } + + setPresetNameWindow.reset(); + //preventBackgroundClickComponent.reset(); + }; + + setPresetNameWindow->callback = callback; + setPresetNameWindow->grabTextEditorFocus(); + + return; + } + + if (action == MenuAction::RenamePreset) + { + setPresetNameWindow = std::make_unique(); + //preventBackgroundClick(); + setPresetNameWindow->setText(processor.getProgramName(processor.getCurrentProgram())); + addAndMakeVisible(setPresetNameWindow.get()); + resized(); + + auto callback = [this](int i, juce::String name) + { + if (i) + { + if (name.isNotEmpty()) + { + processor.changePresetName(name); + createMenu(); + } + } + + setPresetNameWindow.reset(); + //preventBackgroundClickComponent.reset(); + }; + + setPresetNameWindow->callback = callback; + setPresetNameWindow->grabTextEditorFocus(); + + return; + } + + if (action == MenuAction::DeletePreset) + { + if(NativeMessageBox::showOkCancelBox(AlertWindow::NoIcon, "Delete Preset", "Delete current preset " + processor.currentPreset + "?")){ + processor.deletePreset(); + createMenu(); + } + return; + } + + + if (action == MenuAction::ImportPreset) + { + DBG("Import Preset"); + fileChooser = std::make_unique("Import Preset (*.fxp)", juce::File(), "*.fxp", true); + + if (fileChooser->browseForFileToOpen()) { + File result = fileChooser->getResult(); + //auto name = result.getFileName().replace("%20", " "); + //auto file = processor.getPresetsFolder().getChildFile(name); + DBG("Import Preset: " << result.getFileName()); + //if (result == file || result.copyFileTo(file)){ + processor.loadPreset(result); + createMenu(); + //} + } + }; + + if (action == MenuAction::ExportPreset) + { + + auto file = processor.getPresetsFolder(); + FileChooser myChooser ("Export Preset (*.fxp)", file, "*.fxp", true); + if(myChooser.browseForFileToSave(true)) + { + File result = myChooser.getResult(); + + String temp = result.getFullPathName(); + if (!temp.endsWith(".fxp")) { + temp += ".fxp"; + } + processor.savePreset(File(temp)); + + } + }; + +} + + + +void ObxdAudioProcessorEditor::deleteBank() +{ +} + + + void ObxdAudioProcessorEditor::nextProgram() { int cur = processor.getCurrentProgram() + 1; if (cur == processor.getNumPrograms()) { diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index 586ee8c..7d63dbd 100755 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -17,6 +17,7 @@ #include "Gui/Knob.h" #include "Gui/TooglableButton.h" #include "Gui/ButtonList.h" +#include "Components/SetPresetNameWindow.h" enum KeyPressCommandIDs { @@ -26,6 +27,23 @@ enum KeyPressCommandIDs buttonPadPrevProgram, }; + +enum MenuAction +{ + Cancel = 0, + ToggleMidiKeyboard, + ImportPreset, + ImportBank, + ExportBank, + ExportPreset, + SavePreset, + NewPreset, + RenamePreset, + DeletePreset, + DeleteBank, + ShowBanks, + LoadBank // LoadBank must be the last enum value +}; //============================================================================== /** */ @@ -121,6 +139,11 @@ public: void nextProgram(); void prevProgram(); + + void MenuActionCallback(int action); + void deleteBank(); + + void resized() override; private: Knob* addKnob (int x, int y, int d, ObxdAudioProcessor& filter, int parameter, String name, float defval); void placeLabel (int x, int y, String text); @@ -227,7 +250,8 @@ private: int skinStart; Array skins; Array banks; - + std::unique_ptr setPresetNameWindow; + std::unique_ptr fileChooser; // Command manager ApplicationCommandManager commandManager; }; diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 6a520ad..b5d8e29 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -63,7 +63,7 @@ ObxdAudioProcessor::ObxdAudioProcessor() lastUsedParameter = 0; synth.setSampleRate (44100); - + PropertiesFile::Options options; options.applicationName = JucePlugin_Name; options.storageFormat = PropertiesFile::storeAsXML; @@ -225,33 +225,6 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter { synth.procModWheel (midiMsg->getControllerValue() / 127.0f); } - if (midiMsg->isController()) - { - lastMovedController = midiMsg->getControllerNumber(); - - if (programs.currentProgramPtr->values[MIDILEARN] > 0.5f){ - midiControlledParamSet = true; - bindings[lastMovedController] = lastUsedParameter; - setEngineParameterValue (MIDILEARN, 0, true); - lastMovedController = 0; - lastUsedParameter = 0; - midiControlledParamSet = false; - } - - if (bindings[lastMovedController] > 0) - { - midiControlledParamSet = true; - setEngineParameterValue (bindings[lastMovedController], - midiMsg->getControllerValue() / 127.0f, true); - - setEngineParameterValue (MIDILEARN, 0, true); - lastMovedController = 0; - lastUsedParameter = 0; - - midiControlledParamSet = false; - } - - } if(midiMsg->isSustainPedalOn()) { synth.sustainOn(); @@ -267,20 +240,39 @@ inline void ObxdAudioProcessor::processMidiPerSample (MidiBuffer::Iterator* iter if(midiMsg->isAllSoundOff()) { synth.allSoundOff(); - } - char* midi_data = (char*)midiMsg->getRawData(); - int const status = midi_data[0] & 0xF0; - if (status == 0xC0) - { - { - //const ScopedUnlock unlocker(criticalSection); - // TODO - must issue setProgram - setCurrentProgram(midi_data[1]); - } - //sendChangeMessage(); - //updateHostDisplay(); } + + DBG(" Message: " << midiMsg->getChannel() << " "<getRawData()[0] << " "<< midiMsg->getRawData()[1] << " "<< midiMsg->getRawData()[2]); + + if (midiMsg->isProgramChange()){ // xC0 + setCurrentProgram(midiMsg->getProgramChangeNumber()); + + } else + if (midiMsg->isController()) // xB0 + { + lastMovedController = midiMsg->getControllerNumber(); + if (programs.currentProgramPtr->values[MIDILEARN] > 0.5f){ + midiControlledParamSet = true; + bindings[lastMovedController] = lastUsedParameter; + setEngineParameterValue (MIDILEARN, 0, true); + lastMovedController = 0; + lastUsedParameter = 0; + midiControlledParamSet = false; + } + if (bindings[lastMovedController] > 0) + { + midiControlledParamSet = true; + setEngineParameterValue (bindings[lastMovedController], + midiMsg->getControllerValue() / 127.0f, true); + + setEngineParameterValue (MIDILEARN, 0, true); + lastMovedController = 0; + lastUsedParameter = 0; + + midiControlledParamSet = false; + } + } } } @@ -469,6 +461,119 @@ void ObxdAudioProcessor::setCurrentProgramStateInformation(const void* data, in } //============================================================================== +bool ObxdAudioProcessor::deleteBank() { + currentBankFile.deleteFile(); + scanAndUpdateBanks(); + if (bankFiles.size() > 0) + { + loadFromFXBFile (bankFiles[0]); + } +} + +void ObxdAudioProcessor::saveBank() { + saveFXBFile(currentBankFile); +} + +bool ObxdAudioProcessor::loadPreset(const File& fxpFile) { + loadFromFXBFile(fxpFile); + currentPreset = fxpFile.getFileName(); + currentPresetFile = fxpFile; +} + +bool ObxdAudioProcessor::saveFXPFile(const File& fxpFile){ + //auto xml = std::unique_ptr(new juce::XmlElement("")); + juce::MemoryBlock m, memoryBlock; + getCurrentProgramStateInformation(m); + { + memoryBlock.reset(); + auto totalLen = sizeof (fxProgramSet) + m.getSize() - 8; + memoryBlock.setSize (totalLen, true); + + auto set = static_cast(memoryBlock.getData()); + set->chunkMagic = fxbName ("CcnK"); + set->byteSize = 0; + set->fxMagic = fxbName ("FPCh"); + set->version = fxbSwap (fxbVersionNum); + set->fxID = fxbName ("Obxd"); + set->fxVersion = fxbSwap (fxbVersionNum); + set->numPrograms = fxbSwap (getNumPrograms()); + programs.currentProgramPtr->name.copyToUTF8(set->name, 28); + set->chunkSize = fxbSwap (static_cast(m.getSize())); + + m.copyTo (set->chunk, 0, m.getSize()); + + fxpFile.replaceWithData(memoryBlock.getData(), memoryBlock.getSize()); + } +} + +bool ObxdAudioProcessor::savePreset(const File& fxpFile) { + saveFXPFile(fxpFile); + currentPreset = fxpFile.getFileName(); + currentPresetFile = fxpFile; +} + +void ObxdAudioProcessor::changePresetName(const String &name){ + programs.currentProgramPtr->name = name; + //savePreset(); + saveBank(); +} + +void ObxdAudioProcessor::deletePreset(){ + programs.currentProgramPtr->setDefaultValues(); + programs.currentProgramPtr->name = "Default"; + saveBank(); +} + +void ObxdAudioProcessor::newPreset(const String &name) { + for (int i = 0; i < PROGRAMCOUNT; ++i) + { + if (programs.programs[i].name == "Default"){ + setCurrentProgram(i); + break; + } + } + //savePreset(); + saveBank(); +} + +void ObxdAudioProcessor::savePreset() { + savePreset(currentPresetFile); + +} + +bool ObxdAudioProcessor::saveBank(const File& fxbFile){ + saveFXBFile(fxbFile); + currentBankFile = fxbFile; +} + +bool ObxdAudioProcessor::saveFXBFile(const File& fxbFile) { + //auto xml = std::unique_ptr(new juce::XmlElement("")); + juce::MemoryBlock m, memoryBlock; + getStateInformation(m); + + { + memoryBlock.reset(); + auto totalLen = sizeof (fxChunkSet) + m.getSize() - 8; + memoryBlock.setSize (totalLen, true); + + auto set = static_cast( memoryBlock.getData()); + set->chunkMagic = fxbName ("CcnK"); + set->byteSize = 0; + set->fxMagic = fxbName ("FBCh"); + set->version = fxbSwap (fxbVersionNum); + set->fxID = fxbName ("Obxd"); + set->fxVersion = fxbSwap (fxbVersionNum); + set->numPrograms = fxbSwap (getNumPrograms()); + set->chunkSize = fxbSwap (static_cast(m.getSize())); + + m.copyTo (set->chunk, 0, m.getSize()); + fxbFile.replaceWithData(memoryBlock.getData(), memoryBlock.getSize()); + } + + + return true; +} + bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) { MemoryBlock mb; @@ -563,7 +668,7 @@ bool ObxdAudioProcessor::loadFromFXBFile(const File& fxbFile) } currentBank = fxbFile.getFileName(); - + currentBankFile = fxbFile; updateHostDisplay(); return true; @@ -588,13 +693,14 @@ bool ObxdAudioProcessor::restoreProgramSettings(const fxProgram* const prog) //============================================================================== void ObxdAudioProcessor::scanAndUpdateBanks() { - bankFiles.clearQuick(); + bankFiles.clear(); DirectoryIterator it (getBanksFolder(), false, "*.fxb", File::findFiles); while (it.next()) { bankFiles.addUsingDefaultSort (it.getFile()); + DBG("Scan Banks: " << it.getFile().getFullPathName()); } } @@ -650,6 +756,11 @@ File ObxdAudioProcessor::getBanksFolder() const return getDocumentFolder().getChildFile("Banks"); } +File ObxdAudioProcessor::getPresetsFolder() const +{ + return getDocumentFolder().getChildFile("Presets"); +} + File ObxdAudioProcessor::getCurrentSkinFolder() const { return getSkinFolder().getChildFile(currentSkin); @@ -783,6 +894,7 @@ void ObxdAudioProcessor::setEngineParameterValue (int index, float newValue, boo apvtState.getParameter(getEngineParameterId(index))->setValue(newValue); } + //DBG("Set Value Parameter: " << getEngineParameterId(index) << " Val: " << newValue); switch (index) { case SELF_OSC_PUSH: diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index 104ab81..a03a87d 100755 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -167,7 +167,17 @@ public: void scanAndUpdateSkins(); const Array& getBankFiles() const; const Array& getSkinFiles() const; + bool deleteBank(); + bool loadPreset(const File& fxpFile); + bool savePreset(const File& fxpFile); + void changePresetName(const String &name); + void newPreset(const String &name); + void deletePreset(); + bool loadFromFXBFile(const File& fxbFile); + bool saveFXBFile(const File& fxbFile); + bool saveFXPFile(const File& fxpFile); + bool saveBank(const File& fxbFile); bool restoreProgramSettings(const fxProgram* const prog); File getCurrentBankFile() const; @@ -178,8 +188,9 @@ public: //============================================================================== File getDocumentFolder() const; File getSkinFolder() const; + File getPresetsFolder() const; File getBanksFolder() const; - + File getCurrentSkinFolder() const; void setCurrentSkinFolder(const String& folderName); @@ -209,7 +220,16 @@ private: ObxdBank programs; String currentSkin; +public: String currentBank; + File currentBankFile; + void saveBank(); + + + String currentPreset; + File currentPresetFile; + void savePreset(); +private: Array bankFiles; Array skinFiles; From 1ffdd81632fcf732ad12da6a031998c3367e7da1 Mon Sep 17 00:00:00 2001 From: George Reales Date: Tue, 30 Mar 2021 21:17:49 +0200 Subject: [PATCH 3/8] Update PluginProcessor.cpp --- Source/PluginProcessor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index b5d8e29..0df23eb 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -468,6 +468,7 @@ bool ObxdAudioProcessor::deleteBank() { { loadFromFXBFile (bankFiles[0]); } + return true; } void ObxdAudioProcessor::saveBank() { @@ -478,6 +479,7 @@ bool ObxdAudioProcessor::loadPreset(const File& fxpFile) { loadFromFXBFile(fxpFile); currentPreset = fxpFile.getFileName(); currentPresetFile = fxpFile; + return true; } bool ObxdAudioProcessor::saveFXPFile(const File& fxpFile){ @@ -544,6 +546,7 @@ void ObxdAudioProcessor::savePreset() { bool ObxdAudioProcessor::saveBank(const File& fxbFile){ saveFXBFile(fxbFile); currentBankFile = fxbFile; + return true; } bool ObxdAudioProcessor::saveFXBFile(const File& fxbFile) { From 82d9e67173841b5db73beecd6e12bb4e290491d8 Mon Sep 17 00:00:00 2001 From: George Reales Date: Wed, 31 Mar 2021 10:49:36 +0200 Subject: [PATCH 4/8] New banks --- .../discoDSP/OB-Xd/Banks/021 - Vivolator.FXB | Bin 0 -> 186058 bytes .../OB-Xd/Banks/022 - Blank Canvas.fxb | Bin 0 -> 147031 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Documents/discoDSP/OB-Xd/Banks/021 - Vivolator.FXB create mode 100644 Documents/discoDSP/OB-Xd/Banks/022 - Blank Canvas.fxb diff --git a/Documents/discoDSP/OB-Xd/Banks/021 - Vivolator.FXB b/Documents/discoDSP/OB-Xd/Banks/021 - Vivolator.FXB new file mode 100644 index 0000000000000000000000000000000000000000..40096e26585aa834a60962e547982881b91b9563 GIT binary patch literal 186058 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
    F;0=7^j6VQ^z%FAss;iA9Yg>mEIo~ zu^qlazB4?oC*QH`_#_aW&yElsZ;S}h3eb*97c4;Nd@RK$W&2Lv6qJb1ua zx%D?(nHS#-h#zLFlP?BdU(r!$wdA z_5QP;izGO7fG$GRjm!;U#|BN2grRv7PyE*XCnd>T)EiC5kt0L~gJEyx)2ebNfs>B( z{U^2t#f=yONR9K6A~_>eDJPsb-zAl)5=$M{gCXFe{!Ds}B2fzfH(xUWHxGfYF|+qUpz&T9X-o{BC;z{hNtytY`}>(GAE6Svdp1#tYKIHG5%;?-k_Io*tJl6 znd$d1nx~8g-}#X*cd?<*a6J}s#FxV+h6MJwHMHan-7oAV(7I1TzkC0vrVM)~UI5O2 zefRwK>NgMfuU3%dcxrqsNY53X$gcUdNSoH*{Lo@FSFfR&IYD`byeGnLcsSCIJ!Q2c z=HtfZ0K1QPK4$YL4R$3Q_+$(6CsWOt^xAZ&1=ck#S(Hlpdw{iyf568K&pJ@7XuV^xEt^ zRF_g|@`IjDl0-6V`i|sdLei%{!gt7>u`z~NCu+R)?H24>IWyPV5?uhv}b%w-|YTI6ukHhJanD?#_{I>?Amy!RSzgAb+LdfFHZuyqvB=m9LWY zI-+QS-i%H`=_E#BPZ~NLXN^n)Z|oNl&fUQQ>cVt+vUFRk)F0}aqYrzpL{n=E<6_Et zI9mT*@ye>7Ph{XJ~9G7)6tXBFyoEiv>=jBoqm-ebr z`zcBis55CR7uw=MPx9_R7Xa-4itydbt1q9wd0gjd)_V4|Xg(anUTW%z(EOC*j7pgH z7?H}29vfSCF5A$E3D_bukGBMJU4(u0e%Kh^k)**AJx_=9GV}$mi@0vj0ys~N%Oc@# zjswS~ktjIFEdUm17GAiJmT(PMEWBZIlCqCw3L_; zBQ~eAn2Wa<(yC+kBn6z(3wjG2JYLB`;sudoAwgsmVf5d)0A;hci`sR78O+o}1(-F}?p1jEw$G897h1 zJ%3Ugv5WVor)hh}&g7@-zpvz->m!TcGWPf&Jp%G_#knVur}Md<#`1i9Odog7jm0H@ zK~Uf0X%**uB%-y0ust(0)8H1efjQEJ&$;p*M`*JllYhHC!MJk^;W>5=Q?Wp!ob=$j z1Jceb-vce8*E)^Fr}O0#R{fK5yb(D46Ch>(HwKOV2_``PzZAFjT>`EEtz z?JQ7tR*I{K^hDT}CoZuKH7nCR+3o-&C|)fxaT?q5P&o^>9Z?^exxUc`J6 zFKtQQ)YANf)8P};{d;GWR)eB5vDn{~OG8&K?w!$6|26T@G}A_2w@%#S?|=1+R}c5! zJ>0yw(*OU%&5PS#ewJ!gyuJGJ->$Iv`0M@MH@9D)vEkz{Kl6t^&_oMwyzTNnTC78G zC3FWa+rNi_jMLDUC*lVPefiudxN6sP7*#S@OY5*-C#0nu17w+KYz5Gls=%jlKCJxl zM9_!A?&-@>`2qV`^qk~s5kOxo{4z`xXBj9hB1}A*xC~N34&&gy<8(VhIqymOjx=;B zHyv{|-E^7qb!l_^Q;S;t!<&cut7mr)w=X|IA%_41Q<`s>aBwW5t)D(C34Tf-%e*59 zOvNcHk}^Y?=d_hJL(%#;m9Jg4n}fwB&3d?7;2h4@pUHkVU*d!#_MeoCw1AQ~>@+au zFE|~F$`?*|Y@9+wu@Y$mc1@@vhRfDq~tM^5@`9NK84+% z|9iKd%l)rstKkccLDOJK75@=Fbq&*aY2I5T_UG$i@pC!g%f+e0hY}vv3UqmtP@vPu zn%lMFua4ve;QaEWn@fOI`T*)cZ_z%}b7dw}E`Q&o33dNTdAk-VbS(=8V>^vZ8Pt&% zsu+IhW+cGMM_M0y@oy{d5I42@ByjipCuQ^}5a=|1giySMPl)vV-zlUy4YO(FZ)_g< z8zXgka{)q{HC6ul`!_FMttx>P>!nYLN-0WcuTfFCwIG#eUkFkR7Z0QUa-urTlFZQ0hM^DMAns_OC8) z2|+2&HJK=F`9{t~fE~*0gy`iSJ6+a7Rz8P-M8#RZk?&FQr(vu3Uhqh|Ydqg^q2Bj}w>-uSFU|^YapaqnOta{cJ>N&lahDWlf@k^erv%IX zP09MSD~z{i!7ed2_XQj*HbuzAN`@w+8P$$ifPVQ7$lVyVp%1VyHrA=A zpXx;pJ2rE>siqoLDnyga`XrbUG}?Mw)kyR~ws7m-@hLQJk4IFW-tZEV0E%*{1^`}Y zNQ8RE^+qSm$ZWiFcx^!A6{B)sq?@5XNTsAqdqmN7YzcD{A*EU>@d|+(Xrz^QMl-aD z?KKxbR6oD}+uzp0c-&|7ePKKkqcgyG{_cpSQgze zswU!I|2Kf~{?|&d2w>Z3Wa;-|#5c}xnc#FjtTN$6MJsd#ZIIum&9kx8xb@ruoX*E0 zPAdvh4U6UmK&^{R$eeG?obq?17`NR{WsDwLq||p=H9Uf^_UMduGwmk>AQlU_0VOSe5sL~Pl z8~=n|OYJKEboKq+)xg_pBlU8VVk#DV979 zo6fs0Es_^2`908Kxk0@bP0~pSB;(0B${!uske73L60^-Gbeh)nzjl(=^~hBkqoSCt z@-jv}+ygrc79biuhP^|$0gn~%1;j3&Fo|8

    q+jJ5pYG3XbUG!3)EUBPs7M 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 OZ|;Bd?5kh>?EeQCE_vPn literal 0 HcmV?d00001 diff --git a/Documents/discoDSP/OB-Xd/Banks/022 - Blank Canvas.fxb b/Documents/discoDSP/OB-Xd/Banks/022 - Blank Canvas.fxb new file mode 100644 index 0000000000000000000000000000000000000000..454988a39f138c9098aa21eafc9a887bcd1722ac GIT binary patch literal 147031 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 literal 0 HcmV?d00001 From bb86d53caeba7514e772b20e6f10521ae9c50db7 Mon Sep 17 00:00:00 2001 From: George Reales Date: Thu, 1 Apr 2021 08:15:25 +0200 Subject: [PATCH 5/8] Update Params.h Default voice count reduced to 8 voices. --- Source/Engine/Params.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Engine/Params.h b/Source/Engine/Params.h index ae1b63f..176e3a2 100755 --- a/Source/Engine/Params.h +++ b/Source/Engine/Params.h @@ -41,7 +41,7 @@ public: { values[k] = 0.0f; } - values[VOICE_COUNT] = 1.0f; + values[VOICE_COUNT] = 0.2f; values[BRIGHTNESS]=1.0f; values[OCTAVE]=0.5; values[TUNE] = 0.5f; From 27ada371d1199bfc706aeff8ec56ff78037c3150 Mon Sep 17 00:00:00 2001 From: George Reales Date: Fri, 2 Apr 2021 09:09:59 +0200 Subject: [PATCH 6/8] Update PluginProcessor.cpp --- Source/PluginProcessor.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index 0df23eb..a7a61d1 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -517,13 +517,13 @@ bool ObxdAudioProcessor::savePreset(const File& fxpFile) { void ObxdAudioProcessor::changePresetName(const String &name){ programs.currentProgramPtr->name = name; //savePreset(); - saveBank(); + //saveBank(); } void ObxdAudioProcessor::deletePreset(){ programs.currentProgramPtr->setDefaultValues(); programs.currentProgramPtr->name = "Default"; - saveBank(); + //saveBank(); } void ObxdAudioProcessor::newPreset(const String &name) { @@ -535,7 +535,7 @@ void ObxdAudioProcessor::newPreset(const String &name) { } } //savePreset(); - saveBank(); + //saveBank(); } void ObxdAudioProcessor::savePreset() { From e9eae0fb6a0f99506d75e1fcdb2112a57ddbc329 Mon Sep 17 00:00:00 2001 From: George Reales Date: Fri, 2 Apr 2021 10:54:53 +0200 Subject: [PATCH 7/8] Update PluginEditor.cpp File menu separators and tidy up --- Source/PluginEditor.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 5749c6c..40bf916 100755 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -422,6 +422,8 @@ void ObxdAudioProcessorEditor::createMenu () true, false); + fileMenu.addSeparator(); + fileMenu.addItem(static_cast(MenuAction::ExportPreset), "Export Preset...", true, @@ -431,22 +433,24 @@ void ObxdAudioProcessorEditor::createMenu () "Export Bank...", true, false); - - fileMenu.addItem(static_cast(MenuAction::SavePreset), - "Save Preset...", - true, - false); - - fileMenu.addItem(static_cast(MenuAction::RenamePreset), - "Rename Preset...", - true, - false); + + fileMenu.addSeparator(); fileMenu.addItem(static_cast(MenuAction::NewPreset), "New Preset...", true,//enableNewPresetOption, false); + fileMenu.addItem(static_cast(MenuAction::RenamePreset), + "Rename Preset...", + true, + false); + + fileMenu.addItem(static_cast(MenuAction::SavePreset), + "Save Preset...", + true, + false); + fileMenu.addItem(static_cast(MenuAction::DeletePreset), "Delete Preset...", true, From aa6075d32f25571979dc733c57c956bd26b95656 Mon Sep 17 00:00:00 2001 From: George Reales Date: Fri, 2 Apr 2021 19:03:06 +0200 Subject: [PATCH 8/8] Update PluginProcessor.cpp --- Source/PluginProcessor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index a7a61d1..37aa386 100755 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -523,6 +523,7 @@ void ObxdAudioProcessor::changePresetName(const String &name){ void ObxdAudioProcessor::deletePreset(){ programs.currentProgramPtr->setDefaultValues(); programs.currentProgramPtr->name = "Default"; + sendChangeMessage(); //saveBank(); }