From 796228e0411eb8e6a37c41d06a1b50d22ff8dada Mon Sep 17 00:00:00 2001 From: Roland Rabien Date: Fri, 11 Oct 2024 21:02:25 -0700 Subject: [PATCH] A few tweaks for MTS support --- CMakeLists.txt | 5 ++++- plugin/Source/PluginProcessor.cpp | 8 ++++++++ plugin/Source/PluginProcessor.h | 2 ++ plugin/Source/WavetableVoice.cpp | 12 +++++------- plugin/Source/WavetableVoice.h | 4 +--- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf5b028..5086ace 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -132,7 +132,10 @@ file (GLOB_RECURSE source_files CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/plugin/*.cc ${CMAKE_CURRENT_SOURCE_DIR}/plugin/*.h) -target_sources (${PLUGIN_NAME} PRIVATE ${source_files} ${CMAKE_CURRENT_SOURCE_DIR}/modules/MTS-ESP/Client/libMTSClient.cpp) +target_sources (${PLUGIN_NAME} PRIVATE + ${source_files} + ${CMAKE_CURRENT_SOURCE_DIR}/modules/MTS-ESP/Client/libMTSClient.h + ${CMAKE_CURRENT_SOURCE_DIR}/modules/MTS-ESP/Client/libMTSClient.cpp) source_group (TREE ${CMAKE_CURRENT_SOURCE_DIR}/plugin PREFIX Source FILES ${source_files}) file (GLOB_RECURSE asset_files CONFIGURE_DEPENDS diff --git a/plugin/Source/PluginProcessor.cpp b/plugin/Source/PluginProcessor.cpp index d9ae4b4..efd3855 100644 --- a/plugin/Source/PluginProcessor.cpp +++ b/plugin/Source/PluginProcessor.cpp @@ -522,6 +522,7 @@ WavetableAudioProcessor::WavetableAudioProcessor() extractProgram (BinaryData::originalFilenames[i], data, sz); } + mtsClient = MTS_RegisterClient(); enableLegacyMode(); setVoiceStealingEnabled (true); @@ -577,6 +578,8 @@ WavetableAudioProcessor::WavetableAudioProcessor() WavetableAudioProcessor::~WavetableAudioProcessor() { + MTS_DeregisterClient (mtsClient); + mtsClient = nullptr; } void WavetableAudioProcessor::reloadWavetables() @@ -844,6 +847,11 @@ void WavetableAudioProcessor::processBlock (juce::AudioBuffer& buffer, ju if (buffer.getNumChannels() != 2) return; + if (mtsClient) + for (auto itr : midi) + if (auto m = itr.getMessage(); m.isSysEx()) + MTS_ParseMIDIDataU (mtsClient, itr.data, itr.numBytes); + if (blockMissed || presetLoaded || lastMono != globalParams.mono->isOn()) { blockMissed = presetLoaded = false; diff --git a/plugin/Source/PluginProcessor.h b/plugin/Source/PluginProcessor.h index 4416810..784f183 100644 --- a/plugin/Source/PluginProcessor.h +++ b/plugin/Source/PluginProcessor.h @@ -348,6 +348,8 @@ class WavetableAudioProcessor : public gin::Processor, juce::CriticalSection dspLock; juce::Random rng; + MTSClient* mtsClient = nullptr; + private: bool isParamLocked (gin::Parameter* p) override; float getSmoothingTime (gin::Parameter*); diff --git a/plugin/Source/WavetableVoice.cpp b/plugin/Source/WavetableVoice.cpp index f4700fc..8dfe72e 100644 --- a/plugin/Source/WavetableVoice.cpp +++ b/plugin/Source/WavetableVoice.cpp @@ -8,12 +8,10 @@ WavetableVoice::WavetableVoice (WavetableAudioProcessor& p) , sub (proc.analogTables) { filter.setNumChannels (2); - mtsClient = MTS_RegisterClient(); } WavetableVoice::~WavetableVoice() { - MTS_DeregisterClient (mtsClient); } void WavetableVoice::noteStarted() @@ -247,9 +245,9 @@ void WavetableVoice::updateParams (int blockSize) proc.modMatrix.setPolyValue (*this, proc.modSrcNote, note.initialNote / 127.0f); - double retune_semitones = 0.0; - if (mtsClient) - retune_semitones = MTS_RetuningInSemitones (mtsClient, note.initialNote, -1); + double retuneSemitones = 0.0; + if (proc.mtsClient) + retuneSemitones = MTS_RetuningInSemitones (proc.mtsClient, note.initialNote, -1); for (int i = 0; i < Cfg::numOSCs; i++) { @@ -257,7 +255,7 @@ void WavetableVoice::updateParams (int blockSize) currentMidiNotes[i] = noteSmoother.getCurrentValue() * 127.0f; if (glideInfo.glissando) currentMidiNotes[i] = (float) juce::roundToInt (currentMidiNotes[i]); - currentMidiNotes[i] += float (retune_semitones); + currentMidiNotes[i] += float (retuneSemitones); currentMidiNotes[i] += float (note.totalPitchbendInSemitones); currentMidiNotes[i] += getValue (proc.oscParams[i].tune) + getValue (proc.oscParams[i].finetune) / 100.0f; @@ -275,7 +273,7 @@ void WavetableVoice::updateParams (int blockSize) { subNote = noteSmoother.getCurrentValue() * 127.0f; if (glideInfo.glissando) subNote = (float) juce::roundToInt (subNote); - subNote += retune_semitones; + subNote += float (retuneSemitones); subNote += float (note.totalPitchbendInSemitones); subNote += getValue (proc.subParams.tune); diff --git a/plugin/Source/WavetableVoice.h b/plugin/Source/WavetableVoice.h index c5a6f59..24f54f4 100644 --- a/plugin/Source/WavetableVoice.h +++ b/plugin/Source/WavetableVoice.h @@ -61,7 +61,5 @@ class WavetableVoice : public gin::SynthesiserVoice, gin::EasedValueSmoother noteSmoother; - float ampKeyTrack = 1.0f; - - MTSClient* mtsClient = nullptr; + float ampKeyTrack = 1.0f; };