test-analysernode.html (7446B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script> 8 function testNode() { 9 var context = new AudioContext(); 10 var buffer = context.createBuffer(1, 2048, context.sampleRate); 11 for (var i = 0; i < 2048; ++i) { 12 buffer.getChannelData(0)[i] = Math.sin( 13 440 * 2 * Math.PI * i / context.sampleRate 14 ); 15 } 16 17 var destination = context.destination; 18 19 var source = context.createBufferSource(); 20 21 var analyser = context.createAnalyser(); 22 23 source.buffer = buffer; 24 25 source.connect(analyser); 26 analyser.connect(destination); 27 28 assert_equals( 29 analyser.channelCount, 30 2, 31 "analyser node has 2 input channels by default" 32 ); 33 assert_equals( 34 analyser.channelCountMode, 35 "max", 36 "Correct channelCountMode for the analyser node" 37 ); 38 assert_equals( 39 analyser.channelInterpretation, 40 "speakers", 41 "Correct channelCountInterpretation for the analyser node" 42 ); 43 44 assert_equals( 45 analyser.fftSize, 46 2048, 47 "Correct default value for fftSize" 48 ); 49 assert_equals( 50 analyser.frequencyBinCount, 51 1024, 52 "Correct default value for frequencyBinCount" 53 ); 54 assert_throws_dom("INDEX_SIZE_ERR", function() { 55 analyser.fftSize = 0; 56 }); 57 assert_throws_dom("INDEX_SIZE_ERR", function() { 58 analyser.fftSize = 1; 59 }); 60 assert_throws_dom("INDEX_SIZE_ERR", function() { 61 analyser.fftSize = 8; 62 }); 63 assert_throws_dom("INDEX_SIZE_ERR", function() { 64 analyser.fftSize = 100; 65 }); // non-power of two 66 assert_throws_dom("INDEX_SIZE_ERR", function() { 67 analyser.fftSize = 2049; 68 }); 69 assert_throws_dom("INDEX_SIZE_ERR", function() { 70 analyser.fftSize = 4097; 71 }); 72 assert_throws_dom("INDEX_SIZE_ERR", function() { 73 analyser.fftSize = 8193; 74 }); 75 assert_throws_dom("INDEX_SIZE_ERR", function() { 76 analyser.fftSize = 16385; 77 }); 78 assert_throws_dom("INDEX_SIZE_ERR", function() { 79 analyser.fftSize = 32769; 80 }); 81 assert_throws_dom("INDEX_SIZE_ERR", function() { 82 analyser.fftSize = 65536; 83 }); 84 analyser.fftSize = 1024; 85 assert_equals( 86 analyser.frequencyBinCount, 87 512, 88 "Correct new value for frequencyBinCount" 89 ); 90 91 assert_equals( 92 analyser.minDecibels, 93 -100, 94 "Correct default value for minDecibels" 95 ); 96 assert_equals( 97 analyser.maxDecibels, 98 -30, 99 "Correct default value for maxDecibels" 100 ); 101 assert_throws_dom("INDEX_SIZE_ERR", function() { 102 analyser.minDecibels = -30; 103 }); 104 assert_throws_dom("INDEX_SIZE_ERR", function() { 105 analyser.minDecibels = -29; 106 }); 107 assert_throws_dom("INDEX_SIZE_ERR", function() { 108 analyser.maxDecibels = -100; 109 }); 110 assert_throws_dom("INDEX_SIZE_ERR", function() { 111 analyser.maxDecibels = -101; 112 }); 113 114 assert_true( 115 Math.abs(analyser.smoothingTimeConstant - 0.8) < 0.001, 116 "Correct default value for smoothingTimeConstant" 117 ); 118 assert_throws_dom("INDEX_SIZE_ERR", function() { 119 analyser.smoothingTimeConstant = -0.1; 120 }); 121 assert_throws_dom("INDEX_SIZE_ERR", function() { 122 analyser.smoothingTimeConstant = 1.1; 123 }); 124 analyser.smoothingTimeConstant = 0; 125 analyser.smoothingTimeConstant = 1; 126 } 127 128 function testConstructor() { 129 var context = new AudioContext(); 130 131 var analyser = new AnalyserNode(context); 132 assert_equals( 133 analyser.channelCount, 134 2, 135 "analyser node has 2 input channels by default" 136 ); 137 assert_equals( 138 analyser.channelCountMode, 139 "max", 140 "Correct channelCountMode for the analyser node" 141 ); 142 assert_equals( 143 analyser.channelInterpretation, 144 "speakers", 145 "Correct channelCountInterpretation for the analyser node" 146 ); 147 148 assert_equals( 149 analyser.fftSize, 150 2048, 151 "Correct default value for fftSize" 152 ); 153 assert_equals( 154 analyser.frequencyBinCount, 155 1024, 156 "Correct default value for frequencyBinCount" 157 ); 158 assert_equals( 159 analyser.minDecibels, 160 -100, 161 "Correct default value for minDecibels" 162 ); 163 assert_equals( 164 analyser.maxDecibels, 165 -30, 166 "Correct default value for maxDecibels" 167 ); 168 assert_true( 169 Math.abs(analyser.smoothingTimeConstant - 0.8) < 0.001, 170 "Correct default value for smoothingTimeConstant" 171 ); 172 173 assert_throws_dom("INDEX_SIZE_ERR", function() { 174 analyser = new AnalyserNode(context, { fftSize: 0 }); 175 }); 176 assert_throws_dom("INDEX_SIZE_ERR", function() { 177 analyser = new AnalyserNode(context, { fftSize: 1 }); 178 }); 179 assert_throws_dom("INDEX_SIZE_ERR", function() { 180 analyser = new AnalyserNode(context, { fftSize: 8 }); 181 }); 182 assert_throws_dom("INDEX_SIZE_ERR", function() { 183 analyser = new AnalyserNode(context, { fftSize: 100 }); 184 }); 185 assert_throws_dom("INDEX_SIZE_ERR", function() { 186 analyser = new AnalyserNode(context, { fftSize: 2049 }); 187 }); 188 assert_throws_dom("INDEX_SIZE_ERR", function() { 189 analyser = new AnalyserNode(context, { fftSize: 4097 }); 190 }); 191 assert_throws_dom("INDEX_SIZE_ERR", function() { 192 analyser = new AnalyserNode(context, { fftSize: 8193 }); 193 }); 194 assert_throws_dom("INDEX_SIZE_ERR", function() { 195 analyser = new AnalyserNode(context, { fftSize: 16385 }); 196 }); 197 assert_throws_dom("INDEX_SIZE_ERR", function() { 198 analyser = new AnalyserNode(context, { fftSize: 32769 }); 199 }); 200 assert_throws_dom("INDEX_SIZE_ERR", function() { 201 analyser = new AnalyserNode(context, { fftSize: 65536 }); 202 }); 203 analyser = new AnalyserNode(context, { fftSize: 1024 }); 204 assert_equals( 205 analyser.frequencyBinCount, 206 512, 207 "Correct new value for frequencyBinCount" 208 ); 209 210 assert_throws_dom("INDEX_SIZE_ERR", function() { 211 analyser = new AnalyserNode(context, { minDecibels: -30 }); 212 }); 213 assert_throws_dom("INDEX_SIZE_ERR", function() { 214 analyser = new AnalyserNode(context, { minDecibels: -29 }); 215 }); 216 assert_throws_dom("INDEX_SIZE_ERR", function() { 217 analyser = new AnalyserNode(context, { maxDecibels: -100 }); 218 }); 219 assert_throws_dom("INDEX_SIZE_ERR", function() { 220 analyser = new AnalyserNode(context, { maxDecibels: -101 }); 221 }); 222 223 assert_throws_dom("INDEX_SIZE_ERR", function() { 224 analyser = new AnalyserNode(context, { smoothingTimeConstant: -0.1 }); 225 }); 226 assert_throws_dom("INDEX_SIZE_ERR", function() { 227 analyser = new AnalyserNode(context, { smoothingTimeConstant: -1.1 }); 228 }); 229 analyser = new AnalyserNode(context, { smoothingTimeConstant: 0 }); 230 analyser = new AnalyserNode(context, { smoothingTimeConstant: 1 }); 231 } 232 test(testNode, "Test AnalyserNode API"); 233 test(testConstructor, "Test AnalyserNode's ctor API"); 234 </script> 235 </head> 236 </body> 237 </html>