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:
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;