Index: third_party/WebKit/LayoutTests/webaudio/resources/panner-model-testing.js |
diff --git a/third_party/WebKit/LayoutTests/webaudio/resources/panner-model-testing.js b/third_party/WebKit/LayoutTests/webaudio/resources/panner-model-testing.js |
index cf9c8287edfc934a7fe58308a6b71be847657b69..8eb07050be7fac88156caf15b9c5ab260605ee32 100644 |
--- a/third_party/WebKit/LayoutTests/webaudio/resources/panner-model-testing.js |
+++ b/third_party/WebKit/LayoutTests/webaudio/resources/panner-model-testing.js |
@@ -21,162 +21,161 @@ var bufferSource; |
var panner; |
var position; |
var time; |
- |
+ |
var renderedBuffer; |
var renderedLeft; |
var renderedRight; |
function createGraph(context, nodeCount, positionSetter) { |
- bufferSource = new Array(nodeCount); |
- panner = new Array(nodeCount); |
- position = new Array(nodeCount); |
- time = new Array(nodeCount); |
- // Angle between panner locations. (nodeCount - 1 because we want |
- // to include both 0 and 180 deg. |
- var angleStep = Math.PI / (nodeCount - 1); |
- |
- if (numberOfChannels == 2) { |
- impulse = createStereoImpulseBuffer(context, pulseLengthFrames); |
- } |
- else |
- impulse = createImpulseBuffer(context, pulseLengthFrames); |
- |
- for (var k = 0; k < nodeCount; ++k) { |
- bufferSource[k] = context.createBufferSource(); |
- bufferSource[k].buffer = impulse; |
- |
- panner[k] = context.createPanner(); |
- panner[k].panningModel = "equalpower"; |
- panner[k].distanceModel = "linear"; |
- |
- var angle = angleStep * k; |
- position[k] = {angle : angle, x : Math.cos(angle), z : Math.sin(angle)}; |
- positionSetter(panner[k], position[k].x, 0, position[k].z); |
- |
- bufferSource[k].connect(panner[k]); |
- panner[k].connect(context.destination); |
- |
- // Start the source |
- time[k] = k * timeStep; |
- bufferSource[k].start(time[k]); |
- } |
+ bufferSource = new Array(nodeCount); |
+ panner = new Array(nodeCount); |
+ position = new Array(nodeCount); |
+ time = new Array(nodeCount); |
+ // Angle between panner locations. (nodeCount - 1 because we want |
+ // to include both 0 and 180 deg. |
+ let angleStep = Math.PI / (nodeCount - 1); |
+ |
+ if (numberOfChannels == 2) { |
+ impulse = createStereoImpulseBuffer(context, pulseLengthFrames); |
+ } else |
+ impulse = createImpulseBuffer(context, pulseLengthFrames); |
+ |
+ for (let k = 0; k < nodeCount; ++k) { |
+ bufferSource[k] = context.createBufferSource(); |
+ bufferSource[k].buffer = impulse; |
+ |
+ panner[k] = context.createPanner(); |
+ panner[k].panningModel = 'equalpower'; |
+ panner[k].distanceModel = 'linear'; |
+ |
+ let angle = angleStep * k; |
+ position[k] = {angle: angle, x: Math.cos(angle), z: Math.sin(angle)}; |
+ positionSetter(panner[k], position[k].x, 0, position[k].z); |
+ |
+ bufferSource[k].connect(panner[k]); |
+ panner[k].connect(context.destination); |
+ |
+ // Start the source |
+ time[k] = k * timeStep; |
+ bufferSource[k].start(time[k]); |
+ } |
} |
-function createTestAndRun(context, should, nodeCount, numberOfSourceChannels, |
- positionSetter) { |
- numberOfChannels = numberOfSourceChannels; |
+function createTestAndRun( |
+ context, should, nodeCount, numberOfSourceChannels, positionSetter) { |
+ numberOfChannels = numberOfSourceChannels; |
- createGraph(context, nodeCount, positionSetter); |
+ createGraph(context, nodeCount, positionSetter); |
- return context.startRendering() |
- .then(buffer => checkResult(buffer, should)); |
+ return context.startRendering().then(buffer => checkResult(buffer, should)); |
} |
// Map our position angle to the azimuth angle (in degrees). |
// |
// An angle of 0 corresponds to an azimuth of 90 deg; pi, to -90 deg. |
function angleToAzimuth(angle) { |
- return 90 - angle * 180 / Math.PI; |
+ return 90 - angle * 180 / Math.PI; |
} |
// The gain caused by the EQUALPOWER panning model |
function equalPowerGain(angle) { |
- var azimuth = angleToAzimuth(angle); |
+ let azimuth = angleToAzimuth(angle); |
+ |
+ if (numberOfChannels == 1) { |
+ let panPosition = (azimuth + 90) / 180; |
- if (numberOfChannels == 1) { |
- var panPosition = (azimuth + 90) / 180; |
+ let gainL = Math.cos(0.5 * Math.PI * panPosition); |
+ let gainR = Math.sin(0.5 * Math.PI * panPosition); |
- var gainL = Math.cos(0.5 * Math.PI * panPosition); |
- var gainR = Math.sin(0.5 * Math.PI * panPosition); |
+ return {left: gainL, right: gainR}; |
+ } else { |
+ if (azimuth <= 0) { |
+ let panPosition = (azimuth + 90) / 90; |
- return { left : gainL, right : gainR }; |
+ let gainL = 1 + Math.cos(0.5 * Math.PI * panPosition); |
+ let gainR = Math.sin(0.5 * Math.PI * panPosition); |
+ |
+ return {left: gainL, right: gainR}; |
} else { |
- if (azimuth <= 0) { |
- var panPosition = (azimuth + 90) / 90; |
- |
- var gainL = 1 + Math.cos(0.5 * Math.PI * panPosition); |
- var gainR = Math.sin(0.5 * Math.PI * panPosition); |
- |
- return { left : gainL, right : gainR }; |
- } else { |
- var panPosition = azimuth / 90; |
- |
- var gainL = Math.cos(0.5 * Math.PI * panPosition); |
- var gainR = 1 + Math.sin(0.5 * Math.PI * panPosition); |
- |
- return { left : gainL, right : gainR }; |
- } |
+ let panPosition = azimuth / 90; |
+ |
+ let gainL = Math.cos(0.5 * Math.PI * panPosition); |
+ let gainR = 1 + Math.sin(0.5 * Math.PI * panPosition); |
+ |
+ return {left: gainL, right: gainR}; |
} |
+ } |
} |
function checkResult(renderedBuffer, should) { |
- renderedLeft = renderedBuffer.getChannelData(0); |
- renderedRight = renderedBuffer.getChannelData(1); |
- |
- // The max error we allow between the rendered impulse and the |
- // expected value. This value is experimentally determined. Set |
- // to 0 to make the test fail to see what the actual error is. |
- var maxAllowedError = 1.3e-6; |
- |
- var success = true; |
- |
- // Number of impulses found in the rendered result. |
- var impulseCount = 0; |
- |
- // Max (relative) error and the index of the maxima for the left |
- // and right channels. |
- var maxErrorL = 0; |
- var maxErrorIndexL = 0; |
- var maxErrorR = 0; |
- var maxErrorIndexR = 0; |
- |
- // Number of impulses that don't match our expected locations. |
- var timeCount = 0; |
- |
- // Locations of where the impulses aren't at the expected locations. |
- var timeErrors = new Array(); |
- |
- for (var k = 0; k < renderedLeft.length; ++k) { |
- // We assume that the left and right channels start at the same instant. |
- if (renderedLeft[k] != 0 || renderedRight[k] != 0) { |
- // The expected gain for the left and right channels. |
- var pannerGain = equalPowerGain(position[impulseCount].angle); |
- var expectedL = pannerGain.left; |
- var expectedR = pannerGain.right; |
- |
- // Absolute error in the gain. |
- var errorL = Math.abs(renderedLeft[k] - expectedL); |
- var errorR = Math.abs(renderedRight[k] - expectedR); |
- |
- if (Math.abs(errorL) > maxErrorL) { |
- maxErrorL = Math.abs(errorL); |
- maxErrorIndexL = impulseCount; |
- } |
- if (Math.abs(errorR) > maxErrorR) { |
- maxErrorR = Math.abs(errorR); |
- maxErrorIndexR = impulseCount; |
- } |
- |
- // Keep track of the impulses that didn't show up where we |
- // expected them to be. |
- var expectedOffset = timeToSampleFrame(time[impulseCount], sampleRate); |
- if (k != expectedOffset) { |
- timeErrors[timeCount] = { actual : k, expected : expectedOffset}; |
- ++timeCount; |
- } |
- ++impulseCount; |
- } |
+ renderedLeft = renderedBuffer.getChannelData(0); |
+ renderedRight = renderedBuffer.getChannelData(1); |
+ |
+ // The max error we allow between the rendered impulse and the |
+ // expected value. This value is experimentally determined. Set |
+ // to 0 to make the test fail to see what the actual error is. |
+ let maxAllowedError = 1.3e-6; |
+ |
+ let success = true; |
+ |
+ // Number of impulses found in the rendered result. |
+ let impulseCount = 0; |
+ |
+ // Max (relative) error and the index of the maxima for the left |
+ // and right channels. |
+ let maxErrorL = 0; |
+ let maxErrorIndexL = 0; |
+ let maxErrorR = 0; |
+ let maxErrorIndexR = 0; |
+ |
+ // Number of impulses that don't match our expected locations. |
+ let timeCount = 0; |
+ |
+ // Locations of where the impulses aren't at the expected locations. |
+ let timeErrors = new Array(); |
+ |
+ for (let k = 0; k < renderedLeft.length; ++k) { |
+ // We assume that the left and right channels start at the same instant. |
+ if (renderedLeft[k] != 0 || renderedRight[k] != 0) { |
+ // The expected gain for the left and right channels. |
+ let pannerGain = equalPowerGain(position[impulseCount].angle); |
+ let expectedL = pannerGain.left; |
+ let expectedR = pannerGain.right; |
+ |
+ // Absolute error in the gain. |
+ let errorL = Math.abs(renderedLeft[k] - expectedL); |
+ let errorR = Math.abs(renderedRight[k] - expectedR); |
+ |
+ if (Math.abs(errorL) > maxErrorL) { |
+ maxErrorL = Math.abs(errorL); |
+ maxErrorIndexL = impulseCount; |
+ } |
+ if (Math.abs(errorR) > maxErrorR) { |
+ maxErrorR = Math.abs(errorR); |
+ maxErrorIndexR = impulseCount; |
+ } |
+ |
+ // Keep track of the impulses that didn't show up where we |
+ // expected them to be. |
+ let expectedOffset = timeToSampleFrame(time[impulseCount], sampleRate); |
+ if (k != expectedOffset) { |
+ timeErrors[timeCount] = {actual: k, expected: expectedOffset}; |
+ ++timeCount; |
+ } |
+ ++impulseCount; |
} |
+ } |
- should(impulseCount, "Number of impulses found") |
- .beEqualTo(nodesToCreate); |
+ should(impulseCount, 'Number of impulses found').beEqualTo(nodesToCreate); |
- should(timeErrors.map(x => x.actual), "Offsets of impulses at the wrong position") |
- .beEqualToArray(timeErrors.map(x => x.expected)); |
+ should( |
+ timeErrors.map(x => x.actual), |
+ 'Offsets of impulses at the wrong position') |
+ .beEqualToArray(timeErrors.map(x => x.expected)); |
- should(maxErrorL, "Error in left channel gain values") |
- .beLessThanOrEqualTo(maxAllowedError); |
+ should(maxErrorL, 'Error in left channel gain values') |
+ .beLessThanOrEqualTo(maxAllowedError); |
- should(maxErrorR, "Error in right channel gain values") |
- .beLessThanOrEqualTo(maxAllowedError); |
+ should(maxErrorR, 'Error in right channel gain values') |
+ .beLessThanOrEqualTo(maxAllowedError); |
} |