Logic Pro (AU) – Multichannel channel role mismatch with JUCE AudioChannelSet

Hi all,

I’m running into an issue with multichannel layouts in Logic Pro when using JUCE’s AudioChannelSet to determine channel roles.

In surround configurations (e.g. 5.1, 7.1, larger Atmos-style beds), the channel count reported by JUCE is correct, but the channel roles / names do not match where signal actually arrives.

Example (5.1 in Logic):

  • Signal sent to L → arrives on channel 0 (correct)

  • Signal sent to R → arrives on channel 1 (correct)

  • Signal sent to LFE → arrives on Rs ch[05]

  • Signal sent to Rs → arrives on LFE ch[03]

  • Signal sent to Ls → arrives on Center ch[02]

  • Signal sent to Center → arrives on Ls ch[04]

Channel roles are queried via:

  • getChannelLayoutOfBus()

  • AudioChannelSet

  • getTypeOfChannel()

  • getChannelTypeName()

Important:
The same AU build behaves correctly in other AU hosts, for example Fender Studio Pro (channel roles and signal alignment match). So this seems specific to Logic’s AU hosting.

Questions:

  1. Has anyone else observed channel role mismatches in Logic with JUCE surround layouts?

  2. Is this a known limitation of JUCE’s AU wrapper in combination with Logic?

  3. Is AudioChannelSet considered reliable in Logic for surround role detection?

  4. Has anyone had success querying kAudioUnitProperty_AudioChannelLayout directly to resolve this?

Any confirmations or insights would be appreciated.

I haven’t begun testing in Logic yet. That was supposed to begin today, but I can’t get Reaper to go past stereo or “4 in 2 out” (stereo IO + aux/sc).

I have a migraine from trying to figure out how to get Reaper to realize this is a channel-scalable muiltichannel plugin, but I’ve definitely gone through a LOT with channel labeling. Your description threw me off because off because your “arrives on” channel order is correct and your “signal sent to” side is what’s wrong. So, I was thinking “How is his signal coming in wrong and being ordered correctly?”

In Nuendo (and presumably Cubase Pro) I had some issues with channel naming that I eventually got to a point where I was like “Why am I spending all this time on abbreviations, knowing that, even if I get what I want in Nuendo, its likely to change in other DAWs anyway because there are so many alternative abbreviations people use once you get past the first 4 channels.” So, I just gave users the ability to edit the labels and put a bow on that until I see a genuine reason to do otherwise.

What I have not had any issues with is the order of the actual audio flow. I just ask the DAW what it wants the order to be and audio always goes to the correct channels.
There’s a common problem in some DAWs that I remember from the first time I setup Nuendo for multichannel in which HW outputs needs to be ordered 1, 2, 3, 4, 7, 8, 5, 6, 9, 10… (flip Ls/Rs with Lrs/Rrs), but once that’s remedied in the DAW’s output assignment, the issue becomes irrelevant within the DAW and all plugins and channels route correctly; including outputs to immersive renderers…. but that doesn’t match the order you gave in your example either.

I designed this thing to ask the DAW what the channel order is supposed to be, follow it above all else, and marry input and output pairs to ensure nothing gets twisted around by my plugin because I was worried about channel order being different in some DAWs. If you’re getting actual audio paths flipped around inside your plugin, is it because you’re up/down mixing and can’t have your IO paired like that? It might be this migraine, but I’m not completely sure of the details on what the issue is. The audio INPUT in the wrong order makes no sense because the DAW chooses the order of the channels before it gets to your plugin and the input should match that. In that case, I have no idea how your plugin could receive the wrong order from a major DAW and then your plugin be the one that fixes it.

Ch1=L(0), Ch2=R(1), Ch3=C(2), Ch4=LFE(3)…

I pray I don’t find out about some insane nonsensical issue when I begin testing channel configuration compatibility in Logic, but if that were the case, I would think it would’ve been a major topic for a long time.

By the way, if Logic is the only thing giving you trouble, does that mean you’re not having any issues in Reaper? If so, does your plugin scale to match the bus configuration and have additional aux/sc channels? I can’t figure out why the hell Reaper keeps thinking this is a stereo plugin and the only change I ever see as I keep trying every possible way I can think of to fix this, is that I had the aux channels originally and now I have only 2in+out. No matter what I do, it sees the option to go to stereo and stops there.

I don’t remember exactly whether I’ve seen the same phenomena, but Logic is really sticky with its aggressive caching of plugin configuration. So when you’re changing around channel configs, most of the time Logic will not notice unless you increment the version number or reset the caches. So since you don’t mention resetting caches I suspect that might be the core of your problem.

I use this little script (found on here somewhere) to get Logic to properly rescan when I’m messing around with channel configurations:

#!/bin/sh
sudo killall -9 AudioComponentRegistrar
rm ~/Library/Caches/AudioUnitCache/com.apple.audiounits.cache
rm ~/Library/Caches/com.apple.audiounits.cache
rm ~/Library/Preferences/com.apple.audio.InfoHelper.plist
rm ~/Library/Preferences/com.apple.audio.AudioComponentCache.plist

Looks like I was able to make it work by setting the first Parameter of the getBus Method to false. Perhaps in Logic the in- and out-Bus mapping differ from each other somehow.

@DeadlyMixProductions: Thanks for your reply. I truly feel your headache. I didn´t find anything going wrong in reaper. But I find the surround workflow in reaper a little strange in general.

@hugoderwolf: Thanks. When I use that script I just get “No such file or directory” perhaps another macOS version? I am on Sequoia 15.6.1. I heard about that problem and just rescanned the plugin each time in the plugin Manager in Logic. I didn´t do a total reset… just that one plugin.

Thanks for the heads up. Any advice on getting the Apple and Avid Dev IDs for my company? I keep forgetting that I’m still waiting for a response and there’s only so much I can do in the meantime.

Yes, not all the files to delete necessarily exist, but that doesn’t matter. The thing is that what Logic’s plugin manager calls “Reset” only resets the validation result, but seemingly not the cache (which is incredibly stupid). Unfortunately the cache holds the bus layout information. So properly deleting those caches seems the only way when you’re messing with bus layouts.