content/media/webaudio/test/test_AudioBuffer.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <title>Test whether we can create an AudioContext interface</title>
     5   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     6   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     7 </head>
     8 <body>
     9 <pre id="test">
    10 <script src="webaudio.js" type="text/javascript"></script>
    11 <script class="testbody" type="text/javascript">
    13 SimpleTest.waitForExplicitFinish();
    14 addLoadEvent(function() {
    15   var context = new AudioContext();
    16   var buffer = context.createBuffer(2, 2048, context.sampleRate);
    17   SpecialPowers.gc(); // Make sure that our channels are accessible after GC
    18   ok(buffer, "Buffer was allocated successfully");
    19   is(buffer.sampleRate, context.sampleRate, "Correct sample rate");
    20   is(buffer.length, 2048, "Correct length");
    21   ok(Math.abs(buffer.duration - 2048 / context.sampleRate) < 0.0001, "Correct duration");
    22   is(buffer.numberOfChannels, 2, "Correct number of channels");
    23   for (var i = 0; i < buffer.numberOfChannels; ++i) {
    24     var buf = buffer.getChannelData(i);
    25     ok(buf, "Buffer index " + i + " exists");
    26     ok(buf instanceof Float32Array, "Result is a typed array");
    27     is(buf.length, buffer.length, "Correct length");
    28     var foundNonZero = false;
    29     for (var j = 0; j < buf.length; ++j) {
    30       if (buf[j] != 0) {
    31         foundNonZero = true;
    32         break;
    33       }
    34       buf[j] = j;
    35     }
    36     ok(!foundNonZero, "Buffer " + i + " should be initialized to 0");
    37   }
    39   // Now test copying the channel data out of a normal buffer
    40   var copy = new Float32Array(100);
    41   buffer.copyFromChannel(copy, 0, 1024);
    42   for (var i = 0; i < copy.length; ++i) {
    43     is(copy[i], 1024 + i, "Correct sample");
    44   }
    46   // Test copying the channel data out of a playing buffer
    47   var srcNode = context.createBufferSource();
    48   srcNode.buffer = buffer;
    49   srcNode.start(0);
    50   copy = new Float32Array(100);
    51   buffer.copyFromChannel(copy, 0, 1024);
    52   for (var i = 0; i < copy.length; ++i) {
    53     is(copy[i], 1024 + i, "Correct sample");
    54   }
    56   // Test copying to the channel data
    57   var newData = new Float32Array(200);
    58   buffer.copyToChannel(newData, 0, 100);
    59   var changedData = buffer.getChannelData(0);
    60   for (var i = 0; i < changedData.length; ++i) {
    61     if (i < 100 || i >= 300) {
    62       is(changedData[i], i, "Untouched sample");
    63     } else {
    64       is(changedData[i], 0, "Correct sample");
    65     }
    66   }
    68   // Now, neuter the array buffer
    69   var worker = new Worker("audioBufferSourceNodeNeutered_worker.js");
    70   var data = buffer.getChannelData(0).buffer;
    71   worker.postMessage(data, [data]);
    72   SpecialPowers.gc();
    74   expectException(function() {
    75     buffer.copyFromChannel(copy, 0, 1024);
    76   }, DOMException.INDEX_SIZE_ERR);
    78   expectException(function() {
    79     buffer.copyToChannel(newData, 0, 100);
    80   }, DOMException.INDEX_SIZE_ERR);
    82   expectException(function() {
    83     context.createBuffer(2, 2048, 7999);
    84   }, DOMException.INDEX_SIZE_ERR);
    85   expectException(function() {
    86     context.createBuffer(2, 2048, 192001);
    87   }, DOMException.INDEX_SIZE_ERR);
    88   context.createBuffer(2, 2048, 8000);  // no exception
    89   context.createBuffer(2, 2048, 192000); // no exception
    90   context.createBuffer(32, 2048, 48000); // no exception
    91   // Null length
    92   expectException(function() {
    93     context.createBuffer(2, 0, 48000);
    94   }, DOMException.INDEX_SIZE_ERR);
    95   // Null number of channels
    96   expectException(function() {
    97     context.createBuffer(0, 2048, 48000);
    98   }, DOMException.INDEX_SIZE_ERR);
    99   SimpleTest.finish();
   100 });
   102 </script>
   103 </pre>
   104 </body>
   105 </html>

mercurial