1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

VST3 fixes for multi-channel plugins.

This commit is contained in:
jules 2014-02-14 11:19:12 +00:00
parent f3cca83dc8
commit 139e192871
2 changed files with 43 additions and 26 deletions

View file

@ -69,6 +69,13 @@ static Steinberg::Vst::TChar* toString (const juce::String& source) noexcept
return reinterpret_cast<Steinberg::Vst::TChar*> (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<Steinberg::Vst::Spea
return;
}
/*
The order of the arrangement checks must be descending, since most plugins test for
the first arrangement to match their number of specified channels.
*/
// The order of the arrangement checks must be descending, since most plugins test for
/// the first arrangement to match their number of specified channels.
if (numChannels > 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);

View file

@ -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));
}
}