| OLD | NEW |
| 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <script src="../../resources/js-test.js"></script> | 4 <script src="../../resources/testharness.js"></script> |
| 5 <script src="../../resources/testharnessreport.js"></script> |
| 5 <script src="../resources/audit-util.js"></script> | 6 <script src="../resources/audit-util.js"></script> |
| 6 <script src="../resources/audio-testing.js"></script> | 7 <script src="../resources/audit.js"></script> |
| 7 <script src="../resources/panner-model-testing.js"></script> | 8 <script src="../resources/panner-model-testing.js"></script> |
| 8 </head> | 9 </head> |
| 9 | 10 |
| 10 <body> | 11 <body> |
| 11 <div id="description"></div> | |
| 12 <div id="console"></div> | |
| 13 <script> | 12 <script> |
| 14 description("Test PannerNode handling of feedback loops"); | 13 let audit = Audit.createTaskRunner(); |
| 15 | 14 |
| 16 // See crbug.com/331446. | 15 // See crbug.com/331446. |
| 17 | 16 |
| 18 // Create a simple feedback loop and make sure the panner node processes i
t correctly. | 17 // Create a simple feedback loop and make sure the panner node processes i
t correctly. |
| 19 | 18 |
| 20 function runTest() { | 19 audit.define( |
| 21 if (window.testRunner) { | 20 {label: 'test', description: 'PannerNode handling of feedback loops'}, |
| 22 testRunner.dumpAsText(); | 21 (task, should) => { |
| 23 testRunner.waitUntilDone(); | |
| 24 } | |
| 25 | 22 |
| 26 window.jsTestIsAsync = true; | 23 var sampleRate = 44100; |
| 24 var renderLengthSeconds = 1; |
| 27 | 25 |
| 28 var sampleRate = 44100; | 26 // Create offline audio context. |
| 29 var renderLengthSeconds = 1; | 27 var context = new OfflineAudioContext( |
| 30 | 28 2, sampleRate * renderLengthSeconds, sampleRate); |
| 31 // Create offline audio context. | |
| 32 var context = new OfflineAudioContext(2, sampleRate * renderLengthSeco
nds, sampleRate); | |
| 33 | 29 |
| 34 // Create nodes in graph. This is based on the test given in crbug.com
/331446. | 30 // Create nodes in graph. This is based on the test given in |
| 35 var source = context.createBufferSource(); | 31 // crbug.com/331446. |
| 36 source.buffer = createImpulseBuffer(context, sampleRate * renderLength
Seconds); | 32 var source = context.createBufferSource(); |
| 37 var activateNode = context.createGain(); | 33 source.buffer = |
| 38 var dry = context.createGain(); | 34 createImpulseBuffer(context, sampleRate * renderLengthSeconds); |
| 39 var wet = context.createGain(); | 35 var activateNode = context.createGain(); |
| 40 var filter = context.createBiquadFilter(); | 36 var dry = context.createGain(); |
| 41 var delay = context.createDelay(); | 37 var wet = context.createGain(); |
| 42 var feedbackNode = context.createGain(); | 38 var filter = context.createBiquadFilter(); |
| 43 var output = context.createGain(); | 39 var delay = context.createDelay(); |
| 40 var feedbackNode = context.createGain(); |
| 41 var output = context.createGain(); |
| 44 | 42 |
| 45 delay.delayTime.value = 0.1; | 43 delay.delayTime.value = 0.1; |
| 46 wet.gain.value = 0.5; | 44 wet.gain.value = 0.5; |
| 47 dry.gain.value = 1; | 45 dry.gain.value = 1; |
| 48 feedbackNode.gain.value = 0.45; | 46 feedbackNode.gain.value = 0.45; |
| 49 filter.frequency.value = 20000; | 47 filter.frequency.value = 20000; |
| 50 | 48 |
| 51 source.connect(activateNode); | 49 source.connect(activateNode); |
| 52 activateNode.connect(delay); | 50 activateNode.connect(delay); |
| 53 activateNode.connect(dry); | 51 activateNode.connect(dry); |
| 54 delay.connect(filter); | 52 delay.connect(filter); |
| 55 filter.connect(feedbackNode); | 53 filter.connect(feedbackNode); |
| 56 feedbackNode.connect(delay); | 54 feedbackNode.connect(delay); |
| 57 feedbackNode.connect(wet); | 55 feedbackNode.connect(wet); |
| 58 wet.connect(output); | 56 wet.connect(output); |
| 59 dry.connect(output); | 57 dry.connect(output); |
| 60 | 58 |
| 61 var panner = context.createPanner(); | 59 var panner = context.createPanner(); |
| 62 panner.coneOuterGain = 0.1; | 60 panner.coneOuterGain = 0.1; |
| 63 panner.coneOuterAngle = 180; | 61 panner.coneOuterAngle = 180; |
| 64 panner.coneInnerAngle = 0; | 62 panner.coneInnerAngle = 0; |
| 65 | 63 |
| 66 panner.connect(context.destination); | 64 panner.connect(context.destination); |
| 67 | 65 |
| 68 output.connect(panner); | 66 output.connect(panner); |
| 69 | 67 |
| 70 // Render. We don't care what the output is, though. | 68 // Render. We don't care what the output is, though. |
| 71 | 69 |
| 72 context.oncomplete = function (event) { | 70 should(context.startRendering(), 'Rendering of offline context') |
| 73 testPassed("Rendering successfully completed.
"); | 71 .beResolved() |
| 74 finishJSTest(); | 72 .then(() => task.done()); |
| 75 }; | 73 }); |
| 76 context.startRendering(); | 74 |
| 77 } | 75 audit.run(); |
| 78 | |
| 79 runTest(); | |
| 80 successfullyParsed = true; | |
| 81 </script> | 76 </script> |
| 82 | 77 |
| 83 </body> | 78 </body> |
| 84 </html> | 79 </html> |
| OLD | NEW |