<!DOCTYPE HTML> <html> <head> <title>Test PeriodicWave disableNormalization Parameter</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="webaudio.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <pre id="test"> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); // We create PerodicWave instances containing two tones and compare it to // buffers created directly in JavaScript by adding the two waves together. // Two of the PeriodicWaves are normalized, the other is not. This test is // a modification of test_periodicWave.html. // // These constants are borrowed from test_periodicWave.html and modified // so that the realPeak (which is the normalization factor) will be small // enough that the errors are within the bounds for the test. const realMax = 99; var real = new Float32Array(realMax + 1); real[1] = 2.0; // fundamental real[realMax] = 0.25; const realPeak = real[1] + real[realMax]; const realFundamental = 19.0; const testLength = 4096; addLoadEvent(function() { runTest(); }); var gTest = { createGraph: function(context) { var merger = context.createChannelMerger(); var osc0 = context.createOscillator(); var osc1 = context.createOscillator(); var osc2 = context.createOscillator(); osc0.setPeriodicWave(context. createPeriodicWave(real, new Float32Array(real.length), {disableNormalization: false})); osc1.setPeriodicWave(context. createPeriodicWave(real, new Float32Array(real.length))); osc2.setPeriodicWave(context. createPeriodicWave(real, new Float32Array(real.length), {disableNormalization: true})); osc0.frequency.value = realFundamental; osc1.frequency.value = realFundamental; osc2.frequency.value = realFundamental; osc0.start(); osc1.start(); osc2.start(); osc0.connect(merger, 0, 0); osc1.connect(merger, 0, 1); osc2.connect(merger, 0, 2); return merger; }, createExpectedBuffers: function(context) { var buffer = context.createBuffer(3, testLength, context.sampleRate); for (var i = 0; i < buffer.length; ++i) { buffer.getChannelData(0)[i] = 1.0 / realPeak * (real[1] * Math.cos(2 * Math.PI * realFundamental * i / context.sampleRate) + real[realMax] * Math.cos(2 * Math.PI * realMax * realFundamental * i / context.sampleRate)); buffer.getChannelData(1)[i] = buffer.getChannelData(0)[i]; // TODO: We need to scale by a factor of two to make the results work // out here. This seems suspicious, see Bug 1266737. buffer.getChannelData(2)[i] = 2.0 * (real[1] * Math.cos(2 * Math.PI * realFundamental * i / context.sampleRate) + real[realMax] * Math.cos(2 * Math.PI * realMax * realFundamental * i / context.sampleRate)); } return buffer; }, 'numberOfChannels': 3, }; </script> </pre> </body> </html>