Click here to download the Blitz Browser!

WPT

wpt / webaudio / the-audio-api / the-pannernode-interface / ctor-panner.html

Spec: Web Audio API ↗

Runs: Chrome 155.0.8043.0 (wpt@b89af32bc, 2026-09-05) | Firefox 157.0a1 (wpt@b89af32bc, 2026-09-05) | Safari 251 preview (wpt@9b965429d, 2026-09-05) | Ladybird 1.0-d25dc (wpt@b89af32bc, 2026-09-05) | Servo Servo 0.6 (wpt@2c385f65e, 2026-09-04) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)

View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi

ChromeFirefoxSafariLadybirdServoBlitz
Total125/125114/125125/125125/125125/125NOT RUN
SubtestChromeFirefoxSafariLadybirdServoBlitz
# AUDIT TASK RUNNER STARTED.PASSPASSPASSPASSPASS
Executing "initialize"PASSPASSPASSPASSPASS
Executing "invalid constructor"PASSPASSPASSPASSPASS
Executing "default constructor"PASSFAILPASSPASSPASS
Executing "test AudioNodeOptions"PASSPASSPASSPASSPASS
Executing "constructor with options"PASSPASSPASSPASSPASS
Audit reportPASSPASSPASSPASSPASS
> [initialize] PASSPASSPASSPASSPASS
context = new OfflineAudioContext(...) did not throw an exception.PASSPASSPASSPASSPASS
< [initialize] All assertions passed. (total 1 assertions)PASSPASSPASSPASSPASS
> [invalid constructor] PASSPASSPASSPASSPASS
new PannerNode() threw TypeError: "Failed to construct 'PannerNode': 1 argument required, but only 0 present.".PASS
new PannerNode(1) threw TypeError: "Failed to construct 'PannerNode': parameter 1 is not of type 'BaseAudioContext'.".PASS
new PannerNode(context, 42) threw TypeError: "Failed to construct 'PannerNode': The provided value is not of type 'PannerOptions'.".PASS
< [invalid constructor] All assertions passed. (total 3 assertions)PASSPASSPASSPASSPASS
> [default constructor] PASSPASSPASSPASSPASS
node0 = new PannerNode(context) did not throw an exception.PASSPASSPASSPASSPASS
node0 instanceof PannerNode is equal to true.PASSPASSPASSPASSPASS
node0.numberOfInputs is equal to 1.PASSPASSPASSPASSPASS
node0.numberOfOutputs is equal to 1.PASSPASSPASSPASSPASS
node0.channelCount is equal to 2.PASSPASSPASSPASSPASS
node0.channelCountMode is equal to clamped-max.PASSPASSPASSPASSPASS
node0.channelInterpretation is equal to speakers.PASSPASSPASSPASSPASS
node0.panningModel is equal to equalpower.PASSPASSPASSPASSPASS
node0.positionX.value is equal to 0.PASSPASSPASSPASSPASS
node0.positionY.value is equal to 0.PASSPASSPASSPASSPASS
node0.positionZ.value is equal to 0.PASSPASSPASSPASSPASS
node0.orientationX.value is equal to 1.PASSPASSPASSPASSPASS
node0.orientationY.value is equal to 0.PASSPASSPASSPASSPASS
node0.orientationZ.value is equal to 0.PASSPASSPASSPASSPASS
node0.distanceModel is equal to inverse.PASSPASSPASSPASSPASS
node0.refDistance is equal to 1.PASSPASSPASSPASSPASS
node0.maxDistance is equal to 10000.PASSPASSPASSPASSPASS
node0.rolloffFactor is equal to 1.PASSPASSPASSPASSPASS
node0.coneInnerAngle is equal to 360.PASSPASSPASSPASSPASS
node0.coneOuterAngle is equal to 360.PASSPASSPASSPASSPASS
node0.coneOuterGain is equal to 0.PASSPASSPASSPASSPASS
context.listener.positionX.value is equal to 0.PASSPASSPASSPASS
context.listener.positionY.value is equal to 0.PASSPASSPASSPASS
context.listener.positionZ.value is equal to 0.PASSPASSPASSPASS
context.listener.forwardX.value is equal to 0.PASSPASSPASSPASS
context.listener.forwardY.value is equal to 0.PASSPASSPASSPASS
context.listener.forwardZ.value is equal to -1.PASSPASSPASSPASS
context.listener.upX.value is equal to 0.PASSPASSPASSPASS
context.listener.upY.value is equal to 1.PASSPASSPASSPASS
context.listener.upZ.value is equal to 0.PASSPASSPASSPASS
< [default constructor] All assertions passed. (total 30 assertions)PASSPASSPASSPASS
> [test AudioNodeOptions] PASSPASSPASSPASSPASS
node1 = new PannerNode(c, {"channelCount":1}) did not throw an exception.PASSPASSPASSPASSPASS
node1.channelCount is equal to 1.PASSPASSPASSPASSPASS
node2 = new PannerNode(c, {"channelCount":2}) did not throw an exception.PASSPASSPASSPASSPASS
node2.channelCount is equal to 2.PASSPASSPASSPASSPASS
new PannerNode(c, {"channelCount":0}) threw NotSupportedError: "Failed to construct 'PannerNode': The channelCount provided (0) is outside the range [1, 2].".PASS
node.channelCount = 0 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (0) is outside the range [1, 2].".PASS
node.channelCount after setting to 0 is equal to 2.PASSPASSPASSPASSPASS
new PannerNode(c, {"channelCount":3}) threw NotSupportedError: "Failed to construct 'PannerNode': The channelCount provided (3) is outside the range [1, 2].".PASS
node.channelCount = 3 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (3) is outside the range [1, 2].".PASS
node.channelCount after setting to 3 is equal to 2.PASSPASSPASSPASSPASS
new PannerNode(c, {"channelCount":99}) threw NotSupportedError: "Failed to construct 'PannerNode': The channelCount provided (99) is outside the range [1, 2].".PASS
node.channelCount = 99 threw NotSupportedError: "Failed to set the 'channelCount' property on 'AudioNode': The channelCount provided (99) is outside the range [1, 2].".PASS
node.channelCount after setting to 99 is equal to 2.PASSPASSPASSPASSPASS
node3 = new PannerNode(c, {"channelCountMode":"clamped-max"}) did not throw an exception.PASSPASSPASSPASSPASS
node3.channelCountMode is equal to clamped-max.PASSPASSPASSPASSPASS
node4 = new PannerNode(c, {"channelCountMode":"explicit"}) did not throw an exception.PASSPASSPASSPASSPASS
node4.channelCountMode is equal to explicit.PASSPASSPASSPASSPASS
new PannerNode(c, {"channelCountMode":"max"}) threw NotSupportedError: "Failed to construct 'PannerNode': Panner: 'max' is not allowed".PASS
node.channelCountMode = max threw NotSupportedError: "Failed to set the 'channelCountMode' property on 'AudioNode': Panner: 'max' is not allowed".PASS
node.channelCountMode after setting to max is equal to clamped-max.PASSPASSPASSPASSPASS
new PannerNode(c, " + JSON.stringify(options) + ") threw TypeError: "Failed to construct 'PannerNode': Failed to read the 'channelCountMode' property from 'AudioNodeOptions': The provided value 'foobar' is not a valid enum value of type ChannelCountMode.".PASS
node.channelCountMode = foobar did not throw an exception.PASSPASSPASSPASSPASS
node.channelCountMode after setting to foobar is equal to clamped-max.PASSPASSPASSPASSPASS
node5 = new PannerNode(c, {"channelInterpretation":"speakers"}) did not throw an exception.PASSPASSPASSPASSPASS
node5.channelInterpretation is equal to speakers.PASSPASSPASSPASSPASS
node6 = new PannerNode(c, {"channelInterpretation":"discrete"}) did not throw an exception.PASSPASSPASSPASSPASS
node6.channelInterpretation is equal to discrete.PASSPASSPASSPASSPASS
new PannerNode(c, {"channelInterpretation":"foobar"}) threw TypeError: "Failed to construct 'PannerNode': Failed to read the 'channelInterpretation' property from 'AudioNodeOptions': The provided value 'foobar' is not a valid enum value of type ChannelInterpretation.".PASS
new PannerNode(c, {"maxDistance":-1}) threw RangeError: "Failed to construct 'PannerNode': The maxDistance provided (-1) is less than the minimum bound (0).".PASS
node.maxDistance = -1 threw RangeError: "Failed to set the 'maxDistance' property on 'PannerNode': The maxDistance provided (-1) is less than the minimum bound (0).".PASS
node.maxDistance after setting to -1 is equal to 10000.PASSPASSPASSPASSPASS
node7 = new PannerNode(c, {"maxDistance":100}) did not throw an exception.PASSPASSPASSPASSPASS
node7.maxDistance is equal to 100.PASSPASSPASSPASSPASS
new PannerNode(c, {"rolloffFactor":-1}) threw RangeError: "Failed to construct 'PannerNode': The rolloffFactor provided (-1) is less than the minimum bound (0).".PASS
node.rolloffFactor = -1 threw RangeError: "Failed to set the 'rolloffFactor' property on 'PannerNode': The rolloffFactor provided (-1) is less than the minimum bound (0).".PASS
node.rolloffFactor after setting to -1 is equal to 1.PASSPASSPASSPASSPASS
node8 = new PannerNode(c, {"rolloffFactor":0}) did not throw an exception.PASSPASSPASSPASSPASS
node8.rolloffFactor is equal to 0.PASSPASSPASSPASSPASS
node8 = new PannerNode(c, {"rolloffFactor":0.5}) did not throw an exception.PASSPASSPASSPASSPASS
node8.rolloffFactor is equal to 0.5.PASSPASSPASSPASSPASS
node8 = new PannerNode(c, {"rolloffFactor":100}) did not throw an exception.PASSPASSPASSPASSPASS
node8.rolloffFactor is equal to 100.PASSPASSPASSPASSPASS
new PannerNode(c, {"coneOuterGain":-1}) threw InvalidStateError: "Failed to construct 'PannerNode': The coneOuterGain provided (-1) is outside the range [0, 1].".PASS
node.coneOuterGain = -1 threw InvalidStateError: "Failed to set the 'coneOuterGain' property on 'PannerNode': The coneOuterGain provided (-1) is outside the range [0, 1].".PASS
node.coneOuterGain after setting to -1 is equal to 0.PASSPASSPASSPASSPASS
new PannerNode(c, {"coneOuterGain":1.1}) threw InvalidStateError: "Failed to construct 'PannerNode': The coneOuterGain provided (1.1) is outside the range [0, 1].".PASS
node.coneOuterGain = 1.1 threw InvalidStateError: "Failed to set the 'coneOuterGain' property on 'PannerNode': The coneOuterGain provided (1.1) is outside the range [0, 1].".PASS
node.coneOuterGain after setting to 1.1 is equal to 0.PASSPASSPASSPASSPASS
node9 = new PannerNode(c, {"coneOuterGain":0}) did not throw an exception.PASSPASSPASSPASSPASS
node9.coneOuterGain is equal to 0.PASSPASSPASSPASSPASS
node9 = new PannerNode(c, {"coneOuterGain":0.5}) did not throw an exception.PASSPASSPASSPASSPASS
node9.coneOuterGain is equal to 0.5.PASSPASSPASSPASSPASS
node9 = new PannerNode(c, {"coneOuterGain":1}) did not throw an exception.PASSPASSPASSPASSPASS
node9.coneOuterGain is equal to 1.PASSPASSPASSPASSPASS
< [test AudioNodeOptions] All assertions passed. (total 54 assertions)PASSPASSPASSPASSPASS
> [constructor with options] PASSPASSPASSPASSPASS
node = new PannerNode(c, {"panningModel":"HRTF","positionX":1.4142135623730951,"positionY":2.8284271247461903,"positionZ":4.242640687119286,"orientationX":-1.4142135623730951,"orientationY":-2.8284271247461903,"orientationZ":-4.242640687119286,"distanceModel":"linear","refDistance":3.141592653589793,"maxDistance":6.283185307179586,"rolloffFactor":9.42477796076938,"coneInnerAngle":12.566370614359172,"coneOuterAngle":15.707963267948966,"coneOuterGain":0.3141592653589793}) did not throw an exception.PASSPASSPASSPASSPASS
node instanceof PannerNode is equal to true.PASSPASSPASSPASSPASS
node.panningModel is equal to HRTF.PASSPASSPASSPASSPASS
node.positionX.value is equal to 1.4142135381698608.PASSPASSPASSPASSPASS
node.positionY.value is equal to 2.8284270763397217.PASSPASSPASSPASSPASS
node.positionZ.value is equal to 4.242640495300293.PASSPASSPASSPASSPASS
node.orientationX.value is equal to -1.4142135381698608.PASSPASSPASSPASSPASS
node.orientationY.value is equal to -2.8284270763397217.PASSPASSPASSPASSPASS
node.orientationZ.value is equal to -4.242640495300293.PASSPASSPASSPASSPASS
node.distanceModel is equal to linear.PASSPASSPASSPASSPASS
node.refDistance is equal to 3.141592653589793.PASSPASSPASSPASSPASS
node.maxDistance is equal to 6.283185307179586.PASSPASSPASSPASSPASS
node.rolloffFactor is equal to 9.42477796076938.PASSPASSPASSPASSPASS
node.coneInnerAngle is equal to 12.566370614359172.PASSPASSPASSPASSPASS
node.coneOuterAngle is equal to 15.707963267948966.PASSPASSPASSPASSPASS
node.coneOuterGain is equal to 0.3141592653589793.PASSPASSPASSPASSPASS
node.channelCount is equal to 2.PASSPASSPASSPASSPASS
node.channelCountMode is equal to clamped-max.PASSPASSPASSPASSPASS
node.channelInterpretation is equal to speakers.PASSPASSPASSPASSPASS
< [constructor with options] All assertions passed. (total 19 assertions)PASSPASSPASSPASSPASS
# AUDIT TASK RUNNER FINISHED: 5 tasks ran successfully.PASSPASSPASSPASSPASS
new PannerNode() threw TypeError: "PannerNode constructor: At least 1 argument required, but only 0 passed".PASS
new PannerNode(1) threw TypeError: "PannerNode constructor: Argument 1 is not an object.".PASS
new PannerNode(context, 42) threw TypeError: "PannerNode constructor: Value can't be converted to a dictionary.".PASS
new PannerNode(c, {"channelCount":0}) threw NotSupportedError: "PannerNode constructor: Channel count (0) must be in the range [1, max supported channel count]".PASS
node.channelCount = 0 threw NotSupportedError: "AudioNode.channelCount setter: Channel count (0) must be in the range [1, max supported channel count]".PASS
new PannerNode(c, {"channelCount":3}) threw NotSupportedError: "PannerNode constructor: 3 is greater than 2".PASS
node.channelCount = 3 threw NotSupportedError: "AudioNode.channelCount setter: 3 is greater than 2".PASS
new PannerNode(c, {"channelCount":99}) threw NotSupportedError: "PannerNode constructor: 99 is greater than 2".PASS
node.channelCount = 99 threw NotSupportedError: "AudioNode.channelCount setter: 99 is greater than 2".PASS
new PannerNode(c, {"channelCountMode":"max"}) threw NotSupportedError: "PannerNode constructor: Cannot set channel count mode to "max"".PASS
node.channelCountMode = max threw NotSupportedError: "AudioNode.channelCountMode setter: Cannot set channel count mode to "max"".PASS
new PannerNode(c, " + JSON.stringify(options) + ") threw TypeError: "PannerNode constructor: 'foobar' (value of 'channelCountMode' member of AudioNodeOptions) is not a valid value for enumeration ChannelCountMode.".PASS
new PannerNode(c, {"channelInterpretation":"foobar"}) threw TypeError: "PannerNode constructor: 'foobar' (value of 'channelInterpretation' member of AudioNodeOptions) is not a valid value for enumeration ChannelInterpretation.".PASS
new PannerNode(c, {"maxDistance":-1}) threw RangeError: "PannerNode constructor: The maxDistance value passed to PannerNode must be positive.".PASS
node.maxDistance = -1 threw RangeError: "PannerNode.maxDistance setter: The maxDistance value passed to PannerNode must be positive.".PASS
new PannerNode(c, {"rolloffFactor":-1}) threw RangeError: "PannerNode constructor: The rolloffFactor value passed to PannerNode must not be negative.".PASS
node.rolloffFactor = -1 threw RangeError: "PannerNode.rolloffFactor setter: The rolloffFactor value passed to PannerNode must not be negative.".PASS
new PannerNode(c, {"coneOuterGain":-1}) threw InvalidStateError: "PannerNode constructor: -1 is not in the range [0, 1]".PASS
node.coneOuterGain = -1 threw InvalidStateError: "PannerNode.coneOuterGain setter: -1 is not in the range [0, 1]".PASS
new PannerNode(c, {"coneOuterGain":1.1}) threw InvalidStateError: "PannerNode constructor: 1.1 is not in the range [0, 1]".PASS
node.coneOuterGain = 1.1 threw InvalidStateError: "PannerNode.coneOuterGain setter: 1.1 is not in the range [0, 1]".PASS
new PannerNode() threw TypeError: "Not enough arguments".PASS
new PannerNode(1) threw TypeError: "Argument 1 ('context') to the PannerNode constructor must be an instance of BaseAudioContext".PASS
new PannerNode(context, 42) threw TypeError: "Type error".PASS
new PannerNode(c, {"channelCount":0}) threw NotSupportedError: "Channel count cannot be 0".PASS
node.channelCount = 0 threw NotSupportedError: "Channel count cannot be 0".PASS
new PannerNode(c, {"channelCount":3}) threw NotSupportedError: "PannerNode's channelCount cannot be greater than 2".PASS
node.channelCount = 3 threw NotSupportedError: "PannerNode's channelCount cannot be greater than 2".PASS
new PannerNode(c, {"channelCount":99}) threw NotSupportedError: "PannerNode's channelCount cannot be greater than 2".PASS
node.channelCount = 99 threw NotSupportedError: "PannerNode's channelCount cannot be greater than 2".PASS
new PannerNode(c, {"channelCountMode":"max"}) threw NotSupportedError: "PannerNode's channelCountMode cannot be max".PASS
node.channelCountMode = max threw NotSupportedError: "PannerNode's channelCountMode cannot be max".PASS
new PannerNode(c, " + JSON.stringify(options) + ") threw TypeError: "Type error".PASS
new PannerNode(c, {"channelInterpretation":"foobar"}) threw TypeError: "Type error".PASS
new PannerNode(c, {"maxDistance":-1}) threw RangeError: "maxDistance cannot be set to a non-positive value".PASS
node.maxDistance = -1 threw RangeError: "maxDistance cannot be set to a non-positive value".PASS
new PannerNode(c, {"rolloffFactor":-1}) threw RangeError: "rolloffFactor cannot be set to a negative value".PASS
node.rolloffFactor = -1 threw RangeError: "rolloffFactor cannot be set to a negative value".PASS
new PannerNode(c, {"coneOuterGain":-1}) threw InvalidStateError: "coneOuterGain must be in [0, 1]".PASS
node.coneOuterGain = -1 threw InvalidStateError: "coneOuterGain must be in [0, 1]".PASS
new PannerNode(c, {"coneOuterGain":1.1}) threw InvalidStateError: "coneOuterGain must be in [0, 1]".PASS
node.coneOuterGain = 1.1 threw InvalidStateError: "coneOuterGain must be in [0, 1]".PASS
new PannerNode() threw TypeError: "Not enough arguments to "PannerNode.constructor".".PASS
new PannerNode(1) threw TypeError: "Value is not an object.".PASS
new PannerNode(context, 42) threw TypeError: "Value is not an object.".PASS
new PannerNode(c, {"channelCount":0}) threw NotSupportedError: "The operation is not supported.".PASS
node.channelCount = 0 threw NotSupportedError: "The operation is not supported.".PASS
new PannerNode(c, {"channelCount":3}) threw NotSupportedError: "The operation is not supported.".PASS
node.channelCount = 3 threw NotSupportedError: "The operation is not supported.".PASS
new PannerNode(c, {"channelCount":99}) threw NotSupportedError: "The operation is not supported.".PASS
node.channelCount = 99 threw NotSupportedError: "The operation is not supported.".PASS
new PannerNode(c, {"channelCountMode":"max"}) threw NotSupportedError: "The operation is not supported.".PASS
node.channelCountMode = max threw NotSupportedError: "The operation is not supported.".PASS
new PannerNode(c, " + JSON.stringify(options) + ") threw TypeError: "'foobar' is not a valid enum value for enumeration 'ChannelCountMode'.".PASS
new PannerNode(c, {"channelInterpretation":"foobar"}) threw TypeError: "'foobar' is not a valid enum value for enumeration 'ChannelInterpretation'.".PASS
new PannerNode(c, {"maxDistance":-1}) threw RangeError: "maxDistance should be positive".PASS
node.maxDistance = -1 threw RangeError: "value should be positive".PASS
new PannerNode(c, {"rolloffFactor":-1}) threw RangeError: "rolloffFactor should be non-negative".PASS
node.rolloffFactor = -1 threw RangeError: "value should be non-negative".PASS
new PannerNode(c, {"coneOuterGain":-1}) threw InvalidStateError: "The object is in an invalid state.".PASS
node.coneOuterGain = -1 threw InvalidStateError: "The object is in an invalid state.".PASS
new PannerNode(c, {"coneOuterGain":1.1}) threw InvalidStateError: "The object is in an invalid state.".PASS
node.coneOuterGain = 1.1 threw InvalidStateError: "The object is in an invalid state.".PASS
new PannerNode() threw TypeError: "PannerNode() needs one argument".PASS
new PannerNode(1) threw TypeError: "Not an object of type BaseAudioContext".PASS
new PannerNode(context, 42) threw TypeError: "Not an object of type PannerOptions".PASS
new PannerNode(c, {"channelCount":0}) threw NotSupportedError: "Invalid channel count".PASS
node.channelCount = 0 threw NotSupportedError: "Invalid channel count".PASS
new PannerNode(c, {"channelCount":3}) threw NotSupportedError: "PannerNode does not support channel count greater than 2".PASS
node.channelCount = 3 threw NotSupportedError: "PannerNode does not support channel count greater than 2".PASS
new PannerNode(c, {"channelCount":99}) threw NotSupportedError: "PannerNode does not support channel count greater than 2".PASS
node.channelCount = 99 threw NotSupportedError: "PannerNode does not support channel count greater than 2".PASS
new PannerNode(c, {"channelCountMode":"max"}) threw NotSupportedError: "PannerNode does not support 'max' as channelCountMode.".PASS
node.channelCountMode = max threw NotSupportedError: "PannerNode does not support 'max' as channelCountMode.".PASS
new PannerNode(c, " + JSON.stringify(options) + ") threw TypeError: "Invalid value 'foobar' for enumeration type 'ChannelCountMode'".PASS
new PannerNode(c, {"channelInterpretation":"foobar"}) threw TypeError: "Invalid value 'foobar' for enumeration type 'ChannelInterpretation'".PASS
new PannerNode(c, {"maxDistance":-1}) threw RangeError: "maxDistance must be positive".PASS
node.maxDistance = -1 threw RangeError: "maxDistance must be positive".PASS
new PannerNode(c, {"rolloffFactor":-1}) threw RangeError: "rolloffFactor cannot be negative".PASS
node.rolloffFactor = -1 threw RangeError: "rolloffFactor cannot be negative".PASS
new PannerNode(c, {"coneOuterGain":-1}) threw InvalidStateError: "coneOuterGain must be in the range of [0, 1]".PASS
node.coneOuterGain = -1 threw InvalidStateError: "coneOuterGain must be in the range of [0, 1]".PASS
new PannerNode(c, {"coneOuterGain":1.1}) threw InvalidStateError: "coneOuterGain must be in the range of [0, 1]".PASS
node.coneOuterGain = 1.1 threw InvalidStateError: "coneOuterGain must be in the range of [0, 1]".PASS