4 Tests that AudioChannelSplitter works correctly.
9 <script src="../fast/js/resources/js-test-pre.js"></script>
10 <script type="text/javascript" src="resources/audio-testing.js"></script>
15 <div id="description"></div>
16 <div id="console"></div>
19 description("Tests AudioChannelSplitter.");
21 var sampleRate = 44100.0;
22 var lengthInSampleFrames = 512;
30 function createStereoBufferWithDCOffset(length, sampleRate, offset) {
31 var buffer = context.createBuffer(2, length, sampleRate);
32 var n = buffer.length;
33 var channelL = buffer.getChannelData(0);
34 var channelR = buffer.getChannelData(1);
36 for (var i = 0; i < n; ++i) {
38 channelR[i] = -1.0 * offset;
44 // checkResult() checks that the rendered buffer is stereo and that the left channel is all -1 and right channel all +1.
45 // In other words, we've reversed the order of the two channels.
46 function checkResult(event) {
47 var buffer = event.renderedBuffer;
51 if (buffer.numberOfChannels == 2) {
52 var bufferDataL = buffer.getChannelData(0);
53 var bufferDataR = buffer.getChannelData(1);
55 // Go through every sample and make sure it's all -1 for the left-channel, and all +1 for the right-channel.
56 for (var i = 0; i < buffer.length; ++i) {
57 if (bufferDataL[i] != -1 || bufferDataR[i] != 1) {
67 testPassed("Correctly exchanged left and right channels.");
69 testFailed("Error on exchanging left and right channels.");
76 if (window.layoutTestController) {
77 layoutTestController.dumpAsText();
78 layoutTestController.waitUntilDone();
81 window.jsTestIsAsync = true;
83 // Create stereo offline audio context.
84 context = new webkitAudioContext(2, lengthInSampleFrames, sampleRate);
87 var splitternode = context.createChannelSplitter(0);
88 testFailed("Exception should be thrown for numberOfOutputs <= 0.");
90 testPassed("Exception been thrown for numberOfOutputs <= 0.");
94 var splitternode = context.createChannelSplitter(33);
95 testFailed("Exception should be thrown for numerOfOutputs >= 32.");
97 testPassed("Exception been thrown for numberOfOutputs >= 32.");
100 // Create a stereo buffer, with all +1 values in left channel, all -1 in right channel.
101 sourceBuffer = createStereoBufferWithDCOffset(lengthInSampleFrames, sampleRate, 1);
103 sourceNode = context.createBufferSource();
104 sourceNode.buffer = sourceBuffer;
106 // Create a channel splitter and connect it so that it split the stereo stream into two mono streams.
107 channelSplitter = context.createChannelSplitter(2);
108 sourceNode.connect(channelSplitter);
110 // Create a channel merger to merge the output of channel splitter.
111 channelMerger = context.createChannelMerger();
112 channelMerger.connect(context.destination);
114 // When merging, exchange channel layout: left->right, right->left
115 channelSplitter.connect(channelMerger, 0, 1);
116 channelSplitter.connect(channelMerger, 1, 0);
118 sourceNode.noteOn(0);
120 context.oncomplete = checkResult;
121 context.startRendering();
128 <script src="../fast/js/resources/js-test-post.js"></script>