| 314 | |
| 315 | std::once_flag register_all_flag; |
| 316 | void LabSoundRegistryInit(lab::NodeRegistry& reg) |
| 317 | { |
| 318 | using namespace lab; |
| 319 | |
| 320 | std::call_once(register_all_flag, [®]() { |
| 321 | |
| 322 | // core |
| 323 | |
| 324 | reg.Register( |
| 325 | AnalyserNode::static_name(), AnalyserNode::desc(), |
| 326 | [](AudioContext& ac)->AudioNode* { return new AnalyserNode(ac); }, |
| 327 | [](AudioNode* n) { delete n; }); |
| 328 | |
| 329 | reg.Register( |
| 330 | AudioHardwareDeviceNode::static_name(), AudioHardwareDeviceNode::desc(), |
| 331 | [](AudioContext& ac)->AudioNode* { return nullptr; }, |
| 332 | [](AudioNode* n) { delete n; }); |
| 333 | |
| 334 | reg.Register( |
| 335 | AudioHardwareInputNode::static_name(), AudioHardwareInputNode::desc(), |
| 336 | [](AudioContext& ac)->AudioNode* { return nullptr; }, |
| 337 | [](AudioNode* n) { delete n; }); |
| 338 | |
| 339 | reg.Register( |
| 340 | BiquadFilterNode::static_name(), BiquadFilterNode::desc(), |
| 341 | [](AudioContext& ac)->AudioNode* { return new BiquadFilterNode(ac); }, |
| 342 | [](AudioNode* n) { delete n; }); |
| 343 | |
| 344 | reg.Register( |
| 345 | ChannelMergerNode::static_name(), ChannelMergerNode::desc(), |
| 346 | [](AudioContext& ac)->AudioNode* { return new ChannelMergerNode(ac); }, |
| 347 | [](AudioNode* n) { delete n; }); |
| 348 | |
| 349 | reg.Register( |
| 350 | ChannelSplitterNode::static_name(), ChannelSplitterNode::desc(), |
| 351 | [](AudioContext& ac)->AudioNode* { return new ChannelSplitterNode(ac); }, |
| 352 | [](AudioNode* n) { delete n; }); |
| 353 | |
| 354 | reg.Register( |
| 355 | ConvolverNode::static_name(), ConvolverNode::desc(), |
| 356 | [](AudioContext& ac)->AudioNode* { return new ConvolverNode(ac); }, |
| 357 | [](AudioNode* n) { delete n; }); |
| 358 | |
| 359 | reg.Register( |
| 360 | DelayNode::static_name(), DelayNode::desc(), |
| 361 | [](AudioContext& ac)->AudioNode* { return new DelayNode(ac); }, |
| 362 | [](AudioNode* n) { delete n; }); |
| 363 | |
| 364 | reg.Register( |
| 365 | DynamicsCompressorNode::static_name(), DynamicsCompressorNode::desc(), |
| 366 | [](AudioContext& ac)->AudioNode* { return new DynamicsCompressorNode(ac); }, |
| 367 | [](AudioNode* n) { delete n; }); |
| 368 | |
| 369 | reg.Register( |
| 370 | GainNode::static_name(), GainNode::desc(), |
| 371 | [](AudioContext& ac)->AudioNode* { return new GainNode(ac); }, |
| 372 | [](AudioNode* n) { delete n; }); |
| 373 | |