Index: third_party/WebKit/LayoutTests/webaudio/realtimeanalyser-float-data.html |
diff --git a/third_party/WebKit/LayoutTests/webaudio/realtimeanalyser-float-data.html b/third_party/WebKit/LayoutTests/webaudio/realtimeanalyser-float-data.html |
deleted file mode 100644 |
index 493882a4f5cad8bb203b7de626367f71dfd580f5..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/LayoutTests/webaudio/realtimeanalyser-float-data.html |
+++ /dev/null |
@@ -1,221 +0,0 @@ |
-<!doctype html> |
-<html> |
- <head> |
- <script src="../resources/js-test.js"></script> |
- <script src="resources/compatibility.js"></script> |
- <script src="resources/audit-util.js"></script> |
- <script src="resources/audio-testing.js"></script> |
- <title>Test AnalyserNode getFloatTimeDomainData</title> |
- </head> |
- |
- <body> |
- <script> |
- description("Test AnalyserNode getFloatTimeDomainData"); |
- window.jsTestIsAsync = true; |
- |
- // Use a power of two to eliminate any round-off in the computation of the times for |
- // context.suspend(). |
- var 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. |
- var renderFrames = 2 * 32768; |
- var renderDuration = renderFrames / sampleRate; |
- |
- var audit = Audit.createTaskRunner(); |
- |
- // Test that getFloatTimeDomainData handles short and long vectors correctly. |
- audit.defineTask("short and long vector", function (done) { |
- var fftSize = 32; |
- var graphInfo = createGraph(fftSize); |
- var context = graphInfo.context; |
- var analyser = graphInfo.analyser; |
- var signalBuffer = graphInfo.signalBuffer; |
- var signal = signalBuffer.getChannelData(0); |
- |
- var success = true; |
- var sampleFrame = 128; |
- |
- context.suspend(sampleFrame / sampleRate).then(function () { |
- var shortData = new Float32Array(8); |
- // Initialize the array to Infinity to represent uninitialize data. |
- shortData.fill(Infinity); |
- testPassed(shortData.length + "-element short array initialized to Infinity."); |
- |
- analyser.getFloatTimeDomainData(shortData); |
- testPassed("getFloatTimeDomainData(<" + shortData.length + "-element vector>)."); |
- |
- // The short array should be filled with the expected data, with no errors thrown. |
- |
- var expected = signal.subarray(sampleFrame - fftSize, sampleFrame); |
- success = Should(shortData.length + "-element time domain data", shortData) |
- .beEqualToArray(expected.subarray(0, shortData.length)) && success; |
- |
- var longData = new Float32Array(2 * fftSize); |
- // Initialize the array to Infinity to represent uninitialize data. |
- longData.fill(Infinity); |
- testPassed(longData.length + "-element long array initialized to Infinity."); |
- |
- analyser.getFloatTimeDomainData(longData); |
- testPassed("getFloatTimeDomainData(<" + longData.length + "-element vector>)."); |
- |
- // The long array should filled with the expected data but the extra elements should be |
- // untouched. |
- success = Should("longData.subarray(0, " + fftSize + ")", |
- longData.subarray(0, fftSize), { |
- numberOfArrayLog: 32 |
- }) |
- .beEqualToArray(expected) && success; |
- |
- success = Should("Unfilled elements longData.subarray(" + fftSize + ")", |
- longData.subarray(fftSize)) |
- .beConstantValueOf(Infinity) && success; |
- }).then(context.resume.bind(context)); |
- |
- context.startRendering().then(function (buffer) { |
- if (success) |
- testPassed("Long and short time domain arrays handled correctly.\n"); |
- else |
- testFailed("Long and short time domain arrays handled incorrectly.\n"); |
- }).then(done); |
- }); |
- |
- var success = true; |
- |
- // Generate tests for all valid FFT sizes for an AnalyserNode. |
- for (var k = 5; k < 16; ++k) { |
- var fftSize = Math.pow(2, k); |
- (function (n) { |
- // We grab a sample at (roughly) half the rendering duration. |
- audit.defineTask("fftSize " + n, function (done) { |
- runTest(n, renderDuration / 2).then(done); |
- }); |
- })(fftSize); |
- } |
- |
- audit.defineTask("summarize size tests", function (done) { |
- if (success) |
- testPassed("Time domain data contained the correct data for each size.\n"); |
- else |
- testFailed("Time domain data did not contain the correct data for each size.\n"); |
- |
- done(); |
- }); |
- |
- // Special case for a large size, but the sampling point is early. The initial part of the |
- // buffer should be filled with zeroes. |
- |
- audit.defineTask("initial zeroes", function (done) { |
- // Somewhat arbitrary size for the analyser. It should be greater than one rendering |
- // quantum. |
- var fftSize = 2048; |
- var graphInfo = createGraph(fftSize); |
- var context = graphInfo.context; |
- var analyser = graphInfo.analyser; |
- var signalBuffer = graphInfo.signalBuffer; |
- |
- var data = new Float32Array(fftSize); |
- |
- success = true; |
- // Suspend every rendering quantum and examine the analyser data. |
- for (var k = 128; k <= fftSize; k += 128) { |
- context.suspend(k / sampleRate).then(function () { |
- analyser.getFloatTimeDomainData(data); |
- var sampleFrame = context.currentTime * sampleRate; |
- |
- // Verify that the last k frames are not zero, but the first fftSize - k frames are. |
- var prefix = "At frame " + (sampleFrame - 1) + ": data.subarray"; |
- if (sampleFrame < fftSize) { |
- success = Should(prefix + "(0, " + (fftSize - sampleFrame) + ")", |
- data.subarray(0, fftSize - sampleFrame)) |
- .beConstantValueOf(0) && success; |
- } |
- |
- var signal = signalBuffer.getChannelData(0); |
- success = Should(prefix + "(" + (fftSize - sampleFrame) + ", " + fftSize + ")", |
- data.subarray(fftSize - sampleFrame, fftSize)) |
- .beEqualToArray(signal.subarray(0, sampleFrame)) && success; |
- }).then(context.resume.bind(context)); |
- } |
- |
- context.startRendering().then(function (b) { |
- if (success) { |
- testPassed( |
- "Time domain data contained initial zeroes and correct data as expected.\n"); |
- } else { |
- testFailed( |
- "Time domain data did not contain initial zeroes and correct data as expected.\n" |
- ); |
- } |
- |
- }).then(done); |
- }); |
- |
- audit.defineTask("finish", function (done) { |
- finishJSTest(); |
- done(); |
- }); |
- |
- audit.runTasks(); |
- |
- // Run test of an AnalyserNode with fftSize of |fftSize|, and with the data from the node |
- // being requested at time |sampletime|. The result from the analyser node is compared |
- // against the expected data. The result of startRendering() is returned. |
- function runTest(fftSize, sampleTime) { |
- var graphInfo = createGraph(fftSize); |
- var context = graphInfo.context; |
- var analyser = graphInfo.analyser; |
- var signalBuffer = graphInfo.signalBuffer; |
- |
- // Grab the data at the requested time. |
- context.suspend(sampleTime).then(function () { |
- var lastFrame = Math.floor(context.currentTime * sampleRate); |
- |
- // Grab the time domain data from the analyzer and compare against the expected result. |
- var actualFloatData = new Float32Array(fftSize); |
- analyser.getFloatTimeDomainData(actualFloatData); |
- |
- // Compare against the expected result. |
- var signal = signalBuffer.getChannelData(0); |
- var message = actualFloatData.length + "-point analyser time domain data"; |
- success = Should(message, actualFloatData) |
- .beEqualToArray(signal.subarray(lastFrame - actualFloatData.length, lastFrame)) && success; |
- }).then(context.resume.bind(context)); |
- |
- return context.startRendering(); |
- } |
- |
- // Create the audio graph with an AnalyserNode with fftSize |fftSize|. A simple |
- // integer-valued linear ramp is the source so we can easily verify the results. A dictionary |
- // consisting of the context, the analyser node, and the signal is returned. |
- function createGraph(fftSize) { |
- var context = new OfflineAudioContext(1, renderFrames, sampleRate); |
- |
- var src = context.createBufferSource(); |
- |
- // Use a simple linear ramp as the source. For simplicity of inspecting results, the ramp |
- // starts at 1 with an increment of 1. |
- var signalBuffer = context.createBuffer(1, renderFrames, context.sampleRate); |
- var data = signalBuffer.getChannelData(0); |
- for (var k = 0; k < data.length; ++k) { |
- data[k] = k + 1; |
- } |
- |
- src.buffer = signalBuffer; |
- |
- var analyser = context.createAnalyser(); |
- analyser.fftSize = fftSize; |
- |
- src.connect(analyser); |
- analyser.connect(context.destination); |
- src.start(); |
- |
- return { |
- context: context, |
- analyser: analyser, |
- signalBuffer: signalBuffer |
- }; |
- } |
- </script> |
- </body> |
-</html> |