Multibus 7.1 layout bug


#1

In the experimental/multibus branch:

AAXChannelStreamOrder aaxChannelOrder[]

{AAX_eStemFormat_7_1_DTS, {AudioChannelSet::left, AudioChannelSet::centre, AudioChannelSet::right, AudioChannelSet::leftRearSurround, AudioChannelSet::rightRearSurround, AudioChannelSet::leftSurround, AudioChannelSet::rightSurround, AudioChannelSet::subbass}},

The side and rear surround channels are incorrectly ordered. You have rears before sides.
The standard PT 7.1 format is L C R Lss Rss Lsr Rsr Lfe
Same applies for your 7.0 entry.

I didn’t dig too deep - just stumbled across this.
Maybe your naming regime is to blame rather than actually cross patching the side and rear channels.

Also - I’m just discovering your discussions on channel naming and inconsistencies between Avid and Apple etc. but I can offer one important piece of advice:
All serious surround work is done in Pro Tools right now. People spend 16 hours a day working in protools using 7.1, quad, LCR, 5.0 all at once. All film and TV audio files created during the post-production process, as well as those sent as deliverables, are created by PT and usually sent as PT sessions or PT-named audio files.

So you absolutely should ensure that the PT standards are the default and accurately followed., before making allowance for apple or VST or anything else.
my 2c


#2

Thanks for reporting. Just fixed this on experimental/multibus!


#3

Just took a look at your fix and noticed in AudioChannelSet:

You don’t have a specific channel defined for Left/Right Surround Side (Lss/Rss in Pro Tools “7.x_DTS” layouts)
You don’t have Left/Right Surround Top (presumably Lst/Rst if they ever add Dolby ATMOS 9.1)

The need for dedicated “surround side” channel definitions depends on how you implement everything else I guess, but in PT at least there is a specific channel suffix reserved for it, so I['m guessing you’ll need to have one as well.

And if you’re interested in following the Pro Tools nomenclature (and IMO you should) you should describe surround channels as follows:
Left Surround Side (Lss)
Left Surround Rear (Lsr)
Left Surround Top (Lst)
Left Top (Lt)
Left Rear Top (Lrt)

And “subbass” might not be the best name for that channel.
LFE (Low Frequency Effects - Lfe in PT) is the usual name for that channel - while subbass would more likely refer to additional low frequency signal generated and added to sound, regardless of it’s channel assignment.

And you might want to define layouts for a couple of the new immersive formats as well - eg. ATMOS 9.1, Auro

And there’s a typo here (should say 6.0):
if (*this == create6point0()) return “6.1 Surround”;


#4

As I understood dolby atmos you are not rendering to separate channels but rather use three channels to define the position in space and the actual signal. The matrix for which actual speaker should be fed is done at the theatre. So the channels 24-27 ambisonicX, ambisonicY, ambisonicZ and ambisonicW for the actual wave should be used…
These channels are additional to the “normal” 5.1 surround beds.


#5

ATMOS uses 128 mono object channels, each carrying audio and positional metadata. 10 of these channels are hardwired as a 9.1 “bed”.
The format is basically 7.1 with 2 rows of ceiling speakers set in from the wall about 20%.


#6

which are 128 buses made out of ambisonicX,Y,Z and W or am I wrong?


#7

there’s nothing ambiosonic about it.


#8

OK, I’m just implementing these changes so that JUCE surround formats are more aligned with AAX. However, I’m not sure what to do with the channels labeled “Cs” and “S” in the AAX SDK. In AAX these are two distinct channels: “S” is used in LCRS and Cs is used in the 6.0/6.1 surround formats.

However, the VST SDK explicitly says that Cs and S are the same channel (see here). CoreAudio calls the “LCRS” format “kAudioChannelLayoutTag_MPEG_4_0_A” and uses Cs for the S. CoreAudio also does not have a “S” channel.

For JUCE I want both VST’s LCRS and AAX’s LCRS to map to JUCE’s LCRS layout. For this to work however, S and Cs must be the same channel.

So which nomenclature should I use for the S/Cs channels. Should JUCE return “Centre Surround” or “Surround”?


#9

And a similar issue with AAX’s DTS formats. They use a channel called Lss (Left surround side) and Rss (right surround side). AAX’s SDDS format uses Ls (Left Surround) and Rs (Right surround). Both VST and CoreAudio treat this as the same channel:

AAX: SDDS            = L R C Lfe Ls  Rs  Lc  Rc
VST: k71Cine         = L R C Lfe Ls  Rs  Lc  Rc

AAX: DTS             = L R C Lfe Lss Rss Lsr Rsr
VST: k71CineSideFill = L R C Lfe Ls  Rs  Lsr Rsr
VST: k71CineFullRear = L R C Lfe Ls  Rs  Lcs Rcs // Lcs = Left of centre surround - which is a rear channel

There are no other 7.1 formats in VST. So to which layout do I map AAX DTS layout? I would suggest k71CineSideFill. But then JUCE will not destinguish between Lss/Rss and Ls/Rs. For me that would make sense, but what would hard-core protools users say when they see their surround plug-in show Ls when using AAX DTS?

Sources:

[1] http://vstdev.richackard.com/doc/vstinterfaces/group__speakerArrangements.html#ga27352e019fb6f0d3b4d10b643f79d813
[2] https://documentation.apple.com/en/logicpro/usermanual/index.html#chapter=39%26section=1%26tasks=true
[3] https://github.com/phracker/MacOSX-SDKs/blob/master/MacOSX10.8.sdk/System/Library/Frameworks/CoreAudio.framework/Versions/A/Headers/CoreAudioTypes.h#L1113
[4] https://github.com/julianstorer/JUCE/blob/be5f508dde0ff5a145ff8a1491238e875ab26a7c/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp#L135


#10

VST and coreAudio are wrong to make them equivalent.
But you’ll never find those two things in the same format, and neither are at all common today - so it’s not a big deal.

But if you have to make a call it should really be “Centre Surround” otherwise “Surround” is too vague for the 6.1 situation.


#11

OK great. What about my second post?


#12

wow, I do not envy you.
I agree that k71CineSideFill is the best match for the DTS 7.1 format - but mostly because I don’t even understand what the k71CineFullRear is supposed to be.

Pro Tools is right to specify the Lss as distinct from Ls so JUCE should do the same if possible.
Lss covers the side wall from about 25% back right thru to the back left corner
Ls covers that same wall but all the way round to the Cs position.

If you have to generalise then sure, lump Lss and Ls together - but it may cause confusion, depending on how it ends up being implemented.

Sorry, it is just a mess of formats. All I can offer is that PT should trump the rest.


#13

OK I’ll try to keep Lss/Rss and Ls/Rs distinct and do some hackary in the VST wrappers to map the layouts.


#14

OK to add to the confusion. CoreAudio has a layout specifically labeled kAudioChannelLayoutTag_DTS_7_0.

kAudioChannelLayoutTag_DTS_7_0: L R C Ls Rs Lc Rc

which is identical to AAX’s SDDS format?!?!?

I’m really confused now.


#15

you have to laugh.
At the end of the day, it’s the speaker arrangement which matters, not the nomenclature.
As long as you have a suitably named layout which maps to one equivalent layout in CoreAudio, VST, AAX, then you’re good.