undefined directions in AudioListener and PannerNode setOrientation()

Would it make sense to have setOrientation() throw an exception if
any the vectors are zero or otherwise linearly dependent?

It is not possible to determine appropriate panning parameters in
these situations, and the azimuth and elevation from the
calculation in [1] become undefined because an attempt is made to
normalize a zero vector.

If the orientation is not known, then I think it would be better
to retain the previous orientation than to suddenly change to some
default orientation.  Throwing an exception seems the appropriate
way to indicate that a setter method was not successful in
changing anything.

I don't think there is good reason to allow AudioListener's
setOrientation() to succeed in changing only one of the vectors if
the other is zero, nor even in changing both of them when they are
non-zero but linearly dependent.  Having only the up vector would
allow elevation to be calculated, but this is not useful for
panning as it is the right vector that is most important, and both
other independent vectors are required to specify right.

If a source is not directional, then coneInnerAngle is a better
way to specify that than setting the direction to zero, and
coneInnerAngle already defaults to omnidirectional.

[1] https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#Spatialization-panning-algorithm

Received on Sunday, 25 August 2013 23:38:23 UTC