Cockos Incorporated Forums Ambisonics Order Angular Resolution and Spherical Harmonics
 Register Search Today's Posts Mark Forums Read

 06-14-2023, 01:23 PM #2 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 As noted I've made some substantial edits to my post above. My motivation for trying to figure out the angles where the harmonics are focused is to be able to map them to Atmos panning locations to make a sort of Ambisonics to Atmos converter. Not for a full mix, I think if you're using Atmos, you should still pan objects there. But for things like Ambisonic recordings, or other instruments or effects that output full spherical audio in an Ambisonic format. I knew that there was a direct A-Format match for 1st Order. O1A can be encoded with 4 channels of audio, and the decoded A-Format expands that requirement to 6. Blue Ripple makes an O3A to A20 (20 "nodes") converter, that uses the vertices of a dodecahedron to equally space those points around a sphere. I was 1) wondering if 20 channels were enough for O3A, and 2) how to calculate the positions of other orders. Last edited by ScuzzyEye; 06-15-2023 at 05:06 AM.
 06-15-2023, 05:36 AM #3 Kewl Human being with feelings   Join Date: Jan 2009 Location: Montreal, Canada Posts: 172 I'm sorry, but your way of interpreting Ambisonics and spherical harmonics is wrong. Yes, as we go up orders we gain spatial resolution, but we gain that spatial resolution all over the sphere, not just "where the harmonics are focused". And if we are talking about the angular difference of horizontal spherical harmonics of the same order: O1A : 90° O2A : 45° O3A : 30° O4A : 22.5° O5A : 18° O6A : 15° O7A : 12.86° O8A : 11.25° O9A : 10° O10A : 9° Last edited by Kewl; 06-20-2023 at 02:42 AM.
 06-15-2023, 05:39 AM #4 Kewl Human being with feelings   Join Date: Jan 2009 Location: Montreal, Canada Posts: 172 Ah, I see that you edited your initial post.
06-15-2023, 07:11 AM   #5
ScuzzyEye
Human being with feelings

Join Date: Apr 2021
Posts: 579

Quote:
 Originally Posted by Kewl Ah, I see that you edited your initial post.
Yes, again. But thanks much, for confirming my current conclusion. It's really difficult to find (non-quantum physics) documentation on spherical harmonics. And if you have anything else to add, please do.

06-15-2023, 07:25 AM   #6
ScuzzyEye
Human being with feelings

Join Date: Apr 2021
Posts: 579

Quote:
 Originally Posted by Kewl Yes, as we go up orders we gain spatial resolution, but we gain that spatial resolution all over the sphere, not just "where the harmonics are focused".
Maybe I should be more clear about my actual goals for figuring this out.

If you take 6 unidirectional inputs, you can encode them as 4 signals (W, X, Z, Y) in an Ambisonic configuration, and the decode that back to 6 outputs. The inputs and outputs should be identical.

Is that possible with higher order Ambisonics? If so, how do you calculate the azimuth and elevation of those inputs, and how many are required? I know with more than required you can get a good representation of the overall spherical audio, but the output might not match the input exactly.

In it's simplest form: If I have an instrument or effect that produces an Ambisonics output, and I want to best represent that in Atmos. How many channels will I need, and where do I put them?

06-15-2023, 08:34 AM   #7
plush2
Human being with feelings

Join Date: May 2006
Posts: 2,115

Quote:
 Originally Posted by ScuzzyEye Maybe I should be more clear about my actual goals for figuring this out. If you take 6 unidirectional inputs, you can encode them as 4 signals (W, X, Z, Y) in an Ambisonic configuration, and the decode that back to 6 outputs. The inputs and outputs should be identical. Is that possible with higher order Ambisonics? If so, how do you calculate the azimuth and elevation of those inputs, and how many are required? I know with more than required you can get a good representation of the overall spherical audio, but the output might not match the input exactly. In it's simplest form: If I have an instrument or effect that produces an Ambisonics output, and I want to best represent that in Atmos. How many channels will I need, and where do I put them?
I always hate it when people answer a question with a question so, apologies. Why do you want to achieve discrete sources from ambisonics anyways? I can understand the mathematical satisfaction of creating something in spherical harmonics and reducing it to cartesian points. One of the largest advantages of ambisonics is all that intermediary stuff, which is very difficult to achieve using an object based panning. Why not just use cartesian (vbap, dbap, whatever) to place those 6 sources rather than running them through the realm of ambisonics on the way? If the goal is to get a greater understanding of ambisonics at higher orders then I am definitely along for the ride and will follow up.

 06-15-2023, 09:11 AM #8 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 I definitely want a better understanding of Ambisonics, but that's my personality, I want a better understanding of everything. For this particular goal. I've been experimenting with low order Ambisonics for general stereo mixing (discarding the height, and mixing the depth in with a 90° phase shift, basically UHJ encoding) and really liking the results. The reason for exporting stereo, is that's basically the only guaranteed-to-work everywhere distribution format. But recently Atmos has gotten popular enough, and tools are available that anyone who puts in a little effort can release music in Atmos too. Distribution for anyone to be able to play back Ambisonics still doesn't seem to be happening (fingers crossed for YouTube Music). For Atmos I'll pan the discrete audio sources as objects. But I have some instruments, effects, and recordings that natively (or nearly) produce Ambisonics. The 6-to-4-to-6 example was slightly contrived, in that I wouldn't actually do that, but more of an acknowledgement that it's possible to achieve a 1:1 input/output in 1st Order. My real thought was, if I have something that's natively in 1st Order, if I output it as Atmos objects at those 6 positions, I should have a pretty good Cartesian reproduction of that sound field. Then it followed: Is it possible to achieve the same at higher orders?
 06-19-2023, 10:17 AM #9 plush2 Human being with feelings   Join Date: May 2006 Location: Saskatoon, Canada Posts: 2,115 So here is the thing I wanted to suggest, rather than decomposition to the axial modes of first order you could just flip back into a-format. They have a-format outlined for some of the higher orders as well. They are not uniform layouts (front-back, left-right) but they do perfectly represent the ambisonic order they correspond with and are actual positions in cartesian space. __________________ mymusic http://music.darylpierce.com mywork http://production.darylpierce.com mypodcast https://youtube.com/@ultimatesoundtest
 06-19-2023, 12:05 PM #10 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 Yeah, that would work. As long as there's a uniform distribution of energy, that makes use of the resolution of what ever order I've selected. Blue Ripple has O3A to A-20 to O3A utilities. 16 channels of Ambisonics to 20 channels in A-format seems like it's pretty close to preserving all the detail. They gave Cartesian coordinates for the 20 vertices in their documentation. I did the math to convert them into azimuth and elevation and set them up in IEM's AllRADecoder. The calculated energy distribution also looks very good at O3A. This weekend I picked up Fiedler's Spacelab Interstellar. It supports a 32-channel Full Sphere input/output mode. The angles of each channel are listed in the plug-in, so I entered them in the AllRADecoder decoder too. It shows pretty even distribution at O4A. So 25-channels of Ambisonics covered by 32 "speakers" also seems about right. Going to O5A looks a little "splotchy", and O6A starts showing obvious gaps. You say "they" have A-format layouts for higher orders. Who's they? That's probably what I've been looking for.
06-19-2023, 01:59 PM   #11
plush2
Human being with feelings

Join Date: May 2006
Posts: 2,115

Quote:
 Originally Posted by ScuzzyEye Blue Ripple has O3A to A-20 to O3A utilities. 16 channels of Ambisonics to 20 channels in A-format seems like it's pretty close to preserving all the detail. They gave Cartesian coordinates for the 20 vertices in their documentation. I did the math to convert them into azimuth and elevation and set them up in IEM's AllRADecoder. The calculated energy distribution also looks very good at O3A.
Would you mind sharing that AllRaDecoder config file?

Quote:
 You say "they" have A-format layouts for higher orders. Who's they? That's probably what I've been looking for.
Haha, you got me there. Probably your best source would be to look at the SPS documentation by Angelo Farina (http://www.angelofarina.it/SPS-conversion.htm) or to reverse engineer the shape/coordinates of one of the higher order mics (eigen, etc.). Only the soundfield mics AFAIK were true b-format mics, all since have been a-format which means a composite W channel and evenly distributed capsules on a sphere. Please go easy on me. We are essentially learning together so assume I may be wrong about some of this.

 06-19-2023, 05:23 PM #12 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 Sure, here's the A20 config file that can be loaded into AllRAD. Just save it as a .json file. In this one I've added 12 additional imaginary speakers to the middle of each of the 12 faces of the dodecahedron. This triangulates each pentagon into 5 equilateral triangles. Without it AllRAD seems to randomly split them into 3. Having the imaginary speakers also seems to make the energy distribution more smooth (you can removed them and recalculate to see the difference). You'll need to calculate the decoder for what ever order you want (I'd recommend 3rd) and re-save the whole thing, or just the decoder if you want to use it with SimpleDecoder. The layout does work as-is in MultiEncoder. The channel order follows what's referenced here: http://www.blueripplesound.com/plugi...ba20_converter (I made the channel 13 -180° instead of just 180 because that also made for a smoother distribution--at least in the display.) Code: ```{ "Name": "All-Round Ambisonic decoder (AllRAD) and loudspeaker layout", "Description": "This configuration file was created with the IEM AllRADecoder v0.9.4 plug-in. 4 Jun 2023 3:32:53pm", "LoudspeakerLayout": { "Name": "A loudspeaker layout", "Loudspeakers": [ { "Azimuth": 90.0, "Elevation": 69.09484100341797, "Radius": 1.0, "IsImaginary": false, "Channel": 1, "Gain": 1.0 }, { "Azimuth": -90.0, "Elevation": 69.09484100341797, "Radius": 1.0, "IsImaginary": false, "Channel": 2, "Gain": 1.0 }, { "Azimuth": 135.0, "Elevation": 35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 3, "Gain": 1.0 }, { "Azimuth": 45.0, "Elevation": 35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 4, "Gain": 1.0 }, { "Azimuth": -45.0, "Elevation": 35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 5, "Gain": 1.0 }, { "Azimuth": -135.0, "Elevation": 35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 6, "Gain": 1.0 }, { "Azimuth": 180.0, "Elevation": 20.9051570892334, "Radius": 1.0, "IsImaginary": false, "Channel": 7, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": 20.9051570892334, "Radius": 1.0, "IsImaginary": false, "Channel": 8, "Gain": 1.0 }, { "Azimuth": 110.905158996582, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 9, "Gain": 1.0 }, { "Azimuth": 69.09484100341797, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 10, "Gain": 1.0 }, { "Azimuth": -69.09484100341797, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 11, "Gain": 1.0 }, { "Azimuth": -110.905158996582, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 12, "Gain": 1.0 }, { "Azimuth": -180.0, "Elevation": -20.9051570892334, "Radius": 1.0, "IsImaginary": false, "Channel": 13, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": -20.9051570892334, "Radius": 1.0, "IsImaginary": false, "Channel": 14, "Gain": 1.0 }, { "Azimuth": 135.0, "Elevation": -35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 15, "Gain": 1.0 }, { "Azimuth": 45.0, "Elevation": -35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 16, "Gain": 1.0 }, { "Azimuth": -45.0, "Elevation": -35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 17, "Gain": 1.0 }, { "Azimuth": -135.0, "Elevation": -35.26438903808594, "Radius": 1.0, "IsImaginary": false, "Channel": 18, "Gain": 1.0 }, { "Azimuth": 90.0, "Elevation": -69.09484100341797, "Radius": 1.0, "IsImaginary": false, "Channel": 19, "Gain": 1.0 }, { "Azimuth": -90.0, "Elevation": -69.09484100341797, "Radius": 1.0, "IsImaginary": false, "Channel": 20, "Gain": 1.0 }, { "Azimuth": 180.0, "Elevation": 58.28250122070312, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 21, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": 58.28250122070312, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 22, "Gain": 1.0 }, { "Azimuth": 148.2830047607422, "Elevation": 0.0, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 23, "Gain": 1.0 }, { "Azimuth": 31.71750068664551, "Elevation": 0.0, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 24, "Gain": 1.0 }, { "Azimuth": -31.71750068664551, "Elevation": 0.0, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 25, "Gain": 1.0 }, { "Azimuth": -148.2830047607422, "Elevation": 0.0, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 26, "Gain": 1.0 }, { "Azimuth": 90.0, "Elevation": 31.71750068664551, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 27, "Gain": 1.0 }, { "Azimuth": -90.0, "Elevation": 31.71750068664551, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 28, "Gain": 1.0 }, { "Azimuth": 90.0, "Elevation": -31.71750068664551, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 29, "Gain": 1.0 }, { "Azimuth": -90.0, "Elevation": -31.71750068664551, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 30, "Gain": 1.0 }, { "Azimuth": -180.0, "Elevation": -58.28250122070312, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 31, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": -58.28250122070312, "Radius": 0.8080000281333923, "IsImaginary": true, "Channel": 32, "Gain": 1.0 } ] } }```
 06-19-2023, 10:14 PM #13 Dannii Human being with feelings     Join Date: Mar 2010 Location: Adelaide, South Australia (originally from Geelong) Posts: 5,598 Very interesting discussion this one. I'll have to have a better read but is the aim here to produce Atmos output from Ambisonics complete with object based panning? I'm a big fan of both Blue Ripple and IEM. Blue Ripple have a decoder for Atmos beds but no object based output. __________________ - My Music -
06-20-2023, 04:47 AM   #14
ScuzzyEye
Human being with feelings

Join Date: Apr 2021
Posts: 579

Quote:
 Originally Posted by Dannii Very interesting discussion this one. I'll have to have a better read but is the aim here to produce Atmos output from Ambisonics complete with object based panning?
It depends on what you're willing to accept as "Atmos". If a very large "bed" is OK, then what I'm looking at here will accomplish that. But actual objects will still have to be panned by an Atmos panner.

The idea is: If I have something that is natively Ambisonics, especially higher order. Would it be possible to decode it to enough virtual speakers as precisely placed Atmos objects to allow for convincing 360° playback?

I think mono/stereo channels are still better directly encoded into Atmos and panned there. But but if I'm working with a sound field, I'd like to keep as much of that signal intact too.

 07-19-2023, 02:36 PM #15 Joystick Human being with feelings     Join Date: Jul 2008 Location: Athens / Greece Posts: 627 Any simplification for understanding ambisonics would be a good step towards popularizing this format. I'm all in for that. I don't know if it's of any help, but some time ago I captured screenshots of each channel up to the 64th, using noise and the IEM EnergyVisualizer. Here's a link to my OneDrive with the screenshots: https://1drv.ms/f/s!AoFZ1MP3ewRgguEB...7YqAg?e=ldxDqL Cheers! __________________ Pan Athen SoundFellas Creative Audio Studios www.soundfellas.com Creator of Echotopia www.soundfellas.com/software/echotopia
 07-20-2023, 08:41 AM #16 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 Before I clicked the link, I was trying to guess what that would look like. I figured it would be the typical spherical harmonic energy plot. https://en.wikipedia.org/wiki/File:C...Polar_Plot.gif I was right, but that's good, shows that over these months and months of research I'm actually learning something. It is a good example of what I'm trying to do. I'd like to place a "speaker" at each of hottest focus points so that I could map those to Atmos objects, or just channels for non-Ambisonic processing. The problem is, Ambisonics does such a good job of encoding spatial information in a (relatively) small number of channels. That when you want to expand something like even 5th order to speakers you need a whole lot more channels. I have the 3rd order to 20 speakers, and a 4th order to 32 speakers working pretty well. Good, even coverage. Listening after encoding to Atmos and then back to a 7.1.4 system or binaural sounds nice. Not exactly ready to share my 32 speaker decoding yet, but close.
 07-21-2023, 11:26 AM #17 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 Actually, if anyone wants to weigh in on what's hanging me up with the 32 point layout... So, the highest number of equally spaced points one can have around a sphere is 20. The vertices of a dodecahedron. This is what Blue Ripple used, and the points I shared above. Everything higher than will be an approximation, because pi and all that irrational stuff. You can get down to a few decimals of variance, but the dodecahedron is the highest exact division of a sphere. To get 32 points, you take the 12, pentagon faces of the dodecahedron, and place a point in the middle of them. (The same triangulation I did in the .json I shared, but make them real speakers instead of imaginary.) These points also happen to be vertices of the next higher Platonic solid, the 20-faced icosahedron (D20 to D&D fans). This is also how geodesic spheres are made: triangulate and/or sub-divide the faces of a Platonic solid, and push those new points out to the diameter of the sphere. Repeat until you get the density you want. But that "pushing the points out to the sphere" makes their connecting lines longer than the other sides of the 2D shape. If you go to buy a geodesic dome construction set you’ll see that there are multiple different lengths of bars that go into the triangles, they’re not equilateral. That finally brings me to what I’m questioning. Finding 32 points by combining the dodecahedron and icosahedron is simple. It’s close to right too. But extending that system above 32 points requires turning each triangle into 4 triangles (subdivision), and that triples the number of points. There’s no small step up. There is another method of (nearly) equally spacing points around a sphere based on the Fibonacci lattice (aka Golden Spiral). That allows any number of points to be calculated. Seems nice, but it throws out the Platonic solids that line up perfectly for 4, 6, 8, 12, and 20 points. Yet another data point that’s tangled me up. Fiedler’s Spacelab includes a 32 speaker layout. It’s indeed the triangulated dodecahedron, but with a slightly different rotation than what I get when I triangulate Blue Ripple’s layout. One nice thing about this though, is Fielder has a precedent of breaking “standard” speaker layouts (e.g. 5.1 or 7.1.4) for better binaural decoding, and includes an alternative folder of presets just for that use. I have a feeling if I came up with a good set of Ambisonic optimized virtual speaker layouts for Spacelab, Thomas would bundle them with the plug-in. Including the alternative rotation of the “full sphere 32 speaker” preset. Regardless, they’re XML files, and I’d post them here too. (Does anyone else have Spacelab Interstellar?) But before I would send anything for inclusion I’d have to make sure I’m really happy with the layout and have a good justification for where the speakers are located. (I’d make a matching set of IEM decoder .json files too.) I’m mostly thinking out loud here. Hoping that something I say shakes a good idea loose, but am definitely open to anyone else’s thoughts on the subject. The one idea that I keep coming back to, which is the same one that I had when I started this thread, is that spherical harmonics do sub-divide a sphere, and if they describe more than 20 positions (and higher orders do), there must be some other acceptable spacing that isn’t completely equidistant. I probably should read that AllRAD paper too, because that algorithm seems to be able to compensate for unequal spacings, and it would be good to understand its limitations.
 07-21-2023, 04:34 PM #18 Joystick Human being with feelings     Join Date: Jul 2008 Location: Athens / Greece Posts: 627 The 32 points, as you describe them, make sense to me too. Also, I think this arrangement would cover most cases in film or music audio production. I already use HOA to produce for film and export Dolby Atmos beds, but for the C and LFE channels, I use direct channel-based panners that I route to the render output, so I don't distribute dialog and LFE to the rest of the discrete channels. The conversion to channel-based that you propose would also be nice for game audio, as many developers struggle with ambisonic spatializers. The support is not good and the tools are open-source and badly maintained, except for the excellent native implementation that was done for ambisonics in Unreal Engine. Unity has big issues with that. So a conversion to a channel-based format for layers that represent the ambience or music, that would be played back from virtual speakers that follow the player character, is something that seasoned sound designers do. For experiences that don't need head locking and the audience consumes a static sphere, you might want to think of not using the channels in an equal distribution. Using more channels for the horizontal plane, and fewer channels for the top or bottom (if the bottom is needed) is a resource management logic that serves the way we hear and the way we distribute our speakers very well. __________________ Pan Athen SoundFellas Creative Audio Studios www.soundfellas.com Creator of Echotopia www.soundfellas.com/software/echotopia
 07-23-2023, 07:21 PM #20 Joystick Human being with feelings     Join Date: Jul 2008 Location: Athens / Greece Posts: 627 Ahhh, yes, I forgot to mention the simplification that happens for domestic use. It makes sense as they need to keep computing resources demand low for those systems. Well, in general, Dolby Atmos is an ok format for use in big cinema theaters for audio material that is made for front-screen media (films, etc.). Dolby's effort to market the Atmos format for use in music and other entertainment media is justified from a commercial point of view, but not so much from a technical point of view. Object-based audio borrows some nice concepts from the interactive audio sector (games, virtual instruments, etc.), like the use of a bed and individual moving sources, but it fails to support a logical audio production pipeline that includes the use of group processing, summing and sub-summing, a reverberation signal that accurately follows the sources, and master bus processing. It's up to the artists/creators to choose if Dolby Atmos is a good option for them, by justifying the need for a commercial seal of approval in their design intent. You also mentioned "density", which is a very interesting element of audio design. In my work on soundscape design and production, I discovered that density is mostly derived from aesthetics, contrast, and the use of sounds that the audience is trained in real life to perceive as dense phenomena in nature. I know that you mentioned density as part of the number of audio streams, I'm just mentioning this because audio can be immersive even in mono. I find your experiments exciting and I walk a similar path :-) __________________ Pan Athen SoundFellas Creative Audio Studios www.soundfellas.com Creator of Echotopia www.soundfellas.com/software/echotopia
 05-06-2024, 04:23 PM #21 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 I never did follow up on these. Here's the 12-pointed Icosahedron, to go along with the 20-pointed dodecahedron I posted before. While I had Blue Ripple's ordering for their A20 layout, I just took my best guess and used what made sense to me for this "A12". Code: ```{ "Name": "All-Round Ambisonic decoder (AllRAD) and loudspeaker layout", "Description": "This configuration file was created with the IEM AllRADecoder v0.9.4 plug-in. 29 May 2023 7:51:53pm", "LoudspeakerLayout": { "Name": "A loudspeaker layout", "Loudspeakers": [ { "Azimuth": 180.0, "Elevation": 58.28252410888672, "Radius": 1.0, "IsImaginary": false, "Channel": 1, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": 58.28252410888672, "Radius": 1.0, "IsImaginary": false, "Channel": 2, "Gain": 1.0 }, { "Azimuth": 148.2825317382812, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 3, "Gain": 1.0 }, { "Azimuth": 31.71747398376465, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 4, "Gain": 1.0 }, { "Azimuth": -31.71747398376465, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 5, "Gain": 1.0 }, { "Azimuth": -148.2825317382812, "Elevation": 0.0, "Radius": 1.0, "IsImaginary": false, "Channel": 6, "Gain": 1.0 }, { "Azimuth": 90.0, "Elevation": 31.71747398376465, "Radius": 1.0, "IsImaginary": false, "Channel": 7, "Gain": 1.0 }, { "Azimuth": -90.0, "Elevation": 31.71747398376465, "Radius": 1.0, "IsImaginary": false, "Channel": 8, "Gain": 1.0 }, { "Azimuth": 90.0, "Elevation": -31.71747398376465, "Radius": 1.0, "IsImaginary": false, "Channel": 9, "Gain": 1.0 }, { "Azimuth": -90.0, "Elevation": -31.71747398376465, "Radius": 1.0, "IsImaginary": false, "Channel": 10, "Gain": 1.0 }, { "Azimuth": -180.0, "Elevation": -58.28252410888672, "Radius": 1.0, "IsImaginary": false, "Channel": 11, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": -58.28252410888672, "Radius": 1.0, "IsImaginary": false, "Channel": 12, "Gain": 1.0 } ] } }```
 05-06-2024, 04:28 PM #22 ScuzzyEye Human being with feelings     Join Date: Apr 2021 Posts: 579 I also mentioned an "A32" layout. This one matches the default 32 speaker "Full Sphere" layout from Fiedler Audio's Spacelab. While not exactly Atmos friendly, it makes for some very convincing sounding spaces when piping Ambisonics into that particular reverb. You can then output it into smaller "bed" for Atmos playback. Matching channel ordering to Spacelab means that even though this is a combination of the vertices of the icosahedron and dodecahedron, they are in a different order. Code: ```{ "Name": "All-Round Ambisonic decoder (AllRAD) and loudspeaker layout", "Description": "This configuration file was created with the IEM AllRADecoder v0.9.4 plug-in. 17 Jun 2023 8:00:05pm", "LoudspeakerLayout": { "Name": "A loudspeaker layout", "Loudspeakers": [ { "Azimuth": 0.0, "Elevation": 90.0, "Radius": 1.0, "IsImaginary": false, "Channel": 1, "Gain": 1.0 }, { "Azimuth": 180.0, "Elevation": 53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 2, "Gain": 1.0 }, { "Azimuth": 108.0, "Elevation": 53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 3, "Gain": 1.0 }, { "Azimuth": 36.0, "Elevation": 53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 4, "Gain": 1.0 }, { "Azimuth": -36.0, "Elevation": 53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 5, "Gain": 1.0 }, { "Azimuth": -108.0, "Elevation": 53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 6, "Gain": 1.0 }, { "Azimuth": 144.0, "Elevation": 27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 7, "Gain": 1.0 }, { "Azimuth": 72.0, "Elevation": 27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 8, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": 27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 9, "Gain": 1.0 }, { "Azimuth": -72.0, "Elevation": 27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 10, "Gain": 1.0 }, { "Azimuth": -144.0, "Elevation": 27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 11, "Gain": 1.0 }, { "Azimuth": 180.0, "Elevation": 11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 12, "Gain": 1.0 }, { "Azimuth": 108.0, "Elevation": 11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 13, "Gain": 1.0 }, { "Azimuth": 36.0, "Elevation": 11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 14, "Gain": 1.0 }, { "Azimuth": -36.0, "Elevation": 11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 15, "Gain": 1.0 }, { "Azimuth": -108.0, "Elevation": 11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 16, "Gain": 1.0 }, { "Azimuth": 144.0, "Elevation": -11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 17, "Gain": 1.0 }, { "Azimuth": 72.0, "Elevation": -11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 18, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": -11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 19, "Gain": 1.0 }, { "Azimuth": -72.0, "Elevation": -11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 20, "Gain": 1.0 }, { "Azimuth": -144.0, "Elevation": -11.0, "Radius": 1.0, "IsImaginary": false, "Channel": 21, "Gain": 1.0 }, { "Azimuth": 180.0, "Elevation": -27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 22, "Gain": 1.0 }, { "Azimuth": 108.0, "Elevation": -27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 23, "Gain": 1.0 }, { "Azimuth": 36.0, "Elevation": -27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 24, "Gain": 1.0 }, { "Azimuth": -36.0, "Elevation": -27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 25, "Gain": 1.0 }, { "Azimuth": -108.0, "Elevation": -27.0, "Radius": 1.0, "IsImaginary": false, "Channel": 26, "Gain": 1.0 }, { "Azimuth": 144.0, "Elevation": -53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 27, "Gain": 1.0 }, { "Azimuth": 72.0, "Elevation": -53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 28, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": -53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 29, "Gain": 1.0 }, { "Azimuth": -72.0, "Elevation": -53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 30, "Gain": 1.0 }, { "Azimuth": -144.0, "Elevation": -53.0, "Radius": 1.0, "IsImaginary": false, "Channel": 31, "Gain": 1.0 }, { "Azimuth": 0.0, "Elevation": -90.0, "Radius": 1.0, "IsImaginary": false, "Channel": 32, "Gain": 1.0 } ] } }```
 05-06-2024, 11:03 PM #23 Joystick Human being with feelings     Join Date: Jul 2008 Location: Athens / Greece Posts: 627 Those are very useful; thank you for sharing! I was reading about t-design methods to see if I could make a script that calculates near-perfect equidistant points on a sphere. One proposed method uses the Fibonacci lattice formulas you mentioned above. My next step is to read the All-Round Ambisonics Panning paper (F. Zotter, M. Frank) again to understand the logic behind the choice of limits and algorithms in the t-design method they used before the VBAP module in the AllRADecoder. In the past 2 years, we made a lot of critical listening tests at SoundFellas to update our 3D mixing pipeline, and we concluded that a little randomization is a good thing for the final holophonic experience. If you think about it, compositing a sound field using ambisonics is like compositing a CGI scene for use in a movie; you don't want it to be computer-perfect; it needs Wabi-sabi. That's why I believe t-design patterns are even better than precise points around a sphere. For example, when we create the ambience loops offered in our Ambience Kit sound libraries, we never use perfect round numbers. This philosophy works well when you experience a virtual sound field in VR or games and even better when you feed the signal to a reverb. Unless I misunderstood the All-Round Ambisonic pipeline and what we're discussing here, I think an extra button that generates a t-design speaker layout according to the decoder order setting would be a nice feature for the AllRADecoder.Together with the respective configuration on the MultiEncoder, they would make an excellent workflow for using traditional effects in an ambisonic pipeline. I don't know if my hypothesis is correct, but I created an issue on the IEM Suite tracker anyway: https://git.iem.at/audioplugins/IEMP...e/-/issues/203 __________________ Pan Athen SoundFellas Creative Audio Studios www.soundfellas.com Creator of Echotopia www.soundfellas.com/software/echotopia