| <!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 webkit.org/b/150200 |
| // See crbug.com/331446. |
| |
| // Create a simple feedback loop and make sure the panner node processes it correctly. |
| |
| function runTest() { |
| 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.createGain(); |
| var dry = context.createGain(); |
| var wet = context.createGain(); |
| var filter = context.createBiquadFilter(); |
| var delay = context.createDelay(); |
| var feedbackNode = context.createGain(); |
| var output = context.createGain(); |
| |
| 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(); |
| </script> |
| |
| </body> |
| </html> |