test_scriptProcessorNodeChannelCount.html (2724B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test AudioBufferSourceNode</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="webaudio.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 </head> 9 <body> 10 <pre id="test"> 11 <script class="testbody" type="text/javascript"> 12 13 // We do not use our generic graph test framework here because 14 // the testing logic here is sort of complicated, and would 15 // not be easy to map to OfflineAudioContext, as ScriptProcessorNodes 16 // can experience delays. 17 18 SimpleTest.waitForExplicitFinish(); 19 addLoadEvent(function() { 20 var context = new AudioContext(); 21 var buffer = context.createBuffer(6, 2048, context.sampleRate); 22 for (var i = 0; i < 2048; ++i) { 23 for (var j = 0; j < 6; ++j) { 24 buffer.getChannelData(0)[i] = Math.sin(440 * j * Math.PI * i / context.sampleRate); 25 } 26 } 27 28 var monoBuffer = context.createBuffer(1, 2048, context.sampleRate); 29 for (var i = 0; i < 2048; ++i) { 30 monoBuffer.getChannelData(0)[i] = 1; 31 } 32 33 var source = context.createBufferSource(); 34 35 var sp = context.createScriptProcessor(2048, 3); 36 expectException(function() { sp.channelCount = 2; }, 37 DOMException.NOT_SUPPORTED_ERR); 38 sp.channelCountMode = "explicit"; 39 expectException(function() { sp.channelCountMode = "max"; }, 40 DOMException.NOT_SUPPORTED_ERR); 41 expectException(function() { sp.channelCountMode = "clamped-max"; }, 42 DOMException.NOT_SUPPORTED_ERR); 43 sp.channelInterpretation = "discrete"; 44 source.start(0); 45 source.buffer = buffer; 46 source.connect(sp); 47 sp.connect(context.destination); 48 49 var monoSource = context.createBufferSource(); 50 monoSource.buffer = monoBuffer; 51 monoSource.connect(sp); 52 monoSource.start(2048 / context.sampleRate); 53 54 sp.onaudioprocess = function(e) { 55 is(e.inputBuffer.numberOfChannels, 3, "Should be correctly down-mixed to three channels"); 56 for (var i = 0; i < 3; ++i) { 57 compareChannels(e.inputBuffer.getChannelData(i), buffer.getChannelData(i)); 58 } 59 60 // On the next iteration, we'll get a silence buffer 61 sp.onaudioprocess = function(e) { 62 var emptyBuffer = context.createBuffer(1, 2048, context.sampleRate); 63 is(e.inputBuffer.numberOfChannels, 3, "Should be correctly up-mixed to three channels"); 64 compareChannels(e.inputBuffer.getChannelData(0), monoBuffer.getChannelData(0)); 65 for (var i = 1; i < 3; ++i) { 66 compareChannels(e.inputBuffer.getChannelData(i), emptyBuffer.getChannelData(0)); 67 } 68 69 sp.onaudioprocess = null; 70 sp.disconnect(context.destination); 71 72 SimpleTest.finish(); 73 }; 74 }; 75 }); 76 77 </script> 78 </pre> 79 </body> 80 </html>