| <!DOCTYPE html> | |
| <html class="a"> | |
| <head> | |
| <title>Feedback cycle with delay in audio node graph</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| </head> | |
| <body> | |
| <script> | |
| function doTest() { | |
| var off = new OfflineAudioContext(1, 512, 48000); | |
| var b = off.createBuffer(1, 1, 48000); | |
| b.getChannelData(0)[0] = 1; | |
| var impulse = new AudioBufferSourceNode(off, {buffer: b}); | |
| impulse.start(0); | |
| var delay = new DelayNode(off, {delayTime: 128 / 48000}); | |
| var fb = new GainNode(off); | |
| impulse.connect(fb).connect(delay).connect(fb).connect(off.destination); | |
| var samples; | |
| return off.startRendering().then((b) => { | |
| return Promise.resolve(b.getChannelData(0)); | |
| }); | |
| } | |
| promise_test(() => { | |
| return doTest().then(samples => { | |
| for (var i = 0; i < samples.length; i++) { | |
| if ((i % 128) != 0) { | |
| assert_equals( | |
| samples[i], 0.0, | |
| 'Non-silent audio found in between delayed impulses'); | |
| } else { | |
| assert_equals( | |
| samples[i], 1.0, | |
| 'Silent audio found instead of a delayed impulse'); | |
| } | |
| } | |
| }); | |
| }, 'Test that a DelayNode allows a feedback loop of a single rendering quantum'); | |
| </script> | |
| </body> | |
| </html> |