dom/media/webaudio/test/test_scriptProcessorNode_playbackTime1.html
author ui.dev <deniskisavi@gmail.com>
Sat, 25 Mar 2023 22:34:18 +0000
changeset 657948 735b73193dc663078843621b2eeccbc2d4abe328
parent 469641 ba6f655fd68963530c866d0d4a48c3db3d307777
permissions -rw-r--r--
Bug 1823719 - Convert toolkit/components/remotebrowserutils to ES modules. r=Standard8. Differential Revision: https://phabricator.services.mozilla.com/D173631

<!DOCTYPE HTML>
<html>
<head>
  <title>Test ScriptProcessorNode playbackTime for bug 970773</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">

SimpleTest.waitForExplicitFinish();

var context = new AudioContext();
const delay = 0.1;

function doTest() {
  const processorBufferLength = 256;
  // |currentTime| may include double precision floating point
  // rounding errors, so round to nearest integer sample to ignore these.
  var minimumPlaybackSample =
    Math.round(context.currentTime * context.sampleRate) +
    processorBufferLength;
  var sp = context.createScriptProcessor(processorBufferLength);
  sp.connect(context.destination);
  sp.onaudioprocess =
    function(e) {
      is(e.inputBuffer.length, processorBufferLength,
         "expected buffer length");
      var playbackSample = Math.round(e.playbackTime * context.sampleRate)
      ok(playbackSample >= minimumPlaybackSample,
         "playbackSample " + playbackSample +
         " beyond expected minimum " + minimumPlaybackSample);
      sp.onaudioprocess = null;
      SimpleTest.finish();
    };
}

// Wait until AudioDestinationNode has accumulated enough 'extra' time so that
// a failure would be easily detected.
(function waitForExtraTime() {
  if (context.currentTime < delay) {
    SimpleTest.executeSoon(waitForExtraTime);
  } else {
    doTest();
  }
})();

</script>
</pre>
</body>
</html>