<div dir="ltr"><div>It's feasible but perhaps a bit complicated in Pd. </div><div>The idea is to add multiple virtual sources around the main virtual source - MDAP (sorry for the typo error) -> multiple-direction amplitude panning. </div><div><br></div><div>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):</div><div>In 2d, -s -s/2 -s/4  0 s/4 s/2 s</div><div>In 3d, [azimut, elevation]</div><div><br></div><div><br></div><div>                                        [0, s]</div><div>                                       [0, s/2]</div><div>                                       [0, s/4]</div><div>[-s, 0] [-s/2, , 0] [-s/4, 0]   [0, 0]  [s/4, 0]  [s/2, 0]  [s, 0] </div><div>                                      [0, -s/4]</div><div>                                      [0, -s/2]</div><div>                                        [0, s]</div><div><br></div><div><div>I think the simplest approach is to pre-compute all these positions and then rotate them by the position of the main source.</div><div><br></div><div>Then you have to sum the lists of coefficient term to term.</div><div><br></div><div>If spead > 70 you have to add a factor to each coefficient</div><div>factor = (spread - 70)/30*(spread - 70)/30*10</div><div><div>coeff1 = coeff1+factor</div><div>coeff2 = coeff2+factor</div></div><div><br></div><div>Then compute their power (the square root of the sum of the square of all the coefficients):</div><div>power = sqrt(coeff1*coeff1+coeff2*coeff2+...+coeffN*coeffN)</div><div>and at last, normalize all the coefficient:</div><div>coeff1 = coeff1/power</div><div>coeff2 = coeff2/power,</div><div>etc.</div></div><div><br></div><div>And... that's it :)</div><div>Is it understandable ?<br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-07-04 3:50 GMT+02:00  <span dir="ltr"><<a href="mailto:jmejia@anestheticaudio.com" target="_blank">jmejia@anestheticaudio.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="font-size:10pt;font-family:"Courier New",Courier,monospace">
<p>Thanks Pierre - these abstractions seem great! I was able to easily adapt it to work with my setup.</p>
<p>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?</p>
<p>Thanks!</p>
<p>-Jesse</p><div><div class="h5">
<div> </div>
<p> </p>
<p>On 2017-06-27 01:18, Pierre Guillot wrote:</p>
<blockquote type="cite" style="padding:0 0.4em;border-left:#1010ff 2px solid;margin:0">
<div dir="ltr">
<div>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 (<a href="https://aaltodoc.aalto.fi/bitstream/handle/123456789/2345/article4.pdf" target="_blank">https://aaltodoc.aalto.fi/<wbr>bitstream/handle/123456789/<wbr>2345/article4.pdf</a>) and the implementation is explained in Generic panning tools for MAX/MSP (<a>http://cnmat.org/ICMC2000/<wbr>pdf/VBAP.pdf</a>). </div>
<div>Cheers</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">2017-06-25 0:09 GMT+02:00 <span><<a href="mailto:jmejia@anestheticaudio.com" target="_blank">jmejia@anestheticaudio.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="font-size:10pt;font-family:'Courier New',Courier,monospace">
<p>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.</p>
<p>I'll give your building repo a shot <a href="https://github.com/pierreguillot/vbap" target="_blank">https://github.com/pierreguill<wbr>ot/vbap</a></p>
<p>(unless you have OSX binaries?) </p>
<p>but I also wonder about all these others:</p>
<p><a href="https://puredata.info/downloads/vbap/releases" target="_blank">https://puredata.info/download<wbr>s/vbap/releases</a></p>
<p>vbap-v0 on dekken</p>
<p><a href="https://sourceforge.net/projects/pure-data/files/libraries/vbap/" target="_blank">https://sourceforge.net/projec<wbr>ts/pure-data/files/libraries/<wbr>vbap/</a></p>
<p>Thanks!</p>
<p>-Jesse</p>
<div>
<div class="m_6363211571888622026h5">
<div> </div>
<p> </p>
<p>On 2017-06-24 03:26, Pierre Guillot wrote:</p>
<blockquote style="padding:0 0.4em;border-left:#1010ff 2px solid;margin:0">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div>Hi Jesse, </div>
<div> </div>
<div>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 :)</div>
<div> </div>
<div>Cheers,</div>
<div> </div>
<div>Pierre</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid #cccccc;padding-left:1ex">Date: Fri, 23 Jun 2017 16:19:29 -0600<br> From: <a href="mailto:jmejia@anestheticaudio.com" target="_blank">jmejia@anestheticaudio.com</a><br> To: <a href="mailto:pd-list@lists.iem.at" target="_blank">pd-list@lists.iem.at</a><br> Subject: [PD] HOA / spatialization approaches for a hemisphere<br> Message-ID: <<a href="mailto:3149263781acf8439b762eef943d60e5@anestheticaudio.com" target="_blank">3149263781acf8439b762eef943d6<wbr>0e5@anestheticaudio.com</a>><br> Content-Type: text/plain; charset="utf-8"<br><br> Hi List,<br><br> I'm putting together a 32 channel HDLA and looking for spatialization<br> advice. The configuration will be two rings, one higher than the other,<br> and I've been thinking a bit smaller/closer to approximate a hemisphere.<br> But that's flexible - they could be parallel rings if it simplifies<br> things.<br><br> I have some (limited) experience using HoaLibrary + PD for 2D ambisonics<br> - so my initial thought was to try the 3d externals there - however I'm<br> not sure if it actually makes sense to build an abstraction setup for a<br> sphere of twice as many channels while limiting access to the upper<br> hemisphere only. I'm assuming there would be some problems with that<br> approach.<br><br> I found a few papers on mixed-order ambisonics - by Chris Travis and<br> also the AmbiX crew - but I'm not sure if there's away to implement that<br> stuff with HoaLibrary. I'm also open to using different software if<br> something else is recommended instead.<br><br> Thanks for any advice!<br><br> -Jesse</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div></div></div>
</blockquote></div><br></div>