blob: e891da6da2b02924aac74b9e850677dc080b57b0 [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>Test k-rate AudioParam of AudioWorkletNode</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();
// Use the worklet gain node to test k-rate parameters.
const filePath =
'../the-audioworklet-interface/processors/gain-processor.js';
// Context for testing
let context;
audit.define('Create Test Worklet', (task, should) => {
// Arbitrary sample rate and duration.
const sampleRate = 8000;
// Only new a few render quanta to verify things are working.
const testDuration = 4 * 128 / sampleRate;
context = new OfflineAudioContext({
numberOfChannels: 3,
sampleRate: sampleRate,
length: testDuration * sampleRate
});
should(
context.audioWorklet.addModule(filePath),
'Construction of AudioWorklet')
.beResolved()
.then(() => task.done());
});
audit.define('AudioWorklet k-rate AudioParam', (task, should) => {
let src = new ConstantSourceNode(context);
let kRateNode = new AudioWorkletNode(context, 'gain');
src.connect(kRateNode).connect(context.destination);
let kRateParam = kRateNode.parameters.get('gain');
kRateParam.automationRate = 'k-rate';
// Automate the gain
kRateParam.setValueAtTime(0, 0);
kRateParam.linearRampToValueAtTime(
10, context.length / context.sampleRate);
src.start();
context.startRendering()
.then(audioBuffer => {
let output = audioBuffer.getChannelData(0);
// Verify that the output from the worklet is step-wise
// constant.
for (let k = 0; k < output.length; k += 128) {
should(
output.slice(k, k + 128),
` k-rate output [${k}: ${k + 127}]`)
.beConstantValueOf(output[k]);
}
})
.then(() => task.done());
});
audit.run();
</script>
</body>
</html>