diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html')
-rw-r--r-- | testing/web-platform/tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html b/testing/web-platform/tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html new file mode 100644 index 0000000000..954c71a96b --- /dev/null +++ b/testing/web-platform/tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html @@ -0,0 +1,141 @@ +<!DOCTYPE html> +<!-- +Tests that AudioChannelSplitter works correctly. +--> +<html> + <head> + <title> + audiochannelsplitter.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> + </head> + <body> + <script id="layout-test-code"> + let audit = Audit.createTaskRunner(); + + let sampleRate = 44100.0; + let lengthInSampleFrames = 512; + + let context = 0; + let sourceBuffer; + let sourceNode; + let channelSplitter; + let channelMerger; + + function createStereoBufferWithDCOffset(length, sampleRate, offset) { + let buffer = context.createBuffer(2, length, sampleRate); + let n = buffer.length; + let channelL = buffer.getChannelData(0); + let channelR = buffer.getChannelData(1); + + for (let i = 0; i < n; ++i) { + channelL[i] = offset; + channelR[i] = -1.0 * offset; + } + + return buffer; + } + + // checkResult() checks that the rendered buffer is stereo and that the + // left channel is all -1 and right channel all +1. In other words, we've + // reversed the order of the two channels. + function checkResult(buffer, should) { + let success = true; + + if (buffer.numberOfChannels == 2) { + let bufferDataL = buffer.getChannelData(0); + let bufferDataR = buffer.getChannelData(1); + + success = should(bufferDataL, 'Left channel').beConstantValueOf(-1) && + success; + success = should(bufferDataR, 'Right channel').beConstantValueOf(1) && + success; + } else { + success = false; + } + + should(success, 'Left and right channels were exchanged') + .message('correctly', 'incorrectly'); + } + + audit.define( + { + label: 'construction', + description: 'Construction of ChannelSplitterNode' + }, + function(task, should) { + + // Create stereo offline audio context. + context = + new OfflineAudioContext(2, lengthInSampleFrames, sampleRate); + + let splitternode; + should(() => { + let splitternode = context.createChannelSplitter(0); + }, 'createChannelSplitter(0)').throw(DOMException, 'IndexSizeError'); + + should(() => { + splitternode = context.createChannelSplitter(33); + }, 'createChannelSplitter(33)').throw(DOMException, 'IndexSizeError'); + + should(() => { + splitternode = context.createChannelSplitter(32); + }, 'splitternode = context.createChannelSplitter(32)').notThrow(); + + should(splitternode.numberOfOutputs, 'splitternode.numberOfOutputs') + .beEqualTo(32); + should(splitternode.numberOfInputs, 'splitternode.numberOfInputs') + .beEqualTo(1) + + should(() => { + splitternode = context.createChannelSplitter(); + }, 'splitternode = context.createChannelSplitter()').notThrow(); + + should(splitternode.numberOfOutputs, 'splitternode.numberOfOutputs') + .beEqualTo(6); + + task.done(); + }); + + audit.define( + { + label: 'functionality', + description: 'Functionality of ChannelSplitterNode' + }, + function(task, should) { + + // Create a stereo buffer, with all +1 values in left channel, all + // -1 in right channel. + sourceBuffer = createStereoBufferWithDCOffset( + lengthInSampleFrames, sampleRate, 1); + + sourceNode = context.createBufferSource(); + sourceNode.buffer = sourceBuffer; + + // Create a channel splitter and connect it so that it split the + // stereo stream into two mono streams. + channelSplitter = context.createChannelSplitter(2); + sourceNode.connect(channelSplitter); + + // Create a channel merger to merge the output of channel splitter. + channelMerger = context.createChannelMerger(); + channelMerger.connect(context.destination); + + // When merging, exchange channel layout: left->right, right->left + channelSplitter.connect(channelMerger, 0, 1); + channelSplitter.connect(channelMerger, 1, 0); + + sourceNode.start(0); + + context.startRendering() + .then(buffer => checkResult(buffer, should)) + .then(task.done.bind(task)); + }); + + audit.run(); + </script> + </body> +</html> |