blob: b5b1ec0c3db2f02557d0be7f7c2d6499ea3ae8a7 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>
Test ABSN Outputs Silence if buffer is null
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webaudio/resources/audit-util.js"></script>
<script src="/webaudio/resources/audit.js"></script>
</head>
<body>
<script>
const audit = Audit.createTaskRunner();
audit.define('ABSN with null buffer', (task, should) => {
// Create test context. Length and sampleRate are pretty arbitrary, but
// we don't need either to be very large.
const context = new OfflineAudioContext(
{numberOfChannels: 1, length: 1024, sampleRate: 8192});
// Just create a constant buffer for testing. Anything will do as long
// as the buffer contents are not identically zero.
const audioBuffer =
new AudioBuffer({length: 10, sampleRate: context.sampleRate});
const audioBufferSourceNode = new AudioBufferSourceNode(context);
audioBuffer.getChannelData(0).fill(1);
// These two tests are mostly for the informational messages to show
// what's happening. They should never fail!
should(() => {
audioBufferSourceNode.buffer = audioBuffer;
}, 'Setting ABSN.buffer to AudioBuffer').notThrow();
// This is the important part. Setting the buffer to null after setting
// it to something else should cause the source to produce silence.
should(() => {
audioBufferSourceNode.buffer = null;
}, 'Setting ABSN.buffer = null').notThrow();
audioBufferSourceNode.start(0);
audioBufferSourceNode.connect(context.destination);
context.startRendering()
.then(buffer => {
// Since the buffer is null, the output of the source should be
// silence.
should(buffer.getChannelData(0), 'ABSN output')
.beConstantValueOf(0);
})
.then(() => task.done());
});
audit.run();
</script>
</body>
</html>