OLD | NEW |
1 var StereoPannerTest = (function () { | 1 var StereoPannerTest = (function () { |
2 | 2 |
3 // Constants | 3 // Constants |
4 var PI_OVER_TWO = Math.PI * 0.5; | 4 var PI_OVER_TWO = Math.PI * 0.5; |
5 | 5 |
6 var gSampleRate = 44100; | 6 var gSampleRate = 44100; |
7 | 7 |
8 // Time step when each panner node starts. | 8 // Time step when each panner node starts. |
9 var gTimeStep = 0.001; | 9 var gTimeStep = 0.001; |
10 | 10 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 // to 0 to make the test fail to see what the actual error is. | 81 // to 0 to make the test fail to see what the actual error is. |
82 this.maxAllowedError = 1.3e-6; | 82 this.maxAllowedError = 1.3e-6; |
83 | 83 |
84 // Max (absolute) error and the index of the maxima for the left | 84 // Max (absolute) error and the index of the maxima for the left |
85 // and right channels. | 85 // and right channels. |
86 this.maxErrorL = 0; | 86 this.maxErrorL = 0; |
87 this.maxErrorR = 0; | 87 this.maxErrorR = 0; |
88 this.maxErrorIndexL = 0; | 88 this.maxErrorIndexL = 0; |
89 this.maxErrorIndexR = 0; | 89 this.maxErrorIndexR = 0; |
90 | 90 |
| 91 // The maximum value to use for panner pan value. The value will range from
-panLimit to |
| 92 // +panLimit. |
| 93 this.panLimit = 1.0625; |
91 } | 94 } |
92 | 95 |
93 | 96 |
94 Test.prototype.init = function () { | 97 Test.prototype.init = function () { |
95 this.context = new OfflineAudioContext(2, gRenderLength, gSampleRate); | 98 this.context = new OfflineAudioContext(2, gRenderLength, gSampleRate); |
96 }; | 99 }; |
97 | 100 |
98 // Prepare an audio graph for testing. Create multiple impulse generators and | 101 // Prepare an audio graph for testing. Create multiple impulse generators and |
99 // panner nodes, then play them sequentially while varying the pan position. | 102 // panner nodes, then play them sequentially while varying the pan position. |
100 Test.prototype.prepare = function () { | 103 Test.prototype.prepare = function () { |
101 var impulse; | 104 var impulse; |
102 var impulseLength = Math.round(gTimeStep * gSampleRate); | 105 var impulseLength = Math.round(gTimeStep * gSampleRate); |
103 var sources = []; | 106 var sources = []; |
104 var panners = []; | 107 var panners = []; |
105 | 108 |
106 // Moves the pan value for each panner by pan step unit from -2 to 2. | 109 // Moves the pan value for each panner by pan step unit from -2 to 2. |
107 // This is to check if the internal panning value is clipped properly. | 110 // This is to check if the internal panning value is clipped properly. |
108 var panStep = 4 / (gNodesToCreate - 1); | 111 var panStep = (2 * this.panLimit) / (gNodesToCreate - 1); |
109 | 112 |
110 if (this.numberOfInputChannels === 1) { | 113 if (this.numberOfInputChannels === 1) { |
111 impulse = createImpulseBuffer(this.context, impulseLength); | 114 impulse = createImpulseBuffer(this.context, impulseLength); |
112 } else { | 115 } else { |
113 impulse = createStereoImpulseBuffer(this.context, impulseLength); | 116 impulse = createStereoImpulseBuffer(this.context, impulseLength); |
114 } | 117 } |
115 | 118 |
116 for (var i = 0; i < gNodesToCreate; i++) { | 119 for (var i = 0; i < gNodesToCreate; i++) { |
117 sources[i] = this.context.createBufferSource(); | 120 sources[i] = this.context.createBufferSource(); |
118 panners[i] = this.context.createStereoPanner(); | 121 panners[i] = this.context.createStereoPanner(); |
119 sources[i].connect(panners[i]); | 122 sources[i].connect(panners[i]); |
120 panners[i].connect(this.context.destination); | 123 panners[i].connect(this.context.destination); |
121 sources[i].buffer = impulse; | 124 sources[i].buffer = impulse; |
122 panners[i].pan.value = this.panPositions[i] = panStep * i - 2; | 125 panners[i].pan.value = this.panPositions[i] = panStep * i - this.panLimit; |
123 | 126 |
124 // Store the onset time position of impulse. | 127 // Store the onset time position of impulse. |
125 this.onsets[i] = gTimeStep * i; | 128 this.onsets[i] = gTimeStep * i; |
126 | 129 |
127 sources[i].start(this.onsets[i]); | 130 sources[i].start(this.onsets[i]); |
128 } | 131 } |
129 }; | 132 }; |
130 | 133 |
131 | 134 |
132 Test.prototype.verify = function () { | 135 Test.prototype.verify = function () { |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 | 250 |
248 | 251 |
249 return { | 252 return { |
250 create: function (options) { | 253 create: function (options) { |
251 return new Test(options); | 254 return new Test(options); |
252 } | 255 } |
253 }; | 256 }; |
254 | 257 |
255 })(); | 258 })(); |
256 | 259 |
OLD | NEW |