test_bug964376.html (1706B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test repeating audio is not distorted</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 function gcd(a, b) { 14 if (b === 0) { 15 return a; 16 } 17 return gcd(b, a % b); 18 } 19 20 var SAMPLE_PLACEMENT = 128; 21 22 var gTest = { 23 length: 2048, 24 numberOfChannels: 1, 25 26 createGraph(context) { 27 var freq = Math.round(context.sampleRate / SAMPLE_PLACEMENT); 28 var dur = context.sampleRate / gcd(freq, context.sampleRate); 29 var buffer = context.createBuffer(1, dur, context.sampleRate); 30 31 for (var i = 0; i < context.sampleRate; ++i) { 32 buffer.getChannelData(0)[i] = Math.sin(freq * 2 * Math.PI * i / context.sampleRate); 33 } 34 35 var source = context.createBufferSource(); 36 source.buffer = buffer; 37 source.loop = true; 38 source.playbackRate.setValueAtTime(0.5, SAMPLE_PLACEMENT / context.sampleRate); 39 source.start(0); 40 41 return source; 42 }, 43 44 createExpectedBuffers(context) { 45 var freq = Math.round(context.sampleRate / SAMPLE_PLACEMENT); 46 var expectedBuffer = context.createBuffer(1, 2048, context.sampleRate); 47 var c = expectedBuffer.getChannelData(0); 48 for (var i = 0; i < c.length; ++i) { 49 if (i < SAMPLE_PLACEMENT) { 50 c[i] = Math.sin(freq * 2 * Math.PI * i / context.sampleRate); 51 } else { 52 c[i] = Math.sin(freq / 2 * 2 * Math.PI * (i + SAMPLE_PLACEMENT) / context.sampleRate); 53 } 54 } 55 56 return expectedBuffer; 57 }, 58 }; 59 60 runTest(); 61 </script> 62 </pre> 63 </body> 64 </html>