| Index: LayoutTests/webaudio/panner-loop.html
|
| diff --git a/LayoutTests/webaudio/panner-loop.html b/LayoutTests/webaudio/panner-loop.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d4e0f63500f21d22d82e4d432d82a881a47dc7bd
|
| --- /dev/null
|
| +++ b/LayoutTests/webaudio/panner-loop.html
|
| @@ -0,0 +1,83 @@
|
| +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
| +<html>
|
| + <head>
|
| + <script src="resources/audio-testing.js"></script>
|
| + <script src="../resources/js-test.js"></script>
|
| + <script src="resources/panner-model-testing.js"></script>
|
| + </head>
|
| +
|
| + <body>
|
| + <div id="description"></div>
|
| + <div id="console"></div>
|
| + <script>
|
| + description("Test PannerNode handling of feedback loops");
|
| +
|
| + // See crbug.com/331446.
|
| +
|
| + // Create a simple feedback loop and make sure the panner node processes it correctly.
|
| +
|
| + function runTest() {
|
| + if (window.testRunner) {
|
| + testRunner.dumpAsText();
|
| + testRunner.waitUntilDone();
|
| + }
|
| +
|
| + window.jsTestIsAsync = true;
|
| +
|
| + var sampleRate = 44100;
|
| + var renderLengthSeconds = 1;
|
| +
|
| + // Create offline audio context.
|
| + var context = new webkitOfflineAudioContext(2, sampleRate * renderLengthSeconds, sampleRate);
|
| +
|
| + // Create nodes in graph. This is based on the test given in crbug.com/331446.
|
| + var source = context.createBufferSource();
|
| + source.buffer = createImpulseBuffer(context, sampleRate * renderLengthSeconds);
|
| + var activateNode = context.createGainNode();
|
| + var dry = context.createGainNode();
|
| + var wet = context.createGainNode();
|
| + var filter = context.createBiquadFilter();
|
| + var delay = context.createDelayNode();
|
| + var feedbackNode = context.createGainNode();
|
| + var output = context.createGainNode();
|
| +
|
| + delay.delayTime.value = 0.1;
|
| + wet.gain.value = 0.5;
|
| + dry.gain.value = 1;
|
| + feedbackNode.gain.value = 0.45;
|
| + filter.frequency.value = 20000;
|
| +
|
| + source.connect(activateNode);
|
| + activateNode.connect(delay);
|
| + activateNode.connect(dry);
|
| + delay.connect(filter);
|
| + filter.connect(feedbackNode);
|
| + feedbackNode.connect(delay);
|
| + feedbackNode.connect(wet);
|
| + wet.connect(output);
|
| + dry.connect(output);
|
| +
|
| + var panner = context.createPanner();
|
| + panner.coneOuterGain = 0.1;
|
| + panner.coneOuterAngle = 180;
|
| + panner.coneInnerAngle = 0;
|
| +
|
| + panner.connect(context.destination);
|
| +
|
| + output.connect(panner);
|
| +
|
| + // Render. We don't care what the output is, though.
|
| +
|
| + context.oncomplete = function (event) {
|
| + testPassed("Rendering successfully completed.");
|
| + finishJSTest();
|
| + };
|
| + context.startRendering();
|
| + }
|
| +
|
| + runTest();
|
| + successfullyParsed = true;
|
| + </script>
|
| +
|
| + </body>
|
| +</html>
|
|
|