test_periodicWaveDisableNormalization.html (3204B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test PeriodicWave disableNormalization Parameter</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 // We create PerodicWave instances containing two tones and compare it to 16 // buffers created directly in JavaScript by adding the two waves together. 17 // Two of the PeriodicWaves are normalized, the other is not. This test is 18 // a modification of test_periodicWave.html. 19 // 20 // These constants are borrowed from test_periodicWave.html and modified 21 // so that the realPeak (which is the normalization factor) will be small 22 // enough that the errors are within the bounds for the test. 23 const realMax = 99; 24 var real = new Float32Array(realMax + 1); 25 real[1] = 2.0; // fundamental 26 real[realMax] = 0.25; 27 28 const realPeak = real[1] + real[realMax]; 29 const realFundamental = 19.0; 30 31 const testLength = 4096; 32 33 addLoadEvent(function() { 34 runTest(); 35 }); 36 37 var gTest = { 38 createGraph(context) { 39 var merger = context.createChannelMerger(); 40 41 var osc0 = context.createOscillator(); 42 var osc1 = context.createOscillator(); 43 var osc2 = context.createOscillator(); 44 45 osc0.setPeriodicWave(context. 46 createPeriodicWave(real, 47 new Float32Array(real.length), 48 {disableNormalization: false})); 49 osc1.setPeriodicWave(context. 50 createPeriodicWave(real, 51 new Float32Array(real.length))); 52 osc2.setPeriodicWave(context. 53 createPeriodicWave(real, 54 new Float32Array(real.length), 55 {disableNormalization: true})); 56 57 osc0.frequency.value = realFundamental; 58 osc1.frequency.value = realFundamental; 59 osc2.frequency.value = realFundamental; 60 61 osc0.start(); 62 osc1.start(); 63 osc2.start(); 64 65 osc0.connect(merger, 0, 0); 66 osc1.connect(merger, 0, 1); 67 osc2.connect(merger, 0, 2); 68 69 return merger; 70 }, 71 createExpectedBuffers(context) { 72 var buffer = context.createBuffer(3, testLength, context.sampleRate); 73 74 for (var i = 0; i < buffer.length; ++i) { 75 76 buffer.getChannelData(0)[i] = 1.0 / realPeak * 77 (real[1] * Math.cos(2 * Math.PI * realFundamental * i / 78 context.sampleRate) + 79 real[realMax] * Math.cos(2 * Math.PI * realMax * realFundamental * i / 80 context.sampleRate)); 81 82 buffer.getChannelData(1)[i] = buffer.getChannelData(0)[i]; 83 84 buffer.getChannelData(2)[i] = 85 (real[1] * Math.cos(2 * Math.PI * realFundamental * i / 86 context.sampleRate) + 87 real[realMax] * Math.cos(2 * Math.PI * realMax * realFundamental * i / 88 context.sampleRate)); 89 } 90 return buffer; 91 }, 92 'numberOfChannels': 3, 93 }; 94 95 </script> 96 </pre> 97 </body> 98 </html>