tor-browser

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

test-analysernode.html (7446B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <script src="/resources/testharness.js"></script>
      6  <script src="/resources/testharnessreport.js"></script>
      7  <script>
      8    function testNode() {
      9      var context = new AudioContext();
     10      var buffer = context.createBuffer(1, 2048, context.sampleRate);
     11      for (var i = 0; i < 2048; ++i) {
     12        buffer.getChannelData(0)[i] = Math.sin(
     13          440 * 2 * Math.PI * i / context.sampleRate
     14        );
     15      }
     16 
     17      var destination = context.destination;
     18 
     19      var source = context.createBufferSource();
     20 
     21      var analyser = context.createAnalyser();
     22 
     23      source.buffer = buffer;
     24 
     25      source.connect(analyser);
     26      analyser.connect(destination);
     27 
     28      assert_equals(
     29        analyser.channelCount,
     30        2,
     31        "analyser node has 2 input channels by default"
     32      );
     33      assert_equals(
     34        analyser.channelCountMode,
     35        "max",
     36        "Correct channelCountMode for the analyser node"
     37      );
     38      assert_equals(
     39        analyser.channelInterpretation,
     40        "speakers",
     41        "Correct channelCountInterpretation for the analyser node"
     42      );
     43 
     44      assert_equals(
     45        analyser.fftSize,
     46        2048,
     47        "Correct default value for fftSize"
     48      );
     49      assert_equals(
     50        analyser.frequencyBinCount,
     51        1024,
     52        "Correct default value for frequencyBinCount"
     53      );
     54      assert_throws_dom("INDEX_SIZE_ERR", function() {
     55        analyser.fftSize = 0;
     56      });
     57      assert_throws_dom("INDEX_SIZE_ERR", function() {
     58        analyser.fftSize = 1;
     59      });
     60      assert_throws_dom("INDEX_SIZE_ERR", function() {
     61        analyser.fftSize = 8;
     62      });
     63      assert_throws_dom("INDEX_SIZE_ERR", function() {
     64        analyser.fftSize = 100;
     65      }); // non-power of two
     66      assert_throws_dom("INDEX_SIZE_ERR", function() {
     67        analyser.fftSize = 2049;
     68      });
     69      assert_throws_dom("INDEX_SIZE_ERR", function() {
     70        analyser.fftSize = 4097;
     71      });
     72      assert_throws_dom("INDEX_SIZE_ERR", function() {
     73        analyser.fftSize = 8193;
     74      });
     75      assert_throws_dom("INDEX_SIZE_ERR", function() {
     76        analyser.fftSize = 16385;
     77      });
     78      assert_throws_dom("INDEX_SIZE_ERR", function() {
     79        analyser.fftSize = 32769;
     80      });
     81      assert_throws_dom("INDEX_SIZE_ERR", function() {
     82        analyser.fftSize = 65536;
     83      });
     84      analyser.fftSize = 1024;
     85      assert_equals(
     86        analyser.frequencyBinCount,
     87        512,
     88        "Correct new value for frequencyBinCount"
     89      );
     90 
     91      assert_equals(
     92        analyser.minDecibels,
     93        -100,
     94        "Correct default value for minDecibels"
     95      );
     96      assert_equals(
     97        analyser.maxDecibels,
     98        -30,
     99        "Correct default value for maxDecibels"
    100      );
    101      assert_throws_dom("INDEX_SIZE_ERR", function() {
    102        analyser.minDecibels = -30;
    103      });
    104      assert_throws_dom("INDEX_SIZE_ERR", function() {
    105        analyser.minDecibels = -29;
    106      });
    107      assert_throws_dom("INDEX_SIZE_ERR", function() {
    108        analyser.maxDecibels = -100;
    109      });
    110      assert_throws_dom("INDEX_SIZE_ERR", function() {
    111        analyser.maxDecibels = -101;
    112      });
    113 
    114      assert_true(
    115        Math.abs(analyser.smoothingTimeConstant - 0.8) < 0.001,
    116        "Correct default value for smoothingTimeConstant"
    117      );
    118      assert_throws_dom("INDEX_SIZE_ERR", function() {
    119        analyser.smoothingTimeConstant = -0.1;
    120      });
    121      assert_throws_dom("INDEX_SIZE_ERR", function() {
    122        analyser.smoothingTimeConstant = 1.1;
    123      });
    124      analyser.smoothingTimeConstant = 0;
    125      analyser.smoothingTimeConstant = 1;
    126    }
    127 
    128    function testConstructor() {
    129      var context = new AudioContext();
    130 
    131      var analyser = new AnalyserNode(context);
    132      assert_equals(
    133        analyser.channelCount,
    134        2,
    135        "analyser node has 2 input channels by default"
    136      );
    137      assert_equals(
    138        analyser.channelCountMode,
    139        "max",
    140        "Correct channelCountMode for the analyser node"
    141      );
    142      assert_equals(
    143        analyser.channelInterpretation,
    144        "speakers",
    145        "Correct channelCountInterpretation for the analyser node"
    146      );
    147 
    148      assert_equals(
    149        analyser.fftSize,
    150        2048,
    151        "Correct default value for fftSize"
    152      );
    153      assert_equals(
    154        analyser.frequencyBinCount,
    155        1024,
    156        "Correct default value for frequencyBinCount"
    157      );
    158      assert_equals(
    159        analyser.minDecibels,
    160        -100,
    161        "Correct default value for minDecibels"
    162      );
    163      assert_equals(
    164        analyser.maxDecibels,
    165        -30,
    166        "Correct default value for maxDecibels"
    167      );
    168      assert_true(
    169        Math.abs(analyser.smoothingTimeConstant - 0.8) < 0.001,
    170        "Correct default value for smoothingTimeConstant"
    171      );
    172 
    173      assert_throws_dom("INDEX_SIZE_ERR", function() {
    174        analyser = new AnalyserNode(context, { fftSize: 0 });
    175      });
    176      assert_throws_dom("INDEX_SIZE_ERR", function() {
    177        analyser = new AnalyserNode(context, { fftSize: 1 });
    178      });
    179      assert_throws_dom("INDEX_SIZE_ERR", function() {
    180        analyser = new AnalyserNode(context, { fftSize: 8 });
    181      });
    182      assert_throws_dom("INDEX_SIZE_ERR", function() {
    183        analyser = new AnalyserNode(context, { fftSize: 100 });
    184      });
    185      assert_throws_dom("INDEX_SIZE_ERR", function() {
    186        analyser = new AnalyserNode(context, { fftSize: 2049 });
    187      });
    188      assert_throws_dom("INDEX_SIZE_ERR", function() {
    189        analyser = new AnalyserNode(context, { fftSize: 4097 });
    190      });
    191      assert_throws_dom("INDEX_SIZE_ERR", function() {
    192        analyser = new AnalyserNode(context, { fftSize: 8193 });
    193      });
    194      assert_throws_dom("INDEX_SIZE_ERR", function() {
    195        analyser = new AnalyserNode(context, { fftSize: 16385 });
    196      });
    197      assert_throws_dom("INDEX_SIZE_ERR", function() {
    198        analyser = new AnalyserNode(context, { fftSize: 32769 });
    199      });
    200      assert_throws_dom("INDEX_SIZE_ERR", function() {
    201        analyser = new AnalyserNode(context, { fftSize: 65536 });
    202      });
    203      analyser = new AnalyserNode(context, { fftSize: 1024 });
    204      assert_equals(
    205        analyser.frequencyBinCount,
    206        512,
    207        "Correct new value for frequencyBinCount"
    208      );
    209 
    210      assert_throws_dom("INDEX_SIZE_ERR", function() {
    211        analyser = new AnalyserNode(context, { minDecibels: -30 });
    212      });
    213      assert_throws_dom("INDEX_SIZE_ERR", function() {
    214        analyser = new AnalyserNode(context, { minDecibels: -29 });
    215      });
    216      assert_throws_dom("INDEX_SIZE_ERR", function() {
    217        analyser = new AnalyserNode(context, { maxDecibels: -100 });
    218      });
    219      assert_throws_dom("INDEX_SIZE_ERR", function() {
    220        analyser = new AnalyserNode(context, { maxDecibels: -101 });
    221      });
    222 
    223      assert_throws_dom("INDEX_SIZE_ERR", function() {
    224        analyser = new AnalyserNode(context, { smoothingTimeConstant: -0.1 });
    225      });
    226      assert_throws_dom("INDEX_SIZE_ERR", function() {
    227        analyser = new AnalyserNode(context, { smoothingTimeConstant: -1.1 });
    228      });
    229      analyser = new AnalyserNode(context, { smoothingTimeConstant: 0 });
    230      analyser = new AnalyserNode(context, { smoothingTimeConstant: 1 });
    231    }
    232    test(testNode, "Test AnalyserNode API");
    233    test(testConstructor, "Test AnalyserNode's ctor API");
    234  </script>
    235 </head>
    236 </body>
    237 </html>