Logic Pro 10.7.0 issue with new multichannel layouts

Hey there,

We’re currently looking into supporting the new channel layouts above 8 speakers offered by the new Logic 10.7.0 update and are running into some issues.

As I understand from previous threads on multichannel support, the canonical way for this is to specify the default ioLayout in AudioProcessor and then override AudioProcessor::isBusesLayoutSupported which is what we use successfully for other DAWs like Reaper and Nuendo and also works for Logic 10.6 without issues.

Now, if I wanted to support the new layouts of Logic 10.7.0 exclusively (both ins and outs being 5.1.2, 5.1.4, 7.1.2 or 7.1.4) with the default layout 7.1.4in, 7.1.4out, I would do something like this:

with Processor : public juce::AudioProcessor

Processor.cpp

    Processor::Processor(const juce::String& pluginName)
    : AudioProcessor(juce::AudioProcessor::BusesProperties().withInput("Input",
juce::AudioChannelSet::create7point1point4(), true)
                                                            .withOutput("Output", juce::AudioChannelSet::create7point1point4(), true))
    , pluginName_(pluginName)
    {
    }

and

bool Processor::isBusesLayoutSupported(const AudioProcessor::BusesLayout& busesLayout) const
    {
        if((busesLayout.getMainInputChannels() > 8) && (busesLayout.getMainInputChannels() > 8))
            return true;

        return false;
    }

However, when I run this through auval, it does pass overall but I already get the following result, which already looks weird to me:

Reported Channel Capabilities (explicit):
      [9, 1]  [9, 2]  [9, 3]  [9, 4]  [9, 5]  [9, 6]  [9, 7]  [9, 8]  [9, 9]  [12, 12]

Input/Output Channel Handling:
1-1   1-2   1-4   1-5   1-6   1-7   1-8   2-2   2-4   2-5   2-6   2-7   2-8   4-4   4-5   5-5   6-6   7-7   8-8   12-12
                                                                                                                  X

ca_require: ValidFormat(inScope, inElement, newDesc) InvalidFormat ../ThirdParty/juce/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:870

From other threads in the forum, I know that auval can’t be trusted to translate 1:1 to Logic’s functionality but when I load the plugin in Logic 10.7.0, I cannot instantiate it for any of the new Surround configurations.

This is with Mac 10.6 x86 architecture

What’s even stranger:
When I load the same plugin on Mac 12.0.1 (Apple Silicon), I can instantiate the plugin for 7.1.4 but exclusively for this format. No success for 5.1.2, 5.1.4 and 7.1.2 as I would expect.

I know Logic 10.7.0 is very fresh, but I wanted to make sure there is no misunderstanding on my side for the best practice here.
Is there anything I missed?
Did Logic break compatibility with JUCE’s handling of channelLayouts?

In terms of JUCE versions, I tried the newest commit off of develop (8aabde768) as well as master (e6ec1819e) with the same results.

I would appreciate any more info on this.

Thanks a lot,
Simon

1 Like

At the moment, JUCE doesn’t completely understand the new Atmos layouts. I’ve got a merge request underway that should improve support here.

With my patch in place, I’m able to modify the AudioPluginDemo so that it only supports 5.1.2 layouts. I can then see the option on both ARM/Intel macs to instantiate the plugin in 5.1.2 layout. Unfortunately, actually instantiating the plugin seems to be broken on both platforms. (More on this later.)

If I modify the plugin to support both stereo and 5.1.2 layouts, then it starts to fail auval. As far as I can tell, auval asks the plugin whether it supports an interleaved 8-channel layout (the ‘canonical’ format for audio units is non-interleaved). The audio unit correctly reports that it can’t handle the interleaved format, and auval fails because it thinks the plugin can’t handle the requested channel count.

If I modify the plugin to accept all atmos layouts (matched inputs and outputs), it starts passing auval again. However, I don’t get the option to instantiate the Atmos layouts in Logic.

If I allow all layouts with matching ins and outs in the plugin, then Logic gives me the option of instantiating Atmos layouts, once I clear the AU cache and set a new plugin code. I think Logic must be caching the supported channel layouts for each plugin. However, actually loading the plugin in this layout fails (the same failure I saw earlier)! Logic attempts to instantiate it with different layouts for the input and output channels, and the plugin prevents instantiation.

If I disable input channels completely, and allow any layout on the output, then Logic gives me the option of instantiating the plugin with Atmos layouts, and succeeds at loading the plugin. If I restrict isBusesLayoutSupported to only return true for Atmos layouts, then Logic stops giving me the option of instantiating these layouts. If not every channel layout is supported, then Logic seems to only allow instantiating the plugin with its initial channel layout.

I’ve debugged this a bit, and JUCE is definitely returning the Atmos layouts when the kAudioUnitProperty_SupportedChannelLayoutTags property is requested, so I think the issue might be on Logic’s side, rather than ours.

The takeaways:

  • Once JUCE has been updated, Atmos layouts will be supported in Logic 10.7. It’s probably a good idea to wait for this update before trying to enable Atmos support.
  • To get Logic to see the Atmos layouts, you might need to report all layouts as supported and gracefully handle ‘weird’ layouts.
1 Like

Hey reuk,

Ok, I see.
My own experimentation with this did produce some of the situations that you describe.
Especially the different behaviour of Logic depending on arm/x86 architecture leads me to believe that there is some more complexity buried on Logic’s side.

Our requirements specify support for various combinations of the new formats for both input and output. Therefore, it doesn’t seem that there is a universal solution that we can use at the moment.
We do look forward to the JUCE update and will revisit the topic then.
Once that happens, we’ll report our findings here.

Thanks for looking into this,
Simon

Hi, I’ve now committed the change adding initial support for the new Atmos layouts:

Please try it out and let us know how you get on.

1 Like

Hey reuk,

Thanks for the quick reaction to this!
I updated to your commit b13bbbefb but unfortunately it doesn’t seem to solve the issue for me.
Using macOS 11.6 (Intel architecture), Logic Pro 10.7.0 and the implementation of my initial post, I’m still not able to select any of the new formats.
auval also returns the same output as before the commit.

I unsuccessfully tried so far:

  • Updating to Logic 10.7.1
  • removing the #if defined (MAC_OS_X_VERSION_10_15) from your commit to rule out any define problems on my side
  • always returning true for isBusesLayoutSupported

I also tried “the old way” of supporting channel layouts, meaning the passing of initializer list to constructor like so:
AudioProcessor({{1,1}, {2,2}, {3,3}, {4,4,}, {5,5}, {6,6}, {7,7}, {8,8}, {9,9}, {10,10}, {11,11}, {12,12}}).
This did enable the instantiation of the plugin on a 7.1.4 track, but only in “Multi Mono” mode which splits the format into L-R|Lm-Rm|Ls-Rs|C|Lt|Rt/Lts|Rts and LFE.

Let me know if I’m missing something in my implementation here.

Best,
Simon