[PD] HOA / spatialization approaches for a hemisphere

Pierre Guillot guillotpierre6 at gmail.com
Tue Jul 4 09:19:23 CEST 2017


It's feasible but perhaps a bit complicated in Pd.
The idea is to add multiple virtual sources around the main virtual source
- MDAP (sorry for the typo error) -> multiple-direction amplitude panning.

So for each virtual source, you compute the coefficients of N other virtual
sources. Based on Pd  and Max objects (because it's not specified in the
papers) the positions are (with s the spread factor):
In 2d, -s -s/2 -s/4  0 s/4 s/2 s
In 3d, [azimut, elevation]


                                        [0, s]
                                       [0, s/2]
                                       [0, s/4]
[-s, 0] [-s/2, , 0] [-s/4, 0]   [0, 0]  [s/4, 0]  [s/2, 0]  [s, 0]
                                      [0, -s/4]
                                      [0, -s/2]
                                        [0, s]

I think the simplest approach is to pre-compute all these positions and
then rotate them by the position of the main source.

Then you have to sum the lists of coefficient term to term.

If spead > 70 you have to add a factor to each coefficient
factor = (spread - 70)/30*(spread - 70)/30*10
coeff1 = coeff1+factor
coeff2 = coeff2+factor

Then compute their power (the square root of the sum of the square of all
the coefficients):
power = sqrt(coeff1*coeff1+coeff2*coeff2+...+coeffN*coeffN)
and at last, normalize all the coefficient:
coeff1 = coeff1/power
coeff2 = coeff2/power,
etc.

And... that's it :)
Is it understandable ?



2017-07-04 3:50 GMT+02:00 <jmejia at anestheticaudio.com>:

> Thanks Pierre - these abstractions seem great! I was able to easily adapt
> it to work with my setup.
>
> I've been looking over Ville Pulki's paper but am a bit lost as to how to
> implement a spread function in your abstractions. Can you point me in the
> right direction?
>
> Thanks!
>
> -Jesse
>
>
>
>
> On 2017-06-27 01:18, Pierre Guillot wrote:
>
> My VBAP repository is for "personal" use, I'm not sure that I will ever
> publish an "official" release but everything should work ! I did this
> because there were bugs in the "official" implementation when using a very
> large number of loudspeakers and I couldn't solve the problem from the
> original code (I couldn't find the problem in fact...). If you want to be
> sure to have something durable I suggest you to use the abstraction p.vbap
> but the compiled externals are much more efficient. One last thing: there
> is no "spread" factor (MDBAP)  but you can do it manually in Pd. The
> principles are explained in the paper Uniform Spreading Of Amplitude Panned
> Virtual Sources (https://aaltodoc.aalto.fi/bitstream/handle/123456789/
> 2345/article4.pdf) and the implementation is explained in Generic panning
> tools for MAX/MSP (http://cnmat.org/ICMC2000/pdf/VBAP.pdf).
> Cheers
>
> 2017-06-25 0:09 GMT+02:00 <jmejia at anestheticaudio.com>:
>
>> Thanks Pierre! That's all great advice. I'm gonna dig into VBAP - it's
>> been awhile since I've messed with that. Maybe that will work better.
>>
>> I'll give your building repo a shot https://github.com/pierreguillot/vbap
>>
>> (unless you have OSX binaries?)
>>
>> but I also wonder about all these others:
>>
>> https://puredata.info/downloads/vbap/releases
>>
>> vbap-v0 on dekken
>>
>> https://sourceforge.net/projects/pure-data/files/libraries/vbap/
>>
>> Thanks!
>>
>> -Jesse
>>
>>
>>
>>
>> On 2017-06-24 03:26, Pierre Guillot wrote:
>>
>> Hi Jesse,
>>
>> With Ambisonics, ideally your loudspeakers should discretize perfectly a
>> sphere, you should have your head at the exact center of this sphere, etc.
>> and perhaps if you forget that your head interferes and the loudspeakers
>> don't generate plane waves you'll be able to reconstruct a coherent sound
>> field... But to avoid these restrictions (because very few people have a
>> full sphere of loudspeakers - or want to ask the audience to be completely
>> crushed at the center of the sphere) there are several techniques :
>> optimizations of the energy and/or velocity vectors, optimizations of the
>> decoding, etc. The problem is that none of the solutions are completely
>> generic. Your choice must be driven by your approach and your goal.The
>> advantage of Ambisonics lies in its intermediary representation of the
>> sound field that allows to apply transformations (rotation or whatever) and
>> to decode for different loudspeakers configurations. But if you just want
>> to spatialize individuals point sources, you can also use VBAP that is
>> perhaps much more accessible. Nevertheless yes, you can surely find a way
>> to decode the sound field for two ring of loudspeakers with Ambisonics (we
>> can discuss it if you want). And one good rule is just to avoid placing
>> sources where the loudspeakers are missing. I don't know if I really answer
>> the question, I hope a bit :)
>>
>> Cheers,
>>
>> Pierre
>>
>>> Date: Fri, 23 Jun 2017 16:19:29 -0600
>>> From: jmejia at anestheticaudio.com
>>> To: pd-list at lists.iem.at
>>> Subject: [PD] HOA / spatialization approaches for a hemisphere
>>> Message-ID: <3149263781acf8439b762eef943d60e5 at anestheticaudio.com>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> Hi List,
>>>
>>> I'm putting together a 32 channel HDLA and looking for spatialization
>>> advice. The configuration will be two rings, one higher than the other,
>>> and I've been thinking a bit smaller/closer to approximate a hemisphere.
>>> But that's flexible - they could be parallel rings if it simplifies
>>> things.
>>>
>>> I have some (limited) experience using HoaLibrary + PD for 2D ambisonics
>>> - so my initial thought was to try the 3d externals there - however I'm
>>> not sure if it actually makes sense to build an abstraction setup for a
>>> sphere of twice as many channels while limiting access to the upper
>>> hemisphere only. I'm assuming there would be some problems with that
>>> approach.
>>>
>>> I found a few papers on mixed-order ambisonics - by Chris Travis and
>>> also the AmbiX crew - but I'm not sure if there's away to implement that
>>> stuff with HoaLibrary. I'm also open to using different software if
>>> something else is recommended instead.
>>>
>>> Thanks for any advice!
>>>
>>> -Jesse
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20170704/40f88ea4/attachment.html>


More information about the Pd-list mailing list