Hi there, I’ve been playing with HOA Ambisonics again, using the SC-HOA UGens and also experimenting with the IEM Plugins (via VSTPlugin). I’ve been using the SC HOA encoder (because I like its spherical mode with distance effects) and the IEM
BinauralDecoder (because it uses less CPU than
HOADecLebedev26 and sounds better than
I’m a bit confused with the
HOATransRotateXYZ UGen. The documentation doesn’t make it clear the order of rotations (hopefully roll, pitch and then yaw). The axes being used seem to be X-right, Y-forward and Z-up, but if you look at the “Spatial Transformations” paper referenced in the documentation, it seems to show X-forward, Y-left and Z-up (since it refers to roll about the X axis)…
Can anyone shed some light on this? Even better would be if we could use a quaternion or something less ambiguous to specify the rotation, especially if you’re trying to work with a head tracker.
HOATransRotateXYZ arguments would make sense to me as the other (Y-forward) coordinate system, since it’s named RotateXYZ, and the order of arguments is pitch/roll/yaw (presumably corresponding to X/Y/Z). But in this case, the pitch values seem negated. I don’t know how to validate this – but by listening on headphones, I’ve found a positive yaw rotates things left (as expected), but a positive pitch/elevation seems to rotate below you rather than what I’d expect (above you). Also, once I start to combine non-zero pitches, rolls and yaws, things don’t seem to combine in the way I’d expect.
Is there anyone who’s been using these classes (or who wrote them!) who can help clarify things? I can always do three cumulative calls to
HOATransRotateXYZ to break apart the rotation ordering into pieces, but that seems like it might be a bit heavy for a large number of sources.
Thanks for any tips,