gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 821dd88a02991eaf89e876861e2ea7405ca9237f
parent 395bb96a421c8b4596aa2f8f241d2e56dc9664ae
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Mon, 27 Dec 2021 18:17:32 +0100

Merge remote-tracking branch 'balls/midiports' into dsp56300

# Conflicts:
#	source/jucePlugin/PluginEditor.cpp
#	source/jucePlugin/PluginEditor.h
#	source/jucePlugin/PluginProcessor.cpp
#	source/jucePlugin/PluginProcessor.h
#	source/jucePlugin/version.h

Diffstat:
MCMakeLists.txt | 2+-
Msource/jucePlugin/PluginEditor.cpp | 40+++++++++++++++++++++++++++++++++++-----
Msource/jucePlugin/PluginEditor.h | 1+
Msource/jucePlugin/PluginProcessor.cpp | 22++++++++++++++++------
Msource/jucePlugin/PluginProcessor.h | 8++++----
Msource/jucePlugin/version.h | 4++--
6 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -6,7 +6,7 @@ set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version") -project(gearmulator VERSION 1.2.0) +project(gearmulator VERSION 1.2.1) include(base.cmake) diff --git a/source/jucePlugin/PluginEditor.cpp b/source/jucePlugin/PluginEditor.cpp @@ -11,6 +11,13 @@ AudioPluginAudioProcessorEditor::AudioPluginAudioProcessorEditor(AudioPluginAudi { ignoreUnused (processorRef); + juce::PropertiesFile::Options opts; + opts.applicationName = "DSP56300 Emulator"; + opts.filenameSuffix = ".settings"; + opts.folderName = "DSP56300 Emulator"; + opts.osxLibrarySubFolder = "Application Support/DSP56300 Emulator"; + m_properties = new juce::PropertiesFile(opts); + // Make sure that before the constructor has finished, you've set the // editor's size to whatever you need it to be. setSize(800, 800); @@ -63,6 +70,17 @@ AudioPluginAudioProcessorEditor::AudioPluginAudioProcessorEditor(AudioPluginAudi }; addAndMakeVisible(m_partSelectors[pt]); } + + auto midiIn = m_properties->getValue("midi_input", ""); + auto midiOut = m_properties->getValue("midi_output", ""); + if (midiIn != "") + { + processorRef.setMidiInput(midiIn); + } + if (midiOut != "") + { + processorRef.setMidiOutput(midiOut); + } m_cmbMidiInput.setSize(160, 30); m_cmbMidiInput.setTopLeftPosition(0, 400); @@ -115,6 +133,8 @@ void AudioPluginAudioProcessorEditor::updateMidiInput(int index) if (index == 0) { + m_properties->setValue("midi_input", ""); + m_properties->save(); m_lastInputIndex = index; m_cmbMidiInput.setSelectedItemIndex(index, juce::dontSendNotification); return; @@ -125,10 +145,17 @@ void AudioPluginAudioProcessorEditor::updateMidiInput(int index) if (!deviceManager.isMidiInputDeviceEnabled(newInput.identifier)) deviceManager.setMidiInputDeviceEnabled(newInput.identifier, true); - processorRef.setMidiInput(newInput.identifier); + if (!processorRef.setMidiInput(newInput.identifier)) + { + m_cmbMidiInput.setSelectedItemIndex(0, juce::dontSendNotification); + m_lastInputIndex = 0; + return; + } - m_cmbMidiInput.setSelectedItemIndex(index+1, juce::dontSendNotification); + m_properties->setValue("midi_input", newInput.identifier); + m_properties->save(); + m_cmbMidiInput.setSelectedItemIndex(index+1, juce::dontSendNotification); m_lastInputIndex = index; } void AudioPluginAudioProcessorEditor::updateMidiOutput(int index) @@ -137,6 +164,8 @@ void AudioPluginAudioProcessorEditor::updateMidiOutput(int index) if (index == 0) { + m_properties->setValue("midi_output", ""); + m_properties->save(); m_cmbMidiOutput.setSelectedItemIndex(index, juce::dontSendNotification); m_lastOutputIndex = index; processorRef.setMidiOutput(""); @@ -144,15 +173,16 @@ void AudioPluginAudioProcessorEditor::updateMidiOutput(int index) } index--; auto newOutput = list[index]; - processorRef.setMidiOutput(newOutput.identifier); - if (processorRef.getMidiOutput() == nullptr) + if(!processorRef.setMidiOutput(newOutput.identifier)) { m_cmbMidiOutput.setSelectedItemIndex(0, juce::dontSendNotification); + m_lastOutputIndex = 0; return; } + m_properties->setValue("midi_output", newOutput.identifier); + m_properties->save(); m_cmbMidiOutput.setSelectedItemIndex(index+1, juce::dontSendNotification); - m_lastOutputIndex = index; } diff --git a/source/jucePlugin/PluginEditor.h b/source/jucePlugin/PluginEditor.h @@ -34,6 +34,7 @@ private: juce::ComboBox m_cmbMidiInput; juce::ComboBox m_cmbMidiOutput; juce::AudioDeviceManager deviceManager; + juce::PropertiesFile *m_properties; int m_lastInputIndex = 0; int m_lastOutputIndex = 0; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAudioProcessorEditor) diff --git a/source/jucePlugin/PluginProcessor.cpp b/source/jucePlugin/PluginProcessor.cpp @@ -297,23 +297,33 @@ void AudioPluginAudioProcessor::addMidiEvent(const synthLib::SMidiEvent& ev) juce::MidiOutput *AudioPluginAudioProcessor::getMidiOutput() { return m_midiOutput.get(); } juce::MidiInput *AudioPluginAudioProcessor::getMidiInput() { return m_midiInput.get(); } -void AudioPluginAudioProcessor::setMidiOutput(juce::String _out) { +bool AudioPluginAudioProcessor::setMidiOutput(juce::String _out) { if (m_midiOutput != nullptr && m_midiOutput->isBackgroundThreadRunning()) { m_midiOutput->stopBackgroundThread(); } - m_midiOutput.swap(juce::MidiOutput::openDevice(_out)); - m_midiOutput->startBackgroundThread(); + m_midiOutput = juce::MidiOutput::openDevice(_out); + if (m_midiOutput != nullptr) + { + m_midiOutput->startBackgroundThread(); + return true; + } + return false; } -void AudioPluginAudioProcessor::setMidiInput(juce::String _in) +bool AudioPluginAudioProcessor::setMidiInput(juce::String _in) { if (m_midiInput != nullptr) { m_midiInput->stop(); } - m_midiInput.swap(juce::MidiInput::openDevice(_in, this)); - m_midiInput->start(); + m_midiInput = juce::MidiInput::openDevice(_in, this); + if (m_midiInput != nullptr) + { + m_midiInput->start(); + return true; + } + return false; } void AudioPluginAudioProcessor::handleIncomingMidiMessage(juce::MidiInput *source, const juce::MidiMessage &message) diff --git a/source/jucePlugin/PluginProcessor.h b/source/jucePlugin/PluginProcessor.h @@ -54,10 +54,10 @@ public: bool isPluginValid() const { return m_plugin.isValid(); } void getLastMidiOut(std::vector<synthLib::SMidiEvent>& dst); void addMidiEvent(const synthLib::SMidiEvent& ev); - void setMidiOutput(juce::String _out); - juce::MidiOutput* AudioPluginAudioProcessor::getMidiOutput(); - void setMidiInput(juce::String _in); - juce::MidiInput* AudioPluginAudioProcessor::getMidiInput(); + bool setMidiOutput(juce::String _out); + juce::MidiOutput* getMidiOutput(); + bool setMidiInput(juce::String _in); + juce::MidiInput* getMidiInput(); void handleIncomingMidiMessage(juce::MidiInput *source, const juce::MidiMessage &message) override; // _____________ diff --git a/source/jucePlugin/version.h b/source/jucePlugin/version.h @@ -1,4 +1,4 @@ #pragma once -static constexpr const char* const g_pluginVersionString = "1.2.0"; -static constexpr uint32_t g_pluginVersion = 120; +static constexpr const char* const g_pluginVersionString = "1.2.1"; +static constexpr uint32_t g_pluginVersion = 121;