blob: 8dafa2f8111a8b522be5540a2fbf4f9a3ee5cd6e [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>
Test the construction of AudioWorkletNode with real-time context
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webaudio/resources/audit.js"></script>
</head>
<body>
<script id="layout-test-code">
const audit = Audit.createTaskRunner();
const context = new AudioContext();
setup(function () {
context.audioWorklet.addModule(
'processors/channel-count-processor.js').then(() => audit.run());
// Test if the output channe count dynamically changes if the input
// and output is 1.
audit.define(
{label: 'Dynamically change the channel count to if unspecified.'},
(task, should) => {
// Use arbitrary parameters for the test.
const buffer = new AudioBuffer({
numberOfChannels: 17,
length: 1,
sampleRate: context.sampleRate,
});
const source = new AudioBufferSourceNode(context);
source.buffer = buffer;
const node = new AudioWorkletNode(context, 'channel-count', {
numberOfInputs: 1,
numberOfOutputs: 1,
});
node.port.onmessage = (message) => {
const expected = message.data;
should(expected.outputChannel,
'The expected output channel count').beEqualTo(17);
task.done();
};
// We need to make an actual connection becasue the channel count
// change happen when the rendering starts. It is to test if the
// channel count adapts to the upstream node correctly.
source.connect(node).connect(context.destination);
source.start();
});
// Test if outputChannelCount is honored as expected even if the input
// and output is 1.
audit.define(
{label: 'Givien outputChannelCount must be honored.'},
(task, should) => {
const node = new AudioWorkletNode(
context, 'channel-count', {
numberOfInputs: 1,
numberOfOutputs: 1,
outputChannelCount: [2],
});
node.port.onmessage = (message) => {
const expected = message.data;
should(expected.outputChannel,
'The expected output channel count').beEqualTo(2);
task.done();
};
// We need to make an actual connection becasue the channel count
// change might happen when the rendering starts. It is to test
// if the specified channel count is kept correctly.
node.connect(context.destination);
});
});
</script>
</body>
</html>