tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

acquire-the-content.html (2877B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <title>Test for AudioBuffer's "acquire the content" operation</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script>
      7 const SAMPLERATE = 8000;
      8 const LENGTH = 128;
      9 
     10 var tests = {
     11  "AudioBufferSourceNode setter set with non-null buffer": function(oac) {
     12    var buf = oac.createBuffer(1, LENGTH, SAMPLERATE)
     13    var bs = new AudioBufferSourceNode(oac);
     14    var channelData = buf.getChannelData(0);
     15    for (var i = 0; i < channelData.length; i++) {
     16      channelData[i] = 1.0;
     17    }
     18    bs.buffer = buf;
     19    bs.start(); // This acquires the content since buf is not null
     20    for (var i = 0; i < channelData.length; i++) {
     21      channelData[i] = 0.5;
     22    }
     23    allSamplesAtOne(buf, "reading back");
     24    bs.connect(oac.destination);
     25    return oac.startRendering();
     26  },
     27  "AudioBufferSourceNode buffer setter set with null" : (oac) => {
     28    var buf = oac.createBuffer(1, LENGTH, SAMPLERATE)
     29    var bs = new AudioBufferSourceNode(oac);
     30    var channelData = buf.getChannelData(0);
     31    for (var i = 0; i < channelData.length; i++) {
     32      channelData[i] = 1.0;
     33    }
     34    bs.buffer = null;
     35    bs.start(); // This does not acquire the content
     36    bs.buffer = buf; // This does
     37    for (var i = 0; i < channelData.length; i++) {
     38      channelData[i] = 0.5;
     39    }
     40    allSamplesAtOne(buf, "reading back");
     41    bs.connect(oac.destination);
     42    return oac.startRendering();
     43  },
     44  "ConvolverNode": (oac) => {
     45    var buf = oac.createBuffer(1, LENGTH, SAMPLERATE)
     46    var impulse = oac.createBuffer(1, 1, SAMPLERATE)
     47    var bs = new AudioBufferSourceNode(oac);
     48    var convolver = new ConvolverNode(oac, {disableNormalization: true});
     49 
     50    impulse.getChannelData(0)[0] = 1.0; // unit impulse function
     51    convolver.buffer = impulse; // This does acquire the content
     52    impulse.getChannelData(0)[0] = 0.5;
     53 
     54    var channelData = buf.getChannelData(0);
     55    for (var i = 0; i < channelData.length; i++) {
     56      channelData[i] = 1.0;
     57    }
     58    bs.buffer = buf;
     59    bs.start();
     60 
     61    bs.connect(convolver).connect(oac.destination);
     62    return oac.startRendering();
     63  }
     64 };
     65 
     66 function allSamplesAtOne(audiobuffer, location) {
     67  var buf = audiobuffer.getChannelData(0);
     68  for (var i = 0; i < buf.length; i++) {
     69    // The convolver can introduce a slight numerical error.
     70    if (Math.abs(buf[i] - 1.0) > 0.0001) {
     71      assert_true(false, `Invalid value at index ${i}, expected close to 1.0, found ${buf[i]} when ${location}`)
     72      return Promise.reject();
     73    }
     74  }
     75  assert_true(true, `Buffer unmodified when ${location}.`);
     76  return Promise.resolve();
     77 }
     78 
     79 for (const test of Object.keys(tests)) {
     80  promise_test(async function(t) {
     81    var buf = await tests[test](new OfflineAudioContext(1, LENGTH, SAMPLERATE));
     82    return allSamplesAtOne(buf, "rendering");
     83  }, test);
     84 };
     85 </script>