Index: third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html b/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html |
index a20d05e2eee60cdc8983e921c753f2c5e195f69c..bf8f7ff69182b317ae38bb0522fe5f12fd84ccb3 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html |
+++ b/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html |
@@ -1,38 +1,35 @@ |
-<!doctype html> |
+<!DOCTYPE html> |
<html> |
<head> |
+ <title> |
+ Test Analyser getFloatFrequencyData and getByteFrequencyData, Smoothing |
+ </title> |
<script src="../../resources/testharness.js"></script> |
- <script src="../../resources/testharnessreport.js"></script> |
+ <script src="../../resources/testharnessreport.js"></script> |
<script src="../resources/audit-util.js"></script> |
<script src="../resources/audit.js"></script> |
<script src="../resources/realtimeanalyser-testing.js"></script> |
<script src="../resources/fft.js"></script> |
- <title>Test Analyser getFloatFrequencyData and getByteFrequencyData, Smoothing</title> |
- |
</head> |
- |
<body> |
- <script> |
- // Use a power of two to eliminate any round-off in the computation of the times for |
- // context.suspend(). |
+ <script id="layout-test-code"> |
+ // Use a power of two to eliminate any round-off in the computation of the |
+ // times for context.suspend(). |
let sampleRate = 32768; |
- // The largest FFT size for the analyser node is 32768. We want to render longer than this so |
- // that we have at least one complete buffer of data of 32768 samples. |
+ // The largest FFT size for the analyser node is 32768. We want to render |
+ // longer than this so that we have at least one complete buffer of data |
+ // of 32768 samples. |
let renderFrames = 2 * 32768; |
let renderDuration = renderFrames / sampleRate; |
let audit = Audit.createTaskRunner(); |
// Do one basic test of smoothing of the FFT data. |
- audit.define("smoothing test", (task, should) => { |
- // Test only 512-point FFT. The size isn't too important as long as it's greater than 128 |
- // (a rendering quantum). |
- let options = { |
- order: 9, |
- smoothing: 0.5, |
- floatRelError: 5.9207e-6 |
- }; |
+ audit.define('smoothing test', (task, should) => { |
+ // Test only 512-point FFT. The size isn't too important as long as |
+ // it's greater than 128 (a rendering quantum). |
+ let options = {order: 9, smoothing: 0.5, floatRelError: 5.9207e-6}; |
let success = true; |
@@ -46,76 +43,84 @@ |
// Stop after one analyser frame to get the initial FFT |
let suspendFrame = analyser.fftSize; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- let timeData = new Float32Array(analyser.fftSize); |
- let freqData = new Float32Array(analyser.frequencyBinCount); |
- analyser.getFloatTimeDomainData(timeData); |
- analyser.getFloatFrequencyData(freqData); |
- |
- let expectedFreq = computeFFTMagnitude(timeData, options.order); |
- smoothFFT(smoothedFloatResult, expectedFreq, options.smoothing); |
- |
- let message = "First " + analyser.fftSize + "-point FFT at frame " + (context.currentTime * |
- sampleRate); |
- let comparison = compareFloatFreq(message, freqData, smoothedFloatResult.map( |
- linearToDb), should, options); |
- success = success && comparison.success; |
- |
- // Test the byte frequency data. |
- let byteFreqData = new Uint8Array(analyser.frequencyBinCount); |
- analyser.getByteFrequencyData(byteFreqData); |
- |
- // Convert the expected float frequency data to byte data. |
- let expectedByteData = convertFloatToByte(smoothedFloatResult.map(linearToDb), |
- analyser.minDecibels, analyser.maxDecibels); |
- |
- should(byteFreqData, analyser.fftSize + "-point byte FFT") |
- .beCloseToArray(expectedByteData, 0); |
- |
- }).then(context.resume.bind(context)); |
- |
- // Skip an analyser frame and grab another to verify that the smoothing is done correctly. |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ let timeData = new Float32Array(analyser.fftSize); |
+ let freqData = new Float32Array(analyser.frequencyBinCount); |
+ analyser.getFloatTimeDomainData(timeData); |
+ analyser.getFloatFrequencyData(freqData); |
+ |
+ let expectedFreq = computeFFTMagnitude(timeData, options.order); |
+ smoothFFT(smoothedFloatResult, expectedFreq, options.smoothing); |
+ |
+ let message = 'First ' + analyser.fftSize + |
+ '-point FFT at frame ' + (context.currentTime * sampleRate); |
+ let comparison = compareFloatFreq( |
+ message, freqData, smoothedFloatResult.map(linearToDb), |
+ should, options); |
+ success = success && comparison.success; |
+ |
+ // Test the byte frequency data. |
+ let byteFreqData = new Uint8Array(analyser.frequencyBinCount); |
+ analyser.getByteFrequencyData(byteFreqData); |
+ |
+ // Convert the expected float frequency data to byte data. |
+ let expectedByteData = convertFloatToByte( |
+ smoothedFloatResult.map(linearToDb), analyser.minDecibels, |
+ analyser.maxDecibels); |
+ |
+ should(byteFreqData, analyser.fftSize + '-point byte FFT') |
+ .beCloseToArray(expectedByteData, 0); |
+ |
+ }) |
+ .then(context.resume.bind(context)); |
+ |
+ // Skip an analyser frame and grab another to verify that the smoothing |
+ // is done correctly. |
suspendFrame += 2 * analyser.fftSize; |
- context.suspend(suspendFrame / sampleRate).then(function () { |
- let timeData = new Float32Array(analyser.fftSize); |
- let freqDataInDb = new Float32Array(analyser.frequencyBinCount); |
- |
- // Grab the time domain and frequency domain data |
- analyser.getFloatTimeDomainData(timeData); |
- analyser.getFloatFrequencyData(freqDataInDb); |
- |
- let newFreqData = computeFFTMagnitude(timeData, options.order); |
- // Smooth the data together |
- |
- smoothFFT(smoothedFloatResult, newFreqData, options.smoothing); |
- let message = "Smoothed " + analyser.fftSize + "-point FFT at frame " + |
- (context.currentTime * sampleRate); |
- let comparison = compareFloatFreq(message, |
- freqDataInDb, smoothedFloatResult.map(linearToDb), should, { |
- order: options.order, |
- smoothing: options.smoothing, |
- floatRelError: 2.5332e-5 |
- }); |
- success = success && comparison.success; |
- |
- // Test the byte frequency data. |
- let byteFreqData = new Uint8Array(analyser.frequencyBinCount); |
- analyser.getByteFrequencyData(byteFreqData); |
- |
- // Convert the expected float frequency data to byte data. |
- let expectedByteData = convertFloatToByte(smoothedFloatResult.map(linearToDb), |
- analyser.minDecibels, analyser.maxDecibels); |
- |
- should(byteFreqData, analyser.fftSize + "-point byte FFT") |
- .beCloseToArray(expectedByteData, 0); |
- |
- }).then(context.resume.bind(context)); |
+ context.suspend(suspendFrame / sampleRate) |
+ .then(function() { |
+ let timeData = new Float32Array(analyser.fftSize); |
+ let freqDataInDb = new Float32Array(analyser.frequencyBinCount); |
+ |
+ // Grab the time domain and frequency domain data |
+ analyser.getFloatTimeDomainData(timeData); |
+ analyser.getFloatFrequencyData(freqDataInDb); |
+ |
+ let newFreqData = computeFFTMagnitude(timeData, options.order); |
+ // Smooth the data together |
+ |
+ smoothFFT(smoothedFloatResult, newFreqData, options.smoothing); |
+ let message = 'Smoothed ' + analyser.fftSize + |
+ '-point FFT at frame ' + (context.currentTime * sampleRate); |
+ let comparison = compareFloatFreq( |
+ message, freqDataInDb, smoothedFloatResult.map(linearToDb), |
+ should, { |
+ order: options.order, |
+ smoothing: options.smoothing, |
+ floatRelError: 2.5332e-5 |
+ }); |
+ success = success && comparison.success; |
+ |
+ // Test the byte frequency data. |
+ let byteFreqData = new Uint8Array(analyser.frequencyBinCount); |
+ analyser.getByteFrequencyData(byteFreqData); |
+ |
+ // Convert the expected float frequency data to byte data. |
+ let expectedByteData = convertFloatToByte( |
+ smoothedFloatResult.map(linearToDb), analyser.minDecibels, |
+ analyser.maxDecibels); |
+ |
+ should(byteFreqData, analyser.fftSize + '-point byte FFT') |
+ .beCloseToArray(expectedByteData, 0); |
+ |
+ }) |
+ .then(context.resume.bind(context)); |
context.startRendering().then(() => task.done()); |
}); |
audit.run(); |
- |
</script> |
</body> |
</html> |