I’ve lost the best part of a day to this issue, but I think it does mostly work after all. Logic caches channel layouts of plugins in a slightly obscure way that doesn’t always seem to be cleared by running killall -9 AudioComponentRegistrar. This means if you modify the isBusesLayoutFunction and reload the plugin in Logic, it’s not guaranteed to query the allowed bus configurations. I think I must have accidentally tested and debugged with a plugin that had cached channel information. After changing the plugin code, and doing a full plugin reset from Logic, the channel layout tags seem to be applied correctly, with some caveats.
I’ve tested with Logic 10.6.3 on macOS 10.15.7 and Logic 10.7.2 on macOS 12.2.1. I used the SurroundPlugin demo from the examples folder to check the layouts. This plugin allows noise to be triggered on each named channel. By placing a Level Meter plugin on the same channel strip, it’s possible to verify that the channels match up between plugins. When changing the project surround format, you may need to remove and re-instantiate all plugin instances. For effect plugins, you might need to place a surround-format instrument on the channel strip before being able to instantiate the effect in surround-format.
My results are as follows:
- Quadraphonic, LCRS, 5.1, 7.1 (SDDS): All of these formats work correctly.
- 6.1: Plugin is instantiated as 6.0 instead. When debugging, I can see that Logic is explicitly requesting a
6_0layout, so I think this issue is on their side. I also tested with some non-JUCE plugins to verify. Pro Q 3 also gets instantiated as6_0, and Neutron 3 fails to instantiate at all. - 7.1 (3/4.1): On Logic 10.6.3 (Intel), plugin fails to instantiate before ever trying to set the channel layout. Again, I tested Neutron 3 and Pro Q 3 and both of those plugins fail to instantiate in this format too, so I suspect the issue is in Logic. On Logic 10.7.2 (Arm) the plugin opens and has the correct channel layout.
Logic 10.7.2 also has 4 Atmos layouts. All of those other than 7.1.4 work correctly. The issue with 7.1.4 is a known bug in Logic.
I’ve attached a gif to demonstrate that the SurroundPlugin demo really does report the channels correctly:

If you’re still having problems getting this to work, I’d recommend:
- Change the plugin’s ID code in the Projucer/CMake to force the channel layouts to be re-scanned by Logic.
- Force a Full Audio Unit Reset from the Plugin Manager window in Logic.
- Test the SurroundPlugin demo yourself. If thie SurroundPlugin works, but your own plugin doesn’t, then you can take code from the implementation of the SurroundPlugin (especially
isBusesLayoutSupported). Remember to run the previous two steps every time you modify the supported channel layouts of your plugin.
