| OLD | NEW | 
|    1 <!doctype html> |    1 <!doctype html> | 
|    2 <html> |    2 <html> | 
|    3   <head> |    3   <head> | 
|    4     <script src="../../resources/testharness.js"></script> |    4     <script src="../../resources/testharness.js"></script> | 
|    5     <script src="../../resources/testharnessreport.js"></script>  |    5     <script src="../../resources/testharnessreport.js"></script>  | 
|    6     <script src="../resources/audit-util.js"></script> |    6     <script src="../resources/audit-util.js"></script> | 
|    7     <script src="../resources/audio-testing.js"></script> |    7     <script src="../resources/audit.js"></script> | 
|    8     <title>Test Analyser.getByteTimeDomainData()</title> |    8     <title>Test Analyser.getByteTimeDomainData()</title> | 
|    9   </head> |    9   </head> | 
|   10  |   10  | 
|   11   <body> |   11   <body> | 
|   12     <script> |   12     <script> | 
|   13       var sampleRate = 48000; |   13       var sampleRate = 48000; | 
|   14       // The size of the analyser frame.  Anything larger than 128 is ok, but sh
     ould be long enough |   14       // The size of the analyser frame.  Anything larger than 128 is ok, but sh
     ould be long enough | 
|   15       // to capture the peaks of the oscillator waveform. |   15       // to capture the peaks of the oscillator waveform. | 
|   16       var fftSize = 256; |   16       var fftSize = 256; | 
|   17       // Number of frames to render.  Should be greater than the fftSize, but is
      otherwise |   17       // Number of frames to render.  Should be greater than the fftSize, but is
      otherwise | 
|   18       // arbitrary. |   18       // arbitrary. | 
|   19       var renderFrames = 2 * fftSize; |   19       var renderFrames = 2 * fftSize; | 
|   20  |   20  | 
|   21       var audit = Audit.createTaskRunner(); |   21       var audit = Audit.createTaskRunner(); | 
|   22  |   22  | 
|   23       // Test that getByteTimeDomainData returns the correct values.  This test 
     depends on |   23       // Test that getByteTimeDomainData returns the correct values.  This test 
     depends on | 
|   24       // getFloatTimeDomainData returning the correct data (for which there is a
     lready a test). |   24       // getFloatTimeDomainData returning the correct data (for which there is a
     lready a test). | 
|   25       audit.defineTask("byte-data", function (done) { |   25       audit.define("byte-data", (task, should) =>  { | 
|   26         var context = new OfflineAudioContext(1, renderFrames, sampleRate); |   26         var context = new OfflineAudioContext(1, renderFrames, sampleRate); | 
|   27  |   27  | 
|   28         // Create a sawtooth as the signal under test.  A sine wave or triangle 
     wave would probably |   28         // Create a sawtooth as the signal under test.  A sine wave or triangle 
     wave would probably | 
|   29         // also work. |   29         // also work. | 
|   30         var src = context.createOscillator(); |   30         var src = context.createOscillator(); | 
|   31         src.type = "sawtooth"; |   31         src.type = "sawtooth"; | 
|   32         // Choose a frequency high enough that we get at least a full period in 
     one analyser fftSize |   32         // Choose a frequency high enough that we get at least a full period in 
     one analyser fftSize | 
|   33         // frame.  Otherwise, the frequency is arbitrary. |   33         // frame.  Otherwise, the frequency is arbitrary. | 
|   34         src.frequency.value = 440; |   34         src.frequency.value = 440; | 
|   35  |   35  | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|   62             var value = Math.fround(128 * Math.fround(1 + floatData[k])); |   62             var value = Math.fround(128 * Math.fround(1 + floatData[k])); | 
|   63             // Clip the result to lie in the range [0, 255]. |   63             // Clip the result to lie in the range [0, 255]. | 
|   64             expected[k] = Math.floor(Math.min(255, Math.max(0, value))); |   64             expected[k] = Math.floor(Math.min(255, Math.max(0, value))); | 
|   65           } |   65           } | 
|   66  |   66  | 
|   67           // Find the first index of the first sample that exceeds +1 or -1.  Th
     e test MUST have at |   67           // Find the first index of the first sample that exceeds +1 or -1.  Th
     e test MUST have at | 
|   68           // least one such value. |   68           // least one such value. | 
|   69           var indexMax = floatData.findIndex(function (x) { return x > 1; }); |   69           var indexMax = floatData.findIndex(function (x) { return x > 1; }); | 
|   70           var indexMin = floatData.findIndex(function (x) { return x < -1; }); |   70           var indexMin = floatData.findIndex(function (x) { return x < -1; }); | 
|   71        |   71        | 
|   72           Should("Index of first sample greater than +1", indexMax, { |   72           should(indexMax, "Index of first sample greater than +1").beGreaterTha
     nOrEqualTo(0); | 
|   73             brief: true |   73           should(indexMin, "Index of first sample less than -1").beGreaterThanOr
     EqualTo(0); | 
|   74           }).beGreaterThanOrEqualTo(0); |  | 
|   75           Should("Index of first sample less than -1", indexMin, { |  | 
|   76             brief: true |  | 
|   77           }).beGreaterThanOrEqualTo(0); |  | 
|   78  |   74  | 
|   79           // Verify explicitly that clipping happened correctly at the above ind
     ices. |   75           // Verify explicitly that clipping happened correctly at the above ind
     ices. | 
|   80           Should("Clip  " + floatData[indexMax].toPrecision(6) + ": byteData[" +
      indexMax + "]", |   76           should( | 
|   81             byteData[indexMax]).beEqualTo(255); |   77             byteData[indexMax], | 
|   82           Should("Clip " + floatData[indexMin].toPrecision(6) + ": byteData[" + 
     indexMin + "]", |   78             "Clip  " + floatData[indexMax].toPrecision(6) + ": byteData[" + | 
|   83             byteData[indexMin]).beEqualTo(0); |   79             indexMax + "]").beEqualTo(255); | 
 |   80           should( | 
 |   81             byteData[indexMin], | 
 |   82             "Clip " + floatData[indexMin].toPrecision(6) + ": byteData[" + | 
 |   83             indexMin + "]").beEqualTo(0); | 
|   84  |   84  | 
|   85           // Verify that all other samples are computed correctly. |   85           // Verify that all other samples are computed correctly. | 
|   86           Should("Byte data", byteData).beEqualToArray(expected); |   86           should(byteData, "Byte data").beEqualToArray(expected); | 
|   87         }).then(context.resume.bind(context)) |   87         }).then(context.resume.bind(context)) | 
|   88  |   88  | 
|   89         src.start(); |   89         src.start(); | 
|   90         context.startRendering().then(done); |   90         context.startRendering().then(() => task.done()); | 
|   91       }); |   91       }); | 
|   92  |   92  | 
|   93       audit.defineTask("finish", function (done) { |   93       audit.run(); | 
|   94         done(); |  | 
|   95       }); |  | 
|   96  |  | 
|   97       audit.runTasks(); |  | 
|   98     </script> |   94     </script> | 
|   99   </body> |   95   </body> | 
|  100 </html> |   96 </html> | 
| OLD | NEW |