Title: [265980] trunk
Revision
265980
Author
cdu...@apple.com
Date
2020-08-20 16:14:05 -0700 (Thu, 20 Aug 2020)

Log Message

AudioParam.automationRate attribute is missing
https://bugs.webkit.org/show_bug.cgi?id=215710

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline WPT tests now that more checks are passing.

* web-platform-tests/webaudio/idlharness.https.window-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/suspend-after-construct-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-connections-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-connections-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-dynamics-compressor-connections-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-connections-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/osc-basic-waveform-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-rolloff-clamping-expected.txt:
* web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering-expected.txt:

Source/WebCore:

Add initial support for AudioParam.automationRate:
- https://www.w3.org/TR/webaudio/#dom-audioparam-automationrate

No new tests, rebaselined existing tests.

* Modules/webaudio/AudioBufferSourceNode.cpp:
(WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
* Modules/webaudio/AudioListener.cpp:
(WebCore::AudioListener::AudioListener):
* Modules/webaudio/AudioParam.cpp:
(WebCore::AudioParam::AudioParam):
(WebCore::AudioParam::setAutomationRate):
(WebCore::AudioParam::calculateSampleAccurateValues):
* Modules/webaudio/AudioParam.h:
* Modules/webaudio/AudioParam.idl:
* Modules/webaudio/BiquadDSPKernel.cpp:
(WebCore::BiquadDSPKernel::updateCoefficientsIfNecessary):
* Modules/webaudio/BiquadProcessor.cpp:
(WebCore::BiquadProcessor::BiquadProcessor):
* Modules/webaudio/ConstantSourceNode.cpp:
(WebCore::ConstantSourceNode::ConstantSourceNode):
(WebCore::ConstantSourceNode::process):
* Modules/webaudio/DelayDSPKernel.cpp:
(WebCore::DelayDSPKernel::process):
* Modules/webaudio/DelayProcessor.cpp:
(WebCore::DelayProcessor::DelayProcessor):
* Modules/webaudio/DynamicsCompressorNode.cpp:
(WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
* Modules/webaudio/GainNode.cpp:
(WebCore::GainNode::GainNode):
(WebCore::GainNode::process):
* Modules/webaudio/OscillatorNode.cpp:
(WebCore::OscillatorNode::OscillatorNode):
(WebCore::OscillatorNode::calculateSampleAccuratePhaseIncrements):
* Modules/webaudio/PannerNode.cpp:
(WebCore::PannerNode::PannerNode):
(WebCore::PannerNode::distanceConeGain):
* Modules/webaudio/PannerNode.h:
* Modules/webaudio/StereoPannerNode.cpp:
(WebCore::StereoPannerNode::StereoPannerNode):
(WebCore::StereoPannerNode::process):
* Modules/webaudio/WebKitAudioBufferSourceNode.h:
* Modules/webaudio/WebKitAudioPannerNode.cpp:
(WebCore::WebKitAudioPannerNode::WebKitAudioPannerNode):
(WebCore::WebKitAudioPannerNode::distanceConeGain):
* Modules/webaudio/WebKitAudioPannerNode.h:
* Modules/webaudio/WebKitDynamicsCompressorNode.h:

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-08-20 23:14:05 UTC (rev 265980)
@@ -1,3 +1,31 @@
+2020-08-20  Chris Dumez  <cdu...@apple.com>
+
+        AudioParam.automationRate attribute is missing
+        https://bugs.webkit.org/show_bug.cgi?id=215710
+
+        Reviewed by Darin Adler.
+
+        Rebaseline WPT tests now that more checks are passing.
+
+        * web-platform-tests/webaudio/idlharness.https.window-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/suspend-after-construct-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-connections-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-connections-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-dynamics-compressor-connections-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-connections-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-mediaelementaudiosourcenode-interface/mediaElementAudioSourceToScriptProcessorTest-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/osc-basic-waveform-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/panner-rolloff-clamping-expected.txt:
+        * web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering-expected.txt:
+
 2020-08-20  Rob Buis  <rb...@igalia.com>
 
         XMLHttpRequest.open should use USVString

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/idlharness.https.window-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/idlharness.https.window-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/idlharness.https.window-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -222,7 +222,7 @@
 PASS AudioParam interface: existence and properties of interface prototype object's "constructor" property 
 PASS AudioParam interface: existence and properties of interface prototype object's @@unscopables property 
 PASS AudioParam interface: attribute value 
-FAIL AudioParam interface: attribute automationRate assert_true: The prototype object must have a property "automationRate" expected true got false
+PASS AudioParam interface: attribute automationRate 
 PASS AudioParam interface: attribute defaultValue 
 PASS AudioParam interface: attribute minValue 
 PASS AudioParam interface: attribute maxValue 
@@ -236,7 +236,7 @@
 PASS AudioParam must be primary interface of new AudioBufferSourceNode(context).playbackRate 
 PASS Stringification of new AudioBufferSourceNode(context).playbackRate 
 PASS AudioParam interface: new AudioBufferSourceNode(context).playbackRate must inherit property "value" with the proper type 
-FAIL AudioParam interface: new AudioBufferSourceNode(context).playbackRate must inherit property "automationRate" with the proper type assert_inherits: property "automationRate" not found in prototype chain
+PASS AudioParam interface: new AudioBufferSourceNode(context).playbackRate must inherit property "automationRate" with the proper type 
 PASS AudioParam interface: new AudioBufferSourceNode(context).playbackRate must inherit property "defaultValue" with the proper type 
 PASS AudioParam interface: new AudioBufferSourceNode(context).playbackRate must inherit property "minValue" with the proper type 
 PASS AudioParam interface: new AudioBufferSourceNode(context).playbackRate must inherit property "maxValue" with the proper type 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/suspend-after-construct-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/suspend-after-construct-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiocontext-interface/suspend-after-construct-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -1,5 +1,5 @@
 
-FAIL State change counting assert_less_than_equal: ctx 1 state change count. expected a number less than or equal to 1 but got 2
+PASS State change counting 
 PASS Iteration 1 
 PASS Iteration 2 
 PASS Iteration 3 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -12,113 +12,113 @@
 PASS Executing "AudioListener" 
 PASS Audit report 
 PASS > [AudioBufferSourceNode]  
-FAIL X Default AudioBufferSourceNode.detune.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set AudioBufferSourceNode.detune.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL X Default AudioBufferSourceNode.playbackRate.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set AudioBufferSourceNode.playbackRate.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL < [AudioBufferSourceNode] 4 out of 4 assertions were failed. assert_true: expected true got false
+PASS   Default AudioBufferSourceNode.detune.automationRate is equal to k-rate. 
+PASS   Set AudioBufferSourceNode.detune.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS   Default AudioBufferSourceNode.playbackRate.automationRate is equal to k-rate. 
+PASS   Set AudioBufferSourceNode.playbackRate.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS < [AudioBufferSourceNode] All assertions passed. (total 4 assertions) 
 PASS > [BiquadFilterNode]  
-FAIL X Default BiquadFilterNode.frequency.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default BiquadFilterNode.frequency.automationRate is equal to a-rate. 
 PASS   Set BiquadFilterNode.frequency.automationRate to "k-rate" did not throw an exception. 
 PASS   BiquadFilterNode.frequency.automationRate is equal to k-rate. 
-FAIL X Default BiquadFilterNode.detune.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default BiquadFilterNode.detune.automationRate is equal to a-rate. 
 PASS   Set BiquadFilterNode.detune.automationRate to "k-rate" did not throw an exception. 
 PASS   BiquadFilterNode.detune.automationRate is equal to k-rate. 
-FAIL X Default BiquadFilterNode.Q.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default BiquadFilterNode.Q.automationRate is equal to a-rate. 
 PASS   Set BiquadFilterNode.Q.automationRate to "k-rate" did not throw an exception. 
 PASS   BiquadFilterNode.Q.automationRate is equal to k-rate. 
-FAIL X Default BiquadFilterNode.gain.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default BiquadFilterNode.gain.automationRate is equal to a-rate. 
 PASS   Set BiquadFilterNode.gain.automationRate to "k-rate" did not throw an exception. 
 PASS   BiquadFilterNode.gain.automationRate is equal to k-rate. 
-FAIL < [BiquadFilterNode] 4 out of 12 assertions were failed. assert_true: expected true got false
+PASS < [BiquadFilterNode] All assertions passed. (total 12 assertions) 
 PASS > [ConstantSourceNode]  
-FAIL X Default ConstantSourceNode.offset.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default ConstantSourceNode.offset.automationRate is equal to a-rate. 
 PASS   Set ConstantSourceNode.offset.automationRate to "k-rate" did not throw an exception. 
 PASS   ConstantSourceNode.offset.automationRate is equal to k-rate. 
-FAIL < [ConstantSourceNode] 1 out of 3 assertions were failed. assert_true: expected true got false
+PASS < [ConstantSourceNode] All assertions passed. (total 3 assertions) 
 PASS > [DelayNode]  
-FAIL X Default DelayNode.delayTime.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default DelayNode.delayTime.automationRate is equal to a-rate. 
 PASS   Set DelayNode.delayTime.automationRate to "k-rate" did not throw an exception. 
 PASS   DelayNode.delayTime.automationRate is equal to k-rate. 
-FAIL < [DelayNode] 1 out of 3 assertions were failed. assert_true: expected true got false
+PASS < [DelayNode] All assertions passed. (total 3 assertions) 
 PASS > [DynamicsCompressorNode]  
-FAIL X Default DynamicsCompressorNode.threshold.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set DynamicsCompressorNode.threshold.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL X Default DynamicsCompressorNode.knee.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set DynamicsCompressorNode.knee.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL X Default DynamicsCompressorNode.ratio.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set DynamicsCompressorNode.ratio.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL X Default DynamicsCompressorNode.attack.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set DynamicsCompressorNode.attack.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL X Default DynamicsCompressorNode.release.automationRate is not equal to k-rate. Got undefined. assert_true: expected true got false
-FAIL X Set DynamicsCompressorNode.release.automationRate to "a-rate" did not throw an exception. assert_true: expected true got false
-FAIL < [DynamicsCompressorNode] 10 out of 10 assertions were failed. assert_true: expected true got false
+PASS   Default DynamicsCompressorNode.threshold.automationRate is equal to k-rate. 
+PASS   Set DynamicsCompressorNode.threshold.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS   Default DynamicsCompressorNode.knee.automationRate is equal to k-rate. 
+PASS   Set DynamicsCompressorNode.knee.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS   Default DynamicsCompressorNode.ratio.automationRate is equal to k-rate. 
+PASS   Set DynamicsCompressorNode.ratio.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS   Default DynamicsCompressorNode.attack.automationRate is equal to k-rate. 
+PASS   Set DynamicsCompressorNode.attack.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS   Default DynamicsCompressorNode.release.automationRate is equal to k-rate. 
+PASS   Set DynamicsCompressorNode.release.automationRate to "a-rate" threw InvalidStateError: "automationRate cannot be changed for this node". 
+PASS < [DynamicsCompressorNode] All assertions passed. (total 10 assertions) 
 PASS > [GainNode]  
-FAIL X Default GainNode.gain.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default GainNode.gain.automationRate is equal to a-rate. 
 PASS   Set GainNode.gain.automationRate to "k-rate" did not throw an exception. 
 PASS   GainNode.gain.automationRate is equal to k-rate. 
-FAIL < [GainNode] 1 out of 3 assertions were failed. assert_true: expected true got false
+PASS < [GainNode] All assertions passed. (total 3 assertions) 
 PASS > [OscillatorNode]  
-FAIL X Default OscillatorNode.frequency.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default OscillatorNode.frequency.automationRate is equal to a-rate. 
 PASS   Set OscillatorNode.frequency.automationRate to "k-rate" did not throw an exception. 
 PASS   OscillatorNode.frequency.automationRate is equal to k-rate. 
-FAIL X Default OscillatorNode.detune.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default OscillatorNode.detune.automationRate is equal to a-rate. 
 PASS   Set OscillatorNode.detune.automationRate to "k-rate" did not throw an exception. 
 PASS   OscillatorNode.detune.automationRate is equal to k-rate. 
-FAIL < [OscillatorNode] 2 out of 6 assertions were failed. assert_true: expected true got false
+PASS < [OscillatorNode] All assertions passed. (total 6 assertions) 
 PASS > [PannerNode]  
-FAIL X Default PannerNode.positionX.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default PannerNode.positionX.automationRate is equal to a-rate. 
 PASS   Set PannerNode.positionX.automationRate to "k-rate" did not throw an exception. 
 PASS   PannerNode.positionX.automationRate is equal to k-rate. 
-FAIL X Default PannerNode.positionY.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default PannerNode.positionY.automationRate is equal to a-rate. 
 PASS   Set PannerNode.positionY.automationRate to "k-rate" did not throw an exception. 
 PASS   PannerNode.positionY.automationRate is equal to k-rate. 
-FAIL X Default PannerNode.positionZ.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default PannerNode.positionZ.automationRate is equal to a-rate. 
 PASS   Set PannerNode.positionZ.automationRate to "k-rate" did not throw an exception. 
 PASS   PannerNode.positionZ.automationRate is equal to k-rate. 
-FAIL X Default PannerNode.orientationX.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default PannerNode.orientationX.automationRate is equal to a-rate. 
 PASS   Set PannerNode.orientationX.automationRate to "k-rate" did not throw an exception. 
 PASS   PannerNode.orientationX.automationRate is equal to k-rate. 
-FAIL X Default PannerNode.orientationY.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default PannerNode.orientationY.automationRate is equal to a-rate. 
 PASS   Set PannerNode.orientationY.automationRate to "k-rate" did not throw an exception. 
 PASS   PannerNode.orientationY.automationRate is equal to k-rate. 
-FAIL X Default PannerNode.orientationZ.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default PannerNode.orientationZ.automationRate is equal to a-rate. 
 PASS   Set PannerNode.orientationZ.automationRate to "k-rate" did not throw an exception. 
 PASS   PannerNode.orientationZ.automationRate is equal to k-rate. 
-FAIL < [PannerNode] 6 out of 18 assertions were failed. assert_true: expected true got false
+PASS < [PannerNode] All assertions passed. (total 18 assertions) 
 PASS > [StereoPannerNode]  
-FAIL X Default StereoPannerNode.pan.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default StereoPannerNode.pan.automationRate is equal to a-rate. 
 PASS   Set StereoPannerNode.pan.automationRate to "k-rate" did not throw an exception. 
 PASS   StereoPannerNode.pan.automationRate is equal to k-rate. 
-FAIL < [StereoPannerNode] 1 out of 3 assertions were failed. assert_true: expected true got false
+PASS < [StereoPannerNode] All assertions passed. (total 3 assertions) 
 PASS > [AudioListener]  
-FAIL X Default AudioListener.positionX.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.positionX.automationRate is equal to a-rate. 
 PASS   Set AudioListener.positionX.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.positionX.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.positionY.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.positionY.automationRate is equal to a-rate. 
 PASS   Set AudioListener.positionY.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.positionY.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.positionZ.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.positionZ.automationRate is equal to a-rate. 
 PASS   Set AudioListener.positionZ.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.positionZ.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.forwardX.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.forwardX.automationRate is equal to a-rate. 
 PASS   Set AudioListener.forwardX.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.forwardX.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.forwardY.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.forwardY.automationRate is equal to a-rate. 
 PASS   Set AudioListener.forwardY.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.forwardY.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.forwardZ.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.forwardZ.automationRate is equal to a-rate. 
 PASS   Set AudioListener.forwardZ.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.forwardZ.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.upX.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.upX.automationRate is equal to a-rate. 
 PASS   Set AudioListener.upX.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.upX.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.upY.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.upY.automationRate is equal to a-rate. 
 PASS   Set AudioListener.upY.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.upY.automationRate is equal to k-rate. 
-FAIL X Default AudioListener.upZ.automationRate is not equal to a-rate. Got undefined. assert_true: expected true got false
+PASS   Default AudioListener.upZ.automationRate is equal to a-rate. 
 PASS   Set AudioListener.upZ.automationRate to "k-rate" did not throw an exception. 
 PASS   AudioListener.upZ.automationRate is equal to k-rate. 
-FAIL < [AudioListener] 9 out of 27 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 10 out of 10 tasks were failed. assert_true: expected true got false
+PASS < [AudioListener] All assertions passed. (total 27 assertions) 
+PASS # AUDIT TASK RUNNER FINISHED: 10 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-biquad-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -17,8 +17,8 @@
 PASS   All k-rate params: a-rate node:frequency.linearRampToValueAtTime(0,1) did not throw an exception. 
 PASS   All k-rate params: Output of k-rate BiquadFilterNode is identical to the array [0,0.005672737956047058,0.031761422753334045,0.09152894467115402,0.18822039663791656,0.3152911961078644,0.4580239951610565,0.5962369441986084,0.7076709866523743,0.7715816497802734,0.7720555663108826,0.700621485710144,0.5578286647796631,0.35359877347946167,0.10631752759218216,-0.15921232104301453...]. 
 PASS   All k-rate params: Output of a-rate BiquadFilterNode is identical to the array [0,0.005672737956047058,0.031761422753334045,0.09152894467115402,0.18822039663791656,0.3152911961078644,0.4580239951610565,0.5962369441986084,0.7076709866523743,0.7715816497802734,0.7720555663108826,0.700621485710144,0.5578286647796631,0.35359877347946167,0.10631752759218216,-0.15921232104301453...]. 
-FAIL X All k-rate params: Difference between a-rate and k-rate BiquadFilterNode should have contain at least one value different from 0. assert_true: expected true got false
-FAIL < [Biquad k-rate AudioParams (all)] 1 out of 11 assertions were failed. assert_true: expected true got false
+PASS   All k-rate params: Difference between a-rate and k-rate BiquadFilterNode is not constantly 0 (contains 7872 different values). 
+PASS < [Biquad k-rate AudioParams (all)] All assertions passed. (total 11 assertions) 
 PASS > [Biquad k-rate Q]  
 PASS   k-rate Q: Setting Q.automationRate to "k-rate" is equal to k-rate. 
 PASS   k-rate Q: k-rate node: Q.setValueAtTime(1,0) did not throw an exception. 
@@ -59,5 +59,5 @@
 PASS   k-rate gain: Output of a-rate BiquadFilterNode is identical to the array [0,0.39067500829696655,0.8280423879623413,1.237112283706665,1.5446851253509521,1.6899598836898804,1.6333717107772827,1.3625415563583374,0.8945985436439514,0.27460339665412903,-0.42972034215927124,-1.1362687349319458,-1.758807897567749,-2.217907190322876,-2.4511806964874268,-2.4215519428253174...]. 
 FAIL X k-rate gain: Difference between a-rate and k-rate BiquadFilterNode should have contain at least one value different from 0. assert_true: expected true got false
 FAIL < [Biquad k-rate gain] 1 out of 8 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 5 out of 5 tasks were failed. assert_true: expected true got false
+FAIL # AUDIT TASK RUNNER FINISHED: 4 out of 5 tasks were failed. assert_true: expected true got false
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-connections-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-connections-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-connections-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -14,62 +14,14 @@
 PASS   gain[896:1024] contains only the constant 2. 
 PASS < [Gain] All assertions passed. (total 8 assertions) 
 PASS > [StereoPanner] k-rate StereoPannerNode.pan 
-FAIL X pan[0:128]: Expected 0.5 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.500766396522522
-	[2]	0.5015316009521484
-	[3]	0.5022956728935242
-	[4]	0.5030585527420044
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[128:256]: Expected 0.5879377722740173 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.588539719581604
-	[2]	0.5891402363777161
-	[3]	0.5897394418716431
-	[4]	0.5903372168540955
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[256:384]: Expected 0.6532814502716064 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.653695821762085
-	[2]	0.6541085839271545
-	[3]	0.65451979637146
-	[4]	0.654929518699646
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[384:512]: Expected 0.6935199499130249 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.6937307119369507
-	[2]	0.6939398646354675
-	[3]	0.6941474080085754
-	[4]	0.6943533420562744
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[512:640]: Expected 0.7071067690849304 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.7071059346199036
-	[2]	0.707103431224823
-	[3]	0.7070993185043335
-	[4]	0.7070934772491455
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[640:768]: Expected 0.6935199499130249 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.6933075189590454
-	[2]	0.6930934190750122
-	[3]	0.6928777694702148
-	[4]	0.6926604509353638
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[768:896]: Expected 0.6532814502716064 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.6528656482696533
-	[2]	0.6524482369422913
-	[3]	0.652029275894165
-	[4]	0.6516088247299194
-	...and 123 more errors. assert_true: expected true got false
-FAIL X pan[896:1024]: Expected 0.5879377722740173 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.5873345136642456
-	[2]	0.5867298245429993
-	[3]	0.5861237049102783
-	[4]	0.5855162739753723
-	...and 123 more errors. assert_true: expected true got false
-FAIL < [StereoPanner] 8 out of 8 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 2 tasks were failed. assert_true: expected true got false
+PASS   pan[0:128] contains only the constant 0.5. 
+PASS   pan[128:256] contains only the constant 0.5879377722740173. 
+PASS   pan[256:384] contains only the constant 0.6532814502716064. 
+PASS   pan[384:512] contains only the constant 0.6935199499130249. 
+PASS   pan[512:640] contains only the constant 0.7071067690849304. 
+PASS   pan[640:768] contains only the constant 0.6935199499130249. 
+PASS   pan[768:896] contains only the constant 0.6532814502716064. 
+PASS   pan[896:1024] contains only the constant 0.5879377722740173. 
+PASS < [StereoPanner] All assertions passed. (total 8 assertions) 
+PASS # AUDIT TASK RUNNER FINISHED: 2 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-constant-source-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -10,96 +10,24 @@
 PASS   k-rate offset: k-rate node: offset.linearRampToValueAtTime(10,0.064) did not throw an exception. 
 PASS   k-rate offset: a-rate node:offset.setValueAtTime(0,0) did not throw an exception. 
 PASS   k-rate offset: a-rate node:offset.linearRampToValueAtTime(10,0.064) did not throw an exception. 
-PASS   k-rate offset: Output of k-rate ConstantSourceNode is identical to the array [0,0.01953125,0.0390625,0.05859375,0.078125,0.09765625,0.1171875,0.13671875,0.15625,0.17578125,0.1953125,0.21484375,0.234375,0.25390625,0.2734375,0.29296875...]. 
+PASS   k-rate offset: Output of k-rate ConstantSourceNode is identical to the array [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...]. 
 PASS   k-rate offset: Output of a-rate ConstantSourceNode is identical to the array [0,0.01953125,0.0390625,0.05859375,0.078125,0.09765625,0.1171875,0.13671875,0.15625,0.17578125,0.1953125,0.21484375,0.234375,0.25390625,0.2734375,0.29296875...]. 
-FAIL X k-rate offset: Difference between a-rate and k-rate ConstantSourceNode should have contain at least one value different from 0. assert_true: expected true got false
-FAIL X k-rate offset k-rate output [0: 127]: Expected 0 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	0.01953125
-	[2]	0.0390625
-	[3]	0.05859375
-	[4]	0.078125
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate offset k-rate output [128: 255]: Expected 2.5 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	2.51953125
-	[2]	2.5390625
-	[3]	2.55859375
-	[4]	2.578125
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate offset k-rate output [256: 383]: Expected 5 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	5.01953125
-	[2]	5.0390625
-	[3]	5.05859375
-	[4]	5.078125
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate offset k-rate output [384: 511]: Expected 7.5 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	7.51953125
-	[2]	7.5390625
-	[3]	7.55859375
-	[4]	7.578125
-	...and 123 more errors. assert_true: expected true got false
-FAIL < [ConstantSource k-rate offset] 5 out of 12 assertions were failed. assert_true: expected true got false
+PASS   k-rate offset: Difference between a-rate and k-rate ConstantSourceNode is not constantly 0 (contains 508 different values). 
+PASS   k-rate offset k-rate output [0: 127] contains only the constant 0. 
+PASS   k-rate offset k-rate output [128: 255] contains only the constant 2.5. 
+PASS   k-rate offset k-rate output [256: 383] contains only the constant 5. 
+PASS   k-rate offset k-rate output [384: 511] contains only the constant 7.5. 
+PASS < [ConstantSource k-rate offset] All assertions passed. (total 12 assertions) 
 PASS > [ConstantSourceNode.offset k-rate automation] Explicitly test ConstantSourceNode.offset k-rate automation is k-rate 
-FAIL X k-rate ConstantSource.offset:  output[0:128]: Expected 0 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	1
-	[2]	2
-	[3]	3
-	[4]	4
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[128:256]: Expected 128 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	129
-	[2]	130
-	[3]	131
-	[4]	132
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[256:384]: Expected 256 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	257
-	[2]	258
-	[3]	259
-	[4]	260
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[384:512]: Expected 384 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	385
-	[2]	386
-	[3]	387
-	[4]	388
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[512:640]: Expected 512 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	513
-	[2]	514
-	[3]	515
-	[4]	516
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[640:768]: Expected 640 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	641
-	[2]	642
-	[3]	643
-	[4]	644
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[768:896]: Expected 768 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	769
-	[2]	770
-	[3]	771
-	[4]	772
-	...and 123 more errors. assert_true: expected true got false
-FAIL X k-rate ConstantSource.offset:  output[896:1024]: Expected 896 for all values but found 127 unexpected values: 
-	Index	Actual
-	[1]	897
-	[2]	898
-	[3]	899
-	[4]	900
-	...and 123 more errors. assert_true: expected true got false
-FAIL < [ConstantSourceNode.offset k-rate automation] 8 out of 8 assertions were failed. assert_true: expected true got false
+PASS   k-rate ConstantSource.offset:  output[0:128] contains only the constant 0. 
+PASS   k-rate ConstantSource.offset:  output[128:256] contains only the constant 128. 
+PASS   k-rate ConstantSource.offset:  output[256:384] contains only the constant 256. 
+PASS   k-rate ConstantSource.offset:  output[384:512] contains only the constant 384. 
+PASS   k-rate ConstantSource.offset:  output[512:640] contains only the constant 512. 
+PASS   k-rate ConstantSource.offset:  output[640:768] contains only the constant 640. 
+PASS   k-rate ConstantSource.offset:  output[768:896] contains only the constant 768. 
+PASS   k-rate ConstantSource.offset:  output[896:1024] contains only the constant 896. 
+PASS < [ConstantSourceNode.offset k-rate automation] All assertions passed. (total 8 assertions) 
 PASS > [ConstantSource.offset] Verify k-rate automation matches k-rate input 
 PASS   ConstantSource.offset k-rate input: output[0:128] contains only the constant 2. 
 PASS   ConstantSource.offset k-rate input: output[128:256] contains only the constant 2. 
@@ -110,5 +38,5 @@
 PASS   ConstantSource.offset k-rate input: output[768:896] contains only the constant 2. 
 PASS   ConstantSource.offset k-rate input: output[896:1024] contains only the constant 2. 
 PASS < [ConstantSource.offset] All assertions passed. (total 8 assertions) 
-FAIL # AUDIT TASK RUNNER FINISHED: 2 out of 3 tasks were failed. assert_true: expected true got false
+PASS # AUDIT TASK RUNNER FINISHED: 3 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-connections-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-connections-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-connections-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -13,11 +13,17 @@
 PASS   testMod.offset.setValueAtTime(0, 0) did not throw an exception. 
 PASS   testMod.offset.linearRampToValueAtTime(1.125, 1) did not throw an exception. 
 PASS   testMod.connect(testNode.delayTime) did not throw an exception. 
-PASS   Expected k-rate delayTime AudioParam with input is not constantly 0 (contains 4095 different values). 
-PASS   Actual k-rate delayTime AudioParam with input is not constantly 0 (contains 4095 different values). 
-PASS   output[128, 143] contains only the constant 0. 
-FAIL X output[144, 255] should have contain at least one value different from 0. assert_true: expected true got false
-PASS   k-rate delayTime AudioParam with input equals [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
+PASS   Expected k-rate delayTime AudioParam with input is not constantly 0 (contains 6159 different values). 
+PASS   Actual k-rate delayTime AudioParam with input is not constantly 0 (contains 6159 different values). 
+FAIL X output[128, 143]: Expected 0 for all values but found 16 unexpected values: 
+	Index	Actual
+	[0]	-0.8773074150085449
+	[1]	-0.8522303104400635
+	[2]	-0.826123833656311
+	[3]	-0.7989943027496338
+	...and 12 more errors. assert_true: expected true got false
+PASS   output[144, 255] is not constantly 0 (contains 112 different values). 
+PASS   k-rate delayTime AudioParam with input equals [0,0.3311063051223755,0.6248595118522644,0.8481203317642212,0.9757022261619568,0.9932120442390442,0.898674488067627,0.7027547955513,0.4275550842285156,0.10412158071994781,-0.23105812072753906,-0.5401715040206909,-0.7883464097976685,-0.9475855827331543,-0.9999247789382935,-0.9394593238830566...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
 FAIL < [delayTime] 1 out of 15 assertions were failed. assert_true: expected true got false
 FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-delay-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -8,9 +8,9 @@
 PASS   DelayNode: k-rate node: delayTime.linearRampToValueAtTime(0.5,1) did not throw an exception. 
 PASS   DelayNode: a-rate node:delayTime.setValueAtTime(0,0) did not throw an exception. 
 PASS   DelayNode: a-rate node:delayTime.linearRampToValueAtTime(0.5,1) did not throw an exception. 
-PASS   DelayNode: Output of k-rate DelayNode is identical to the array [0,0.1693689227104187,0.3387378454208374,0.48808085918426514,0.6374238729476929,0.7490829229354858,0.8607419729232788,0.9215145707130432,0.9822871685028076,0.9849876165390015,0.9876880645751953,0.9319971799850464,0.8763062953948975,0.7688090205192566,0.6613118052482605,0.5147179961204529...]. 
+PASS   DelayNode: Output of k-rate DelayNode is identical to the array [0,0.3387378752231598,0.6374238729476929,0.8607419729232788,0.9822871685028076,0.9876880645751953,0.8763062953948975,0.6613117456436157,0.3681243062019348,0.03141050040721893,-0.3090170621871948,-0.6129071116447449,-0.8443278074264526,-0.9759165644645691,-0.9921145439147949,-0.8910062313079834...]. 
 PASS   DelayNode: Output of a-rate DelayNode is identical to the array [0,0.1693689227104187,0.3387378454208374,0.48808085918426514,0.6374238729476929,0.7490829229354858,0.8607419729232788,0.9215145707130432,0.9822871685028076,0.9849876165390015,0.9876880645751953,0.9319971799850464,0.8763062953948975,0.7688090205192566,0.6613118052482605,0.5147179961204529...]. 
-FAIL X DelayNode: Difference between a-rate and k-rate DelayNode should have contain at least one value different from 0. assert_true: expected true got false
-FAIL < [Test k-rate DelayNode] 1 out of 8 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false
+PASS   DelayNode: Difference between a-rate and k-rate DelayNode is not constantly 0 (contains 7999 different values). 
+PASS < [Test k-rate DelayNode] All assertions passed. (total 8 assertions) 
+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-dynamics-compressor-connections-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-dynamics-compressor-connections-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-dynamics-compressor-connections-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -23,8 +23,8 @@
 	[3555]	-2.1301783621311188e-2	-2.1302459761500359e-2	6.7614018917083740e-7	3.1740005461379454e-5	0.0000000000000000e+0
 	[3556]	-1.8743157386779785e-2	-1.8744025379419327e-2	8.6799263954162598e-7	4.6307696557787933e-5	0.0000000000000000e+0
 	...and 8443 more errors.
-	Max AbsError of 1.2182706594467163e-1 at index of 11905.
-	[11905]	2.3663640022277832e-1	3.5846346616744995e-1	1.2182706594467163e-1	3.3985908591243225e-1	0.0000000000000000e+0
+	Max AbsError of 1.2182705104351044e-1 at index of 11905.
+	[11905]	2.3663641512393951e-1	3.5846346616744995e-1	1.2182705104351044e-1	3.3985904434289282e-1	0.0000000000000000e+0
 	Max RelError of 2.5864712210866059e+0 at index of 5197.
 	[5197]	2.7467031031847000e-6	-1.7313286662101746e-6	4.4780317693948746e-6	2.5864712210866059e+0	0.0000000000000000e+0
  assert_true: expected true got false

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-gain-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -8,9 +8,9 @@
 PASS   GainNode: k-rate node: gain.linearRampToValueAtTime(0,1) did not throw an exception. 
 PASS   GainNode: a-rate node:gain.setValueAtTime(1,0) did not throw an exception. 
 PASS   GainNode: a-rate node:gain.linearRampToValueAtTime(0,1) did not throw an exception. 
-PASS   GainNode: Output of k-rate GainNode is identical to the array [0,0.3386955261230469,0.6372645497322083,0.8604192137718201,0.9817960262298584,0.9870707392692566,0.8756490349769592,0.6607331037521362,0.367756187915802,0.03137516602873802,-0.3086307942867279,-0.6120643615722656,-0.8430613279342651,-0.974330723285675,-0.9903783798217773,-0.8893356323242188...]. 
+PASS   GainNode: Output of k-rate GainNode is identical to the array [0,0.3387378752231598,0.6374238729476929,0.8607419729232788,0.9822871685028076,0.9876880645751953,0.8763062953948975,0.6613117456436157,0.3681243062019348,0.03141050040721893,-0.3090170621871948,-0.6129071116447449,-0.8443278074264526,-0.9759165644645691,-0.9921145439147949,-0.8910062313079834...]. 
 PASS   GainNode: Output of a-rate GainNode is identical to the array [0,0.3386955261230469,0.6372645497322083,0.8604192137718201,0.9817960262298584,0.9870707392692566,0.8756490349769592,0.6607331037521362,0.367756187915802,0.03137516602873802,-0.3086307942867279,-0.6120643615722656,-0.8430613279342651,-0.974330723285675,-0.9903783798217773,-0.8893356323242188...]. 
-FAIL X GainNode: Difference between a-rate and k-rate GainNode should have contain at least one value different from 0. assert_true: expected true got false
-FAIL < [Test k-rate GainNode] 1 out of 8 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed. assert_true: expected true got false
+PASS   GainNode: Difference between a-rate and k-rate GainNode is not constantly 0 (contains 7999 different values). 
+PASS < [Test k-rate GainNode] All assertions passed. (total 8 assertions) 
+PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-connections-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-connections-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-connections-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -14,7 +14,7 @@
 PASS   Test 1: modFreq.offset.setValueAtTime(100, 0) did not throw an exception. 
 PASS   Test 1: modFreq.offset.linearRampToValueAtTime(2000, 0.078125) did not throw an exception. 
 PASS   Test 1: modFreq.connect(srcTest.frequency) did not throw an exception. 
-PASS   k-rate frequency with input equals [0,0.07845915853977203,0.1587369441986084,0.24024122953414917,0.3222914934158325,0.404119074344635,0.48486924171447754,0.5636047124862671,0.6393131017684937,0.7109143733978271,0.777274489402771,0.8372192978858948,0.8895531892776489,0.9330809116363525,0.966631293296814,0.9890860319137573...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
+PASS   k-rate frequency with input equals [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
 PASS < [Test 1] All assertions passed. (total 8 assertions) 
 PASS > [Test 2] k-rate detune input 
 PASS   Test 2: srcRef.detune.automationRate = 'k-rate' did not throw an exception. 
@@ -24,7 +24,7 @@
 PASS   Test 2: modDetune.offset.setValueAtTime(0, 0) did not throw an exception. 
 PASS   Test 2: modDetune.offset.linearRampToValueAtTime(2000, 0.078125) did not throw an exception. 
 PASS   Test 2: modDetune.connect(srcTest.detune) did not throw an exception. 
-PASS   k-rate detune with input equals [0,0.3387378752231598,0.637904942035675,0.8616946935653687,0.982982873916626,0.9866902828216553,0.8717451691627502,0.6513899564743042,0.35175538063049316,0.00884389877319336,-0.3357403874397278,-0.6398173570632935,-0.865809440612793,-0.9854339361190796,-0.9833213090896606,-0.8590874671936035...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
+PASS   k-rate detune with input equals [0,0.3387378752231598,0.6374238729476929,0.8607419729232788,0.9822871685028076,0.9876880645751953,0.8763062953948975,0.6613117456436157,0.3681243062019348,0.03141050040721893,-0.3090170621871948,-0.6129071116447449,-0.8443278074264526,-0.9759165644645691,-0.9921145439147949,-0.8910062313079834...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
 PASS < [Test 2] All assertions passed. (total 8 assertions) 
 PASS > [Test 3] k-rate frequency input with a-rate detune 
 PASS   Test 3: srcRef.frequency.automationRate = 'k-rate' did not throw an exception. 
@@ -38,7 +38,7 @@
 PASS   Test 3: modFreq.offset.setValueAtTime(100, 0) did not throw an exception. 
 PASS   Test 3: modFreq.offset.linearRampToValueAtTime(2000, 0.078125) did not throw an exception. 
 PASS   Test 3: modFreq.connect(srcTest.frequency) did not throw an exception. 
-PASS   k-rate frequency input with a-rate detune equals [0,0.07845915853977203,0.15859293937683105,0.2398085594177246,0.3214321434497833,0.40271008014678955,0.48281240463256836,0.5608369708061218,0.6358171105384827,0.7067304849624634,0.7725116014480591,0.8320654630661011,0.8842850923538208,0.9280704259872437,0.9623513221740723,0.9861104488372803...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
+PASS   k-rate frequency input with a-rate detune equals [0,0.07845915853977203,0.15629452466964722,0.23303230106830597,0.3082095980644226,0.38137686252593994,0.452100932598114,0.5199676156044006,0.5845836400985718,0.6455783843994141,0.7026070952415466,0.7553509473800659,0.8035199642181396,0.8468540906906128,0.8851238489151001,0.9181316494941711...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
 PASS < [Test 3] All assertions passed. (total 12 assertions) 
 PASS > [Test 4] a-rate frequency with k-rate detune input 
 PASS   Test 4: srcRef.frequency.setValueAtTime(100, 0) did not throw an exception. 
@@ -52,7 +52,7 @@
 PASS   Test 4: modDetune.offset.setValueAtTime(0, 0) did not throw an exception. 
 PASS   Test 4: modDetune.offset.linearRampToValueAtTime(-2000, 0.078125) did not throw an exception. 
 PASS   Test 4: modDetune.connect(srcTest.detune) did not throw an exception. 
-PASS   k-rate detune input with a-rate frequency equals [0,0.07845915853977203,0.15859293937683105,0.2398085594177246,0.3214321434497833,0.40271008014678955,0.48281240463256836,0.5608369708061218,0.6358171105384827,0.7067304849624634,0.7725116014480591,0.8320654630661011,0.8842850923538208,0.9280704259872437,0.9623513221740723,0.9861104488372803...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
+PASS   k-rate detune input with a-rate frequency equals [0,0.07845915853977203,0.1587369441986084,0.24024122953414917,0.3222914934158325,0.404119074344635,0.48486924171447754,0.5636047124862671,0.6393131017684937,0.7109143733978271,0.777274489402771,0.8372192978858948,0.8895531892776489,0.9330809116363525,0.966631293296814,0.9890860319137573...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
 PASS < [Test 4] All assertions passed. (total 12 assertions) 
 PASS > [Test 5] k-rate inputs for frequency and detune 
 PASS   Test 5: srcRef.frequency.automationRate = 'k-rate' did not throw an exception. 
@@ -69,7 +69,7 @@
 PASS   Test 5: modDetune.offset.linearRampToValueAtTime(-2000, 0.078125) did not throw an exception. 
 PASS   Test 5: modFreq.connect(srcTest.frequency) did not throw an exception. 
 PASS   Test 5: modDetune.connect(srcTest.detune) did not throw an exception. 
-PASS   k-rate inputs for both frequency and detune equals [0,0.07845915853977203,0.15859293937683105,0.2398085594177246,0.3214321434497833,0.40271008014678955,0.48281240463256836,0.5608369708061218,0.6358171105384827,0.7067304849624634,0.7725116014480591,0.8320654630661011,0.8842850923538208,0.9280704259872437,0.9623513221740723,0.9861104488372803...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
+PASS   k-rate inputs for both frequency and detune equals [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...] with an element-wise tolerance of {"absoluteThreshold":0,"relativeThreshold":0}. 
 PASS < [Test 5] All assertions passed. (total 15 assertions) 
 PASS # AUDIT TASK RUNNER FINISHED: 5 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-oscillator-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -4,10 +4,10 @@
 PASS Executing "Oscillator k-rate frequency" 
 PASS Audit report 
 PASS > [Oscillator k-rate detune]  
-FAIL X k-rate detune: Difference between a-rate and k-rate outputs should have contain at least one value different from 0. assert_true: expected true got false
-FAIL < [Oscillator k-rate detune] 1 out of 1 assertions were failed. assert_true: expected true got false
+PASS   k-rate detune: Difference between a-rate and k-rate outputs is not constantly 0 (contains 510 different values). 
+PASS < [Oscillator k-rate detune] All assertions passed. (total 1 assertions) 
 PASS > [Oscillator k-rate frequency]  
-FAIL X k-rate frequency: Difference between a-rate and k-rate outputs should have contain at least one value different from 0. assert_true: expected true got false
-FAIL < [Oscillator k-rate frequency] 1 out of 1 assertions were failed. assert_true: expected true got false
-FAIL # AUDIT TASK RUNNER FINISHED: 2 out of 2 tasks were failed. assert_true: expected true got false
+PASS   k-rate frequency: Difference between a-rate and k-rate outputs is not constantly 0 (contains 510 different values). 
+PASS < [Oscillator k-rate frequency] All assertions passed. (total 1 assertions) 
+PASS # AUDIT TASK RUNNER FINISHED: 2 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -8,9 +8,9 @@
 PASS   StereoPannerNode: k-rate node: pan.linearRampToValueAtTime(0.5,1) did not throw an exception. 
 PASS   StereoPannerNode: a-rate node:pan.setValueAtTime(0,0) did not throw an exception. 
 PASS   StereoPannerNode: a-rate node:pan.linearRampToValueAtTime(0.5,1) did not throw an exception. 
-PASS   StereoPannerNode: Output of k-rate StereoPannerNode is identical to the array [0,0.23952384293079376,0.4507267475128174,0.6086364984512329,0.694581925868988,0.6984009146690369,0.6196420788764954,0.4676179885864258,0.26030316948890686,0.02221057564020157,-0.2185080349445343,-0.43339070677757263,-0.5970298051834106,-0.6900770664215088,-0.7015307545661926,-0.6300363540649414...]. 
+PASS   StereoPannerNode: Output of k-rate StereoPannerNode is identical to the array [0,0.23952384293079376,0.4507267475128174,0.6086364984512329,0.694581925868988,0.6984009146690369,0.6196421384811401,0.46761801838874817,0.26030319929122925,0.022210577502846718,-0.2185080647468567,-0.4333907663822174,-0.5970299243927002,-0.6900772452354431,-0.701530933380127,-0.6300365328788757...]. 
 PASS   StereoPannerNode: Output of a-rate StereoPannerNode is identical to the array [0,0.23952384293079376,0.4507267475128174,0.6086364984512329,0.694581925868988,0.6984009146690369,0.6196420788764954,0.4676179885864258,0.26030316948890686,0.02221057564020157,-0.2185080349445343,-0.43339070677757263,-0.5970298051834106,-0.6900770664215088,-0.7015307545661926,-0.6300363540649414...]. 
-PASS   StereoPannerNode: Difference between a-rate and k-rate StereoPannerNode is not constantly 0 (contains 3625 different values). 
+PASS   StereoPannerNode: Difference between a-rate and k-rate StereoPannerNode is not constantly 0 (contains 7956 different values). 
 PASS < [Test k-rate StereoPannerNode] All assertions passed. (total 8 assertions) 
 PASS # AUDIT TASK RUNNER FINISHED: 1 tasks ran successfully. 
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering-expected.txt (265979 => 265980)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering-expected.txt	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/no-dezippering-expected.txt	2020-08-20 23:14:05 UTC (rev 265980)
@@ -55,21 +55,21 @@
 	...and 252 more errors. assert_true: expected true got false
 FAIL < [test stereo input] 3 out of 4 assertions were failed. assert_true: expected true got false
 PASS > [test mono input setValue] Test StereoPanner with mono input value setter vs setValueAtTime 
-PASS   Mono Left .value setter output is identical to the array [0.20861317217350006,0.19113875925540924,0.16823500394821167,0.1405525654554367,0.10887773334980011,0.07411020249128342,0.037237610667943954,-0.0006927690701559186,-0.03860342130064964,-0.07541755586862564,-0.11008944362401962,-0.1416342556476593,-0.16915595531463623,-0.1918727606534958,-0.20913946628570557,-0.2204655408859253...]. 
+PASS   Mono Left .value setter output is identical to the array [-0.028300216421484947,-0.04114878550171852,-0.053860947489738464,-0.06639444082975388,-0.07870785892009735,-0.09076013416051865,-0.10251147300004959,-0.11392276734113693,-0.12495630979537964,-0.13557545840740204,-0.14574496448040009,-0.15543124079704285,-0.1646018922328949,-0.1732267439365387,-0.1812770515680313,-0.18872623145580292...]. 
 PASS   Mono Left .value setter output matches setValueAtTime output is true. 
-PASS   Mono Right .value setter output is identical to the array [0.9000188112258911,0.8246290683746338,0.7258154153823853,0.6063852310180664,0.4697306752204895,0.31973329186439514,0.16065403819084167,-0.002988810185343027,-0.1665465533733368,-0.3253736197948456,-0.4749583601951599,-0.6110519766807556,-0.7297887206077576,-0.8277957439422607,-0.9022893905639648,-0.9511533975601196...]. 
+PASS   Mono Right .value setter output is identical to the array [-0.122095488011837,-0.1775280088186264,-0.23237203061580658,-0.2864452004432678,-0.33956894278526306,-0.3915660083293915,-0.44226476550102234,-0.4914964437484741,-0.5390984416007996,-0.5849125385284424,-0.6287867426872253,-0.6705762147903442,-0.710141122341156,-0.747351348400116,-0.782082736492157,-0.814220666885376...]. 
 PASS   Mono Right .value setter output matches setValueAtTime output is true. 
 PASS < [test mono input setValue] All assertions passed. (total 4 assertions) 
 PASS > [test stereo input setValue] Test StereoPanner with mono input value setter  vs setValueAtTime 
-PASS   Stereo Left .value setter output is identical to the array [-0.4399392008781433,-0.4193967282772064,-0.3596876561641693,-0.2663879990577698,-0.1482110172510147,-0.01619294472038746,0.11733736842870712,0.2399098426103592,0.34007757902145386,0.4084862470626831,0.4387471675872803,0.42803439497947693,0.377348393201828,0.29142266511917114,0.1782815307378769,0.048491086810827255...]. 
+PASS   Stereo Left .value setter output is identical to the array [0.25859054923057556,0.2199704945087433,0.17894035577774048,0.13594961166381836,0.09146952629089355,0.04598725214600563,0.0000010709162552302587,-0.0459851436316967,-0.09146743267774582,-0.13594762980937958,-0.17893831431865692,-0.21996863186359406,-0.2585888206958771,-0.2943759262561798,-0.32693782448768616,-0.3559175431728363...]. 
 PASS   Stereo Left .value setter output matches setValueAtTime output is true. 
-PASS   Stereo Right .value setter output is identical to the array [-1.671038031578064,-1.5648269653320312,-1.3721576929092407,-1.1050618886947632,-0.7820299863815308,-0.4263407588005066,-0.06395263969898224,0.2788553237915039,0.5778660178184509,0.8131168484687805,0.9706887006759644,1.0439329147338867,1.0340183973312378,0.9497482180595398,0.8066650629043579,0.6255297064781189...]. 
+PASS   Stereo Right .value setter output is identical to the array [0.5278493165969849,0.48173511028289795,0.43066614866256714,0.3755251467227936,0.31723907589912415,0.25676751136779785,0.1950928419828415,0.13320933282375336,0.07211104035377502,0.01278146356344223,-0.043818745762109756,-0.09676152467727661,-0.14516164362430573,-0.18818864226341248,-0.2250741422176361,-0.2551209628582001...]. 
 PASS   Stereo Right .value setter output matches setValueAtTime output is true. 
 PASS < [test stereo input setValue] All assertions passed. (total 4 assertions) 
 PASS > [test mono input automation] Test StereoPanner with mono input and automation 
-PASS   Modulated Stereo Left .value setter output is identical to the array [-6.123234262925839e-17,-5.83731630634668e-17,-5.006263826782414e-17,-3.707685225408482e-17,-2.062854940756385e-17,-2.253792958833939e-18,1.6331442078301927e-17,3.3391524397144665e-17,4.733323672269722e-17,5.685460504260725e-17,6.106643005071496e-17,5.957538736575137e-17,5.252072126331122e-17,4.056126455768074e-17,2.481387320320658e-17,6.749165968347778e-18...]. 
+PASS   Modulated Stereo Left .value setter output is identical to the array [0.5877871513366699,0.511900007724762,0.43011096119880676,0.3434051275253296,0.2528183162212372,0.15942318737506866,0.06431935727596283,-0.03138017654418945,-0.1265600323677063,-0.22011728584766388,-0.31097108125686646,-0.3980771601200104,-0.4804368317127228,-0.5571109652519226,-0.6272279620170593,-0.6899943351745605...]. 
 PASS   Modulated Stereo Left .value setter output matches setValueAtTime output is true. 
-PASS   Modulated Stereo Right .value setter output is identical to the array [-1.773010492324829,-1.6620378494262695,-1.455528736114502,-1.1668072938919067,-0.8163834810256958,-0.4300940930843353,-0.03675529360771179,0.3344634473323822,0.6566917896270752,0.9077988862991333,1.0723848342895508,1.14314603805542,1.1214830875396729,1.017296314239502,0.847988486289978,0.6367692947387695...]. 
+PASS   Modulated Stereo Right .value setter output is identical to the array [3.479795509520045e-7,0.030479563400149345,0.061084818094968796,0.09178794175386429,0.1225593239068985,0.1533685177564621,0.18418386578559875,0.21497322618961334,0.24570252001285553,0.27633801102638245,0.30684351921081543,0.3371830880641937,0.3673195540904999,0.39721453189849854,0.42682918906211853,0.45612409710884094...]. 
 PASS   Modulated Stereo Right .value setter output matches setValueAtTime output is true. 
 PASS < [test mono input automation] All assertions passed. (total 4 assertions) 
 FAIL # AUDIT TASK RUNNER FINISHED: 2 out of 5 tasks were failed. assert_true: expected true got false

Modified: trunk/Source/WebCore/ChangeLog (265979 => 265980)


--- trunk/Source/WebCore/ChangeLog	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/ChangeLog	2020-08-20 23:14:05 UTC (rev 265980)
@@ -1,3 +1,58 @@
+2020-08-20  Chris Dumez  <cdu...@apple.com>
+
+        AudioParam.automationRate attribute is missing
+        https://bugs.webkit.org/show_bug.cgi?id=215710
+
+        Reviewed by Darin Adler.
+
+        Add initial support for AudioParam.automationRate:
+        - https://www.w3.org/TR/webaudio/#dom-audioparam-automationrate
+
+        No new tests, rebaselined existing tests.
+
+        * Modules/webaudio/AudioBufferSourceNode.cpp:
+        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
+        * Modules/webaudio/AudioListener.cpp:
+        (WebCore::AudioListener::AudioListener):
+        * Modules/webaudio/AudioParam.cpp:
+        (WebCore::AudioParam::AudioParam):
+        (WebCore::AudioParam::setAutomationRate):
+        (WebCore::AudioParam::calculateSampleAccurateValues):
+        * Modules/webaudio/AudioParam.h:
+        * Modules/webaudio/AudioParam.idl:
+        * Modules/webaudio/BiquadDSPKernel.cpp:
+        (WebCore::BiquadDSPKernel::updateCoefficientsIfNecessary):
+        * Modules/webaudio/BiquadProcessor.cpp:
+        (WebCore::BiquadProcessor::BiquadProcessor):
+        * Modules/webaudio/ConstantSourceNode.cpp:
+        (WebCore::ConstantSourceNode::ConstantSourceNode):
+        (WebCore::ConstantSourceNode::process):
+        * Modules/webaudio/DelayDSPKernel.cpp:
+        (WebCore::DelayDSPKernel::process):
+        * Modules/webaudio/DelayProcessor.cpp:
+        (WebCore::DelayProcessor::DelayProcessor):
+        * Modules/webaudio/DynamicsCompressorNode.cpp:
+        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
+        * Modules/webaudio/GainNode.cpp:
+        (WebCore::GainNode::GainNode):
+        (WebCore::GainNode::process):
+        * Modules/webaudio/OscillatorNode.cpp:
+        (WebCore::OscillatorNode::OscillatorNode):
+        (WebCore::OscillatorNode::calculateSampleAccuratePhaseIncrements):
+        * Modules/webaudio/PannerNode.cpp:
+        (WebCore::PannerNode::PannerNode):
+        (WebCore::PannerNode::distanceConeGain):
+        * Modules/webaudio/PannerNode.h:
+        * Modules/webaudio/StereoPannerNode.cpp:
+        (WebCore::StereoPannerNode::StereoPannerNode):
+        (WebCore::StereoPannerNode::process):
+        * Modules/webaudio/WebKitAudioBufferSourceNode.h:
+        * Modules/webaudio/WebKitAudioPannerNode.cpp:
+        (WebCore::WebKitAudioPannerNode::WebKitAudioPannerNode):
+        (WebCore::WebKitAudioPannerNode::distanceConeGain):
+        * Modules/webaudio/WebKitAudioPannerNode.h:
+        * Modules/webaudio/WebKitDynamicsCompressorNode.h:
+
 2020-08-20  Kenneth Russell  <k...@chromium.org>
 
         [WebGL2] Pass context-lost-restored.html test

Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -77,8 +77,8 @@
 
 AudioBufferSourceNode::AudioBufferSourceNode(BaseAudioContext& context)
     : AudioScheduledSourceNode(context)
-    , m_detune(AudioParam::create(context, "detune"_s, 0.0, -FLT_MAX, FLT_MAX))
-    , m_playbackRate(AudioParam::create(context, "playbackRate"_s, 1.0, -FLT_MAX, FLT_MAX))
+    , m_detune(AudioParam::create(context, "detune"_s, 0.0, -FLT_MAX, FLT_MAX, AutomationRate::KRate, AutomationRateMode::Fixed))
+    , m_playbackRate(AudioParam::create(context, "playbackRate"_s, 1.0, -FLT_MAX, FLT_MAX, AutomationRate::KRate, AutomationRateMode::Fixed))
     , m_grainDuration(DefaultGrainDuration)
 {
     setNodeType(NodeTypeAudioBufferSource);

Modified: trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -39,15 +39,15 @@
 namespace WebCore {
 
 AudioListener::AudioListener(BaseAudioContext& context)
-    : m_positionX(AudioParam::create(context, "positionX", 0.0, -FLT_MAX, FLT_MAX))
-    , m_positionY(AudioParam::create(context, "positionY", 0.0, -FLT_MAX, FLT_MAX))
-    , m_positionZ(AudioParam::create(context, "positionZ", 0.0, -FLT_MAX, FLT_MAX))
-    , m_forwardX(AudioParam::create(context, "forwardX", 0.0, -FLT_MAX, FLT_MAX))
-    , m_forwardY(AudioParam::create(context, "forwardY", 0.0, -FLT_MAX, FLT_MAX))
-    , m_forwardZ(AudioParam::create(context, "forwardZ", -1.0, -FLT_MAX, FLT_MAX))
-    , m_upX(AudioParam::create(context, "upX", 0.0, -FLT_MAX, FLT_MAX))
-    , m_upY(AudioParam::create(context, "upY", 1.0, -FLT_MAX, FLT_MAX))
-    , m_upZ(AudioParam::create(context, "upZ", 0.0, -FLT_MAX, FLT_MAX))
+    : m_positionX(AudioParam::create(context, "positionX", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_positionY(AudioParam::create(context, "positionY", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_positionZ(AudioParam::create(context, "positionZ", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_forwardX(AudioParam::create(context, "forwardX", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_forwardY(AudioParam::create(context, "forwardY", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_forwardZ(AudioParam::create(context, "forwardZ", -1.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_upX(AudioParam::create(context, "upX", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_upY(AudioParam::create(context, "upY", 1.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_upZ(AudioParam::create(context, "upZ", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
 {
 }
 

Modified: trunk/Source/WebCore/Modules/webaudio/AudioParam.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/AudioParam.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParam.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -41,7 +41,7 @@
 const double AudioParam::DefaultSmoothingConstant = 0.05;
 const double AudioParam::SnapThreshold = 0.001;
 
-AudioParam::AudioParam(BaseAudioContext& context, const String& name, double defaultValue, double minValue, double maxValue, unsigned units)
+AudioParam::AudioParam(BaseAudioContext& context, const String& name, double defaultValue, double minValue, double maxValue, AutomationRate automationRate, AutomationRateMode automationRateMode, unsigned units)
     : AudioSummingJunction(context)
     , m_name(name)
     , m_value(defaultValue)
@@ -48,6 +48,8 @@
     , m_defaultValue(defaultValue)
     , m_minValue(minValue)
     , m_maxValue(maxValue)
+    , m_automationRate(automationRate)
+    , m_automationRateMode(automationRateMode)
     , m_units(units)
     , m_smoothedValue(defaultValue)
     , m_smoothingConstant(DefaultSmoothingConstant)
@@ -83,6 +85,15 @@
         m_value = value;
 }
 
+ExceptionOr<void> AudioParam::setAutomationRate(AutomationRate automationRate)
+{
+    if (m_automationRateMode == AutomationRateMode::Fixed)
+        return Exception { InvalidStateError, "automationRate cannot be changed for this node" };
+
+    m_automationRate = automationRate;
+    return { };
+}
+
 float AudioParam::smoothedValue()
 {
     return narrowPrecisionToFloat(m_smoothedValue);
@@ -200,7 +211,7 @@
     if (!isSafe)
         return;
 
-    calculateFinalValues(values, numberOfValues, true);
+    calculateFinalValues(values, numberOfValues, automationRate() == AutomationRate::ARate);
 }
 
 void AudioParam::calculateFinalValues(float* values, unsigned numberOfValues, bool sampleAccurate)

Modified: trunk/Source/WebCore/Modules/webaudio/AudioParam.h (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/AudioParam.h	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParam.h	2020-08-20 23:14:05 UTC (rev 265980)
@@ -42,6 +42,9 @@
 
 class AudioNodeOutput;
 
+enum class AutomationRate : bool { ARate, KRate };
+enum class AutomationRateMode : bool { Fixed, Variable };
+
 class AudioParam final
     : public AudioSummingJunction
     , public RefCounted<AudioParam>
@@ -53,9 +56,9 @@
     static const double DefaultSmoothingConstant;
     static const double SnapThreshold;
 
-    static Ref<AudioParam> create(BaseAudioContext& context, const String& name, double defaultValue, double minValue, double maxValue, unsigned units = 0)
+    static Ref<AudioParam> create(BaseAudioContext& context, const String& name, double defaultValue, double minValue, double maxValue, AutomationRate automationRate, AutomationRateMode automationRateMode = AutomationRateMode::Variable, unsigned units = 0)
     {
-        return adoptRef(*new AudioParam(context, name, defaultValue, minValue, maxValue, units));
+        return adoptRef(*new AudioParam(context, name, defaultValue, minValue, maxValue, automationRate, automationRateMode, units));
     }
 
     // AudioSummingJunction
@@ -66,6 +69,9 @@
     float value();
     void setValue(float);
 
+    AutomationRate automationRate() const { return m_automationRate; }
+    ExceptionOr<void> setAutomationRate(AutomationRate);
+
     // Final value for k-rate parameters, otherwise use calculateSampleAccurateValues() for a-rate.
     // Must be called in the audio thread.
     float finalValue();
@@ -109,7 +115,7 @@
     void disconnect(AudioNodeOutput*);
 
 protected:
-    AudioParam(BaseAudioContext&, const String&, double defaultValue, double minValue, double maxValue, unsigned units = 0);
+    AudioParam(BaseAudioContext&, const String&, double defaultValue, double minValue, double maxValue, AutomationRate, AutomationRateMode, unsigned units = 0);
 
 private:
     // sampleAccurate corresponds to a-rate (audio rate) vs. k-rate in the Web Audio specification.
@@ -128,6 +134,8 @@
     double m_defaultValue;
     double m_minValue;
     double m_maxValue;
+    AutomationRate m_automationRate;
+    AutomationRateMode m_automationRateMode;
     unsigned m_units;
 
     // Smoothing (de-zippering)

Modified: trunk/Source/WebCore/Modules/webaudio/AudioParam.idl (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/AudioParam.idl	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParam.idl	2020-08-20 23:14:05 UTC (rev 265980)
@@ -28,11 +28,18 @@
 
 [
     Conditional=WEB_AUDIO,
+    ImplementedAs=AutomationRate
+] enum AutomationRate {
+    "a-rate",
+    "k-rate"
+};
+
+[
+    Conditional=WEB_AUDIO,
 ] interface AudioParam {
     attribute float value;
 
-    // FIXME: add support for this.
-    // attribute AutomationRate automationRate;
+    attribute AutomationRate automationRate;
 
     readonly attribute float defaultValue;
     readonly attribute float minValue;

Modified: trunk/Source/WebCore/Modules/webaudio/BiquadDSPKernel.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/BiquadDSPKernel.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/BiquadDSPKernel.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -49,7 +49,11 @@
         double gain;
         double detune; // in Cents
 
-        if (biquadProcessor()->hasSampleAccurateValues()) {
+        bool shouldUseARate = biquadProcessor()->parameter1().automationRate() == AutomationRate::ARate
+            || biquadProcessor()->parameter2().automationRate() == AutomationRate::ARate
+            || biquadProcessor()->parameter3().automationRate() == AutomationRate::ARate
+            || biquadProcessor()->parameter4().automationRate() == AutomationRate::ARate;
+        if (biquadProcessor()->hasSampleAccurateValues() && shouldUseARate) {
             value1 = biquadProcessor()->parameter1().finalValue();
             value2 = biquadProcessor()->parameter2().finalValue();
             gain = biquadProcessor()->parameter3().finalValue();

Modified: trunk/Source/WebCore/Modules/webaudio/BiquadProcessor.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/BiquadProcessor.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/BiquadProcessor.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -35,10 +35,10 @@
 BiquadProcessor::BiquadProcessor(BaseAudioContext& context, float sampleRate, size_t numberOfChannels, bool autoInitialize)
     : AudioDSPKernelProcessor(sampleRate, numberOfChannels)
     , m_type(BiquadFilterType::Lowpass)
-    , m_parameter1(AudioParam::create(context, "frequency", 350.0, 0.0, 0.5 * sampleRate))
-    , m_parameter2(AudioParam::create(context, "Q", 1, -FLT_MAX, FLT_MAX))
-    , m_parameter3(AudioParam::create(context, "gain", 0.0, -FLT_MAX, 1541))
-    , m_parameter4(AudioParam::create(context, "detune", 0.0, -153600, 153600))
+    , m_parameter1(AudioParam::create(context, "frequency", 350.0, 0.0, 0.5 * sampleRate, AutomationRate::ARate))
+    , m_parameter2(AudioParam::create(context, "Q", 1, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_parameter3(AudioParam::create(context, "gain", 0.0, -FLT_MAX, 1541, AutomationRate::ARate))
+    , m_parameter4(AudioParam::create(context, "detune", 0.0, -153600, 153600, AutomationRate::ARate))
     , m_filterCoefficientsDirty(true)
     , m_hasSampleAccurateValues(false)
 {

Modified: trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -54,7 +54,7 @@
 
 ConstantSourceNode::ConstantSourceNode(BaseAudioContext& context, float offset)
     : AudioScheduledSourceNode(context)
-    , m_offset(AudioParam::create(context, "offset"_s, offset, -FLT_MAX, FLT_MAX))
+    , m_offset(AudioParam::create(context, "offset"_s, offset, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
 {
     setNodeType(NodeTypeConstant);
     addOutput(makeUnique<AudioNodeOutput>(this, 1));
@@ -85,10 +85,7 @@
     }
     
     bool isSampleAccurate = m_offset->hasSampleAccurateValues();
-    
-    // FIXME: Fix once automation-rate is introduced. Some tests are failing because this
-    // is called for both a-rate and k-rate, but only should be called on a-rate.
-    if (isSampleAccurate) {
+    if (isSampleAccurate && m_offset->automationRate() == AutomationRate::ARate) {
         float* offsets = m_sampleAccurateValues.data();
         m_offset->calculateSampleAccurateValues(offsets, framesToProcess);
         if (nonSilentFramesToProcess > 0) {

Modified: trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -103,8 +103,9 @@
     double maxTime = maxDelayTime();
 
     bool sampleAccurate = delayProcessor() && delayProcessor()->delayTime().hasSampleAccurateValues();
+    bool shouldUseARate = delayProcessor() && delayProcessor()->delayTime().automationRate() == AutomationRate::ARate;
 
-    if (sampleAccurate)
+    if (sampleAccurate && shouldUseARate)
         delayProcessor()->delayTime().calculateSampleAccurateValues(delayTimes, framesToProcess);
     else {
         delayTime = delayProcessor() ? delayProcessor()->delayTime().finalValue() : m_desiredDelayFrames / sampleRate;
@@ -120,7 +121,7 @@
     }
 
     for (unsigned i = 0; i < framesToProcess; ++i) {
-        if (sampleAccurate) {
+        if (sampleAccurate && shouldUseARate) {
             delayTime = delayTimes[i];
             delayTime = std::min(maxTime, delayTime);
             delayTime = std::max(0.0, delayTime);

Modified: trunk/Source/WebCore/Modules/webaudio/DelayProcessor.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/DelayProcessor.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/DelayProcessor.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -34,7 +34,7 @@
 
 DelayProcessor::DelayProcessor(BaseAudioContext& context, float sampleRate, unsigned numberOfChannels, double maxDelayTime)
     : AudioDSPKernelProcessor(sampleRate, numberOfChannels)
-    , m_delayTime(AudioParam::create(context, "delayTime", 0.0, 0.0, maxDelayTime))
+    , m_delayTime(AudioParam::create(context, "delayTime", 0.0, 0.0, maxDelayTime, AutomationRate::ARate))
 {
 
 }

Modified: trunk/Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -62,11 +62,11 @@
 
 DynamicsCompressorNode::DynamicsCompressorNode(BaseAudioContext& context, const DynamicsCompressorOptions& options)
     : AudioNode(context)
-    , m_threshold(AudioParam::create(context, "threshold"_s, options.threshold, -100, 0))
-    , m_knee(AudioParam::create(context, "knee"_s, options.knee, 0, 40))
-    , m_ratio(AudioParam::create(context, "ratio"_s, options.ratio, 1, 20))
-    , m_attack(AudioParam::create(context, "attack"_s, options.attack, 0, 1))
-    , m_release(AudioParam::create(context, "release"_s, options.release, 0, 1))
+    , m_threshold(AudioParam::create(context, "threshold"_s, options.threshold, -100, 0, AutomationRate::KRate, AutomationRateMode::Fixed))
+    , m_knee(AudioParam::create(context, "knee"_s, options.knee, 0, 40, AutomationRate::KRate, AutomationRateMode::Fixed))
+    , m_ratio(AudioParam::create(context, "ratio"_s, options.ratio, 1, 20, AutomationRate::KRate, AutomationRateMode::Fixed))
+    , m_attack(AudioParam::create(context, "attack"_s, options.attack, 0, 1, AutomationRate::KRate, AutomationRateMode::Fixed))
+    , m_release(AudioParam::create(context, "release"_s, options.release, 0, 1, AutomationRate::KRate, AutomationRateMode::Fixed))
 {
     setNodeType(NodeTypeDynamicsCompressor);
 

Modified: trunk/Source/WebCore/Modules/webaudio/GainNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/GainNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/GainNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -58,7 +58,7 @@
 GainNode::GainNode(BaseAudioContext& context)
     : AudioNode(context)
     , m_sampleAccurateGainValues(AudioNode::ProcessingSizeInFrames) // FIXME: can probably share temp buffer in context
-    , m_gain(AudioParam::create(context, "gain"_s, 1.0, -FLT_MAX, FLT_MAX))
+    , m_gain(AudioParam::create(context, "gain"_s, 1.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
 {
     setNodeType(NodeTypeGain);
 
@@ -82,7 +82,7 @@
     else {
         AudioBus* inputBus = input(0)->bus();
 
-        if (gain().hasSampleAccurateValues()) {
+        if (gain().hasSampleAccurateValues() && gain().automationRate() == AutomationRate::ARate) {
             // Apply sample-accurate gain scaling for precise envelopes, grain windows, etc.
             ASSERT(framesToProcess <= m_sampleAccurateGainValues.size());
             if (framesToProcess <= m_sampleAccurateGainValues.size()) {
@@ -92,12 +92,13 @@
             }
         } else {
             // Apply the gain with de-zippering into the output bus.
-            if (!m_lastGain && m_lastGain == m_gain->value()) {
+            float gain = this->gain().hasSampleAccurateValues() ? this->gain().finalValue() : this->gain().value();
+            if (!m_lastGain && m_lastGain == gain) {
                 // If the gain is 0 (and we've converged on dezippering), just zero the bus and set
                 // the silence hint.
                 outputBus->zero();
             } else
-                outputBus->copyWithGainFrom(*inputBus, &m_lastGain, gain().value());
+                outputBus->copyWithGainFrom(*inputBus, &m_lastGain, gain);
         }
     }
 }

Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -78,8 +78,8 @@
 
 OscillatorNode::OscillatorNode(BaseAudioContext& context, const OscillatorOptions& options)
     : AudioScheduledSourceNode(context)
-    , m_frequency(AudioParam::create(context, "frequency"_s, options.frequency, -context.sampleRate() / 2, context.sampleRate() / 2))
-    , m_detune(AudioParam::create(context, "detune"_s, options.detune, -153600, 153600))
+    , m_frequency(AudioParam::create(context, "frequency"_s, options.frequency, -context.sampleRate() / 2, context.sampleRate() / 2, AutomationRate::ARate))
+    , m_detune(AudioParam::create(context, "detune"_s, options.detune, -153600, 153600, AutomationRate::ARate))
 {
     setNodeType(NodeTypeOscillator);
     
@@ -151,7 +151,7 @@
 
     float finalScale = m_periodicWave->rateScale();
 
-    if (m_frequency->hasSampleAccurateValues()) {
+    if (m_frequency->hasSampleAccurateValues() && m_frequency->automationRate() == AutomationRate::ARate) {
         hasSampleAccurateValues = true;
         hasFrequencyChanges = true;
 
@@ -159,13 +159,11 @@
         // They will be converted to phase increments below.
         m_frequency->calculateSampleAccurateValues(phaseIncrements, framesToProcess);
     } else {
-        // Handle ordinary parameter smoothing/de-zippering if there are no scheduled changes.
-        m_frequency->smooth();
-        float frequency = m_frequency->smoothedValue();
+        float frequency = m_frequency->finalValue();
         finalScale *= frequency;
     }
 
-    if (m_detune->hasSampleAccurateValues()) {
+    if (m_detune->hasSampleAccurateValues() && m_detune->automationRate() == AutomationRate::ARate) {
         hasSampleAccurateValues = true;
 
         // Get the sample-accurate detune values.
@@ -183,9 +181,7 @@
             vmul(detuneValues, 1, phaseIncrements, 1, phaseIncrements, 1, framesToProcess);
         }
     } else {
-        // Handle ordinary parameter smoothing/de-zippering if there are no scheduled changes.
-        m_detune->smooth();
-        float detune = m_detune->smoothedValue();
+        float detune = m_detune->finalValue();
         float detuneScale = powf(2, detune / 1200);
         finalScale *= detuneScale;
     }

Modified: trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -89,14 +89,12 @@
 PannerNode::PannerNode(BaseAudioContext& context, const PannerOptions& options)
     : PannerNodeBase(context)
     , m_panningModel(options.panningModel)
-    , m_distanceGain(AudioParam::create(context, "distanceGain", 1.0, 0.0, 1.0))
-    , m_coneGain(AudioParam::create(context, "coneGain", 1.0, 0.0, 1.0))
-    , m_positionX(AudioParam::create(context, "positionX"_s, options.positionX, -FLT_MAX, FLT_MAX))
-    , m_positionY(AudioParam::create(context, "positionY"_s, options.positionY, -FLT_MAX, FLT_MAX))
-    , m_positionZ(AudioParam::create(context, "positionZ"_s, options.positionZ, -FLT_MAX, FLT_MAX))
-    , m_orientationX(AudioParam::create(context, "orientationX"_s, options.orientationX, -FLT_MAX, FLT_MAX))
-    , m_orientationY(AudioParam::create(context, "orientationY"_s, options.orientationY, -FLT_MAX, FLT_MAX))
-    , m_orientationZ(AudioParam::create(context, "orientationZ"_s, options.orientationZ, -FLT_MAX, FLT_MAX))
+    , m_positionX(AudioParam::create(context, "positionX"_s, options.positionX, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_positionY(AudioParam::create(context, "positionY"_s, options.positionY, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_positionZ(AudioParam::create(context, "positionZ"_s, options.positionZ, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_orientationX(AudioParam::create(context, "orientationX"_s, options.orientationX, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_orientationY(AudioParam::create(context, "orientationY"_s, options.orientationY, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+    , m_orientationZ(AudioParam::create(context, "orientationZ"_s, options.orientationZ, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
     // Load the HRTF database asynchronously so we don't block the _javascript_ thread while creating the HRTF database.
     , m_hrtfDatabaseLoader(HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary(context.sampleRate()))
 {
@@ -386,13 +384,9 @@
 
     double listenerDistance = sourcePosition.distanceTo(listenerPosition);
     double distanceGain = m_distanceEffect.gain(listenerDistance);
-    
-    m_distanceGain->setValue(static_cast<float>(distanceGain));
 
     // FIXME: could optimize by caching coneGain
     double coneGain = m_coneEffect.gain(sourcePosition, orientation(), listenerPosition);
-    
-    m_coneGain->setValue(static_cast<float>(coneGain));
 
     return float(distanceGain * coneGain);
 }

Modified: trunk/Source/WebCore/Modules/webaudio/PannerNode.h (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/PannerNode.h	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/PannerNode.h	2020-08-20 23:14:05 UTC (rev 265980)
@@ -125,10 +125,6 @@
     void getAzimuthElevation(double* outAzimuth, double* outElevation);
     float dopplerRate() final;
 
-    // Accessors for dynamically calculated gain values.
-    AudioParam* distanceGain() { return m_distanceGain.get(); }
-    AudioParam* coneGain() { return m_coneGain.get(); }
-
     double tailTime() const override { return m_panner ? m_panner->tailTime() : 0; }
     double latencyTime() const override { return m_panner ? m_panner->latencyTime() : 0; }
 
@@ -146,8 +142,6 @@
     PanningModelType m_panningModel;
 
     // Gain
-    RefPtr<AudioParam> m_distanceGain;
-    RefPtr<AudioParam> m_coneGain;
     DistanceEffect m_distanceEffect;
     ConeEffect m_coneEffect;
     float m_lastGain { -1.0 };

Modified: trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -53,7 +53,7 @@
 
 StereoPannerNode::StereoPannerNode(BaseAudioContext& context, float pan)
     : AudioNode(context)
-    , m_pan(AudioParam::create(context, "pan"_s, pan, -1, 1))
+    , m_pan(AudioParam::create(context, "pan"_s, pan, -1, 1, AutomationRate::ARate))
 {
     setNodeType(NodeTypeStereo);
     
@@ -82,10 +82,8 @@
         destination->zero();
         return;
     }
-        
-    // FIXME: Fix once automation-rate is introduced. Some tests are failing because this
-    // is called for both a-rate and k-rate, but should only be called on a-rate.
-    if (m_pan->hasSampleAccurateValues()) {
+
+    if (m_pan->hasSampleAccurateValues() && m_pan->automationRate() == AutomationRate::ARate) {
         float* panValues = m_sampleAccurateValues.data();
         m_pan->calculateSampleAccurateValues(panValues, framesToProcess);
         StereoPanner::panWithSampleAccurateValues(source, destination, panValues, framesToProcess);
@@ -92,7 +90,10 @@
         return;
     }
     
-    float panValue = m_pan->value();
+    // The pan value is not sample-accurate or not a-rate. In this case, we have
+    // a fixed pan value for the render and just need to incorporate any inputs to
+    // the value, if any.
+    float panValue = m_pan->hasSampleAccurateValues() ? m_pan->finalValue() : m_pan->value();
     StereoPanner::panToTargetValue(source, destination, panValue, framesToProcess);
 }
 

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioBufferSourceNode.h (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioBufferSourceNode.h	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioBufferSourceNode.h	2020-08-20 23:14:05 UTC (rev 265980)
@@ -43,7 +43,7 @@
 private:
     explicit WebKitAudioBufferSourceNode(BaseAudioContext& context)
         : AudioBufferSourceNode(context)
-        , m_gain(AudioParam::create(context, "gain"_s, 1.0, 0.0, 1.0))
+        , m_gain(AudioParam::create(context, "gain"_s, 1.0, 0.0, 1.0, AutomationRate::KRate))
     {
     }
 

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.cpp (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.cpp	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.cpp	2020-08-20 23:14:05 UTC (rev 265980)
@@ -63,9 +63,6 @@
     addInput(makeUnique<AudioNodeInput>(this));
     addOutput(makeUnique<AudioNodeOutput>(this, 2));
 
-    m_distanceGain = AudioParam::create(context, "distanceGain", 1.0, 0.0, 1.0);
-    m_coneGain = AudioParam::create(context, "coneGain", 1.0, 0.0, 1.0);
-
     m_position = FloatPoint3D(0, 0, 0);
     m_orientation = FloatPoint3D(1, 0, 0);
     m_velocity = FloatPoint3D(0, 0, 0);
@@ -315,13 +312,9 @@
     double listenerDistance = sourcePosition.distanceTo(listenerPosition);
     double distanceGain = m_distanceEffect.gain(listenerDistance);
 
-    m_distanceGain->setValue(static_cast<float>(distanceGain));
-
     // FIXME: could optimize by caching coneGain
     double coneGain = m_coneEffect.gain(sourcePosition, m_orientation, listenerPosition);
 
-    m_coneGain->setValue(static_cast<float>(coneGain));
-
     return float(distanceGain * coneGain);
 }
 

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.h (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.h	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitAudioPannerNode.h	2020-08-20 23:14:05 UTC (rev 265980)
@@ -115,10 +115,6 @@
     void getAzimuthElevation(double* outAzimuth, double* outElevation);
     float dopplerRate() final;
 
-    // Accessors for dynamically calculated gain values.
-    AudioParam* distanceGain() { return m_distanceGain.get(); }
-    AudioParam* coneGain() { return m_coneGain.get(); }
-
     double tailTime() const override { return m_panner ? m_panner->tailTime() : 0; }
     double latencyTime() const override { return m_panner ? m_panner->latencyTime() : 0; }
 
@@ -140,8 +136,6 @@
     FloatPoint3D m_velocity;
 
     // Gain
-    RefPtr<AudioParam> m_distanceGain;
-    RefPtr<AudioParam> m_coneGain;
     DistanceEffect m_distanceEffect;
     ConeEffect m_coneEffect;
     float m_lastGain;

Modified: trunk/Source/WebCore/Modules/webaudio/WebKitDynamicsCompressorNode.h (265979 => 265980)


--- trunk/Source/WebCore/Modules/webaudio/WebKitDynamicsCompressorNode.h	2020-08-20 23:12:05 UTC (rev 265979)
+++ trunk/Source/WebCore/Modules/webaudio/WebKitDynamicsCompressorNode.h	2020-08-20 23:14:05 UTC (rev 265980)
@@ -42,7 +42,7 @@
 private:
     explicit WebKitDynamicsCompressorNode(WebKitAudioContext& context)
         : DynamicsCompressorNode(context)
-        , m_legacyReduction(AudioParam::create(context, "reduction"_s, 0, -20, 0))
+        , m_legacyReduction(AudioParam::create(context, "reduction"_s, 0, -20, 0, AutomationRate::KRate))
     {
         initializeDefaultNodeOptions(2, ChannelCountMode::ClampedMax, ChannelInterpretation::Speakers);
     }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to