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