| Index: third_party/WebKit/LayoutTests/webaudio/resources/realtimeanalyser-testing.js
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/resources/realtimeanalyser-testing.js b/third_party/WebKit/LayoutTests/webaudio/resources/realtimeanalyser-testing.js
|
| index 7265827995cf24fc47f0678e340a2c0e9bb73fb0..17441d81213817f71355eef6a96356c7093a27e1 100644
|
| --- a/third_party/WebKit/LayoutTests/webaudio/resources/realtimeanalyser-testing.js
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/resources/realtimeanalyser-testing.js
|
| @@ -1,124 +1,120 @@
|
| function createGraph(options) {
|
| - var context = new OfflineAudioContext(1, renderFrames, sampleRate);
|
| + let context = new OfflineAudioContext(1, renderFrames, sampleRate);
|
|
|
| - // Use a default sawtooth wave for the test signal. We want something is a
|
| - // bit more harmonic content than a sine wave, but otherwise it doesn't
|
| - // really matter.
|
| - var src = context.createOscillator();
|
| - src.type = "sawtooth";
|
| + // Use a default sawtooth wave for the test signal. We want something is a
|
| + // bit more harmonic content than a sine wave, but otherwise it doesn't
|
| + // really matter.
|
| + let src = context.createOscillator();
|
| + src.type = 'sawtooth';
|
|
|
| - var analyser = context.createAnalyser();
|
| - analyser.fftSize = Math.pow(2, options.order);
|
| - analyser.smoothingTimeConstant = options.smoothing || 0;
|
| - analyser.minDecibels = options.minDecibels || analyser.minDecibels;
|
| + let analyser = context.createAnalyser();
|
| + analyser.fftSize = Math.pow(2, options.order);
|
| + analyser.smoothingTimeConstant = options.smoothing || 0;
|
| + analyser.minDecibels = options.minDecibels || analyser.minDecibels;
|
|
|
| - // Connect the nodes together and start the source.
|
| - src.connect(analyser);
|
| - analyser.connect(context.destination);
|
| + // Connect the nodes together and start the source.
|
| + src.connect(analyser);
|
| + analyser.connect(context.destination);
|
|
|
| - src.start();
|
| + src.start();
|
|
|
| - return {
|
| - context: context,
|
| - analyser: analyser,
|
| - };
|
| + return {
|
| + context: context,
|
| + analyser: analyser,
|
| + };
|
| }
|
|
|
| // Apply the windowing function, in place.
|
| function applyWindow(timeData) {
|
| - var length = timeData.length;
|
| - var alpha = 0.16;
|
| - var a0 = (1 - alpha) / 2;
|
| - var a1 = 0.5;
|
| - var a2 = alpha / 2;
|
| - var omega = 2 * Math.PI / length;
|
| -
|
| - for (var k = 0; k < length; ++k) {
|
| - var w = a0 - a1 * Math.cos(omega * k) + a2 * Math.cos(2 * omega *
|
| - k);
|
| - timeData[k] *= w;
|
| - }
|
| + let length = timeData.length;
|
| + let alpha = 0.16;
|
| + let a0 = (1 - alpha) / 2;
|
| + let a1 = 0.5;
|
| + let a2 = alpha / 2;
|
| + let omega = 2 * Math.PI / length;
|
| +
|
| + for (let k = 0; k < length; ++k) {
|
| + let w = a0 - a1 * Math.cos(omega * k) + a2 * Math.cos(2 * omega * k);
|
| + timeData[k] *= w;
|
| + }
|
| }
|
|
|
| // Compute the FFT magnitude of |timeData|.
|
| function computeFFTMagnitude(timeData, order) {
|
| - // Compute the expected frequency response. First, apply the window.
|
| - // Compute the forward FFT.
|
| - applyWindow(timeData);
|
| -
|
| - var fft = new FFT(order);
|
| - var fftSize = Math.pow(2, order);
|
| - var fftr = new Float32Array(fftSize);
|
| - var ffti = new Float32Array(fftSize);
|
| - fft.rfft(timeData, fftr, ffti);
|
| -
|
| - // Compute the magnitude of the expected result.
|
| - var expected = new Float32Array(fftSize / 2);
|
| - for (var k = 0; k < expected.length; ++k)
|
| - expected[k] = Math.hypot(fftr[k], ffti[k]) / fftSize;
|
| -
|
| - return expected;
|
| + // Compute the expected frequency response. First, apply the window.
|
| + // Compute the forward FFT.
|
| + applyWindow(timeData);
|
| +
|
| + let fft = new FFT(order);
|
| + let fftSize = Math.pow(2, order);
|
| + let fftr = new Float32Array(fftSize);
|
| + let ffti = new Float32Array(fftSize);
|
| + fft.rfft(timeData, fftr, ffti);
|
| +
|
| + // Compute the magnitude of the expected result.
|
| + let expected = new Float32Array(fftSize / 2);
|
| + for (let k = 0; k < expected.length; ++k)
|
| + expected[k] = Math.hypot(fftr[k], ffti[k]) / fftSize;
|
| +
|
| + return expected;
|
| }
|
|
|
| // Convert dB value to linear value.
|
| function dbToLinear(x) {
|
| - return Math.pow(10, x / 20);
|
| + return Math.pow(10, x / 20);
|
| }
|
|
|
| // Convert linear value to dB.
|
| function linearToDb(x) {
|
| - return 20 * Math.log10(x);
|
| + return 20 * Math.log10(x);
|
| }
|
|
|
| // Clip the FFT magnitude so that values below |limit| are set to |limit|. The
|
| // FFT must be in dB. The input array is clipped in place.
|
| function clipMagnitude(limit, x) {
|
| - for (var k = 0; k < x.length; ++k)
|
| - x[k] = Math.max(limit, x[k])
|
| + for (let k = 0; k < x.length; ++k)
|
| + x[k] = Math.max(limit, x[k])
|
| }
|
|
|
| -// Compare the float frequency data in dB, |freqData|, against the expected value,
|
| -// |expectedFreq|. |options| is a dictionary with the property |floatRelError| for setting the
|
| -// comparison threshold and |precision| for setting the printed precision. Setting |precision| to
|
| -// |undefined| means printing all digits. If |options.precision} doesn't exist, use a default
|
| +// Compare the float frequency data in dB, |freqData|, against the expected
|
| +// value, |expectedFreq|. |options| is a dictionary with the property
|
| +// |floatRelError| for setting the comparison threshold and |precision| for
|
| +// setting the printed precision. Setting |precision| to |undefined| means
|
| +// printing all digits. If |options.precision} doesn't exist, use a default
|
| // precision.
|
| function compareFloatFreq(message, freqData, expectedFreq, should, options) {
|
| - // Any dB values below -100 is pretty much in the noise due to round-off in
|
| - // the (single-precisiion) FFT, so just clip those values to -100.
|
| - var lowerLimit = -100;
|
| - clipMagnitude(lowerLimit, expectedFreq);
|
| -
|
| - var actual = freqData;
|
| - clipMagnitude(lowerLimit, actual);
|
| -
|
| - var success = should(actual, message)
|
| - .beCloseToArray(expectedFreq, {
|
| - relativeThreshold: options.floatRelError || 0,
|
| - });
|
| -
|
| - return {
|
| - success: success,
|
| - expected: expectedFreq
|
| - };
|
| + // Any dB values below -100 is pretty much in the noise due to round-off in
|
| + // the (single-precisiion) FFT, so just clip those values to -100.
|
| + let lowerLimit = -100;
|
| + clipMagnitude(lowerLimit, expectedFreq);
|
| +
|
| + let actual = freqData;
|
| + clipMagnitude(lowerLimit, actual);
|
| +
|
| + let success = should(actual, message).beCloseToArray(expectedFreq, {
|
| + relativeThreshold: options.floatRelError || 0,
|
| + });
|
| +
|
| + return {success: success, expected: expectedFreq};
|
| }
|
|
|
| // Apply FFT smoothing, accumulating the result in |oldFreqData| with the new
|
| // data in |newFreqData|. The smoothing time constant is |smoothingTime|
|
| function smoothFFT(oldFreqData, newFreqData, smoothingTime) {
|
| - for (var k = 0; k < oldFreqData.length; ++k) {
|
| - var value = smoothingTime * oldFreqData[k] + (1 - smoothingTime) *
|
| - newFreqData[k];
|
| - oldFreqData[k] = value;
|
| - }
|
| + for (let k = 0; k < oldFreqData.length; ++k) {
|
| + let value =
|
| + smoothingTime * oldFreqData[k] + (1 - smoothingTime) * newFreqData[k];
|
| + oldFreqData[k] = value;
|
| + }
|
| }
|
|
|
| // Convert the float frequency data, |floatFreqData|, to byte values using the
|
| // dB limits |minDecibels| and |maxDecibels|. The new byte array is returned.
|
| function convertFloatToByte(floatFreqData, minDecibels, maxDecibels) {
|
| - var scale = 255 / (maxDecibels - minDecibels);
|
| + let scale = 255 / (maxDecibels - minDecibels);
|
|
|
| - return floatFreqData.map(function (x) {
|
| - var value = Math.floor(scale * (x - minDecibels));
|
| - return Math.min(255, Math.max(0, value));
|
| - });
|
| + return floatFreqData.map(function(x) {
|
| + let value = Math.floor(scale * (x - minDecibels));
|
| + return Math.min(255, Math.max(0, value));
|
| + });
|
| }
|
|
|