worklet_test_audioWorkletGlobalScopeRegisterProcessor.js (8349B)
1 // Define several classes. 2 class EmptyWorkletProcessor extends AudioWorkletProcessor {} 3 4 class NoProcessWorkletProcessor extends AudioWorkletProcessor { 5 constructor() { 6 super(); 7 } 8 } 9 10 class BadDescriptorsWorkletProcessor extends AudioWorkletProcessor { 11 constructor() { 12 super(); 13 } 14 15 process() { 16 // Do nothing, output silence 17 } 18 19 static get parameterDescriptors() { 20 return "A string"; 21 } 22 } 23 24 class GoodDescriptorsWorkletProcessor extends AudioWorkletProcessor { 25 constructor() { 26 super(); 27 } 28 29 process() { 30 // Do nothing, output silence 31 } 32 33 static get parameterDescriptors() { 34 return [ 35 { 36 name: "myParam", 37 defaultValue: 0.707, 38 }, 39 ]; 40 } 41 } 42 43 class DummyProcessWorkletProcessor extends AudioWorkletProcessor { 44 constructor() { 45 super(); 46 } 47 48 process() { 49 // Do nothing, output silence 50 } 51 } 52 53 class DescriptorsNoNameWorkletProcessor extends AudioWorkletProcessor { 54 constructor() { 55 super(); 56 } 57 58 process() { 59 // Do nothing, output silence 60 } 61 62 static get parameterDescriptors() { 63 return [ 64 { 65 defaultValue: 0.707, 66 }, 67 ]; 68 } 69 } 70 71 class DescriptorsDefaultValueNotNumberWorkletProcessor extends AudioWorkletProcessor { 72 constructor() { 73 super(); 74 } 75 76 process() { 77 // Do nothing, output silence 78 } 79 80 static get parameterDescriptors() { 81 return [ 82 { 83 name: "test", 84 defaultValue: "test", 85 }, 86 ]; 87 } 88 } 89 90 class DescriptorsMinValueNotNumberWorkletProcessor extends AudioWorkletProcessor { 91 constructor() { 92 super(); 93 } 94 95 process() { 96 // Do nothing, output silence 97 } 98 99 static get parameterDescriptors() { 100 return [ 101 { 102 name: "test", 103 minValue: "test", 104 }, 105 ]; 106 } 107 } 108 109 class DescriptorsMaxValueNotNumberWorkletProcessor extends AudioWorkletProcessor { 110 constructor() { 111 super(); 112 } 113 114 process() { 115 // Do nothing, output silence 116 } 117 118 static get parameterDescriptors() { 119 return [ 120 { 121 name: "test", 122 maxValue: "test", 123 }, 124 ]; 125 } 126 } 127 128 class DescriptorsDuplicatedNameWorkletProcessor extends AudioWorkletProcessor { 129 constructor() { 130 super(); 131 } 132 133 process() { 134 // Do nothing, output silence 135 } 136 137 static get parameterDescriptors() { 138 return [ 139 { 140 name: "test", 141 }, 142 { 143 name: "test", 144 }, 145 ]; 146 } 147 } 148 149 class DescriptorsNotDictWorkletProcessor extends AudioWorkletProcessor { 150 constructor() { 151 super(); 152 } 153 154 process() { 155 // Do nothing, output silence 156 } 157 158 static get parameterDescriptors() { 159 return [42]; 160 } 161 } 162 163 class DescriptorsOutOfRangeMinWorkletProcessor extends AudioWorkletProcessor { 164 constructor() { 165 super(); 166 } 167 168 process() { 169 // Do nothing, output silence 170 } 171 172 static get parameterDescriptors() { 173 return [ 174 { 175 name: "test", 176 defaultValue: 0, 177 minValue: 1, 178 maxValue: 2, 179 }, 180 ]; 181 } 182 } 183 184 class DescriptorsOutOfRangeMaxWorkletProcessor extends AudioWorkletProcessor { 185 constructor() { 186 super(); 187 } 188 189 process() { 190 // Do nothing, output silence 191 } 192 193 static get parameterDescriptors() { 194 return [ 195 { 196 name: "test", 197 defaultValue: 3, 198 minValue: 1, 199 maxValue: 2, 200 }, 201 ]; 202 } 203 } 204 205 class DescriptorsBadRangeMaxWorkletProcessor extends AudioWorkletProcessor { 206 constructor() { 207 super(); 208 } 209 210 process() { 211 // Do nothing, output silence 212 } 213 214 static get parameterDescriptors() { 215 return [ 216 { 217 name: "test", 218 defaultValue: 1.5, 219 minValue: 2, 220 maxValue: 1, 221 }, 222 ]; 223 } 224 } 225 226 // Test not a constructor 227 // "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not a constructor." 228 try { 229 registerProcessor("sure!", () => {}); 230 } catch (e) { 231 console.log(e); 232 } 233 234 // Test empty name 235 // "NotSupportedError: Argument 1 of AudioWorkletGlobalScope.registerProcessor should not be an empty string." 236 try { 237 registerProcessor("", EmptyWorkletProcessor); 238 } catch (e) { 239 console.log(e); 240 } 241 242 // Test not an object 243 // "TypeError: Argument 2 of AudioWorkletGlobalScope.registerProcessor is not an object." 244 try { 245 registerProcessor("my-worklet-processor", ""); 246 } catch (e) { 247 console.log(e); 248 } 249 250 // Test Empty class definition 251 registerProcessor("empty-worklet-processor", EmptyWorkletProcessor); 252 253 // Test class with constructor but not process function 254 registerProcessor("no-worklet-processor", NoProcessWorkletProcessor); 255 256 // Test class with parameterDescriptors being iterable, but the elements are not 257 // dictionaries. 258 // "TypeError: AudioWorkletGlobalScope.registerProcessor: Element 0 in parameterDescriptors can't be converted to a dictionary.", 259 try { 260 registerProcessor( 261 "bad-descriptors-worklet-processor", 262 BadDescriptorsWorkletProcessor 263 ); 264 } catch (e) { 265 console.log(e); 266 } 267 268 // Test class with good parameterDescriptors 269 // No error expected here 270 registerProcessor( 271 "good-descriptors-worklet-processor", 272 GoodDescriptorsWorkletProcessor 273 ); 274 275 // Test class with constructor and process function 276 // No error expected here 277 registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor); 278 279 // Test class adding class with the same name twice 280 // "NotSupportedError: Operation is not supported: Argument 1 of AudioWorkletGlobalScope.registerProcessor is invalid: a class with the same name is already registered." 281 try { 282 registerProcessor("dummy-worklet-processor", DummyProcessWorkletProcessor); 283 } catch (e) { 284 console.log(e); 285 } 286 287 // "name" is a mandatory field in descriptors 288 // "TypeError: Missing required 'name' member of AudioParamDescriptor." 289 try { 290 registerProcessor( 291 "descriptors-no-name-worklet-processor", 292 DescriptorsNoNameWorkletProcessor 293 ); 294 } catch (e) { 295 console.log(e); 296 } 297 298 // "defaultValue" should be a number 299 // "TypeError: 'defaultValue' member of AudioParamDescriptor is not a finite floating-point value." 300 try { 301 registerProcessor( 302 "descriptors-default-value-not-number-worklet-processor", 303 DescriptorsDefaultValueNotNumberWorkletProcessor 304 ); 305 } catch (e) { 306 console.log(e); 307 } 308 309 // "min" should be a number 310 // "TypeError: 'minValue' member of AudioParamDescriptor is not a finite floating-point value." 311 try { 312 registerProcessor( 313 "descriptors-min-value-not-number-worklet-processor", 314 DescriptorsMinValueNotNumberWorkletProcessor 315 ); 316 } catch (e) { 317 console.log(e); 318 } 319 320 // "max" should be a number 321 // "TypeError: 'maxValue' member of AudioParamDescriptor is not a finite floating-point value." 322 try { 323 registerProcessor( 324 "descriptors-max-value-not-number-worklet-processor", 325 DescriptorsMaxValueNotNumberWorkletProcessor 326 ); 327 } catch (e) { 328 console.log(e); 329 } 330 331 // Duplicated values are not allowed for "name" 332 // "NotSupportedError: Duplicated name \"test\" in parameterDescriptors" 333 try { 334 registerProcessor( 335 "descriptors-duplicated-name-worklet-processor", 336 DescriptorsDuplicatedNameWorkletProcessor 337 ); 338 } catch (e) { 339 console.log(e); 340 } 341 342 // Descriptors' elements should be dictionnary 343 // "TypeError: Element 0 in parameterDescriptors can't be converted to a dictionary.", 344 try { 345 registerProcessor( 346 "descriptors-not-dict-worklet-processor", 347 DescriptorsNotDictWorkletProcessor 348 ); 349 } catch (e) { 350 console.log(e); 351 } 352 353 // defaultValue value should be in range [minValue, maxValue]. defaultValue < minValue is not allowed 354 // "NotSupportedError: In parameterDescriptors, test defaultValue is out of the range defined by minValue and maxValue.", 355 try { 356 registerProcessor( 357 "descriptors-out-of-range-min-worklet-processor", 358 DescriptorsOutOfRangeMinWorkletProcessor 359 ); 360 } catch (e) { 361 console.log(e); 362 } 363 364 // defaultValue value should be in range [minValue, maxValue]. defaultValue > maxValue is not allowed 365 // "NotSupportedError: In parameterDescriptors, test defaultValue is out of the range defined by minValue and maxValue.", 366 try { 367 registerProcessor( 368 "descriptors-out-of-range-max-worklet-processor", 369 DescriptorsOutOfRangeMaxWorkletProcessor 370 ); 371 } catch (e) { 372 console.log(e); 373 } 374 375 // We should have minValue < maxValue to define a valid range 376 // "NotSupportedError: In parameterDescriptors, test minValue should be smaller than maxValue.", 377 try { 378 registerProcessor( 379 "descriptors-bad-range-max-worklet-processor", 380 DescriptorsBadRangeMaxWorkletProcessor 381 ); 382 } catch (e) { 383 console.log(e); 384 }