Title: [96270] trunk
Revision
96270
Author
[email protected]
Date
2011-09-28 17:06:06 -0700 (Wed, 28 Sep 2011)

Log Message

DelayNode must set the context on delayTime AudioParam to support automation
https://bugs.webkit.org/show_bug.cgi?id=68828

Reviewed by Kenneth Russell.

Source/WebCore:

Test: webaudio/delaynode-scheduling.html

* webaudio/DelayNode.cpp:
(WebCore::DelayNode::DelayNode):

LayoutTests:

* webaudio/delaynode-scheduling-expected.txt: Added.
* webaudio/delaynode-scheduling.html: Added.
* webaudio/delaynode.html:
* webaudio/resources/delay-testing.js: Added.
(createToneBuffer):
(checkDelayedResult.return.var):
(checkDelayedResult):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (96269 => 96270)


--- trunk/LayoutTests/ChangeLog	2011-09-29 00:02:29 UTC (rev 96269)
+++ trunk/LayoutTests/ChangeLog	2011-09-29 00:06:06 UTC (rev 96270)
@@ -1,3 +1,18 @@
+2011-09-28  Chris Rogers  <[email protected]>
+
+        DelayNode must set the context on delayTime AudioParam to support automation
+        https://bugs.webkit.org/show_bug.cgi?id=68828
+
+        Reviewed by Kenneth Russell.
+
+        * webaudio/delaynode-scheduling-expected.txt: Added.
+        * webaudio/delaynode-scheduling.html: Added.
+        * webaudio/delaynode.html:
+        * webaudio/resources/delay-testing.js: Added.
+        (createToneBuffer):
+        (checkDelayedResult.return.var):
+        (checkDelayedResult):
+
 2011-09-28  Ryosuke Niwa  <[email protected]>
 
         More Mac rebaselines for r96257.

Added: trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt (0 => 96270)


--- trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/webaudio/delaynode-scheduling-expected.txt	2011-09-29 00:06:06 UTC (rev 96270)
@@ -0,0 +1,9 @@
+Tests that DelayNode delayTime parameter can be scheduled at a given time.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS Test signal was correctly delayed.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/webaudio/delaynode-scheduling.html (0 => 96270)


--- trunk/LayoutTests/webaudio/delaynode-scheduling.html	                        (rev 0)
+++ trunk/LayoutTests/webaudio/delaynode-scheduling.html	2011-09-29 00:06:06 UTC (rev 96270)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+<script src=""
+</head>
+
+<body>
+
+<div id="description"></div>
+<div id="console"></div>
+
+<script>
+description("Tests that DelayNode delayTime parameter can be scheduled at a given time.");
+
+function runTest() {
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+    
+    window.jsTestIsAsync = true;
+        
+    // Create offline audio context.
+    var context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
+    var toneBuffer = createToneBuffer(context, 20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
+    
+    var bufferSource = context.createBufferSource();
+    bufferSource.buffer = toneBuffer;
+
+    var delay = context.createDelayNode();
+    
+    // Schedule delay time at time zero.
+    delay.delayTime.setValueAtTime(delayTimeSeconds, 0);
+
+    bufferSource.connect(delay);
+    delay.connect(context.destination);
+    bufferSource.noteOn(0);
+    
+    context._oncomplete_ = checkDelayedResult(toneBuffer);
+    context.startRendering();
+}
+
+runTest();
+successfullyParsed = true;
+
+</script>
+
+<script src=""
+</body>
+</html>

Modified: trunk/LayoutTests/webaudio/delaynode.html (96269 => 96270)


--- trunk/LayoutTests/webaudio/delaynode.html	2011-09-29 00:02:29 UTC (rev 96269)
+++ trunk/LayoutTests/webaudio/delaynode.html	2011-09-29 00:06:06 UTC (rev 96270)
@@ -4,6 +4,7 @@
 <head>
 <link rel="stylesheet" href=""
 <script src=""
+<script src=""
 </head>
 
 <body>
@@ -14,75 +15,6 @@
 <script>
 description("Tests basic functionality of DelayNode.");
 
-var sampleRate = 44100.0;
-
-var context;
-var toneBuffer;
-
-var renderLengthSeconds = 4;
-var delayTimeSeconds = 0.5;
-var toneLengthSeconds = 2;
-
-function createToneBuffer(frequency, numberOfCycles, sampleRate) {
-    var duration = numberOfCycles / frequency;
-    var sampleFrameLength = duration * sampleRate;
-    
-    var audioBuffer = context.createBuffer(1, sampleFrameLength, sampleRate);
-
-    var n = audioBuffer.length;
-    var data = ""
-
-    for (var i = 0; i < n; ++i)
-        data[i] = Math.sin(frequency * 2.0*Math.PI * i / sampleRate);
-
-    return audioBuffer;
-}
-
-function checkDelayedResult(event) {
-    var renderedBuffer = event.renderedBuffer;
-
-    var sourceData = toneBuffer.getChannelData(0);
-    var renderedData = renderedBuffer.getChannelData(0);
-    
-    var delayTimeFrames = delayTimeSeconds * sampleRate;
-    var toneLengthFrames = toneLengthSeconds * sampleRate;
-
-    var success = true;
-    
-    var n = renderedBuffer.length;
-    
-    for (var i = 0; i < n; ++i) {
-        if (i < delayTimeFrames) {
-            // Check that initial portion is 0 (since signal is delayed).
-            if (renderedData[i] != 0) {
-                success = false;
-                break;
-            }
-        } else if (i >= delayTimeFrames && i < delayTimeFrames + toneLengthFrames) {
-            // Make sure that the tone data is delayed by exactly the expected number of frames.
-            var j = i - delayTimeFrames;
-            if (renderedData[i] != sourceData[j]) {
-                success = false;
-                break;
-            }
-        } else {
-            // Make sure we have silence after the delayed tone.
-            if (renderedData[i] != 0) {
-                success = false;
-                break;
-            }
-        }    
-    }
-
-    if (success) {
-        testPassed("Test signal was correctly delayed.");
-    } else {
-        testFailed("Test signal was not correctly delayed.");
-    }
-
-    finishJSTest();
-}
-
 function runTest() {
     if (window.layoutTestController) {
         layoutTestController.dumpAsText();
@@ -92,8 +24,8 @@
     window.jsTestIsAsync = true;
         
     // Create offline audio context.
-    context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
-    toneBuffer = createToneBuffer(20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
+    var context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
+    var toneBuffer = createToneBuffer(context, 20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
     
     var bufferSource = context.createBufferSource();
     bufferSource.buffer = toneBuffer;
@@ -105,7 +37,7 @@
     delay.connect(context.destination);
     bufferSource.noteOn(0);
     
-    context._oncomplete_ = checkDelayedResult;
+    context._oncomplete_ = checkDelayedResult(toneBuffer);
     context.startRendering();
 }
 

Added: trunk/LayoutTests/webaudio/resources/delay-testing.js (0 => 96270)


--- trunk/LayoutTests/webaudio/resources/delay-testing.js	                        (rev 0)
+++ trunk/LayoutTests/webaudio/resources/delay-testing.js	2011-09-29 00:06:06 UTC (rev 96270)
@@ -0,0 +1,67 @@
+var sampleRate = 44100.0;
+
+var renderLengthSeconds = 4;
+var delayTimeSeconds = 0.5;
+var toneLengthSeconds = 2;
+
+function createToneBuffer(context, frequency, numberOfCycles, sampleRate) {
+    var duration = numberOfCycles / frequency;
+    var sampleFrameLength = duration * sampleRate;
+    
+    var audioBuffer = context.createBuffer(1, sampleFrameLength, sampleRate);
+
+    var n = audioBuffer.length;
+    var data = ""
+
+    for (var i = 0; i < n; ++i)
+        data[i] = Math.sin(frequency * 2.0*Math.PI * i / sampleRate);
+
+    return audioBuffer;
+}
+
+function checkDelayedResult(toneBuffer) {
+    return function(event) {
+        var renderedBuffer = event.renderedBuffer;
+
+        var sourceData = toneBuffer.getChannelData(0);
+        var renderedData = renderedBuffer.getChannelData(0);
+    
+        var delayTimeFrames = delayTimeSeconds * sampleRate;
+        var toneLengthFrames = toneLengthSeconds * sampleRate;
+
+        var success = true;
+    
+        var n = renderedBuffer.length;
+    
+        for (var i = 0; i < n; ++i) {
+            if (i < delayTimeFrames) {
+                // Check that initial portion is 0 (since signal is delayed).
+                if (renderedData[i] != 0) {
+                    success = false;
+                    break;
+                }
+            } else if (i >= delayTimeFrames && i < delayTimeFrames + toneLengthFrames) {
+                // Make sure that the tone data is delayed by exactly the expected number of frames.
+                var j = i - delayTimeFrames;
+                if (renderedData[i] != sourceData[j]) {
+                    success = false;
+                    break;
+                }
+            } else {
+                // Make sure we have silence after the delayed tone.
+                if (renderedData[i] != 0) {
+                    success = false;
+                    break;
+                }
+            }    
+        }
+
+        if (success) {
+            testPassed("Test signal was correctly delayed.");
+        } else {
+            testFailed("Test signal was not correctly delayed.");
+        }
+
+        finishJSTest();
+    }
+}

Modified: trunk/Source/WebCore/ChangeLog (96269 => 96270)


--- trunk/Source/WebCore/ChangeLog	2011-09-29 00:02:29 UTC (rev 96269)
+++ trunk/Source/WebCore/ChangeLog	2011-09-29 00:06:06 UTC (rev 96270)
@@ -1,3 +1,15 @@
+2011-09-28  Chris Rogers  <[email protected]>
+
+        DelayNode must set the context on delayTime AudioParam to support automation
+        https://bugs.webkit.org/show_bug.cgi?id=68828
+
+        Reviewed by Kenneth Russell.
+
+        Test: webaudio/delaynode-scheduling.html
+
+        * webaudio/DelayNode.cpp:
+        (WebCore::DelayNode::DelayNode):
+
 2011-09-28  Sergey Glazunov  <[email protected]>
 
         _javascript_ generated documents don't inherit the cookie URL

Modified: trunk/Source/WebCore/webaudio/DelayNode.cpp (96269 => 96270)


--- trunk/Source/WebCore/webaudio/DelayNode.cpp	2011-09-29 00:02:29 UTC (rev 96269)
+++ trunk/Source/WebCore/webaudio/DelayNode.cpp	2011-09-29 00:06:06 UTC (rev 96270)
@@ -34,6 +34,7 @@
     : AudioBasicProcessorNode(context, sampleRate)
 {
     m_processor = adoptPtr(new DelayProcessor(sampleRate, 1));    
+    delayTime()->setContext(context);
     setType(NodeTypeDelay);
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to