[PD] HOA / spatialization approaches for a hemisphere

Pierre Guillot guillotpierre6 at gmail.com
Wed Jul 5 10:41:23 CEST 2017


You can look at the branch dev/mdap on my repository (
https://github.com/pierreguillot/vbap/tree/dev/mdap). There is the
abstraction p.mdap that integrates the spread. The 2d version works but I
didn't make the part that compute the positions of the virtual sources in
3d (all the rest of the algorithm is common to 2d & 3d).

2017-07-04 9:19 GMT+02:00 Pierre Guillot <guillotpierre6 at gmail.com>:

> 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/bit
>> stream/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/pierreguill
>>> ot/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/20170705/93f9c8db/attachment.html>


More information about the Pd-list mailing list