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> |