Changeset 96270 in webkit


Ignore:
Timestamp:
Sep 28, 2011 5:06:06 PM (13 years ago)
Author:
crogers@google.com
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):

Location:
trunk
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r96269 r96270  
     12011-09-28  Chris Rogers  <crogers@google.com>
     2
     3        DelayNode must set the context on delayTime AudioParam to support automation
     4        https://bugs.webkit.org/show_bug.cgi?id=68828
     5
     6        Reviewed by Kenneth Russell.
     7
     8        * webaudio/delaynode-scheduling-expected.txt: Added.
     9        * webaudio/delaynode-scheduling.html: Added.
     10        * webaudio/delaynode.html:
     11        * webaudio/resources/delay-testing.js: Added.
     12        (createToneBuffer):
     13        (checkDelayedResult.return.var):
     14        (checkDelayedResult):
     15
    1162011-09-28  Ryosuke Niwa  <rniwa@webkit.org>
    217
  • trunk/LayoutTests/webaudio/delaynode.html

    r94969 r96270  
    55<link rel="stylesheet" href="../fast/js/resources/js-test-style.css"/>
    66<script src="../fast/js/resources/js-test-pre.js"></script>
     7<script src="resources/delay-testing.js"></script>
    78</head>
    89
     
    1516description("Tests basic functionality of DelayNode.");
    1617
    17 var sampleRate = 44100.0;
    18 
    19 var context;
    20 var toneBuffer;
    21 
    22 var renderLengthSeconds = 4;
    23 var delayTimeSeconds = 0.5;
    24 var toneLengthSeconds = 2;
    25 
    26 function createToneBuffer(frequency, numberOfCycles, sampleRate) {
    27     var duration = numberOfCycles / frequency;
    28     var sampleFrameLength = duration * sampleRate;
    29    
    30     var audioBuffer = context.createBuffer(1, sampleFrameLength, sampleRate);
    31 
    32     var n = audioBuffer.length;
    33     var data = audioBuffer.getChannelData(0);
    34 
    35     for (var i = 0; i < n; ++i)
    36         data[i] = Math.sin(frequency * 2.0*Math.PI * i / sampleRate);
    37 
    38     return audioBuffer;
    39 }
    40 
    41 function checkDelayedResult(event) {
    42     var renderedBuffer = event.renderedBuffer;
    43 
    44     var sourceData = toneBuffer.getChannelData(0);
    45     var renderedData = renderedBuffer.getChannelData(0);
    46    
    47     var delayTimeFrames = delayTimeSeconds * sampleRate;
    48     var toneLengthFrames = toneLengthSeconds * sampleRate;
    49 
    50     var success = true;
    51    
    52     var n = renderedBuffer.length;
    53    
    54     for (var i = 0; i < n; ++i) {
    55         if (i < delayTimeFrames) {
    56             // Check that initial portion is 0 (since signal is delayed).
    57             if (renderedData[i] != 0) {
    58                 success = false;
    59                 break;
    60             }
    61         } else if (i >= delayTimeFrames && i < delayTimeFrames + toneLengthFrames) {
    62             // Make sure that the tone data is delayed by exactly the expected number of frames.
    63             var j = i - delayTimeFrames;
    64             if (renderedData[i] != sourceData[j]) {
    65                 success = false;
    66                 break;
    67             }
    68         } else {
    69             // Make sure we have silence after the delayed tone.
    70             if (renderedData[i] != 0) {
    71                 success = false;
    72                 break;
    73             }
    74         }   
    75     }
    76 
    77     if (success) {
    78         testPassed("Test signal was correctly delayed.");
    79     } else {
    80         testFailed("Test signal was not correctly delayed.");
    81     }
    82 
    83     finishJSTest();
    84 }
    85 
    8618function runTest() {
    8719    if (window.layoutTestController) {
     
    9325       
    9426    // Create offline audio context.
    95     context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
    96     toneBuffer = createToneBuffer(20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
     27    var context = new webkitAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);
     28    var toneBuffer = createToneBuffer(context, 20, 20 * toneLengthSeconds, sampleRate); // 20Hz tone
    9729   
    9830    var bufferSource = context.createBufferSource();
     
    10638    bufferSource.noteOn(0);
    10739   
    108     context.oncomplete = checkDelayedResult;
     40    context.oncomplete = checkDelayedResult(toneBuffer);
    10941    context.startRendering();
    11042}
  • trunk/Source/WebCore/ChangeLog

    r96260 r96270  
     12011-09-28  Chris Rogers  <crogers@google.com>
     2
     3        DelayNode must set the context on delayTime AudioParam to support automation
     4        https://bugs.webkit.org/show_bug.cgi?id=68828
     5
     6        Reviewed by Kenneth Russell.
     7
     8        Test: webaudio/delaynode-scheduling.html
     9
     10        * webaudio/DelayNode.cpp:
     11        (WebCore::DelayNode::DelayNode):
     12
    1132011-09-28  Sergey Glazunov  <serg.glazunov@gmail.com>
    214
  • trunk/Source/WebCore/webaudio/DelayNode.cpp

    r95901 r96270  
    3535{
    3636    m_processor = adoptPtr(new DelayProcessor(sampleRate, 1));   
     37    delayTime()->setContext(context);
    3738    setType(NodeTypeDelay);
    3839}
Note: See TracChangeset for help on using the changeset viewer.