# VST2 SpeakerArrangement / VST3 BusArrangements host calling sequence compliancy considerations

**URL:** <https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648>\
**Category:** Audio Plugins\
**Created:** [December 19, 2017, 3:24pm UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648 "2017-12-19T15:24:48Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![fbeguec](https://avatars.discourse-cdn.com/v4/letter/f/7993a0/32.png) [@fbeguec](https://forum.juce.com/u/fbeguec)\
**Post date:** [December 19, 2017, 3:24pm UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/1 "2017-12-19T15:24:48Z")

</div>

Hello  
I’m using the plug-in hosting in my application for VST2 and VST3 plugins and I’m facing plug-ins support issues in terms of IO setup / capabilities detection from some manufacturers.  
I contacted one of the manufacturer to discuss the issue with his VST2 and VST3 plug-ins and had to admit that he is totally compliant with the specifications of the calling sequences of both Steinberg SDKs. But I’m afraid JUCE hosting is not…

- For VST2, the SDK describes the SpeakerArrangement negociation as follows :

![](https://us1.discourse-cdn.com/flex026/uploads/juce/original/2X/b/b50de5a02e49c66e4159e0ad342032c44999be94.gif)

- setSpeakerArrangement(…)
- if successful: end of story
- if not: call getSpeakerArrangement(…) and call again setSpeakerArrangement(…) with the retrieved layout.

What JUCE does is:

- getSpeakerArrangement(…) (pluginHasDefaultChannelLayouts call)

- if unsuccessful getPinProperties() (still in pluginHasDefaultChannelLayouts call)

- if still unsuccessful in retrieving a speaker arrangement, finally call setSpeakerArrangement(.) based on the cannonical audioChannelSet for the number of IO.

- getSpeakerArrangement(…)

- if unsuccessful, assumes empty IO speaker arrangement and consider that each channel is a mono bus (which is wrong)  
Now think of a one bus 8 channels plug-in which return false for getSpeakerArrangement(…) (e.g. a plug-in which can deal with any layout as long in respect to the max number of I/O), this will end up with a 8 mono bus AudioProcessor, and no way to setup the plug-in to do multichannel. And yet, the plug-in follows the SDK specification.

- For VST3, the SDK describes the BusArrangement negociation as follows :  

so basically: setBusArrangement() call  
then : getBusArrangement() call

What JUCE does is to start calling getBusArrangement() for each bus to retrieve a layout.  
Now for example, if a single bus plug-in does not return OK on this call (e.g. considering that since no IO setup has been specified yet, there is nothing to return), you unfortunately end up with a zero input / zero output AudioProcessor. Again in this case, such plug-in can be still considerered compliant with the SDK specification.

Would it be possible to have this compliancy problem fixed?  
On such a issue, I’m not in position to tell a manufacturer to change its code to accomodate ours as it does not do anything against the rules, and have its plug-ins running fine with Steinberg hosts.

Thanks

Best Regards

Fred / Merging Technologies

---

<div class="post-metadata">

**Author:** ![stian](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/stian/32/17_2.png) [@stian](https://forum.juce.com/u/stian)\
**Post date:** [December 21, 2017, 8:30pm UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/2 "2017-12-21T20:30:12Z")

</div>

+1

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://forum.juce.com/u/jules)\
**Post date:** [December 22, 2017, 9:03am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/3 "2017-12-22T09:03:19Z")

</div>

Unfortunately Fabian is the only human who fully understands bus layout handling, and he’s away for a few weeks…

---

<div class="post-metadata">

**Author:** ![fbeguec](https://avatars.discourse-cdn.com/v4/letter/f/7993a0/32.png) [@fbeguec](https://forum.juce.com/u/fbeguec)\
**Post date:** [December 22, 2017, 10:54am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/4 "2017-12-22T10:54:49Z")

</div>

Fair enough, I will be away for a couple weeks too so I’ll remind him early January 2018.

Fred

---

<div class="post-metadata">

**Author:** ![fbeguec](https://avatars.discourse-cdn.com/v4/letter/f/7993a0/32.png) [@fbeguec](https://forum.juce.com/u/fbeguec)\
**Post date:** [January 15, 2018, 9:11am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/5 "2018-01-15T09:11:05Z")

</div>

Up

Fred

---

<div class="post-metadata">

**Author:** ![stian](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/stian/32/17_2.png) [@stian](https://forum.juce.com/u/stian)\
**Post date:** [January 25, 2018, 8:01am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/6 "2018-01-25T08:01:11Z")

</div>

Any news?

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://forum.juce.com/u/jules)\
**Post date:** [January 25, 2018, 9:56am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/7 "2018-01-25T09:56:42Z")

</div>

I think he’s back next week 🙂

---

<div class="post-metadata">

**Author:** ![stian](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/stian/32/17_2.png) [@stian](https://forum.juce.com/u/stian)\
**Post date:** [January 25, 2018, 10:07am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/8 "2018-01-25T10:07:58Z")

</div>

Great, thanks for the update.

---

<div class="post-metadata">

**Author:** ![stian](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/stian/32/17_2.png) [@stian](https://forum.juce.com/u/stian)\
**Post date:** [March 9, 2018, 9:45am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/9 "2018-03-09T09:45:38Z")

</div>

Any news?

---

<div class="post-metadata">

**Author:** ![fr810](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/fr810/32/841_2.png) [@fr810](https://forum.juce.com/u/fr810)\
**Post date:** [March 9, 2018, 4:29pm UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/10 "2018-03-09T16:29:35Z")

</div>

Yes, we’ve been aware of this compliancy problem for a long time now. Unfortunately, plug-ins created with an old JUCE version would crash if you called `setSpeakerArrangement` before `getSpeakerArrangement` - therefore we needed to add a workaround to the hosting code. See [`juce_VSTPluginFormat.cpp:L2074`](https://github.com/WeAreROLI/JUCE/blob/develop/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp#L2074) for some more comments on this problem.

Maybe it’s about time though to remove the workaround.

---

<div class="post-metadata">

**Author:** ![stian](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/stian/32/17_2.png) [@stian](https://forum.juce.com/u/stian)\
**Post date:** [March 12, 2018, 9:33am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/11 "2018-03-12T09:33:41Z")

</div>

Thanks for the clarification, Fabian. So we can simply comment out the work-around to get it compliant, right?

---

<div class="post-metadata">

**Author:** ![fr810](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/fr810/32/841_2.png) [@fr810](https://forum.juce.com/u/fr810)\
**Post date:** [March 12, 2018, 11:33am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/12 "2018-03-12T11:33:52Z")

</div>

Yes, the `if` branch on line 2080 should always be taken.

---

<div class="post-metadata">

**Author:** ![stian](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/stian/32/17_2.png) [@stian](https://forum.juce.com/u/stian)\
**Post date:** [March 12, 2018, 2:27pm UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/13 "2018-03-12T14:27:05Z")

</div>

Perfect, thanks!

---

<div class="post-metadata">

**Author:** ![fbeguec](https://avatars.discourse-cdn.com/v4/letter/f/7993a0/32.png) [@fbeguec](https://forum.juce.com/u/fbeguec)\
**Post date:** [March 13, 2018, 9:46am UTC](https://forum.juce.com/t/vst2-speakerarrangement-vst3-busarrangements-host-calling-sequence-compliancy-considerations/25648/14 "2018-03-13T09:46:07Z")

</div>

Thanks for the update.  
What about VST3 BusArrangement negotiation compliancy?
