diff --git a/modules/juce_audio_processors/format_types/juce_VST3Common.h b/modules/juce_audio_processors/format_types/juce_VST3Common.h index 462bbe5ad7..8b4a4ad604 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3Common.h +++ b/modules/juce_audio_processors/format_types/juce_VST3Common.h @@ -69,6 +69,13 @@ static Steinberg::Vst::TChar* toString (const juce::String& source) noexcept return reinterpret_cast (source.toUTF16().getAddress()); } +#if JUCE_WINDOWS +static const Steinberg::FIDString defaultVST3WindowType = Steinberg::kPlatformTypeHWND; +#else +static const Steinberg::FIDString defaultVST3WindowType = Steinberg::kPlatformTypeNSView; +#endif + + //============================================================================== /** The equivalent numChannels and speaker arrangements should always match between this function and fillWithCorrespondingSpeakerArrangements(). @@ -81,23 +88,32 @@ static Steinberg::Vst::SpeakerArrangement getArrangementForNumChannels (int numC { using namespace Steinberg::Vst::SpeakerArr; - if (numChannels >= 24) return (Steinberg::Vst::SpeakerArrangement) 1929904127; // k222 - if (numChannels >= 14) return k131; - if (numChannels >= 13) return k130; - if (numChannels >= 12) return k111; - if (numChannels >= 11) return k101; - if (numChannels >= 10) return k91; - if (numChannels >= 9) return k90; - if (numChannels >= 8) return k71CineFullFront; - if (numChannels >= 7) return k61Cine; - if (numChannels >= 6) return k51; - if (numChannels >= 5) return k50; - if (numChannels >= 4) return k31Cine; - if (numChannels >= 3) return k30Cine; - if (numChannels >= 2) return kStereo; - if (numChannels >= 1) return kMono; + switch (numChannels) + { + case 0: return kEmpty; + case 1: return kMono; + case 2: return kStereo; + case 3: return k30Cine; + case 4: return k31Cine; + case 5: return k50; + case 6: return k51; + case 7: return k61Cine; + case 8: return k71CineFullFront; + case 9: return k90; + case 10: return k91; + case 11: return k101; + case 12: return k111; + case 13: return k130; + case 14: return k131; + case 24: return (Steinberg::Vst::SpeakerArrangement) 1929904127; // k222 + default: break; + } - return kEmpty; + jassert (numChannels >= 0); + + juce::BigInteger bi; + bi.setRange (0, jmin (numChannels, (int) (sizeof (Steinberg::Vst::SpeakerArrangement) * 8)), true); + return (Steinberg::Vst::SpeakerArrangement) bi.toInt64(); } /** The equivalent numChannels and speaker arrangements should always @@ -120,10 +136,16 @@ static void fillWithCorrespondingSpeakerArrangements (Array 24) + { + juce::BigInteger bi; + bi.setRange (0, jmin (numChannels, (int) (sizeof (Steinberg::Vst::SpeakerArrangement) * 8)), true); + destination.add ((Steinberg::Vst::SpeakerArrangement) bi.toInt64()); + } + if (numChannels >= 24) destination.add ((Steinberg::Vst::SpeakerArrangement) 1929904127); // k222 if (numChannels >= 14) destination.add (k131); if (numChannels >= 13) destination.add (k130); diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index 9aa67edeba..55361fc2ac 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -1374,12 +1374,7 @@ private: #endif if (pluginHandle != nullptr) - warnOnFailure (view->attached (pluginHandle, - #if JUCE_WINDOWS - kPlatformTypeHWND)); - #else - kPlatformTypeNSView)); - #endif + warnOnFailure (view->attached (pluginHandle, defaultVST3WindowType)); } }