| Index: third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html
|
| diff --git a/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html b/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html
|
| index 2b28607fa70e9cad6d03cfe724da65d0a598a45a..0f363a049deb17ea27d5f4d58dd276d63398ac2e 100644
|
| --- a/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html
|
| +++ b/third_party/WebKit/LayoutTests/webaudio/Panner/panner-automation-basic.html
|
| @@ -4,7 +4,7 @@
|
| <script src="../../resources/testharness.js"></script>
|
| <script src="../../resources/testharnessreport.js"></script>
|
| <script src="../resources/audit-util.js"></script>
|
| - <script src="../resources/audio-testing.js"></script>
|
| + <script src="../resources/audit.js"></script>
|
| <script src="../resources/panner-formulas.js"></script>
|
| <title>Test Basic PannerNode with Automation Position Properties</title>
|
| </head>
|
| @@ -13,186 +13,225 @@
|
| <script>
|
| var sampleRate = 48000;
|
|
|
| - // These tests are quite slow, so don't run for many frames. 256 frames should be enough to
|
| - // demonstrate that automations are working.
|
| + // These tests are quite slow, so don't run for many frames. 256 frames
|
| + // should be enough to demonstrate that automations are working.
|
| var renderFrames = 256;
|
| var renderDuration = renderFrames / sampleRate;
|
|
|
| var audit = Audit.createTaskRunner();
|
|
|
| - // Array of tests for setting the panner positions. These tests basically verify that the
|
| - // position setters for the panner and listener are working correctly.
|
| - var testConfig = [{
|
| - setter: "positionX",
|
| - }, {
|
| - setter: "positionY",
|
| - }, {
|
| - setter: "positionZ",
|
| - }];
|
| -
|
| - // Create tests for the panner position setters. Both mono and steroe sources are tested.
|
| + // Array of tests for setting the panner positions. These tests basically
|
| + // verify that the position setters for the panner and listener are
|
| + // working correctly.
|
| + var testConfig = [
|
| + {
|
| + setter: 'positionX',
|
| + },
|
| + {
|
| + setter: 'positionY',
|
| + },
|
| + {
|
| + setter: 'positionZ',
|
| + }
|
| + ];
|
| +
|
| + // Create tests for the panner position setters. Both mono and steroe
|
| + // sources are tested.
|
| for (var k = 0; k < testConfig.length; ++k) {
|
| var config = testConfig[k];
|
| // Function to create the test to define the test.
|
| - var tester = function (config, channelCount) {
|
| - return function (done) {
|
| + var tester = function(config, channelCount) {
|
| + return (task, should) => {
|
| var nodes = createGraph(channelCount);
|
| var {context, source, panner} = nodes;
|
|
|
| - var message = channelCount == 1 ? "Mono" : "Stereo";
|
| - message += " panner." + config.setter;
|
| + var message = channelCount == 1 ? 'Mono' : 'Stereo';
|
| + message += ' panner.' + config.setter;
|
|
|
| - testPositionSetter({
|
| + testPositionSetter(should, {
|
| nodes: nodes,
|
| pannerSetter: panner[config.setter],
|
| message: message
|
| - }).then(done);
|
| + }).then(() => task.done());
|
| }
|
| - }
|
| + };
|
|
|
| - audit.defineTask("Stereo panner." + config.setter, tester(config, 2));
|
| - audit.defineTask("Mono panner." + config.setter, tester(config, 1));
|
| + audit.define('Stereo panner.' + config.setter, tester(config, 2));
|
| + audit.define('Mono panner.' + config.setter, tester(config, 1));
|
| }
|
| -
|
| - // Create tests for the listener position setters. Both mono and steroe sources are tested.
|
| +
|
| + // Create tests for the listener position setters. Both mono and steroe
|
| + // sources are tested.
|
| for (var k = 0; k < testConfig.length; ++k) {
|
| var config = testConfig[k];
|
| // Function to create the test to define the test.
|
| - var tester = function (config, channelCount) {
|
| - return function (done) {
|
| + var tester = function(config, channelCount) {
|
| + return (task, should) => {
|
| var nodes = createGraph(channelCount);
|
| var {context, source, panner} = nodes;
|
|
|
| - var message = channelCount == 1 ? "Mono" : "Stereo";
|
| - message += " listener." + config.setter;
|
| + var message = channelCount == 1 ? 'Mono' : 'Stereo';
|
| + message += ' listener.' + config.setter;
|
|
|
| - // Some relatively arbitrary (non-default) position for the source location.
|
| - panner.setPosition(1,0,1);
|
| + // Some relatively arbitrary (non-default) position for the source
|
| + // location.
|
| + panner.setPosition(1, 0, 1);
|
|
|
| - testPositionSetter({
|
| + testPositionSetter(should, {
|
| nodes: nodes,
|
| pannerSetter: context.listener[config.setter],
|
| message: message
|
| - }).then(done);
|
| + }).then(() => task.done());
|
| }
|
| - }
|
| + };
|
|
|
| - audit.defineTask("Stereo listener." + config.setter, tester(config, 2));
|
| - audit.defineTask("Mono listener." + config.setter, tester(config, 1));
|
| + audit.define('Stereo listener.' + config.setter, tester(config, 2));
|
| + audit.define('Mono listener.' + config.setter, tester(config, 1));
|
| }
|
|
|
| // Test setPosition method.
|
| - audit.defineTask("setPosition", function (done) {
|
| + audit.define('setPosition', (task, should) => {
|
| var {context, panner, source} = createGraph(2);
|
|
|
| // Initialize source position (values don't really matter).
|
| - panner.setPosition(1,1,1);
|
| + panner.setPosition(1, 1, 1);
|
|
|
| - // After some (unimportant) time, move the panner to a (any) new location.
|
| + // After some (unimportant) time, move the panner to a (any) new
|
| + // location.
|
| var suspendFrame = 128;
|
| - context.suspend(suspendFrame / sampleRate).then(function () {
|
| - panner.setPosition(-100, 2000, 8000);
|
| - }).then(context.resume.bind(context));
|
| -
|
| - context.startRendering().then(function (resultBuffer) {
|
| - verifyPannerOutputChanged(resultBuffer, {message: "setPosition", suspendFrame: suspendFrame});
|
| - }).then(done);
|
| + context.suspend(suspendFrame / sampleRate)
|
| + .then(function() {
|
| + panner.setPosition(-100, 2000, 8000);
|
| + })
|
| + .then(context.resume.bind(context));
|
| +
|
| + context.startRendering()
|
| + .then(function(resultBuffer) {
|
| + verifyPannerOutputChanged(
|
| + should, resultBuffer,
|
| + {message: 'setPosition', suspendFrame: suspendFrame});
|
| + })
|
| + .then(() => task.done());
|
| });
|
|
|
| - audit.defineTask("orientation setter", function (done) {
|
| + audit.define('orientation setter', (task, should) => {
|
| var {context, panner, source} = createGraph(2);
|
|
|
| - // For orientation to matter, we need to make the source directional, and also move away
|
| - // from the listener (because the default location is 0,0,0).
|
| - panner.setPosition(0,0,1);
|
| + // For orientation to matter, we need to make the source directional,
|
| + // and also move away from the listener (because the default location is
|
| + // 0,0,0).
|
| + panner.setPosition(0, 0, 1);
|
| panner.coneInnerAngle = 0;
|
| panner.coneOuterAngle = 360;
|
| panner.coneOuterGain = .001;
|
|
|
| - // After some (unimportant) time, change the panner orientation to a new orientation. The
|
| - // only constraint is that the orientation changes from before.
|
| + // After some (unimportant) time, change the panner orientation to a new
|
| + // orientation. The only constraint is that the orientation changes
|
| + // from before.
|
| var suspendFrame = 128;
|
| - context.suspend(suspendFrame / sampleRate).then(function () {
|
| - panner.orientationX.value = -100;
|
| - panner.orientationY.value = 2000;
|
| - panner.orientationZ.value = 8000;
|
| - }).then(context.resume.bind(context));
|
| -
|
| - context.startRendering().then(function (resultBuffer) {
|
| - verifyPannerOutputChanged(resultBuffer, {message: "panner.orientation{XYZ}", suspendFrame: suspendFrame});
|
| - }).then(done);
|
| + context.suspend(suspendFrame / sampleRate)
|
| + .then(function() {
|
| + panner.orientationX.value = -100;
|
| + panner.orientationY.value = 2000;
|
| + panner.orientationZ.value = 8000;
|
| + })
|
| + .then(context.resume.bind(context));
|
| +
|
| + context.startRendering()
|
| + .then(function(resultBuffer) {
|
| + verifyPannerOutputChanged(should, resultBuffer, {
|
| + message: 'panner.orientation{XYZ}',
|
| + suspendFrame: suspendFrame
|
| + });
|
| + })
|
| + .then(() => task.done());
|
| });
|
|
|
| - audit.defineTask("forward setter", function (done) {
|
| + audit.define('forward setter', (task, should) => {
|
| var {context, panner, source} = createGraph(2);
|
|
|
| - // For orientation to matter, we need to make the source directional, and also move away
|
| - // from the listener (because the default location is 0,0,0).
|
| - panner.setPosition(0,0,1);
|
| + // For orientation to matter, we need to make the source directional,
|
| + // and also move away from the listener (because the default location is
|
| + // 0,0,0).
|
| + panner.setPosition(0, 0, 1);
|
| panner.coneInnerAngle = 0;
|
| panner.coneOuterAngle = 360;
|
| panner.coneOuterGain = .001;
|
|
|
| - // After some (unimportant) time, change the panner orientation to a new orientation. The
|
| - // only constraint is that the orientation changes from before.
|
| + // After some (unimportant) time, change the panner orientation to a new
|
| + // orientation. The only constraint is that the orientation changes
|
| + // from before.
|
| var suspendFrame = 128;
|
| - context.suspend(suspendFrame / sampleRate).then(function () {
|
| - context.listener.forwardX.value = -100;
|
| - context.listener.forwardY.value = 2000;
|
| - context.listener.forwardZ.value = 8000;
|
| - }).then(context.resume.bind(context));
|
| -
|
| - context.startRendering().then(function (resultBuffer) {
|
| - verifyPannerOutputChanged(resultBuffer, {message: "listener.forward{XYZ}", suspendFrame: suspendFrame});
|
| - }).then(done);
|
| + context.suspend(suspendFrame / sampleRate)
|
| + .then(function() {
|
| + context.listener.forwardX.value = -100;
|
| + context.listener.forwardY.value = 2000;
|
| + context.listener.forwardZ.value = 8000;
|
| + })
|
| + .then(context.resume.bind(context));
|
| +
|
| + context.startRendering()
|
| + .then(function(resultBuffer) {
|
| + verifyPannerOutputChanged(should, resultBuffer, {
|
| + message: 'listener.forward{XYZ}',
|
| + suspendFrame: suspendFrame
|
| + });
|
| + })
|
| + .then(() => task.done());
|
| });
|
|
|
| - audit.defineTask("up setter", function (done) {
|
| + audit.define('up setter', (task, should) => {
|
| var {context, panner, source} = createGraph(2);
|
|
|
| - // For orientation to matter, we need to make the source directional, and also move away
|
| - // from the listener (because the default location is 0,0,0).
|
| - panner.setPosition(0,0,1);
|
| + // For orientation to matter, we need to make the source directional,
|
| + // and also move away from the listener (because the default location is
|
| + // 0,0,0).
|
| + panner.setPosition(0, 0, 1);
|
| panner.coneInnerAngle = 0;
|
| panner.coneOuterAngle = 360;
|
| panner.coneOuterGain = .001;
|
| - panner.setPosition(1,0,1);
|
| + panner.setPosition(1, 0, 1);
|
|
|
| - // After some (unimportant) time, change the panner orientation to a new orientation. The
|
| - // only constraint is that the orientation changes from before.
|
| + // After some (unimportant) time, change the panner orientation to a new
|
| + // orientation. The only constraint is that the orientation changes
|
| + // from before.
|
| var suspendFrame = 128;
|
| - context.suspend(suspendFrame / sampleRate).then(function () {
|
| - context.listener.upX.value = 100;
|
| - context.listener.upY.value = 100;
|
| - context.listener.upZ.value = 100;;
|
| - }).then(context.resume.bind(context));
|
| -
|
| - context.startRendering().then(function (resultBuffer) {
|
| - verifyPannerOutputChanged(resultBuffer, {message: "listener.up{XYZ}", suspendFrame: suspendFrame});
|
| - }).then(done);
|
| + context.suspend(suspendFrame / sampleRate)
|
| + .then(function() {
|
| + context.listener.upX.value = 100;
|
| + context.listener.upY.value = 100;
|
| + context.listener.upZ.value = 100;
|
| + ;
|
| + })
|
| + .then(context.resume.bind(context));
|
| +
|
| + context.startRendering()
|
| + .then(function(resultBuffer) {
|
| + verifyPannerOutputChanged(
|
| + should, resultBuffer,
|
| + {message: 'listener.up{XYZ}', suspendFrame: suspendFrame});
|
| + })
|
| + .then(() => task.done());
|
| });
|
|
|
| - audit.runTasks();
|
| + audit.run();
|
|
|
| function createGraph(channelCount) {
|
| var context = new OfflineAudioContext(2, renderFrames, sampleRate);
|
| var panner = context.createPanner();
|
| var source = context.createBufferSource();
|
| - source.buffer = createConstantBuffer(context, 1, channelCount == 1 ? 1 : [1, 2]);
|
| + source.buffer =
|
| + createConstantBuffer(context, 1, channelCount == 1 ? 1 : [1, 2]);
|
| source.loop = true;
|
|
|
| source.connect(panner);
|
| panner.connect(context.destination);
|
|
|
| source.start();
|
| - return {
|
| - context: context,
|
| - source: source,
|
| - panner: panner
|
| - };
|
| + return {context: context, source: source, panner: panner};
|
| }
|
|
|
| - function testPositionSetter(options) {
|
| + function testPositionSetter(should, options) {
|
| var {nodes, pannerSetter, message} = options;
|
|
|
| var {context, source, panner} = nodes;
|
| @@ -200,47 +239,60 @@
|
| // Set panner x position. (Value doesn't matter);
|
| pannerSetter.value = 1;
|
|
|
| - // Wait a bit and set a new position. (Actual time and position doesn't matter).
|
| + // Wait a bit and set a new position. (Actual time and position doesn't
|
| + // matter).
|
| var suspendFrame = 128;
|
| - context.suspend(suspendFrame / sampleRate).then(function () {
|
| - pannerSetter.value = 10000;
|
| - }).then(context.resume.bind(context));
|
| -
|
| - return context.startRendering().then(function (resultBuffer) {
|
| - verifyPannerOutputChanged(resultBuffer, {message: message, suspendFrame: suspendFrame});
|
| + context.suspend(suspendFrame / sampleRate)
|
| + .then(function() {
|
| + pannerSetter.value = 10000;
|
| + })
|
| + .then(context.resume.bind(context));
|
| +
|
| + return context.startRendering().then(function(resultBuffer) {
|
| + verifyPannerOutputChanged(
|
| + should, resultBuffer,
|
| + {message: message, suspendFrame: suspendFrame});
|
| });
|
| }
|
|
|
| - function verifyPannerOutputChanged(resultBuffer, options) {
|
| + function verifyPannerOutputChanged(should, resultBuffer, options) {
|
| var {message, suspendFrame} = options;
|
| - // Verify that the first part of output is constant. (Doesn't matter what.)
|
| - var success = true;
|
| - var data0 = resultBuffer.getChannelData(0);
|
| - var data1 = resultBuffer.getChannelData(1);
|
| -
|
| - var middle = "[0, " + suspendFrame + ") ";
|
| - success = Should(message + ".value frame " + middle + "channel 0", data0.slice(0, suspendFrame))
|
| - .beConstantValueOf(data0[0]) && success;
|
| - success = Should(message + ".value frame " + middle + "channel 1", data1.slice(0, suspendFrame))
|
| - .beConstantValueOf(data1[0]) && success;
|
| -
|
| - // The rest after suspendTime should be constant and different from the first part.
|
| - middle = "[" + suspendFrame + ", " + renderFrames + ") ";
|
| - success = Should(message + ".value frame " + middle + "channel 0",
|
| - data0.slice(suspendFrame))
|
| - .beConstantValueOf(data0[suspendFrame]) && success;
|
| - success = Should(message + ".value frame " + middle + "channel 1",
|
| - data1.slice(suspendFrame))
|
| - .beConstantValueOf(data1[suspendFrame]) && success;
|
| - success = Should(message + ": Output at frame " + suspendFrame + " channel 0", data0[suspendFrame])
|
| - .notBeEqualTo(data0[0]) && success;
|
| - success = Should(message + ": Output at frame " + suspendFrame + " channel 1", data1[suspendFrame])
|
| - .notBeEqualTo(data1[0]) && success;
|
| -
|
| - var prefix = "Directly setting " + message + ".value";
|
| - Should(prefix, success)
|
| - .summarize("worked", "failed");
|
| + // Verify that the first part of output is constant. (Doesn't matter
|
| + // what.)
|
| + var data0 = resultBuffer.getChannelData(0);
|
| + var data1 = resultBuffer.getChannelData(1);
|
| +
|
| + var middle = '[0, ' + suspendFrame + ') ';
|
| + should(
|
| + data0.slice(0, suspendFrame),
|
| + message + '.value frame ' + middle + 'channel 0')
|
| + .beConstantValueOf(data0[0]);
|
| + should(
|
| + data1.slice(0, suspendFrame),
|
| + message + '.value frame ' + middle + 'channel 1')
|
| + .beConstantValueOf(data1[0]);
|
| +
|
| + // The rest after suspendTime should be constant and different from the
|
| + // first part.
|
| + middle = '[' + suspendFrame + ', ' + renderFrames + ') ';
|
| + should(
|
| + data0.slice(suspendFrame),
|
| + message + '.value frame ' + middle + 'channel 0')
|
| + .beConstantValueOf(data0[suspendFrame]);
|
| + should(
|
| + data1.slice(suspendFrame),
|
| + message + '.value frame ' + middle + 'channel 1')
|
| + .beConstantValueOf(data1[suspendFrame]);
|
| + should(
|
| + data0[suspendFrame],
|
| + message + ': Output at frame ' + suspendFrame + ' channel 0')
|
| + .notBeEqualTo(data0[0]);
|
| + should(
|
| + data1[suspendFrame],
|
| + message + ': Output at frame ' + suspendFrame + ' channel 1')
|
| + .notBeEqualTo(data1[0]);
|
| }
|
| +
|
| </script>
|
| </body>
|
| </html>
|
|
|