blob: 4e0de21e96fa8470f5305d9405bdccf8f937e660 [file] [log] [blame]
<!DOCTYPE html>
<!--
Test AudioBufferSourceNode supports 5.1 channel.
-->
<html>
<head>
<title>
audiobuffersource-multi-channels.html
</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>
<script src="/webaudio/resources/mix-testing.js"></script>
</head>
<body>
<script id="layout-test-code">
let audit = Audit.createTaskRunner();
let context;
let expectedAudio;
audit.define('initialize', (task, should) => {
// Create offline audio context
let sampleRate = 44100.0;
should(() => {
context = new OfflineAudioContext(
6, sampleRate * toneLengthSeconds, sampleRate);
}, 'Creating context for testing').notThrow();
should(
Audit
.loadFileFromUrl('resources/audiobuffersource-multi-channels-expected.wav')
.then(arrayBuffer => {
context.decodeAudioData(arrayBuffer).then(audioBuffer => {
expectedAudio = audioBuffer;
task.done();
}).catch(error => {
assert_unreached("Could not decode audio data due to " + error.message);
})
})
, 'Fetching expected audio').beResolved();
});
audit.define(
{label: 'test', description: 'AudioBufferSource with 5.1 buffer'},
(task, should) => {
let toneBuffer =
createToneBuffer(context, 440, toneLengthSeconds, 6);
let source = context.createBufferSource();
source.buffer = toneBuffer;
source.connect(context.destination);
source.start(0);
context.startRendering()
.then(renderedAudio => {
// Compute a threshold based on the maximum error, |maxUlp|,
// in ULP. This is experimentally determined. Assuming that
// the reference file is a 16-bit wav file, the max values in
// the wave file are +/- 32768.
let maxUlp = 1;
let threshold = maxUlp / 32768;
for (let k = 0; k < renderedAudio.numberOfChannels; ++k) {
should(
renderedAudio.getChannelData(k),
'Rendered audio for channel ' + k)
.beCloseToArray(
expectedAudio.getChannelData(k),
{absoluteThreshold: threshold});
}
})
.then(() => task.done());
});
audit.run();
</script>
</body>
</html>