| <!DOCTYPE html> | |
| <!-- | |
| Tests that that we can merge two mono streams into a stereo stream. | |
| --> | |
| <html> | |
| <head> | |
| <script src="../resources/js-test-pre.js"></script> | |
| <script type="text/javascript" src="resources/audio-testing.js"></script> | |
| <script type="text/javascript" src="resources/buffer-loader.js"></script> | |
| </head> | |
| <body> | |
| <div id="description"></div> | |
| <div id="console"></div> | |
| <script> | |
| description("Tests audio channel merging of two mono streams into a single stereo stream."); | |
| var sampleRate = 44100.0; | |
| var lengthInSampleFrames = 512; | |
| var context = 0; | |
| var bufferLoader = 0; | |
| var buffer1; | |
| var buffer2; | |
| var bufferSource1; | |
| var bufferSource2; | |
| var channelMerger; | |
| function createBufferWithDCOffset(length, sampleRate, offset) { | |
| var buffer = context.createBuffer(1, length, sampleRate); | |
| var data = buffer.getChannelData(0); | |
| for (var i = 0; i < buffer.length; ++i) | |
| data[i] = offset; | |
| return buffer; | |
| } | |
| // checkResult() checks that the rendered buffer is stereo and that the left channel is all -1 and right channel all +1. | |
| function checkResult(event) { | |
| var buffer = event.renderedBuffer; | |
| var success = true; | |
| if (buffer.numberOfChannels == 2) { | |
| var bufferDataL = buffer.getChannelData(0); | |
| var bufferDataR = buffer.getChannelData(1); | |
| // Go through every sample and make sure it's all -1 for the left-channel, and all +1 for the right-channel. | |
| for (var i = 0; i < buffer.length; ++i) { | |
| if (bufferDataL[i] != -1 || bufferDataR[i] != 1) { | |
| success = false; | |
| break; | |
| } | |
| } | |
| } else { | |
| success = false; | |
| } | |
| if (success) { | |
| testPassed("Correctly merged from two mono streams to stereo."); | |
| } else { | |
| testFailed("Merging error from two mono streams to stereo."); | |
| } | |
| finishJSTest(); | |
| } | |
| function runTest() { | |
| if (window.testRunner) { | |
| testRunner.dumpAsText(); | |
| testRunner.waitUntilDone(); | |
| } | |
| window.jsTestIsAsync = true; | |
| // Create stereo offline audio context. | |
| context = new webkitOfflineAudioContext(2, lengthInSampleFrames, sampleRate); | |
| // Create two mono buffers, one having all -1 values, the other all +1. | |
| buffer1 = createBufferWithDCOffset(lengthInSampleFrames, sampleRate, -1); | |
| buffer2 = createBufferWithDCOffset(lengthInSampleFrames, sampleRate, 1); | |
| // Create a buffer source for each of these buffers. | |
| bufferSource1 = context.createBufferSource(); | |
| bufferSource2 = context.createBufferSource(); | |
| bufferSource1.buffer = buffer1; | |
| bufferSource2.buffer = buffer2; | |
| // Create a channel merger and connect it so that it merges two mono streams into a single stereo stream. | |
| channelMerger = context.createChannelMerger(); | |
| bufferSource1.connect(channelMerger, 0, 0); // connect to input 0 of the channel merger | |
| bufferSource2.connect(channelMerger, 0, 1); // connect to input 1 of the channel merger | |
| channelMerger.connect(context.destination); | |
| // Trigger both sources to start at the beginning. | |
| bufferSource1.start(0); | |
| bufferSource2.start(0); | |
| context.oncomplete = checkResult; | |
| context.startRendering(); | |
| } | |
| runTest(); | |
| </script> | |
| <script src="../resources/js-test-post.js"></script> | |
| </body> | |
| </html> |