< Back to IRCAM Forum

Positional hysteresis protection when using vbap3d w/ spat5.spat~?

Hi, I’m noticing some strange behavior when i position a source very close to a speaker in vbap3d. This is admittedly VERY pedantic, but we’ll be using this setup for speech perception research, so I would like for everything to be completely repeatable. I won’t be back in the lab with the speaker dome until later this week, so I was testing this vbap implementation by just looking at the output on meters in a controlled setting, and I’m stumped as to what is going on. The best explanation I can come up with is that there is some positional hysteresis protection to stop sudden jumps between speakers? Is that a thing?

I tried to make the attached patch as clear as possible, but tl;dr when I move a source to either side of a speaker, it doesn’t always seem to crossover to the next speaker triplet. Does anyone have any idea as to what is going on here? thanks!


----------begin_max5_patcher----------
3835.3oc6ck0iipiE94p9UXE0RS2RYAuvVqQZ54k4448tZUhDbkhaQ.DK0x8
pa+ae7BPfTfCI3JgdTK0Mgx9.1e9r3i2N7W2dyr0wuRylA9J36fat4ut8laD
IwS3lx+9lY67dcSnWlfrYqKxyiilMWlUTwt3h7PZtHSXYpIdod6n4zz6oQdq
Co77LJySRd9aITYoNasWz1YfeTlcfunThW+GKPypec4adLHZ68ozM4xmBZgV
ZLGfID9On5q0uGVEKHptdwS6uu8V9k4CDmah2siFkWUGxouJJ5YA4.+XZVz+
HGjQo6.4wf0TfGHKgR8CC1ARRiYPdW0CFFDQ2DWDIdZTEhRoYrWtWdPbz8cR
Q6F1pFuGhixevaCsYi85h0rxKKvWjJtUpMoqQKqoshlVBwTzzZJ9ARbD+k8k
nsk0F58DME.gffLfWNvi5C9NFuz1bNfWYVZg9wTtgknRl0THkhcsDsqXzkqc
cSXvlmXUFP9ir102Bng9ffnMwQYAY4rG.vZ0JByy.elocCB.uDWvnf9ZBqty
dFO9EJHKXajWHH6QYtQ9fhDPbDXyidQQzvLNayikJDAJeBFMeoS1E9nrK7kf
cgcUYhwVxnHXgwEKg5fITm7qGBiYuitskhpgZ5NOQUx5brtNatBKrXKk1Aj.
2PBbCwefzI72Qyx71Rem3JlrjoYvz5APCCCwcVhaU2qy6wdmXFebLCMskrdW
0fFcFfNh9BqZ7NLyE9AFKUKKbhbW3.PpCj+CApFnX8ATe5Czzv3WzAuD4nR+
0Tn+hj8iIM9pW429Xkwd9Blxogv94iFC.kHwOlN5GkwKYcqjDm8d8zUYwEoa
nqfqndogusZWQNUfv6h1m0lvBVeLocmYJ8YZ5557zZeEvN5qv3zDurGPCusv
FAzU7C2fQOlJJSLy6Yp+8qKh7Co2GRi1l+nnxhHcQfuWtmr3vLOfbcXEDzle
gWjFhK7zLfB2iN5+vHVUT77l7Kv5WGg8xcKeQbBHtkDxSvshDYggfU44V+7V
cTIHhmv7cUB3XpPxD22NX1rzEOl5p1GRkprwQPnSy5BmgczlpdqRfenw9TWw
zfyWkwTen5vxqEYVC0qrf+T5hEuajd0XvXgkXhgvTrkrKml9SweUQLWaDkx+
NMvKblt50sOOi2E+bsewO3kwFwQJyphuvmCy5A54E9h2aYBGc2Ra3K7T12Vj
R+bvR24rE8W.+H7ssmNG2sYYRPzS+D7MdqY1da9CTZbGabJAUi3PxD5R9Dpz
ydnvXsIRHBxzTuXtFj+XZgNT+fpb7wAIfGVNEIHW8iN5e56s4myTJF2r1ppe
TjvOTo7nblG3WU2IZX7FNeWqrlDP4rOb+l33T+LsvlTNEVNNRygRGwMNlTXy
2DMsDfkHjY0HHj6KUFyXSCpuYlWRRijuowivaV9iXwKxYdcRAQxjrpSh4iVP
0yaVmpWJCO4LvTjJsW+ZcWB7WSrOMMpHnlGIXPkUIAqfamOKozLmfiUkciIL
Q5ZkTa0hHEQbL12BwX0aYxBOQ8aH4wXNIznfnl1eakMaDHdLqH22pmKzxNy+
.GGamYm8UcyrsoA9wQ7JQKNAO4phi69nbflMAifhHujNdXlzDqYomL48pWjs
1KkynJ6Q.UkYdbbX6rpetP5C4kYyrIGcPqXdbR+YlFr8QEO65XVl6T8tE4jc
eQjL26YxD42y88sMcdggk5qse8u5EEri4KSdfjEfLpyTNoHOlsIMNLrEdk47
bG43yjw2PeIvW5MtQSgAF4AIUBQyp4x9AaoY4sSK2aaV6TxxeS1n2Hoh0k5v
2mS2kDx8HqEALsifr7rGieIqjvJAslM.6m09l5zMM90J8iLntCGXmzTHaDZ7
YfkULFKmCVvFiooE2m3kNjeHFGWIYnJxXltUQGthNW0uOREcPr5WnYMgNpei
VUDhPpei10DZq9M5TQHFp9M5VSHwQNQ1KKmI6lTAMpgBbIpWppYHUSJdmTUy
OXiQs+2UM2vVU8ZOuvPUEaOm.oplUyGfDUUsZt.zRUcqlG.cUU2p4.Hnh5Fp
lCfvJpanZV.xTQcCUyCPNJpanZl.1PUcqlKfQppalM0W6Wc0pk9Z+zY2Rese
5bZqu1Ogts0W62PgQa809ID1VeseBQs0W6mPbaBMIKIVHNgGPGoUiXujY1ts
oW5NvBUuzY2jE6JECLL+QS63sGrocib5zY19lkri3n66b1sYUnqk+xP5mqQi
oMi3zXMa60eekSblKwnOpz7rmQbZMuPnlSOlg8gyAU8LVUmiwAS4iQyKC4eK
rH7o3kcinzW3hYWHhWMe9T3ENKEKdp3xZXOzblXxz3rwDupayw.D4LAAFbT.
ywZxBLzn.lKGX74CcxgK7nvEz.MY4XjQhLG4LXO4vk43vknFMIAl0HAFqPV3
LEs1aORfwdtElng02lQIT3OCeElXJmX9zBxSh8Jb3IgFYuwN8fmA.FrSO1Kt
Zfw87AC++coJcsvRutULDeJr5zb2UCJvyGJN3tMDb0vBZDXg87SInfOen3x0
V3Ka6TAKjQfEVoYOgzVLOenHnGQlNXwZLXgW4lRfwdLfwprlLA.iow352Wry
MX0IioCZFQG+hBfPlLXYLc7K7rcgX3NSEz.GCZ38xLg3LnwfEqSXRstDf4L6
8u256DXZ3FiW.8NObSBfMBeB5cd3lD.aDNHz27vMIv0n7U.MU4Xvw53P2yC2
j.Wi0EhESTfMN+I5Yd3lD.C9AAL9JNa5xOHk7ZLGkHao4FKqRTIWsLjhKiAX
nOntwt5.C+wXs+piKxGiMwqNtL0uOh86NBtbJkDSOd2WJ29+2TsAWK2Ckm49
8Rrl5yFzNAX3q3uyfVwe491DWes+k6u4B4Wsg8aty3DEejO80FaqTsz5Hgb+
MOFcie2AgeK4YTeHM.vw1.reujx2CH8rCAE0Td9c2xHObVk79R1Lnck1mlkG
DUuyZ+d8F.gS2f3KmZc.Nv5fau0gxDq1Fxk6TD49p8du77zf0E4xlrl6q5SZ
+etMLdsW3AaZyt1dn2tuxomcuNemhZtLNayx53Pv2R8xoJN1rJOToctc1MUc
nJLckh4NxSMsss9O1A8cHdRh4Gh8.9YSuB7AYYEz+0cQOlmmj80Uq7Cx1Tjw
2F6KeHNsX2xfzMd6V9P5p7Uaii8WD3S8VjGunHitPzXtf0Xtn58sBQrsr573
9PN5w8gLzyIgoxS0gb2vagPxMNtz1hwk9jdVuMDWVsGD0a.YX7mZSSUGpcGr
3zVTFCFJiHCVm4g1zx4BblMOvUlAbDI6X45G95BehyZWWqK1YctEOEYOxzU1
y73xdXYzp42BeGH7Y9qgvGOXTLYE+HGW7CICnOkcf7awuV6IF1SZyWvAGDOv
mvOr6nxjmjBhlSVAQ7.DDgF+VPTSaNqqj.nyjU9CM.4uxQp7a4u2K+grFxrr
MkLERlrhhviKJBsw+VTrOSgjV6Df86PfoZmxSVAQiAHHhI+VPrOAQwNAy.2y
0KlgwqcPCjnZPF1UASE2OpfFnhftFO1GAxn4.L11TGwuCh4wgZUrBzv8hg0U
hSQ4IBPlXCWhnKT5L.FpLJPh+HBHhE6VSSUKOqQoW2AvRkAEwOBo2qtxK93S
g+0W4UK5tFGGo05t3Kptq9TcwNCfcVp5h9UW0EaO.N5Gmp6.jcyda253Pvyq
8Rv9ZIX0ppCHrbofHRHCs9HhPuaVFF7Lc4Vufn5380yd6WayNInMhqV9KdD9
oLvs8tfSPmRImRLfatT1QpoLmGNcy5ViAYc7PxkEQFZOsrp8IVcL4R5la8hH
qX4je1KrfF+v6iEW6a.X8Prs612uCM1GmGZ7D6X7LQ2E0gsn14FHV55E1Fcm
erOObc0HvB1J6rGiSyOs5SEqpqRqHJHuNnHQts4pzqy0COdYh2lm.sFf1IpP
9eJBC+urWBsaAIn0.VLbYH3ChtRckBWpknXmJiPVtxPNrkvmAW7++4xD7LB0
oUsJx1ixdiNiPc5ujsW3yn8pzh60n8pu3Ao2S.ik7+oIsH3.rW.k83fv5Obr
esEKPtmtXQkGrWCwh9BjxeBB9DB7IrVFiB7raSvxsUo4jHJJyb3c8mw9eYNy
02fD4cOF6IuwuvKjIU3+75j4.1cI2EcGyksrXvm2481ZJHj2cEe+WE9kuBdJ
JZN3y+ye9SfOiT1imkrwKA740rVSZJfIgBBRSoaKB8R48wUjj08mXDqiNQqV
CN90pZnjDovYsW3hAa4n0OqKBOtXM7Ec4A96xrMbvmiC1scmtSIWqNkbQJi+
2xwqXJGOZYf.C5bQctlxsAJAIyPEWHhiSOlnFxWdWP4c7AwI+MHo5u2mC1uJ
OT8cxzXx8npajorNHxqHUNHEl3M+GgPM+lWeSVp7q6x3W82WWn6uQ9l3eHEn
wIdh2QC8JwHd30286P19FPQs3x2cUNVBDR8PELN5PENTvrygHfF+H.5Oh2yF
fHSBbEur.eBpEC11Ge73lnlx2eje7XZZFnbC.mPS+N7G8r8f4W+I3aAQIE4Y
LSU2c2b9eky2qxgY.GweyZHDYisAea2F.jSQP9KA4OBt6f1TohvbvpD1Xwyi
2sJxyOHE.ua1Itii6Y.8ctJVmdOlkip2TtkjMMQmsaDm1VGuSemz0Hc6l222
9BmkUKNcalZ4fjkylGfuPUqRi4rSYBX1eWE9IqRxlkVn3iGFKwxXKMvnOFO4
XczzK619rY2D4PJLOeOjlRr6OjOeRjiOUXXaxu5e8jF.Hke2ANkOdRBJZeHa
jX9vC1RIxe2AZguzh6OQK8bZVHMNNKuq0cnkD+i71QKIjVJI7.JILTGkDbHk
jkFJIjyPZ8r0AlLFRI4nCLYOfRRGPh+Ig3hTPvgvkL0gLNzcHkjFJHygn1B0
g3fowEqjfWrRBcwJIxEqjvWrRx7RURCpwCoC8VzExTDelQ3e61T2wtVL5MDs
IhN5tEMDidPcTRP7PKI3XKIxPKIzXKoAoMQzgr2frupC2hFBjP5nfH1Wn9au
TkCdPN9qilN7PfDVGVwwCw8KBVGhCCwRDQK8LMHLoEsV7kZ.ZDxEqjFhOkXs
zKn0kx0eS2KjKDCQdPGBdnypbjS8wAeWA4EwAeOAO3aI36+NB1+2PvC+9AJB
ZG88cC71+91+GoG5.4C
-----------end_max5_patcher-----------

Hello thanks for the clear message,

Yes and no.

Yes there is “some positional hysteresis protection” : when you send a source position message, it will trigger an actual update only if the new position differs from the previous one by a small epsilon.

This is to prevent “useless” updates (and CPU overload) when sending fast movements.

This is unrelated to VBAP, and unrelated to “sudden jumps between speakers”. This is a general mecanism used in spat.

In 99% of the use cases, this is not a problem. I understand you need perfect repeatability for your test purposes. Let me know if you fall into the problematic 1%, and we’ll figure out a workaround.

Best,
T.

Thanks for the quick response and clarification, Thibaut!

I think it should be fine as is, if not, I’ll come back to you later, thanks. I don’t anticipate having many very small positional updates (in fact, I’m not sure that well even have any continuous motion at all), I’m just a bit new-ish to spat coming from the ICST externals, so trying to wrap my head around all of the extra options and establish some best practices :sweat_smile: