From 39afc6f63606ec18e3a0ab383e79132784b45763 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 16 Nov 2020 16:41:40 +0000 Subject: [PATCH] Refresh juce-current patches --- ...devicemanager-prefer-jack-over-alsa.patch} | 2 +- ...patch => 02_flac-assume-sse-present.patch} | 0 ...ch => 03_fix-midi-message-constness.patch} | 2 +- ...-support.patch => 04_vst2-interface.patch} | 399 ++- .../juce-current/patches/05_mingw-fixes.patch | 58 + .../06_old-compiler-compatibility.patch | 307 ++ ...dspa.patch => 07_allow-local-ladspa.patch} | 4 +- ...een.patch => 08_remove-splashscreen.patch} | 72 +- ...atch => 09_proper-getExecutableFile.patch} | 2 +- ...ncy.patch => 10_fix-fork-exec-usage.patch} | 12 +- ...pid.patch => 11_childprocess-getPID.patch} | 44 +- ...linux-filechooser-needs-modal-loops.patch} | 8 +- ..._dialogwindow-allow-native-titlebar.patch} | 16 +- ...tch => 14_fix-x11-temporary-windows.patch} | 4 +- ...s.patch => 15_fix-linux-thread-prio.patch} | 2 +- ...g-state.patch => 16_lv2-definitions.patch} | 12 +- .../patches/17_allow-vst2-without-audio.patch | 14 + .../patches/17_dynamic-vst2-plugin-name.patch | 13 + ...patch => 18_fix-vst2-linux-gui-init.patch} | 18 +- ...> 19_messagemanager-dispatch-public.patch} | 6 +- ...i.patch => 20_audioprocessor-no-gui.patch} | 36 +- .../patches/audioprocessors_lv2type.patch | 12 - ...audioprocessors_no-splash-screen_pt2.patch | 54 - .../patches/juce_vst_interface.patch | 2991 ----------------- .../{ => maybe-not-needed}/_haiku.patch | 0 .../vst2-linux-fix-scale-factor.patch | 0 .../vst3-linux-fix-scale-factor.patch | 0 .../patches/mingw-fixes_pt1.patch | 14 - .../patches/use-mingw-std-threads.patch | 15 - .../patches/vst2-support_pt2.patch | 47 - .../patches/vstwrapper-fixes.patch | 34 - 31 files changed, 782 insertions(+), 3416 deletions(-) rename libs/juce-current/patches/{audiodevicemanager_prefer-jack-over-alsa.patch => 01_audiodevicemanager-prefer-jack-over-alsa.patch} (96%) rename libs/juce-current/patches/{flac-assume-sse.patch => 02_flac-assume-sse-present.patch} (100%) rename libs/juce-current/patches/{fix-midi-message-constness.patch => 03_fix-midi-message-constness.patch} (94%) rename libs/juce-current/patches/{vst2-support.patch => 04_vst2-interface.patch} (91%) create mode 100644 libs/juce-current/patches/05_mingw-fixes.patch create mode 100644 libs/juce-current/patches/06_old-compiler-compatibility.patch rename libs/juce-current/patches/{local-ladspa.patch => 07_allow-local-ladspa.patch} (87%) rename libs/juce-current/patches/{audioprocessors_no-splash-screen.patch => 08_remove-splashscreen.patch} (50%) rename libs/juce-current/patches/{proper-posix-getExecutableFile.patch => 09_proper-getExecutableFile.patch} (95%) rename libs/juce-current/patches/{use-vfork+consistency.patch => 10_fix-fork-exec-usage.patch} (91%) rename libs/juce-current/patches/{childprocess_getpid.patch => 11_childprocess-getPID.patch} (79%) rename libs/juce-current/patches/{no-linux-native-dialog-without-modal-loops.patch => 12_linux-filechooser-needs-modal-loops.patch} (85%) rename libs/juce-current/patches/{dialogwindow_allow-native-titlebar.patch => 13_dialogwindow-allow-native-titlebar.patch} (87%) rename libs/juce-current/patches/{fix-for-temporary-windows.patch => 14_fix-x11-temporary-windows.patch} (90%) rename libs/juce-current/patches/{fix-linux-thread-priorities.patch => 15_fix-linux-thread-prio.patch} (93%) rename libs/juce-current/patches/{audioprocessors_lv2-string-state.patch => 16_lv2-definitions.patch} (76%) create mode 100644 libs/juce-current/patches/17_allow-vst2-without-audio.patch create mode 100644 libs/juce-current/patches/17_dynamic-vst2-plugin-name.patch rename libs/juce-current/patches/{vst2-linux-fix-gui-init.patch => 18_fix-vst2-linux-gui-init.patch} (53%) rename libs/juce-current/patches/{juce_events-dispatch-public.patch => 19_messagemanager-dispatch-public.patch} (87%) rename libs/juce-current/patches/{audioprocessors_nogui.patch => 20_audioprocessor-no-gui.patch} (88%) delete mode 100644 libs/juce-current/patches/audioprocessors_lv2type.patch delete mode 100644 libs/juce-current/patches/audioprocessors_no-splash-screen_pt2.patch delete mode 100644 libs/juce-current/patches/juce_vst_interface.patch rename libs/juce-current/patches/{ => maybe-not-needed}/_haiku.patch (100%) rename libs/juce-current/patches/{ => maybe-not-needed}/vst2-linux-fix-scale-factor.patch (100%) rename libs/juce-current/patches/{ => maybe-not-needed}/vst3-linux-fix-scale-factor.patch (100%) delete mode 100644 libs/juce-current/patches/mingw-fixes_pt1.patch delete mode 100644 libs/juce-current/patches/use-mingw-std-threads.patch delete mode 100644 libs/juce-current/patches/vst2-support_pt2.patch delete mode 100644 libs/juce-current/patches/vstwrapper-fixes.patch diff --git a/libs/juce-current/patches/audiodevicemanager_prefer-jack-over-alsa.patch b/libs/juce-current/patches/01_audiodevicemanager-prefer-jack-over-alsa.patch similarity index 96% rename from libs/juce-current/patches/audiodevicemanager_prefer-jack-over-alsa.patch rename to libs/juce-current/patches/01_audiodevicemanager-prefer-jack-over-alsa.patch index 45bc72a3..890e0918 100644 --- a/libs/juce-current/patches/audiodevicemanager_prefer-jack-over-alsa.patch +++ b/libs/juce-current/patches/01_audiodevicemanager-prefer-jack-over-alsa.patch @@ -1,5 +1,5 @@ diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp -index 823a1b209..eff47377b 100644 +index dc2ad8e3b..1f03bc047 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -184,8 +184,8 @@ void AudioDeviceManager::createAudioDeviceTypes (OwnedArray& diff --git a/libs/juce-current/patches/flac-assume-sse.patch b/libs/juce-current/patches/02_flac-assume-sse-present.patch similarity index 100% rename from libs/juce-current/patches/flac-assume-sse.patch rename to libs/juce-current/patches/02_flac-assume-sse-present.patch diff --git a/libs/juce-current/patches/fix-midi-message-constness.patch b/libs/juce-current/patches/03_fix-midi-message-constness.patch similarity index 94% rename from libs/juce-current/patches/fix-midi-message-constness.patch rename to libs/juce-current/patches/03_fix-midi-message-constness.patch index c38c7fc4..6d40720d 100644 --- a/libs/juce-current/patches/fix-midi-message-constness.patch +++ b/libs/juce-current/patches/03_fix-midi-message-constness.patch @@ -1,5 +1,5 @@ diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.h b/modules/juce_audio_basics/midi/juce_MidiMessage.h -index 5628c3ae9..207bb9a0b 100644 +index 2d9e5adf0..30a609cec 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.h @@ -945,7 +945,7 @@ private: diff --git a/libs/juce-current/patches/vst2-support.patch b/libs/juce-current/patches/04_vst2-interface.patch similarity index 91% rename from libs/juce-current/patches/vst2-support.patch rename to libs/juce-current/patches/04_vst2-interface.patch index 918edb62..ad7d65ee 100644 --- a/libs/juce-current/patches/vst2-support.patch +++ b/libs/juce-current/patches/04_vst2-interface.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -index c87b97d49..159ab0c7c 100644 +index 0ab14cbc3..1543af1ba 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -@@ -71,14 +71,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4458) +@@ -78,14 +78,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4458) namespace Vst2 { @@ -18,7 +18,7 @@ index c87b97d49..159ab0c7c 100644 } JUCE_END_IGNORE_WARNINGS_MSVC -@@ -89,7 +82,6 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE +@@ -96,7 +89,6 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE #pragma pack (push, 8) #endif @@ -26,7 +26,7 @@ index c87b97d49..159ab0c7c 100644 #define JUCE_GUI_BASICS_INCLUDE_XHEADERS 1 #include "../utility/juce_IncludeModuleHeaders.h" -@@ -286,7 +278,7 @@ private: +@@ -295,7 +287,7 @@ private: public: //============================================================================== @@ -35,7 +35,7 @@ index c87b97d49..159ab0c7c 100644 : hostCallback (cb), processor (af) { -@@ -314,41 +306,41 @@ public: +@@ -326,41 +318,41 @@ public: juceParameters.update (*processor, false); memset (&vstEffect, 0, sizeof (vstEffect)); @@ -98,7 +98,7 @@ index c87b97d49..159ab0c7c 100644 #endif activePlugins.add (this); -@@ -392,7 +384,7 @@ public: +@@ -404,7 +396,7 @@ public: } } @@ -107,7 +107,7 @@ index c87b97d49..159ab0c7c 100644 template void internalProcessReplacing (FloatType** inputs, FloatType** outputs, -@@ -527,7 +519,7 @@ public: +@@ -539,7 +531,7 @@ public: // Send VST events to the host. if (hostCallback != nullptr) @@ -116,7 +116,7 @@ index c87b97d49..159ab0c7c 100644 #elif JUCE_DEBUG /* This assertion is caused when you've added some events to the midiMessages array in your processBlock() method, which usually means -@@ -556,7 +548,7 @@ public: +@@ -568,7 +560,7 @@ public: internalProcessReplacing (inputs, outputs, sampleFrames, floatTempBuffers); } @@ -125,7 +125,7 @@ index c87b97d49..159ab0c7c 100644 { getWrapper (vstInterface)->processReplacing (inputs, outputs, sampleFrames); } -@@ -567,7 +559,7 @@ public: +@@ -579,7 +571,7 @@ public: internalProcessReplacing (inputs, outputs, sampleFrames, doubleTempBuffers); } @@ -134,7 +134,7 @@ index c87b97d49..159ab0c7c 100644 { getWrapper (vstInterface)->processDoubleReplacing (inputs, outputs, sampleFrames); } -@@ -579,7 +571,7 @@ public: +@@ -591,7 +583,7 @@ public: { isProcessing = true; @@ -143,7 +143,7 @@ index c87b97d49..159ab0c7c 100644 floatTempBuffers .channels.calloc (numInAndOutChannels); doubleTempBuffers.channels.calloc (numInAndOutChannels); -@@ -598,16 +590,16 @@ public: +@@ -610,16 +602,16 @@ public: midiEvents.ensureSize (2048); midiEvents.clear(); @@ -163,7 +163,7 @@ index c87b97d49..159ab0c7c 100644 } if (getHostType().isAbletonLive() -@@ -621,7 +613,7 @@ public: +@@ -633,7 +625,7 @@ public: hostCmd.commandSize = sizeof (int); hostCmd.flags = AbletonLiveHostSpecific::KCantBeSuspended; @@ -172,7 +172,7 @@ index c87b97d49..159ab0c7c 100644 } #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect -@@ -648,28 +640,28 @@ public: +@@ -660,28 +652,28 @@ public: //============================================================================== bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) override { @@ -212,7 +212,7 @@ index c87b97d49..159ab0c7c 100644 } else { -@@ -677,34 +669,34 @@ public: +@@ -689,34 +681,34 @@ public: info.timeSigDenominator = 4; } @@ -269,7 +269,7 @@ index c87b97d49..159ab0c7c 100644 } info.frameRate = rate; -@@ -716,14 +708,14 @@ public: +@@ -728,14 +720,14 @@ public: info.editOriginTime = 0; } @@ -290,7 +290,7 @@ index c87b97d49..159ab0c7c 100644 } else { -@@ -743,7 +735,7 @@ public: +@@ -755,7 +747,7 @@ public: return 0.0f; } @@ -299,7 +299,7 @@ index c87b97d49..159ab0c7c 100644 { return getWrapper (vstInterface)->getParameter (index); } -@@ -759,7 +751,7 @@ public: +@@ -771,7 +763,7 @@ public: } } @@ -308,7 +308,7 @@ index c87b97d49..159ab0c7c 100644 { getWrapper (vstInterface)->setParameter (index, value); } -@@ -773,19 +765,19 @@ public: +@@ -785,19 +777,19 @@ public: } if (hostCallback != nullptr) @@ -331,7 +331,7 @@ index c87b97d49..159ab0c7c 100644 } void parameterValueChanged (int, float newValue) override -@@ -798,7 +790,7 @@ public: +@@ -810,7 +802,7 @@ public: void audioProcessorChanged (AudioProcessor*) override { @@ -340,7 +340,7 @@ index c87b97d49..159ab0c7c 100644 triggerAsyncUpdate(); } -@@ -806,12 +798,12 @@ public: +@@ -818,12 +810,12 @@ public: { if (hostCallback != nullptr) { @@ -356,7 +356,7 @@ index c87b97d49..159ab0c7c 100644 { if (processor->isMidiEffect()) return false; -@@ -820,9 +812,9 @@ public: +@@ -832,9 +824,9 @@ public: // fill with default properties.flags = 0; @@ -369,7 +369,7 @@ index c87b97d49..159ab0c7c 100644 if ((channelIdx = processor->getOffsetInBusBufferForAbsoluteChannelIndex (direction, index, busIdx)) >= 0) { -@@ -830,8 +822,8 @@ public: +@@ -842,8 +834,8 @@ public: auto& channelSet = bus.getCurrentLayout(); auto channelType = channelSet.getTypeOfChannel (channelIdx); @@ -380,7 +380,7 @@ index c87b97d49..159ab0c7c 100644 String label = bus.getName(); #ifdef JucePlugin_PreferredChannelConfigurations -@@ -841,8 +833,8 @@ public: +@@ -853,8 +845,8 @@ public: label += " " + AudioChannelSet::getAbbreviatedChannelTypeName (channelType); #endif @@ -391,7 +391,7 @@ index c87b97d49..159ab0c7c 100644 if (channelType == AudioChannelSet::left || channelType == AudioChannelSet::leftSurround -@@ -852,7 +844,7 @@ public: +@@ -864,7 +856,7 @@ public: || channelType == AudioChannelSet::topRearLeft || channelType == AudioChannelSet::leftSurroundRear || channelType == AudioChannelSet::wideLeft) @@ -400,7 +400,7 @@ index c87b97d49..159ab0c7c 100644 return true; } -@@ -887,15 +879,15 @@ public: +@@ -899,15 +891,15 @@ public: void setHasEditorFlag (bool shouldSetHasEditor) { @@ -419,7 +419,7 @@ index c87b97d49..159ab0c7c 100644 } void createEditorComp() -@@ -962,59 +954,59 @@ public: +@@ -974,59 +966,59 @@ public: switch (opCode) { @@ -527,7 +527,25 @@ index c87b97d49..159ab0c7c 100644 { wrapper->dispatcher (opCode, args); delete wrapper; -@@ -1214,13 +1206,13 @@ public: +@@ -1074,7 +1066,7 @@ public: + + void paint (Graphics&) override {} + +- void getEditorBounds (Vst2::ERect& bounds) ++ void getEditorBounds (Vst2::VstEditorBounds& bounds) + { + auto b = getSizeToContainChild(); + bounds = convertToHostBounds ({ 0, 0, (int16) b.getHeight(), (int16) b.getWidth() }); +@@ -1230,20 +1222,20 @@ public: + void resizeHostWindow (int newWidth, int newHeight) + { + auto rect = convertToHostBounds ({ 0, 0, (int16) newHeight, (int16) newWidth }); +- newWidth = rect.right - rect.left; +- newHeight = rect.bottom - rect.top; ++ newWidth = rect.rightmost - rect.leftmost; ++ newHeight = rect.lower - rect.upper; + + bool sizeWasSuccessful = false; if (auto host = wrapper.hostCallback) { @@ -543,7 +561,30 @@ index c87b97d49..159ab0c7c 100644 newWidth, newHeight, nullptr, 0) != 0); } } -@@ -1376,12 +1368,12 @@ public: +@@ -1365,17 +1357,17 @@ public: + #endif + + //============================================================================== +- static Vst2::ERect convertToHostBounds (const Vst2::ERect& rect) ++ static Vst2::VstEditorBounds convertToHostBounds (const Vst2::VstEditorBounds& rect) + { + auto desktopScale = Desktop::getInstance().getGlobalScaleFactor(); + + if (approximatelyEqual (desktopScale, 1.0f)) + return rect; + +- return { (int16) roundToInt (rect.top * desktopScale), +- (int16) roundToInt (rect.left * desktopScale), +- (int16) roundToInt (rect.bottom * desktopScale), +- (int16) roundToInt (rect.right * desktopScale) }; ++ return { (int16) roundToInt (rect.upper * desktopScale), ++ (int16) roundToInt (rect.leftmost * desktopScale), ++ (int16) roundToInt (rect.lower * desktopScale), ++ (int16) roundToInt (rect.rightmost * desktopScale)}; + } + + //============================================================================== +@@ -1404,12 +1396,12 @@ public: //============================================================================== private: @@ -557,8 +598,8 @@ index c87b97d49..159ab0c7c 100644 + && (int32) hostCallback (&vstEffect, Vst2::hostOpcodeGetCurrentAudioProcessingLevel, 0, 0, nullptr, 0) == 4; } - static inline int32 convertHexVersionToDecimal (const unsigned int hexVersion) -@@ -1449,8 +1441,8 @@ private: + static int32 convertHexVersionToDecimal (const unsigned int hexVersion) +@@ -1477,8 +1469,8 @@ private: tmpBuffers.release(); if (processor != nullptr) @@ -569,7 +610,7 @@ index c87b97d49..159ab0c7c 100644 } void deleteTempChannels() -@@ -1610,7 +1602,7 @@ private: +@@ -1638,7 +1630,7 @@ private: if (editorComp != nullptr) { editorComp->getEditorBounds (editorBounds); @@ -578,7 +619,7 @@ index c87b97d49..159ab0c7c 100644 return (pointer_sized_int) &editorBounds; } -@@ -1700,7 +1692,7 @@ private: +@@ -1728,7 +1720,7 @@ private: pointer_sized_int handlePreAudioProcessingEvents (VstOpCodeArguments args) { #if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect @@ -587,7 +628,7 @@ index c87b97d49..159ab0c7c 100644 return 1; #else ignoreUnused (args); -@@ -1751,12 +1743,12 @@ private: +@@ -1779,12 +1771,12 @@ private: pointer_sized_int handleGetInputPinProperties (VstOpCodeArguments args) { @@ -602,7 +643,7 @@ index c87b97d49..159ab0c7c 100644 } pointer_sized_int handleGetPlugInCategory (VstOpCodeArguments) -@@ -1766,8 +1758,8 @@ private: +@@ -1794,8 +1786,8 @@ private: pointer_sized_int handleSetSpeakerConfiguration (VstOpCodeArguments args) { @@ -613,7 +654,7 @@ index c87b97d49..159ab0c7c 100644 if (processor->isMidiEffect()) return 0; -@@ -1778,29 +1770,29 @@ private: +@@ -1806,29 +1798,29 @@ private: if (pluginInput != nullptr && pluginInput->type >= 0) { // inconsistent request? @@ -649,7 +690,7 @@ index c87b97d49..159ab0c7c 100644 layouts.getChannelSet (false, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput); #ifdef JucePlugin_PreferredChannelConfigurations -@@ -1848,7 +1840,7 @@ private: +@@ -1876,7 +1868,7 @@ private: && args.value == (int32) JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's')) return handleSetContentScaleFactor (args.opt); @@ -658,7 +699,7 @@ index c87b97d49..159ab0c7c 100644 return handleCockosGetParameterText (args.value, args.ptr, args.opt); if (auto callbackHandler = dynamic_cast (processor)) -@@ -1943,7 +1935,7 @@ private: +@@ -1971,7 +1963,7 @@ private: pointer_sized_int handleGetVstInterfaceVersion (VstOpCodeArguments) { @@ -667,7 +708,7 @@ index c87b97d49..159ab0c7c 100644 } pointer_sized_int handleGetCurrentMidiProgram (VstOpCodeArguments) -@@ -1953,8 +1945,8 @@ private: +@@ -1981,8 +1973,8 @@ private: pointer_sized_int handleGetSpeakerConfiguration (VstOpCodeArguments args) { @@ -678,7 +719,7 @@ index c87b97d49..159ab0c7c 100644 if (pluginHasSidechainsOrAuxs() || processor->isMidiEffect()) return false; -@@ -1962,10 +1954,10 @@ private: +@@ -1990,10 +1982,10 @@ private: auto inputLayout = processor->getChannelLayoutOfBus (true, 0); auto outputLayout = processor->getChannelLayoutOfBus (false, 0); @@ -692,7 +733,7 @@ index c87b97d49..159ab0c7c 100644 *pluginInput = cachedInArrangement. getData(); *pluginOutput = cachedOutArrangement.getData(); -@@ -1987,7 +1979,7 @@ private: +@@ -2015,7 +2007,7 @@ private: { if (processor != nullptr) { @@ -701,7 +742,7 @@ index c87b97d49..159ab0c7c 100644 && processor->supportsDoublePrecisionProcessing()) ? AudioProcessor::doublePrecision : AudioProcessor::singlePrecision); -@@ -2061,16 +2053,16 @@ private: +@@ -2089,16 +2081,16 @@ private: } //============================================================================== @@ -721,7 +762,7 @@ index c87b97d49..159ab0c7c 100644 MidiBuffer midiEvents; VSTMidiEventList outgoingEvents; -@@ -2095,7 +2087,7 @@ private: +@@ -2123,7 +2115,7 @@ private: VstTempBuffers doubleTempBuffers; int maxNumInChannels = 0, maxNumOutChannels = 0; @@ -730,7 +771,7 @@ index c87b97d49..159ab0c7c 100644 ThreadLocalValue inParameterChangedCallback; -@@ -2107,7 +2099,7 @@ private: +@@ -2135,7 +2127,7 @@ private: //============================================================================== namespace { @@ -739,7 +780,7 @@ index c87b97d49..159ab0c7c 100644 { JUCE_AUTORELEASEPOOL { -@@ -2115,7 +2107,7 @@ namespace +@@ -2143,7 +2135,7 @@ namespace try { @@ -748,7 +789,7 @@ index c87b97d49..159ab0c7c 100644 { #if JUCE_LINUX MessageManagerLock mmLock; -@@ -2152,8 +2144,8 @@ namespace +@@ -2180,8 +2172,8 @@ namespace // Mac startup code.. #if JUCE_MAC @@ -759,7 +800,7 @@ index c87b97d49..159ab0c7c 100644 { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; -@@ -2161,8 +2153,8 @@ namespace +@@ -2189,8 +2181,8 @@ namespace return pluginEntryPoint (audioMaster); } @@ -770,7 +811,7 @@ index c87b97d49..159ab0c7c 100644 { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; -@@ -2174,8 +2166,8 @@ namespace +@@ -2202,8 +2194,8 @@ namespace // Linux startup code.. #elif JUCE_LINUX @@ -781,7 +822,7 @@ index c87b97d49..159ab0c7c 100644 { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; -@@ -2183,8 +2175,8 @@ namespace +@@ -2211,8 +2203,8 @@ namespace return pluginEntryPoint (audioMaster); } @@ -792,7 +833,7 @@ index c87b97d49..159ab0c7c 100644 { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; -@@ -2199,7 +2191,7 @@ namespace +@@ -2227,7 +2219,7 @@ namespace // Win32 startup code.. #else @@ -801,7 +842,7 @@ index c87b97d49..159ab0c7c 100644 { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; -@@ -2207,7 +2199,7 @@ namespace +@@ -2235,7 +2227,7 @@ namespace } #ifndef JUCE_64BIT // (can't compile this on win64, but it's not needed anyway with VST2.4) @@ -811,10 +852,10 @@ index c87b97d49..159ab0c7c 100644 PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; diff --git a/modules/juce_audio_processors/format_types/juce_VSTCommon.h b/modules/juce_audio_processors/format_types/juce_VSTCommon.h -index 25436f9bf..0862f830f 100644 +index 150256989..6d9454c62 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTCommon.h +++ b/modules/juce_audio_processors/format_types/juce_VSTCommon.h -@@ -58,25 +58,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -65,25 +65,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e static AudioChannelSet vstArrangementTypeToChannelSet (int32 arr, int fallbackNumChannels) { @@ -859,7 +900,7 @@ index 25436f9bf..0862f830f 100644 { if (m->vst2 == arr) { -@@ -92,53 +92,53 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -99,53 +99,53 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e return AudioChannelSet::discreteChannels (fallbackNumChannels); } @@ -939,7 +980,7 @@ index 25436f9bf..0862f830f 100644 speaker.type = getSpeakerType (channels.getTypeOfChannel (i)); } } -@@ -152,7 +152,7 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -159,7 +159,7 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e clear(); } @@ -948,7 +989,7 @@ index 25436f9bf..0862f830f 100644 { operator= (vstConfig); } -@@ -171,29 +171,29 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -178,29 +178,29 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e VstSpeakerConfigurationHolder (const AudioChannelSet& channels) { auto numberOfChannels = channels.size(); @@ -987,7 +1028,7 @@ index 25436f9bf..0862f830f 100644 dst.speakers[i] = vstConfig.speakers[i]; return *this; -@@ -207,17 +207,17 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -214,17 +214,17 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e return *this; } @@ -1010,7 +1051,7 @@ index 25436f9bf..0862f830f 100644 storage.malloc (1, arrangementSize); return storage.get(); -@@ -225,10 +225,10 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -232,10 +232,10 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e void clear() { @@ -1024,7 +1065,7 @@ index 25436f9bf..0862f830f 100644 } }; -@@ -236,36 +236,36 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -243,36 +243,36 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e { static const Mapping mappings[] = { @@ -1091,7 +1132,7 @@ index 25436f9bf..0862f830f 100644 }; return mappings; -@@ -275,25 +275,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -282,25 +282,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e { static const std::map speakerTypeMap = { @@ -1136,7 +1177,7 @@ index 25436f9bf..0862f830f 100644 }; if (speakerTypeMap.find (type) == speakerTypeMap.end()) -@@ -306,25 +306,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e +@@ -313,25 +313,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e { switch (type) { @@ -1183,10 +1224,10 @@ index 25436f9bf..0862f830f 100644 diff --git a/modules/juce_audio_processors/format_types/juce_VSTInterface.h b/modules/juce_audio_processors/format_types/juce_VSTInterface.h new file mode 100644 -index 000000000..a2f09aae9 +index 000000000..1b3eb7d08 --- /dev/null +++ b/modules/juce_audio_processors/format_types/juce_VSTInterface.h -@@ -0,0 +1,529 @@ +@@ -0,0 +1,532 @@ +/* + ============================================================================== + @@ -1213,6 +1254,7 @@ index 000000000..a2f09aae9 + ============================================================================== +*/ + ++#ifndef JUCE_VSTINTERFACE_H_INCLUDED +#define JUCE_VSTINTERFACE_H_INCLUDED + +using namespace juce; @@ -1694,7 +1736,7 @@ index 000000000..a2f09aae9 + + @tags{Audio} +*/ -+struct vst2FxBank ++struct fxBank +{ + int32 magic1; + int32 size; @@ -1716,11 +1758,13 @@ index 000000000..a2f09aae9 +#else + #pragma pack(pop) +#endif ++ ++#endif // JUCE_VSTINTERFACE_H_INCLUDED diff --git a/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h b/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h -index 85c163d59..a39d22f93 100644 +index 49f0d3b3b..6e99d63d0 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h +++ b/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h -@@ -50,7 +50,7 @@ public: +@@ -57,7 +57,7 @@ public: numEventsUsed = 0; if (events != nullptr) @@ -1729,7 +1773,7 @@ index 85c163d59..a39d22f93 100644 } void addEvent (const void* const midiData, int numBytes, int frameOffset) -@@ -59,50 +59,50 @@ public: +@@ -66,50 +66,50 @@ public: void* const ptr = (Vst2::VstMidiEvent*) (events->events [numEventsUsed]); auto* const e = (Vst2::VstMidiEvent*) ptr; @@ -1803,7 +1847,7 @@ index 85c163d59..a39d22f93 100644 { const Vst2::VstEvent* const e = events->events[i]; -@@ -110,17 +110,17 @@ public: +@@ -117,17 +117,17 @@ public: { const void* const ptr = events->events[i]; @@ -1828,7 +1872,7 @@ index 85c163d59..a39d22f93 100644 } } } -@@ -161,25 +161,25 @@ public: +@@ -168,25 +168,25 @@ public: } //============================================================================== @@ -1862,10 +1906,10 @@ index 85c163d59..a39d22f93 100644 std::free (e); diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -index bdb285290..7dff1e70f 100644 +index 2135d329d..e32d01ed0 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -@@ -30,7 +30,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant") +@@ -37,7 +37,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wzero-as-null-pointer-constant") JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996) #define VST_FORCE_DEPRECATED 0 @@ -1873,7 +1917,7 @@ index bdb285290..7dff1e70f 100644 namespace Vst2 { -@@ -39,8 +38,7 @@ namespace Vst2 +@@ -46,8 +45,7 @@ namespace Vst2 // paths or use the "VST (Legacy) SDK Folder" field in the Projucer. The VST2 // SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or older) VST3 // SDK or JUCE version 5.3.2. @@ -1883,7 +1927,7 @@ index bdb285290..7dff1e70f 100644 } #include "juce_VSTCommon.h" -@@ -66,7 +64,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4355) +@@ -76,7 +74,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4355) #endif #ifndef JUCE_VST_WRAPPER_INVOKE_MAIN @@ -1892,7 +1936,7 @@ index bdb285290..7dff1e70f 100644 #endif //============================================================================== -@@ -206,8 +204,8 @@ namespace +@@ -216,8 +214,8 @@ namespace } //============================================================================== @@ -1903,7 +1947,7 @@ index bdb285290..7dff1e70f 100644 //============================================================================== // Change this to disable logging of various VST activities -@@ -675,9 +673,9 @@ struct ModuleHandle : public ReferenceCountedObject +@@ -685,9 +683,9 @@ struct ModuleHandle : public ReferenceCountedObject module.close(); } @@ -1915,7 +1959,7 @@ index bdb285290..7dff1e70f 100644 } #if JUCE_WINDOWS -@@ -801,9 +799,9 @@ struct ModuleHandle : public ReferenceCountedObject +@@ -811,9 +809,9 @@ struct ModuleHandle : public ReferenceCountedObject } } @@ -1927,7 +1971,7 @@ index bdb285290..7dff1e70f 100644 } #endif -@@ -855,7 +853,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -865,7 +863,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { const ScopedLock sl (pluginInstance.lock); @@ -1936,7 +1980,7 @@ index bdb285290..7dff1e70f 100644 } return 0.0f; -@@ -867,8 +865,8 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -877,8 +875,8 @@ struct VSTPluginInstance : public AudioPluginInstance, { const ScopedLock sl (pluginInstance.lock); @@ -1947,7 +1991,7 @@ index bdb285290..7dff1e70f 100644 } } -@@ -901,7 +899,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -911,7 +909,7 @@ struct VSTPluginInstance : public AudioPluginInstance, if (valueType != nullptr || ! vstValueStrings.isEmpty()) return getText (getValue(), 1024); @@ -1956,7 +2000,7 @@ index bdb285290..7dff1e70f 100644 } float getDefaultValue() const override -@@ -913,7 +911,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -923,7 +921,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (name.isEmpty()) return pluginInstance.getTextForOpcode (getParameterIndex(), @@ -1965,7 +2009,7 @@ index bdb285290..7dff1e70f 100644 if (name.length() <= maximumStringLength) return name; -@@ -933,7 +931,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -943,7 +941,7 @@ struct VSTPluginInstance : public AudioPluginInstance, String getLabel() const override { return label.isEmpty() ? pluginInstance.getTextForOpcode (getParameterIndex(), @@ -1974,7 +2018,7 @@ index bdb285290..7dff1e70f 100644 : label; } -@@ -975,7 +973,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -985,7 +983,7 @@ struct VSTPluginInstance : public AudioPluginInstance, const VSTXMLInfo::ValueType* const valueType; }; @@ -1983,7 +2027,7 @@ index bdb285290..7dff1e70f 100644 double sampleRateToUse, int blockSizeToUse) : AudioPluginInstance (ioConfig), vstEffect (effect), -@@ -998,13 +996,13 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1008,13 +1006,13 @@ struct VSTPluginInstance : public AudioPluginInstance, { AudioProcessorParameterGroup newParameterTree; @@ -1999,7 +2043,7 @@ index bdb285290..7dff1e70f 100644 bool isDiscrete = false; int numSteps = AudioProcessor::getDefaultNumParameterSteps(); bool isBoolSwitch = false; -@@ -1072,7 +1070,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1082,7 +1080,7 @@ struct VSTPluginInstance : public AudioPluginInstance, ~VSTPluginInstance() override { @@ -2008,7 +2052,7 @@ index bdb285290..7dff1e70f 100644 { struct VSTDeleter : public CallbackMessage { -@@ -1105,7 +1103,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1115,7 +1113,7 @@ struct VSTPluginInstance : public AudioPluginInstance, void cleanup() { @@ -2017,7 +2061,7 @@ index bdb285290..7dff1e70f 100644 { #if JUCE_MAC if (vstModule->resFileId != 0) -@@ -1130,16 +1128,16 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1140,16 +1138,16 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (auto* newEffect = constructEffect (newModule)) { @@ -2039,7 +2083,7 @@ index bdb285290..7dff1e70f 100644 BusesProperties ioConfig = queryBusIO (newEffect); return new VSTPluginInstance (newModule, ioConfig, newEffect, initialSampleRate, blockSize); -@@ -1155,7 +1153,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1165,7 +1163,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { char buffer[512] = { 0 }; @@ -2048,7 +2092,7 @@ index bdb285290..7dff1e70f 100644 desc.descriptiveName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim(); -@@ -1172,7 +1170,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1182,7 +1180,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { char buffer[512] = { 0 }; @@ -2057,7 +2101,7 @@ index bdb285290..7dff1e70f 100644 desc.manufacturerName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim(); } -@@ -1186,7 +1184,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1196,7 +1194,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (vstEffect != nullptr) { @@ -2066,7 +2110,7 @@ index bdb285290..7dff1e70f 100644 initialise (initialSampleRate, initialBlockSize); return true; } -@@ -1212,25 +1210,25 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1222,25 +1220,25 @@ struct VSTPluginInstance : public AudioPluginInstance, setRateAndBufferSizeDetails (initialSampleRate, initialBlockSize); @@ -2099,7 +2143,7 @@ index bdb285290..7dff1e70f 100644 if (getVstCategory() != Vst2::kPlugCategShell) // (workaround for Waves 5 plugins which crash during this call) updateStoredProgramNames(); -@@ -1241,7 +1239,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1251,7 +1249,7 @@ struct VSTPluginInstance : public AudioPluginInstance, usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul; #endif @@ -2108,7 +2152,7 @@ index bdb285290..7dff1e70f 100644 } void* getPlatformSpecificData() override { return vstEffect; } -@@ -1252,7 +1250,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1262,7 +1260,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { char buffer[512] = { 0 }; @@ -2117,7 +2161,7 @@ index bdb285290..7dff1e70f 100644 { String productName = String::createStringFromData (buffer, (int) sizeof (buffer)); -@@ -1266,7 +1264,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1276,7 +1274,7 @@ struct VSTPluginInstance : public AudioPluginInstance, int getUID() const { @@ -2126,7 +2170,7 @@ index bdb285290..7dff1e70f 100644 if (uid == 0) uid = vstModule->file.hashCode(); -@@ -1279,10 +1277,10 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1289,10 +1287,10 @@ struct VSTPluginInstance : public AudioPluginInstance, if (vstEffect == nullptr) return 0.0; @@ -2139,7 +2183,7 @@ index bdb285290..7dff1e70f 100644 auto sampleRate = getSampleRate(); // remain backward compatible with old JUCE plug-ins: anything larger -@@ -1302,11 +1300,11 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1312,11 +1310,11 @@ struct VSTPluginInstance : public AudioPluginInstance, bool producesMidi() const override { return pluginCanDo ("sendVstMidiEvent") > 0; } bool supportsMPE() const override { return pluginCanDo ("MPE") > 0; } @@ -2154,7 +2198,7 @@ index bdb285290..7dff1e70f 100644 //============================================================================== void prepareToPlay (double rate, int samplesPerBlockExpected) override -@@ -1321,17 +1319,17 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1331,17 +1329,17 @@ struct VSTPluginInstance : public AudioPluginInstance, SpeakerMappings::VstSpeakerConfigurationHolder inArr (getChannelLayoutOfBus (true, 0)); SpeakerMappings::VstSpeakerConfigurationHolder outArr (getChannelLayoutOfBus (false, 0)); @@ -2180,7 +2224,7 @@ index bdb285290..7dff1e70f 100644 initialise (rate, samplesPerBlockExpected); -@@ -1346,18 +1344,18 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1356,18 +1354,18 @@ struct VSTPluginInstance : public AudioPluginInstance, incomingMidi.clear(); @@ -2205,7 +2249,7 @@ index bdb285290..7dff1e70f 100644 tmpBufferFloat .setSize (maxChannels, samplesPerBlockExpected); tmpBufferDouble.setSize (maxChannels, samplesPerBlockExpected); -@@ -1365,7 +1363,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1375,7 +1373,7 @@ struct VSTPluginInstance : public AudioPluginInstance, channelBufferFloat .calloc (static_cast (maxChannels)); channelBufferDouble.calloc (static_cast (maxChannels)); @@ -2214,7 +2258,7 @@ index bdb285290..7dff1e70f 100644 if (! isPowerOn) setPower (true); -@@ -1381,9 +1379,9 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1391,9 +1389,9 @@ struct VSTPluginInstance : public AudioPluginInstance, } } @@ -2226,7 +2270,7 @@ index bdb285290..7dff1e70f 100644 } } -@@ -1391,7 +1389,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1401,7 +1399,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (initialised) { @@ -2235,7 +2279,7 @@ index bdb285290..7dff1e70f 100644 setPower (false); } -@@ -1444,8 +1442,8 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1454,8 +1452,8 @@ struct VSTPluginInstance : public AudioPluginInstance, //============================================================================== bool supportsDoublePrecisionProcessing() const override { @@ -2246,7 +2290,7 @@ index bdb285290..7dff1e70f 100644 } AudioProcessorParameter* getBypassParameter() const override { return vstSupportsBypass ? bypassParam.get() : nullptr; } -@@ -1463,15 +1461,15 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1473,15 +1471,15 @@ struct VSTPluginInstance : public AudioPluginInstance, if (numInputBuses > 1 || numOutputBuses > 1) return (layouts == getBusesLayout()); @@ -2265,7 +2309,7 @@ index bdb285290..7dff1e70f 100644 #endif AudioProcessorEditor* createEditor() override; -@@ -1481,9 +1479,9 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1491,9 +1489,9 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (isValidChannel (index, true)) { @@ -2278,7 +2322,7 @@ index bdb285290..7dff1e70f 100644 } return {}; -@@ -1494,9 +1492,9 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1504,9 +1502,9 @@ struct VSTPluginInstance : public AudioPluginInstance, if (! isValidChannel (index, true)) return false; @@ -2291,7 +2335,7 @@ index bdb285290..7dff1e70f 100644 return true; } -@@ -1505,9 +1503,9 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1515,9 +1513,9 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (isValidChannel (index, false)) { @@ -2304,7 +2348,7 @@ index bdb285290..7dff1e70f 100644 } return {}; -@@ -1518,9 +1516,9 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1528,9 +1526,9 @@ struct VSTPluginInstance : public AudioPluginInstance, if (! isValidChannel (index, false)) return false; @@ -2317,7 +2361,7 @@ index bdb285290..7dff1e70f 100644 return true; } -@@ -1535,12 +1533,12 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1545,12 +1543,12 @@ struct VSTPluginInstance : public AudioPluginInstance, int getNumPrograms() override { return vstEffect != nullptr ? jmax (0, vstEffect->numPrograms) : 0; } // NB: some plugs return negative numbers from this function. @@ -2332,7 +2376,7 @@ index bdb285290..7dff1e70f 100644 } const String getProgramName (int index) override -@@ -1554,7 +1552,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1564,7 +1562,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { char nm[264] = { 0 }; @@ -2341,7 +2385,7 @@ index bdb285290..7dff1e70f 100644 return String::fromUTF8 (nm).trim(); } } -@@ -1567,7 +1565,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1577,7 +1575,7 @@ struct VSTPluginInstance : public AudioPluginInstance, if (index >= 0 && index == getCurrentProgram()) { if (getNumPrograms() > 0 && newName != getCurrentProgramName()) @@ -2350,7 +2394,7 @@ index bdb285290..7dff1e70f 100644 } else { -@@ -1585,7 +1583,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1595,7 +1593,7 @@ struct VSTPluginInstance : public AudioPluginInstance, //============================================================================== void timerCallback() override { @@ -2359,7 +2403,7 @@ index bdb285290..7dff1e70f 100644 stopTimer(); } -@@ -1599,7 +1597,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1609,7 +1607,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { switch (opcode) { @@ -2368,7 +2412,7 @@ index bdb285290..7dff1e70f 100644 if (auto* param = getParameters()[index]) param->sendValueChangedMessageToListeners (opt); else -@@ -1607,23 +1605,23 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1617,23 +1615,23 @@ struct VSTPluginInstance : public AudioPluginInstance, break; @@ -2406,7 +2450,7 @@ index bdb285290..7dff1e70f 100644 if (auto* param = getParameters()[index]) param->beginChangeGesture(); else -@@ -1631,7 +1629,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1641,7 +1639,7 @@ struct VSTPluginInstance : public AudioPluginInstance, break; @@ -2415,7 +2459,7 @@ index bdb285290..7dff1e70f 100644 if (auto* param = getParameters()[index]) param->endChangeGesture(); else -@@ -1639,28 +1637,28 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1649,28 +1647,28 @@ struct VSTPluginInstance : public AudioPluginInstance, break; @@ -2464,7 +2508,7 @@ index bdb285290..7dff1e70f 100644 break; default: -@@ -1675,19 +1673,19 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1685,19 +1683,19 @@ struct VSTPluginInstance : public AudioPluginInstance, { switch (opcode) { @@ -2495,7 +2539,7 @@ index bdb285290..7dff1e70f 100644 default: DBG ("*** Unhandled VST Callback: " + String ((int) opcode)); -@@ -1716,7 +1714,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1726,7 +1724,7 @@ struct VSTPluginInstance : public AudioPluginInstance, UseResFile (vstModule->resFileId); #endif @@ -2504,7 +2548,7 @@ index bdb285290..7dff1e70f 100644 #if JUCE_MAC auto newResFile = CurResFile(); -@@ -1922,14 +1920,14 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1932,14 +1930,14 @@ struct VSTPluginInstance : public AudioPluginInstance, return true; } @@ -2521,7 +2565,7 @@ index bdb285290..7dff1e70f 100644 if (data != nullptr && bytes <= (size_t) maxSizeMB * 1024 * 1024) { -@@ -1947,7 +1945,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1957,7 +1955,7 @@ struct VSTPluginInstance : public AudioPluginInstance, { if (size > 0 && usesChunks()) { @@ -2530,7 +2574,7 @@ index bdb285290..7dff1e70f 100644 if (! isPreset) updateStoredProgramNames(); -@@ -1958,7 +1956,7 @@ struct VSTPluginInstance : public AudioPluginInstance, +@@ -1968,7 +1966,7 @@ struct VSTPluginInstance : public AudioPluginInstance, return false; } @@ -2539,7 +2583,7 @@ index bdb285290..7dff1e70f 100644 ModuleHandle::Ptr vstModule; std::unique_ptr extraFunctions; -@@ -1981,7 +1979,7 @@ private: +@@ -1991,7 +1989,7 @@ private: currentValue = (newValue != 0.0f); if (parent.vstSupportsBypass) @@ -2548,7 +2592,7 @@ index bdb285290..7dff1e70f 100644 } float getValueForText (const String& text) const override -@@ -2028,7 +2026,7 @@ private: +@@ -2038,7 +2036,7 @@ private: CriticalSection midiInLock; MidiBuffer incomingMidi; VSTMidiEventList midiEventsToSend; @@ -2557,7 +2601,7 @@ index bdb285290..7dff1e70f 100644 AudioBuffer tmpBufferFloat; HeapBlock channelBufferFloat; -@@ -2065,7 +2063,7 @@ private: +@@ -2075,7 +2073,7 @@ private: if (auto* app = JUCEApplicationBase::getInstance()) hostName = app->getApplicationName(); @@ -2566,7 +2610,7 @@ index bdb285290..7dff1e70f 100644 return 1; } -@@ -2086,7 +2084,7 @@ private: +@@ -2096,7 +2094,7 @@ private: #if JUCE_MAC if (getActiveEditor() != nullptr) @@ -2575,7 +2619,7 @@ index bdb285290..7dff1e70f 100644 #endif Timer::callPendingTimersSynchronously(); -@@ -2121,9 +2119,9 @@ private: +@@ -2131,9 +2129,9 @@ private: } //============================================================================== @@ -2587,7 +2631,7 @@ index bdb285290..7dff1e70f 100644 try { const IdleCallRecursionPreventer icrp; -@@ -2140,10 +2138,10 @@ private: +@@ -2150,10 +2148,10 @@ private: JUCE_VST_WRAPPER_INVOKE_MAIN } @@ -2601,7 +2645,7 @@ index bdb285290..7dff1e70f 100644 _fpreset(); // some dodgy plugs mess around with this } -@@ -2158,11 +2156,11 @@ private: +@@ -2168,11 +2166,11 @@ private: return effect; } @@ -2615,7 +2659,7 @@ index bdb285290..7dff1e70f 100644 return returnValue; // Workaround for old broken JUCE plug-ins which would return an invalid -@@ -2173,14 +2171,14 @@ private: +@@ -2183,14 +2181,14 @@ private: // plug-in is reporting. if (! pluginHasDefaultChannelLayouts (effect)) { @@ -2634,7 +2678,7 @@ index bdb285290..7dff1e70f 100644 auto* inArr = inArrBlock.get(); auto* outArr = outArrBlock.get(); -@@ -2191,35 +2189,35 @@ private: +@@ -2201,35 +2199,35 @@ private: for (int dir = 0; dir < 2; ++dir) { const bool isInput = (dir == 0); @@ -2679,7 +2723,7 @@ index bdb285290..7dff1e70f 100644 } // no buses? -@@ -2227,8 +2225,8 @@ private: +@@ -2237,8 +2235,8 @@ private: { String busName = (isInput ? "Input" : "Output"); @@ -2690,7 +2734,7 @@ index bdb285290..7dff1e70f 100644 if (arr != nullptr) layout = SpeakerMappings::vstArrangementTypeToChannelSet (*arr); -@@ -2242,9 +2240,9 @@ private: +@@ -2252,9 +2250,9 @@ private: return returnValue; } @@ -2702,7 +2746,7 @@ index bdb285290..7dff1e70f 100644 auto* inArr = inArrBlock.get(); auto* outArr = outArrBlock.get(); -@@ -2255,40 +2253,40 @@ private: +@@ -2265,40 +2263,40 @@ private: for (int dir = 0; dir < 2; ++dir) { const bool isInput = (dir == 0); @@ -2754,7 +2798,7 @@ index bdb285290..7dff1e70f 100644 reinterpret_cast (&inArr), &outArr, 0.0f) != 0); } -@@ -2322,57 +2320,57 @@ private: +@@ -2332,57 +2330,57 @@ private: if (currentPlayHead->getCurrentPosition (position)) { @@ -2843,7 +2887,7 @@ index bdb285290..7dff1e70f 100644 if (wantsMidiMessages) { -@@ -2383,13 +2381,13 @@ private: +@@ -2393,13 +2391,13 @@ private: midiEventsToSend.addEvent (metadata.data, metadata.numBytes, jlimit (0, numSamples - 1, metadata.samplePosition)); @@ -2859,7 +2903,7 @@ index bdb285290..7dff1e70f 100644 auto channels = channelBuffer.get(); if (numChannels < maxChannels) -@@ -2428,35 +2426,35 @@ private: +@@ -2438,35 +2436,35 @@ private: //============================================================================== inline void invokeProcessFunction (AudioBuffer& buffer, int32 sampleFrames) { @@ -2904,7 +2948,7 @@ index bdb285290..7dff1e70f 100644 vstHostTime.smpteOffset = (int32) (currentTime * 80.0 * frameRate + 0.5); } -@@ -2487,7 +2485,7 @@ private: +@@ -2497,7 +2495,7 @@ private: if (vstEffect == nullptr) return {}; @@ -2913,7 +2957,7 @@ index bdb285290..7dff1e70f 100644 char nm[256] = { 0 }; dispatch (opcode, index, 0, nm, 0); return String::createStringFromData (nm, (int) sizeof (nm)).trim(); -@@ -2501,7 +2499,7 @@ private: +@@ -2511,7 +2509,7 @@ private: { { char nm[256] = { 0 }; @@ -2922,7 +2966,7 @@ index bdb285290..7dff1e70f 100644 progName = String::createStringFromData (nm, (int) sizeof (nm)).trim(); } -@@ -2545,7 +2543,7 @@ private: +@@ -2555,7 +2553,7 @@ private: char nm[256] = { 0 }; // only do this if the plugin can't use indexed names.. @@ -2931,7 +2975,7 @@ index bdb285290..7dff1e70f 100644 { auto oldProgram = getCurrentProgram(); MemoryBlock oldSettings; -@@ -2563,7 +2561,7 @@ private: +@@ -2573,7 +2571,7 @@ private: } } @@ -2940,7 +2984,7 @@ index bdb285290..7dff1e70f 100644 { if (events != nullptr) { -@@ -2610,11 +2608,11 @@ private: +@@ -2620,11 +2618,11 @@ private: } //============================================================================== @@ -2954,7 +2998,7 @@ index bdb285290..7dff1e70f 100644 String s; -@@ -2682,7 +2680,6 @@ private: +@@ -2692,7 +2690,6 @@ private: case Vst2::kPlugCategOfflineProcess: return "Offline Process"; case Vst2::kPlugCategShell: return "Shell"; case Vst2::kPlugCategUnknown: return "Unknown"; @@ -2962,7 +3006,7 @@ index bdb285290..7dff1e70f 100644 default: break; } -@@ -2691,7 +2688,7 @@ private: +@@ -2701,7 +2698,7 @@ private: void setPower (const bool on) { @@ -2971,7 +3015,7 @@ index bdb285290..7dff1e70f 100644 isPowerOn = on; } -@@ -2758,11 +2755,11 @@ public: +@@ -2768,11 +2765,11 @@ public: activeVSTWindows.add (this); @@ -2986,7 +3030,7 @@ index bdb285290..7dff1e70f 100644 else setSize (1, 1); -@@ -2928,7 +2925,7 @@ public: +@@ -2944,7 +2941,7 @@ public: nativeScaleFactor = (float) newScaleFactor; if (pluginRespondsToDPIChanges) @@ -2995,7 +3039,7 @@ index bdb285290..7dff1e70f 100644 JUCE_MULTICHAR_CONSTANT ('P', 'r', 'e', 'S'), JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's'), nullptr, nativeScaleFactor); -@@ -2957,7 +2954,7 @@ public: +@@ -2973,7 +2970,7 @@ public: if (! reentrantGuard) { reentrantGuard = true; @@ -3004,7 +3048,7 @@ index bdb285290..7dff1e70f 100644 reentrantGuard = false; } -@@ -2989,7 +2986,7 @@ public: +@@ -3005,7 +3002,7 @@ public: activeVSTWindows.add (this); #if JUCE_MAC @@ -3013,7 +3057,7 @@ index bdb285290..7dff1e70f 100644 #endif } -@@ -3019,24 +3016,24 @@ private: +@@ -3035,24 +3032,24 @@ private: isOpen = true; @@ -3046,7 +3090,7 @@ index bdb285290..7dff1e70f 100644 if (w == 0 || h == 0) { -@@ -3067,14 +3064,14 @@ private: +@@ -3083,14 +3080,14 @@ private: if (auto* peer = getTopLevelComponent()->getPeer()) setScaleFactorAndDispatchMessage (peer->getPlatformScaleFactor()); @@ -3067,7 +3111,7 @@ index bdb285290..7dff1e70f 100644 #if JUCE_WINDOWS originalWndProc = 0; -@@ -3104,8 +3101,8 @@ private: +@@ -3120,8 +3117,8 @@ private: if (rect != nullptr) { @@ -3078,7 +3122,7 @@ index bdb285290..7dff1e70f 100644 if ((rw > 50 && rh > 50 && rw < 2000 && rh < 2000 && (! isWithin (w, rw, 2) || ! isWithin (h, rh, 2))) || ((w == 0 && rw > 0) || (h == 0 && rh > 0))) -@@ -3140,8 +3137,8 @@ private: +@@ -3156,8 +3153,8 @@ private: if (rect != nullptr) { @@ -3089,7 +3133,7 @@ index bdb285290..7dff1e70f 100644 if (w == 0 || h == 0) { -@@ -3190,7 +3187,7 @@ private: +@@ -3206,7 +3203,7 @@ private: JUCE_VST_LOG ("Closing VST UI: " + plugin.getName()); isOpen = false; @@ -3098,7 +3142,7 @@ index bdb285290..7dff1e70f 100644 stopTimer(); #if JUCE_WINDOWS -@@ -3233,11 +3230,11 @@ private: +@@ -3249,11 +3246,11 @@ private: { if (! pluginRespondsToDPIChanges) { @@ -3114,27 +3158,60 @@ index bdb285290..7dff1e70f 100644 if (! isWindowSizeCorrectForPlugin (w, h)) { -@@ -3323,8 +3320,8 @@ private: +@@ -3332,17 +3329,17 @@ private: + if (owner.isOpen) + { + owner.isOpen = false; +- owner.dispatch (Vst2::effEditClose, 0, 0, 0, 0); +- owner.dispatch (Vst2::effEditSleep, 0, 0, 0, 0); ++ owner.dispatch (Vst2::plugInOpcodeCloseEditor, 0, 0, 0, 0); ++ owner.dispatch (Vst2::plugInOpcodeSleepEditor, 0, 0, 0, 0); + } + } bool getEmbeddedViewSize (int& w, int& h) override { - Vst2::ERect* rect = nullptr; - owner.dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); +- w = rect->right - rect->left; +- h = rect->bottom - rect->top; + Vst2::VstEditorBounds* rect = nullptr; + owner.dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); - w = rect->right - rect->left; - h = rect->bottom - rect->top; ++ w = rect->rightmost - rect->leftmost; ++ h = rect->lower - rect->upper; return true; -@@ -3350,7 +3347,7 @@ private: + } + +@@ -3352,7 +3349,7 @@ private: + { + alreadyInside = true; + getTopLevelComponent()->toFront (true); +- owner.dispatch (Vst2::effEditMouse, x, y, 0, 0); ++ owner.dispatch (Vst2::plugInOpcodeGetMouse, x, y, 0, 0); + alreadyInside = false; + } + else +@@ -3366,13 +3363,13 @@ private: if (auto* peer = getPeer()) { auto pos = peer->globalToLocal (getScreenPosition()); - Vst2::ERect r; +- r.left = (int16) pos.getX(); +- r.top = (int16) pos.getY(); +- r.right = (int16) (r.left + getWidth()); +- r.bottom = (int16) (r.top + getHeight()); + Vst2::VstEditorBounds r; - r.left = (int16) pos.getX(); - r.top = (int16) pos.getY(); - r.right = (int16) (r.left + getWidth()); -@@ -3423,10 +3420,10 @@ AudioProcessorEditor* VSTPluginInstance::createEditor() ++ r.leftmost = (int16) pos.getX(); ++ r.upper = (int16) pos.getY(); ++ r.rightmost = (int16) (r.leftmost + getWidth()); ++ r.lower = (int16) (r.upper + getHeight()); + +- owner.dispatch (Vst2::effEditDraw, 0, 0, &r, 0); ++ owner.dispatch (Vst2::plugInOpcodeDrawEditor, 0, 0, &r, 0); + } + } + +@@ -3439,10 +3436,10 @@ AudioProcessorEditor* VSTPluginInstance::createEditor() //============================================================================== // entry point for all callbacks from the plugin @@ -3147,7 +3224,7 @@ index bdb285290..7dff1e70f 100644 return instance->handleCallback (opcode, index, value, ptr, opt); return VSTPluginInstance::handleGeneralCallback (opcode, index, value, ptr, opt); -@@ -3477,7 +3474,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result +@@ -3493,7 +3490,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result // Normal plugin... results.add (new PluginDescription (desc)); @@ -3156,7 +3233,7 @@ index bdb285290..7dff1e70f 100644 } else { -@@ -3485,7 +3482,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result +@@ -3501,7 +3498,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result for (;;) { char shellEffectName [256] = { 0 }; @@ -3165,7 +3242,7 @@ index bdb285290..7dff1e70f 100644 if (uid == 0) break; -@@ -3709,8 +3706,8 @@ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunct +@@ -3725,8 +3722,8 @@ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunct AudioPluginInstance* VSTPluginFormat::getPluginInstanceFromVstEffectInterface (void* aEffect) { diff --git a/libs/juce-current/patches/05_mingw-fixes.patch b/libs/juce-current/patches/05_mingw-fixes.patch new file mode 100644 index 00000000..859cdde9 --- /dev/null +++ b/libs/juce-current/patches/05_mingw-fixes.patch @@ -0,0 +1,58 @@ +diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +index 1543af1ba..c5e96d204 100644 +--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp ++++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +@@ -61,7 +61,7 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4996 4100) + #define PRAGMA_ALIGN_SUPPORTED 1 + #endif + +-#ifndef _MSC_VER ++#if ! JUCE_WINDOWS + #define __cdecl + #endif + +diff --git a/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h b/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h +index 6bea84307..baaa59f06 100644 +--- a/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h ++++ b/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h +@@ -73,11 +73,6 @@ + #define JucePlugin_Build_RTAS 0 + #endif + +-#if ! (defined (_MSC_VER) || defined (__APPLE_CPP__) || defined (__APPLE_CC__) || defined (LINUX) || defined (__linux__)) +- #undef JucePlugin_Build_VST3 +- #define JucePlugin_Build_VST3 0 +-#endif +- + //============================================================================== + #if JucePlugin_Build_LV2 && ! defined (JucePlugin_LV2URI) + #error "You need to define the JucePlugin_LV2URI value!" +diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +index e32d01ed0..c473fb85d 100644 +--- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp ++++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +@@ -61,9 +61,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4355) + #ifndef WM_APPCOMMAND + #define WM_APPCOMMAND 0x0319 + #endif +- +- extern "C" void _fpreset(); +- extern "C" void _clearfp(); + #elif ! JUCE_WINDOWS + static void _fpreset() {} + static void _clearfp() {} +diff --git a/modules/juce_core/threads/juce_WaitableEvent.h b/modules/juce_core/threads/juce_WaitableEvent.h +index 52269f706..670903653 100644 +--- a/modules/juce_core/threads/juce_WaitableEvent.h ++++ b/modules/juce_core/threads/juce_WaitableEvent.h +@@ -20,6 +20,10 @@ + ============================================================================== + */ + ++#if JUCE_MINGW && !defined(_GLIBCXX_HAS_GTHREADS) ++#include "mingw-std-threads/mingw.condition_variable.h" ++#endif ++ + namespace juce + { + diff --git a/libs/juce-current/patches/06_old-compiler-compatibility.patch b/libs/juce-current/patches/06_old-compiler-compatibility.patch new file mode 100644 index 00000000..411f3c6d --- /dev/null +++ b/libs/juce-current/patches/06_old-compiler-compatibility.patch @@ -0,0 +1,307 @@ +diff --git a/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h b/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h +index 656ab3321..c40e854aa 100644 +--- a/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h ++++ b/modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h +@@ -20,6 +20,11 @@ + ============================================================================== + */ + ++#ifndef __clang__ ++// GCC4 compatibility ++namespace std { using ::max_align_t; } ++#endif ++ + namespace juce + { + +diff --git a/modules/juce_audio_basics/native/juce_mac_CoreAudioLayouts.h b/modules/juce_audio_basics/native/juce_mac_CoreAudioLayouts.h +index ac5ce32da..f0cd938ae 100644 +--- a/modules/juce_audio_basics/native/juce_mac_CoreAudioLayouts.h ++++ b/modules/juce_audio_basics/native/juce_mac_CoreAudioLayouts.h +@@ -236,8 +236,10 @@ private: + { kAudioChannelLayoutTag_AAC_6_0, { centre, left, right, leftSurround, rightSurround, centreSurround } }, + { kAudioChannelLayoutTag_AAC_6_1, { centre, left, right, leftSurround, rightSurround, centreSurround, LFE } }, + { kAudioChannelLayoutTag_AAC_7_0, { centre, left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear } }, ++#if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 + { kAudioChannelLayoutTag_AAC_7_1_B, { centre, left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, LFE } }, + { kAudioChannelLayoutTag_AAC_7_1_C, { centre, left, right, leftSurround, rightSurround, LFE, topFrontLeft, topFrontRight } }, ++#endif + { kAudioChannelLayoutTag_AAC_Octagonal, { centre, left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, centreSurround } }, + { kAudioChannelLayoutTag_TMH_10_2_std, { left, right, centre, topFrontCentre, leftSurroundSide, rightSurroundSide, leftSurround, rightSurround, topFrontLeft, topFrontRight, wideLeft, wideRight, topRearCentre, centreSurround, LFE, LFE2 } }, + { kAudioChannelLayoutTag_AC3_1_0_1, { centre, LFE } }, +diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +index 892312098..411bf2097 100644 +--- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm ++++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +@@ -58,6 +58,10 @@ + namespace juce + { + ++#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_8 ++static const uint32 kAudioUnitType_MIDIProcessor = 'aumi'; ++#endif ++ + // Change this to disable logging of various activities + #ifndef AU_LOGGING + #define AU_LOGGING 1 +@@ -274,7 +278,7 @@ namespace AudioUnitFormatHelpers + NSBundle* bundle = [[NSBundle alloc] initWithPath: (NSString*) fileOrIdentifier.toCFString()]; + + NSArray* audioComponents = [bundle objectForInfoDictionaryKey: @"AudioComponents"]; +- NSDictionary* dict = audioComponents[0]; ++ NSDictionary* dict = [audioComponents objectAtIndex: 0]; + + desc.componentManufacturer = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"manufacturer"])); + desc.componentType = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"type"])); +diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h +index 02c3de12e..ae60fde15 100644 +--- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h ++++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h +@@ -1184,7 +1184,7 @@ public: + String xMeterID, yMeterID; + }; + +- virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return {}; } ++ virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return CurveData(); } + + //============================================================================== + /** Not for public use - this is called before deleting an editor component. */ +diff --git a/modules/juce_core/native/juce_osx_ObjCHelpers.h b/modules/juce_core/native/juce_osx_ObjCHelpers.h +index 407d263d0..f2dc28e36 100644 +--- a/modules/juce_core/native/juce_osx_ObjCHelpers.h ++++ b/modules/juce_core/native/juce_osx_ObjCHelpers.h +@@ -71,7 +71,7 @@ inline NSArray* varArrayToNSArray (const var& varToParse); + + inline NSDictionary* varObjectToNSDictionary (const var& varToParse) + { +- auto dictionary = [NSMutableDictionary dictionary]; ++ NSDictionary* dictionary = [NSMutableDictionary dictionary]; + + if (varToParse.isObject()) + { +@@ -118,7 +118,7 @@ inline NSArray* varArrayToNSArray (const var& varToParse) + + const auto* varArray = varToParse.getArray(); + +- auto array = [NSMutableArray arrayWithCapacity: (NSUInteger) varArray->size()]; ++ NSArray* array = [NSMutableArray arrayWithCapacity: (NSUInteger) varArray->size()]; + + for (const auto& aVar : *varArray) + { +@@ -152,7 +152,8 @@ inline var nsDictionaryToVar (NSDictionary* dictionary) + DynamicObject::Ptr dynamicObject (new DynamicObject()); + + for (NSString* key in dictionary) +- dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar (dictionary[key])); ++ dynamicObject->setProperty (nsStringToJuce (key), ++ nsObjectToVar ([dictionary objectForKey: key])); + + return var (dynamicObject.get()); + } +diff --git a/modules/juce_core/system/juce_CompilerSupport.h b/modules/juce_core/system/juce_CompilerSupport.h +index e4d87ab97..ddeef94a5 100644 +--- a/modules/juce_core/system/juce_CompilerSupport.h ++++ b/modules/juce_core/system/juce_CompilerSupport.h +@@ -92,7 +92,7 @@ + + //============================================================================== + // C++ library +-#if (defined (__GLIBCXX__) && __GLIBCXX__ < 20130322) || (defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION < 3700)) ++#if (defined (__GLIBCXX__) && __GLIBCXX__ < 20130322) + #error "JUCE requires a C++ library containing std::atomic" + #endif + +diff --git a/modules/juce_core/system/juce_PlatformDefs.h b/modules/juce_core/system/juce_PlatformDefs.h +index 52db7c6d6..96ce314d8 100644 +--- a/modules/juce_core/system/juce_PlatformDefs.h ++++ b/modules/juce_core/system/juce_PlatformDefs.h +@@ -99,11 +99,7 @@ namespace juce + deliberately and want to ignore the warning. + */ + #if JUCE_CLANG +- #if __has_cpp_attribute(clang::fallthrough) +- #define JUCE_FALLTHROUGH [[clang::fallthrough]]; +- #else +- #define JUCE_FALLTHROUGH +- #endif ++ #define JUCE_FALLTHROUGH [[clang::fallthrough]]; + #elif JUCE_GCC + #if __GNUC__ >= 7 + #define JUCE_FALLTHROUGH [[gnu::fallthrough]]; +diff --git a/modules/juce_core/system/juce_TargetPlatform.h b/modules/juce_core/system/juce_TargetPlatform.h +index cf610da9a..9173cc34d 100644 +--- a/modules/juce_core/system/juce_TargetPlatform.h ++++ b/modules/juce_core/system/juce_TargetPlatform.h +@@ -144,8 +144,8 @@ + #endif + + #if JUCE_MAC +- #if ! defined (MAC_OS_X_VERSION_10_11) +- #error "The 10.11 SDK (Xcode 7.3.1+) is required to build JUCE apps. You can create apps that run on macOS 10.7+ by changing the deployment target." ++ #if ! defined (MAC_OS_X_VERSION_10_8) ++ #error "The 10.8 SDK is required to build JUCE apps. You can create apps that run on macOS 10.7+ by changing the deployment target." + #elif MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7 + #error "Building for OSX 10.6 is no longer supported!" + #endif +diff --git a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm +index 37bf13094..60467ef61 100644 +--- a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm ++++ b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm +@@ -26,6 +26,10 @@ + namespace juce + { + ++#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_8 ++ #define __nullable ++#endif ++ + //============================================================================== + // This class has been renamed from CoreGraphicsImage to avoid a symbol + // collision in Pro Tools 2019.12 and possibly 2020 depending on the Pro Tools +diff --git a/modules/juce_graphics/native/juce_mac_Fonts.mm b/modules/juce_graphics/native/juce_mac_Fonts.mm +index b6a918ce1..65b094343 100644 +--- a/modules/juce_graphics/native/juce_mac_Fonts.mm ++++ b/modules/juce_graphics/native/juce_mac_Fonts.mm +@@ -362,20 +362,20 @@ namespace CoreTextTypeLayout + + auto verticalJustification = text.getJustification().getOnlyVerticalFlags(); + +- auto ctFrameArea = [area, minCTFrameHeight, verticalJustification] ++ const Rectangle ctFrameArea = [area, minCTFrameHeight, verticalJustification] + { + if (minCTFrameHeight < area.getHeight()) +- return area; ++ return Rectangle (area); + + if (verticalJustification == Justification::verticallyCentred) + return area.withSizeKeepingCentre (area.getWidth(), minCTFrameHeight); + +- auto frameArea = area.withHeight (minCTFrameHeight); ++ const Rectangle frameArea = area.withHeight (minCTFrameHeight); + + if (verticalJustification == Justification::bottom) + return frameArea.withBottomY (area.getBottom()); + +- return frameArea; ++ return Rectangle (frameArea); + }(); + + auto frame = createCTFrame (framesetter, CGRectMake ((CGFloat) ctFrameArea.getX(), flipHeight - (CGFloat) ctFrameArea.getBottom(), +diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +index 7adb2a869..48ae2951b 100644 +--- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm ++++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +@@ -1528,17 +1528,21 @@ private: + case NSEventTypeSystemDefined: + case NSEventTypeApplicationDefined: + case NSEventTypePeriodic: ++ #if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 + case NSEventTypeGesture: ++ #endif + case NSEventTypeMagnify: + case NSEventTypeSwipe: + case NSEventTypeRotate: + case NSEventTypeBeginGesture: + case NSEventTypeEndGesture: + case NSEventTypeQuickLook: +- #if JUCE_64BIT ++ #if JUCE_64BIT + case NSEventTypeSmartMagnify: ++ #if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 + case NSEventTypePressure: + #endif ++ #endif + #if defined (MAC_OS_X_VERSION_10_12) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12 + #if JUCE_64BIT + case NSEventTypeDirectTouch: +diff --git a/modules/juce_gui_basics/native/juce_mac_Windowing.mm b/modules/juce_gui_basics/native/juce_mac_Windowing.mm +index 5ffbe393c..ddb5aedc5 100644 +--- a/modules/juce_gui_basics/native/juce_mac_Windowing.mm ++++ b/modules/juce_gui_basics/native/juce_mac_Windowing.mm +@@ -309,7 +309,7 @@ bool DragAndDropContainer::performExternalDragDropOfFiles (const StringArray& fi + for (auto& filename : files) + { + auto* nsFilename = juceStringToNS (filename); +- auto fileURL = [NSURL fileURLWithPath: nsFilename]; ++ NSURL* fileURL = [NSURL fileURLWithPath: nsFilename]; + auto dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter: fileURL]; + + auto eventPos = [event locationInWindow]; +diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +index cf8df3b72..6f8417340 100644 +--- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp ++++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +@@ -3054,7 +3054,7 @@ void XWindowSystem::handleButtonPressEvent (LinuxComponentPeer<::Window>* peer, + peer->toFront (true); + peer->handleMouseEvent (MouseInputSource::InputSourceType::mouse, getLogicalMousePos (buttonPressEvent, peer->getPlatformScaleFactor()), + ModifierKeys::currentModifiers, MouseInputSource::invalidPressure, +- MouseInputSource::invalidOrientation, getEventTime (buttonPressEvent), {}); ++ MouseInputSource::invalidOrientation, getEventTime (buttonPressEvent)); + } + + void XWindowSystem::handleButtonPressEvent (LinuxComponentPeer<::Window>* peer, const XButtonPressedEvent& buttonPressEvent) const +diff --git a/modules/juce_gui_basics/windows/juce_ComponentPeer.h b/modules/juce_gui_basics/windows/juce_ComponentPeer.h +index 3dacc095a..820987e94 100644 +--- a/modules/juce_gui_basics/windows/juce_ComponentPeer.h ++++ b/modules/juce_gui_basics/windows/juce_ComponentPeer.h +@@ -314,7 +314,7 @@ public: + + //============================================================================== + void handleMouseEvent (MouseInputSource::InputSourceType type, Point positionWithinPeer, ModifierKeys newMods, float pressure, +- float orientation, int64 time, PenDetails pen = {}, int touchIndex = 0); ++ float orientation, int64 time, PenDetails pen = PenDetails(), int touchIndex = 0); + + void handleMouseWheel (MouseInputSource::InputSourceType type, Point positionWithinPeer, + int64 time, const MouseWheelDetails&, int touchIndex = 0); +diff --git a/modules/juce_gui_extra/juce_gui_extra.cpp b/modules/juce_gui_extra/juce_gui_extra.cpp +index d4ebed7fd..df48cceaf 100644 +--- a/modules/juce_gui_extra/juce_gui_extra.cpp ++++ b/modules/juce_gui_extra/juce_gui_extra.cpp +@@ -142,7 +142,9 @@ + #include "misc/juce_PushNotifications.cpp" + #include "misc/juce_RecentlyOpenedFilesList.cpp" + #include "misc/juce_SplashScreen.cpp" ++#if !JUCE_MAC || MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 + #include "misc/juce_SystemTrayIconComponent.cpp" ++#endif + #include "misc/juce_LiveConstantEditor.cpp" + #include "misc/juce_AnimatedAppComponent.cpp" + +@@ -154,7 +156,9 @@ + #if JUCE_MAC + #include "native/juce_mac_NSViewComponent.mm" + #include "native/juce_mac_AppleRemote.mm" +- #include "native/juce_mac_SystemTrayIcon.cpp" ++ #if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 ++ #include "native/juce_mac_SystemTrayIcon.cpp" ++ #endif + #endif + + #if JUCE_IOS +diff --git a/modules/juce_gui_extra/juce_gui_extra.h b/modules/juce_gui_extra/juce_gui_extra.h +index 822c1885e..77e78c87a 100644 +--- a/modules/juce_gui_extra/juce_gui_extra.h ++++ b/modules/juce_gui_extra/juce_gui_extra.h +@@ -115,7 +115,9 @@ + #include "misc/juce_PushNotifications.h" + #include "misc/juce_RecentlyOpenedFilesList.h" + #include "misc/juce_SplashScreen.h" ++#if !JUCE_MAC || MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8 + #include "misc/juce_SystemTrayIconComponent.h" ++#endif + #include "misc/juce_WebBrowserComponent.h" + #include "misc/juce_LiveConstantEditor.h" + #include "misc/juce_AnimatedAppComponent.h" +diff --git a/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp b/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp +index 9786c0875..34695b5e1 100644 +--- a/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp ++++ b/modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp +@@ -157,7 +157,7 @@ void RecentlyOpenedFilesList::forgetRecentFileNatively (const File& file) + // from the recent list, so we clear them all and add them back excluding + // the specified file + +- auto sharedDocController = [NSDocumentController sharedDocumentController]; ++ NSDocumentController* sharedDocController = [NSDocumentController sharedDocumentController]; + auto recentDocumentURLs = [sharedDocController recentDocumentURLs]; + + [sharedDocController clearRecentDocuments: nil]; diff --git a/libs/juce-current/patches/local-ladspa.patch b/libs/juce-current/patches/07_allow-local-ladspa.patch similarity index 87% rename from libs/juce-current/patches/local-ladspa.patch rename to libs/juce-current/patches/07_allow-local-ladspa.patch index 49e22620..de862bf9 100644 --- a/libs/juce-current/patches/local-ladspa.patch +++ b/libs/juce-current/patches/07_allow-local-ladspa.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp -index d65642de6..050941c6c 100644 +index 19f1d7ac7..8ffe16b06 100644 --- a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp -@@ -18,7 +18,7 @@ +@@ -25,7 +25,7 @@ #if JUCE_PLUGINHOST_LADSPA && JUCE_LINUX diff --git a/libs/juce-current/patches/audioprocessors_no-splash-screen.patch b/libs/juce-current/patches/08_remove-splashscreen.patch similarity index 50% rename from libs/juce-current/patches/audioprocessors_no-splash-screen.patch rename to libs/juce-current/patches/08_remove-splashscreen.patch index b3460a32..132be860 100644 --- a/libs/juce-current/patches/audioprocessors_no-splash-screen.patch +++ b/libs/juce-current/patches/08_remove-splashscreen.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp -index b9df89ed9..1f40e3eaa 100644 +index 6a84b4eaf..670cb3969 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp -@@ -33,8 +33,6 @@ AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept : proce +@@ -40,8 +40,6 @@ AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept : proce AudioProcessorEditor::~AudioProcessorEditor() { @@ -11,7 +11,7 @@ index b9df89ed9..1f40e3eaa 100644 // if this fails, then the wrapper hasn't called editorBeingDeleted() on the // filter for some reason.. jassert (processor.getActiveEditor() != this); -@@ -49,23 +47,6 @@ void AudioProcessorEditor::hostMIDIControllerIsAvailable (bool) { +@@ -56,23 +54,6 @@ void AudioProcessorEditor::hostMIDIControllerIsAvailable (bool) { void AudioProcessorEditor::initialise() { @@ -36,10 +36,10 @@ index b9df89ed9..1f40e3eaa 100644 attachConstrainer (&defaultConstrainer); diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h -index 847707ea8..c33cbe73d 100644 +index ff694b78f..07d3765f4 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h -@@ -199,7 +199,6 @@ private: +@@ -206,7 +206,6 @@ private: bool resizable; ComponentBoundsConstrainer defaultConstrainer; ComponentBoundsConstrainer* constrainer = {}; @@ -48,10 +48,10 @@ index 847707ea8..c33cbe73d 100644 JUCE_DECLARE_NON_COPYABLE (AudioProcessorEditor) diff --git a/modules/juce_gui_basics/juce_gui_basics.cpp b/modules/juce_gui_basics/juce_gui_basics.cpp -index 7c6273a54..ca0c5e227 100644 +index 056ff591b..a4d798606 100644 --- a/modules/juce_gui_basics/juce_gui_basics.cpp +++ b/modules/juce_gui_basics/juce_gui_basics.cpp -@@ -211,7 +211,6 @@ namespace juce +@@ -218,7 +218,6 @@ namespace juce #include "application/juce_Application.cpp" #include "misc/juce_BubbleComponent.cpp" #include "misc/juce_DropShadower.cpp" @@ -60,10 +60,10 @@ index 7c6273a54..ca0c5e227 100644 #include "layout/juce_FlexBox.cpp" #include "layout/juce_GridItem.cpp" diff --git a/modules/juce_gui_basics/juce_gui_basics.h b/modules/juce_gui_basics/juce_gui_basics.h -index 8085c6eae..038f679fd 100644 +index fc4acbd6b..d20a707a3 100644 --- a/modules/juce_gui_basics/juce_gui_basics.h +++ b/modules/juce_gui_basics/juce_gui_basics.h -@@ -243,7 +243,6 @@ namespace juce +@@ -250,7 +250,6 @@ namespace juce #include "menus/juce_BurgerMenuComponent.h" #include "buttons/juce_ToolbarButton.h" #include "misc/juce_DropShadower.h" @@ -71,3 +71,57 @@ index 8085c6eae..038f679fd 100644 #include "widgets/juce_TreeView.h" #include "windows/juce_TopLevelWindow.h" #include "windows/juce_AlertWindow.h" +diff --git a/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp b/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp +index e78d4d330..d1d20d6c7 100644 +--- a/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp ++++ b/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp +@@ -41,8 +41,6 @@ ResizableWindow::ResizableWindow (const String& name, Colour bkgnd, bool shouldA + + ResizableWindow::~ResizableWindow() + { +- splashScreen.deleteAndZero(); +- + // Don't delete or remove the resizer components yourself! They're managed by the + // ResizableWindow, and you should leave them alone! You may have deleted them + // accidentally by careless use of deleteAllChildren()..? +@@ -60,27 +58,6 @@ ResizableWindow::~ResizableWindow() + + void ResizableWindow::initialise (const bool shouldAddToDesktop) + { +- /* +- ========================================================================== +- +- In accordance with the terms of the JUCE 5 End-Use License Agreement, the +- JUCE Code in SECTION A cannot be removed, changed or otherwise rendered +- ineffective unless you have a JUCE Indie or Pro license, or are using +- JUCE under the GPL v3 license. +- +- End User License Agreement: www.juce.com/juce-5-licence +- +- ========================================================================== +- */ +- +- // BEGIN SECTION A +- +- #if ! JucePlugin_Build_Standalone +- splashScreen = new JUCESplashScreen (*this); +- #endif +- +- // END SECTION A +- + defaultConstrainer.setMinimumOnscreenAmounts (0x10000, 16, 24, 16); + + lastNonFullScreenPos.setBounds (50, 50, 256, 256); +diff --git a/modules/juce_gui_basics/windows/juce_ResizableWindow.h b/modules/juce_gui_basics/windows/juce_ResizableWindow.h +index d67303595..e59f620c1 100644 +--- a/modules/juce_gui_basics/windows/juce_ResizableWindow.h ++++ b/modules/juce_gui_basics/windows/juce_ResizableWindow.h +@@ -383,7 +383,7 @@ protected: + + private: + //============================================================================== +- Component::SafePointer contentComponent, splashScreen; ++ Component::SafePointer contentComponent; + bool ownsContentComponent = false, resizeToFitContent = false, fullscreen = false, canDrag = true, dragStarted = false; + ComponentDragger dragger; + Rectangle lastNonFullScreenPos; diff --git a/libs/juce-current/patches/proper-posix-getExecutableFile.patch b/libs/juce-current/patches/09_proper-getExecutableFile.patch similarity index 95% rename from libs/juce-current/patches/proper-posix-getExecutableFile.patch rename to libs/juce-current/patches/09_proper-getExecutableFile.patch index 9efc1ac0..f60aa353 100644 --- a/libs/juce-current/patches/proper-posix-getExecutableFile.patch +++ b/libs/juce-current/patches/09_proper-getExecutableFile.patch @@ -1,5 +1,5 @@ diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h -index 1fc1f00b7..2b0e16844 100644 +index 982db865b..cfdd2d1cd 100644 --- a/modules/juce_core/native/juce_posix_SharedCode.h +++ b/modules/juce_core/native/juce_posix_SharedCode.h @@ -590,12 +590,39 @@ File juce_getExecutableFile() diff --git a/libs/juce-current/patches/use-vfork+consistency.patch b/libs/juce-current/patches/10_fix-fork-exec-usage.patch similarity index 91% rename from libs/juce-current/patches/use-vfork+consistency.patch rename to libs/juce-current/patches/10_fix-fork-exec-usage.patch index 4499404d..1b38ab57 100644 --- a/libs/juce-current/patches/use-vfork+consistency.patch +++ b/libs/juce-current/patches/10_fix-fork-exec-usage.patch @@ -1,5 +1,5 @@ diff --git a/modules/juce_core/native/juce_linux_Files.cpp b/modules/juce_core/native/juce_linux_Files.cpp -index e794447c3..4f8918375 100644 +index d2a302e3e..3dc4602ce 100644 --- a/modules/juce_core/native/juce_linux_Files.cpp +++ b/modules/juce_core/native/juce_linux_Files.cpp @@ -211,15 +211,21 @@ bool Process::openDocument (const String& fileName, const String& parameters) @@ -28,7 +28,7 @@ index e794447c3..4f8918375 100644 return cpid >= 0; diff --git a/modules/juce_core/native/juce_mac_Files.mm b/modules/juce_core/native/juce_mac_Files.mm -index 73ed29f4e..d6c4fcf3e 100644 +index d26443079..616677e1f 100644 --- a/modules/juce_core/native/juce_mac_Files.mm +++ b/modules/juce_core/native/juce_mac_Files.mm @@ -92,23 +92,22 @@ namespace MacFileHelpers @@ -65,10 +65,10 @@ index 73ed29f4e..d6c4fcf3e 100644 #endif } diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h -index 2b0e16844..fc04da66a 100644 +index cfdd2d1cd..332a64959 100644 --- a/modules/juce_core/native/juce_posix_SharedCode.h +++ b/modules/juce_core/native/juce_posix_SharedCode.h -@@ -1090,7 +1090,18 @@ public: +@@ -1092,7 +1092,18 @@ public: if (pipe (pipeHandles) == 0) { @@ -88,7 +88,7 @@ index 2b0e16844..fc04da66a 100644 if (result < 0) { -@@ -1099,6 +1110,7 @@ public: +@@ -1101,6 +1112,7 @@ public: } else if (result == 0) { @@ -96,7 +96,7 @@ index 2b0e16844..fc04da66a 100644 // we're the child process.. close (pipeHandles[0]); // close the read handle -@@ -1113,17 +1125,10 @@ public: +@@ -1115,17 +1127,10 @@ public: dup2 (open ("/dev/null", O_WRONLY), STDERR_FILENO); close (pipeHandles[1]); diff --git a/libs/juce-current/patches/childprocess_getpid.patch b/libs/juce-current/patches/11_childprocess-getPID.patch similarity index 79% rename from libs/juce-current/patches/childprocess_getpid.patch rename to libs/juce-current/patches/11_childprocess-getPID.patch index 7c42437a..f4b466e6 100644 --- a/libs/juce-current/patches/childprocess_getpid.patch +++ b/libs/juce-current/patches/11_childprocess-getPID.patch @@ -1,8 +1,8 @@ -diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h -index ea007b1..f6faa5b 100644 ---- a/modules/juce_core/native/juce_posix_SharedCode.h -+++ b/modules/juce_core/native/juce_posix_SharedCode.h -@@ -1234,6 +1234,11 @@ public: +diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h +index 332a64959..c6d95a93a 100644 +--- a/modules/juce_core/native/juce_posix_SharedCode.h ++++ b/modules/juce_core/native/juce_posix_SharedCode.h +@@ -1227,6 +1227,11 @@ public: return 0; } @@ -14,11 +14,11 @@ index ea007b1..f6faa5b 100644 int childPID = 0; int pipeHandle = 0; int exitCode = -1; -diff --git a/modules/juce_core/native/juce_win32_Threads.cpp b/modules/juce_core/native/juce_win32_Threads.cpp -index 68d891f..d38b733 100644 ---- a/modules/juce_core/native/juce_win32_Threads.cpp -+++ b/modules/juce_core/native/juce_win32_Threads.cpp -@@ -488,6 +488,11 @@ public: +diff --git a/modules/juce_core/native/juce_win32_Threads.cpp b/modules/juce_core/native/juce_win32_Threads.cpp +index dbe0c6b5d..098416bd9 100644 +--- a/modules/juce_core/native/juce_win32_Threads.cpp ++++ b/modules/juce_core/native/juce_win32_Threads.cpp +@@ -477,6 +477,11 @@ public: return (uint32) exitCode; } @@ -30,27 +30,27 @@ index 68d891f..d38b733 100644 bool ok; private: -diff --git a/modules/juce_core/threads/juce_ChildProcess.cpp b/modules/juce_core/threads/juce_ChildProcess.cpp -index 5648c5d..262882b 100644 ---- a/modules/juce_core/threads/juce_ChildProcess.cpp -+++ b/modules/juce_core/threads/juce_ChildProcess.cpp -@@ -75,6 +75,11 @@ String ChildProcess::readAllProcessOutput() - return result.toString(); +diff --git a/modules/juce_core/threads/juce_ChildProcess.cpp b/modules/juce_core/threads/juce_ChildProcess.cpp +index 3b284c25a..31e9c8d94 100644 +--- a/modules/juce_core/threads/juce_ChildProcess.cpp ++++ b/modules/juce_core/threads/juce_ChildProcess.cpp +@@ -81,6 +81,11 @@ String ChildProcess::readAllProcessOutput() } + +uint32 ChildProcess::getPID() const noexcept +{ + return activeProcess != nullptr ? activeProcess->getPID() : 0; +} + + //============================================================================== //============================================================================== #if JUCE_UNIT_TESTS - -diff --git a/modules/juce_core/threads/juce_ChildProcess.h b/modules/juce_core/threads/juce_ChildProcess.h -index b2bd0e1..cbc380d 100644 ---- a/modules/juce_core/threads/juce_ChildProcess.h -+++ b/modules/juce_core/threads/juce_ChildProcess.h -@@ -99,6 +99,8 @@ public: +diff --git a/modules/juce_core/threads/juce_ChildProcess.h b/modules/juce_core/threads/juce_ChildProcess.h +index 47a26281b..74dbb11ab 100644 +--- a/modules/juce_core/threads/juce_ChildProcess.h ++++ b/modules/juce_core/threads/juce_ChildProcess.h +@@ -101,6 +101,8 @@ public: */ bool kill(); diff --git a/libs/juce-current/patches/no-linux-native-dialog-without-modal-loops.patch b/libs/juce-current/patches/12_linux-filechooser-needs-modal-loops.patch similarity index 85% rename from libs/juce-current/patches/no-linux-native-dialog-without-modal-loops.patch rename to libs/juce-current/patches/12_linux-filechooser-needs-modal-loops.patch index 46daf977..a2c21b89 100644 --- a/libs/juce-current/patches/no-linux-native-dialog-without-modal-loops.patch +++ b/libs/juce-current/patches/12_linux-filechooser-needs-modal-loops.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp b/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp -index 62a1e8454..778168fc7 100644 +index 780716a80..2e2d51b76 100644 --- a/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp +++ b/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp -@@ -19,6 +19,7 @@ +@@ -26,6 +26,7 @@ namespace juce { @@ -10,7 +10,7 @@ index 62a1e8454..778168fc7 100644 static bool exeIsAvailable (const char* const executable) { ChildProcess child; -@@ -233,10 +234,11 @@ private: +@@ -240,10 +241,11 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Native) }; @@ -23,7 +23,7 @@ index 62a1e8454..778168fc7 100644 return false; #else static bool canUseNativeBox = exeIsAvailable ("zenity") || exeIsAvailable ("kdialog"); -@@ -246,7 +248,11 @@ bool FileChooser::isPlatformDialogAvailable() +@@ -253,7 +255,11 @@ bool FileChooser::isPlatformDialogAvailable() FileChooser::Pimpl* FileChooser::showPlatformDialog (FileChooser& owner, int flags, FilePreviewComponent*) { diff --git a/libs/juce-current/patches/dialogwindow_allow-native-titlebar.patch b/libs/juce-current/patches/13_dialogwindow-allow-native-titlebar.patch similarity index 87% rename from libs/juce-current/patches/dialogwindow_allow-native-titlebar.patch rename to libs/juce-current/patches/13_dialogwindow-allow-native-titlebar.patch index 9979c722..d698a1ce 100644 --- a/libs/juce-current/patches/dialogwindow_allow-native-titlebar.patch +++ b/libs/juce-current/patches/13_dialogwindow-allow-native-titlebar.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_gui_basics/windows/juce_DialogWindow.cpp b/modules/juce_gui_basics/windows/juce_DialogWindow.cpp -index 2b2345cdb..30c611fa7 100644 +index ea2675d59..92bf09e16 100644 --- a/modules/juce_gui_basics/windows/juce_DialogWindow.cpp +++ b/modules/juce_gui_basics/windows/juce_DialogWindow.cpp -@@ -124,7 +124,8 @@ void DialogWindow::showDialog (const String& dialogTitle, +@@ -131,7 +131,8 @@ void DialogWindow::showDialog (const String& dialogTitle, Colour backgroundColour, const bool escapeKeyTriggersCloseButton, const bool resizable, @@ -12,7 +12,7 @@ index 2b2345cdb..30c611fa7 100644 { LaunchOptions o; o.dialogTitle = dialogTitle; -@@ -132,9 +133,9 @@ void DialogWindow::showDialog (const String& dialogTitle, +@@ -139,9 +140,9 @@ void DialogWindow::showDialog (const String& dialogTitle, o.componentToCentreAround = componentToCentreAround; o.dialogBackgroundColour = backgroundColour; o.escapeKeyTriggersCloseButton = escapeKeyTriggersCloseButton; @@ -23,7 +23,7 @@ index 2b2345cdb..30c611fa7 100644 o.launchAsync(); } -@@ -146,7 +147,8 @@ int DialogWindow::showModalDialog (const String& dialogTitle, +@@ -153,7 +154,8 @@ int DialogWindow::showModalDialog (const String& dialogTitle, Colour backgroundColour, const bool escapeKeyTriggersCloseButton, const bool resizable, @@ -33,7 +33,7 @@ index 2b2345cdb..30c611fa7 100644 { LaunchOptions o; o.dialogTitle = dialogTitle; -@@ -154,9 +156,9 @@ int DialogWindow::showModalDialog (const String& dialogTitle, +@@ -161,9 +163,9 @@ int DialogWindow::showModalDialog (const String& dialogTitle, o.componentToCentreAround = componentToCentreAround; o.dialogBackgroundColour = backgroundColour; o.escapeKeyTriggersCloseButton = escapeKeyTriggersCloseButton; @@ -45,10 +45,10 @@ index 2b2345cdb..30c611fa7 100644 return o.runModal(); } diff --git a/modules/juce_gui_basics/windows/juce_DialogWindow.h b/modules/juce_gui_basics/windows/juce_DialogWindow.h -index 231168d0c..8c9f32957 100644 +index a10211525..de9ef2f4b 100644 --- a/modules/juce_gui_basics/windows/juce_DialogWindow.h +++ b/modules/juce_gui_basics/windows/juce_DialogWindow.h -@@ -186,7 +186,8 @@ public: +@@ -193,7 +193,8 @@ public: Colour backgroundColour, bool escapeKeyTriggersCloseButton, bool shouldBeResizable = false, @@ -58,7 +58,7 @@ index 231168d0c..8c9f32957 100644 #if JUCE_MODAL_LOOPS_PERMITTED || DOXYGEN /** Easy way of quickly showing a dialog box containing a given component. -@@ -232,7 +233,8 @@ public: +@@ -239,7 +240,8 @@ public: Colour backgroundColour, bool escapeKeyTriggersCloseButton, bool shouldBeResizable = false, diff --git a/libs/juce-current/patches/fix-for-temporary-windows.patch b/libs/juce-current/patches/14_fix-x11-temporary-windows.patch similarity index 90% rename from libs/juce-current/patches/fix-for-temporary-windows.patch rename to libs/juce-current/patches/14_fix-x11-temporary-windows.patch index c9431a0c..332abd57 100644 --- a/libs/juce-current/patches/fix-for-temporary-windows.patch +++ b/libs/juce-current/patches/14_fix-x11-temporary-windows.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp -index 6d23372d9..32e159cf6 100644 +index 6f8417340..5e8603833 100644 --- a/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp +++ b/modules/juce_gui_basics/native/x11/juce_linux_XWindowSystem.cpp -@@ -2542,8 +2542,9 @@ void XWindowSystem::setWindowType (::Window windowH, int styleFlags) const +@@ -2561,8 +2561,9 @@ void XWindowSystem::setWindowType (::Window windowH, int styleFlags) const Atom netHints [2]; diff --git a/libs/juce-current/patches/fix-linux-thread-priorities.patch b/libs/juce-current/patches/15_fix-linux-thread-prio.patch similarity index 93% rename from libs/juce-current/patches/fix-linux-thread-priorities.patch rename to libs/juce-current/patches/15_fix-linux-thread-prio.patch index 299c13f5..359241fe 100644 --- a/libs/juce-current/patches/fix-linux-thread-priorities.patch +++ b/libs/juce-current/patches/15_fix-linux-thread-prio.patch @@ -1,5 +1,5 @@ diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h -index fc04da66a..b83efeac8 100644 +index c6d95a93a..9c9053ac4 100644 --- a/modules/juce_core/native/juce_posix_SharedCode.h +++ b/modules/juce_core/native/juce_posix_SharedCode.h @@ -977,7 +977,11 @@ bool Thread::setThreadPriority (void* handle, int priority) diff --git a/libs/juce-current/patches/audioprocessors_lv2-string-state.patch b/libs/juce-current/patches/16_lv2-definitions.patch similarity index 76% rename from libs/juce-current/patches/audioprocessors_lv2-string-state.patch rename to libs/juce-current/patches/16_lv2-definitions.patch index 24172fd7..d17b58a0 100644 --- a/libs/juce-current/patches/audioprocessors_lv2-string-state.patch +++ b/libs/juce-current/patches/16_lv2-definitions.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h -index 5e538d5e1..626c5d182 100644 +index ae60fde15..dbad562ef 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h -@@ -1109,6 +1109,11 @@ public: +@@ -1116,6 +1116,11 @@ public: /** This method is called when the layout of the audio processor changes. */ virtual void processorLayoutsChanged(); @@ -14,3 +14,11 @@ index 5e538d5e1..626c5d182 100644 //============================================================================== /** Adds a listener that will be called when an aspect of this processor changes. */ virtual void addListener (AudioProcessorListener* newListener); +@@ -1200,6 +1205,7 @@ public: + wrapperType_AudioUnitv3, + wrapperType_RTAS, + wrapperType_AAX, ++ wrapperType_LV2, + wrapperType_Standalone, + wrapperType_Unity + }; diff --git a/libs/juce-current/patches/17_allow-vst2-without-audio.patch b/libs/juce-current/patches/17_allow-vst2-without-audio.patch new file mode 100644 index 00000000..f05b79b4 --- /dev/null +++ b/libs/juce-current/patches/17_allow-vst2-without-audio.patch @@ -0,0 +1,14 @@ +diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +index c5e96d204..7e2122580 100644 +--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp ++++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +@@ -301,9 +301,6 @@ public: + // You must at least have some channels + jassert (processor->isMidiEffect() || (maxNumInChannels > 0 || maxNumOutChannels > 0)); + +- if (processor->isMidiEffect()) +- maxNumInChannels = maxNumOutChannels = 2; +- + #ifdef JucePlugin_PreferredChannelConfigurations + processor->setPlayConfigDetails (maxNumInChannels, maxNumOutChannels, 44100.0, 1024); + #endif diff --git a/libs/juce-current/patches/17_dynamic-vst2-plugin-name.patch b/libs/juce-current/patches/17_dynamic-vst2-plugin-name.patch new file mode 100644 index 00000000..8aade0bf --- /dev/null +++ b/libs/juce-current/patches/17_dynamic-vst2-plugin-name.patch @@ -0,0 +1,13 @@ +diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +index 7e2122580..cff9b7a88 100644 +--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp ++++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +@@ -1841,7 +1841,7 @@ private: + + pointer_sized_int handleGetPlugInName (VstOpCodeArguments args) + { +- String (JucePlugin_Name).copyToUTF8 ((char*) args.ptr, 64 + 1); ++ String (processor->getName()).copyToUTF8 ((char*) args.ptr, 64 + 1); + return 1; + } + diff --git a/libs/juce-current/patches/vst2-linux-fix-gui-init.patch b/libs/juce-current/patches/18_fix-vst2-linux-gui-init.patch similarity index 53% rename from libs/juce-current/patches/vst2-linux-fix-gui-init.patch rename to libs/juce-current/patches/18_fix-vst2-linux-gui-init.patch index 8b149871..b1ec45bb 100644 --- a/libs/juce-current/patches/vst2-linux-fix-gui-init.patch +++ b/libs/juce-current/patches/18_fix-vst2-linux-gui-init.patch @@ -1,13 +1,15 @@ diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -index e3d277de2..e9a5c6cb1 100644 +index cff9b7a88..3ae14372c 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -@@ -206,6 +206,8 @@ struct SharedMessageThread : public Thread +@@ -209,9 +209,9 @@ struct SharedMessageThread : public Thread + void run() override + { + initialiseJuce_GUI(); +- initialised = true; + MessageManager::getInstance()->setCurrentThreadAsMessageThread(); - initialised = true; ++ initialised = true; + + XWindowSystem::getInstance(); -+ XWindowSystem::getInstance(); -+ - while ((! threadShouldExit()) && MessageManager::getInstance()->runDispatchLoopUntil (250)) - {} - } diff --git a/libs/juce-current/patches/juce_events-dispatch-public.patch b/libs/juce-current/patches/19_messagemanager-dispatch-public.patch similarity index 87% rename from libs/juce-current/patches/juce_events-dispatch-public.patch rename to libs/juce-current/patches/19_messagemanager-dispatch-public.patch index 65470de0..2ae3beb5 100644 --- a/libs/juce-current/patches/juce_events-dispatch-public.patch +++ b/libs/juce-current/patches/19_messagemanager-dispatch-public.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_events/messages/juce_MessageManager.h b/modules/juce_events/messages/juce_MessageManager.h -index 22b2d1895..e94d0ce5a 100644 +index ae7231101..fff5b9794 100644 --- a/modules/juce_events/messages/juce_MessageManager.h +++ b/modules/juce_events/messages/juce_MessageManager.h -@@ -316,6 +316,7 @@ public: +@@ -311,6 +311,7 @@ public: // Internal methods - do not use! void deliverBroadcastMessage (const String&); ~MessageManager() noexcept; @@ -10,7 +10,7 @@ index 22b2d1895..e94d0ce5a 100644 #endif private: -@@ -338,7 +339,6 @@ private: +@@ -333,7 +334,6 @@ private: static void* exitModalLoopCallback (void*); static void doPlatformSpecificInitialisation(); static void doPlatformSpecificShutdown(); diff --git a/libs/juce-current/patches/audioprocessors_nogui.patch b/libs/juce-current/patches/20_audioprocessor-no-gui.patch similarity index 88% rename from libs/juce-current/patches/audioprocessors_nogui.patch rename to libs/juce-current/patches/20_audioprocessor-no-gui.patch index c96c3afe..c02d9a01 100644 --- a/libs/juce-current/patches/audioprocessors_nogui.patch +++ b/libs/juce-current/patches/20_audioprocessor-no-gui.patch @@ -1,8 +1,8 @@ diff --git a/modules/juce_audio_processors/juce_audio_processors.cpp b/modules/juce_audio_processors/juce_audio_processors.cpp -index c468c944c..133d1ad45 100644 +index ac194a19d..f494ec3a2 100644 --- a/modules/juce_audio_processors/juce_audio_processors.cpp +++ b/modules/juce_audio_processors/juce_audio_processors.cpp -@@ -40,7 +40,7 @@ +@@ -47,7 +47,7 @@ #endif #endif @@ -11,7 +11,7 @@ index c468c944c..133d1ad45 100644 #include #include #include -@@ -130,9 +130,11 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations", "-Wcast-align" +@@ -141,9 +141,11 @@ JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations", "-Wcast-align" #include "format_types/juce_LegacyAudioParameter.cpp" #include "processors/juce_AudioProcessor.cpp" #include "processors/juce_AudioPluginInstance.cpp" @@ -26,10 +26,10 @@ index c468c944c..133d1ad45 100644 #include "format_types/juce_LADSPAPluginFormat.cpp" #include "format_types/juce_VSTPluginFormat.cpp" diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp -index d8efe0707..7c83196e9 100644 +index caa55b618..41c547b0c 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp -@@ -44,12 +44,14 @@ AudioProcessor::AudioProcessor (const BusesProperties& ioConfig) +@@ -51,12 +51,14 @@ AudioProcessor::AudioProcessor (const BusesProperties& ioConfig) AudioProcessor::~AudioProcessor() { @@ -44,7 +44,7 @@ index d8efe0707..7c83196e9 100644 #if JUCE_DEBUG && ! JUCE_DISABLE_AUDIOPROCESSOR_BEGIN_END_GESTURE_CHECKING // This will fail if you've called beginParameterChangeGesture() for one -@@ -797,6 +799,7 @@ void AudioProcessor::audioIOChanged (bool busNumberChanged, bool channelNumChang +@@ -804,6 +806,7 @@ void AudioProcessor::audioIOChanged (bool busNumberChanged, bool channelNumChang processorLayoutsChanged(); } @@ -52,7 +52,7 @@ index d8efe0707..7c83196e9 100644 //============================================================================== void AudioProcessor::editorBeingDeleted (AudioProcessorEditor* const editor) noexcept { -@@ -833,6 +836,7 @@ AudioProcessorEditor* AudioProcessor::createEditorIfNeeded() +@@ -840,6 +843,7 @@ AudioProcessorEditor* AudioProcessor::createEditorIfNeeded() return ed; } @@ -61,10 +61,10 @@ index d8efe0707..7c83196e9 100644 //============================================================================== void AudioProcessor::getCurrentProgramStateInformation (juce::MemoryBlock& destData) diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h -index 8d3cd062e..34a192dc5 100644 +index dbad562ef..ab9e8a7d6 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h -@@ -919,6 +919,7 @@ public: +@@ -926,6 +926,7 @@ public: */ virtual void setNonRealtime (bool isNonRealtime) noexcept; @@ -72,7 +72,7 @@ index 8d3cd062e..34a192dc5 100644 //============================================================================== /** Creates the processor's GUI. -@@ -968,6 +969,7 @@ public: +@@ -975,6 +976,7 @@ public: This may call createEditor() internally to create the component. */ AudioProcessorEditor* createEditorIfNeeded(); @@ -80,9 +80,9 @@ index 8d3cd062e..34a192dc5 100644 //============================================================================== /** Returns the default number of steps for a parameter. -@@ -1184,9 +1186,11 @@ public: +@@ -1191,9 +1193,11 @@ public: - virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return {}; } + virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return CurveData(); } + #if ! JUCE_AUDIOPROCESSOR_NO_GUI //============================================================================== @@ -92,7 +92,7 @@ index 8d3cd062e..34a192dc5 100644 /** Flags to indicate the type of plugin context in which a processor is being used. */ enum WrapperType -@@ -1461,7 +1465,9 @@ private: +@@ -1468,7 +1472,9 @@ private: //============================================================================== Array listeners; @@ -103,10 +103,10 @@ index 8d3cd062e..34a192dc5 100644 int blockSize = 0, latencySamples = 0; bool suspended = false; diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp -index 7d2ac0047..dcdaea84d 100644 +index fd8c35879..070f82554 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp -@@ -1490,8 +1490,10 @@ bool AudioProcessorGraph::AudioGraphIOProcessor::producesMidi() const +@@ -1496,8 +1496,10 @@ bool AudioProcessorGraph::AudioGraphIOProcessor::producesMidi() const bool AudioProcessorGraph::AudioGraphIOProcessor::isInput() const noexcept { return type == audioInputNode || type == midiInputNode; } bool AudioProcessorGraph::AudioGraphIOProcessor::isOutput() const noexcept { return type == audioOutputNode || type == midiOutputNode; } @@ -118,10 +118,10 @@ index 7d2ac0047..dcdaea84d 100644 int AudioProcessorGraph::AudioGraphIOProcessor::getNumPrograms() { return 0; } int AudioProcessorGraph::AudioGraphIOProcessor::getCurrentProgram() { return 0; } diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h -index 93b2d75a4..23d1670d4 100644 +index a16e35df0..8d2221f1e 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h -@@ -348,8 +348,10 @@ public: +@@ -355,8 +355,10 @@ public: bool acceptsMidi() const override; bool producesMidi() const override; @@ -132,7 +132,7 @@ index 93b2d75a4..23d1670d4 100644 int getNumPrograms() override; int getCurrentProgram() override; -@@ -385,8 +387,10 @@ public: +@@ -392,8 +394,10 @@ public: bool acceptsMidi() const override; bool producesMidi() const override; diff --git a/libs/juce-current/patches/audioprocessors_lv2type.patch b/libs/juce-current/patches/audioprocessors_lv2type.patch deleted file mode 100644 index ff874762..00000000 --- a/libs/juce-current/patches/audioprocessors_lv2type.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h -index 626c5d182..8d3cd062e 100644 ---- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h -+++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h -@@ -1198,6 +1198,7 @@ public: - wrapperType_AudioUnitv3, - wrapperType_RTAS, - wrapperType_AAX, -+ wrapperType_LV2, - wrapperType_Standalone, - wrapperType_Unity - }; diff --git a/libs/juce-current/patches/audioprocessors_no-splash-screen_pt2.patch b/libs/juce-current/patches/audioprocessors_no-splash-screen_pt2.patch deleted file mode 100644 index 39f624c4..00000000 --- a/libs/juce-current/patches/audioprocessors_no-splash-screen_pt2.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp b/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp -index 712e93f43..d4d8b7c14 100644 ---- a/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp -+++ b/modules/juce_gui_basics/windows/juce_ResizableWindow.cpp -@@ -34,8 +34,6 @@ ResizableWindow::ResizableWindow (const String& name, Colour bkgnd, bool shouldA - - ResizableWindow::~ResizableWindow() - { -- splashScreen.deleteAndZero(); -- - // Don't delete or remove the resizer components yourself! They're managed by the - // ResizableWindow, and you should leave them alone! You may have deleted them - // accidentally by careless use of deleteAllChildren()..? -@@ -53,27 +51,6 @@ ResizableWindow::~ResizableWindow() - - void ResizableWindow::initialise (const bool shouldAddToDesktop) - { -- /* -- ========================================================================== -- -- In accordance with the terms of the JUCE 5 End-Use License Agreement, the -- JUCE Code in SECTION A cannot be removed, changed or otherwise rendered -- ineffective unless you have a JUCE Indie or Pro license, or are using -- JUCE under the GPL v3 license. -- -- End User License Agreement: www.juce.com/juce-5-licence -- -- ========================================================================== -- */ -- -- // BEGIN SECTION A -- -- #if ! JucePlugin_Build_Standalone -- splashScreen = new JUCESplashScreen (*this); -- #endif -- -- // END SECTION A -- - defaultConstrainer.setMinimumOnscreenAmounts (0x10000, 16, 24, 16); - - lastNonFullScreenPos.setBounds (50, 50, 256, 256); -diff --git a/modules/juce_gui_basics/windows/juce_ResizableWindow.h b/modules/juce_gui_basics/windows/juce_ResizableWindow.h -index 27c709cc6..01aeee19f 100644 ---- a/modules/juce_gui_basics/windows/juce_ResizableWindow.h -+++ b/modules/juce_gui_basics/windows/juce_ResizableWindow.h -@@ -376,7 +376,7 @@ protected: - - private: - //============================================================================== -- Component::SafePointer contentComponent, splashScreen; -+ Component::SafePointer contentComponent; - bool ownsContentComponent = false, resizeToFitContent = false, fullscreen = false, canDrag = true, dragStarted = false; - ComponentDragger dragger; - Rectangle lastNonFullScreenPos; diff --git a/libs/juce-current/patches/juce_vst_interface.patch b/libs/juce-current/patches/juce_vst_interface.patch deleted file mode 100644 index 71ceab32..00000000 --- a/libs/juce-current/patches/juce_vst_interface.patch +++ /dev/null @@ -1,2991 +0,0 @@ -diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -index 7f63093..5ff628b 100644 ---- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -@@ -95,14 +95,7 @@ - - namespace Vst2 - { --// If the following files cannot be found then you are probably trying to build --// a VST2 plug-in or a VST2-compatible VST3 plug-in. To do this you must have a --// VST2 SDK in your header search paths or use the "VST (Legacy) SDK Folder" --// field in the Projucer. The VST2 SDK can be obtained from the --// vstsdk3610_11_06_2018_build_37 (or older) VST3 SDK or JUCE version 5.3.2. You --// also need a VST2 license from Steinberg to distribute VST2 plug-ins. --#include "pluginterfaces/vst2.x/aeffect.h" --#include "pluginterfaces/vst2.x/aeffectx.h" -+#include "../../juce_audio_processors/format_types/juce_VSTInterface.h" - } - - JUCE_END_IGNORE_WARNINGS_MSVC -@@ -124,7 +117,6 @@ using namespace juce; - #pragma pack (push, 8) - #endif - --#define JUCE_VSTINTERFACE_H_INCLUDED 1 - #define JUCE_GUI_BASICS_INCLUDE_XHEADERS 1 - - #include "../utility/juce_IncludeModuleHeaders.h" -@@ -315,7 +307,7 @@ private: - - public: - //============================================================================== -- JuceVSTWrapper (Vst2::audioMasterCallback cb, AudioProcessor* af) -+ JuceVSTWrapper (Vst2::VstHostCallback cb, AudioProcessor* af) - : hostCallback (cb), - processor (af) - { -@@ -346,41 +338,41 @@ public: - juceParameters.update (*processor, false); - - memset (&vstEffect, 0, sizeof (vstEffect)); -- vstEffect.magic = 0x56737450 /* 'VstP' */; -- vstEffect.dispatcher = (Vst2::AEffectDispatcherProc) dispatcherCB; -- vstEffect.process = nullptr; -- vstEffect.setParameter = (Vst2::AEffectSetParameterProc) setParameterCB; -- vstEffect.getParameter = (Vst2::AEffectGetParameterProc) getParameterCB; -+ vstEffect.interfaceIdentifier = Vst2::juceVstInterfaceIdentifier; -+ vstEffect.dispatchFunction = dispatcherCB; -+ vstEffect.processAudioFunction = nullptr; -+ vstEffect.setParameterValueFunction = setParameterCB; -+ vstEffect.getParameterValueFunction = getParameterCB; - vstEffect.numPrograms = jmax (1, af->getNumPrograms()); -- vstEffect.numParams = juceParameters.getNumParameters(); -- vstEffect.numInputs = maxNumInChannels; -- vstEffect.numOutputs = maxNumOutChannels; -- vstEffect.initialDelay = processor->getLatencySamples(); -- vstEffect.object = this; -- vstEffect.uniqueID = JucePlugin_VSTUniqueID; -+ vstEffect.numParameters = juceParameters.getNumParameters(); -+ vstEffect.numInputChannels = maxNumInChannels; -+ vstEffect.numOutputChannels = maxNumOutChannels; -+ vstEffect.latency = processor->getLatencySamples(); -+ vstEffect.effectPointer = this; -+ vstEffect.plugInIdentifier = JucePlugin_VSTUniqueID; - - #ifdef JucePlugin_VSTChunkStructureVersion -- vstEffect.version = JucePlugin_VSTChunkStructureVersion; -+ vstEffect.plugInVersion = JucePlugin_VSTChunkStructureVersion; - #else -- vstEffect.version = JucePlugin_VersionCode; -+ vstEffect.plugInVersion = JucePlugin_VersionCode; - #endif - -- vstEffect.processReplacing = (Vst2::AEffectProcessProc) processReplacingCB; -- vstEffect.processDoubleReplacing = (Vst2::AEffectProcessDoubleProc) processDoubleReplacingCB; -+ vstEffect.processAudioInplaceFunction = processReplacingCB; -+ vstEffect.processDoubleAudioInplaceFunction = processDoubleReplacingCB; - -- vstEffect.flags |= Vst2::effFlagsHasEditor; -+ vstEffect.flags |= Vst2::vstEffectFlagHasEditor; - -- vstEffect.flags |= Vst2::effFlagsCanReplacing; -+ vstEffect.flags |= Vst2::vstEffectFlagInplaceAudio; - if (processor->supportsDoublePrecisionProcessing()) -- vstEffect.flags |= Vst2::effFlagsCanDoubleReplacing; -+ vstEffect.flags |= Vst2::vstEffectFlagInplaceDoubleAudio; - -- vstEffect.flags |= Vst2::effFlagsProgramChunks; -+ vstEffect.flags |= Vst2::vstEffectFlagDataInChunks; - - #if JucePlugin_IsSynth -- vstEffect.flags |= Vst2::effFlagsIsSynth; -+ vstEffect.flags |= Vst2::vstEffectFlagIsSynth; - #else - if (processor->getTailLengthSeconds() == 0.0) -- vstEffect.flags |= Vst2::effFlagsNoSoundInStop; -+ vstEffect.flags |= 512; - #endif - - activePlugins.add (this); -@@ -424,7 +416,7 @@ public: - } - } - -- Vst2::AEffect* getAEffect() noexcept { return &vstEffect; } -+ Vst2::VstEffectInterface* getAEffect() noexcept { return &vstEffect; } - - template - void internalProcessReplacing (FloatType** inputs, FloatType** outputs, -@@ -563,7 +555,7 @@ public: - - // Send VST events to the host. - if (hostCallback != nullptr) -- hostCallback (&vstEffect, Vst2::audioMasterProcessEvents, 0, 0, outgoingEvents.events, 0); -+ hostCallback (&vstEffect, Vst2::hostOpcodePreAudioProcessingEvents, 0, 0, outgoingEvents.events, 0); - #elif JUCE_DEBUG - /* This assertion is caused when you've added some events to the - midiMessages array in your processBlock() method, which usually means -@@ -592,7 +584,7 @@ public: - internalProcessReplacing (inputs, outputs, sampleFrames, floatTempBuffers); - } - -- static void processReplacingCB (Vst2::AEffect* vstInterface, float** inputs, float** outputs, int32 sampleFrames) -+ static void processReplacingCB (Vst2::VstEffectInterface* vstInterface, float** inputs, float** outputs, int32 sampleFrames) - { - getWrapper (vstInterface)->processReplacing (inputs, outputs, sampleFrames); - } -@@ -603,7 +595,7 @@ public: - internalProcessReplacing (inputs, outputs, sampleFrames, doubleTempBuffers); - } - -- static void processDoubleReplacingCB (Vst2::AEffect* vstInterface, double** inputs, double** outputs, int32 sampleFrames) -+ static void processDoubleReplacingCB (Vst2::VstEffectInterface* vstInterface, double** inputs, double** outputs, int32 sampleFrames) - { - getWrapper (vstInterface)->processDoubleReplacing (inputs, outputs, sampleFrames); - } -@@ -615,7 +607,7 @@ public: - { - isProcessing = true; - -- auto numInAndOutChannels = static_cast (vstEffect.numInputs + vstEffect.numOutputs); -+ auto numInAndOutChannels = static_cast (vstEffect.numInputChannels + vstEffect.numOutputChannels); - floatTempBuffers .channels.calloc (numInAndOutChannels); - doubleTempBuffers.channels.calloc (numInAndOutChannels); - -@@ -634,16 +626,16 @@ public: - midiEvents.ensureSize (2048); - midiEvents.clear(); - -- vstEffect.initialDelay = processor->getLatencySamples(); -+ vstEffect.latency = processor->getLatencySamples(); - - /** If this plug-in is a synth or it can receive midi events we need to tell the - host that we want midi. In the SDK this method is marked as deprecated, but - some hosts rely on this behaviour. - */ -- if (vstEffect.flags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) -+ if (vstEffect.flags & Vst2::vstEffectFlagIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) - { - if (hostCallback != nullptr) -- hostCallback (&vstEffect, Vst2::audioMasterWantMidi, 0, 1, nullptr, 0); -+ hostCallback (&vstEffect, Vst2::hostOpcodePlugInWantsMidi, 0, 1, nullptr, 0); - } - - if (getHostType().isAbletonLive() -@@ -657,7 +649,7 @@ public: - hostCmd.commandSize = sizeof (int); - hostCmd.flags = AbletonLiveHostSpecific::KCantBeSuspended; - -- hostCallback (&vstEffect, Vst2::audioMasterVendorSpecific, 0, 0, &hostCmd, 0.0f); -+ hostCallback (&vstEffect, Vst2::hostOpcodeManufacturerSpecific, 0, 0, &hostCmd, 0.0f); - } - - #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect -@@ -684,28 +676,28 @@ public: - //============================================================================== - bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) override - { -- const Vst2::VstTimeInfo* ti = nullptr; -+ const Vst2::VstTimingInformation* ti = nullptr; - - if (hostCallback != nullptr) - { -- int32 flags = Vst2::kVstPpqPosValid | Vst2::kVstTempoValid -- | Vst2::kVstBarsValid | Vst2::kVstCyclePosValid -- | Vst2::kVstTimeSigValid | Vst2::kVstSmpteValid -- | Vst2::kVstClockValid; -+ int32 flags = Vst2::vstTimingInfoFlagMusicalPositionValid | Vst2::vstTimingInfoFlagTempoValid -+ | Vst2::vstTimingInfoFlagLastBarPositionValid | Vst2::vstTimingInfoFlagLoopPositionValid -+ | Vst2::vstTimingInfoFlagTimeSignatureValid | Vst2::vstTimingInfoFlagSmpteValid -+ | Vst2::vstTimingInfoFlagNearestClockValid; - -- auto result = hostCallback (&vstEffect, Vst2::audioMasterGetTime, 0, flags, nullptr, 0); -- ti = reinterpret_cast (result); -+ auto result = hostCallback (&vstEffect, Vst2::hostOpcodeGetTimingInfo, 0, flags, nullptr, 0); -+ ti = reinterpret_cast (result); - } - - if (ti == nullptr || ti->sampleRate <= 0) - return false; - -- info.bpm = (ti->flags & Vst2::kVstTempoValid) != 0 ? ti->tempo : 0.0; -+ info.bpm = (ti->flags & Vst2::vstTimingInfoFlagTempoValid) != 0 ? ti->tempoBPM : 0.0; - -- if ((ti->flags & Vst2::kVstTimeSigValid) != 0) -+ if ((ti->flags & Vst2::vstTimingInfoFlagTimeSignatureValid) != 0) - { -- info.timeSigNumerator = ti->timeSigNumerator; -- info.timeSigDenominator = ti->timeSigDenominator; -+ info.timeSigNumerator = ti->timeSignatureNumerator; -+ info.timeSigDenominator = ti->timeSignatureDenominator; - } - else - { -@@ -713,34 +705,34 @@ public: - info.timeSigDenominator = 4; - } - -- info.timeInSamples = (int64) (ti->samplePos + 0.5); -- info.timeInSeconds = ti->samplePos / ti->sampleRate; -- info.ppqPosition = (ti->flags & Vst2::kVstPpqPosValid) != 0 ? ti->ppqPos : 0.0; -- info.ppqPositionOfLastBarStart = (ti->flags & Vst2::kVstBarsValid) != 0 ? ti->barStartPos : 0.0; -+ info.timeInSamples = (int64) (ti->samplePosition + 0.5); -+ info.timeInSeconds = ti->samplePosition / ti->sampleRate; -+ info.ppqPosition = (ti->flags & Vst2::vstTimingInfoFlagMusicalPositionValid) != 0 ? ti->musicalPosition : 0.0; -+ info.ppqPositionOfLastBarStart = (ti->flags & Vst2::vstTimingInfoFlagLastBarPositionValid) != 0 ? ti->lastBarPosition : 0.0; - -- if ((ti->flags & Vst2::kVstSmpteValid) != 0) -+ if ((ti->flags & Vst2::vstTimingInfoFlagSmpteValid) != 0) - { - AudioPlayHead::FrameRateType rate = AudioPlayHead::fpsUnknown; - double fps = 1.0; - -- switch (ti->smpteFrameRate) -+ switch (ti->smpteRate) - { -- case Vst2::kVstSmpte239fps: rate = AudioPlayHead::fps23976; fps = 24.0 * 1000.0 / 1001.0; break; -- case Vst2::kVstSmpte24fps: rate = AudioPlayHead::fps24; fps = 24.0; break; -- case Vst2::kVstSmpte25fps: rate = AudioPlayHead::fps25; fps = 25.0; break; -- case Vst2::kVstSmpte2997fps: rate = AudioPlayHead::fps2997; fps = 30.0 * 1000.0 / 1001.0; break; -- case Vst2::kVstSmpte30fps: rate = AudioPlayHead::fps30; fps = 30.0; break; -- case Vst2::kVstSmpte2997dfps: rate = AudioPlayHead::fps2997drop; fps = 30.0 * 1000.0 / 1001.0; break; -- case Vst2::kVstSmpte30dfps: rate = AudioPlayHead::fps30drop; fps = 30.0; break; -- -- case Vst2::kVstSmpteFilm16mm: -- case Vst2::kVstSmpteFilm35mm: fps = 24.0; break; -- -- case Vst2::kVstSmpte249fps: fps = 25.0 * 1000.0 / 1001.0; break; -- case Vst2::kVstSmpte599fps: fps = 60.0 * 1000.0 / 1001.0; break; -- case Vst2::kVstSmpte60fps: fps = 60; break; -- -- default: jassertfalse; // unknown frame-rate.. -+ case Vst2::vstSmpteRateFps239: rate = AudioPlayHead::fps23976; fps = 24.0 * 1000.0 / 1001.0; break; -+ case Vst2::vstSmpteRateFps24: rate = AudioPlayHead::fps24; fps = 24.0; break; -+ case Vst2::vstSmpteRateFps25: rate = AudioPlayHead::fps25; fps = 25.0; break; -+ case Vst2::vstSmpteRateFps2997: rate = AudioPlayHead::fps2997; fps = 30.0 * 1000.0 / 1001.0; break; -+ case Vst2::vstSmpteRateFps30: rate = AudioPlayHead::fps30; fps = 30.0; break; -+ case Vst2::vstSmpteRateFps2997drop: rate = AudioPlayHead::fps2997drop; fps = 30.0 * 1000.0 / 1001.0; break; -+ case Vst2::vstSmpteRateFps30drop: rate = AudioPlayHead::fps30drop; fps = 30.0; break; -+ -+ case Vst2::vstSmpteRate16mmFilm: -+ case Vst2::vstSmpteRate35mmFilm: fps = 24.0; break; -+ -+ case Vst2::vstSmpteRateFps249: fps = 25.0 * 1000.0 / 1001.0; break; -+ case Vst2::vstSmpteRateFps599: fps = 60.0 * 1000.0 / 1001.0; break; -+ case Vst2::vstSmpteRateFps60: fps = 60; break; -+ -+ default: jassertfalse; // unknown frame-rate.. - } - - info.frameRate = rate; -@@ -752,14 +744,14 @@ public: - info.editOriginTime = 0; - } - -- info.isRecording = (ti->flags & Vst2::kVstTransportRecording) != 0; -- info.isPlaying = (ti->flags & (Vst2::kVstTransportRecording | Vst2::kVstTransportPlaying)) != 0; -- info.isLooping = (ti->flags & Vst2::kVstTransportCycleActive) != 0; -+ info.isRecording = (ti->flags & Vst2::vstTimingInfoFlagCurrentlyRecording) != 0; -+ info.isPlaying = (ti->flags & (Vst2::vstTimingInfoFlagCurrentlyRecording | Vst2::vstTimingInfoFlagCurrentlyPlaying)) != 0; -+ info.isLooping = (ti->flags & Vst2::vstTimingInfoFlagLoopActive) != 0; - -- if ((ti->flags & Vst2::kVstCyclePosValid) != 0) -+ if ((ti->flags & Vst2::vstTimingInfoFlagLoopPositionValid) != 0) - { -- info.ppqLoopStart = ti->cycleStartPos; -- info.ppqLoopEnd = ti->cycleEndPos; -+ info.ppqLoopStart = ti->loopStartPosition; -+ info.ppqLoopEnd = ti->loopEndPosition; - } - else - { -@@ -779,7 +771,7 @@ public: - return 0.0f; - } - -- static float getParameterCB (Vst2::AEffect* vstInterface, int32 index) -+ static float getParameterCB (Vst2::VstEffectInterface* vstInterface, int32 index) - { - return getWrapper (vstInterface)->getParameter (index); - } -@@ -795,7 +787,7 @@ public: - } - } - -- static void setParameterCB (Vst2::AEffect* vstInterface, int32 index, float value) -+ static void setParameterCB (Vst2::VstEffectInterface* vstInterface, int32 index, float value) - { - getWrapper (vstInterface)->setParameter (index, value); - } -@@ -809,19 +801,19 @@ public: - } - - if (hostCallback != nullptr) -- hostCallback (&vstEffect, Vst2::audioMasterAutomate, index, 0, nullptr, newValue); -+ hostCallback (&vstEffect, Vst2::hostOpcodeParameterChanged, index, 0, nullptr, newValue); - } - - void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override - { - if (hostCallback != nullptr) -- hostCallback (&vstEffect, Vst2::audioMasterBeginEdit, index, 0, nullptr, 0); -+ hostCallback (&vstEffect, Vst2::hostOpcodeParameterChangeGestureBegin, index, 0, nullptr, 0); - } - - void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override - { - if (hostCallback != nullptr) -- hostCallback (&vstEffect, Vst2::audioMasterEndEdit, index, 0, nullptr, 0); -+ hostCallback (&vstEffect, Vst2::hostOpcodeParameterChangeGestureEnd, index, 0, nullptr, 0); - } - - void parameterValueChanged (int, float newValue) override -@@ -834,7 +826,7 @@ public: - - void audioProcessorChanged (AudioProcessor*) override - { -- vstEffect.initialDelay = processor->getLatencySamples(); -+ vstEffect.latency = processor->getLatencySamples(); - triggerAsyncUpdate(); - } - -@@ -842,12 +834,12 @@ public: - { - if (hostCallback != nullptr) - { -- hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, nullptr, 0); -- hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0); -+ hostCallback (&vstEffect, Vst2::hostOpcodeUpdateView, 0, 0, nullptr, 0); -+ hostCallback (&vstEffect, Vst2::hostOpcodeIOModified, 0, 0, nullptr, 0); - } - } - -- bool getPinProperties (Vst2::VstPinProperties& properties, bool direction, int index) const -+ bool getPinProperties (Vst2::VstPinInfo& properties, bool direction, int index) const - { - if (processor->isMidiEffect()) - return false; -@@ -856,9 +848,9 @@ public: - - // fill with default - properties.flags = 0; -- properties.label[0] = 0; -- properties.shortLabel[0] = 0; -- properties.arrangementType = Vst2::kSpeakerArrEmpty; -+ properties.text[0] = 0; -+ properties.shortText[0] = 0; -+ properties.configurationType = Vst2::vstSpeakerConfigTypeEmpty; - - if ((channelIdx = processor->getOffsetInBusBufferForAbsoluteChannelIndex (direction, index, busIdx)) >= 0) - { -@@ -866,8 +858,8 @@ public: - auto& channelSet = bus.getCurrentLayout(); - auto channelType = channelSet.getTypeOfChannel (channelIdx); - -- properties.flags = Vst2::kVstPinIsActive | Vst2::kVstPinUseSpeaker; -- properties.arrangementType = SpeakerMappings::channelSetToVstArrangementType (channelSet); -+ properties.flags = Vst2::vstPinInfoFlagIsActive | Vst2::vstPinInfoFlagValid; -+ properties.configurationType = SpeakerMappings::channelSetToVstArrangementType (channelSet); - String label = bus.getName(); - - #ifdef JucePlugin_PreferredChannelConfigurations -@@ -877,8 +869,8 @@ public: - label += " " + AudioChannelSet::getAbbreviatedChannelTypeName (channelType); - #endif - -- label.copyToUTF8 (properties.label, (size_t) (Vst2::kVstMaxLabelLen + 1)); -- label.copyToUTF8 (properties.shortLabel, (size_t) (Vst2::kVstMaxShortLabelLen + 1)); -+ label.copyToUTF8 (properties.text, (size_t) (Vst2::vstMaxParameterOrPinLabelLength + 1)); -+ label.copyToUTF8 (properties.shortText, (size_t) (Vst2::vstMaxParameterOrPinShortLabelLength + 1)); - - if (channelType == AudioChannelSet::left - || channelType == AudioChannelSet::leftSurround -@@ -888,7 +880,7 @@ public: - || channelType == AudioChannelSet::topRearLeft - || channelType == AudioChannelSet::leftSurroundRear - || channelType == AudioChannelSet::wideLeft) -- properties.flags |= Vst2::kVstPinIsStereo; -+ properties.flags |= Vst2::vstPinInfoFlagIsStereo; - - return true; - } -@@ -921,27 +913,27 @@ public: - } - }; - -- static AudioChannelSet vstArrangementTypeToChannelSet (const Vst2::VstSpeakerArrangement& arr) -- { -- if (arr.type == Vst2::kSpeakerArrEmpty) return AudioChannelSet::disabled(); -- if (arr.type == Vst2::kSpeakerArrMono) return AudioChannelSet::mono(); -- if (arr.type == Vst2::kSpeakerArrStereo) return AudioChannelSet::stereo(); -- if (arr.type == Vst2::kSpeakerArr30Cine) return AudioChannelSet::createLCR(); -- if (arr.type == Vst2::kSpeakerArr30Music) return AudioChannelSet::createLRS(); -- if (arr.type == Vst2::kSpeakerArr40Cine) return AudioChannelSet::createLCRS(); -- if (arr.type == Vst2::kSpeakerArr50) return AudioChannelSet::create5point0(); -- if (arr.type == Vst2::kSpeakerArr51) return AudioChannelSet::create5point1(); -- if (arr.type == Vst2::kSpeakerArr60Cine) return AudioChannelSet::create6point0(); -- if (arr.type == Vst2::kSpeakerArr61Cine) return AudioChannelSet::create6point1(); -- if (arr.type == Vst2::kSpeakerArr60Music) return AudioChannelSet::create6point0Music(); -- if (arr.type == Vst2::kSpeakerArr61Music) return AudioChannelSet::create6point1Music(); -- if (arr.type == Vst2::kSpeakerArr70Music) return AudioChannelSet::create7point0(); -- if (arr.type == Vst2::kSpeakerArr70Cine) return AudioChannelSet::create7point0SDDS(); -- if (arr.type == Vst2::kSpeakerArr71Music) return AudioChannelSet::create7point1(); -- if (arr.type == Vst2::kSpeakerArr71Cine) return AudioChannelSet::create7point1SDDS(); -- if (arr.type == Vst2::kSpeakerArr40Music) return AudioChannelSet::quadraphonic(); -- -- for (auto* m = getMappings(); m->vst2 != Vst2::kSpeakerArrEmpty; ++m) -+ static AudioChannelSet vstArrangementTypeToChannelSet (const Vst2::VstSpeakerConfiguration& arr) -+ { -+ if (arr.type == Vst2::vstSpeakerConfigTypeEmpty) return AudioChannelSet::disabled(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeMono) return AudioChannelSet::mono(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLR) return AudioChannelSet::stereo(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRC) return AudioChannelSet::createLCR(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRS) return AudioChannelSet::createLRS(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCS) return AudioChannelSet::createLCRS(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLsRs) return AudioChannelSet::create5point0(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLfeLsRs) return AudioChannelSet::create5point1(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLsRsCs) return AudioChannelSet::create6point0(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLfeLsRsCs) return AudioChannelSet::create6point1(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRLsRsSlSr) return AudioChannelSet::create6point0Music(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRLfeLsRsSlSr) return AudioChannelSet::create6point1Music(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLsRsSlSr) return AudioChannelSet::create7point0(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLsRsLcRc) return AudioChannelSet::create7point0SDDS(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLfeLsRsSlSr) return AudioChannelSet::create7point1(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRc) return AudioChannelSet::create7point1SDDS(); -+ if (arr.type == Vst2::vstSpeakerConfigTypeLRLsRs) return AudioChannelSet::quadraphonic(); -+ -+ for (auto* m = getMappings(); m->vst2 != Vst2::vstSpeakerConfigTypeEmpty; ++m) - { - if (m->vst2 == arr.type) - { -@@ -954,51 +946,51 @@ public: - } - } - -- return AudioChannelSet::discreteChannels (arr.numChannels); -+ return AudioChannelSet::discreteChannels (arr.numberOfChannels); - } - - static int32 channelSetToVstArrangementType (AudioChannelSet channels) - { -- if (channels == AudioChannelSet::disabled()) return Vst2::kSpeakerArrEmpty; -- if (channels == AudioChannelSet::mono()) return Vst2::kSpeakerArrMono; -- if (channels == AudioChannelSet::stereo()) return Vst2::kSpeakerArrStereo; -- if (channels == AudioChannelSet::createLCR()) return Vst2::kSpeakerArr30Cine; -- if (channels == AudioChannelSet::createLRS()) return Vst2::kSpeakerArr30Music; -- if (channels == AudioChannelSet::createLCRS()) return Vst2::kSpeakerArr40Cine; -- if (channels == AudioChannelSet::create5point0()) return Vst2::kSpeakerArr50; -- if (channels == AudioChannelSet::create5point1()) return Vst2::kSpeakerArr51; -- if (channels == AudioChannelSet::create6point0()) return Vst2::kSpeakerArr60Cine; -- if (channels == AudioChannelSet::create6point1()) return Vst2::kSpeakerArr61Cine; -- if (channels == AudioChannelSet::create6point0Music()) return Vst2::kSpeakerArr60Music; -- if (channels == AudioChannelSet::create6point1Music()) return Vst2::kSpeakerArr61Music; -- if (channels == AudioChannelSet::create7point0()) return Vst2::kSpeakerArr70Music; -- if (channels == AudioChannelSet::create7point0SDDS()) return Vst2::kSpeakerArr70Cine; -- if (channels == AudioChannelSet::create7point1()) return Vst2::kSpeakerArr71Music; -- if (channels == AudioChannelSet::create7point1SDDS()) return Vst2::kSpeakerArr71Cine; -- if (channels == AudioChannelSet::quadraphonic()) return Vst2::kSpeakerArr40Music; -+ if (channels == AudioChannelSet::disabled()) return Vst2::vstSpeakerConfigTypeEmpty; -+ if (channels == AudioChannelSet::mono()) return Vst2::vstSpeakerConfigTypeMono; -+ if (channels == AudioChannelSet::stereo()) return Vst2::vstSpeakerConfigTypeLR; -+ if (channels == AudioChannelSet::createLCR()) return Vst2::vstSpeakerConfigTypeLRC; -+ if (channels == AudioChannelSet::createLRS()) return Vst2::vstSpeakerConfigTypeLRS; -+ if (channels == AudioChannelSet::createLCRS()) return Vst2::vstSpeakerConfigTypeLRCS; -+ if (channels == AudioChannelSet::create5point0()) return Vst2::vstSpeakerConfigTypeLRCLsRs; -+ if (channels == AudioChannelSet::create5point1()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRs; -+ if (channels == AudioChannelSet::create6point0()) return Vst2::vstSpeakerConfigTypeLRCLsRsCs; -+ if (channels == AudioChannelSet::create6point1()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRsCs; -+ if (channels == AudioChannelSet::create6point0Music()) return Vst2::vstSpeakerConfigTypeLRLsRsSlSr; -+ if (channels == AudioChannelSet::create6point1Music()) return Vst2::vstSpeakerConfigTypeLRLfeLsRsSlSr; -+ if (channels == AudioChannelSet::create7point0()) return Vst2::vstSpeakerConfigTypeLRCLsRsSlSr; -+ if (channels == AudioChannelSet::create7point0SDDS()) return Vst2::vstSpeakerConfigTypeLRCLsRsLcRc; -+ if (channels == AudioChannelSet::create7point1()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRsSlSr; -+ if (channels == AudioChannelSet::create7point1SDDS()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRc; -+ if (channels == AudioChannelSet::quadraphonic()) return Vst2::vstSpeakerConfigTypeLRLsRs; - - if (channels == AudioChannelSet::disabled()) -- return Vst2::kSpeakerArrEmpty; -+ return Vst2::vstSpeakerConfigTypeEmpty; - - auto chans = channels.getChannelTypes(); - -- for (auto* m = getMappings(); m->vst2 != Vst2::kSpeakerArrEmpty; ++m) -+ for (auto* m = getMappings(); m->vst2 != Vst2::vstSpeakerConfigTypeEmpty; ++m) - if (m->matches (chans)) - return m->vst2; - -- return Vst2::kSpeakerArrUserDefined; -+ return Vst2::vstSpeakerConfigTypeUser; - } - -- static void channelSetToVstArrangement (const AudioChannelSet& channels, Vst2::VstSpeakerArrangement& result) -+ static void channelSetToVstArrangement (const AudioChannelSet& channels, Vst2::VstSpeakerConfiguration& result) - { - result.type = channelSetToVstArrangementType (channels); -- result.numChannels = channels.size(); -+ result.numberOfChannels = channels.size(); - -- for (int i = 0; i < result.numChannels; ++i) -+ for (int i = 0; i < result.numberOfChannels; ++i) - { - auto& speaker = result.speakers[i]; - -- zeromem (&speaker, sizeof (Vst2::VstSpeakerProperties)); -+ zeromem (&speaker, sizeof (Vst2::VstIndividualSpeakerInfo)); - speaker.type = getSpeakerType (channels.getTypeOfChannel (i)); - } - } -@@ -1007,36 +999,36 @@ public: - { - static const Mapping mappings[] = - { -- { Vst2::kSpeakerArrMono, { centre, unknown } }, -- { Vst2::kSpeakerArrStereo, { left, right, unknown } }, -- { Vst2::kSpeakerArrStereoSurround, { leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArrStereoCenter, { leftCentre, rightCentre, unknown } }, -- { Vst2::kSpeakerArrStereoSide, { leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArrStereoCLfe, { centre, LFE, unknown } }, -- { Vst2::kSpeakerArr30Cine, { left, right, centre, unknown } }, -- { Vst2::kSpeakerArr30Music, { left, right, surround, unknown } }, -- { Vst2::kSpeakerArr31Cine, { left, right, centre, LFE, unknown } }, -- { Vst2::kSpeakerArr31Music, { left, right, LFE, surround, unknown } }, -- { Vst2::kSpeakerArr40Cine, { left, right, centre, surround, unknown } }, -- { Vst2::kSpeakerArr40Music, { left, right, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr41Cine, { left, right, centre, LFE, surround, unknown } }, -- { Vst2::kSpeakerArr41Music, { left, right, LFE, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr50, { left, right, centre, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr51, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr60Cine, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, -- { Vst2::kSpeakerArr60Music, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr61Cine, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, -- { Vst2::kSpeakerArr61Music, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr70Cine, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -- { Vst2::kSpeakerArr70Music, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr71Cine, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -- { Vst2::kSpeakerArr71Music, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr80Cine, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -- { Vst2::kSpeakerArr80Music, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr81Cine, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -- { Vst2::kSpeakerArr81Music, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr102, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, -- { Vst2::kSpeakerArrEmpty, { unknown } } -+ { Vst2::vstSpeakerConfigTypeMono, { centre, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLR, { left, right, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLsRs, { leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLcRc, { leftCentre, rightCentre, unknown } }, -+ { Vst2::vstSpeakerConfigTypeSlSr, { leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeCLfe, { centre, LFE, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRC, { left, right, centre, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRS, { left, right, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfe, { left, right, centre, LFE, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLfeS, { left, right, LFE, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCS, { left, right, centre, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLsRs, { left, right, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeS, { left, right, centre, LFE, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLfeLsRs, { left, right, LFE, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRs, { left, right, centre, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRs, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsCs, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLsRsSlSr, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsCs, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLfeLsRsSlSr, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsLcRc, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsSlSr, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRc, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsLcRcCs, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsCsSlSr, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, -+ { Vst2::vstSpeakerConfigTypeEmpty, { unknown } } - }; - - return mappings; -@@ -1046,25 +1038,25 @@ public: - { - switch (type) - { -- case AudioChannelSet::left: return Vst2::kSpeakerL; -- case AudioChannelSet::right: return Vst2::kSpeakerR; -- case AudioChannelSet::centre: return Vst2::kSpeakerC; -- case AudioChannelSet::LFE: return Vst2::kSpeakerLfe; -- case AudioChannelSet::leftSurround: return Vst2::kSpeakerLs; -- case AudioChannelSet::rightSurround: return Vst2::kSpeakerRs; -- case AudioChannelSet::leftCentre: return Vst2::kSpeakerLc; -- case AudioChannelSet::rightCentre: return Vst2::kSpeakerRc; -- case AudioChannelSet::surround: return Vst2::kSpeakerS; -- case AudioChannelSet::leftSurroundRear: return Vst2::kSpeakerSl; -- case AudioChannelSet::rightSurroundRear: return Vst2::kSpeakerSr; -- case AudioChannelSet::topMiddle: return Vst2::kSpeakerTm; -- case AudioChannelSet::topFrontLeft: return Vst2::kSpeakerTfl; -- case AudioChannelSet::topFrontCentre: return Vst2::kSpeakerTfc; -- case AudioChannelSet::topFrontRight: return Vst2::kSpeakerTfr; -- case AudioChannelSet::topRearLeft: return Vst2::kSpeakerTrl; -- case AudioChannelSet::topRearCentre: return Vst2::kSpeakerTrc; -- case AudioChannelSet::topRearRight: return Vst2::kSpeakerTrr; -- case AudioChannelSet::LFE2: return Vst2::kSpeakerLfe2; -+ case AudioChannelSet::left: return Vst2::vstIndividualSpeakerTypeLeft; -+ case AudioChannelSet::right: return Vst2::vstIndividualSpeakerTypeRight; -+ case AudioChannelSet::centre: return Vst2::vstIndividualSpeakerTypeCentre; -+ case AudioChannelSet::LFE: return Vst2::vstIndividualSpeakerTypeLFE; -+ case AudioChannelSet::leftSurround: return Vst2::vstIndividualSpeakerTypeLeftSurround; -+ case AudioChannelSet::rightSurround: return Vst2::vstIndividualSpeakerTypeRightSurround; -+ case AudioChannelSet::leftCentre: return Vst2::vstIndividualSpeakerTypeLeftCentre; -+ case AudioChannelSet::rightCentre: return Vst2::vstIndividualSpeakerTypeRightCentre; -+ case AudioChannelSet::surround: return Vst2::vstIndividualSpeakerTypeSurround; -+ case AudioChannelSet::leftSurroundRear: return Vst2::vstIndividualSpeakerTypeLeftRearSurround; -+ case AudioChannelSet::rightSurroundRear: return Vst2::vstIndividualSpeakerTypeRightRearSurround; -+ case AudioChannelSet::topMiddle: return Vst2::vstIndividualSpeakerTypeTopMiddle; -+ case AudioChannelSet::topFrontLeft: return Vst2::vstIndividualSpeakerTypeTopFrontLeft; -+ case AudioChannelSet::topFrontCentre: return Vst2::vstIndividualSpeakerTypeTopFrontCentre; -+ case AudioChannelSet::topFrontRight: return Vst2::vstIndividualSpeakerTypeTopFrontRight; -+ case AudioChannelSet::topRearLeft: return Vst2::vstIndividualSpeakerTypeTopRearLeft; -+ case AudioChannelSet::topRearCentre: return Vst2::vstIndividualSpeakerTypeTopRearCentre; -+ case AudioChannelSet::topRearRight: return Vst2::vstIndividualSpeakerTypeTopRearRight; -+ case AudioChannelSet::LFE2: return Vst2::vstIndividualSpeakerTypeLFE2; - default: break; - } - -@@ -1075,25 +1067,25 @@ public: - { - switch (type) - { -- case Vst2::kSpeakerL: return AudioChannelSet::left; -- case Vst2::kSpeakerR: return AudioChannelSet::right; -- case Vst2::kSpeakerC: return AudioChannelSet::centre; -- case Vst2::kSpeakerLfe: return AudioChannelSet::LFE; -- case Vst2::kSpeakerLs: return AudioChannelSet::leftSurround; -- case Vst2::kSpeakerRs: return AudioChannelSet::rightSurround; -- case Vst2::kSpeakerLc: return AudioChannelSet::leftCentre; -- case Vst2::kSpeakerRc: return AudioChannelSet::rightCentre; -- case Vst2::kSpeakerS: return AudioChannelSet::surround; -- case Vst2::kSpeakerSl: return AudioChannelSet::leftSurroundRear; -- case Vst2::kSpeakerSr: return AudioChannelSet::rightSurroundRear; -- case Vst2::kSpeakerTm: return AudioChannelSet::topMiddle; -- case Vst2::kSpeakerTfl: return AudioChannelSet::topFrontLeft; -- case Vst2::kSpeakerTfc: return AudioChannelSet::topFrontCentre; -- case Vst2::kSpeakerTfr: return AudioChannelSet::topFrontRight; -- case Vst2::kSpeakerTrl: return AudioChannelSet::topRearLeft; -- case Vst2::kSpeakerTrc: return AudioChannelSet::topRearCentre; -- case Vst2::kSpeakerTrr: return AudioChannelSet::topRearRight; -- case Vst2::kSpeakerLfe2: return AudioChannelSet::LFE2; -+ case Vst2::vstIndividualSpeakerTypeLeft: return AudioChannelSet::left; -+ case Vst2::vstIndividualSpeakerTypeRight: return AudioChannelSet::right; -+ case Vst2::vstIndividualSpeakerTypeCentre: return AudioChannelSet::centre; -+ case Vst2::vstIndividualSpeakerTypeLFE: return AudioChannelSet::LFE; -+ case Vst2::vstIndividualSpeakerTypeLeftSurround: return AudioChannelSet::leftSurround; -+ case Vst2::vstIndividualSpeakerTypeRightSurround: return AudioChannelSet::rightSurround; -+ case Vst2::vstIndividualSpeakerTypeLeftCentre: return AudioChannelSet::leftCentre; -+ case Vst2::vstIndividualSpeakerTypeRightCentre: return AudioChannelSet::rightCentre; -+ case Vst2::vstIndividualSpeakerTypeSurround: return AudioChannelSet::surround; -+ case Vst2::vstIndividualSpeakerTypeLeftRearSurround: return AudioChannelSet::leftSurroundRear; -+ case Vst2::vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightSurroundRear; -+ case Vst2::vstIndividualSpeakerTypeTopMiddle: return AudioChannelSet::topMiddle; -+ case Vst2::vstIndividualSpeakerTypeTopFrontLeft: return AudioChannelSet::topFrontLeft; -+ case Vst2::vstIndividualSpeakerTypeTopFrontCentre: return AudioChannelSet::topFrontCentre; -+ case Vst2::vstIndividualSpeakerTypeTopFrontRight: return AudioChannelSet::topFrontRight; -+ case Vst2::vstIndividualSpeakerTypeTopRearLeft: return AudioChannelSet::topRearLeft; -+ case Vst2::vstIndividualSpeakerTypeTopRearCentre: return AudioChannelSet::topRearCentre; -+ case Vst2::vstIndividualSpeakerTypeTopRearRight: return AudioChannelSet::topRearRight; -+ case Vst2::vstIndividualSpeakerTypeLFE2: return AudioChannelSet::LFE2; - default: break; - } - -@@ -1127,15 +1119,15 @@ public: - - void setHasEditorFlag (bool shouldSetHasEditor) - { -- auto hasEditor = (vstEffect.flags & Vst2::effFlagsHasEditor) != 0; -+ auto hasEditor = (vstEffect.flags & Vst2::vstEffectFlagHasEditor) != 0; - - if (shouldSetHasEditor == hasEditor) - return; - - if (shouldSetHasEditor) -- vstEffect.flags |= Vst2::effFlagsHasEditor; -+ vstEffect.flags |= Vst2::vstEffectFlagHasEditor; - else -- vstEffect.flags &= ~Vst2::effFlagsHasEditor; -+ vstEffect.flags &= ~Vst2::vstEffectFlagHasEditor; - } - - void createEditorComp() -@@ -1202,59 +1194,59 @@ public: - - switch (opCode) - { -- case Vst2::effOpen: return handleOpen (args); -- case Vst2::effClose: return handleClose (args); -- case Vst2::effSetProgram: return handleSetCurrentProgram (args); -- case Vst2::effGetProgram: return handleGetCurrentProgram (args); -- case Vst2::effSetProgramName: return handleSetCurrentProgramName (args); -- case Vst2::effGetProgramName: return handleGetCurrentProgramName (args); -- case Vst2::effGetParamLabel: return handleGetParameterLabel (args); -- case Vst2::effGetParamDisplay: return handleGetParameterText (args); -- case Vst2::effGetParamName: return handleGetParameterName (args); -- case Vst2::effSetSampleRate: return handleSetSampleRate (args); -- case Vst2::effSetBlockSize: return handleSetBlockSize (args); -- case Vst2::effMainsChanged: return handleResumeSuspend (args); -- case Vst2::effEditGetRect: return handleGetEditorBounds (args); -- case Vst2::effEditOpen: return handleOpenEditor (args); -- case Vst2::effEditClose: return handleCloseEditor (args); -- case Vst2::effIdentify: return (pointer_sized_int) ByteOrder::bigEndianInt ("NvEf"); -- case Vst2::effGetChunk: return handleGetData (args); -- case Vst2::effSetChunk: return handleSetData (args); -- case Vst2::effProcessEvents: return handlePreAudioProcessingEvents (args); -- case Vst2::effCanBeAutomated: return handleIsParameterAutomatable (args); -- case Vst2::effString2Parameter: return handleParameterValueForText (args); -- case Vst2::effGetProgramNameIndexed: return handleGetProgramName (args); -- case Vst2::effGetInputProperties: return handleGetInputPinProperties (args); -- case Vst2::effGetOutputProperties: return handleGetOutputPinProperties (args); -- case Vst2::effGetPlugCategory: return handleGetPlugInCategory (args); -- case Vst2::effSetSpeakerArrangement: return handleSetSpeakerConfiguration (args); -- case Vst2::effSetBypass: return handleSetBypass (args); -- case Vst2::effGetEffectName: return handleGetPlugInName (args); -- case Vst2::effGetProductString: return handleGetPlugInName (args); -- case Vst2::effGetVendorString: return handleGetManufacturerName (args); -- case Vst2::effGetVendorVersion: return handleGetManufacturerVersion (args); -- case Vst2::effVendorSpecific: return handleManufacturerSpecific (args); -- case Vst2::effCanDo: return handleCanPlugInDo (args); -- case Vst2::effGetTailSize: return handleGetTailSize (args); -- case Vst2::effKeysRequired: return handleKeyboardFocusRequired (args); -- case Vst2::effGetVstVersion: return handleGetVstInterfaceVersion (args); -- case Vst2::effGetCurrentMidiProgram: return handleGetCurrentMidiProgram (args); -- case Vst2::effGetSpeakerArrangement: return handleGetSpeakerConfiguration (args); -- case Vst2::effSetTotalSampleToProcess: return handleSetNumberOfSamplesToProcess (args); -- case Vst2::effSetProcessPrecision: return handleSetSampleFloatType (args); -- case Vst2::effGetNumMidiInputChannels: return handleGetNumMidiInputChannels(); -- case Vst2::effGetNumMidiOutputChannels: return handleGetNumMidiOutputChannels(); -- default: return 0; -- } -- } -- -- static pointer_sized_int dispatcherCB (Vst2::AEffect* vstInterface, int32 opCode, int32 index, -+ case Vst2::plugInOpcodeOpen: return handleOpen (args); -+ case Vst2::plugInOpcodeClose: return handleClose (args); -+ case Vst2::plugInOpcodeSetCurrentProgram: return handleSetCurrentProgram (args); -+ case Vst2::plugInOpcodeGetCurrentProgram: return handleGetCurrentProgram (args); -+ case Vst2::plugInOpcodeSetCurrentProgramName: return handleSetCurrentProgramName (args); -+ case Vst2::plugInOpcodeGetCurrentProgramName: return handleGetCurrentProgramName (args); -+ case Vst2::plugInOpcodeGetParameterLabel: return handleGetParameterLabel (args); -+ case Vst2::plugInOpcodeGetParameterText: return handleGetParameterText (args); -+ case Vst2::plugInOpcodeGetParameterName: return handleGetParameterName (args); -+ case Vst2::plugInOpcodeSetSampleRate: return handleSetSampleRate (args); -+ case Vst2::plugInOpcodeSetBlockSize: return handleSetBlockSize (args); -+ case Vst2::plugInOpcodeResumeSuspend: return handleResumeSuspend (args); -+ case Vst2::plugInOpcodeGetEditorBounds: return handleGetEditorBounds (args); -+ case Vst2::plugInOpcodeOpenEditor: return handleOpenEditor (args); -+ case Vst2::plugInOpcodeCloseEditor: return handleCloseEditor (args); -+ case Vst2::plugInOpcodeIdentify: return (pointer_sized_int) ByteOrder::bigEndianInt ("NvEf"); -+ case Vst2::plugInOpcodeGetData: return handleGetData (args); -+ case Vst2::plugInOpcodeSetData: return handleSetData (args); -+ case Vst2::plugInOpcodePreAudioProcessingEvents: return handlePreAudioProcessingEvents (args); -+ case Vst2::plugInOpcodeIsParameterAutomatable: return handleIsParameterAutomatable (args); -+ case Vst2::plugInOpcodeParameterValueForText: return handleParameterValueForText (args); -+ case Vst2::plugInOpcodeGetProgramName: return handleGetProgramName (args); -+ case Vst2::plugInOpcodeGetInputPinProperties: return handleGetInputPinProperties (args); -+ case Vst2::plugInOpcodeGetOutputPinProperties: return handleGetOutputPinProperties (args); -+ case Vst2::plugInOpcodeGetPlugInCategory: return handleGetPlugInCategory (args); -+ case Vst2::plugInOpcodeSetSpeakerConfiguration: return handleSetSpeakerConfiguration (args); -+ case Vst2::plugInOpcodeSetBypass: return handleSetBypass (args); -+ case Vst2::plugInOpcodeGetPlugInName: return handleGetPlugInName (args); -+ case Vst2::plugInOpcodeGetManufacturerProductName: return handleGetPlugInName (args); -+ case Vst2::plugInOpcodeGetManufacturerName: return handleGetManufacturerName (args); -+ case Vst2::plugInOpcodeGetManufacturerVersion: return handleGetManufacturerVersion (args); -+ case Vst2::plugInOpcodeManufacturerSpecific: return handleManufacturerSpecific (args); -+ case Vst2::plugInOpcodeCanPlugInDo: return handleCanPlugInDo (args); -+ case Vst2::plugInOpcodeGetTailSize: return handleGetTailSize (args); -+ case Vst2::plugInOpcodeKeyboardFocusRequired: return handleKeyboardFocusRequired (args); -+ case Vst2::plugInOpcodeGetVstInterfaceVersion: return handleGetVstInterfaceVersion (args); -+ case Vst2::plugInOpcodeGetCurrentMidiProgram: return handleGetCurrentMidiProgram (args); -+ case Vst2::plugInOpcodeGetSpeakerArrangement: return handleGetSpeakerConfiguration (args); -+ case Vst2::plugInOpcodeSetNumberOfSamplesToProcess: return handleSetNumberOfSamplesToProcess (args); -+ case Vst2::plugInOpcodeSetSampleFloatType: return handleSetSampleFloatType (args); -+ case Vst2::pluginOpcodeGetNumMidiInputChannels: return handleGetNumMidiInputChannels(); -+ case Vst2::pluginOpcodeGetNumMidiOutputChannels: return handleGetNumMidiOutputChannels(); -+ default: return 0; -+ } -+ } -+ -+ static pointer_sized_int dispatcherCB (Vst2::VstEffectInterface* vstInterface, int32 opCode, int32 index, - pointer_sized_int value, void* ptr, float opt) - { - auto* wrapper = getWrapper (vstInterface); - VstOpCodeArguments args = { index, value, ptr, opt }; - -- if (opCode == Vst2::effClose) -+ if (opCode == Vst2::plugInOpcodeClose) - { - wrapper->dispatcher (opCode, args); - delete wrapper; -@@ -1302,18 +1294,18 @@ public: - - void paint (Graphics&) override {} - -- void getEditorBounds (Vst2::ERect& bounds) -+ void getEditorBounds (Vst2::VstEditorBounds& bounds) - { - auto b = getSizeToContainChild(); - -- bounds.top = 0; -- bounds.left = 0; -- bounds.bottom = (int16) b.getHeight(); -- bounds.right = (int16) b.getWidth(); -+ bounds.upper = 0; -+ bounds.leftmost = 0; -+ bounds.lower = (int16) b.getHeight(); -+ bounds.rightmost = (int16) b.getWidth(); - - #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE -- bounds.bottom = (int16) roundToInt (bounds.bottom * wrapper.editorScaleFactor); -- bounds.right = (int16) roundToInt (bounds.right * wrapper.editorScaleFactor); -+ bounds.lower = (int16) roundToInt (bounds.lower * wrapper.editorScaleFactor); -+ bounds.rightmost = (int16) roundToInt (bounds.rightmost * wrapper.editorScaleFactor); - #endif - } - -@@ -1463,7 +1455,7 @@ public: - - if (auto host = wrapper.hostCallback) - { -- auto status = host (wrapper.getAEffect(), Vst2::audioMasterCanDo, 0, 0, const_cast ("sizeWindow"), 0); -+ auto status = host (wrapper.getAEffect(), Vst2::hostOpcodeCanHostDo, 0, 0, const_cast ("sizeWindow"), 0); - - if (status == (pointer_sized_int) 1 || getHostType().isAbletonLive()) - { -@@ -1474,7 +1466,7 @@ public: - - const ScopedValueSetter inSizeWindowSetter (isInSizeWindow, true); - -- sizeWasSuccessful = (host (wrapper.getAEffect(), Vst2::audioMasterSizeWindow, -+ sizeWasSuccessful = (host (wrapper.getAEffect(), Vst2::hostOpcodeWindowSize, - newWidth, newHeight, nullptr, 0) != 0); - } - } -@@ -1593,12 +1585,12 @@ public: - - //============================================================================== - private: -- static JuceVSTWrapper* getWrapper (Vst2::AEffect* v) noexcept { return static_cast (v->object); } -+ static JuceVSTWrapper* getWrapper (Vst2::VstEffectInterface* v) noexcept { return static_cast (v->effectPointer); } - - bool isProcessLevelOffline() - { - return hostCallback != nullptr -- && (int32) hostCallback (&vstEffect, Vst2::audioMasterGetCurrentProcessLevel, 0, 0, nullptr, 0) == 4; -+ && (int32) hostCallback (&vstEffect, Vst2::hostOpcodeGetCurrentAudioProcessingLevel, 0, 0, nullptr, 0) == 4; - } - - static inline int32 convertHexVersionToDecimal (const unsigned int hexVersion) -@@ -1666,8 +1658,8 @@ private: - tmpBuffers.release(); - - if (processor != nullptr) -- tmpBuffers.tempChannels.insertMultiple (0, nullptr, vstEffect.numInputs -- + vstEffect.numOutputs); -+ tmpBuffers.tempChannels.insertMultiple (0, nullptr, vstEffect.numInputChannels -+ + vstEffect.numOutputChannels); - } - - void deleteTempChannels() -@@ -1827,7 +1819,7 @@ private: - if (editorComp != nullptr) - { - editorComp->getEditorBounds (editorBounds); -- *((Vst2::ERect**) args.ptr) = &editorBounds; -+ *((Vst2::VstEditorBounds**) args.ptr) = &editorBounds; - return (pointer_sized_int) &editorBounds; - } - -@@ -1917,7 +1909,7 @@ private: - pointer_sized_int handlePreAudioProcessingEvents (VstOpCodeArguments args) - { - #if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect -- VSTMidiEventList::addEventsToMidiBuffer ((Vst2::VstEvents*) args.ptr, midiEvents); -+ VSTMidiEventList::addEventsToMidiBuffer ((Vst2::VstEventBlock*) args.ptr, midiEvents); - return 1; - #else - ignoreUnused (args); -@@ -1968,12 +1960,12 @@ private: - - pointer_sized_int handleGetInputPinProperties (VstOpCodeArguments args) - { -- return (processor != nullptr && getPinProperties (*(Vst2::VstPinProperties*) args.ptr, true, args.index)) ? 1 : 0; -+ return (processor != nullptr && getPinProperties (*(Vst2::VstPinInfo*) args.ptr, true, args.index)) ? 1 : 0; - } - - pointer_sized_int handleGetOutputPinProperties (VstOpCodeArguments args) - { -- return (processor != nullptr && getPinProperties (*(Vst2::VstPinProperties*) args.ptr, false, args.index)) ? 1 : 0; -+ return (processor != nullptr && getPinProperties (*(Vst2::VstPinInfo*) args.ptr, false, args.index)) ? 1 : 0; - } - - pointer_sized_int handleGetPlugInCategory (VstOpCodeArguments) -@@ -1983,8 +1975,8 @@ private: - - pointer_sized_int handleSetSpeakerConfiguration (VstOpCodeArguments args) - { -- auto* pluginInput = reinterpret_cast (args.value); -- auto* pluginOutput = reinterpret_cast (args.ptr); -+ auto* pluginInput = reinterpret_cast (args.value); -+ auto* pluginOutput = reinterpret_cast (args.ptr); - - if (processor->isMidiEffect()) - return 0; -@@ -1995,29 +1987,29 @@ private: - if (pluginInput != nullptr && pluginInput->type >= 0) - { - // inconsistent request? -- if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numChannels) -+ if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numberOfChannels) - return 0; - } - - if (pluginOutput != nullptr && pluginOutput->type >= 0) - { - // inconsistent request? -- if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numChannels) -+ if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numberOfChannels) - return 0; - } - -- if (pluginInput != nullptr && pluginInput->numChannels > 0 && numIns == 0) -+ if (pluginInput != nullptr && pluginInput->numberOfChannels > 0 && numIns == 0) - return 0; - -- if (pluginOutput != nullptr && pluginOutput->numChannels > 0 && numOuts == 0) -+ if (pluginOutput != nullptr && pluginOutput->numberOfChannels > 0 && numOuts == 0) - return 0; - - auto layouts = processor->getBusesLayout(); - -- if (pluginInput != nullptr && pluginInput-> numChannels >= 0 && numIns > 0) -+ if (pluginInput != nullptr && pluginInput-> numberOfChannels >= 0 && numIns > 0) - layouts.getChannelSet (true, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput); - -- if (pluginOutput != nullptr && pluginOutput->numChannels >= 0 && numOuts > 0) -+ if (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0 && numOuts > 0) - layouts.getChannelSet (false, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput); - - #ifdef JucePlugin_PreferredChannelConfigurations -@@ -2065,7 +2057,7 @@ private: - && args.value == JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's')) - return handleSetContentScaleFactor (args.opt); - -- if (args.index == Vst2::effGetParamDisplay) -+ if (args.index == Vst2::plugInOpcodeGetParameterText) - return handleCockosGetParameterText (args.value, args.ptr, args.opt); - - if (auto callbackHandler = dynamic_cast (processor)) -@@ -2160,7 +2152,7 @@ private: - - pointer_sized_int handleGetVstInterfaceVersion (VstOpCodeArguments) - { -- return kVstVersion; -+ return Vst2::juceVstInterfaceVersion; - } - - pointer_sized_int handleGetCurrentMidiProgram (VstOpCodeArguments) -@@ -2170,8 +2162,8 @@ private: - - pointer_sized_int handleGetSpeakerConfiguration (VstOpCodeArguments args) - { -- auto** pluginInput = reinterpret_cast (args.value); -- auto** pluginOutput = reinterpret_cast (args.ptr); -+ auto** pluginInput = reinterpret_cast (args.value); -+ auto** pluginOutput = reinterpret_cast (args.ptr); - - if (pluginHasSidechainsOrAuxs() || processor->isMidiEffect()) - return false; -@@ -2179,10 +2171,10 @@ private: - auto inputLayout = processor->getChannelLayoutOfBus (true, 0); - auto outputLayout = processor->getChannelLayoutOfBus (false, 0); - -- auto speakerBaseSize = sizeof (Vst2::VstSpeakerArrangement) - (sizeof (Vst2::VstSpeakerProperties) * 8); -+ auto speakerBaseSize = sizeof (Vst2::VstSpeakerConfiguration) - (sizeof (Vst2::VstIndividualSpeakerInfo) * 8); - -- cachedInArrangement .malloc (speakerBaseSize + (static_cast (inputLayout. size()) * sizeof (Vst2::VstSpeakerArrangement)), 1); -- cachedOutArrangement.malloc (speakerBaseSize + (static_cast (outputLayout.size()) * sizeof (Vst2::VstSpeakerArrangement)), 1); -+ cachedInArrangement .malloc (speakerBaseSize + (static_cast (inputLayout. size()) * sizeof (Vst2::VstSpeakerConfiguration)), 1); -+ cachedOutArrangement.malloc (speakerBaseSize + (static_cast (outputLayout.size()) * sizeof (Vst2::VstSpeakerConfiguration)), 1); - - *pluginInput = cachedInArrangement. getData(); - *pluginOutput = cachedOutArrangement.getData(); -@@ -2204,7 +2196,7 @@ private: - { - if (processor != nullptr) - { -- processor->setProcessingPrecision ((args.value == Vst2::kVstProcessPrecision64 -+ processor->setProcessingPrecision ((args.value == Vst2::vstProcessingSampleTypeDouble - && processor->supportsDoublePrecisionProcessing()) - ? AudioProcessor::doublePrecision - : AudioProcessor::singlePrecision); -@@ -2286,16 +2278,16 @@ private: - } - - //============================================================================== -- Vst2::audioMasterCallback hostCallback; -+ Vst2::VstHostCallback hostCallback; - AudioProcessor* processor = {}; - double sampleRate = 44100.0; - int32 blockSize = 1024; -- Vst2::AEffect vstEffect; -+ Vst2::VstEffectInterface vstEffect; - CriticalSection stateInformationLock; - juce::MemoryBlock chunkMemory; - uint32 chunkMemoryTime = 0; - std::unique_ptr editorComp; -- Vst2::ERect editorBounds; -+ Vst2::VstEditorBounds editorBounds; - MidiBuffer midiEvents; - VSTMidiEventList outgoingEvents; - -@@ -2320,7 +2312,7 @@ private: - VstTempBuffers doubleTempBuffers; - int maxNumInChannels = 0, maxNumOutChannels = 0; - -- HeapBlock cachedInArrangement, cachedOutArrangement; -+ HeapBlock cachedInArrangement, cachedOutArrangement; - - ThreadLocalValue inParameterChangedCallback; - -@@ -2332,7 +2324,7 @@ private: - //============================================================================== - namespace - { -- Vst2::AEffect* pluginEntryPoint (Vst2::audioMasterCallback audioMaster) -+ Vst2::VstEffectInterface* pluginEntryPoint (Vst2::VstHostCallback audioMaster) - { - JUCE_AUTORELEASEPOOL - { -@@ -2340,7 +2332,7 @@ namespace - - try - { -- if (audioMaster (nullptr, Vst2::audioMasterVersion, 0, 0, nullptr, 0) != 0) -+ if (audioMaster (nullptr, Vst2::hostOpcodeVstVersion, 0, 0, nullptr, 0) != 0) - { - #if JUCE_LINUX - MessageManagerLock mmLock; -@@ -2377,8 +2369,8 @@ namespace - // Mac startup code.. - #if JUCE_MAC - -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster); -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* VSTPluginMain (Vst2::VstHostCallback audioMaster); -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* VSTPluginMain (Vst2::VstHostCallback audioMaster) - { - PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - -@@ -2386,8 +2378,8 @@ namespace - return pluginEntryPoint (audioMaster); - } - -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_macho (Vst2::audioMasterCallback audioMaster); -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_macho (Vst2::audioMasterCallback audioMaster) -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* main_macho (Vst2::VstHostCallback audioMaster); -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* main_macho (Vst2::VstHostCallback audioMaster) - { - PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - -@@ -2399,8 +2391,8 @@ namespace - // Linux startup code.. - #elif JUCE_LINUX - -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster); -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* VSTPluginMain (Vst2::VstHostCallback audioMaster); -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* VSTPluginMain (Vst2::VstHostCallback audioMaster) - { - PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - -@@ -2408,8 +2400,8 @@ namespace - return pluginEntryPoint (audioMaster); - } - -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_plugin (Vst2::audioMasterCallback audioMaster) asm ("main"); -- JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_plugin (Vst2::audioMasterCallback audioMaster) -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* main_plugin (Vst2::VstHostCallback audioMaster) asm ("main"); -+ JUCE_EXPORTED_FUNCTION Vst2::VstEffectInterface* main_plugin (Vst2::VstHostCallback audioMaster) - { - PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - -@@ -2424,7 +2416,7 @@ namespace - // Win32 startup code.. - #else - -- extern "C" __declspec (dllexport) Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) -+ extern "C" __declspec (dllexport) Vst2::VstEffectInterface* VSTPluginMain (Vst2::VstHostCallback audioMaster) - { - PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - -@@ -2432,7 +2424,7 @@ namespace - } - - #ifndef JUCE_64BIT // (can't compile this on win64, but it's not needed anyway with VST2.4) -- extern "C" __declspec (dllexport) int main (Vst2::audioMasterCallback audioMaster) -+ extern "C" __declspec (dllexport) int main (Vst2::VstHostCallback audioMaster) - { - PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - -diff --git a/modules/juce_audio_processors/format_types/juce_VSTCommon.h b/modules/juce_audio_processors/format_types/juce_VSTCommon.h -index 1eea8e3..10ea6e2 100644 ---- a/modules/juce_audio_processors/format_types/juce_VSTCommon.h -+++ b/modules/juce_audio_processors/format_types/juce_VSTCommon.h -@@ -66,25 +66,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - - static AudioChannelSet vstArrangementTypeToChannelSet (int32 arr, int fallbackNumChannels) - { -- if (arr == Vst2::kSpeakerArrEmpty) return AudioChannelSet::disabled(); -- else if (arr == Vst2::kSpeakerArrMono) return AudioChannelSet::mono(); -- else if (arr == Vst2::kSpeakerArrStereo) return AudioChannelSet::stereo(); -- else if (arr == Vst2::kSpeakerArr30Cine) return AudioChannelSet::createLCR(); -- else if (arr == Vst2::kSpeakerArr30Music) return AudioChannelSet::createLRS(); -- else if (arr == Vst2::kSpeakerArr40Cine) return AudioChannelSet::createLCRS(); -- else if (arr == Vst2::kSpeakerArr50) return AudioChannelSet::create5point0(); -- else if (arr == Vst2::kSpeakerArr51) return AudioChannelSet::create5point1(); -- else if (arr == Vst2::kSpeakerArr60Cine) return AudioChannelSet::create6point0(); -- else if (arr == Vst2::kSpeakerArr61Cine) return AudioChannelSet::create6point1(); -- else if (arr == Vst2::kSpeakerArr60Music) return AudioChannelSet::create6point0Music(); -- else if (arr == Vst2::kSpeakerArr61Music) return AudioChannelSet::create6point1Music(); -- else if (arr == Vst2::kSpeakerArr70Music) return AudioChannelSet::create7point0(); -- else if (arr == Vst2::kSpeakerArr70Cine) return AudioChannelSet::create7point0SDDS(); -- else if (arr == Vst2::kSpeakerArr71Music) return AudioChannelSet::create7point1(); -- else if (arr == Vst2::kSpeakerArr71Cine) return AudioChannelSet::create7point1SDDS(); -- else if (arr == Vst2::kSpeakerArr40Music) return AudioChannelSet::quadraphonic(); -- -- for (const Mapping* m = getMappings(); m->vst2 != Vst2::kSpeakerArrEmpty; ++m) -+ if (arr == Vst2::vstSpeakerConfigTypeEmpty) return AudioChannelSet::disabled(); -+ else if (arr == Vst2::vstSpeakerConfigTypeMono) return AudioChannelSet::mono(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLR) return AudioChannelSet::stereo(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRC) return AudioChannelSet::createLCR(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRS) return AudioChannelSet::createLRS(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCS) return AudioChannelSet::createLCRS(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLsRs) return AudioChannelSet::create5point0(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLfeLsRs) return AudioChannelSet::create5point1(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLsRsCs) return AudioChannelSet::create6point0(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLfeLsRsCs) return AudioChannelSet::create6point1(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRLsRsSlSr) return AudioChannelSet::create6point0Music(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRLfeLsRsSlSr) return AudioChannelSet::create6point1Music(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLsRsSlSr) return AudioChannelSet::create7point0(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLsRsLcRc) return AudioChannelSet::create7point0SDDS(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLfeLsRsSlSr) return AudioChannelSet::create7point1(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRc) return AudioChannelSet::create7point1SDDS(); -+ else if (arr == Vst2::vstSpeakerConfigTypeLRLsRs) return AudioChannelSet::quadraphonic(); -+ -+ for (const Mapping* m = getMappings(); m->vst2 != Vst2::vstSpeakerConfigTypeEmpty; ++m) - { - if (m->vst2 == arr) - { -@@ -100,41 +100,41 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - return AudioChannelSet::discreteChannels (fallbackNumChannels); - } - -- static AudioChannelSet vstArrangementTypeToChannelSet (const Vst2::VstSpeakerArrangement& arr) -+ static AudioChannelSet vstArrangementTypeToChannelSet (const Vst2::VstSpeakerConfiguration& arr) - { -- return vstArrangementTypeToChannelSet (arr.type, arr.numChannels); -+ return vstArrangementTypeToChannelSet (arr.type, arr.numberOfChannels); - } - - static int32 channelSetToVstArrangementType (AudioChannelSet channels) - { -- if (channels == AudioChannelSet::disabled()) return Vst2::kSpeakerArrEmpty; -- else if (channels == AudioChannelSet::mono()) return Vst2::kSpeakerArrMono; -- else if (channels == AudioChannelSet::stereo()) return Vst2::kSpeakerArrStereo; -- else if (channels == AudioChannelSet::createLCR()) return Vst2::kSpeakerArr30Cine; -- else if (channels == AudioChannelSet::createLRS()) return Vst2::kSpeakerArr30Music; -- else if (channels == AudioChannelSet::createLCRS()) return Vst2::kSpeakerArr40Cine; -- else if (channels == AudioChannelSet::create5point0()) return Vst2::kSpeakerArr50; -- else if (channels == AudioChannelSet::create5point1()) return Vst2::kSpeakerArr51; -- else if (channels == AudioChannelSet::create6point0()) return Vst2::kSpeakerArr60Cine; -- else if (channels == AudioChannelSet::create6point1()) return Vst2::kSpeakerArr61Cine; -- else if (channels == AudioChannelSet::create6point0Music()) return Vst2::kSpeakerArr60Music; -- else if (channels == AudioChannelSet::create6point1Music()) return Vst2::kSpeakerArr61Music; -- else if (channels == AudioChannelSet::create7point0()) return Vst2::kSpeakerArr70Music; -- else if (channels == AudioChannelSet::create7point0SDDS()) return Vst2::kSpeakerArr70Cine; -- else if (channels == AudioChannelSet::create7point1()) return Vst2::kSpeakerArr71Music; -- else if (channels == AudioChannelSet::create7point1SDDS()) return Vst2::kSpeakerArr71Cine; -- else if (channels == AudioChannelSet::quadraphonic()) return Vst2::kSpeakerArr40Music; -+ if (channels == AudioChannelSet::disabled()) return Vst2::vstSpeakerConfigTypeEmpty; -+ else if (channels == AudioChannelSet::mono()) return Vst2::vstSpeakerConfigTypeMono; -+ else if (channels == AudioChannelSet::stereo()) return Vst2::vstSpeakerConfigTypeLR; -+ else if (channels == AudioChannelSet::createLCR()) return Vst2::vstSpeakerConfigTypeLRC; -+ else if (channels == AudioChannelSet::createLRS()) return Vst2::vstSpeakerConfigTypeLRS; -+ else if (channels == AudioChannelSet::createLCRS()) return Vst2::vstSpeakerConfigTypeLRCS; -+ else if (channels == AudioChannelSet::create5point0()) return Vst2::vstSpeakerConfigTypeLRCLsRs; -+ else if (channels == AudioChannelSet::create5point1()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRs; -+ else if (channels == AudioChannelSet::create6point0()) return Vst2::vstSpeakerConfigTypeLRCLsRsCs; -+ else if (channels == AudioChannelSet::create6point1()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRsCs; -+ else if (channels == AudioChannelSet::create6point0Music()) return Vst2::vstSpeakerConfigTypeLRLsRsSlSr; -+ else if (channels == AudioChannelSet::create6point1Music()) return Vst2::vstSpeakerConfigTypeLRLfeLsRsSlSr; -+ else if (channels == AudioChannelSet::create7point0()) return Vst2::vstSpeakerConfigTypeLRCLsRsSlSr; -+ else if (channels == AudioChannelSet::create7point0SDDS()) return Vst2::vstSpeakerConfigTypeLRCLsRsLcRc; -+ else if (channels == AudioChannelSet::create7point1()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRsSlSr; -+ else if (channels == AudioChannelSet::create7point1SDDS()) return Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRc; -+ else if (channels == AudioChannelSet::quadraphonic()) return Vst2::vstSpeakerConfigTypeLRLsRs; - - Array chans (channels.getChannelTypes()); - - if (channels == AudioChannelSet::disabled()) -- return Vst2::kSpeakerArrEmpty; -+ return Vst2::vstSpeakerConfigTypeEmpty; - -- for (const Mapping* m = getMappings(); m->vst2 != Vst2::kSpeakerArrEmpty; ++m) -+ for (const Mapping* m = getMappings(); m->vst2 != Vst2::vstSpeakerConfigTypeEmpty; ++m) - if (m->matches (chans)) - return m->vst2; - -- return Vst2::kSpeakerArrUserDefined; -+ return Vst2::vstSpeakerConfigTypeUser; - } - - /** Class to hold a speaker configuration */ -@@ -142,7 +142,7 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - { - public: - VstSpeakerConfigurationHolder() { clear(); } -- VstSpeakerConfigurationHolder (const Vst2::VstSpeakerArrangement& vstConfig) { operator= (vstConfig); } -+ VstSpeakerConfigurationHolder (const Vst2::VstSpeakerConfiguration& vstConfig) { operator= (vstConfig); } - VstSpeakerConfigurationHolder (const VstSpeakerConfigurationHolder& other) { operator= (other.get()); } - VstSpeakerConfigurationHolder (VstSpeakerConfigurationHolder&& other) - : storage (std::move (other.storage)) { other.clear(); } -@@ -150,29 +150,29 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - VstSpeakerConfigurationHolder (const AudioChannelSet& channels) - { - auto numberOfChannels = channels.size(); -- Vst2::VstSpeakerArrangement& dst = *allocate (numberOfChannels); -+ Vst2::VstSpeakerConfiguration& dst = *allocate (numberOfChannels); - - dst.type = channelSetToVstArrangementType (channels); -- dst.numChannels = numberOfChannels; -+ dst.numberOfChannels = numberOfChannels; - -- for (int i = 0; i < dst.numChannels; ++i) -+ for (int i = 0; i < dst.numberOfChannels; ++i) - { -- Vst2::VstSpeakerProperties& speaker = dst.speakers[i]; -+ Vst2::VstIndividualSpeakerInfo& speaker = dst.speakers[i]; - -- zeromem (&speaker, sizeof (Vst2::VstSpeakerProperties)); -+ zeromem (&speaker, sizeof (Vst2::VstIndividualSpeakerInfo)); - speaker.type = getSpeakerType (channels.getTypeOfChannel (i)); - } - } - - VstSpeakerConfigurationHolder& operator= (const VstSpeakerConfigurationHolder& vstConfig) { return operator=(vstConfig.get()); } -- VstSpeakerConfigurationHolder& operator= (const Vst2::VstSpeakerArrangement& vstConfig) -+ VstSpeakerConfigurationHolder& operator= (const Vst2::VstSpeakerConfiguration& vstConfig) - { -- Vst2::VstSpeakerArrangement& dst = *allocate (vstConfig.numChannels); -+ Vst2::VstSpeakerConfiguration& dst = *allocate (vstConfig.numberOfChannels); - - dst.type = vstConfig.type; -- dst.numChannels = vstConfig.numChannels; -+ dst.numberOfChannels = vstConfig.numberOfChannels; - -- for (int i = 0; i < dst.numChannels; ++i) -+ for (int i = 0; i < dst.numberOfChannels; ++i) - dst.speakers[i] = vstConfig.speakers[i]; - - return *this; -@@ -186,17 +186,17 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - return *this; - } - -- const Vst2::VstSpeakerArrangement& get() const { return *storage.get(); } -+ const Vst2::VstSpeakerConfiguration& get() const { return *storage.get(); } - - private: - JUCE_LEAK_DETECTOR (VstSpeakerConfigurationHolder) - -- HeapBlock storage; -+ HeapBlock storage; - -- Vst2::VstSpeakerArrangement* allocate (int numChannels) -+ Vst2::VstSpeakerConfiguration* allocate (int numChannels) - { -- auto arrangementSize = (size_t) (jmax (8, numChannels) - 8) * sizeof (Vst2::VstSpeakerProperties) -- + sizeof (Vst2::VstSpeakerArrangement); -+ auto arrangementSize = (size_t) (jmax (8, numChannels) - 8) * sizeof (Vst2::VstIndividualSpeakerInfo) -+ + sizeof (Vst2::VstSpeakerConfiguration); - - storage.malloc (1, arrangementSize); - return storage.get(); -@@ -204,10 +204,10 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - - void clear() - { -- Vst2::VstSpeakerArrangement& dst = *allocate (0); -+ Vst2::VstSpeakerConfiguration& dst = *allocate (0); - -- dst.type = Vst2::kSpeakerArrEmpty; -- dst.numChannels = 0; -+ dst.type = Vst2::vstSpeakerConfigTypeEmpty; -+ dst.numberOfChannels = 0; - } - }; - -@@ -215,36 +215,36 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - { - static const Mapping mappings[] = - { -- { Vst2::kSpeakerArrMono, { centre, unknown } }, -- { Vst2::kSpeakerArrStereo, { left, right, unknown } }, -- { Vst2::kSpeakerArrStereoSurround, { leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArrStereoCenter, { leftCentre, rightCentre, unknown } }, -- { Vst2::kSpeakerArrStereoSide, { leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArrStereoCLfe, { centre, LFE, unknown } }, -- { Vst2::kSpeakerArr30Cine, { left, right, centre, unknown } }, -- { Vst2::kSpeakerArr30Music, { left, right, surround, unknown } }, -- { Vst2::kSpeakerArr31Cine, { left, right, centre, LFE, unknown } }, -- { Vst2::kSpeakerArr31Music, { left, right, LFE, surround, unknown } }, -- { Vst2::kSpeakerArr40Cine, { left, right, centre, surround, unknown } }, -- { Vst2::kSpeakerArr40Music, { left, right, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr41Cine, { left, right, centre, LFE, surround, unknown } }, -- { Vst2::kSpeakerArr41Music, { left, right, LFE, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr50, { left, right, centre, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr51, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, -- { Vst2::kSpeakerArr60Cine, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, -- { Vst2::kSpeakerArr60Music, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr61Cine, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, -- { Vst2::kSpeakerArr61Music, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr70Cine, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -- { Vst2::kSpeakerArr70Music, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr71Cine, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -- { Vst2::kSpeakerArr71Music, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr80Cine, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -- { Vst2::kSpeakerArr80Music, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr81Cine, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -- { Vst2::kSpeakerArr81Music, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -- { Vst2::kSpeakerArr102, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, -- { Vst2::kSpeakerArrEmpty, { unknown } } -+ { Vst2::vstSpeakerConfigTypeMono, { centre, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLR, { left, right, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLsRs, { leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLcRc, { leftCentre, rightCentre, unknown } }, -+ { Vst2::vstSpeakerConfigTypeSlSr, { leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeCLfe, { centre, LFE, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRC, { left, right, centre, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRS, { left, right, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfe, { left, right, centre, LFE, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLfeS, { left, right, LFE, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCS, { left, right, centre, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLsRs, { left, right, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeS, { left, right, centre, LFE, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLfeLsRs, { left, right, LFE, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRs, { left, right, centre, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRs, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsCs, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLsRsSlSr, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsCs, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRLfeLsRsSlSr, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsLcRc, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsSlSr, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRc, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsLcRcCs, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLsRsCsSlSr, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, -+ { Vst2::vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, -+ { Vst2::vstSpeakerConfigTypeEmpty, { unknown } } - }; - - return mappings; -@@ -254,25 +254,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - { - switch (type) - { -- case AudioChannelSet::left: return Vst2::kSpeakerL; -- case AudioChannelSet::right: return Vst2::kSpeakerR; -- case AudioChannelSet::centre: return Vst2::kSpeakerC; -- case AudioChannelSet::LFE: return Vst2::kSpeakerLfe; -- case AudioChannelSet::leftSurround: return Vst2::kSpeakerLs; -- case AudioChannelSet::rightSurround: return Vst2::kSpeakerRs; -- case AudioChannelSet::leftCentre: return Vst2::kSpeakerLc; -- case AudioChannelSet::rightCentre: return Vst2::kSpeakerRc; -- case AudioChannelSet::surround: return Vst2::kSpeakerS; -- case AudioChannelSet::leftSurroundRear: return Vst2::kSpeakerSl; -- case AudioChannelSet::rightSurroundRear: return Vst2::kSpeakerSr; -- case AudioChannelSet::topMiddle: return Vst2::kSpeakerTm; -- case AudioChannelSet::topFrontLeft: return Vst2::kSpeakerTfl; -- case AudioChannelSet::topFrontCentre: return Vst2::kSpeakerTfc; -- case AudioChannelSet::topFrontRight: return Vst2::kSpeakerTfr; -- case AudioChannelSet::topRearLeft: return Vst2::kSpeakerTrl; -- case AudioChannelSet::topRearCentre: return Vst2::kSpeakerTrc; -- case AudioChannelSet::topRearRight: return Vst2::kSpeakerTrr; -- case AudioChannelSet::LFE2: return Vst2::kSpeakerLfe2; -+ case AudioChannelSet::left: return Vst2::vstIndividualSpeakerTypeLeft; -+ case AudioChannelSet::right: return Vst2::vstIndividualSpeakerTypeRight; -+ case AudioChannelSet::centre: return Vst2::vstIndividualSpeakerTypeCentre; -+ case AudioChannelSet::LFE: return Vst2::vstIndividualSpeakerTypeLFE; -+ case AudioChannelSet::leftSurround: return Vst2::vstIndividualSpeakerTypeLeftSurround; -+ case AudioChannelSet::rightSurround: return Vst2::vstIndividualSpeakerTypeRightSurround; -+ case AudioChannelSet::leftCentre: return Vst2::vstIndividualSpeakerTypeLeftCentre; -+ case AudioChannelSet::rightCentre: return Vst2::vstIndividualSpeakerTypeRightCentre; -+ case AudioChannelSet::surround: return Vst2::vstIndividualSpeakerTypeSurround; -+ case AudioChannelSet::leftSurroundRear: return Vst2::vstIndividualSpeakerTypeLeftRearSurround; -+ case AudioChannelSet::rightSurroundRear: return Vst2::vstIndividualSpeakerTypeRightRearSurround; -+ case AudioChannelSet::topMiddle: return Vst2::vstIndividualSpeakerTypeTopMiddle; -+ case AudioChannelSet::topFrontLeft: return Vst2::vstIndividualSpeakerTypeTopFrontLeft; -+ case AudioChannelSet::topFrontCentre: return Vst2::vstIndividualSpeakerTypeTopFrontCentre; -+ case AudioChannelSet::topFrontRight: return Vst2::vstIndividualSpeakerTypeTopFrontRight; -+ case AudioChannelSet::topRearLeft: return Vst2::vstIndividualSpeakerTypeTopRearLeft; -+ case AudioChannelSet::topRearCentre: return Vst2::vstIndividualSpeakerTypeTopRearCentre; -+ case AudioChannelSet::topRearRight: return Vst2::vstIndividualSpeakerTypeTopRearRight; -+ case AudioChannelSet::LFE2: return Vst2::vstIndividualSpeakerTypeLFE2; - default: break; - } - -@@ -283,25 +283,25 @@ struct SpeakerMappings : private AudioChannelSet // (inheritance only to give e - { - switch (type) - { -- case Vst2::kSpeakerL: return AudioChannelSet::left; -- case Vst2::kSpeakerR: return AudioChannelSet::right; -- case Vst2::kSpeakerC: return AudioChannelSet::centre; -- case Vst2::kSpeakerLfe: return AudioChannelSet::LFE; -- case Vst2::kSpeakerLs: return AudioChannelSet::leftSurround; -- case Vst2::kSpeakerRs: return AudioChannelSet::rightSurround; -- case Vst2::kSpeakerLc: return AudioChannelSet::leftCentre; -- case Vst2::kSpeakerRc: return AudioChannelSet::rightCentre; -- case Vst2::kSpeakerS: return AudioChannelSet::surround; -- case Vst2::kSpeakerSl: return AudioChannelSet::leftSurroundRear; -- case Vst2::kSpeakerSr: return AudioChannelSet::rightSurroundRear; -- case Vst2::kSpeakerTm: return AudioChannelSet::topMiddle; -- case Vst2::kSpeakerTfl: return AudioChannelSet::topFrontLeft; -- case Vst2::kSpeakerTfc: return AudioChannelSet::topFrontCentre; -- case Vst2::kSpeakerTfr: return AudioChannelSet::topFrontRight; -- case Vst2::kSpeakerTrl: return AudioChannelSet::topRearLeft; -- case Vst2::kSpeakerTrc: return AudioChannelSet::topRearCentre; -- case Vst2::kSpeakerTrr: return AudioChannelSet::topRearRight; -- case Vst2::kSpeakerLfe2: return AudioChannelSet::LFE2; -+ case Vst2::vstIndividualSpeakerTypeLeft: return AudioChannelSet::left; -+ case Vst2::vstIndividualSpeakerTypeRight: return AudioChannelSet::right; -+ case Vst2::vstIndividualSpeakerTypeCentre: return AudioChannelSet::centre; -+ case Vst2::vstIndividualSpeakerTypeLFE: return AudioChannelSet::LFE; -+ case Vst2::vstIndividualSpeakerTypeLeftSurround: return AudioChannelSet::leftSurround; -+ case Vst2::vstIndividualSpeakerTypeRightSurround: return AudioChannelSet::rightSurround; -+ case Vst2::vstIndividualSpeakerTypeLeftCentre: return AudioChannelSet::leftCentre; -+ case Vst2::vstIndividualSpeakerTypeRightCentre: return AudioChannelSet::rightCentre; -+ case Vst2::vstIndividualSpeakerTypeSurround: return AudioChannelSet::surround; -+ case Vst2::vstIndividualSpeakerTypeLeftRearSurround: return AudioChannelSet::leftSurroundRear; -+ case Vst2::vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightSurroundRear; -+ case Vst2::vstIndividualSpeakerTypeTopMiddle: return AudioChannelSet::topMiddle; -+ case Vst2::vstIndividualSpeakerTypeTopFrontLeft: return AudioChannelSet::topFrontLeft; -+ case Vst2::vstIndividualSpeakerTypeTopFrontCentre: return AudioChannelSet::topFrontCentre; -+ case Vst2::vstIndividualSpeakerTypeTopFrontRight: return AudioChannelSet::topFrontRight; -+ case Vst2::vstIndividualSpeakerTypeTopRearLeft: return AudioChannelSet::topRearLeft; -+ case Vst2::vstIndividualSpeakerTypeTopRearCentre: return AudioChannelSet::topRearCentre; -+ case Vst2::vstIndividualSpeakerTypeTopRearRight: return AudioChannelSet::topRearRight; -+ case Vst2::vstIndividualSpeakerTypeLFE2: return AudioChannelSet::LFE2; - default: break; - } - -diff --git a/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h b/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h -index 3b6d316..1543ad1 100644 ---- a/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h -+++ b/modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h -@@ -58,7 +58,7 @@ public: - numEventsUsed = 0; - - if (events != nullptr) -- events->numEvents = 0; -+ events->numberOfEvents = 0; - } - - void addEvent (const void* const midiData, int numBytes, int frameOffset) -@@ -67,50 +67,50 @@ public: - - void* const ptr = (Vst2::VstMidiEvent*) (events->events [numEventsUsed]); - auto* const e = (Vst2::VstMidiEvent*) ptr; -- events->numEvents = ++numEventsUsed; -+ events->numberOfEvents = ++numEventsUsed; - - if (numBytes <= 4) - { -- if (e->type == Vst2::kVstSysExType) -+ if (e->type == Vst2::vstSysExEventType) - { -- delete[] (((Vst2::VstMidiSysexEvent*) ptr)->sysexDump); -- e->type = Vst2::kVstMidiType; -- e->byteSize = sizeof (Vst2::VstMidiEvent); -- e->noteLength = 0; -- e->noteOffset = 0; -- e->detune = 0; -- e->noteOffVelocity = 0; -+ delete[] (((Vst2::VstSysExEvent*) ptr)->sysExDump); -+ e->type = Vst2::vstMidiEventType; -+ e->size = sizeof (Vst2::VstMidiEvent); -+ e->noteSampleLength = 0; -+ e->noteSampleOffset = 0; -+ e->tuning = 0; -+ e->noteVelocityOff = 0; - } - -- e->deltaFrames = frameOffset; -+ e->sampleOffset = frameOffset; - memcpy (e->midiData, midiData, (size_t) numBytes); - } - else - { -- auto* const se = (Vst2::VstMidiSysexEvent*) ptr; -+ auto* const se = (Vst2::VstSysExEvent*) ptr; - -- if (se->type == Vst2::kVstSysExType) -- delete[] se->sysexDump; -+ if (se->type == Vst2::vstSysExEventType) -+ delete[] se->sysExDump; - -- se->sysexDump = new char [(size_t) numBytes]; -- memcpy (se->sysexDump, midiData, (size_t) numBytes); -+ se->sysExDump = new char [(size_t) numBytes]; -+ memcpy (se->sysExDump, midiData, (size_t) numBytes); - -- se->type = Vst2::kVstSysExType; -- se->byteSize = sizeof (Vst2::VstMidiSysexEvent); -- se->deltaFrames = frameOffset; -+ se->type = Vst2::vstSysExEventType; -+ se->size = sizeof (Vst2::VstSysExEvent); -+ se->offsetSamples = frameOffset; - se->flags = 0; -- se->dumpBytes = numBytes; -- se->resvd1 = 0; -- se->resvd2 = 0; -+ se->sysExDumpSize = numBytes; -+ se->future1 = 0; -+ se->future2 = 0; - } - } - - //============================================================================== - // Handy method to pull the events out of an event buffer supplied by the host - // or plugin. -- static void addEventsToMidiBuffer (const Vst2::VstEvents* events, MidiBuffer& dest) -+ static void addEventsToMidiBuffer (const Vst2::VstEventBlock* events, MidiBuffer& dest) - { -- for (int i = 0; i < events->numEvents; ++i) -+ for (int i = 0; i < events->numberOfEvents; ++i) - { - const Vst2::VstEvent* const e = events->events[i]; - -@@ -118,17 +118,17 @@ public: - { - const void* const ptr = events->events[i]; - -- if (e->type == Vst2::kVstMidiType) -+ if (e->type == Vst2::vstMidiEventType) - { - dest.addEvent ((const juce::uint8*) ((const Vst2::VstMidiEvent*) ptr)->midiData, -- 4, e->deltaFrames); -+ 4, e->sampleOffset); - } -- else if (e->type == Vst2::kVstSysExType) -+ else if (e->type == Vst2::vstSysExEventType) - { -- const auto* se = (const Vst2::VstMidiSysexEvent*) ptr; -- dest.addEvent ((const juce::uint8*) se->sysexDump, -- (int) se->dumpBytes, -- e->deltaFrames); -+ const auto* se = (const Vst2::VstSysExEvent*) ptr; -+ dest.addEvent ((const juce::uint8*) se->sysExDump, -+ (int) se->sysExDumpSize, -+ e->sampleOffset); - } - } - } -@@ -169,25 +169,25 @@ public: - } - - //============================================================================== -- HeapBlock events; -+ HeapBlock events; - - private: - int numEventsUsed, numEventsAllocated; - - static Vst2::VstEvent* allocateVSTEvent() - { -- auto e = (Vst2::VstEvent*) std::calloc (1, sizeof (Vst2::VstMidiEvent) > sizeof (Vst2::VstMidiSysexEvent) ? sizeof (Vst2::VstMidiEvent) -- : sizeof (Vst2::VstMidiSysexEvent)); -- e->type = Vst2::kVstMidiType; -- e->byteSize = sizeof (Vst2::VstMidiEvent); -+ auto e = (Vst2::VstEvent*) std::calloc (1, sizeof (Vst2::VstMidiEvent) > sizeof (Vst2::VstSysExEvent) ? sizeof (Vst2::VstMidiEvent) -+ : sizeof (Vst2::VstSysExEvent)); -+ e->type = Vst2::vstMidiEventType; -+ e->size = sizeof (Vst2::VstMidiEvent); - return e; - } - - static void freeVSTEvent (Vst2::VstEvent* e) - { -- if (e->type == Vst2::kVstSysExType) -+ if (e->type == Vst2::vstSysExEventType) - { -- delete[] (reinterpret_cast (e)->sysexDump); -+ delete[] (reinterpret_cast (e)->sysExDump); - } - - std::free (e); -diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -index bdc935f..ce6b867 100644 ---- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -+++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -@@ -49,7 +49,6 @@ - #endif - - #define VST_FORCE_DEPRECATED 0 --#define JUCE_VSTINTERFACE_H_INCLUDED 1 - - namespace Vst2 - { -@@ -58,8 +57,7 @@ namespace Vst2 - // paths or use the "VST (Legacy) SDK Folder" field in the Projucer. The VST2 - // SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or older) VST3 - // SDK or JUCE version 5.3.2. --#include --#include -+#include "../../juce_audio_processors/format_types/juce_VSTInterface.h" - } - - #include "juce_VSTCommon.h" -@@ -98,7 +96,7 @@ namespace Vst2 - #endif - - #ifndef JUCE_VST_WRAPPER_INVOKE_MAIN --#define JUCE_VST_WRAPPER_INVOKE_MAIN effect = module->moduleMain ((Vst2::audioMasterCallback) &audioMaster); -+ #define JUCE_VST_WRAPPER_INVOKE_MAIN effect = module->moduleMain (&audioMaster); - #endif - - //============================================================================== -@@ -235,8 +233,8 @@ namespace - } - - //============================================================================== --typedef Vst2::AEffect* (VSTCALLBACK *MainCall) (Vst2::audioMasterCallback); --static pointer_sized_int VSTCALLBACK audioMaster (Vst2::AEffect*, int32, int32, pointer_sized_int, void*, float); -+typedef Vst2::VstEffectInterface* (VSTINTERFACECALL *MainCall) (Vst2::VstHostCallback); -+static pointer_sized_int VSTINTERFACECALL audioMaster (Vst2::VstEffectInterface*, int32, int32, pointer_sized_int, void*, float); - - //============================================================================== - // Change this to disable logging of various VST activities -@@ -706,9 +704,9 @@ struct ModuleHandle : public ReferenceCountedObject - module.close(); - } - -- void closeEffect (Vst2::AEffect* eff) -+ void closeEffect (Vst2::VstEffectInterface* eff) - { -- eff->dispatcher (eff, Vst2::effClose, 0, 0, nullptr, 0); -+ eff->dispatchFunction (eff, Vst2::plugInOpcodeClose, 0, 0, nullptr, 0); - } - - #if JUCE_WINDOWS -@@ -832,9 +830,9 @@ struct ModuleHandle : public ReferenceCountedObject - } - } - -- void closeEffect (Vst2::AEffect* eff) -+ void closeEffect (Vst2::VstEffectInterface* eff) - { -- eff->dispatcher (eff, Vst2::effClose, 0, 0, nullptr, 0); -+ eff->dispatchFunction (eff, Vst2::plugInOpcodeClose, 0, 0, nullptr, 0); - } - - #endif -@@ -889,7 +887,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - const ScopedLock sl (pluginInstance.lock); - -- return effect->getParameter (effect, getParameterIndex()); -+ return effect->getParameterValueFunction (effect, getParameterIndex()); - } - - return 0.0f; -@@ -901,8 +899,8 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - const ScopedLock sl (pluginInstance.lock); - -- if (effect->getParameter (effect, getParameterIndex()) != newValue) -- effect->setParameter (effect, getParameterIndex(), newValue); -+ if (effect->getParameterValueFunction (effect, getParameterIndex()) != newValue) -+ effect->setParameterValueFunction (effect, getParameterIndex(), newValue); - } - } - -@@ -935,7 +933,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - if (valueType != nullptr || ! vstValueStrings.isEmpty()) - return getText (getValue(), 1024); - -- return pluginInstance.getTextForOpcode (getParameterIndex(), Vst2::effGetParamDisplay); -+ return pluginInstance.getTextForOpcode (getParameterIndex(), Vst2::plugInOpcodeGetParameterText); - } - - float getDefaultValue() const override -@@ -947,7 +945,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (name.isEmpty()) - return pluginInstance.getTextForOpcode (getParameterIndex(), -- Vst2::effGetParamName); -+ Vst2::plugInOpcodeGetParameterName); - - if (name.length() <= maximumStringLength) - return name; -@@ -967,7 +965,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - String getLabel() const override - { - return label.isEmpty() ? pluginInstance.getTextForOpcode (getParameterIndex(), -- Vst2::effGetParamLabel) -+ Vst2::plugInOpcodeGetParameterLabel) - : label; - } - -@@ -1009,7 +1007,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - const VSTXMLInfo::ValueType* const valueType; - }; - -- VSTPluginInstance (const ModuleHandle::Ptr& mh, const BusesProperties& ioConfig, Vst2::AEffect* effect, -+ VSTPluginInstance (const ModuleHandle::Ptr& mh, const BusesProperties& ioConfig, Vst2::VstEffectInterface* effect, - double sampleRateToUse, int blockSizeToUse) - : AudioPluginInstance (ioConfig), - vstEffect (effect), -@@ -1032,13 +1030,13 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - AudioProcessorParameterGroup newParameterTree; - -- for (int i = 0; i < vstEffect->numParams; ++i) -+ for (int i = 0; i < vstEffect->numParameters; ++i) - { - String paramName; - Array shortParamNames; - float defaultValue = 0; - String label; -- bool isAutomatable = dispatch (Vst2::effCanBeAutomated, i, 0, nullptr, 0) != 0; -+ bool isAutomatable = dispatch (Vst2::plugInOpcodeIsParameterAutomatable, i, 0, nullptr, 0) != 0; - bool isDiscrete = false; - int numSteps = AudioProcessor::getDefaultNumParameterSteps(); - bool isBoolSwitch = false; -@@ -1106,7 +1104,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - - ~VSTPluginInstance() override - { -- if (vstEffect != nullptr && vstEffect->magic == 0x56737450 /* 'VstP' */) -+ if (vstEffect != nullptr && vstEffect->interfaceIdentifier == Vst2::juceVstInterfaceIdentifier) - { - struct VSTDeleter : public CallbackMessage - { -@@ -1139,7 +1137,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - - void cleanup() - { -- if (vstEffect != nullptr && vstEffect->magic == 0x56737450 /* 'VstP' */) -+ if (vstEffect != nullptr && vstEffect->interfaceIdentifier == Vst2::juceVstInterfaceIdentifier) - { - #if JUCE_MAC - if (vstModule->resFileId != 0) -@@ -1164,16 +1162,16 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (auto* newEffect = constructEffect (newModule)) - { -- newEffect->resvd2 = 0; -+ newEffect->hostSpace2 = 0; - -- newEffect->dispatcher (newEffect, Vst2::effIdentify, 0, 0, nullptr, 0); -+ newEffect->dispatchFunction (newEffect, Vst2::plugInOpcodeIdentify, 0, 0, nullptr, 0); - - auto blockSize = jmax (32, initialBlockSize); - -- newEffect->dispatcher (newEffect, Vst2::effSetSampleRate, 0, 0, nullptr, static_cast (initialSampleRate)); -- newEffect->dispatcher (newEffect, Vst2::effSetBlockSize, 0, blockSize, nullptr, 0); -+ newEffect->dispatchFunction (newEffect, Vst2::plugInOpcodeSetSampleRate, 0, 0, nullptr, static_cast (initialSampleRate)); -+ newEffect->dispatchFunction (newEffect, Vst2::plugInOpcodeSetBlockSize, 0, blockSize, nullptr, 0); - -- newEffect->dispatcher (newEffect, Vst2::effOpen, 0, 0, nullptr, 0); -+ newEffect->dispatchFunction (newEffect, Vst2::plugInOpcodeOpen, 0, 0, nullptr, 0); - BusesProperties ioConfig = queryBusIO (newEffect); - - return new VSTPluginInstance (newModule, ioConfig, newEffect, initialSampleRate, blockSize); -@@ -1189,7 +1187,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - - { - char buffer[512] = { 0 }; -- dispatch (Vst2::effGetEffectName, 0, 0, buffer, 0); -+ dispatch (Vst2::plugInOpcodeGetPlugInName, 0, 0, buffer, 0); - - desc.descriptiveName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim(); - -@@ -1206,7 +1204,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - - { - char buffer[512] = { 0 }; -- dispatch (Vst2::effGetVendorString, 0, 0, buffer, 0); -+ dispatch (Vst2::plugInOpcodeGetManufacturerName, 0, 0, buffer, 0); - desc.manufacturerName = String::createStringFromData (buffer, (int) sizeof (buffer)).trim(); - } - -@@ -1220,7 +1218,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (vstEffect != nullptr) - { -- vstEffect->resvd2 = (pointer_sized_int) (pointer_sized_int) this; -+ vstEffect->hostSpace2 = (pointer_sized_int) (pointer_sized_int) this; - initialise (initialSampleRate, initialBlockSize); - return true; - } -@@ -1246,25 +1244,25 @@ struct VSTPluginInstance : public AudioPluginInstance, - - setRateAndBufferSizeDetails (initialSampleRate, initialBlockSize); - -- dispatch (Vst2::effIdentify, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeIdentify, 0, 0, nullptr, 0); - - if (getSampleRate() > 0) -- dispatch (Vst2::effSetSampleRate, 0, 0, nullptr, (float) getSampleRate()); -+ dispatch (Vst2::plugInOpcodeSetSampleRate, 0, 0, nullptr, (float) getSampleRate()); - - if (getBlockSize() > 0) -- dispatch (Vst2::effSetBlockSize, 0, jmax (32, getBlockSize()), nullptr, 0); -+ dispatch (Vst2::plugInOpcodeSetBlockSize, 0, jmax (32, getBlockSize()), nullptr, 0); - -- dispatch (Vst2::effOpen, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeOpen, 0, 0, nullptr, 0); - - setRateAndBufferSizeDetails (getSampleRate(), getBlockSize()); - - if (getNumPrograms() > 1) - setCurrentProgram (0); - else -- dispatch (Vst2::effSetProgram, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeSetCurrentProgram, 0, 0, nullptr, 0); - -- for (int i = vstEffect->numInputs; --i >= 0;) dispatch (Vst2::effConnectInput, i, 1, nullptr, 0); -- for (int i = vstEffect->numOutputs; --i >= 0;) dispatch (Vst2::effConnectOutput, i, 1, nullptr, 0); -+ for (int i = vstEffect->numInputChannels; --i >= 0;) dispatch (Vst2::plugInOpcodeConnectInput, i, 1, nullptr, 0); -+ for (int i = vstEffect->numOutputChannels; --i >= 0;) dispatch (Vst2::plugInOpcodeConnectOutput, i, 1, nullptr, 0); - - if (getVstCategory() != Vst2::kPlugCategShell) // (workaround for Waves 5 plugins which crash during this call) - updateStoredProgramNames(); -@@ -1275,7 +1273,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul; - #endif - -- setLatencySamples (vstEffect->initialDelay); -+ setLatencySamples (vstEffect->latency); - } - - void* getPlatformSpecificData() override { return vstEffect; } -@@ -1286,7 +1284,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - char buffer[512] = { 0 }; - -- if (dispatch (Vst2::effGetProductString, 0, 0, buffer, 0) != 0) -+ if (dispatch (Vst2::plugInOpcodeGetManufacturerProductName, 0, 0, buffer, 0) != 0) - { - String productName = String::createStringFromData (buffer, (int) sizeof (buffer)); - -@@ -1300,7 +1298,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - - int getUID() const - { -- int uid = vstEffect != nullptr ? vstEffect->uniqueID : 0; -+ int uid = vstEffect != nullptr ? vstEffect->plugInIdentifier : 0; - - if (uid == 0) - uid = vstModule->file.hashCode(); -@@ -1313,10 +1311,10 @@ struct VSTPluginInstance : public AudioPluginInstance, - if (vstEffect == nullptr) - return 0.0; - -- if ((vstEffect->flags & Vst2::effFlagsNoSoundInStop) != 0) -+ if ((vstEffect->flags & 512) != 0) - return 0.0; - -- auto tailSize = dispatch (Vst2::effGetTailSize, 0, 0, nullptr, 0); -+ auto tailSize = dispatch (Vst2::plugInOpcodeGetTailSize, 0, 0, nullptr, 0); - auto sampleRate = getSampleRate(); - - // remain backward compatible with old JUCE plug-ins: anything larger -@@ -1336,11 +1334,11 @@ struct VSTPluginInstance : public AudioPluginInstance, - bool producesMidi() const override { return pluginCanDo ("sendVstMidiEvent") > 0; } - bool supportsMPE() const override { return pluginCanDo ("MPE") > 0; } - -- Vst2::VstPlugCategory getVstCategory() const noexcept { return (Vst2::VstPlugCategory) dispatch (Vst2::effGetPlugCategory, 0, 0, nullptr, 0); } -+ Vst2::VstPlugInCategory getVstCategory() const noexcept { return (Vst2::VstPlugInCategory) dispatch (Vst2::plugInOpcodeGetPlugInCategory, 0, 0, nullptr, 0); } - -- bool isSynthPlugin() const { return (vstEffect != nullptr && (vstEffect->flags & Vst2::effFlagsIsSynth) != 0); } -+ bool isSynthPlugin() const { return (vstEffect != nullptr && (vstEffect->flags & Vst2::vstEffectFlagIsSynth) != 0); } - -- int pluginCanDo (const char* text) const { return (int) dispatch (Vst2::effCanDo, 0, 0, (void*) text, 0); } -+ int pluginCanDo (const char* text) const { return (int) dispatch (Vst2::plugInOpcodeCanPlugInDo, 0, 0, (void*) text, 0); } - - //============================================================================== - void prepareToPlay (double rate, int samplesPerBlockExpected) override -@@ -1355,17 +1353,17 @@ struct VSTPluginInstance : public AudioPluginInstance, - SpeakerMappings::VstSpeakerConfigurationHolder inArr (getChannelLayoutOfBus (true, 0)); - SpeakerMappings::VstSpeakerConfigurationHolder outArr (getChannelLayoutOfBus (false, 0)); - -- dispatch (Vst2::effSetSpeakerArrangement, 0, (pointer_sized_int) &inArr.get(), (void*) &outArr.get(), 0.0f); -+ dispatch (Vst2::plugInOpcodeSetSpeakerConfiguration, 0, (pointer_sized_int) &inArr.get(), (void*) &outArr.get(), 0.0f); - } - -- vstHostTime.tempo = 120.0; -- vstHostTime.timeSigNumerator = 4; -- vstHostTime.timeSigDenominator = 4; -+ vstHostTime.tempoBPM = 120.0; -+ vstHostTime.timeSignatureNumerator = 4; -+ vstHostTime.timeSignatureDenominator = 4; - vstHostTime.sampleRate = rate; -- vstHostTime.samplePos = 0; -- vstHostTime.flags = Vst2::kVstNanosValid -- | Vst2::kVstAutomationWriting -- | Vst2::kVstAutomationReading; -+ vstHostTime.samplePosition = 0; -+ vstHostTime.flags = Vst2::vstTimingInfoFlagNanosecondsValid -+ | Vst2::vstTimingInfoFlagAutomationWriteModeActive -+ | Vst2::vstTimingInfoFlagAutomationReadModeActive; - - initialise (rate, samplesPerBlockExpected); - -@@ -1380,18 +1378,18 @@ struct VSTPluginInstance : public AudioPluginInstance, - - incomingMidi.clear(); - -- dispatch (Vst2::effSetSampleRate, 0, 0, nullptr, (float) rate); -- dispatch (Vst2::effSetBlockSize, 0, jmax (16, samplesPerBlockExpected), nullptr, 0); -+ dispatch (Vst2::plugInOpcodeSetSampleRate, 0, 0, nullptr, (float) rate); -+ dispatch (Vst2::plugInOpcodeSetBlockSize, 0, jmax (16, samplesPerBlockExpected), nullptr, 0); - - if (supportsDoublePrecisionProcessing()) - { -- int32 vstPrecision = isUsingDoublePrecision() ? Vst2::kVstProcessPrecision64 -- : Vst2::kVstProcessPrecision32; -+ int32 vstPrecision = isUsingDoublePrecision() ? Vst2::vstProcessingSampleTypeDouble -+ : Vst2::vstProcessingSampleTypeFloat; - -- dispatch (Vst2::effSetProcessPrecision, 0, (pointer_sized_int) vstPrecision, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeSetSampleFloatType, 0, (pointer_sized_int) vstPrecision, nullptr, 0); - } - -- auto maxChannels = jmax (1, jmax (vstEffect->numInputs, vstEffect->numOutputs)); -+ auto maxChannels = jmax (1, jmax (vstEffect->numInputChannels, vstEffect->numOutputChannels)); - - tmpBufferFloat .setSize (maxChannels, samplesPerBlockExpected); - tmpBufferDouble.setSize (maxChannels, samplesPerBlockExpected); -@@ -1399,7 +1397,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - channelBufferFloat .calloc (static_cast (maxChannels)); - channelBufferDouble.calloc (static_cast (maxChannels)); - -- outOfPlaceBuffer.setSize (jmax (1, vstEffect->numOutputs), samplesPerBlockExpected); -+ outOfPlaceBuffer.setSize (jmax (1, vstEffect->numOutputChannels), samplesPerBlockExpected); - - if (! isPowerOn) - setPower (true); -@@ -1415,9 +1413,9 @@ struct VSTPluginInstance : public AudioPluginInstance, - } - } - -- dispatch (Vst2::effStartProcess, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeStartProcess, 0, 0, nullptr, 0); - -- setLatencySamples (vstEffect->initialDelay); -+ setLatencySamples (vstEffect->latency); - } - } - -@@ -1425,7 +1423,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (initialised) - { -- dispatch (Vst2::effStopProcess, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeStopProcess, 0, 0, nullptr, 0); - setPower (false); - } - -@@ -1478,8 +1476,8 @@ struct VSTPluginInstance : public AudioPluginInstance, - //============================================================================== - bool supportsDoublePrecisionProcessing() const override - { -- return ((vstEffect->flags & Vst2::effFlagsCanReplacing) != 0 -- && (vstEffect->flags & Vst2::effFlagsCanDoubleReplacing) != 0); -+ return ((vstEffect->flags & Vst2::vstEffectFlagInplaceAudio) != 0 -+ && (vstEffect->flags & Vst2::vstEffectFlagInplaceDoubleAudio) != 0); - } - - AudioProcessorParameter* getBypassParameter() const override { return vstSupportsBypass ? bypassParam.get() : nullptr; } -@@ -1497,15 +1495,15 @@ struct VSTPluginInstance : public AudioPluginInstance, - if (numInputBuses > 1 || numOutputBuses > 1) - return (layouts == getBusesLayout()); - -- return (layouts.getNumChannels (true, 0) <= vstEffect->numInputs -- && layouts.getNumChannels (false, 0) <= vstEffect->numOutputs); -+ return (layouts.getNumChannels (true, 0) <= vstEffect->numInputChannels -+ && layouts.getNumChannels (false, 0) <= vstEffect->numOutputChannels); - } - - //============================================================================== - #if JUCE_IOS || JUCE_ANDROID - bool hasEditor() const override { return false; } - #else -- bool hasEditor() const override { return vstEffect != nullptr && (vstEffect->flags & Vst2::effFlagsHasEditor) != 0; } -+ bool hasEditor() const override { return vstEffect != nullptr && (vstEffect->flags & Vst2::vstEffectFlagHasEditor) != 0; } - #endif - - AudioProcessorEditor* createEditor() override; -@@ -1515,9 +1513,9 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (isValidChannel (index, true)) - { -- Vst2::VstPinProperties pinProps; -- if (dispatch (Vst2::effGetInputProperties, index, 0, &pinProps, 0.0f) != 0) -- return String (pinProps.label, sizeof (pinProps.label)); -+ Vst2::VstPinInfo pinProps; -+ if (dispatch (Vst2::plugInOpcodeGetInputPinProperties, index, 0, &pinProps, 0.0f) != 0) -+ return String (pinProps.text, sizeof (pinProps.text)); - } - - return {}; -@@ -1528,9 +1526,9 @@ struct VSTPluginInstance : public AudioPluginInstance, - if (! isValidChannel (index, true)) - return false; - -- Vst2::VstPinProperties pinProps; -- if (dispatch (Vst2::effGetInputProperties, index, 0, &pinProps, 0.0f) != 0) -- return (pinProps.flags & Vst2::kVstPinIsStereo) != 0; -+ Vst2::VstPinInfo pinProps; -+ if (dispatch (Vst2::plugInOpcodeGetInputPinProperties, index, 0, &pinProps, 0.0f) != 0) -+ return (pinProps.flags & Vst2::vstPinInfoFlagIsStereo) != 0; - - return true; - } -@@ -1539,9 +1537,9 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (isValidChannel (index, false)) - { -- Vst2::VstPinProperties pinProps; -- if (dispatch (Vst2::effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0) -- return String (pinProps.label, sizeof (pinProps.label)); -+ Vst2::VstPinInfo pinProps; -+ if (dispatch (Vst2::plugInOpcodeGetOutputPinProperties, index, 0, &pinProps, 0.0f) != 0) -+ return String (pinProps.text, sizeof (pinProps.text)); - } - - return {}; -@@ -1552,9 +1550,9 @@ struct VSTPluginInstance : public AudioPluginInstance, - if (! isValidChannel (index, false)) - return false; - -- Vst2::VstPinProperties pinProps; -- if (dispatch (Vst2::effGetOutputProperties, index, 0, &pinProps, 0.0f) != 0) -- return (pinProps.flags & Vst2::kVstPinIsStereo) != 0; -+ Vst2::VstPinInfo pinProps; -+ if (dispatch (Vst2::plugInOpcodeGetOutputPinProperties, index, 0, &pinProps, 0.0f) != 0) -+ return (pinProps.flags & Vst2::vstPinInfoFlagIsStereo) != 0; - - return true; - } -@@ -1569,12 +1567,12 @@ struct VSTPluginInstance : public AudioPluginInstance, - int getNumPrograms() override { return vstEffect != nullptr ? jmax (0, vstEffect->numPrograms) : 0; } - - // NB: some plugs return negative numbers from this function. -- int getCurrentProgram() override { return (int) dispatch (Vst2::effGetProgram, 0, 0, nullptr, 0); } -+ int getCurrentProgram() override { return (int) dispatch (Vst2::plugInOpcodeGetCurrentProgram, 0, 0, 0, 0); } - - void setCurrentProgram (int newIndex) override - { - if (getNumPrograms() > 0 && newIndex != getCurrentProgram()) -- dispatch (Vst2::effSetProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), nullptr, 0); -+ dispatch (Vst2::plugInOpcodeSetCurrentProgram, 0, jlimit (0, getNumPrograms() - 1, newIndex), 0, 0); - } - - const String getProgramName (int index) override -@@ -1588,7 +1586,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - char nm[264] = { 0 }; - -- if (dispatch (Vst2::effGetProgramNameIndexed, jlimit (0, getNumPrograms(), index), -1, nm, 0) != 0) -+ if (dispatch (Vst2::plugInOpcodeGetProgramName, jlimit (0, getNumPrograms(), index), -1, nm, 0) != 0) - return String::fromUTF8 (nm).trim(); - } - } -@@ -1601,7 +1599,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - if (index >= 0 && index == getCurrentProgram()) - { - if (getNumPrograms() > 0 && newName != getCurrentProgramName()) -- dispatch (Vst2::effSetProgramName, 0, 0, (void*) newName.substring (0, 24).toRawUTF8(), 0.0f); -+ dispatch (Vst2::plugInOpcodeSetCurrentProgramName, 0, 0, (void*) newName.substring (0, 24).toRawUTF8(), 0.0f); - } - else - { -@@ -1619,7 +1617,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - //============================================================================== - void timerCallback() override - { -- if (dispatch (Vst2::effIdle, 0, 0, nullptr, 0) == 0) -+ if (dispatch (Vst2::plugInOpcodeIdle, 0, 0, nullptr, 0) == 0) - stopTimer(); - } - -@@ -1633,7 +1631,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - switch (opcode) - { -- case Vst2::audioMasterAutomate: -+ case Vst2::hostOpcodeParameterChanged: - if (auto* param = getParameters()[index]) - param->sendValueChangedMessageToListeners (opt); - else -@@ -1641,23 +1639,23 @@ struct VSTPluginInstance : public AudioPluginInstance, - - break; - -- case Vst2::audioMasterProcessEvents: handleMidiFromPlugin ((const Vst2::VstEvents*) ptr); break; -- case Vst2::audioMasterGetTime: return getVSTTime(); -- case Vst2::audioMasterIdle: handleIdle(); break; -- case Vst2::audioMasterSizeWindow: setWindowSize (index, (int) value); return 1; -- case Vst2::audioMasterUpdateDisplay: triggerAsyncUpdate(); break; -- case Vst2::audioMasterIOChanged: setLatencySamples (vstEffect->initialDelay); break; -- case Vst2::audioMasterNeedIdle: startTimer (50); break; -+ case Vst2::hostOpcodePreAudioProcessingEvents: handleMidiFromPlugin ((const Vst2::VstEventBlock*) ptr); break; -+ case Vst2::hostOpcodeGetTimingInfo: return getVSTTime(); -+ case Vst2::hostOpcodeIdle: handleIdle(); break; -+ case Vst2::hostOpcodeWindowSize: setWindowSize (index, (int) value); return 1; -+ case Vst2::hostOpcodeUpdateView: triggerAsyncUpdate(); break; -+ case Vst2::hostOpcodeIOModified: setLatencySamples (vstEffect->latency); break; -+ case Vst2::hostOpcodeNeedsIdle: startTimer (50); break; - -- case Vst2::audioMasterGetSampleRate: return (pointer_sized_int) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue); -- case Vst2::audioMasterGetBlockSize: return (pointer_sized_int) (getBlockSize() > 0 ? getBlockSize() : defaultVSTBlockSizeValue); -- case Vst2::audioMasterWantMidi: wantsMidiMessages = true; break; -- case Vst2::audioMasterGetDirectory: return getVstDirectory(); -+ case Vst2::hostOpcodeGetSampleRate: return (pointer_sized_int) (getSampleRate() > 0 ? getSampleRate() : defaultVSTSampleRateValue); -+ case Vst2::hostOpcodeGetBlockSize: return (pointer_sized_int) (getBlockSize() > 0 ? getBlockSize() : defaultVSTBlockSizeValue); -+ case Vst2::hostOpcodePlugInWantsMidi: wantsMidiMessages = true; break; -+ case Vst2::hostOpcodeGetDirectory: return getVstDirectory(); - -- case Vst2::audioMasterTempoAt: return (pointer_sized_int) (extraFunctions != nullptr ? extraFunctions->getTempoAt ((int64) value) : 0); -- case Vst2::audioMasterGetAutomationState: return (pointer_sized_int) (extraFunctions != nullptr ? extraFunctions->getAutomationState() : 0); -+ case Vst2::hostOpcodeTempoAt: return (pointer_sized_int) (extraFunctions != nullptr ? extraFunctions->getTempoAt ((int64) value) : 0); -+ case Vst2::hostOpcodeGetAutomationState: return (pointer_sized_int) (extraFunctions != nullptr ? extraFunctions->getAutomationState() : 0); - -- case Vst2::audioMasterBeginEdit: -+ case Vst2::hostOpcodeParameterChangeGestureBegin: - if (auto* param = getParameters()[index]) - param->beginChangeGesture(); - else -@@ -1665,7 +1663,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - - break; - -- case Vst2::audioMasterEndEdit: -+ case Vst2::hostOpcodeParameterChangeGestureEnd: - if (auto* param = getParameters()[index]) - param->endChangeGesture(); - else -@@ -1673,28 +1671,28 @@ struct VSTPluginInstance : public AudioPluginInstance, - - break; - -- case Vst2::audioMasterPinConnected: return isValidChannel (index, value == 0) ? 0 : 1; // (yes, 0 = true) -- case Vst2::audioMasterGetCurrentProcessLevel: return isNonRealtime() ? 4 : 0; -+ case Vst2::hostOpcodePinConnected: return isValidChannel (index, value == 0) ? 0 : 1; // (yes, 0 = true) -+ case Vst2::hostOpcodeGetCurrentAudioProcessingLevel: return isNonRealtime() ? 4 : 0; - - // none of these are handled (yet)... -- case Vst2::audioMasterSetTime: -- case Vst2::audioMasterGetParameterQuantization: -- case Vst2::audioMasterGetInputLatency: -- case Vst2::audioMasterGetOutputLatency: -- case Vst2::audioMasterGetPreviousPlug: -- case Vst2::audioMasterGetNextPlug: -- case Vst2::audioMasterWillReplaceOrAccumulate: -- case Vst2::audioMasterOfflineStart: -- case Vst2::audioMasterOfflineRead: -- case Vst2::audioMasterOfflineWrite: -- case Vst2::audioMasterOfflineGetCurrentPass: -- case Vst2::audioMasterOfflineGetCurrentMetaPass: -- case Vst2::audioMasterGetOutputSpeakerArrangement: -- case Vst2::audioMasterVendorSpecific: -- case Vst2::audioMasterSetIcon: -- case Vst2::audioMasterGetLanguage: -- case Vst2::audioMasterOpenWindow: -- case Vst2::audioMasterCloseWindow: -+ case Vst2::hostOpcodeSetTime: -+ case Vst2::hostOpcodeGetParameterInterval: -+ case Vst2::hostOpcodeGetInputLatency: -+ case Vst2::hostOpcodeGetOutputLatency: -+ case Vst2::hostOpcodeGetPreviousPlugIn: -+ case Vst2::hostOpcodeGetNextPlugIn: -+ case Vst2::hostOpcodeWillReplace: -+ case Vst2::hostOpcodeOfflineStart: -+ case Vst2::hostOpcodeOfflineReadSource: -+ case Vst2::hostOpcodeOfflineWrite: -+ case Vst2::hostOpcodeOfflineGetCurrentPass: -+ case Vst2::hostOpcodeOfflineGetCurrentMetaPass: -+ case Vst2::hostOpcodeGetOutputSpeakerConfiguration: -+ case Vst2::hostOpcodeManufacturerSpecific: -+ case Vst2::hostOpcodeSetIcon: -+ case Vst2::hostOpcodeGetLanguage: -+ case Vst2::hostOpcodeOpenEditorWindow: -+ case Vst2::hostOpcodeCloseEditorWindow: - break; - - default: -@@ -1709,19 +1707,19 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - switch (opcode) - { -- case Vst2::audioMasterCanDo: return handleCanDo ((const char*) ptr); -- case Vst2::audioMasterVersion: return 2400; -- case Vst2::audioMasterCurrentId: return shellUIDToCreate; -- case Vst2::audioMasterGetNumAutomatableParameters: return 0; -- case Vst2::audioMasterGetAutomationState: return 1; -- case Vst2::audioMasterGetVendorVersion: return 0x0101; -+ case Vst2::hostOpcodeCanHostDo: return handleCanDo ((const char*) ptr); -+ case Vst2::hostOpcodeVstVersion: return 2400; -+ case Vst2::hostOpcodeCurrentId: return shellUIDToCreate; -+ case Vst2::hostOpcodeGetNumberOfAutomatableParameters: return 0; -+ case Vst2::hostOpcodeGetAutomationState: return 1; -+ case Vst2::hostOpcodeGetManufacturerVersion: return 0x0101; - -- case Vst2::audioMasterGetVendorString: -- case Vst2::audioMasterGetProductString: return getHostName ((char*) ptr); -+ case Vst2::hostOpcodeGetManufacturerName: -+ case Vst2::hostOpcodeGetProductName: return getHostName ((char*) ptr); - -- case Vst2::audioMasterGetSampleRate: return (pointer_sized_int) defaultVSTSampleRateValue; -- case Vst2::audioMasterGetBlockSize: return (pointer_sized_int) defaultVSTBlockSizeValue; -- case Vst2::audioMasterSetOutputSampleRate: return 0; -+ case Vst2::hostOpcodeGetSampleRate: return (pointer_sized_int) defaultVSTSampleRateValue; -+ case Vst2::hostOpcodeGetBlockSize: return (pointer_sized_int) defaultVSTBlockSizeValue; -+ case Vst2::hostOpcodeSetOutputSampleRate: return 0; - - default: - DBG ("*** Unhandled VST Callback: " + String ((int) opcode)); -@@ -1750,7 +1748,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - UseResFile (vstModule->resFileId); - #endif - -- result = vstEffect->dispatcher (vstEffect, opcode, index, value, ptr, opt); -+ result = vstEffect->dispatchFunction (vstEffect, opcode, index, value, ptr, opt); - - #if JUCE_MAC - auto newResFile = CurResFile(); -@@ -1956,14 +1954,14 @@ struct VSTPluginInstance : public AudioPluginInstance, - return true; - } - -- bool usesChunks() const noexcept { return vstEffect != nullptr && (vstEffect->flags & Vst2::effFlagsProgramChunks) != 0; } -+ bool usesChunks() const noexcept { return vstEffect != nullptr && (vstEffect->flags & Vst2::vstEffectFlagDataInChunks) != 0; } - - bool getChunkData (MemoryBlock& mb, bool isPreset, int maxSizeMB) const - { - if (usesChunks()) - { - void* data = nullptr; -- auto bytes = (size_t) dispatch (Vst2::effGetChunk, isPreset ? 1 : 0, 0, &data, 0.0f); -+ auto bytes = (size_t) dispatch (Vst2::plugInOpcodeGetData, isPreset ? 1 : 0, 0, &data, 0.0f); - - if (data != nullptr && bytes <= (size_t) maxSizeMB * 1024 * 1024) - { -@@ -1981,7 +1979,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - { - if (size > 0 && usesChunks()) - { -- dispatch (Vst2::effSetChunk, isPreset ? 1 : 0, size, (void*) data, 0.0f); -+ dispatch (Vst2::plugInOpcodeSetData, isPreset ? 1 : 0, size, (void*) data, 0.0f); - - if (! isPreset) - updateStoredProgramNames(); -@@ -1992,7 +1990,7 @@ struct VSTPluginInstance : public AudioPluginInstance, - return false; - } - -- Vst2::AEffect* vstEffect; -+ Vst2::VstEffectInterface* vstEffect; - ModuleHandle::Ptr vstModule; - - std::unique_ptr extraFunctions; -@@ -2015,7 +2013,7 @@ private: - currentValue = (newValue != 0.0f); - - if (parent.vstSupportsBypass) -- parent.dispatch (Vst2::effSetBypass, 0, currentValue ? 1 : 0, nullptr, 0.0f); -+ parent.dispatch (Vst2::plugInOpcodeSetBypass, 0, currentValue ? 1 : 0, nullptr, 0.0f); - } - - float getValueForText (const String& text) const override -@@ -2061,7 +2059,7 @@ private: - CriticalSection midiInLock; - MidiBuffer incomingMidi; - VSTMidiEventList midiEventsToSend; -- Vst2::VstTimeInfo vstHostTime; -+ Vst2::VstTimingInformation vstHostTime; - - AudioBuffer tmpBufferFloat; - HeapBlock channelBufferFloat; -@@ -2098,7 +2096,7 @@ private: - if (auto* app = JUCEApplicationBase::getInstance()) - hostName = app->getApplicationName(); - -- hostName.copyToUTF8 (name, (size_t) jmin (Vst2::kVstMaxVendorStrLen, Vst2::kVstMaxProductStrLen) - 1); -+ hostName.copyToUTF8 (name, (size_t) jmin (Vst2::vstMaxManufacturerStringLength, Vst2::vstMaxPlugInNameStringLength) - 1); - return 1; - } - -@@ -2124,7 +2122,7 @@ private: - - #if JUCE_MAC - if (getActiveEditor() != nullptr) -- dispatch (Vst2::effEditIdle, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeEditorIdle, 0, 0, nullptr, 0); - #endif - - Timer::callPendingTimersSynchronously(); -@@ -2159,9 +2157,9 @@ private: - } - - //============================================================================== -- static Vst2::AEffect* constructEffect (const ModuleHandle::Ptr& module) -+ static Vst2::VstEffectInterface* constructEffect (const ModuleHandle::Ptr& module) - { -- Vst2::AEffect* effect = nullptr; -+ Vst2::VstEffectInterface* effect = nullptr; - try - { - const IdleCallRecursionPreventer icrp; -@@ -2178,10 +2176,10 @@ private: - JUCE_VST_WRAPPER_INVOKE_MAIN - } - -- if (effect != nullptr && effect->magic == 0x56737450 /* 'VstP' */) -+ if (effect != nullptr && effect->interfaceIdentifier == Vst2::juceVstInterfaceIdentifier) - { -- jassert (effect->resvd2 == 0); -- jassert (effect->object != nullptr); -+ jassert (effect->hostSpace2 == 0); -+ jassert (effect->effectPointer != 0); - - _fpreset(); // some dodgy plugs mess around with this - } -@@ -2196,11 +2194,11 @@ private: - return effect; - } - -- static BusesProperties queryBusIO (Vst2::AEffect* effect) -+ static BusesProperties queryBusIO (Vst2::VstEffectInterface* effect) - { - BusesProperties returnValue; - -- if (effect->numInputs == 0 && effect->numOutputs == 0) -+ if (effect->numInputChannels == 0 && effect->numOutputChannels == 0) - return returnValue; - - // Workaround for old broken JUCE plug-ins which would return an invalid -@@ -2211,14 +2209,14 @@ private: - // plug-in is reporting. - if (! pluginHasDefaultChannelLayouts (effect)) - { -- SpeakerMappings::VstSpeakerConfigurationHolder canonicalIn (AudioChannelSet::canonicalChannelSet (effect->numInputs)); -- SpeakerMappings::VstSpeakerConfigurationHolder canonicalOut (AudioChannelSet::canonicalChannelSet (effect->numOutputs)); -+ SpeakerMappings::VstSpeakerConfigurationHolder canonicalIn (AudioChannelSet::canonicalChannelSet (effect->numInputChannels)); -+ SpeakerMappings::VstSpeakerConfigurationHolder canonicalOut (AudioChannelSet::canonicalChannelSet (effect->numOutputChannels)); - -- effect->dispatcher (effect, Vst2::effSetSpeakerArrangement, 0, -+ effect->dispatchFunction (effect, Vst2::plugInOpcodeSetSpeakerConfiguration, 0, - (pointer_sized_int) &canonicalIn.get(), (void*) &canonicalOut.get(), 0.0f); - } - -- HeapBlock inArrBlock (1, true), outArrBlock (1, true); -+ HeapBlock inArrBlock (1, true), outArrBlock (1, true); - - auto* inArr = inArrBlock.get(); - auto* outArr = outArrBlock.get(); -@@ -2229,35 +2227,35 @@ private: - for (int dir = 0; dir < 2; ++dir) - { - const bool isInput = (dir == 0); -- const int opcode = (isInput ? Vst2::effGetInputProperties : Vst2::effGetOutputProperties); -- const int maxChannels = (isInput ? effect->numInputs : effect->numOutputs); -- const Vst2::VstSpeakerArrangement* arr = (isInput ? inArr : outArr); -+ const int opcode = (isInput ? Vst2::plugInOpcodeGetInputPinProperties : Vst2::plugInOpcodeGetOutputPinProperties); -+ const int maxChannels = (isInput ? effect->numInputChannels : effect->numOutputChannels); -+ const Vst2::VstSpeakerConfiguration* arr = (isInput ? inArr : outArr); - bool busAdded = false; - -- Vst2::VstPinProperties pinProps; -+ Vst2::VstPinInfo pinProps; - AudioChannelSet layout; - - for (int ch = 0; ch < maxChannels; ch += layout.size()) - { -- if (effect->dispatcher (effect, opcode, ch, 0, &pinProps, 0.0f) == 0) -+ if (effect->dispatchFunction (effect, opcode, ch, 0, &pinProps, 0.0f) == 0) - break; - -- if ((pinProps.flags & Vst2::kVstPinUseSpeaker) != 0) -+ if ((pinProps.flags & Vst2::vstPinInfoFlagValid) != 0) - { -- layout = SpeakerMappings::vstArrangementTypeToChannelSet (pinProps.arrangementType, 0); -+ layout = SpeakerMappings::vstArrangementTypeToChannelSet (pinProps.configurationType, 0); - - if (layout.isDisabled()) - break; - } - else if (arr == nullptr) - { -- layout = ((pinProps.flags & Vst2::kVstPinIsStereo) != 0 ? AudioChannelSet::stereo() : AudioChannelSet::mono()); -+ layout = ((pinProps.flags & Vst2::vstPinInfoFlagIsStereo) != 0 ? AudioChannelSet::stereo() : AudioChannelSet::mono()); - } - else - break; - - busAdded = true; -- returnValue.addBus (isInput, pinProps.label, layout, true); -+ returnValue.addBus (isInput, pinProps.text, layout, true); - } - - // no buses? -@@ -2265,8 +2263,8 @@ private: - { - String busName = (isInput ? "Input" : "Output"); - -- if (effect->dispatcher (effect, opcode, 0, 0, &pinProps, 0.0f) != 0) -- busName = pinProps.label; -+ if (effect->dispatchFunction (effect, opcode, 0, 0, &pinProps, 0.0f) != 0) -+ busName = pinProps.text; - - if (arr != nullptr) - layout = SpeakerMappings::vstArrangementTypeToChannelSet (*arr); -@@ -2280,9 +2278,9 @@ private: - return returnValue; - } - -- static bool pluginHasDefaultChannelLayouts (Vst2::AEffect* effect) -+ static bool pluginHasDefaultChannelLayouts (Vst2::VstEffectInterface* effect) - { -- HeapBlock inArrBlock (1, true), outArrBlock (1, true); -+ HeapBlock inArrBlock (1, true), outArrBlock (1, true); - - auto* inArr = inArrBlock.get(); - auto* outArr = outArrBlock.get(); -@@ -2293,40 +2291,40 @@ private: - for (int dir = 0; dir < 2; ++dir) - { - const bool isInput = (dir == 0); -- const int opcode = (isInput ? Vst2::effGetInputProperties : Vst2::effGetOutputProperties); -- const int maxChannels = (isInput ? effect->numInputs : effect->numOutputs); -+ const int opcode = (isInput ? Vst2::plugInOpcodeGetInputPinProperties : Vst2::plugInOpcodeGetOutputPinProperties); -+ const int maxChannels = (isInput ? effect->numInputChannels : effect->numOutputChannels); - - int channels = 1; - - for (int ch = 0; ch < maxChannels; ch += channels) - { -- Vst2::VstPinProperties pinProps; -+ Vst2::VstPinInfo pinProps; - -- if (effect->dispatcher (effect, opcode, ch, 0, &pinProps, 0.0f) == 0) -+ if (effect->dispatchFunction (effect, opcode, ch, 0, &pinProps, 0.0f) == 0) - return false; - -- if ((pinProps.flags & Vst2::kVstPinUseSpeaker) != 0) -+ if ((pinProps.flags & Vst2::vstPinInfoFlagValid) != 0) - return true; - -- channels = (pinProps.flags & Vst2::kVstPinIsStereo) != 0 ? 2 : 1; -+ channels = (pinProps.flags & Vst2::vstPinInfoFlagIsStereo) != 0 ? 2 : 1; - } - } - - return false; - } - -- static bool getSpeakerArrangementWrapper (Vst2::AEffect* effect, -- Vst2::VstSpeakerArrangement* inArr, -- Vst2::VstSpeakerArrangement* outArr) -+ static bool getSpeakerArrangementWrapper (Vst2::VstEffectInterface* effect, -+ Vst2::VstSpeakerConfiguration* inArr, -+ Vst2::VstSpeakerConfiguration* outArr) - { - // Workaround: unfortunately old JUCE VST-2 plug-ins had a bug and would crash if - // you try to get the speaker arrangement when there are no input channels present. - // Hopefully, one day (when there are no more old JUCE plug-ins around), we can - // comment out the next two lines. -- if (effect->numInputs == 0) -+ if (effect->numInputChannels == 0) - return false; - -- return (effect->dispatcher (effect, Vst2::effGetSpeakerArrangement, 0, -+ return (effect->dispatchFunction (effect, Vst2::plugInOpcodeGetSpeakerArrangement, 0, - reinterpret_cast (&inArr), &outArr, 0.0f) != 0); - } - -@@ -2360,56 +2358,56 @@ private: - if (currentPlayHead->getCurrentPosition (position)) - { - -- vstHostTime.samplePos = (double) position.timeInSamples; -- vstHostTime.tempo = position.bpm; -- vstHostTime.timeSigNumerator = position.timeSigNumerator; -- vstHostTime.timeSigDenominator = position.timeSigDenominator; -- vstHostTime.ppqPos = position.ppqPosition; -- vstHostTime.barStartPos = position.ppqPositionOfLastBarStart; -- vstHostTime.flags |= Vst2::kVstTempoValid -- | Vst2::kVstTimeSigValid -- | Vst2::kVstPpqPosValid -- | Vst2::kVstBarsValid; -+ vstHostTime.samplePosition = (double) position.timeInSamples; -+ vstHostTime.tempoBPM = position.bpm; -+ vstHostTime.timeSignatureNumerator = position.timeSigNumerator; -+ vstHostTime.timeSignatureDenominator = position.timeSigDenominator; -+ vstHostTime.musicalPosition = position.ppqPosition; -+ vstHostTime.lastBarPosition = position.ppqPositionOfLastBarStart; -+ vstHostTime.flags |= Vst2::vstTimingInfoFlagTempoValid -+ | Vst2::vstTimingInfoFlagTimeSignatureValid -+ | Vst2::vstTimingInfoFlagMusicalPositionValid -+ | Vst2::vstTimingInfoFlagLastBarPositionValid; - - int32 newTransportFlags = 0; -- if (position.isPlaying) newTransportFlags |= Vst2::kVstTransportPlaying; -- if (position.isRecording) newTransportFlags |= Vst2::kVstTransportRecording; -+ if (position.isPlaying) newTransportFlags |= Vst2::vstTimingInfoFlagCurrentlyPlaying; -+ if (position.isRecording) newTransportFlags |= Vst2::vstTimingInfoFlagCurrentlyRecording; - -- if (newTransportFlags != (vstHostTime.flags & (Vst2::kVstTransportPlaying -- | Vst2::kVstTransportRecording))) -- vstHostTime.flags = (vstHostTime.flags & ~(Vst2::kVstTransportPlaying | Vst2::kVstTransportRecording)) | newTransportFlags | Vst2::kVstTransportChanged; -+ if (newTransportFlags != (vstHostTime.flags & (Vst2::vstTimingInfoFlagCurrentlyPlaying -+ | Vst2::vstTimingInfoFlagCurrentlyRecording))) -+ vstHostTime.flags = (vstHostTime.flags & ~(Vst2::vstTimingInfoFlagCurrentlyPlaying | Vst2::vstTimingInfoFlagCurrentlyRecording)) | newTransportFlags | Vst2::vstTimingInfoFlagTransportChanged; - else -- vstHostTime.flags &= ~Vst2::kVstTransportChanged; -+ vstHostTime.flags &= ~Vst2::vstTimingInfoFlagTransportChanged; - - switch (position.frameRate) - { -- case AudioPlayHead::fps24: setHostTimeFrameRate (Vst2::kVstSmpte24fps, 24.0, position.timeInSeconds); break; -- case AudioPlayHead::fps25: setHostTimeFrameRate (Vst2::kVstSmpte25fps, 25.0, position.timeInSeconds); break; -- case AudioPlayHead::fps30: setHostTimeFrameRate (Vst2::kVstSmpte30fps, 30.0, position.timeInSeconds); break; -- case AudioPlayHead::fps60: setHostTimeFrameRate (Vst2::kVstSmpte60fps, 60.0, position.timeInSeconds); break; -- -- case AudioPlayHead::fps23976: setHostTimeFrameRateDrop (Vst2::kVstSmpte239fps, 24.0, position.timeInSeconds); break; -- case AudioPlayHead::fps2997: setHostTimeFrameRateDrop (Vst2::kVstSmpte2997fps, 30.0, position.timeInSeconds); break; -- case AudioPlayHead::fps2997drop: setHostTimeFrameRateDrop (Vst2::kVstSmpte2997dfps, 30.0, position.timeInSeconds); break; -- case AudioPlayHead::fps30drop: setHostTimeFrameRateDrop (Vst2::kVstSmpte30dfps, 30.0, position.timeInSeconds); break; -- case AudioPlayHead::fps60drop: setHostTimeFrameRateDrop (Vst2::kVstSmpte599fps, 60.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps24: setHostTimeFrameRate (Vst2::vstSmpteRateFps24, 24.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps25: setHostTimeFrameRate (Vst2::vstSmpteRateFps25, 25.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps30: setHostTimeFrameRate (Vst2::vstSmpteRateFps30, 30.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps60: setHostTimeFrameRate (Vst2::vstSmpteRateFps60, 60.0, position.timeInSeconds); break; -+ -+ case AudioPlayHead::fps23976: setHostTimeFrameRateDrop (Vst2::vstSmpteRateFps239, 24.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps2997: setHostTimeFrameRateDrop (Vst2::vstSmpteRateFps2997, 30.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps2997drop: setHostTimeFrameRateDrop (Vst2::vstSmpteRateFps2997drop, 30.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps30drop: setHostTimeFrameRateDrop (Vst2::vstSmpteRateFps30drop, 30.0, position.timeInSeconds); break; -+ case AudioPlayHead::fps60drop: setHostTimeFrameRateDrop (Vst2::vstSmpteRateFps599, 60.0, position.timeInSeconds); break; - default: break; - } - - if (position.isLooping) - { -- vstHostTime.cycleStartPos = position.ppqLoopStart; -- vstHostTime.cycleEndPos = position.ppqLoopEnd; -- vstHostTime.flags |= (Vst2::kVstCyclePosValid | Vst2::kVstTransportCycleActive); -+ vstHostTime.loopStartPosition = position.ppqLoopStart; -+ vstHostTime.loopEndPosition = position.ppqLoopEnd; -+ vstHostTime.flags |= (Vst2::vstTimingInfoFlagLoopPositionValid | Vst2::vstTimingInfoFlagLoopActive); - } - else - { -- vstHostTime.flags &= ~(Vst2::kVstCyclePosValid | Vst2::kVstTransportCycleActive); -+ vstHostTime.flags &= ~(Vst2::vstTimingInfoFlagLoopPositionValid | Vst2::vstTimingInfoFlagLoopActive); - } - } - } - -- vstHostTime.nanoSeconds = getVSTHostTimeNanoseconds(); -+ vstHostTime.systemTimeNanoseconds = getVSTHostTimeNanoseconds(); - - if (wantsMidiMessages) - { -@@ -2424,13 +2422,13 @@ private: - midiEventsToSend.addEvent (midiData, numBytesOfMidiData, - jlimit (0, numSamples - 1, samplePosition)); - -- vstEffect->dispatcher (vstEffect, Vst2::effProcessEvents, 0, 0, midiEventsToSend.events, 0); -+ vstEffect->dispatchFunction (vstEffect, Vst2::plugInOpcodePreAudioProcessingEvents, 0, 0, midiEventsToSend.events, 0); - } - - _clearfp(); - - // always ensure that the buffer is at least as large as the maximum number of channels -- auto maxChannels = jmax (vstEffect->numInputs, vstEffect->numOutputs); -+ auto maxChannels = jmax (vstEffect->numInputChannels, vstEffect->numOutputChannels); - auto channels = channelBuffer.get(); - - if (numChannels < maxChannels) -@@ -2469,35 +2467,35 @@ private: - //============================================================================== - inline void invokeProcessFunction (AudioBuffer& buffer, int32 sampleFrames) - { -- if ((vstEffect->flags & Vst2::effFlagsCanReplacing) != 0) -+ if ((vstEffect->flags & Vst2::vstEffectFlagInplaceAudio) != 0) - { -- vstEffect->processReplacing (vstEffect, buffer.getArrayOfWritePointers(), -+ vstEffect->processAudioInplaceFunction (vstEffect, buffer.getArrayOfWritePointers(), - buffer.getArrayOfWritePointers(), sampleFrames); - } - else - { -- outOfPlaceBuffer.setSize (vstEffect->numOutputs, sampleFrames); -+ outOfPlaceBuffer.setSize (vstEffect->numOutputChannels, sampleFrames); - outOfPlaceBuffer.clear(); - -- vstEffect->process (vstEffect, buffer.getArrayOfWritePointers(), -- outOfPlaceBuffer.getArrayOfWritePointers(), sampleFrames); -+ vstEffect->processAudioFunction (vstEffect, buffer.getArrayOfWritePointers(), -+ outOfPlaceBuffer.getArrayOfWritePointers(), sampleFrames); - -- for (int i = vstEffect->numOutputs; --i >= 0;) -+ for (int i = vstEffect->numOutputChannels; --i >= 0;) - buffer.copyFrom (i, 0, outOfPlaceBuffer.getReadPointer (i), sampleFrames); - } - } - - inline void invokeProcessFunction (AudioBuffer& buffer, int32 sampleFrames) - { -- vstEffect->processDoubleReplacing (vstEffect, buffer.getArrayOfWritePointers(), -+ vstEffect->processDoubleAudioInplaceFunction (vstEffect, buffer.getArrayOfWritePointers(), - buffer.getArrayOfWritePointers(), sampleFrames); - } - - //============================================================================== - void setHostTimeFrameRate (long frameRateIndex, double frameRate, double currentTime) noexcept - { -- vstHostTime.flags |= Vst2::kVstSmpteValid; -- vstHostTime.smpteFrameRate = (int32) frameRateIndex; -+ vstHostTime.flags |= Vst2::vstTimingInfoFlagSmpteValid; -+ vstHostTime.smpteRate = (int32) frameRateIndex; - vstHostTime.smpteOffset = (int32) (currentTime * 80.0 * frameRate + 0.5); - } - -@@ -2528,7 +2526,7 @@ private: - if (vstEffect == nullptr) - return {}; - -- jassert (index >= 0 && index < vstEffect->numParams); -+ jassert (index >= 0 && index < vstEffect->numParameters); - char nm[256] = { 0 }; - dispatch (opcode, index, 0, nm, 0); - return String::createStringFromData (nm, (int) sizeof (nm)).trim(); -@@ -2542,7 +2540,7 @@ private: - { - { - char nm[256] = { 0 }; -- dispatch (Vst2::effGetProgramName, 0, 0, nm, 0); -+ dispatch (Vst2::plugInOpcodeGetCurrentProgramName, 0, 0, nm, 0); - progName = String::createStringFromData (nm, (int) sizeof (nm)).trim(); - } - -@@ -2586,7 +2584,7 @@ private: - char nm[256] = { 0 }; - - // only do this if the plugin can't use indexed names.. -- if (dispatch (Vst2::effGetProgramNameIndexed, 0, -1, nm, 0) == 0) -+ if (dispatch (Vst2::plugInOpcodeGetProgramName, 0, -1, nm, 0) == 0) - { - auto oldProgram = getCurrentProgram(); - MemoryBlock oldSettings; -@@ -2604,7 +2602,7 @@ private: - } - } - -- void handleMidiFromPlugin (const Vst2::VstEvents* events) -+ void handleMidiFromPlugin (const Vst2::VstEventBlock* events) - { - if (events != nullptr) - { -@@ -2651,11 +2649,11 @@ private: - } - - //============================================================================== -- int getVersionNumber() const noexcept { return vstEffect != nullptr ? vstEffect->version : 0; } -+ int getVersionNumber() const noexcept { return vstEffect != nullptr ? vstEffect->plugInVersion : 0; } - - String getVersion() const - { -- auto v = (unsigned int) dispatch (Vst2::effGetVendorVersion, 0, 0, nullptr, 0); -+ auto v = (unsigned int) dispatch (Vst2::plugInOpcodeGetManufacturerVersion, 0, 0, nullptr, 0); - - String s; - -@@ -2728,7 +2726,7 @@ private: - - void setPower (const bool on) - { -- dispatch (Vst2::effMainsChanged, 0, on ? 1 : 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeResumeSuspend, 0, on ? 1 : 0, nullptr, 0); - isPowerOn = on; - } - -@@ -2797,11 +2795,11 @@ public: - - activeVSTWindows.add (this); - -- Vst2::ERect* rect = nullptr; -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -+ Vst2::VstEditorBounds* rect = nullptr; -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); - - if (rect != nullptr) -- setSize (rect->right - rect->left, rect->bottom - rect->top); -+ setSize (rect->rightmost - rect->leftmost, rect->lower - rect->upper); - else - setSize (1, 1); - -@@ -2952,11 +2950,11 @@ public: - setScaleFactorAndDispatchMessage (newScaleFactor); - - #if JUCE_WINDOWS -- Vst2::ERect* rect = nullptr; -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -+ Vst2::VstEditorBounds* rect = nullptr; -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); - -- if (! isWindowSizeCorrectForPlugin (roundToInt ((rect->right - rect->left) / nativeScaleFactor), -- roundToInt ((rect->bottom - rect->top) / nativeScaleFactor))) -+ if (! isWindowSizeCorrectForPlugin (roundToInt ((rect->rightmost - rect->leftmost) / nativeScaleFactor), -+ roundToInt ((rect->lower - rect->upper) / nativeScaleFactor))) - return; - #endif - -@@ -2971,7 +2969,7 @@ public: - nativeScaleFactor = (float) newScaleFactor; - - if (pluginRespondsToDPIChanges) -- dispatch (Vst2::effVendorSpecific, -+ dispatch (Vst2::plugInOpcodeManufacturerSpecific, - JUCE_MULTICHAR_CONSTANT ('P', 'r', 'e', 'S'), - JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's'), - nullptr, nativeScaleFactor); -@@ -3000,7 +2998,7 @@ public: - if (! reentrantGuard) - { - reentrantGuard = true; -- plugin.dispatch (Vst2::effEditIdle, 0, 0, nullptr, 0); -+ plugin.dispatch (Vst2::plugInOpcodeEditorIdle, 0, 0, nullptr, 0); - reentrantGuard = false; - } - -@@ -3032,7 +3030,7 @@ public: - activeVSTWindows.add (this); - - #if JUCE_MAC -- dispatch (Vst2::effEditTop, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeeffEditorTop, 0, 0, nullptr, 0); - #endif - } - -@@ -3081,24 +3079,24 @@ private: - - isOpen = true; - -- Vst2::ERect* rect = nullptr; -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -- dispatch (Vst2::effEditOpen, 0, 0, parentWindow, 0); -+ Vst2::VstEditorBounds* rect = nullptr; -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); -+ dispatch (Vst2::plugInOpcodeOpenEditor, 0, 0, parentWindow, 0); - - // do this before and after like in the steinberg example -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -- dispatch (Vst2::effGetProgram, 0, 0, nullptr, 0); // also in steinberg code -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); -+ dispatch (Vst2::plugInOpcodeGetCurrentProgram, 0, 0, nullptr, 0); // also in steinberg code - - // Install keyboard hooks -- pluginWantsKeys = (dispatch (Vst2::effKeysRequired, 0, 0, nullptr, 0) == 0); -+ pluginWantsKeys = (dispatch (Vst2::plugInOpcodeKeyboardFocusRequired, 0, 0, nullptr, 0) == 0); - - // double-check it's not too tiny - int w = 250, h = 150; - - if (rect != nullptr) - { -- w = rect->right - rect->left; -- h = rect->bottom - rect->top; -+ w = rect->rightmost - rect->leftmost; -+ h = rect->lower - rect->upper; - - if (w == 0 || h == 0) - { -@@ -3136,15 +3134,15 @@ private: - dpiDisabler.reset (new ScopedDPIAwarenessDisabler()); - #endif - -- Vst2::ERect* rect = nullptr; -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -+ Vst2::VstEditorBounds* rect = nullptr; -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); - - #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE - // some plug-ins are fussy about this - dpiDisabler.reset (nullptr); - #endif - -- dispatch (Vst2::effEditOpen, 0, 0, getWindowHandle(), 0); -+ dispatch (Vst2::plugInOpcodeOpenEditor, 0, 0, getWindowHandle(), 0); - - #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE - if (! pluginRespondsToDPIChanges) -@@ -3152,11 +3150,11 @@ private: - #endif - - // do this before and after like in the steinberg example -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -- dispatch (Vst2::effGetProgram, 0, 0, nullptr, 0); // also in steinberg code -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); -+ dispatch (Vst2::plugInOpcodeGetCurrentProgram, 0, 0, nullptr, 0); // also in steinberg code - - // Install keyboard hooks -- pluginWantsKeys = (dispatch (Vst2::effKeysRequired, 0, 0, nullptr, 0) == 0); -+ pluginWantsKeys = (dispatch (Vst2::plugInOpcodeKeyboardFocusRequired, 0, 0, nullptr, 0) == 0); - - #if JUCE_WINDOWS - originalWndProc = 0; -@@ -3191,8 +3189,8 @@ private: - - if (rect != nullptr) - { -- auto rw = rect->right - rect->left; -- auto rh = rect->bottom - rect->top; -+ auto rw = rect->rightmost - rect->leftmost; -+ auto rh = rect->lower - rect->upper; - - if ((rw > 50 && rh > 50 && rw < 2000 && rh < 2000 && (! isWithin (w, rw, 2) || ! isWithin (h, rh, 2))) - || ((w == 0 && rw > 0) || (h == 0 && rh > 0))) -@@ -3223,8 +3221,8 @@ private: - - if (rect != nullptr) - { -- w = rect->right - rect->left; -- h = rect->bottom - rect->top; -+ w = rect->rightmost - rect->leftmost; -+ h = rect->lower - rect->upper; - - if (w == 0 || h == 0) - { -@@ -3266,7 +3264,7 @@ private: - - JUCE_VST_LOG ("Closing VST UI: " + plugin.getName()); - isOpen = false; -- dispatch (Vst2::effEditClose, 0, 0, nullptr, 0); -+ dispatch (Vst2::plugInOpcodeCloseEditor, 0, 0, nullptr, 0); - stopTimer(); - - #if JUCE_WINDOWS -@@ -3312,11 +3310,11 @@ private: - #if JUCE_WIN_PER_MONITOR_DPI_AWARE - if (! pluginRespondsToDPIChanges) - { -- Vst2::ERect* rect = nullptr; -- dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -+ Vst2::VstEditorBounds* rect = nullptr; -+ dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); - -- auto w = roundToInt ((rect->right - rect->left) / nativeScaleFactor); -- auto h = roundToInt ((rect->bottom - rect->top) / nativeScaleFactor); -+ auto w = roundToInt ((rect->rightmost - rect->leftmost) / nativeScaleFactor); -+ auto h = roundToInt ((rect->lower - rect->upper) / nativeScaleFactor); - - if (! isWindowSizeCorrectForPlugin (w, h)) - { -@@ -3412,17 +3410,17 @@ private: - if (owner.isOpen) - { - owner.isOpen = false; -- owner.dispatch (Vst2::effEditClose, 0, 0, 0, 0); -- owner.dispatch (Vst2::effEditSleep, 0, 0, 0, 0); -+ owner.dispatch (Vst2::plugInOpcodeCloseEditor, 0, 0, 0, 0); -+ owner.dispatch (Vst2::plugInOpcodeSleepEditor, 0, 0, 0, 0); - } - } - - bool getEmbeddedViewSize (int& w, int& h) override - { -- Vst2::ERect* rect = nullptr; -- owner.dispatch (Vst2::effEditGetRect, 0, 0, &rect, 0); -- w = rect->right - rect->left; -- h = rect->bottom - rect->top; -+ Vst2::VstEditorBounds* rect = nullptr; -+ owner.dispatch (Vst2::plugInOpcodeGetEditorBounds, 0, 0, &rect, 0); -+ w = rect->rightmost - rect->leftmost; -+ h = rect->lower - rect->upper; - return true; - } - -@@ -3432,7 +3430,7 @@ private: - { - alreadyInside = true; - getTopLevelComponent()->toFront (true); -- owner.dispatch (Vst2::effEditMouse, x, y, 0, 0); -+ owner.dispatch (Vst2::plugInOpcodeGetMouse, x, y, 0, 0); - alreadyInside = false; - } - else -@@ -3446,13 +3444,13 @@ private: - if (auto* peer = getPeer()) - { - auto pos = peer->globalToLocal (getScreenPosition()); -- Vst2::ERect r; -- r.left = (int16) pos.getX(); -- r.top = (int16) pos.getY(); -- r.right = (int16) (r.left + getWidth()); -- r.bottom = (int16) (r.top + getHeight()); -+ Vst2::VstEditorBounds r; -+ r.leftmost = (int16) pos.getX(); -+ r.upper = (int16) pos.getY(); -+ r.rightmost = (int16) (r.leftmost + getWidth()); -+ r.lower = (int16) (r.upper + getHeight()); - -- owner.dispatch (Vst2::effEditDraw, 0, 0, &r, 0); -+ owner.dispatch (Vst2::plugInOpcodeDrawEditor, 0, 0, &r, 0); - } - } - -@@ -3501,10 +3499,10 @@ AudioProcessorEditor* VSTPluginInstance::createEditor() - - //============================================================================== - // entry point for all callbacks from the plugin --static pointer_sized_int VSTCALLBACK audioMaster (Vst2::AEffect* effect, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt) -+static pointer_sized_int VSTINTERFACECALL audioMaster (Vst2::VstEffectInterface* effect, int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt) - { - if (effect != nullptr) -- if (auto* instance = (VSTPluginInstance*) (effect->resvd2)) -+ if (auto* instance = (VSTPluginInstance*) (effect->hostSpace2)) - return instance->handleCallback (opcode, index, value, ptr, opt); - - return VSTPluginInstance::handleGeneralCallback (opcode, index, value, ptr, opt); -@@ -3555,7 +3553,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result - // Normal plugin... - results.add (new PluginDescription (desc)); - -- instance->dispatch (Vst2::effOpen, 0, 0, nullptr, 0); -+ instance->dispatch (Vst2::plugInOpcodeOpen, 0, 0, nullptr, 0); - } - else - { -@@ -3563,7 +3561,7 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result - for (;;) - { - char shellEffectName [256] = { 0 }; -- auto uid = (int) instance->dispatch (Vst2::effShellGetNextPlugin, 0, 0, shellEffectName, 0); -+ auto uid = (int) instance->dispatch (Vst2::plugInOpcodeNextPlugInUniqueID, 0, 0, shellEffectName, 0); - - if (uid == 0) - break; -@@ -3789,8 +3787,8 @@ void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunct - - AudioPluginInstance* VSTPluginFormat::getPluginInstanceFromVstEffectInterface (void* aEffect) - { -- if (auto* vstAEffect = reinterpret_cast (aEffect)) -- if (auto* instanceVST = reinterpret_cast (vstAEffect->resvd2)) -+ if (auto* vstAEffect = reinterpret_cast (aEffect)) -+ if (auto* instanceVST = reinterpret_cast (vstAEffect->hostSpace2)) - return dynamic_cast (instanceVST); - - return nullptr; diff --git a/libs/juce-current/patches/_haiku.patch b/libs/juce-current/patches/maybe-not-needed/_haiku.patch similarity index 100% rename from libs/juce-current/patches/_haiku.patch rename to libs/juce-current/patches/maybe-not-needed/_haiku.patch diff --git a/libs/juce-current/patches/vst2-linux-fix-scale-factor.patch b/libs/juce-current/patches/maybe-not-needed/vst2-linux-fix-scale-factor.patch similarity index 100% rename from libs/juce-current/patches/vst2-linux-fix-scale-factor.patch rename to libs/juce-current/patches/maybe-not-needed/vst2-linux-fix-scale-factor.patch diff --git a/libs/juce-current/patches/vst3-linux-fix-scale-factor.patch b/libs/juce-current/patches/maybe-not-needed/vst3-linux-fix-scale-factor.patch similarity index 100% rename from libs/juce-current/patches/vst3-linux-fix-scale-factor.patch rename to libs/juce-current/patches/maybe-not-needed/vst3-linux-fix-scale-factor.patch diff --git a/libs/juce-current/patches/mingw-fixes_pt1.patch b/libs/juce-current/patches/mingw-fixes_pt1.patch deleted file mode 100644 index 4e772b64..00000000 --- a/libs/juce-current/patches/mingw-fixes_pt1.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -index bf7b4af22..bdb285290 100644 ---- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -+++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp -@@ -56,9 +56,6 @@ JUCE_BEGIN_IGNORE_WARNINGS_MSVC (4355) - #ifndef WM_APPCOMMAND - #define WM_APPCOMMAND 0x0319 - #endif -- -- extern "C" void _fpreset(); -- extern "C" void _clearfp(); - #elif ! JUCE_WINDOWS - static void _fpreset() {} - static void _clearfp() {} diff --git a/libs/juce-current/patches/use-mingw-std-threads.patch b/libs/juce-current/patches/use-mingw-std-threads.patch deleted file mode 100644 index e0b4c168..00000000 --- a/libs/juce-current/patches/use-mingw-std-threads.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/modules/juce_core/threads/juce_WaitableEvent.h b/modules/juce_core/threads/juce_WaitableEvent.h -index 3e31a9772..766d45f75 100644 ---- a/modules/juce_core/threads/juce_WaitableEvent.h -+++ b/modules/juce_core/threads/juce_WaitableEvent.h -@@ -20,6 +20,10 @@ - ============================================================================== - */ - -+#if JUCE_MINGW -+#include "mingw-std-threads/mingw.condition_variable.h" -+#endif -+ - namespace juce - { - diff --git a/libs/juce-current/patches/vst2-support_pt2.patch b/libs/juce-current/patches/vst2-support_pt2.patch deleted file mode 100644 index 81f919f9..00000000 --- a/libs/juce-current/patches/vst2-support_pt2.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -index 159ab0c7c..e3d277de2 100644 ---- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -@@ -1058,7 +1058,7 @@ public: - - void paint (Graphics&) override {} - -- void getEditorBounds (Vst2::ERect& bounds) -+ void getEditorBounds (Vst2::VstEditorBounds& bounds) - { - auto b = getSizeToContainChild(); - bounds = convertToHostBounds ({ 0, 0, (int16) b.getHeight(), (int16) b.getWidth() }); -@@ -1199,8 +1199,8 @@ public: - void resizeHostWindow (int newWidth, int newHeight) - { - auto rect = convertToHostBounds ({ 0, 0, (int16) newHeight, (int16) newWidth }); -- newWidth = rect.right - rect.left; -- newHeight = rect.bottom - rect.top; -+ newWidth = rect.rightmost - rect.leftmost; -+ newHeight = rect.lower - rect.upper; - - bool sizeWasSuccessful = false; - -@@ -1329,17 +1329,17 @@ public: - #endif - - //============================================================================== -- static Vst2::ERect convertToHostBounds (const Vst2::ERect& rect) -+ static Vst2::VstEditorBounds convertToHostBounds (const Vst2::VstEditorBounds& rect) - { - auto desktopScale = Desktop::getInstance().getGlobalScaleFactor(); - - if (approximatelyEqual (desktopScale, 1.0f)) - return rect; - -- return { (int16) roundToInt (rect.top * desktopScale), -- (int16) roundToInt (rect.left * desktopScale), -- (int16) roundToInt (rect.bottom * desktopScale), -- (int16) roundToInt (rect.right * desktopScale)}; -+ return { (int16) roundToInt (rect.upper * desktopScale), -+ (int16) roundToInt (rect.leftmost * desktopScale), -+ (int16) roundToInt (rect.lower * desktopScale), -+ (int16) roundToInt (rect.rightmost * desktopScale)}; - } - - //============================================================================== diff --git a/libs/juce-current/patches/vstwrapper-fixes.patch b/libs/juce-current/patches/vstwrapper-fixes.patch deleted file mode 100644 index 792acd57..00000000 --- a/libs/juce-current/patches/vstwrapper-fixes.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -index d0c1884db..c87b97d49 100644 ---- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp -@@ -210,9 +210,9 @@ struct SharedMessageThread : public Thread - void run() override - { - initialiseJuce_GUI(); -- initialised = true; - - MessageManager::getInstance()->setCurrentThreadAsMessageThread(); -+ initialised = true; - - while ((! threadShouldExit()) && MessageManager::getInstance()->runDispatchLoopUntil (250)) - {} -@@ -300,9 +300,6 @@ public: - // You must at least have some channels - jassert (processor->isMidiEffect() || (maxNumInChannels > 0 || maxNumOutChannels > 0)); - -- if (processor->isMidiEffect()) -- maxNumInChannels = maxNumOutChannels = 2; -- - #ifdef JucePlugin_PreferredChannelConfigurations - processor->setPlayConfigDetails (maxNumInChannels, maxNumOutChannels, 44100.0, 1024); - #endif -@@ -1827,7 +1824,7 @@ private: - - pointer_sized_int handleGetPlugInName (VstOpCodeArguments args) - { -- String (JucePlugin_Name).copyToUTF8 ((char*) args.ptr, 64 + 1); -+ String (processor->getName()).copyToUTF8 ((char*) args.ptr, 64 + 1); - return 1; - } -