Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Unified Diff: third_party/WebKit/LayoutTests/webaudio/stereopannernode-no-glitch.html

Issue 2581463002: Refactor WebAudio test directory (Closed)
Patch Set: Use correct path for wav result files Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/webaudio/stereopannernode-no-glitch.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/stereopannernode-no-glitch.html b/third_party/WebKit/LayoutTests/webaudio/stereopannernode-no-glitch.html
deleted file mode 100644
index 81f8594253009075b702e9d1f84ef6226ad7f5b5..0000000000000000000000000000000000000000
--- a/third_party/WebKit/LayoutTests/webaudio/stereopannernode-no-glitch.html
+++ /dev/null
@@ -1,188 +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>
-</head>
-
-<body>
- <script>
- description('Test if StereoPannerNode producing glitches by crossing zero.');
- window.jsTestIsAsync = true;
-
- var sampleRate = 44100;
- var renderDuration = 0.5;
-
- // The threshold for glitch detection. This was experimentally determined.
- var GLITCH_THRESHOLD = 0.0005;
-
- // The maximum threshold for the error between the actual and the expected
- // sample values. Experimentally determined.
- var MAX_ERROR_ALLOWED = 0.0000001;
-
- // Option for |Should| test util. The number of array elements to be printed
- // out is arbitrary.
- var SHOULD_OPTS = {
- numberOfArrayLog: 2
- };
-
- var audit = Audit.createTaskRunner();
-
- // Extract a transitional region from the AudioBuffer. If no transition
- // found, fail this test.
- function extractPanningTransition(input) {
- var chanL = input.getChannelData(0);
- var chanR = input.getChannelData(1);
- var start, end;
- var index = 1;
-
- // Find transition by comparing two consecutive samples. If two consecutive
- // samples are identical, the transition has not started.
- while (chanL[index-1] === chanL[index] || chanR[index-1] === chanR[index]) {
- if (++index >= input.length) {
- testFailed('No transition found in the channel data.');
- return null;
- }
- }
- start = index - 1;
-
- // Find the end of transition. If two consecutive samples are not equal,
- // the transition is still ongoing.
- while (chanL[index-1] !== chanL[index] || chanR[index-1] !== chanR[index]) {
- if (++index >= input.length) {
- testFailed('A transition found but the buffer ended prematurely.');
- return null;
- }
- }
- end = index;
-
- testPassed('Transition found between sample #' + start + ' and #' + end + '.');
-
- return {
- left: chanL.subarray(start, end),
- right: chanR.subarray(start, end),
- length: end - start
- };
- }
-
- // JS implementation of stereo equal power panning.
- function panStereoEqualPower(pan, inputL, inputR) {
- pan = Math.min(1.0, Math.max(-1.0, pan));
- var output = [];
- var panRadian;
- if (!inputR) { // mono case.
- panRadian = (pan * 0.5 + 0.5) * Math.PI / 2;
- output[0] = inputL * Math.cos(panRadian);
- output[1] = inputR * Math.sin(panRadian);
- } else { // stereo case.
- panRadian = (pan <= 0 ? pan + 1 : pan) * Math.PI / 2;
- var gainL = Math.cos(panRadian);
- var gainR = Math.sin(panRadian);
- if (pan <= 0) {
- output[0] = inputL + inputR * gainL;
- output[1] = inputR * gainR;
- } else {
- output[0] = inputL * gainL;
- output[1] = inputR + inputL * gainR;
- }
- }
- return output;
- }
-
- // Generate the expected result of stereo equal panning. |input| is an
- // AudioBuffer to be panned.
- function generateStereoEqualPanningResult(input, startPan, endPan, length) {
-
- // Smoothing constant time is 0.05 second.
- var smoothingConstant = 1 - Math.exp(-1 / (sampleRate * 0.05));
-
- var inputL = input.getChannelData(0);
- var inputR = input.getChannelData(1);
- var pan = startPan;
- var outputL = [], outputR = [];
-
- for (var i = 0; i < length; i++) {
- var samples = panStereoEqualPower(pan, inputL[i], inputR[i]);
- outputL[i] = samples[0];
- outputR[i] = samples[1];
- pan += (endPan - pan) * smoothingConstant;
- }
-
- return {
- left: outputL,
- right: outputR
- };
- }
-
- // Build audio graph and render. Change the pan parameter in the middle of
- // rendering.
- function panAndVerify(options, done) {
- var context = new OfflineAudioContext(2, renderDuration * sampleRate, sampleRate);
- var source = context.createBufferSource();
- var panner = context.createStereoPanner();
- var stereoBuffer = createConstantBuffer(context, renderDuration * sampleRate, [1.0, 1.0]);
-
- source.buffer = stereoBuffer;
-
- panner.pan.value = options.startPanValue;
-
- source.connect(panner);
- panner.connect(context.destination);
- source.start();
-
- // Schedule the parameter transition by the setter at 1/10 of the render
- // duration.
- context.suspend(0.1 * renderDuration).then(function () {
- panner.pan.value = options.endPanValue;
- context.resume();
- });
-
- context.startRendering().then(function (buffer) {
- var actual = extractPanningTransition(buffer);
- var expected = generateStereoEqualPanningResult(stereoBuffer,
- options.startPanValue, options.endPanValue, actual.length);
-
- // |notGlitch| tests are redundant if the actual and expected results
- // match and if the expected results themselves don't glitch.
- Should('Channel #0', actual.left).notGlitch(GLITCH_THRESHOLD);
- Should('Channel #1', actual.right).notGlitch(GLITCH_THRESHOLD);
-
- Should('Channel #0', actual.left, SHOULD_OPTS)
- .beCloseToArray(expected.left, MAX_ERROR_ALLOWED);
- Should('Channel #1', actual.right, SHOULD_OPTS)
- .beCloseToArray(expected.right, MAX_ERROR_ALLOWED);
- }).then(done);
- }
-
- // Task: move pan from negative (-0.1) to positive (0.1) value to check if
- // there is a glitch during the transition. See crbug.com/470559.
- audit.defineTask('negative-to-positive', function (done) {
- panAndVerify({ startPanValue: -0.1, endPanValue: 0.1 }, done);
- });
-
-
- // Task: move pan from positive (0.1) to negative (-0.1) value to check if
- // there is a glitch during the transition.
- audit.defineTask('positive-to-negative', function (done) {
- panAndVerify({ startPanValue: 0.1, endPanValue: -0.1 }, done);
- });
-
- audit.defineTask('finish-test', function (done) {
- done();
- finishJSTest();
- });
-
- audit.runTasks(
- 'negative-to-positive',
- 'positive-to-negative',
- 'finish-test'
- );
-
- successfullyParsed = true;
- </script>
-</body>
-
-</html>

Powered by Google App Engine
This is Rietveld 408576698