test_audioBufferSourceNodeRate.html (1917B)
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 SimpleTest.waitForExplicitFinish(); 14 15 var rate = 44100; 16 var off = new OfflineAudioContext(1, rate, rate); 17 var off2 = new OfflineAudioContext(1, rate, rate); 18 19 var source = off.createBufferSource(); 20 var source2 = off2.createBufferSource(); 21 22 // a buffer of a 440Hz at half the length. If we detune by -1200 or set the 23 // playbackRate to 0.5, we should get 44100 samples back with a sine at 220Hz. 24 var buf = off.createBuffer(1, rate / 2, rate); 25 var bufarray = buf.getChannelData(0); 26 for (var i = 0; i < bufarray.length; i++) { 27 bufarray[i] = Math.sin(i * 440 * 2 * Math.PI / rate); 28 } 29 30 source.buffer = buf; 31 source.playbackRate.value = 0.25; // slowdown to 25% speed 32 source.connect(off.destination); 33 source.start(0); 34 35 source2.buffer = buf; 36 source2.detune.value = -2400; // two octaves -> slowdown to 25% speed 37 source2.connect(off2.destination); 38 source2.start(0); 39 40 off.startRendering().then((renderedPlaybackRate) => { 41 // we don't care about comparing the value here, we just want to know whether 42 // the second part is noisy. 43 var rmsValue = rms(renderedPlaybackRate, 0, 22050); 44 ok(rmsValue != 0, "Resampling happened (rms of the second part " + rmsValue + ")"); 45 46 off2.startRendering().then((renderedDetune) => { 47 var rmsValue = rms(renderedDetune, 0, 22050); 48 ok(rmsValue != 0, "Resampling happened (rms of the second part " + rmsValue + ")"); 49 // The two buffers should be the same: detune of -2400 is a slowdown to 25% speed 50 compareBuffers(renderedPlaybackRate, renderedDetune); 51 SimpleTest.finish(); 52 }); 53 }); 54 55 </script> 56 </pre> 57 </body> 58 </html>