Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 var sampleRate = 44100.0; | 1 var sampleRate = 44100.0; |
| 2 | 2 |
| 3 var numberOfChannels = 1; | 3 var numberOfChannels = 1; |
| 4 | 4 |
| 5 // Time step when each panner node starts. | 5 // Time step when each panner node starts. |
| 6 var timeStep = 0.001; | 6 var timeStep = 0.001; |
| 7 | 7 |
| 8 // Length of the impulse signal. | 8 // Length of the impulse signal. |
| 9 var pulseLengthFrames = Math.round(timeStep * sampleRate); | 9 var pulseLengthFrames = Math.round(timeStep * sampleRate); |
| 10 | 10 |
| 11 // How many panner nodes to create for the test | 11 // How many panner nodes to create for the test |
| 12 var nodesToCreate = 100; | 12 var nodesToCreate = 100; |
| 13 | 13 |
| 14 // Be sure we render long enough for all of our nodes. | 14 // Be sure we render long enough for all of our nodes. |
| 15 var renderLengthSeconds = timeStep * (nodesToCreate + 1); | 15 var renderLengthSeconds = timeStep * (nodesToCreate + 1); |
| 16 | 16 |
| 17 // These are global mostly for debugging. | 17 // These are global mostly for debugging. |
| 18 var context; | 18 var context; |
| 19 var impulse; | 19 var impulse; |
| 20 var bufferSource; | 20 var bufferSource; |
| 21 var panner; | 21 var panner; |
| 22 var position; | 22 var position; |
| 23 var time; | 23 var time; |
| 24 | 24 |
| 25 var renderedBuffer; | 25 var renderedBuffer; |
| 26 var renderedLeft; | 26 var renderedLeft; |
| 27 var renderedRight; | 27 var renderedRight; |
| 28 | 28 |
| 29 function createGraph(context, nodeCount) { | 29 function createGraph(context, nodeCount, positionSetter) { |
| 30 bufferSource = new Array(nodeCount); | 30 bufferSource = new Array(nodeCount); |
| 31 panner = new Array(nodeCount); | 31 panner = new Array(nodeCount); |
| 32 position = new Array(nodeCount); | 32 position = new Array(nodeCount); |
| 33 time = new Array(nodeCount); | 33 time = new Array(nodeCount); |
| 34 // Angle between panner locations. (nodeCount - 1 because we want | 34 // Angle between panner locations. (nodeCount - 1 because we want |
| 35 // to include both 0 and 180 deg. | 35 // to include both 0 and 180 deg. |
| 36 var angleStep = Math.PI / (nodeCount - 1); | 36 var angleStep = Math.PI / (nodeCount - 1); |
| 37 | 37 |
| 38 if (numberOfChannels == 2) { | 38 if (numberOfChannels == 2) { |
| 39 impulse = createStereoImpulseBuffer(context, pulseLengthFrames); | 39 impulse = createStereoImpulseBuffer(context, pulseLengthFrames); |
| 40 } | 40 } |
| 41 else | 41 else |
| 42 impulse = createImpulseBuffer(context, pulseLengthFrames); | 42 impulse = createImpulseBuffer(context, pulseLengthFrames); |
| 43 | 43 |
| 44 for (var k = 0; k < nodeCount; ++k) { | 44 for (var k = 0; k < nodeCount; ++k) { |
| 45 bufferSource[k] = context.createBufferSource(); | 45 bufferSource[k] = context.createBufferSource(); |
| 46 bufferSource[k].buffer = impulse; | 46 bufferSource[k].buffer = impulse; |
| 47 | 47 |
| 48 panner[k] = context.createPanner(); | 48 panner[k] = context.createPanner(); |
| 49 panner[k].panningModel = "equalpower"; | 49 panner[k].panningModel = "equalpower"; |
| 50 panner[k].distanceModel = "linear"; | 50 panner[k].distanceModel = "linear"; |
| 51 | 51 |
| 52 var angle = angleStep * k; | 52 var angle = angleStep * k; |
| 53 position[k] = {angle : angle, x : Math.cos(angle), z : Math.sin(angle)}; | 53 position[k] = {angle : angle, x : Math.cos(angle), z : Math.sin(angle)}; |
| 54 panner[k].setPosition(position[k].x, 0, position[k].z); | 54 //panner[k].setPosition(position[k].x, 0, position[k].z); |
|
hongchan
2016/05/03 18:15:01
Are we keeping this commented line as well?
Raymond Toy
2016/05/03 20:32:21
Should be deleted.
| |
| 55 positionSetter(panner[k], position[k].x, 0, position[k].z); | |
| 55 | 56 |
| 56 bufferSource[k].connect(panner[k]); | 57 bufferSource[k].connect(panner[k]); |
| 57 panner[k].connect(context.destination); | 58 panner[k].connect(context.destination); |
| 58 | 59 |
| 59 // Start the source | 60 // Start the source |
| 60 time[k] = k * timeStep; | 61 time[k] = k * timeStep; |
| 61 bufferSource[k].start(time[k]); | 62 bufferSource[k].start(time[k]); |
| 62 } | 63 } |
| 63 } | 64 } |
| 64 | 65 |
| 65 function createTestAndRun(context, nodeCount, numberOfSourceChannels) { | 66 function createTestAndRun(context, nodeCount, numberOfSourceChannels, positionSe tter) { |
| 66 numberOfChannels = numberOfSourceChannels; | 67 numberOfChannels = numberOfSourceChannels; |
| 67 | 68 |
| 68 createGraph(context, nodeCount); | 69 createGraph(context, nodeCount, positionSetter); |
| 69 | 70 |
| 70 context.oncomplete = checkResult; | 71 context.oncomplete = checkResult; |
| 71 context.startRendering(); | 72 context.startRendering(); |
| 72 } | 73 } |
| 73 | 74 |
| 74 // Map our position angle to the azimuth angle (in degrees). | 75 // Map our position angle to the azimuth angle (in degrees). |
| 75 // | 76 // |
| 76 // An angle of 0 corresponds to an azimuth of 90 deg; pi, to -90 deg. | 77 // An angle of 0 corresponds to an azimuth of 90 deg; pi, to -90 deg. |
| 77 function angleToAzimuth(angle) { | 78 function angleToAzimuth(angle) { |
| 78 return 90 - angle * 180 / Math.PI; | 79 return 90 - angle * 180 / Math.PI; |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 200 } | 201 } |
| 201 | 202 |
| 202 if (success) { | 203 if (success) { |
| 203 testPassed("EqualPower panner test passed"); | 204 testPassed("EqualPower panner test passed"); |
| 204 } else { | 205 } else { |
| 205 testFailed("EqualPower panner test failed"); | 206 testFailed("EqualPower panner test failed"); |
| 206 } | 207 } |
| 207 | 208 |
| 208 finishJSTest(); | 209 finishJSTest(); |
| 209 } | 210 } |
| OLD | NEW |