# Plugin for Nuendo Surround Panner with juce6

**URL:** <https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964>\
**Category:** Audio Plugins\
**Created:** [November 27, 2020, 11:33am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964 "2020-11-27T11:33:04Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Chikashi](https://avatars.discourse-cdn.com/v4/letter/c/77aa72/32.png) [@Chikashi](https://forum.juce.com/u/Chikashi)\
**Post date:** [November 27, 2020, 11:33am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/1 "2020-11-27T11:33:04Z")

</div>

Recently we update our plugin to Cmake + Juce6 and realized that it doesn’t show up as a plugin for Nuendo Surround Panner (see the image) though it was shown before in the list.

 ![Screenshot 2020-11-27 at 12.23.11](https://us1.discourse-cdn.com/flex026/uploads/juce/original/2X/7/705c0b6d917243747f2951d7a85dce1bc6d3f7a8.jpeg)

I gave AudioProcessor so many different options for the IO combination  
`AudioPluginAudioProcessor::AudioPluginAudioProcessor() : AudioProcessor({ {16, 16}, {1, 2}, {2, 2}, {1,3}, {2, 3}, {1, 4}, {2, 4}, {1, 5}, {2, 5}, {1, 6}, {2, 6}, {1, 7}, {2, 7}, {1, 8}, {2, 8}, {1, 9}, {2, 9}, {1, 10}, {2, 10}, {1, 11}, {2, 11}, {1, 12}, {2, 12}, {1, 14}, {2, 14}, {1, 16}, {2, 16}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}, {10, 10}, {11, 11}, {12, 12}, {14, 14} })`

and AudioPluginAudioProcessor::isBusesLayoutSupported() returns always true

```
bool AudioPluginAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
{
    return true;
}

```

In CmakeLists.txt I also set

`VST3_CATEGORIES Spatial`

Would there be a way to make Nuendo recognize my plugin as a surround panner plugin?

Nuendo Version 10.2.0  
Juce Version 6.0.4

---

<div class="post-metadata">

**Author:** ![mcmartin](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/mcmartin/32/7432_2.png) [@mcmartin](https://forum.juce.com/u/mcmartin)\
**Post date:** [November 27, 2020, 10:40pm UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/2 "2020-11-27T22:40:27Z")

</div>

What exactly did you have in the `.jucer` project as `pluginVST3Category`?

---

<div class="post-metadata">

**Author:** ![reuk](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/reuk/32/21494_2.png) [@reuk](https://forum.juce.com/u/reuk)\
**Post date:** [November 30, 2020, 11:35am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/3 "2020-11-30T11:35:36Z")

</div>

Does the plugin show up in other hosts? For example, can the JUCE AudioPluginHost discover and load the plugin?

It might also be worth testing with `VST3_CATEGORIES Spatial Fx` - according to the VST3 headers these categories are “used for SurroundPanner and as insert effect”

---

<div class="post-metadata">

**Author:** ![dearRealityDev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/dearrealitydev/32/3802_2.png) [@dearRealityDev](https://forum.juce.com/u/dearRealityDev)\
**Post date:** [December 7, 2020, 11:08am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/4 "2020-12-07T11:08:49Z")

</div>

Having the same problem here.

Currently, moved away from the initializer list and implemented with our own `isBusesLayoutSupported` and an initial `BusesProperties` for the parent AudioProcessor.

`VST3_CATEGORIES` is set to `Spatial Fx Ambisonics Up-Downmix`

The weird thing is: loading an old version of our plugin and looking at it in the **VST Plug-In Manager** in Nuendo shows IO as:

**Mono/Stereo**

![Screenshot 2020-12-07 at 11.58.34](https://us1.discourse-cdn.com/flex026/uploads/juce/original/2X/a/ac7b83f1b610d6d9b5cc2103ea539f9833435d10.png)

and now (no matter how I tweak the `isBusesLayoutSupported` or the initial configurations) the IO shows up at

**3rd Order Ambisonics / 3rd Order Ambisonics**

![Screenshot 2020-12-07 at 11.50.46](https://us1.discourse-cdn.com/flex026/uploads/juce/original/2X/4/4eeb65e2e935dc31c3186266a767de6bebca029a.png)

This is the only guess I have for why it is not showing up in the panning slot…

(additional note: because of the update to JUCE6, the new plugin is a VST v3.6.13 and the old is v3.6.9)

---

<div class="post-metadata">

**Author:** ![dearRealityDev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/dearrealitydev/32/3802_2.png) [@dearRealityDev](https://forum.juce.com/u/dearRealityDev)\
**Post date:** [December 7, 2020, 12:05pm UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/5 "2020-12-07T12:05:46Z")

</div>

Okay, so it looks like the problem is:

the JUCE6 cmake tooling will forcibly place “Fx” as the first category in the VST3\_Categories list. Nuendo is apparently not okay with this.

Removing lines 1464,1467 in `JUCEUtils.cmake` fixes the problem:

```auto
if(Fx IN_LIST vst3_categories)
  list(REMOVE_ITEM vst3_categories Fx)
  list(INSERT vst3_categories 0 Fx)
endif()

```

Is there a specific reason that Fx is being set as the first item in the list? If not, I would gladly put in a PR to fix this.

---

<div class="post-metadata">

**Author:** ![mcmartin](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/mcmartin/32/7432_2.png) [@mcmartin](https://forum.juce.com/u/mcmartin)\
**Post date:** [December 7, 2020, 9:24pm UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/6 "2020-12-07T21:24:22Z")

</div>

> [@dearRealityDev](#):
>
> Is there a specific reason that Fx is being set as the first item in the list?

Projucer does exactly the same thing:

> <https://github.com/juce-framework/JUCE/blob/6.0.5/extras/Projucer/Source/Project/jucer_Project.cpp#L2107-L2108>

This is why I asked:

> [@McMartin](#):
>
> What exactly did you have in the `.jucer` project as `pluginVST3Category` ?

---

<div class="post-metadata">

**Author:** ![dearRealityDev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/dearrealitydev/32/3802_2.png) [@dearRealityDev](https://forum.juce.com/u/dearRealityDev)\
**Post date:** [December 8, 2020, 9:34am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/7 "2020-12-08T09:34:13Z")

</div>

It looks like whoever wrote this code had hardcoded it as a define in the project previously in order to bypass this feature of Projucer.

---

<div class="post-metadata">

**Author:** ![ed95](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/ed95/32/7635_2.png) [@ed95](https://forum.juce.com/u/ed95)\
**Post date:** [December 8, 2020, 9:43am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/8 "2020-12-08T09:43:01Z")

</div>

> [@Projucer: VST3 Category Order and Missing Category](https://forum.juce.com/t/projucer-vst3-category-order-and-missing-category/27267/2):
>
> Thanks, I’ve added the “Dynamics” category. I’ve also changed the getVST3CategoryStringFromSelection() method so that the priority of categories is “Fx” \> “Instrument” \> everything else but I can’t find any official documentation on the order that categories should be in. Confusingly, ivstaudioprocessor.h defines a few categories that can be used and kSpatialFx is defined as “Spatial|Fx” which implies that “Fx” shouldn’t always be first?! If there is some canonical way of ordering the categorie…

It’s pretty ambiguous and there’s nothing in the VST3 spec about it, but `Fx` is first for host compatibility reasons. It seems like `Spatial` needs special-casing, but again there’s no actual documentation on what the order should be so it’s hard to know whether this will break other hosts…

---

<div class="post-metadata">

**Author:** ![mcmartin](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/mcmartin/32/7432_2.png) [@mcmartin](https://forum.juce.com/u/mcmartin)\
**Post date:** [December 8, 2020, 10:34am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/9 "2020-12-08T10:34:04Z")

</div>

> [@dearRealityDev](#):
>
> whoever wrote this code had hardcoded it as a define in the project

If I understand you correctly, there is something like

```auto
defines="JucePlugin_Vst3Category=Spatial|Fx|Ambisonic|Up-Downmix"

```

in your `.jucer` project file, but it was not migrated to the `CMakeLists.txt`. That would definitely explain why your plugin doesn’t get recognized when built with CMake. It would also mean that your only fix (for now) is to add that define to your target in your `CMakeLists.txt`.

---

<div class="post-metadata">

**Author:** ![daniel](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/daniel/32/790_2.png) [@daniel](https://forum.juce.com/u/daniel)\
**Post date:** [December 8, 2020, 10:36am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/10 "2020-12-08T10:36:12Z")

</div>

Maybe someone could get in touch with Steinberg and ask for clarification, since they own VST3 and Nuendo, they should know, or at least can make it work (if anybody).

---

<div class="post-metadata">

**Author:** ![PeterRoos](https://avatars.discourse-cdn.com/v4/letter/p/7ab992/32.png) [@PeterRoos](https://forum.juce.com/u/PeterRoos)\
**Post date:** [December 8, 2020, 10:39am UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/11 "2020-12-08T10:39:43Z")

</div>

I see that Ed has committed this on 2018-08-06, with message

Projucer: Ensure that either “Fx” or “Instrument” is added to the VST3 categories when saving a plugin project

---

<div class="post-metadata">

**Author:** ![dearRealityDev](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/dearrealitydev/32/3802_2.png) [@dearRealityDev](https://forum.juce.com/u/dearRealityDev)\
**Post date:** [December 8, 2020, 12:33pm UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/12 "2020-12-08T12:33:21Z")

</div>

yes, breaking compatibility is definitely a problem. However, it would be ideal to not have to work around this issue. Maybe an option to prevent the re-ordering would be a good idea?

If I understand your linked forum post, this re-ordering of Fx was only changed in 2018? When this was implemented, did you have any issues with breaking host compatibility?

Another potential solution might be to place Spatial at the front of the list automatically. However, I suspect this is also not ideal.

---

<div class="post-metadata">

**Author:** ![ed95](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/ed95/32/7635_2.png) [@ed95](https://forum.juce.com/u/ed95)\
**Post date:** [December 8, 2020, 2:14pm UTC](https://forum.juce.com/t/plugin-for-nuendo-surround-panner-with-juce6/42964/13 "2020-12-08T14:14:02Z")

</div>

> Maybe an option to prevent the re-ordering would be a good idea?

This might work for a CMake-based project, but for the Projucer it would then be dependent on the order of the categories in the GUI which isn’t ideal.

Confusingly the [VST3 SDK](https://github.com/juce-framework/JUCE/blob/7c797c8105c2d41872e6e8d08972624f0afd335d/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h#L43) defines both `Fx|Spatial` and `Spatial|Fx` as being separate, valid categories so placing `Spatial` first isn’t the right thing to do either. I think the current solution is the least-worst, and if you need more control over the category string like your case then you can define `JucePlugin_Vst3Category` yourself to override the setting.
