commit 2956bafd567fa030c37355fccd4bab30261e9d9e
parent 69f5c70f399a35fcc76177c57ef77b5f5a868e92
Author: 790 <790@users.noreply.github.com>
Date: Mon, 27 Dec 2021 16:05:45 +0000
fix crash selecting port. remember settings between reloads
Diffstat:
5 files changed, 54 insertions(+), 13 deletions(-)
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();
+ 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();
+ 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,9 +54,9 @@ 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);
+ bool setMidiOutput(juce::String _out);
juce::MidiOutput* AudioPluginAudioProcessor::getMidiOutput();
- void setMidiInput(juce::String _in);
+ bool setMidiInput(juce::String _in);
juce::MidiInput* AudioPluginAudioProcessor::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;