HoaLibrary v2

The CICM is pleased to announce the new release of the HOA Library that includes 3D rendering.

The HOA library  (High Order Ambisonics)  is a collection of C++ classes and a set of FAUST functions destined to sound spatialization.

The HOA library allows musicians and composers to synthesize, transform and render sound fields in a creative and artistic way. It aims facilitating the understanding and the appropriation of key concepts of Ambisonics. It offers original processing like diffuse sound field synthesis, perspective distortion or spatial filtering and new graphical interfaces. The library is available for Pure Data, Max and as VST plugins.

Informations and download : http://www.mshparisnord.fr/hoalibrary/en/

Feedback and comments are welcome.

Anne Sèdes
Alain Bonardi
Julien Colafrancesco
Pierre Guillot
Eliott Paris

The HOA library is free, open-source and made available by the CICM, the centre of research on musical composition and computer science of the University Paris 8.
The project has been developed as a part of the LABEX Arts H2H at the MSH Paris-Nord and the plate-forme Arts-Sciences-Technologies.

HoaLibrary-v2.2-beta.maxpat
Max Patch
dtr's icon

Great stuff. Can't wait to try this on a big sound system.

nnimar's icon

It looks fantastic. What kind of hardware would you need to use this library ? Have you got an example of setup ?

metaphorz's icon

It does look very good; however, I cannot find an "externals" folder in
HoaLibrary-v2.0.1-beta-mac (the first download link for the Mac). The second
download (HoaLibrary) does contain the externals (.mxo's). Were they meant
to be in the v2.0.1-beta as well?

dtr's icon

The download worked fine for me.

metaphorz's icon

The download works, but does not contain any external objects if you look through them.
For example, download the HoaLibrary-v2.0.1-beta-mac, unzip it and see if you can find
any external objects (e.g., .mxo's). There is no "externals" folder as there is for the
older versions that can be downloaded.

dtr's icon

Btw, Eliott, does it make any sense using this on a quadraphonic sound system? Or is 8-16-... channels necessary?

Also, in the (French) articles on the site I read that central positioning of the listener is crucial for correct perception of the diffuse sound field. But it being a *diffused* sound field, does it really matter to the listener if s/he is not central? Sure the perceived sound will be different, but if as a composer I'm after creating shifting, morphing clouds and masses of sound, not exact spatial positioning, my gut feeling says it's not so important. Is it?

dtr's icon

@metaphorz: i downloaded, installed and ran it fine the other day. readme says drop the folder in packages, which is what i did, and you should too ;)

metaphorz's icon

You are right - I am so used to using folders containing .mxo objects.. I did move it to
packages, restarted Max, and now the objects show. I guess I need to read up on "packages".

eliott paris's icon

Hi all,
Thanks for your comments,
@NNIMAR The library is based on the ambisonics model, so ideally you need to have a circular (2D) or a spherical (3D) array of loudspeakers around the listener. However, we offer several decoding modes to match irregular configurations (eg. 5.1, 7.1, stereo, binaural, hemispherical array of loudspeakers..).

@DTR the ambisonic decoding (in 2D) is limited to 3 loudspeakers, so you can use the library in a quadriphonic setup, obviously the more loudspeakers you have more you will improve the rendering of sound fields ! I'm pretty agree with you on the fact that on many cases, if you have diffuse sound field, it doesn't really matter if the listener is not central, however, if you want to spatialize point sources, this may be important so you will have to apply optimizations (like the "inPhase" one) on the sound field if the audience is not ideally placed.

@METAPHORZ in the latest version of the library every externals are embed in a single one named hoa.library (in the "extensions" folder of the package).

Spa's icon

Hi Elliot,
I'm trying to setup a simple ambisonic or MIAP 'budget' system to "sustain" visual projections.
I see that you are using genelec auto amplified speakers in 8 or 16... they are very expensive.
Can you give me some advice?
https://cycling74.com/forums/4-or-6-channel-ambisonic-budget-speakers-and-amplifiers/

vichug's icon

Hi, some little questions/remarks ! i'm using the v2

1* in the hoa.optim~ and hoa.3d.optim~ reference there is a typo : in the "Messages" section, there are Basic, maxRe and maxRe again ; but no inPhase. I presume the description of the 2d maxRe applies in fact to inPhase ?

2* Concerning that same object, it s written somewhere that there is a hoa optimisation tutorial ; where can i find it ? Did not find it in the distribution.

3* I suppose you can have several ambisonic encoded signals going out of regular out~ from a poly~, right ? Then you can sum them up and decode them/ apply process/apply optimisation outside of the poly, to all the objects at once, right ?

4* When should i use the hoa.3d.optim ? Is it usefull to use it after a process has been applied (freeverb for instance) ?

eliott paris's icon

@vichug sorry for this late response,
1. Thanks for notifying us about that, it will be fixed in the next release.

2. In fact this "tutorial" is not currently in the distribution but in our website, and only in french for the moment (link).

3. You are completely right.

4. It depends on many things, try the several optims ! Trust your ears !

bassik's icon

Hello Elliott,
First of all thank you very much for this amazing library.

I have one issue at the moment: most 3D objects do not appear in the object drop down list when I am typing "hoa.3d.".
Of course I can see from the help files most of those 3d objects but it would be useful if these could be on the list when parching.

Is it only me or does anyone else have the same problem?

Also I would really appreciate more tutorials especially for the hoa.process~ object, that is amazing already anyway.

eliott paris's icon

@BASSIK
Hi, thanks for your interest about our library,
Do you use Max6 or Max7 ? Auto-completion should work on Max6, but I confirm that it's totally broken in Max7 due to cycling' changes.
We need to find a workaround and publish a new release ASAP.
If you want to learn more about the hoa.process~ I would advise you to take a look at the process examples already implemented.
Best regards,
Eliott

bassik's icon

Hello Elliott,

I use max 6, maybe it is something due to my installation?
Anyway not a big issue

I have started checking the examples and they are very useful thank you.
On the other hand, they mention many tutorials that do not exist anywhere in the installation folder.
One of these for example is the tutorial on the decoder optimization (basic, max Re or inPhase) that is not there but in my view is very useful to understand what type of decoding weights to use.
In particular, I do not know how your binaural coding is implemented and if I have to use the inPhase weighting (typical in the convertion between ambisonics and binaural) or not.

In any case the library is fantastic and sounds equally great!!!
Best
Sero

Glenn's icon

Hello, is it possible to use different HRTFs for the binaural configuration? I can't find any place where the HRTF files are stored.

bassik's icon

Hello,
I have another question if I may.
Is it possible with the library to do upsample of 1st b-format recordings?

That would be sweet.
:)

Thank you

Trond Lossius's icon

Hi Bassik,

the only piece of software for upsampling 1st order to 3rd order that I am aware of is the Blue Ripple Sound TOA Harpex plugin.

bassik's icon

Thank you Trond.
I thought so but I tried :)

well I will check out the TOA plugin as I only knew about Harpex actually.

Pierre Guillot's icon

Hi,
@Bassik The only tutorial for the moment is in the extra menu/HoaLibrary. We'll try to add new ones for the next release, some are already done for the PD version. For the optimization, you should look at the help,
Theoretically :
Basic optimization (no optimizations) should be used for one listener at the center of "perfect" circle or sphere of loudspeakers (with all the loudspeakers equally spaced) or if you synthesize diffuse sound fields (without punctual sources).
MaxRe should be used for an audience confined in the center of the circle/sphere.
Inphase should be used for an audience that covers all the loudspeakers area with punctual sources.
For binaural, the best is the basic optim. But the binaural rendering of the v2 is really bad and perhaps is it better to use another optimization.

@Glenn No, it's not possible. The binaural responses are "hardcoded" (it's really complicated to dynamically change the responses, we can simplify the C++ library and optimize the process with static responses). Nevertheless, I think some devs are trying to use others responses. And you can try to do it with a patch. The mechanism is really easy and explained here (there's a screenshot of a patch) : https://github.com/CICM/HoaLibrary-Light/issues/1.
FYI, we've changed the responses for the next release (we use the IRCAM's bank).

@Trond & Bassik It's almost impossible to increase the "resolution" of the sound field because the informations are missing. The only way to do this is to extract all the sources and their spatial informations and to re-encode with an higher order. And if the sources are encoded with a distance compensation or if there are room effects in the recording, you won't be able able to extract the informations and separate the sources.
If for any reason, you want to increase the order (apply effects on the high order harmonics for example) you should decode without optimizations for a perfect circle or sphere of loudspeakers. The number of "virtual" loudspeakers for the decoding must be at least the minimum number of loudspeakers necessary for the order you want to reach (look at the OrderTool patch in the extras). Then you have to re-encode the loudspeaker channels at the desired order with the angles that match to the loudspeakers.

Cheers

bassik's icon

@pierreguillot
Thank you very much for answering all questions!! Much appreciated.

On the upsampling, I follow your example until the point of re-encoding.
Basically I imagine it as I am using a virtual microphone tool for my encoding.
There are two ways in my view:

1) using typical mic directivity (Cradioid or hyper cardioid), in this way I will end up with an high order A format and I am missing the encoding matrix to High order B format...I reckon this is a typical issue with eigenmike? I might not be updated though.

2) using mic directivity that match the spherical harmonics components of the HOA, this would be sweet but I do not know of any virtual mic software who can resemble this directivities.

Do you have any suggestion?
In the mean time I am trying Harper-B trial to listen to the difference.
Btw the binaural module would be much better with the IRCAM listen set in my view.

Cheers

Trond Lossius's icon

@Pierre: The Harpex algorithm analyses what direction sound is coming from at different frequency bands, and then re-synthesis the spatial information using panning. For this reason the Harpex decoder (harpex.net) results in a decoded sound image with much more articulated localisation of the various sound sources than a regular matrix-based decoding. The Blue Ripple Sound TOA Harpex plugin does something similar: It analyses the location of sound sources within various frequency bands, and then re-encode them to 3rd order.The result is a sound image that is not as articulate as it would be if it was encoded in 3rd order as planewaves from the start, but it certainly helps making source localisations within the sound image more distinct.

Pierre Guillot's icon

@Bassik
What do you want to do ? This will change your approach because the increasing of the order can be a pretty useless operation :
In Ambisonics, the planewaves domain (or virtual loudspeakers channels) and the harmonics domain are equivalent. You can project the sound field onto sur planewaves domain, go back to the harmonics domain, ect. and the restitution will never change even if you increase the order during the operations.

The problem is that all the high order harmonics will be set to zero because the phases of the signal cancel each other out. But it can be "musicaly" interesting if you apply effects in the planewaves domain (You can have a look on the objects [projector~] and [recomposer~] of the library that are, in fact, just a decoder and an encoder with other functionalities).

To answer your question, the microphone directivity that match with an order is "create" by the encoder and the decoder or the projector simulate an optimal miking.

Pierre Guillot's icon

@Trond
Yes, I understand and I'm agree but the order and "resolution" of the sound field are not really increased. The plugins improve the restitution for a restitution system. We also use a combination with panning for irregular decoding and yes, it offers a better rendering for some layouts of loudspeaker but it creates artifacts if we come back in the harmonics domain. TOA improves the restitution for 16 channels (with the Harpex's algoritm) and converts them back but I'm not sur that thereafter the operations are more relevant. I mean that the relevance of this approach depends on what you want to do.

Cheers

bassik's icon

@PierreGuillot
Thank you very much for your prompt answer and for the explanation regarding your [projector~] and [recomposer~] objects, very interesting.
Basically I have seen the same approach by Harpex-B (or better said, similar in principles as far as my knowledge and mathematical understanding goes) used in the derivation of Binaural responses for rooms derived from B-format IR.
Basically the approach is to divide the IR in Early and late part and from that derive different binaural responses for different people using HRTF sets.
The Early part of the IR use a direction evaluation algorithm.

Now, if this is the same idea under Harpex-B, what I understand is that the algorithm can "synthesize" additional spherical harmonics (up to 3rd order) by understanding the direction of arrival of the direct sound.
Given that, I was assuming that the precision of my 1st order recording can be increased and a better 3D sound can be perceived.

So basically what I want to do is having better sounding 1st order recordings because I cannot afford an Eigenmike.
Also this discussion can connect to the binaural coding that is somewhere up in this topic.
not sure how to do it but maybe a more dynamic binaural coding can be more useful than the standard approach of HRTF in the direction of the speakers.

Thanks for the interesting and brain bending discussion anyway, I am really enjoying it.

:)

Gmix's icon

I've unzipped 2 different versions for mac, and none seem to include a hoa.2d.process~ object!??!?
I see the .maxhelp but nothing else, and all my tutorial patches have a warning in the max window and the object is highlighted in red telling me it can't be found!

Please help, really want to check out these convolution and delay effects!
-G

Pierre Guillot's icon

Hi,
In the last release, hoa.process is all-in-one and owns hoa.2d.process and hoa.3d.process. Max uses "hoa-objectmappings.txt" in the "init" folder for associating all the names. If it don"t work, it means that the library isn't in your search paths. If want to only use the externals, you should replace "hoa.2d.process" with "hoa.process" that is the real name of the external and an alias for the 2D version (or you can also create "hoa.process" in a dummy patch to notify Max that it should load the object before using "hoa.2d.processing") .
Cheers

Salsa_the_hutt's icon

Hi guys!

Impressive work. Thanks for these tools.

@PierreGuillot

I've been trying to find a way to control sources positions over OSC without any results. How would you do that?

*I mean by using the multi sources panner.

Franky Redente's icon

HI guys, can someone advice me on something please;

I have to implement binaural audio in my 3D VR world, and I need to control both sound position and listener position.
The sound object will be a cube (for example), and the listener position will be my Oculus Rift (position and rotation via quat). I have check the HoaLibrary (3D binaural decoder), but it does not give me many controls.

Then I found this FFT panner : https://cycling74.com/tools/fft-based-binaural-panner/#.VjH-ja7hCHo , which seems great. Do you guys know any other Max/Msp alternative to those I have listed, they must be free to use with in Max (not Spat~ because is not free?? please correct me if i am wrong)

Thank you guys

F

Pierre Guillot's icon

Hi,
Sorry, my account is linked with an old email address and I don't check the notifications.

@SALSA_THE_HUTT You can use "hoa.2d.map~" (or "hoa.3d.map~"). The messages should be ["index of the source " "type of coordinates" "radius or abscissa" "azimuth or ordinate" "elevation or height" (. For example, if you want to place the 1st source with cartesian coordinates (abscissa 1.2, ordinate 2.3 and height 0.1) the message is [1 cartesian 1.2 2.3 0.1( . Or if you want to place the 2nd source with polar coordinates (radius 4.3, azimuth 0.15 and elevation 0.12) the message is [2 polar 4.3 0.15 0.12(. Every messages should be explained in the reference of the object but if you need more help, you can post a patch.

@FRANKY REDENTE I don't really see how a sound object can be a cube (one source at each corner ?). Anyway, if you want to place and move sources in a sound field, you should use the "hoa.3d.map~" and you can use the GUI "hoa.map" to create a group and to perform translations and rotations.

Cheers

Franky Redente's icon

HI there, thank you for the reply. I have already achieved what i need using the free FFT Panner,
Can't see how a cube can be a sound object? check the screen shot.

Screen-Shot-2015-11-04-at-13.40.10.png
png
Franky Redente's icon

Btw I have checked, the example you have mentioned. None of the patches shows how to add listening position and quaternion (rotation via head tracking). It would be nice to implement something that would give users a practical example on how to use this library with e.g. Oculus Rift or any other VR headset/scenario.
I think is about time that we start considering VR has a credible platform for content created in Jitter and Max. Especially since all other companies are miles ahead (Unity, Unreal, FMod, Wwise, 3D Ception ..and the list goes on )

thank you

bassik's icon

@Franky Redente

I have already implemented myself an headtracker with the library.
it is based on this: http://www.rcgroups.com/forums/showthread.php?t=1677559

my issue is that I cannot get max to read the data from the arduino so I have used a pd patch from Mathias Kronlachner, who is also the creator of another tool for ambisonics called Ambix: http://www.matthiaskronlachner.com/?p=2091

in this way I have obtained a very good binaural image with teh headtraking device.

but (there is always a but...) HOA do not have a 3D ambisonics panner (only a 2D), while Mathias has created one in vst~ (check into the plug-in suite: http://www.matthiaskronlachner.com/?p=2015) and it is in 3D, based on the researched developed at IEM in Gratz (great place for ambisonics).

Also regarding having dimensions to the sources (correct me if I am wrong but ambisonics is based mainly on point sources), I have played with this system last year http://4dsound.net/
and they have achieved something similar to what you are requesting.

The problem is that they use a different immersive sound technique to ambisonics that allows easier coding for dimensions of sources...

@Pierre Guillot
the HOA library is great but if I may, I reckon you shall try to implement a 3D ambisonics panner and a better binaural module.
I am personally using my own binaural module that I have done in Max but it is a bit computational expensive so maybe something directly coded in an object might be more efficient.
It would be especially interesting if HRTF can be changed maybe using the CIPIC HRTF database with different subjects (http://interface.cipic.ucdavis.edu/sound/hrtf.html)

Regardless all of this, I can assure you that I am having a lot of fun with the library and I am building a great tool for performance.
I would love to exchange ideas with anyone interested.

Franky Redente's icon

HI Bassik,
Thank you for info.
I have managed to make my patch using this patch (comes with 4.7 Gb of HRTF).
https://cycling74.com/tools/fft-based-binaural-panner/#.VjoZoa7hCV4
This can read quat, listener position and multiple sound sources in real time.

Re: idea exchange, if you own an Oculus Rift and Lepmotion, write me on f.redente@sae.edu
I will be more then happy to let you try the patch once is on test

Thank you again.

bassik's icon

Hello Franky,

thanks for the offer but I do not own any of the devices.
I am more a guy for open source projects but if you would like to share ideas, I am up for it.

Pierre Guillot's icon

@FRANKY

"Can’t see how a cube can be a sound object? check the screen shot."
I thought you were inside a cube, but your image make me think you consider the cube as point source (but perhaps I'm wrong). In this case, the cube could be a sphere or a pyramid, this doesn't matter, you want to spatialize a source around the listener. You can use [hoa.map] and if you want to take into account the rotation of the head, you can do something like that : new angle of the source = angle of the source - angle of the head. Because if your head moves to the right, we can also consider that your head doesn't move but that the source moves to the left (question of relativity). Anyway the FFT Panner seems to suit you, so this is just a suggestion.

"Btw I have checked, the example you have mentioned. None of the patches shows how to add listening position and quaternion (rotation via head tracking)...."
Thanks for suggestion, I hope one day we'll have time to do this but this is not in our to do list. The problem is that we have a lot of other projects and it takes a lot of time to create and maintain such a library (for Pure Data, Max, FAUST, etc. with help files and documentations...) and with Eliott, we sometimes want to have time to have a drink and become philosophers.

Cheers

Franky Redente's icon

Thank you Pierre.
I understand, the Hoa library is indeed a great piece of work.

A philosopher career sounds way more challenging then a VR example : ) , but you are right we all need time off.

Thank you for the reply
Best

Pierre Guillot's icon

@BASSIK
What do you mean by Ambisonic Panner ? In the ICST library, the ambisonic panner is some kind of encoder-decoder that compensates when the loudspeakers are not perfectly well placed. In HOA, hoa.2d.map~ and hoa.3d.map~ are nearly equivalent to their encoding approach (we adapted the D. Malham's approach for distance compensation). But we can't use (for several reasons) the same algorithm to decode the sound field. And we don't have any ideal solution for irregular decoding in 3D because if in 2D, it possible to perfectly discretize a circle whatever the number of points, there are only the five solutions in 3D to discretize a sphere. So the solution would be to implement a algorithm for discretizing a sphere (this is in our to do list... before 2122).

About binaural : The rendering of the previous release was totally rotten, perhaps you still have this one ? The last release (2.2) uses the IRCAM HRTF and HMIO, it is a lot better. We tried to simplified the C++ code and that's why it is impossible right now to dynamically load HRTF. But everything is almost done to allow this functionality and the next release will at least allow to choose in a set of HRTF (CIPIC and IRCAM).

Thanks for your suggestions,
All the best !

bassik's icon

@ Pierre Guillot
Thank you for your answer, this topic is always very inspiring and you guys have done an amazing job already...deserve more than a beer and philosophical conversation.

Ambisonic panner
I should have called it ambisonic sound field rotator or spherical harmonics rotator.
Basically to use head tracking, I track the movement of my head and rotate the ambisonic field in the opposite direction.
If you are up for mathematical reference: http://iaem.at/Members/zotter/publications/2014_KronlachnerZotter_AmbiTransformationEnhancement_ICSA.pdf

What these guys have done practically: http://lac.linuxaudio.org/2013/papers/51.pdf

Binaural
I have the latest v2.2
I am not saying it works bad but I found that using more optimised HRTF on the person is listening to it (that is why I have implemented most of the CIPIC library and IRCAM library with the possibility of changing subjects.
This allows me to have a better rendition for different people who listen to the recordings or play live ambisonics music.
For what you said I cannot wait until next version then...:)

Pierre Guillot's icon

@BASSIK

We don't have [hoa.3d.rotation~] because it's really complicated to implement and optimize in 3D for the high orders of decomposition. But I hope we'll find a solution (one solution would be to limit the rotation until a pre-defined order and high enough for almost all the situations but I like to think that library can reach the infinite and beyond...). For the moment if you want I just made 3 patchs for the yaw, tumble and tilt rotations at order 1 :

hoa.3d.yaw_.o1.maxpat
Max Patch
hoa.3d.tumble.o1.maxpat
Max Patch
hoa.3d.tilt_.o1.maxpat
Max Patch
hoa.3d.rotateTest.o1.maxpat
Max Patch
bassik's icon

@PIERRE GUILLOT

Thank you very much!!!
I will have a go tomorrow and let you know how it is and if I manage to interface with the headtracker.
Regarding the higher order rotation, I have seen that the ambix suite have a 3D rotator up to the 5th order (not the infinite...) but I understand your point.

Actually I reckon it is the only library that has such a 3D rotator for higher order ambisonics and I recall a conversation I had some time ago about this on a forum (sorry forgot which one) and this is how I got to know your library...in the discussion someone said that you were the only library having a rotator (in 2D) for higher order ambisonics.

Anyway, all this is very speculative and you have already done a great job....the best part for me is the fx section...mind blowing!!!

Twice's icon

Hi Franke,

I wondered if you wouldn't mind sharing this patch? I'm also doing a project on Ambisonic & Binaural propagation with Virtual Reality and would love to take a look at what you came up with!

Norbert's icon

Thank you Julien, Pierre, Eliott (and others behind the scenes I suspect) for this excellent library!

I've been doing a lot of testing and prototyping in binaural mode but need to move to 6.1. (Not ideal I know, but it's what I have at the moment) My questions are:
1. What is the correct "Order of decomposition N"? Is there a correct number for a given speaker setup or is this something your ears must decide?
2. Is it correct to input "@channels 6" to configure hoa.2d.decoder~
3. How do I account for the subwoofer with the hoa decoder~ or dac~? Is there something like a crossover for hoa? Or should I rely on the crossover in the subwoofer? (I have a Genelec 7050B and 6 8020Bs)
4. With my complete ignorance revealed, what am I missing here?

Thanks Max community—you are the best.

Trond Lossius's icon

When using a horisontal-only rig, the rule of thumb is that you need order*2+1 speakers, so for 2nd order you need a minimum of 2*2+1 = 5, while 3rd order requires 7. So with your 6-speaker rig, you can do 2nd order.

One approach to the sub is to take the first channel (W or omni channel) and feed thisto the sub. You can then see if you want to use it as is, or if you want to apply a cross-over-filter.

Pierre Guillot's icon

@NORBERT As Trond said, you need 2N+1 speakers. But your speakers must be equally spaced on a circle. So if it's not the case, you should use the irregular mode for decoding and specify the angles of the speakers. So for the 1st case, you should have something like [hoa.2d.decoder~ @mode regular @channels 6] and for the 2nd case something like [hoa.2d.decoder~ @mode irregular @channels 6 @angles 0 30 110 180 -110 -30] for example. I suggest you to read the tutorials in the "extra" menu, it's a pretty good introduction :). And you should have a look at the optimizations, max re and in phase. There's not a lot of documentation about it in the library but on the forum or on internet, you will easily find explanation. Anyway, feel free to ask if you have further questions.

Clément HUBERT's icon

Hi everyone,
First I want to thank the hole CICM team you for your job on HOA Library. I used it in 3d rendering (9 speakers) a few months ago for an exam and was pretty happy with it.
Now I intend to make the Max for Live plugins I made more adjustable (decomposition order, decoder mode, number of speakers etc.) in order to share them. But I meet several issues, so I have some questions.
Decomposition order : I saw that decomposition order is an argument and not an attribute of HOA objects. However is there any way to adjust the decomposition order like an attribute, with a int object for example ?
Number of channels : hoa.decoder has an attribute for this so I managed to make the number of channels adjustable. But I need now hoa.decoder and hoa.dac to auto-connect together. But it seems that hoa.connect doesn't work anymore, even in his own help patch. It doesn't connect but just colors patch cords once objects are connected.
Do you have the same problem and/or do you know how to solve it ? I use Max 7.3.3 (64 bits) on Sierra Mac OS 10.12.3.
Thank you for your replies.

Pierre Guillot's icon

Hi Clément,
No, you can't dynamically change the order of decomposition. In fact, in the previous versions, we tried to offer dynamic objects (with the auto-connect, the dynamic number of channels, etc.) but it's pretty boring to implement and the code can be easily broken by the modifications in the core of Max so now we avoid such features. So the auto-connect attribute has never been available in 3d. I tried the hoa.connect's help patch and everything seems to work (I have the exact same configuration as you). Are you sure to select well the objects?
Cheers

Lee Davison's icon

Hi Pierre,

We are looking to create a plugin that will allow us to mix and pan sound using reaper in a custom speaker array. We need to be able to use ~25 speakers (potentially up to 32), which I believe necessitates a 3rd order ambisonic plugin. If we were to use the Faust functions from this library, will we be able to do this?

Thanks for all your work on this, it looks like a great set of tools!

Motimer Pavlitski's icon

@PIERRE GUILLOT
I understand there is still no hoa.3d.rotation~ I wondered if you could point me to a rotation matrix for a 5th order example.
Thanks

Motimer Pavlitski's icon

After some more research, it seems no one has worked out the rotation matrix's for more than 3rd order but then I don't understand how the IEM scene rotator can do rotations of up to 7th order? the source code for the plugin is below, if anyone could explain how they get the rotation in such resolution I would be very grateful. It does appear to be working in much greater detail when in higher orders. Is it using a 3rd order rotation matrix and with quaternions and then doing something else to make up the resolution?

(line 372 is the calculate matrix function)
3dhttps://git.iem.at/audioplugins/IEMPluginSuite/blob/master/SceneRotator/Source/PluginProcessor.cpp

Motimer Pavlitski's icon

The IRCAM SPAT also has a 3D HOA rotator object called "spat5.hoa.rotate~" that can do very high order rotation. The object loads in 64th order but I haven't tested/used it in above 5th order. https://forum.ircam.fr/projects/detail/spat/

Motimer Pavlitski's icon

Also to answer my self I believe the 3d HOA rotation is achieved by doing the rotations sequentially not with a matrix. So it's like doing 3 z-axis rotations and rotating 90* between each rotation to get the X and Y axis rotations, then use quaternions to avoid Gimbel lock when doing sequential rotations. (I think...)

Published

Creative Commons License

Author