FR: label outputs

a few plug-in formats allow you to label i/o busses/channels. I might be wrong but I don’t think that you can do this in JUCE currently. It’s especially useful for multichannel plug-ins

JUCE does support labelling the audio busses. You can give them names when you construct your AudioProcessor. See the MultiSynth or NoiseGate examples.

You can’t name the individual channels, but JUCE will assign them names according to the audio layout of the bus. So if your bus has a 5.1 layout then the channels will be named “L R C Lrs Rrs LFE” etc.

thanks for the clarification fabian. It would be nice to be able to label individual channels (working on some ambisonics plug-ins)

There is also an ambisonic channelset: AudioChannelSet::ambisonic(), but it seems to target rather auro3D, where you encode X/Y/Z positions as channels.
Are you working on the “original” ambisonics creating multiple speaker pairs surrounding the listener?
Sounds interesting…
Is there any standard DAW/player or similar supporting this? (Sorry if that’s too OT)

I’m not really a surround formats expert. Do think that the AudioChannelSet::ambisonic() method should be renamed? It’s implemented to be identical to CoreAudio’s kAudioChannelLayoutTag_Ambisonic_B_Format and Steinberg’s kBFormat layout.

Actually I was wrong here. I double checked with wikipedia :blush: and learned, that the term ambisonic refers on how it is encoded rather than how it is presented.
So both systems fall under the term ambisonic. They are both fed with a signal plus 3D information as DC values.

The difference is how they are rendered, auro3D has a panning processor, that distributes to an arbitrary amount of speakers around the listener, vs. the system from the 70s I saw implemented from a fellow student, where speaker pairs surround the listener. These pairs are driven in antiphase, which makes the sweet spot wider (I think).

TL;DR, it’s perfectly fine, as it is. Back to @olilarkin’s original request to name the channels…

w, x, y, z is the traditional labelling of first order BFormat encoded signals, as specified in the core audio and VST sdks, so as far as I can see that is correct as is in JUCE. The ability to set custom channel names is useful when developing plug-ins that use High Order Ambisonics (HOA) or other spatialisation technologies that are not catered for by plug-in apis, and have multiple standards (see . Basically the only DAW that is any good for the stuff is Reaper (maybe also Ardour, although I haven’t tried). My current use case is a custom third order ambisonics decoder where I have a separate first order decoder for the signal going to the subs (16 channel HOA input, 25 + 4 outputs for the speaker feeds). It’s just useful when you’re configuring routing in the DAW, to be able to manually label channels.

@daniel I’m don’t think what you say about auro3d and ambisonics is correct…

Thank you for these insights. I have only read into the auro3d specifications, but didn’t use any so far. So it is very interesting for me to learn from people, that had actual contact. I was evaluating, if my surround plugin works together with auro3d or is even superfluous, but I found it to have different pros and cons.

I am very happy to learn and I would by no means call myself a guru or something close. But it would really help me more, if you would say, what was actually not correct.

I was just a bit confused why you are talking about pairs of speakers, and also I don’t think auro3d uses ambisonics (not sure about that)

I already clarified my error, that the pairs of speakers does not fall under the term of ambisonics but a specific rendering method, that I saw on a thesis defense of Sven Bien in Bremen. Unfortunately I can’t find his thesis online, otherwise I would have added the name of this specific presentation.

To make matters worse, I mixed auro3d with dolby atmos. That’s the actual specs I read. But from browsing some high level descriptions they seem to use the same or at least a similar data representation.

I am happy, if you correct me if I wrote something wrong, so I can learn. That’s what the community is for.