Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<html class="a">
<head>
<title>Delay time clamping in cycles</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
function doTest() {
let off = new OfflineAudioContext(1, 512, 48000);
let b = new AudioBuffer({sampleRate: off.sampleRate, length: 1});
b.getChannelData(0)[0] = 1;
let impulse = new AudioBufferSourceNode(off, {buffer: b});
impulse.start(0);
// This delayTime of 64 samples MUST be clamped to 128 samples when
// in a cycle.
let delay = new DelayNode(off, {delayTime: 64 / 48000});
let fb = new GainNode(off);
impulse.connect(fb).connect(delay).connect(fb).connect(off.destination);
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>