SmartGuitarAmp

Guitar plugin made with JUCE that uses neural networks to emulate a tube amplifier
Log | Files | Refs | Submodules | README

commit bc63782adaf177abeb7d22259d87b92b0d04ca98
parent 828c691c953ef421ecc1d6d619c8af27a7522426
Author: keith <kbloemer89@gmail.com>
Date:   Wed, 11 Nov 2020 05:48:27 -0600

Initial addition of load tone button

Diffstat:
Mplugins/SmartAmp/SmartAmp.jucer | 4++--
Mplugins/SmartAmp/Source/PluginEditor.cpp | 25+++++++++++++++++++++++--
Mplugins/SmartAmp/Source/PluginEditor.h | 2++
Mplugins/SmartAmp/Source/PluginProcessor.cpp | 16++++++++++++++++
Mplugins/SmartAmp/Source/PluginProcessor.h | 3+++
Mplugins/SmartAmp/Source/WaveNetLoader.cpp | 13+++++++++++++
Mplugins/SmartAmp/Source/WaveNetLoader.h | 1+
7 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/plugins/SmartAmp/SmartAmp.jucer b/plugins/SmartAmp/SmartAmp.jucer @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <JUCERPROJECT id="ym7AY5" name="SmartAmp" projectType="audioplug" pluginAUMainType="'aufx'" - companyName="HandDrawnAmps" headerPath="$(HOME)/eigen/" displaySplashScreen="1" + companyName="GuitarML" headerPath="$(HOME)/eigen/" displaySplashScreen="1" jucerFormatVersion="1" pluginCode="sa1" maxBinaryFileSize="20971520"> <MAINGROUP id="ZrSGof" name="SmartAmp"> <GROUP id="{0250E2E8-A733-0AA7-0A08-97085228CF87}" name="Resources"> @@ -85,7 +85,7 @@ <VS2019 targetFolder="Builds/VisualStudio2019"> <CONFIGURATIONS> <CONFIGURATION isDebug="1" name="Debug" targetName="SmartAmp"/> - <CONFIGURATION isDebug="0" name="Release" targetName="SmartAmp"/> + <CONFIGURATION isDebug="0" name="Release" targetName="SmartAmp" headerPath="C:\Users\rache\Desktop\dev\eigen-3.3.7"/> </CONFIGURATIONS> <MODULEPATHS> <MODULEPATH id="juce_video"/> diff --git a/plugins/SmartAmp/Source/PluginEditor.cpp b/plugins/SmartAmp/Source/PluginEditor.cpp @@ -29,6 +29,10 @@ WaveNetVaAudioProcessorEditor::WaveNetVaAudioProcessorEditor (WaveNetVaAudioProc addAndMakeVisible(ampOnButton); ampOnButton.addListener(this); + addAndMakeVisible(loadButton); + loadButton.setButtonText("Load Tone"); + loadButton.addListener(this); + ampCleanLeadButton.setImages(true, true, true, ImageCache::getFromMemory(BinaryData::power_switch_up_png, BinaryData::power_switch_up_pngSize), 1.0, Colours::transparentWhite, Image(), 1.0, Colours::transparentWhite, @@ -221,6 +225,8 @@ void WaveNetVaAudioProcessorEditor::resized() // This is generally where you'll want to lay out the positions of any // subcomponents in your editor.. + loadButton.setBounds(50, 40, 125, 25); + // Amp Widgets ampPresenceKnob.setBounds(97, 495, 75, 105); ampCleanBassKnob.setBounds(197, 495, 75, 105); @@ -239,12 +245,27 @@ void WaveNetVaAudioProcessorEditor::resized() ampLED.setBounds(975, 160, 15, 25); } +void WaveNetVaAudioProcessorEditor::loadButtonClicked() +{ + FileChooser chooser("Select a .json tone...", + {}, + "*.json"); + if (chooser.browseForFileToOpen()) + { + File file = chooser.getResult(); + processor.loadConfig(file); + } +} + void WaveNetVaAudioProcessorEditor::buttonClicked(juce::Button* button) { - if (button == &ampOnButton) + if (button == &ampOnButton) { ampOnButtonClicked(); - else if (button == &ampCleanLeadButton) + } else if (button == &ampCleanLeadButton) { ampCleanLeadButtonClicked(); + } else if (button == &loadButton) { + loadButtonClicked(); + } } diff --git a/plugins/SmartAmp/Source/PluginEditor.h b/plugins/SmartAmp/Source/PluginEditor.h @@ -59,7 +59,9 @@ private: Image background; int current_background = 1; + TextButton loadButton; virtual void buttonClicked(Button* button) override; + void loadButtonClicked(); virtual void sliderValueChanged(Slider* slider) override; void ampOnButtonClicked(); void ampCleanLeadButtonClicked(); diff --git a/plugins/SmartAmp/Source/PluginProcessor.cpp b/plugins/SmartAmp/Source/PluginProcessor.cpp @@ -231,6 +231,22 @@ void WaveNetVaAudioProcessor::loadConfigAmp() this->suspendProcessing(false); } +void WaveNetVaAudioProcessor::loadConfig(File configFile) +{ + this->suspendProcessing(true); + WaveNetLoader loader(dummyVar, configFile); + int numChannels = loader.numChannels; + int inputChannels = loader.inputChannels; + int outputChannels = loader.outputChannels; + int filterWidth = loader.filterWidth; + std::vector<int> dilations = loader.dilations; + std::string activation = loader.activation; + waveNet.setParams(inputChannels, outputChannels, numChannels, filterWidth, activation, + dilations); + loader.loadVariables(waveNet); + this->suspendProcessing(false); +} + float WaveNetVaAudioProcessor::convertLogScale(float in_value, float x_min, float x_max, float y_min, float y_max) { float b = log(y_max / y_min) / (x_max - x_min); diff --git a/plugins/SmartAmp/Source/PluginProcessor.h b/plugins/SmartAmp/Source/PluginProcessor.h @@ -59,6 +59,7 @@ public: void setStateInformation (const void* data, int sizeInBytes) override; void loadConfigAmp(); + void loadConfig(File configFile); // Overdrive Pedal float convertLogScale(float in_value, float x_min, float x_max, float y_min, float y_max); @@ -98,6 +99,8 @@ private: float ampLeadDrive = 1.0; float ampMaster = 1.0; + var dummyVar; + //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WaveNetVaAudioProcessor) }; diff --git a/plugins/SmartAmp/Source/WaveNetLoader.cpp b/plugins/SmartAmp/Source/WaveNetLoader.cpp @@ -25,6 +25,19 @@ WaveNetLoader::WaveNetLoader(var jsonFile) dilations = readDilations(); } +WaveNetLoader::WaveNetLoader(var jsonFile, File configFile) +{ + // Edit this line to point to your binary json file in project resources + config = JSON::parse(configFile); + + numChannels = config["residual_channels"]; + inputChannels = config["input_channels"]; + outputChannels = config["output_channels"]; + filterWidth = config["filter_width"]; + activation = config["activation"].toString().toStdString(); + dilations = readDilations(); +} + std::vector<int> WaveNetLoader::readDilations() { std::vector<int> newDilations; diff --git a/plugins/SmartAmp/Source/WaveNetLoader.h b/plugins/SmartAmp/Source/WaveNetLoader.h @@ -21,6 +21,7 @@ class WaveNetLoader { public: WaveNetLoader(var jsonFile); + WaveNetLoader(var jsonFile, File configFile); int numChannels; int inputChannels; int outputChannels;