< Back to IRCAM Forum

vbap3D Sources inside speaker setup

Hello dear community,

I know it is in the nature of Vbap3D to work only outside the speaker setup, but what would be possible to compensate for the following solution:

I have noticed: when placing sources inside the loudspeaker setup, the source automatically is moved to the top speakers. I would really like the middle ring of speakers to stay active and fade smoothly trough the center. Is there a way to achieve this?

Strange center behaviour on the bottom half of the vbap3D setup:
Divergence radius only seems to works on the upper half of the speaker setup, when moving sources on the bottom, the sound will just jump from one side to the other. also: when positioning a sound in the middle, on the bottom half; the sound completely disappears. Is there a way to fix this?

Main question is: How do I create smooth center transitions on a 3D setup?

Greetings, Marijn Cinjee

Hi,

I have noticed: when placing sources inside the loudspeaker setup, the source automatically is moved to the top speakers.

I presume you are using spat5.oper + spat5.spat~ ?
In that case (and unlike spat5.pan~), the source “slides over” the sphere surrounding the listener. See paragraph “Source radius” in Spat5-UserManual.pdf.
I’m afraid this mechanism is a little bit contradictory with the “divergence” mechanism.
Unsure yet how to cope with that…

Divergence radius only seems to works on the upper half of the speaker setup, when moving sources on the bottom, the sound will just jump from one side to the other.

Regardless of divergence, that sounds like an issue with missing phantom speaker for your speaker layout. No ? Have a look at spat5.tuto-phantom-1.maxpat if needed.
Otherwise, feel free to send a piece of patch so that I can inspect more carefully.

Best,
T.

1 Like

Hi T,

Thank you for your quick and clear response. So if I understand it correctly, there is a difference in the way spat.pan handles sources inside the loudspeaker setup compared to spat.spat~?

This is my setup:


----------begin_max5_patcher----------
3109.3oc6bj0iaia94Y9UH3GKF4gjhTRrOkllto.MIavlTDTjsX.sMGGkQVx
PGywtHyu8xCIYYaYYIaZ6IEdPhMEMI+tO3g3ed4ECFE+HOcf0e05qVWbwed4
EWnpRVwEEOewfYrGGGxRUMavrwCCCtmObJKH54AWoaw8rjH1L9laPT9rfnPd
lZLfEUNmkM9aAQSuIgONSiCHemgfqDe4I+BCgxufHwSV+2ECUbdV4XgKpUfe
hAiEEwCGGmGoFNLp3G0sO6o4bMTFLKOLKnn4oASiXgCtxZf7+2FFyxjEBCRE
CRIPClnns3Qe2FAGTg+IBhNimbCOhMJjWm1RY2ymbCKKKIXTdFeQozBdaAyU
x6By4w2VVcY80G9v3nosxeWp0yDxKYKcE7tl90fH4uZ6AZ72S+VbRV2AVISs
ogJOJHKM6IMiAq+8eb4kK9R84Ot7pNp5EwePH.J49Y7GUR4ASXie1BZgZTWC
0htlmjCY45pz0HDkhGZiZZf0UEf9CLGYHX04QyYiu64MPJsY13pLavd9xu7w
agT1ncwBaghRMY..8LHUmJnFxv6CRxxYgoy4r63IoOa8pxhBiXqWMarEbWYI
XkKDDAtq7jM3qnQNi6fkL+E0IvmVr8axCBv3FHBMKsdUuYhkbMkZkxgQarPX
OXgMx9HFTwJJNHk+7tQvPpN7CdWI31HR7tPjhvRBP2J0babxLlhLb2L8AcTT
l1yGArq1DRKfQrnoMSgn1BPBLmHdN6NqqSiySFyuFd8iO8GVfg5+0HiBuY1B
UwOfPk.GhQ6pbuY9Avfp0hzSln376l6PskLweWIvMJzoFOlP7bdh0qBD4P7P
P12r98AkhZApNR7SnqDBecThxpvp5zs5ubcBaRPdpEZH42Gri4gB8JBh3tEF
FtMKkp+2n1gyKoXFKkH+S2HkD2jNNIXd1FjRxOeVGgVJrlmmI33VuRvGTEkQ
uqKBmKhAH3zWK4PV2OhMWHvljN+ZVdV7LA0JjI0jfSDodlLkGIdnPX5bkUCc
XtHzh3QUkVvER6vfHd0rAPs67LZQRu+sj.YP9sNIEmBunJ2ENjCapECpgooA
+gdxFnxT3OQJOy3ooro70zMJMLSUdkgCIDgYnqOwxFNzgRKdPUunFrC1xYHT
55t3opFunA5xU+frJY6k8q3Q6FZhcCij8xvxdcjwdYLt.V0.EXnKBJq.4H+E
3POWEQg8jOpKnqT2OUyjco5Q6pm0s1tp45B1Uiltg1U.ydsJVsG1qNj1qBS6
UvI6UPY6UnH60HXrp4TJR7oORzRGgoNPzKX8JrqUitO105jFvX2hGsWuE1qO
L1qAJ60vFEWsZbAC8gdxwP9kHZPU4FppVMqVwUV0i6tjqERem4oNXrqJ+KpC
nLkLyjtwxoQqZhBcWYYdT3kr9ksu0NeK.PgmGqEX1DdZVPDKKHNpVaPEMpQW
HcEPnt.I4Tr1aHIlAqH191fjutQ6Oj.cAR6MM41EH4YBHITv5tfpT2MYBOQo
LuevtSf1DDItK.hXBHg5Bj.lPYz4Xw75lXxoYMDv9AaPO.8dAIZW.TCpHZOx
r4yEI2lVzbEPD4V88XEKv+J0iAQ5GUA.FjvuOnr8dpZXIhHKYhvJ4I5LWezE
OP20XAyLJOnvhSPdBPpVK1UhBrHo27IAweJikkmdy64Q45.cBx5VlHK0kYEi
ldaPX333PM5UOAyxnSCz+ZwpBOnpseUDQEQwPnufsLzA53gbUkDEHjZdkK5C
rrSXBlBPxlJBr6gIpR9HGhirDXktgV.K.jpg.f5Cv5RhpDya.VuahX65zgQ0
VX7AyShmGmTJTEckV0dwbMlJmUBWmCvxYQeUglTh3WqVB7h4knS6urO007VV
XLK3w8UHTgfMySc7D42AUrDerCTwbvqvW1Q14JBbCKDLIu9MZlqED953vIVe
LVliUPab95SA6qVPEEXTT4832sM3W1muVLcUKIxuHevJeXcVNHRzkT08iAE1
UN8QkRAGRJsbR7++rTs+z3fkvuaYkwXWje9YOcWdzjfrG85hg4YQhYB97t7w
r13yrwiEC7RziCRjIjhHvDAAoJ4oqqF4rLO.6QfNpTlPTGeptDABbWoSqXe9
qy4QVehEkZ8I9rfQK4KhGxmsJp44655oFbe.z2WWRfkHzxfYzzk5FEfgdJRR
fZXOOc2PT8PQbq5mb8EU87lfHYxy7JYrCEAc0TUYZhHOoZ0p.dWUa2McvJkc
+pbV88.Deeco0PvU03cKkvtx+7zkzizAI40xESVHbGK62xRWjPeQgMPWOjNs
ae..VZzZDCBY3RHPG2qE6hliDBtZoOPjsFZ4fE9WPGxYhtmCxGsJbLu2iDKJ
mGJlN5qOGd9mvvyumkksMA2wU8l8nEDY8a7o4grjAFczZOExyZaWd.jf1vJt
tAGwyRxSij7PIMOKQOgRTzYN+IgyelueZ36Nm46mD9N13QNNaAcJjjnCPN.n
JYo4FSGiOh3y5aGc8sy13Ged94HjGedtoiNhOOipSgT7r+pS.Wmblmez44tl
ve0uDmX8tf648eGYZai4.Cckm+KGCsjze4y+RO2IUBPnvn1sHWhCTs6ZPHBh
ZamTgxSrldeI8ABhSVxq7rqs4cR8e9zjj3o7nOqTkaaOTwtPHPe51nHWrh2Q
nPeO+V2CUnqiP4WQBdXWJsnDXEZYSRIobP0EDj3p2cY41TpHO5oe6S61ddex
O6eMuqK9FaWWTu3MAi6oZNlJ0TupwRa9DCzwNshd9a4Q76YC1jVpuC0Su22N
TJFVTxSdFN2tV5R6ta8luwiEvF6wNd.Vg8iNLSzF+JWnqWx36YI0z5puNOKS
.5VzXqQrPsvxuhOAJJAMMZ8lp2vuWPH0aWbIarUrRliSY7m0KYdTK8g.gMYu
77.Kr5V7wAAmPunPp+UZXf78XnG5VqfMskaPGcJuhW2M5Fr4y4yVghI4WuiO
oe1gMQGMwqbWqwlDseOKKI3wwYIg6A1aTDR9R81pyCCpPcTc87g3I7zN6Uri
QK2KtwANj4G5kKDvAVw5CpqVg1Pll7hrdPyC.p8wfwYamWsSRZihlI7Td1Kt
rM9z3347tmtwh25Jpi7uFyp9zwj+LaT2IkNZm2jlyV8uXThRLwlQaMA5Flx2
FiTdDyD5ywSkyGwXoy1hPYCK7Gvzjz+d1VdwHOhr2uvtmKuxmd13b39mUHXH
wPD2DVxc1QAS+VlsZQ.5odOkfJlNNQnQ.JbfttkcyKv.txh1qZsJqV0Re0vr
9ZNzyS3+4041Pqy82GMZ2OJ6mEBG5k+46JSLdB.r2mBkECEpOR7QgbQfS8qu
zqiiuaauFkKdWaVqPs3mgbVRWecr.FbEG6FX9oTkiXLUtfn65Y.CWAUA7qxV
xwEHbY2xxh2g123hQr8ts5Jk2wvIaRW9pk9rwUKuO7f0T6WrOXpl6TujAVo8
tiaGQ+xGk2xt1nXiXlbmdJyeQdygbpykMTlo21mgSilTUYlQp7CVJ6aaoq.T
bw6+Jk536UTxy2nSJUeoJ95vbd6Gumld8dgdEaj6BJjVmtLMBhdIifIwOD0a
V3VUMLHF92eh0eDDfnD8N66443fzuvyHnvmp4Qv2lv46.Fp3dUKzCzUFO5Pg
bnWlH26YSEcm0admOF35pWeLWf.4TxYWJjRNb3H5ELN9a7I8lG5UE6FVkuK.
4PPG.2z+GdXX7C8WLiH5yLjmOzWkvAfHLqIssWAxKrUBE.7ODD.5mQBPs6Bu
MNbGTQpVgGBEAI5y9T8z1LBBNOOYd6qh4ZIXfAHpdsi.tTkNLxm3h763gVwq
5p6ACIBWapfCRObF0zLgOlGbe6arVS5LUSFYAxApeiTXFjSmh5a2xk.wxA8w
BGZzhHodEWhHBsYpSq4CdbzhR4QSReoEkaAS171dMM2YJvCB7z6fD1EPKtlW
7fFU2IMazh0bZWunsN52mBYr48.keGKK15cx4NMvXvOMieadXXV+10F4M4nm
RQvsZVzxIvtsSqpOg.0Kvtqimi9.B6JbjXzcQqjnNPzjAmUJx2yWmNlSkAuC
h5P8MJ+fm9x5VD4A4ZP7TOT7eSPR1SV+iowaawbgTJPmUqPoBWrS5t.f9bmS
2dT3tcyKsBqwwcqaiFPpaoV+AmBUJg2zhcsZGkz56SV01BJYUoyKDgp6t+K+
wk+O.pqRbXA
-----------end_max5_patcher-----------

I implemented the [/phantom/automute 1] attribute. However, this does not seem to work on the bottom half of the 3D setup.

Many thanks for taking a look.

Kind regards, Marijn.

1 Like

just two thing, only details,

you don’t need to send a bang with /speakers/xyz

image

you can also use mc.dac~

image

Best,

Jerome

1 Like

Thanks. I am using DAC~ Because I am sending out the audio with jack audio connection Kit. Jack does not seem to work with mc.dac~ for some reason.

Hi marijn,

So if I understand it correctly, there is a difference in the way spat.pan handles sources inside the loudspeaker setup compared to spat.spat~?

I would not say that exactly :
There is no notion of “inside the loudspeaker setup”.
But spat5.spat~ treats the sound sources differently whether their distance is greater or lesser than the “source radius” parameter.
On the other hand, spat5.pan~ has no such “source radius” parameter.
So, yes, there is a difference in the way spat5.spat~ and spat5.pan~ handle the sources depending on their distance (and depending on the “source radius” setting of spat5.spat~).

I implemented the [/phantom/auto 1] attribute. However, this does not seem to work on the bottom half of the 3D setup.

Can you be more specific ? At first glance, the behavior seems normal to me.
Please indicate what seems wrong : for which source position(s) do you notice something that is different from your expectation.

1 Like

I am using DAC~ Because I am sending out the audio with jack audio connection Kit. Jack does not seem to work with mc.dac~ for some reason.

Oh, I was not aware of that. Good to know.

1 Like

@tcarpent I have investigated the differences between spat5.spat~ and spat5.pan~. Indeed spat5.pan~ does exactly what I want. However there are some things I would like to keep from spat5.spat~ and oper:

  • Distance attenuation: (you already answered that question!)
  • Doppler, direct, early, cluster and late controls per source.

I have investigated the spat5.room~ object. However, the object was meant for 1 source. It seems strange to me that I should copy the spat5.room~ object for every audiosource. I was thinking about creating a solution for this in poly~. This is because dynamic rescripting of the number of sources. (mc tuto 2). Is there a smarter way to implement the direct, early, cluster, late and doppler controls in a way that I can set those params per source? Or maybe change the behaviour of spat5.spat?

Greetings, marijn

when using mc.dac~ only the first channel will pass trough to Jack. (tested
on windows)

I have investigated the differences between spat5.spat~ and spat5.pan~. Indeed spat5.pan~ does exactly what I want. However there are some things I would like to keep from spat5.spat~ and oper […]

I understand your request, and it makes sense.

The reason spat5.room~ is limited to only one source is that it requires (at least) 25 output channels (per source). So, having spat5.room~ with multiple sources was not realistic before the introduction of MC.
Now that we have MC, I can certainly extend spat5.room~ to support multiple sources. It should not be too difficult/long. (and would be easier for you than using poly~)

Or maybe change the behaviour of spat5.spat?

I’ll think about it, regarding a better cohabitation of radius / divergence.
Although I’m a little more reluctant to changing the behaviour of spat5.spat~ as this is more touchy, and impacts many users.

1 Like

Hi,

Oh Jack… thank you for your information… :slight_smile:

Best,

Jerome

PS : it’s the same for POLY~ out, no MC, got to split…

image

1 Like

EDIT: I am beginning to understand the radius message a bit better. I originally thought it was only changing the volume. Now I see it has a clear effect on the speaker panning. Armed with this knowledge. I can get a bit further!

Hi T,

To give you a bit more context:
I am working on a spatial sound installation for a Virtual reality cave. The simulation will be running in Unity3D. The object data from game-objects is directly linked to spat5 sources. Audio is being streamed in from the Unity3D mixer using Jack. The spat5 tool I am building dynamically adapts to the number of channels in Unity3D and spatialize the audio inside the Cave. As you might understand, these objects can fly anywhere. I am trying to achieve a foolproof system. Where a source can be moved in all possible directions, inside and outside the speaker setup without creating any kind of audible position jumps. Also: an experiment will be done with a tracking wand. This wand will be inside the speaker setup.

When the source is moved inside the setup: A number of things happen that I would like to change for my case:

  • (this is a big one:) Moving a source Up and down inside the speaker setup: the source will jump from top to bottom. It would be much better if the audio would pan smoothly on the vertical axis too!
    Example: https://drive.google.com/file/d/1Ma9kEoIoQKfvhv4cW-JYOskzCiM_epN9/view?usp=sharing

  • Moving a source across the bottom center: Seems to be working now, I changed the radius.

  • Moving a Source on the horizontal axis on the top half of the speakerdome: audio moves over the ceiling. This is cool, but not really what I am looking for. I would like the speakers to stay active, and spread center.

Spat5.pan~ solves a lot of these questions. But now the question remains: how to keep using the excellent ircamverb~ system. using: Direct, early, cluster, and late components for the sources. for example, we fade out the direct signal when an object disappears behind virtual wall. This works really well.

About this project:
This tool will be designed for game developers who don’t really know to much about audio. Therefore I am building a really simple UI that only takes in XYZ position data. and automatically syncs everything else to the Unity project.
It is for research purposes only. The use of spat5 will be clearly mentioned.

I hope this makes my situation a bit more clear.

Greetings, Marijn.

Hi T,

Thank you for acknowledging my request. I do not expect you to change spat just for my specific problem, but it would be a great improvement I think! I totally understand that it is unrealistic to to use multiple spat5.room~'s in multichannel. I am looking for a solution where I can send multiple sources to one room. Just like with spat5.spat~ and spat5.oper~. I have not yet been able to find a really suitable solution to this problem.

I like your cave very much,

Did you have a look at Panoramix ?

it’s embed in Spat5 patchers… You can find it here :

Packages/spat5/patchers/Panoramix-Ircam.maxpat

Hoping it helps,

Best, Jerome

1 Like

I am glad you like this cave setup! It is the biggest spatial audio project I have ever done. Feel free to get in contact with me about this project if you are interested.
Thank you for the information! Panoramix seems like very nice tool also.

I understand a lot better how the radius message behaves. I managed to get a more satisfactory result by setting the radius lower. I also build something to increase the aperture as sources get closer to the center, and spreading as well. With these changes, everything works a lot better.

Thanks for sharing the details of your project. That looks really interesting, and your intents are clear and meaningful.

In the hope to further help you achieve your goals, my short-term plan is to extend spat5.room~ to multiple sources. This might not be to “easiest” solution to your issues, but spat5.room~ is an object that will give you the maximum freedom (= responsibility) for panning and gains control. It will simply deliver reverberated channels that you can pan as you wish (using spat5.pan~ or any other tools you wish).

I am happy though if you found a way to “tweak” the radius so as to obtain satisfactory results.

All the best,
T.

I am looking forward to it!