@babylonjs/viewer 7.23.1-alpha → 7.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (522) hide show
  1. package/configuration/configuration.d.ts +107 -0
  2. package/configuration/configuration.js +16 -0
  3. package/configuration/configuration.js.map +1 -0
  4. package/configuration/configurationCompatibility.d.ts +8 -0
  5. package/configuration/configurationCompatibility.js +66 -0
  6. package/configuration/configurationCompatibility.js.map +1 -0
  7. package/configuration/configurationContainer.d.ts +10 -0
  8. package/configuration/configurationContainer.js +10 -0
  9. package/configuration/configurationContainer.js.map +1 -0
  10. package/configuration/globals.d.ts +6 -0
  11. package/configuration/globals.js +18 -0
  12. package/configuration/globals.js.map +1 -0
  13. package/configuration/index.d.ts +2 -0
  14. package/configuration/index.js +4 -0
  15. package/configuration/index.js.map +1 -0
  16. package/configuration/interfaces/cameraConfiguration.d.ts +31 -0
  17. package/configuration/interfaces/cameraConfiguration.js +2 -0
  18. package/configuration/interfaces/cameraConfiguration.js.map +1 -0
  19. package/configuration/interfaces/colorGradingConfiguration.d.ts +81 -0
  20. package/configuration/interfaces/colorGradingConfiguration.js +2 -0
  21. package/configuration/interfaces/colorGradingConfiguration.js.map +1 -0
  22. package/configuration/interfaces/defaultRenderingPipelineConfiguration.d.ts +20 -0
  23. package/configuration/interfaces/defaultRenderingPipelineConfiguration.js +2 -0
  24. package/configuration/interfaces/defaultRenderingPipelineConfiguration.js.map +1 -0
  25. package/configuration/interfaces/environmentMapConfiguration.d.ts +22 -0
  26. package/configuration/interfaces/environmentMapConfiguration.js +2 -0
  27. package/configuration/interfaces/environmentMapConfiguration.js.map +1 -0
  28. package/configuration/interfaces/groundConfiguration.d.ts +24 -0
  29. package/configuration/interfaces/groundConfiguration.js +2 -0
  30. package/configuration/interfaces/groundConfiguration.js.map +1 -0
  31. package/configuration/interfaces/imageProcessingConfiguration.d.ts +45 -0
  32. package/configuration/interfaces/imageProcessingConfiguration.js +2 -0
  33. package/configuration/interfaces/imageProcessingConfiguration.js.map +1 -0
  34. package/configuration/interfaces/index.d.ts +15 -0
  35. package/configuration/interfaces/index.js +16 -0
  36. package/configuration/interfaces/index.js.map +1 -0
  37. package/configuration/interfaces/lightConfiguration.d.ts +60 -0
  38. package/configuration/interfaces/lightConfiguration.js +2 -0
  39. package/configuration/interfaces/lightConfiguration.js.map +1 -0
  40. package/configuration/interfaces/modelAnimationConfiguration.d.ts +26 -0
  41. package/configuration/interfaces/modelAnimationConfiguration.js +2 -0
  42. package/configuration/interfaces/modelAnimationConfiguration.js.map +1 -0
  43. package/configuration/interfaces/modelConfiguration.d.ts +65 -0
  44. package/configuration/interfaces/modelConfiguration.js +2 -0
  45. package/configuration/interfaces/modelConfiguration.js.map +1 -0
  46. package/configuration/interfaces/observersConfiguration.d.ts +5 -0
  47. package/configuration/interfaces/observersConfiguration.js +2 -0
  48. package/configuration/interfaces/observersConfiguration.js.map +1 -0
  49. package/configuration/interfaces/sceneConfiguration.d.ts +48 -0
  50. package/configuration/interfaces/sceneConfiguration.js +2 -0
  51. package/configuration/interfaces/sceneConfiguration.js.map +1 -0
  52. package/configuration/interfaces/sceneOptimizerConfiguration.d.ts +23 -0
  53. package/configuration/interfaces/sceneOptimizerConfiguration.js +2 -0
  54. package/configuration/interfaces/sceneOptimizerConfiguration.js.map +1 -0
  55. package/configuration/interfaces/skyboxConfiguration.d.ts +21 -0
  56. package/configuration/interfaces/skyboxConfiguration.js +2 -0
  57. package/configuration/interfaces/skyboxConfiguration.js.map +1 -0
  58. package/configuration/interfaces/templateConfiguration.d.ts +67 -0
  59. package/configuration/interfaces/templateConfiguration.js +2 -0
  60. package/configuration/interfaces/templateConfiguration.js.map +1 -0
  61. package/configuration/interfaces/vrConfiguration.d.ts +16 -0
  62. package/configuration/interfaces/vrConfiguration.js +2 -0
  63. package/configuration/interfaces/vrConfiguration.js.map +1 -0
  64. package/configuration/loader.d.ts +4 -0
  65. package/configuration/loader.js +17 -0
  66. package/configuration/loader.js.map +1 -0
  67. package/configuration/mappers.d.ts +43 -0
  68. package/configuration/mappers.js +192 -0
  69. package/configuration/mappers.js.map +1 -0
  70. package/configuration/renderOnlyLoader.d.ts +33 -0
  71. package/configuration/renderOnlyLoader.js +162 -0
  72. package/configuration/renderOnlyLoader.js.map +1 -0
  73. package/configuration/types/default.d.ts +6 -0
  74. package/configuration/types/default.js +121 -0
  75. package/configuration/types/default.js.map +1 -0
  76. package/configuration/types/environmentMap.d.ts +5 -0
  77. package/configuration/types/environmentMap.js +14 -0
  78. package/configuration/types/environmentMap.js.map +1 -0
  79. package/configuration/types/extended.d.ts +6 -0
  80. package/configuration/types/extended.js +317 -0
  81. package/configuration/types/extended.js.map +1 -0
  82. package/configuration/types/index.d.ts +14 -0
  83. package/configuration/types/index.js +51 -0
  84. package/configuration/types/index.js.map +1 -0
  85. package/configuration/types/minimal.d.ts +6 -0
  86. package/configuration/types/minimal.js +43 -0
  87. package/configuration/types/minimal.js.map +1 -0
  88. package/configuration/types/renderOnlyDefault.d.ts +30 -0
  89. package/configuration/types/renderOnlyDefault.js +31 -0
  90. package/configuration/types/renderOnlyDefault.js.map +1 -0
  91. package/configuration/types/shadowLight.d.ts +9 -0
  92. package/configuration/types/shadowLight.js +64 -0
  93. package/configuration/types/shadowLight.js.map +1 -0
  94. package/helper/index.d.ts +29 -0
  95. package/helper/index.js +66 -0
  96. package/helper/index.js.map +1 -0
  97. package/index.d.ts +30 -0
  98. package/index.js +46 -0
  99. package/index.js.map +1 -0
  100. package/initializer.d.ts +11 -0
  101. package/initializer.js +35 -0
  102. package/initializer.js.map +1 -0
  103. package/interfaces.d.ts +5 -0
  104. package/interfaces.js +7 -0
  105. package/interfaces.js.map +1 -0
  106. package/labs/environmentSerializer.d.ts +126 -0
  107. package/labs/environmentSerializer.js +191 -0
  108. package/labs/environmentSerializer.js.map +1 -0
  109. package/labs/texture.d.ts +183 -0
  110. package/labs/texture.js +351 -0
  111. package/labs/texture.js.map +1 -0
  112. package/labs/viewerLabs.d.ts +51 -0
  113. package/labs/viewerLabs.js +134 -0
  114. package/labs/viewerLabs.js.map +1 -0
  115. package/loader/modelLoader.d.ts +56 -0
  116. package/loader/modelLoader.js +199 -0
  117. package/loader/modelLoader.js.map +1 -0
  118. package/loader/plugins/applyMaterialConfig.d.ts +12 -0
  119. package/loader/plugins/applyMaterialConfig.js +16 -0
  120. package/loader/plugins/applyMaterialConfig.js.map +1 -0
  121. package/loader/plugins/extendedMaterialLoaderPlugin.d.ts +9 -0
  122. package/loader/plugins/extendedMaterialLoaderPlugin.js +16 -0
  123. package/loader/plugins/extendedMaterialLoaderPlugin.js.map +1 -0
  124. package/loader/plugins/index.d.ts +19 -0
  125. package/loader/plugins/index.js +44 -0
  126. package/loader/plugins/index.js.map +1 -0
  127. package/loader/plugins/loaderPlugin.d.ts +24 -0
  128. package/loader/plugins/loaderPlugin.js +2 -0
  129. package/loader/plugins/loaderPlugin.js.map +1 -0
  130. package/loader/plugins/msftLodLoaderPlugin.d.ts +12 -0
  131. package/loader/plugins/msftLodLoaderPlugin.js +21 -0
  132. package/loader/plugins/msftLodLoaderPlugin.js.map +1 -0
  133. package/loader/plugins/telemetryLoaderPlugin.d.ts +12 -0
  134. package/loader/plugins/telemetryLoaderPlugin.js +36 -0
  135. package/loader/plugins/telemetryLoaderPlugin.js.map +1 -0
  136. package/managers/observablesManager.d.ts +66 -0
  137. package/managers/observablesManager.js +35 -0
  138. package/managers/observablesManager.js.map +1 -0
  139. package/managers/sceneManager.d.ts +245 -0
  140. package/managers/sceneManager.js +1375 -0
  141. package/managers/sceneManager.js.map +1 -0
  142. package/managers/telemetryManager.d.ts +78 -0
  143. package/managers/telemetryManager.js +117 -0
  144. package/managers/telemetryManager.js.map +1 -0
  145. package/model/modelAnimation.d.ts +215 -0
  146. package/model/modelAnimation.js +237 -0
  147. package/model/modelAnimation.js.map +1 -0
  148. package/model/viewerModel.d.ts +233 -0
  149. package/model/viewerModel.js +673 -0
  150. package/model/viewerModel.js.map +1 -0
  151. package/optimizer/custom/extended.d.ts +13 -0
  152. package/optimizer/custom/extended.js +101 -0
  153. package/optimizer/custom/extended.js.map +1 -0
  154. package/optimizer/custom/index.d.ts +9 -0
  155. package/optimizer/custom/index.js +26 -0
  156. package/optimizer/custom/index.js.map +1 -0
  157. package/package.json +27 -17
  158. package/readme.md +21 -35
  159. package/renderOnlyIndex.d.ts +11 -0
  160. package/renderOnlyIndex.js +18 -0
  161. package/renderOnlyIndex.js.map +1 -0
  162. package/templating/eventManager.d.ts +35 -0
  163. package/templating/eventManager.js +66 -0
  164. package/templating/eventManager.js.map +1 -0
  165. package/templating/plugins/hdButtonPlugin.d.ts +9 -0
  166. package/templating/plugins/hdButtonPlugin.js +21 -0
  167. package/templating/plugins/hdButtonPlugin.js.map +1 -0
  168. package/templating/plugins/printButton.d.ts +9 -0
  169. package/templating/plugins/printButton.js +40 -0
  170. package/templating/plugins/printButton.js.map +1 -0
  171. package/templating/templateManager.d.ts +197 -0
  172. package/templating/templateManager.js +561 -0
  173. package/templating/templateManager.js.map +1 -0
  174. package/templating/viewerTemplatePlugin.d.ts +21 -0
  175. package/templating/viewerTemplatePlugin.js +69 -0
  176. package/templating/viewerTemplatePlugin.js.map +1 -0
  177. package/viewer/defaultViewer.d.ts +130 -0
  178. package/viewer/defaultViewer.js +675 -0
  179. package/viewer/defaultViewer.js.map +1 -0
  180. package/viewer/renderOnlyViewer.d.ts +9 -0
  181. package/viewer/renderOnlyViewer.js +46 -0
  182. package/viewer/renderOnlyViewer.js.map +1 -0
  183. package/viewer/viewer.d.ts +258 -0
  184. package/viewer/viewer.js +783 -0
  185. package/viewer/viewer.js.map +1 -0
  186. package/viewer/viewerManager.d.ts +58 -0
  187. package/viewer/viewerManager.js +91 -0
  188. package/viewer/viewerManager.js.map +1 -0
  189. package/viewer/viewerWithTemplate.d.ts +9 -0
  190. package/viewer/viewerWithTemplate.js +20 -0
  191. package/viewer/viewerWithTemplate.js.map +1 -0
  192. package/dist/babylon-viewer.esm.js +0 -2
  193. package/dist/babylon-viewer.esm.js.map +0 -1
  194. package/dist/babylon-viewer.esm.min.js +0 -2
  195. package/dist/babylon-viewer.esm.min.js.map +0 -1
  196. package/dist/chunks/EXT_lights_image_based-D3ZBYLgC.esm.js +0 -170
  197. package/dist/chunks/EXT_lights_image_based-D3ZBYLgC.esm.js.map +0 -1
  198. package/dist/chunks/EXT_lights_image_based-DyWZGFdC.esm.min.js +0 -2
  199. package/dist/chunks/EXT_lights_image_based-DyWZGFdC.esm.min.js.map +0 -1
  200. package/dist/chunks/EXT_mesh_gpu_instancing-BsSuxC3A.esm.js +0 -86
  201. package/dist/chunks/EXT_mesh_gpu_instancing-BsSuxC3A.esm.js.map +0 -1
  202. package/dist/chunks/EXT_mesh_gpu_instancing-DtTWXKzv.esm.min.js +0 -2
  203. package/dist/chunks/EXT_mesh_gpu_instancing-DtTWXKzv.esm.min.js.map +0 -1
  204. package/dist/chunks/EXT_meshopt_compression-BncKn2rD.esm.js +0 -134
  205. package/dist/chunks/EXT_meshopt_compression-BncKn2rD.esm.js.map +0 -1
  206. package/dist/chunks/EXT_meshopt_compression-CjW8GcrA.esm.min.js +0 -2
  207. package/dist/chunks/EXT_meshopt_compression-CjW8GcrA.esm.min.js.map +0 -1
  208. package/dist/chunks/EXT_texture_avif-DLrVqqUz.esm.min.js +0 -2
  209. package/dist/chunks/EXT_texture_avif-DLrVqqUz.esm.min.js.map +0 -1
  210. package/dist/chunks/EXT_texture_avif-wG4GNQfZ.esm.js +0 -44
  211. package/dist/chunks/EXT_texture_avif-wG4GNQfZ.esm.js.map +0 -1
  212. package/dist/chunks/EXT_texture_webp-BccV6Svg.esm.js +0 -43
  213. package/dist/chunks/EXT_texture_webp-BccV6Svg.esm.js.map +0 -1
  214. package/dist/chunks/EXT_texture_webp-DNAe2ii8.esm.min.js +0 -2
  215. package/dist/chunks/EXT_texture_webp-DNAe2ii8.esm.min.js.map +0 -1
  216. package/dist/chunks/ExtrasAsMetadata-BA0NyQBn.esm.js +0 -64
  217. package/dist/chunks/ExtrasAsMetadata-BA0NyQBn.esm.js.map +0 -1
  218. package/dist/chunks/ExtrasAsMetadata-BN02lRw7.esm.min.js +0 -2
  219. package/dist/chunks/ExtrasAsMetadata-BN02lRw7.esm.min.js.map +0 -1
  220. package/dist/chunks/KHR_animation_pointer-B7mk-XJN.esm.min.js +0 -2
  221. package/dist/chunks/KHR_animation_pointer-B7mk-XJN.esm.min.js.map +0 -1
  222. package/dist/chunks/KHR_animation_pointer-BFFpQV4X.esm.js +0 -343
  223. package/dist/chunks/KHR_animation_pointer-BFFpQV4X.esm.js.map +0 -1
  224. package/dist/chunks/KHR_draco_mesh_compression-7zqRIpZt.esm.js +0 -610
  225. package/dist/chunks/KHR_draco_mesh_compression-7zqRIpZt.esm.js.map +0 -1
  226. package/dist/chunks/KHR_draco_mesh_compression-Bw4rV4ln.esm.min.js +0 -2
  227. package/dist/chunks/KHR_draco_mesh_compression-Bw4rV4ln.esm.min.js.map +0 -1
  228. package/dist/chunks/KHR_interactivity-Bd_6hpGb.esm.js +0 -4033
  229. package/dist/chunks/KHR_interactivity-Bd_6hpGb.esm.js.map +0 -1
  230. package/dist/chunks/KHR_interactivity-DIJyLERv.esm.min.js +0 -2
  231. package/dist/chunks/KHR_interactivity-DIJyLERv.esm.min.js.map +0 -1
  232. package/dist/chunks/KHR_lights_punctual-CFUUYlNK.esm.min.js +0 -2
  233. package/dist/chunks/KHR_lights_punctual-CFUUYlNK.esm.min.js.map +0 -1
  234. package/dist/chunks/KHR_lights_punctual-XL2dnY2h.esm.js +0 -1253
  235. package/dist/chunks/KHR_lights_punctual-XL2dnY2h.esm.js.map +0 -1
  236. package/dist/chunks/KHR_materials_anisotropy-04SftzV0.esm.min.js +0 -2
  237. package/dist/chunks/KHR_materials_anisotropy-04SftzV0.esm.min.js.map +0 -1
  238. package/dist/chunks/KHR_materials_anisotropy-gAd08wDG.esm.js +0 -64
  239. package/dist/chunks/KHR_materials_anisotropy-gAd08wDG.esm.js.map +0 -1
  240. package/dist/chunks/KHR_materials_clearcoat-9GQaVx6k.esm.min.js +0 -2
  241. package/dist/chunks/KHR_materials_clearcoat-9GQaVx6k.esm.min.js.map +0 -1
  242. package/dist/chunks/KHR_materials_clearcoat-Cv_yIIaW.esm.js +0 -96
  243. package/dist/chunks/KHR_materials_clearcoat-Cv_yIIaW.esm.js.map +0 -1
  244. package/dist/chunks/KHR_materials_diffuse_transmission-Dj9EU7q2.esm.js +0 -96
  245. package/dist/chunks/KHR_materials_diffuse_transmission-Dj9EU7q2.esm.js.map +0 -1
  246. package/dist/chunks/KHR_materials_diffuse_transmission-fmv70uuH.esm.min.js +0 -2
  247. package/dist/chunks/KHR_materials_diffuse_transmission-fmv70uuH.esm.min.js.map +0 -1
  248. package/dist/chunks/KHR_materials_dispersion-CCzM2Avp.esm.min.js +0 -2
  249. package/dist/chunks/KHR_materials_dispersion-CCzM2Avp.esm.min.js.map +0 -1
  250. package/dist/chunks/KHR_materials_dispersion-JNxGdAqc.esm.js +0 -63
  251. package/dist/chunks/KHR_materials_dispersion-JNxGdAqc.esm.js.map +0 -1
  252. package/dist/chunks/KHR_materials_emissive_strength-D25-ItKl.esm.min.js +0 -2
  253. package/dist/chunks/KHR_materials_emissive_strength-D25-ItKl.esm.min.js.map +0 -1
  254. package/dist/chunks/KHR_materials_emissive_strength-DlkptyaM.esm.js +0 -55
  255. package/dist/chunks/KHR_materials_emissive_strength-DlkptyaM.esm.js.map +0 -1
  256. package/dist/chunks/KHR_materials_ior-Jqj5Ph_V.esm.min.js +0 -2
  257. package/dist/chunks/KHR_materials_ior-Jqj5Ph_V.esm.min.js.map +0 -1
  258. package/dist/chunks/KHR_materials_ior-KGZBae4Y.esm.js +0 -64
  259. package/dist/chunks/KHR_materials_ior-KGZBae4Y.esm.js.map +0 -1
  260. package/dist/chunks/KHR_materials_iridescence-ByOHUtdO.esm.min.js +0 -2
  261. package/dist/chunks/KHR_materials_iridescence-ByOHUtdO.esm.min.js.map +0 -1
  262. package/dist/chunks/KHR_materials_iridescence-FmAV1QDy.esm.js +0 -72
  263. package/dist/chunks/KHR_materials_iridescence-FmAV1QDy.esm.js.map +0 -1
  264. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-BiqCrcmj.esm.min.js +0 -2
  265. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-BiqCrcmj.esm.min.js.map +0 -1
  266. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-CRnlTYx-.esm.js +0 -81
  267. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-CRnlTYx-.esm.js.map +0 -1
  268. package/dist/chunks/KHR_materials_sheen-7li6Dlkh.esm.js +0 -85
  269. package/dist/chunks/KHR_materials_sheen-7li6Dlkh.esm.js.map +0 -1
  270. package/dist/chunks/KHR_materials_sheen-BL2qM8Rp.esm.min.js +0 -2
  271. package/dist/chunks/KHR_materials_sheen-BL2qM8Rp.esm.min.js.map +0 -1
  272. package/dist/chunks/KHR_materials_specular-C2ks7gPC.esm.js +0 -75
  273. package/dist/chunks/KHR_materials_specular-C2ks7gPC.esm.js.map +0 -1
  274. package/dist/chunks/KHR_materials_specular-DCAt3T_l.esm.min.js +0 -2
  275. package/dist/chunks/KHR_materials_specular-DCAt3T_l.esm.min.js.map +0 -1
  276. package/dist/chunks/KHR_materials_transmission-B8w41MT6.esm.min.js +0 -2
  277. package/dist/chunks/KHR_materials_transmission-B8w41MT6.esm.min.js.map +0 -1
  278. package/dist/chunks/KHR_materials_transmission-DRL9BE9q.esm.js +0 -307
  279. package/dist/chunks/KHR_materials_transmission-DRL9BE9q.esm.js.map +0 -1
  280. package/dist/chunks/KHR_materials_unlit-B-il-TRX.esm.min.js +0 -2
  281. package/dist/chunks/KHR_materials_unlit-B-il-TRX.esm.min.js.map +0 -1
  282. package/dist/chunks/KHR_materials_unlit-B44Oqon6.esm.js +0 -74
  283. package/dist/chunks/KHR_materials_unlit-B44Oqon6.esm.js.map +0 -1
  284. package/dist/chunks/KHR_materials_variants-BCdEgpch.esm.js +0 -238
  285. package/dist/chunks/KHR_materials_variants-BCdEgpch.esm.js.map +0 -1
  286. package/dist/chunks/KHR_materials_variants-ClQElTeo.esm.min.js +0 -2
  287. package/dist/chunks/KHR_materials_variants-ClQElTeo.esm.min.js.map +0 -1
  288. package/dist/chunks/KHR_materials_volume-BXv3M95S.esm.min.js +0 -2
  289. package/dist/chunks/KHR_materials_volume-BXv3M95S.esm.min.js.map +0 -1
  290. package/dist/chunks/KHR_materials_volume-BuUrRniE.esm.js +0 -88
  291. package/dist/chunks/KHR_materials_volume-BuUrRniE.esm.js.map +0 -1
  292. package/dist/chunks/KHR_mesh_quantization-WPngIGGs.esm.min.js +0 -2
  293. package/dist/chunks/KHR_mesh_quantization-WPngIGGs.esm.min.js.map +0 -1
  294. package/dist/chunks/KHR_mesh_quantization-p2nyy6Ym.esm.js +0 -26
  295. package/dist/chunks/KHR_mesh_quantization-p2nyy6Ym.esm.js.map +0 -1
  296. package/dist/chunks/KHR_texture_basisu-BHsmOUDV.esm.js +0 -43
  297. package/dist/chunks/KHR_texture_basisu-BHsmOUDV.esm.js.map +0 -1
  298. package/dist/chunks/KHR_texture_basisu-DObdWvzE.esm.min.js +0 -2
  299. package/dist/chunks/KHR_texture_basisu-DObdWvzE.esm.min.js.map +0 -1
  300. package/dist/chunks/KHR_texture_transform-B7NCdTO_.esm.js +0 -63
  301. package/dist/chunks/KHR_texture_transform-B7NCdTO_.esm.js.map +0 -1
  302. package/dist/chunks/KHR_texture_transform-D6Ee6UiP.esm.min.js +0 -2
  303. package/dist/chunks/KHR_texture_transform-D6Ee6UiP.esm.min.js.map +0 -1
  304. package/dist/chunks/KHR_xmp_json_ld-Coh_hfCi.esm.js +0 -51
  305. package/dist/chunks/KHR_xmp_json_ld-Coh_hfCi.esm.js.map +0 -1
  306. package/dist/chunks/KHR_xmp_json_ld-ijOY8DMb.esm.min.js +0 -2
  307. package/dist/chunks/KHR_xmp_json_ld-ijOY8DMb.esm.min.js.map +0 -1
  308. package/dist/chunks/MSFT_audio_emitter-CGjUSgI2.esm.min.js +0 -2
  309. package/dist/chunks/MSFT_audio_emitter-CGjUSgI2.esm.min.js.map +0 -1
  310. package/dist/chunks/MSFT_audio_emitter-fFvTv2YK.esm.js +0 -1600
  311. package/dist/chunks/MSFT_audio_emitter-fFvTv2YK.esm.js.map +0 -1
  312. package/dist/chunks/MSFT_lod-Bql1icOF.esm.js +0 -337
  313. package/dist/chunks/MSFT_lod-Bql1icOF.esm.js.map +0 -1
  314. package/dist/chunks/MSFT_lod-Du_akN0I.esm.min.js +0 -2
  315. package/dist/chunks/MSFT_lod-Du_akN0I.esm.min.js.map +0 -1
  316. package/dist/chunks/MSFT_minecraftMesh-Brch3HUo.esm.min.js +0 -2
  317. package/dist/chunks/MSFT_minecraftMesh-Brch3HUo.esm.min.js.map +0 -1
  318. package/dist/chunks/MSFT_minecraftMesh-jrYC8YE9.esm.js +0 -46
  319. package/dist/chunks/MSFT_minecraftMesh-jrYC8YE9.esm.js.map +0 -1
  320. package/dist/chunks/MSFT_sRGBFactors-Dp3CtJ9B.esm.js +0 -47
  321. package/dist/chunks/MSFT_sRGBFactors-Dp3CtJ9B.esm.js.map +0 -1
  322. package/dist/chunks/MSFT_sRGBFactors-LZM-HF4P.esm.min.js +0 -2
  323. package/dist/chunks/MSFT_sRGBFactors-LZM-HF4P.esm.min.js.map +0 -1
  324. package/dist/chunks/assetContainer-Bo08Fxv3.esm.min.js +0 -2
  325. package/dist/chunks/assetContainer-Bo08Fxv3.esm.min.js.map +0 -1
  326. package/dist/chunks/assetContainer-DVOdWL9b.esm.js +0 -1598
  327. package/dist/chunks/assetContainer-DVOdWL9b.esm.js.map +0 -1
  328. package/dist/chunks/basisTextureLoader-C2Or-Jx_.esm.min.js +0 -2
  329. package/dist/chunks/basisTextureLoader-C2Or-Jx_.esm.min.js.map +0 -1
  330. package/dist/chunks/basisTextureLoader-DiYg6uNN.esm.js +0 -600
  331. package/dist/chunks/basisTextureLoader-DiYg6uNN.esm.js.map +0 -1
  332. package/dist/chunks/ddsTextureLoader-CDlttCBi.esm.js +0 -87
  333. package/dist/chunks/ddsTextureLoader-CDlttCBi.esm.js.map +0 -1
  334. package/dist/chunks/ddsTextureLoader-T_I1TPiz.esm.min.js +0 -2
  335. package/dist/chunks/ddsTextureLoader-T_I1TPiz.esm.min.js.map +0 -1
  336. package/dist/chunks/default.fragment-C8ZCxgTK.esm.js +0 -515
  337. package/dist/chunks/default.fragment-C8ZCxgTK.esm.js.map +0 -1
  338. package/dist/chunks/default.fragment-Conpp30r.esm.js +0 -452
  339. package/dist/chunks/default.fragment-Conpp30r.esm.js.map +0 -1
  340. package/dist/chunks/default.fragment-DTP98j1l.esm.min.js +0 -2
  341. package/dist/chunks/default.fragment-DTP98j1l.esm.min.js.map +0 -1
  342. package/dist/chunks/default.fragment-DjistPBR.esm.min.js +0 -2
  343. package/dist/chunks/default.fragment-DjistPBR.esm.min.js.map +0 -1
  344. package/dist/chunks/default.vertex-BSCjzhXG.esm.js +0 -178
  345. package/dist/chunks/default.vertex-BSCjzhXG.esm.js.map +0 -1
  346. package/dist/chunks/default.vertex-Ba7zxY0T.esm.min.js +0 -2
  347. package/dist/chunks/default.vertex-Ba7zxY0T.esm.min.js.map +0 -1
  348. package/dist/chunks/default.vertex-CPurFhOJ.esm.js +0 -199
  349. package/dist/chunks/default.vertex-CPurFhOJ.esm.js.map +0 -1
  350. package/dist/chunks/default.vertex-D_4jDtBx.esm.min.js +0 -2
  351. package/dist/chunks/default.vertex-D_4jDtBx.esm.min.js.map +0 -1
  352. package/dist/chunks/defaultUboDeclaration-BjT2yBnm.esm.js +0 -15
  353. package/dist/chunks/defaultUboDeclaration-BjT2yBnm.esm.js.map +0 -1
  354. package/dist/chunks/defaultUboDeclaration-BuAk9gJA.esm.min.js +0 -2
  355. package/dist/chunks/defaultUboDeclaration-BuAk9gJA.esm.min.js.map +0 -1
  356. package/dist/chunks/defaultUboDeclaration-CC8YfLoS.esm.min.js +0 -2
  357. package/dist/chunks/defaultUboDeclaration-CC8YfLoS.esm.min.js.map +0 -1
  358. package/dist/chunks/defaultUboDeclaration-ClvuiT6M.esm.js +0 -13
  359. package/dist/chunks/defaultUboDeclaration-ClvuiT6M.esm.js.map +0 -1
  360. package/dist/chunks/envTextureLoader-DuE-52NK.esm.min.js +0 -2
  361. package/dist/chunks/envTextureLoader-DuE-52NK.esm.min.js.map +0 -1
  362. package/dist/chunks/envTextureLoader-ENMUumOz.esm.js +0 -63
  363. package/dist/chunks/envTextureLoader-ENMUumOz.esm.js.map +0 -1
  364. package/dist/chunks/environmentTextureTools-Cw-ZbYYv.esm.js +0 -381
  365. package/dist/chunks/environmentTextureTools-Cw-ZbYYv.esm.js.map +0 -1
  366. package/dist/chunks/environmentTextureTools-mWXMV1Cr.esm.min.js +0 -2
  367. package/dist/chunks/environmentTextureTools-mWXMV1Cr.esm.min.js.map +0 -1
  368. package/dist/chunks/exrTextureLoader-9ioAK1Ph.esm.js +0 -1682
  369. package/dist/chunks/exrTextureLoader-9ioAK1Ph.esm.js.map +0 -1
  370. package/dist/chunks/exrTextureLoader-zc2N62c3.esm.min.js +0 -2
  371. package/dist/chunks/exrTextureLoader-zc2N62c3.esm.min.js.map +0 -1
  372. package/dist/chunks/fogFragment-DLguActo.esm.min.js +0 -2
  373. package/dist/chunks/fogFragment-DLguActo.esm.min.js.map +0 -1
  374. package/dist/chunks/fogFragment-sACeXatv.esm.js +0 -102
  375. package/dist/chunks/fogFragment-sACeXatv.esm.js.map +0 -1
  376. package/dist/chunks/glTFLoader-BuxqXvJ-.esm.min.js +0 -2
  377. package/dist/chunks/glTFLoader-BuxqXvJ-.esm.min.js.map +0 -1
  378. package/dist/chunks/glTFLoader-DB7AOurF.esm.js +0 -7552
  379. package/dist/chunks/glTFLoader-DB7AOurF.esm.js.map +0 -1
  380. package/dist/chunks/glTFLoaderAnimation-BWhMcDgk.esm.min.js +0 -2
  381. package/dist/chunks/glTFLoaderAnimation-BWhMcDgk.esm.min.js.map +0 -1
  382. package/dist/chunks/glTFLoaderAnimation-DK5fvCTY.esm.js +0 -77
  383. package/dist/chunks/glTFLoaderAnimation-DK5fvCTY.esm.js.map +0 -1
  384. package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js +0 -2
  385. package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js.map +0 -1
  386. package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js +0 -67
  387. package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js.map +0 -1
  388. package/dist/chunks/harmonicsFunctions-BMUi3P6Y.esm.js +0 -35
  389. package/dist/chunks/harmonicsFunctions-BMUi3P6Y.esm.js.map +0 -1
  390. package/dist/chunks/harmonicsFunctions-BWj3xZKa.esm.min.js +0 -2
  391. package/dist/chunks/harmonicsFunctions-BWj3xZKa.esm.min.js.map +0 -1
  392. package/dist/chunks/harmonicsFunctions-D9GUclWs.esm.min.js +0 -2
  393. package/dist/chunks/harmonicsFunctions-D9GUclWs.esm.min.js.map +0 -1
  394. package/dist/chunks/harmonicsFunctions-DQngcILt.esm.js +0 -34
  395. package/dist/chunks/harmonicsFunctions-DQngcILt.esm.js.map +0 -1
  396. package/dist/chunks/hdrTextureLoader-3TOTpFyV.esm.min.js +0 -2
  397. package/dist/chunks/hdrTextureLoader-3TOTpFyV.esm.min.js.map +0 -1
  398. package/dist/chunks/hdrTextureLoader-zIHMNTOp.esm.js +0 -252
  399. package/dist/chunks/hdrTextureLoader-zIHMNTOp.esm.js.map +0 -1
  400. package/dist/chunks/helperFunctions-B_yzbgEv.esm.min.js +0 -2
  401. package/dist/chunks/helperFunctions-B_yzbgEv.esm.min.js.map +0 -1
  402. package/dist/chunks/helperFunctions-BjYz-6zr.esm.js +0 -108
  403. package/dist/chunks/helperFunctions-BjYz-6zr.esm.js.map +0 -1
  404. package/dist/chunks/helperFunctions-CXLST6hZ.esm.js +0 -80
  405. package/dist/chunks/helperFunctions-CXLST6hZ.esm.js.map +0 -1
  406. package/dist/chunks/helperFunctions-DTBzTIjJ.esm.min.js +0 -2
  407. package/dist/chunks/helperFunctions-DTBzTIjJ.esm.min.js.map +0 -1
  408. package/dist/chunks/index-CTNAO7X0.esm.js +0 -81630
  409. package/dist/chunks/index-CTNAO7X0.esm.js.map +0 -1
  410. package/dist/chunks/index-DYqHhEAk.esm.min.js +0 -57
  411. package/dist/chunks/index-DYqHhEAk.esm.min.js.map +0 -1
  412. package/dist/chunks/ktxTextureLoader-9AGBpjf1.esm.js +0 -814
  413. package/dist/chunks/ktxTextureLoader-9AGBpjf1.esm.js.map +0 -1
  414. package/dist/chunks/ktxTextureLoader-DbSU4wBV.esm.min.js +0 -2
  415. package/dist/chunks/ktxTextureLoader-DbSU4wBV.esm.min.js.map +0 -1
  416. package/dist/chunks/logDepthDeclaration-BCN89cGc.esm.min.js +0 -2
  417. package/dist/chunks/logDepthDeclaration-BCN89cGc.esm.min.js.map +0 -1
  418. package/dist/chunks/logDepthDeclaration-CZCatKgj.esm.js +0 -42
  419. package/dist/chunks/logDepthDeclaration-CZCatKgj.esm.js.map +0 -1
  420. package/dist/chunks/logDepthDeclaration-_gJVcKC2.esm.js +0 -35
  421. package/dist/chunks/logDepthDeclaration-_gJVcKC2.esm.js.map +0 -1
  422. package/dist/chunks/logDepthDeclaration-cpc5vyCy.esm.min.js +0 -2
  423. package/dist/chunks/logDepthDeclaration-cpc5vyCy.esm.min.js.map +0 -1
  424. package/dist/chunks/logDepthVertex-7sCVTIjr.esm.min.js +0 -2
  425. package/dist/chunks/logDepthVertex-7sCVTIjr.esm.min.js.map +0 -1
  426. package/dist/chunks/logDepthVertex-B09oc-mi.esm.js +0 -77
  427. package/dist/chunks/logDepthVertex-B09oc-mi.esm.js.map +0 -1
  428. package/dist/chunks/logDepthVertex-Bq3-XtSp.esm.min.js +0 -2
  429. package/dist/chunks/logDepthVertex-Bq3-XtSp.esm.min.js.map +0 -1
  430. package/dist/chunks/logDepthVertex-DZoye-59.esm.js +0 -605
  431. package/dist/chunks/logDepthVertex-DZoye-59.esm.js.map +0 -1
  432. package/dist/chunks/mainUVVaryingDeclaration-LHNQQPPQ.esm.js +0 -11
  433. package/dist/chunks/mainUVVaryingDeclaration-LHNQQPPQ.esm.js.map +0 -1
  434. package/dist/chunks/mainUVVaryingDeclaration-wmRFnah8.esm.min.js +0 -2
  435. package/dist/chunks/mainUVVaryingDeclaration-wmRFnah8.esm.min.js.map +0 -1
  436. package/dist/chunks/objFileLoader-BvWwH6aj.esm.js +0 -1280
  437. package/dist/chunks/objFileLoader-BvWwH6aj.esm.js.map +0 -1
  438. package/dist/chunks/objFileLoader-LDP87u1T.esm.min.js +0 -2
  439. package/dist/chunks/objFileLoader-LDP87u1T.esm.min.js.map +0 -1
  440. package/dist/chunks/oitFragment-BAVtrG6V.esm.min.js +0 -2
  441. package/dist/chunks/oitFragment-BAVtrG6V.esm.min.js.map +0 -1
  442. package/dist/chunks/oitFragment-BqzVjWja.esm.js +0 -1210
  443. package/dist/chunks/oitFragment-BqzVjWja.esm.js.map +0 -1
  444. package/dist/chunks/oitFragment-CIelz994.esm.js +0 -1166
  445. package/dist/chunks/oitFragment-CIelz994.esm.js.map +0 -1
  446. package/dist/chunks/oitFragment-P20Uiy73.esm.min.js +0 -2
  447. package/dist/chunks/oitFragment-P20Uiy73.esm.min.js.map +0 -1
  448. package/dist/chunks/pass.fragment-D-67YTNJ.esm.min.js +0 -2
  449. package/dist/chunks/pass.fragment-D-67YTNJ.esm.min.js.map +0 -1
  450. package/dist/chunks/pass.fragment-ke3_LMQY.esm.js +0 -15
  451. package/dist/chunks/pass.fragment-ke3_LMQY.esm.js.map +0 -1
  452. package/dist/chunks/pbr.fragment-3QJykQmh.esm.js +0 -3228
  453. package/dist/chunks/pbr.fragment-3QJykQmh.esm.js.map +0 -1
  454. package/dist/chunks/pbr.fragment-BfhoPEE4.esm.js +0 -3163
  455. package/dist/chunks/pbr.fragment-BfhoPEE4.esm.js.map +0 -1
  456. package/dist/chunks/pbr.fragment-BpCKAJQO.esm.min.js +0 -2
  457. package/dist/chunks/pbr.fragment-BpCKAJQO.esm.min.js.map +0 -1
  458. package/dist/chunks/pbr.fragment-Buc8F3ii.esm.min.js +0 -2
  459. package/dist/chunks/pbr.fragment-Buc8F3ii.esm.min.js.map +0 -1
  460. package/dist/chunks/pbr.vertex-Bwl6238q.esm.min.js +0 -2
  461. package/dist/chunks/pbr.vertex-Bwl6238q.esm.min.js.map +0 -1
  462. package/dist/chunks/pbr.vertex-COtog_7X.esm.js +0 -335
  463. package/dist/chunks/pbr.vertex-COtog_7X.esm.js.map +0 -1
  464. package/dist/chunks/pbr.vertex-CX-ksiMG.esm.min.js +0 -2
  465. package/dist/chunks/pbr.vertex-CX-ksiMG.esm.min.js.map +0 -1
  466. package/dist/chunks/pbr.vertex-WxxbIMZL.esm.js +0 -208
  467. package/dist/chunks/pbr.vertex-WxxbIMZL.esm.js.map +0 -1
  468. package/dist/chunks/postprocess.vertex-6VuephE3.esm.min.js +0 -2
  469. package/dist/chunks/postprocess.vertex-6VuephE3.esm.min.js.map +0 -1
  470. package/dist/chunks/postprocess.vertex-y9rNSbFH.esm.js +0 -20
  471. package/dist/chunks/postprocess.vertex-y9rNSbFH.esm.js.map +0 -1
  472. package/dist/chunks/rawTexture-BjAjz6eU.esm.min.js +0 -2
  473. package/dist/chunks/rawTexture-BjAjz6eU.esm.min.js.map +0 -1
  474. package/dist/chunks/rawTexture-DzCCPFKA.esm.js +0 -562
  475. package/dist/chunks/rawTexture-DzCCPFKA.esm.js.map +0 -1
  476. package/dist/chunks/rgbdDecode.fragment-B2z-Bt71.esm.js +0 -17
  477. package/dist/chunks/rgbdDecode.fragment-B2z-Bt71.esm.js.map +0 -1
  478. package/dist/chunks/rgbdDecode.fragment-CdzoW-6f.esm.min.js +0 -2
  479. package/dist/chunks/rgbdDecode.fragment-CdzoW-6f.esm.min.js.map +0 -1
  480. package/dist/chunks/rgbdDecode.fragment-DrLvcO8Q.esm.js +0 -17
  481. package/dist/chunks/rgbdDecode.fragment-DrLvcO8Q.esm.js.map +0 -1
  482. package/dist/chunks/rgbdDecode.fragment-DuXK_20s.esm.min.js +0 -2
  483. package/dist/chunks/rgbdDecode.fragment-DuXK_20s.esm.min.js.map +0 -1
  484. package/dist/chunks/rgbdEncode.fragment-B8TjBZ9S.esm.js +0 -17
  485. package/dist/chunks/rgbdEncode.fragment-B8TjBZ9S.esm.js.map +0 -1
  486. package/dist/chunks/rgbdEncode.fragment-CGQHcoVr.esm.min.js +0 -2
  487. package/dist/chunks/rgbdEncode.fragment-CGQHcoVr.esm.min.js.map +0 -1
  488. package/dist/chunks/rgbdEncode.fragment-CHPMUGpL.esm.js +0 -17
  489. package/dist/chunks/rgbdEncode.fragment-CHPMUGpL.esm.js.map +0 -1
  490. package/dist/chunks/rgbdEncode.fragment-Ch8KaRMn.esm.min.js +0 -2
  491. package/dist/chunks/rgbdEncode.fragment-Ch8KaRMn.esm.min.js.map +0 -1
  492. package/dist/chunks/splatFileLoader-BOlEs8up.esm.min.js +0 -2
  493. package/dist/chunks/splatFileLoader-BOlEs8up.esm.min.js.map +0 -1
  494. package/dist/chunks/splatFileLoader-bjTdN6CH.esm.js +0 -3137
  495. package/dist/chunks/splatFileLoader-bjTdN6CH.esm.js.map +0 -1
  496. package/dist/chunks/standardMaterial-AtuI8LET.esm.min.js +0 -2
  497. package/dist/chunks/standardMaterial-AtuI8LET.esm.min.js.map +0 -1
  498. package/dist/chunks/standardMaterial-pkPTNFQZ.esm.js +0 -1809
  499. package/dist/chunks/standardMaterial-pkPTNFQZ.esm.js.map +0 -1
  500. package/dist/chunks/stlFileLoader-D_S8zIWi.esm.min.js +0 -2
  501. package/dist/chunks/stlFileLoader-D_S8zIWi.esm.min.js.map +0 -1
  502. package/dist/chunks/stlFileLoader-LAl8UbnA.esm.js +0 -237
  503. package/dist/chunks/stlFileLoader-LAl8UbnA.esm.js.map +0 -1
  504. package/dist/chunks/tgaTextureLoader-6J7hFLap.esm.min.js +0 -2
  505. package/dist/chunks/tgaTextureLoader-6J7hFLap.esm.min.js.map +0 -1
  506. package/dist/chunks/tgaTextureLoader-C9bFUsSu.esm.js +0 -349
  507. package/dist/chunks/tgaTextureLoader-C9bFUsSu.esm.js.map +0 -1
  508. package/dist/chunks/thinInstanceMesh-01jRjs2y.esm.js +0 -314
  509. package/dist/chunks/thinInstanceMesh-01jRjs2y.esm.js.map +0 -1
  510. package/dist/chunks/thinInstanceMesh-BkM6bBqz.esm.min.js +0 -2
  511. package/dist/chunks/thinInstanceMesh-BkM6bBqz.esm.min.js.map +0 -1
  512. package/dist/chunks/vertexColorMixing-BQURABk9.esm.js +0 -528
  513. package/dist/chunks/vertexColorMixing-BQURABk9.esm.js.map +0 -1
  514. package/dist/chunks/vertexColorMixing-DtyijcYJ.esm.min.js +0 -2
  515. package/dist/chunks/vertexColorMixing-DtyijcYJ.esm.min.js.map +0 -1
  516. package/dist/chunks/workerPool-BUOov2K1.esm.js +0 -122
  517. package/dist/chunks/workerPool-BUOov2K1.esm.js.map +0 -1
  518. package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js +0 -2
  519. package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js.map +0 -1
  520. package/lib/index.d.ts +0 -237
  521. package/lib/index.js +0 -871
  522. package/lib/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"MSFT_audio_emitter-fFvTv2YK.esm.js","sources":["../../../../../dev/core/dist/Animations/animationEvent.js","../../../../../dev/core/dist/Audio/sound.js","../../../../../dev/core/dist/Audio/weightedsound.js","../../../../../dev/loaders/dist/glTF/2.0/Extensions/MSFT_audio_emitter.js"],"sourcesContent":["/**\n * Composed of a frame, and an action function\n */\nexport class AnimationEvent {\n /**\n * Initializes the animation event\n * @param frame The frame for which the event is triggered\n * @param action The event to perform when triggered\n * @param onlyOnce Specifies if the event should be triggered only once\n */\n constructor(\n /** The frame for which the event is triggered **/\n frame, \n /** The event to perform when triggered **/\n action, \n /** Specifies if the event should be triggered only once**/\n onlyOnce) {\n this.frame = frame;\n this.action = action;\n this.onlyOnce = onlyOnce;\n /**\n * Specifies if the animation event is done\n */\n this.isDone = false;\n }\n /** @internal */\n _clone() {\n return new AnimationEvent(this.frame, this.action, this.onlyOnce);\n }\n}\n//# sourceMappingURL=animationEvent.js.map","import { Tools } from \"../Misc/tools\";\nimport { Observable } from \"../Misc/observable\";\nimport { Vector3 } from \"../Maths/math.vector\";\nimport { Logger } from \"../Misc/logger\";\nimport { _WarnImport } from \"../Misc/devTools\";\nimport { EngineStore } from \"../Engines/engineStore\";\nimport { RegisterClass } from \"../Misc/typeStore\";\nimport { AbstractEngine } from \"core/Engines/abstractEngine\";\n/**\n * Defines a sound that can be played in the application.\n * The sound can either be an ambient track or a simple sound played in reaction to a user action.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic\n */\nexport class Sound {\n /**\n * Does the sound loop after it finishes playing once.\n */\n get loop() {\n return this._loop;\n }\n set loop(value) {\n if (value === this._loop) {\n return;\n }\n this._loop = value;\n this.updateOptions({ loop: value });\n }\n /**\n * Gets the current time for the sound.\n */\n get currentTime() {\n if (this._htmlAudioElement) {\n return this._htmlAudioElement.currentTime;\n }\n if (AbstractEngine.audioEngine?.audioContext && (this.isPlaying || this.isPaused)) {\n // The `_currentTime` member is only updated when the sound is paused. Add the time since the last start\n // to get the actual current time.\n const timeSinceLastStart = this.isPaused ? 0 : AbstractEngine.audioEngine.audioContext.currentTime - this._startTime;\n return this._currentTime + timeSinceLastStart;\n }\n return 0;\n }\n /**\n * Does this sound enables spatial sound.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n get spatialSound() {\n return this._spatialSound;\n }\n /**\n * Does this sound enables spatial sound.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n set spatialSound(newValue) {\n if (newValue == this._spatialSound) {\n return;\n }\n const wasPlaying = this.isPlaying;\n this.pause();\n if (newValue) {\n this._spatialSound = newValue;\n this._updateSpatialParameters();\n }\n else {\n this._disableSpatialSound();\n }\n if (wasPlaying) {\n this.play();\n }\n }\n /**\n * Create a sound and attach it to a scene\n * @param name Name of your sound\n * @param urlOrArrayBuffer Url to the sound to load async or ArrayBuffer, it also works with MediaStreams and AudioBuffers\n * @param scene defines the scene the sound belongs to\n * @param readyToPlayCallback Provide a callback function if you'd like to load your code once the sound is ready to be played\n * @param options Objects to provide with the current available options: autoplay, loop, volume, spatialSound, maxDistance, rolloffFactor, refDistance, distanceModel, panningModel, streaming\n */\n constructor(name, urlOrArrayBuffer, scene, readyToPlayCallback = null, options) {\n /**\n * Does the sound autoplay once loaded.\n */\n this.autoplay = false;\n this._loop = false;\n /**\n * Does the sound use a custom attenuation curve to simulate the falloff\n * happening when the source gets further away from the camera.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-your-own-custom-attenuation-function\n */\n this.useCustomAttenuation = false;\n /**\n * Is this sound currently played.\n */\n this.isPlaying = false;\n /**\n * Is this sound currently paused.\n */\n this.isPaused = false;\n /**\n * Define the reference distance the sound should be heard perfectly.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.refDistance = 1;\n /**\n * Define the roll off factor of spatial sounds.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.rolloffFactor = 1;\n /**\n * Define the max distance the sound should be heard (intensity just became 0 at this point).\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.maxDistance = 100;\n /**\n * Define the distance attenuation model the sound will follow.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n this.distanceModel = \"linear\";\n /**\n * Gets or sets an object used to store user defined information for the sound.\n */\n this.metadata = null;\n /**\n * Observable event when the current playing sound finishes.\n */\n this.onEndedObservable = new Observable();\n this._spatialSound = false;\n this._panningModel = \"equalpower\";\n this._playbackRate = 1;\n this._streaming = false;\n this._startTime = 0;\n this._currentTime = 0;\n this._position = Vector3.Zero();\n this._localDirection = new Vector3(1, 0, 0);\n this._volume = 1;\n this._isReadyToPlay = false;\n this._isDirectional = false;\n // Used if you'd like to create a directional sound.\n // If not set, the sound will be omnidirectional\n this._coneInnerAngle = 360;\n this._coneOuterAngle = 360;\n this._coneOuterGain = 0;\n this._isOutputConnected = false;\n this._urlType = \"Unknown\";\n this.name = name;\n scene = scene || EngineStore.LastCreatedScene;\n if (!scene) {\n return;\n }\n this._scene = scene;\n Sound._SceneComponentInitialization(scene);\n this._readyToPlayCallback = readyToPlayCallback;\n // Default custom attenuation function is a linear attenuation\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this._customAttenuationFunction = (currentVolume, currentDistance, maxDistance, refDistance, rolloffFactor) => {\n if (currentDistance < maxDistance) {\n return currentVolume * (1 - currentDistance / maxDistance);\n }\n else {\n return 0;\n }\n };\n if (options) {\n this.autoplay = options.autoplay || false;\n this._loop = options.loop || false;\n // if volume === 0, we need another way to check this option\n if (options.volume !== undefined) {\n this._volume = options.volume;\n }\n this._spatialSound = options.spatialSound ?? false;\n this.maxDistance = options.maxDistance ?? 100;\n this.useCustomAttenuation = options.useCustomAttenuation ?? false;\n this.rolloffFactor = options.rolloffFactor || 1;\n this.refDistance = options.refDistance || 1;\n this.distanceModel = options.distanceModel || \"linear\";\n this._playbackRate = options.playbackRate || 1;\n this._streaming = options.streaming ?? false;\n this._length = options.length;\n this._offset = options.offset;\n }\n if (AbstractEngine.audioEngine?.canUseWebAudio && AbstractEngine.audioEngine.audioContext) {\n this._soundGain = AbstractEngine.audioEngine.audioContext.createGain();\n this._soundGain.gain.value = this._volume;\n this._inputAudioNode = this._soundGain;\n this._outputAudioNode = this._soundGain;\n if (this._spatialSound) {\n this._createSpatialParameters();\n }\n this._scene.mainSoundTrack.addSound(this);\n let validParameter = true;\n // if no parameter is passed, you need to call setAudioBuffer yourself to prepare the sound\n if (urlOrArrayBuffer) {\n try {\n if (typeof urlOrArrayBuffer === \"string\") {\n this._urlType = \"String\";\n this._url = urlOrArrayBuffer;\n }\n else if (urlOrArrayBuffer instanceof ArrayBuffer) {\n this._urlType = \"ArrayBuffer\";\n }\n else if (urlOrArrayBuffer instanceof HTMLMediaElement) {\n this._urlType = \"MediaElement\";\n }\n else if (urlOrArrayBuffer instanceof MediaStream) {\n this._urlType = \"MediaStream\";\n }\n else if (urlOrArrayBuffer instanceof AudioBuffer) {\n this._urlType = \"AudioBuffer\";\n }\n else if (Array.isArray(urlOrArrayBuffer)) {\n this._urlType = \"Array\";\n }\n let urls = [];\n let codecSupportedFound = false;\n switch (this._urlType) {\n case \"MediaElement\":\n this._streaming = true;\n this._isReadyToPlay = true;\n this._streamingSource = AbstractEngine.audioEngine.audioContext.createMediaElementSource(urlOrArrayBuffer);\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n break;\n case \"MediaStream\":\n this._streaming = true;\n this._isReadyToPlay = true;\n this._streamingSource = AbstractEngine.audioEngine.audioContext.createMediaStreamSource(urlOrArrayBuffer);\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n break;\n case \"ArrayBuffer\":\n if (urlOrArrayBuffer.byteLength > 0) {\n codecSupportedFound = true;\n this._soundLoaded(urlOrArrayBuffer);\n }\n break;\n case \"AudioBuffer\":\n this._audioBufferLoaded(urlOrArrayBuffer);\n break;\n case \"String\":\n urls.push(urlOrArrayBuffer);\n // eslint-disable-next-line no-fallthrough\n case \"Array\":\n if (urls.length === 0) {\n urls = urlOrArrayBuffer;\n }\n // If we found a supported format, we load it immediately and stop the loop\n for (let i = 0; i < urls.length; i++) {\n const url = urls[i];\n codecSupportedFound =\n (options && options.skipCodecCheck) ||\n (url.indexOf(\".mp3\", url.length - 4) !== -1 && AbstractEngine.audioEngine.isMP3supported) ||\n (url.indexOf(\".ogg\", url.length - 4) !== -1 && AbstractEngine.audioEngine.isOGGsupported) ||\n url.indexOf(\".wav\", url.length - 4) !== -1 ||\n url.indexOf(\".m4a\", url.length - 4) !== -1 ||\n url.indexOf(\".mp4\", url.length - 4) !== -1 ||\n url.indexOf(\"blob:\") !== -1;\n if (codecSupportedFound) {\n // Loading sound\n if (!this._streaming) {\n this._scene._loadFile(url, (data) => {\n this._soundLoaded(data);\n }, undefined, true, true, (exception) => {\n if (exception) {\n Logger.Error(\"XHR \" + exception.status + \" error on: \" + url + \".\");\n }\n Logger.Error(\"Sound creation aborted.\");\n this._scene.mainSoundTrack.removeSound(this);\n });\n }\n // Streaming sound using HTML5 Audio tag\n else {\n this._htmlAudioElement = new Audio(url);\n this._htmlAudioElement.controls = false;\n this._htmlAudioElement.loop = this.loop;\n Tools.SetCorsBehavior(url, this._htmlAudioElement);\n this._htmlAudioElement.preload = \"auto\";\n this._htmlAudioElement.addEventListener(\"canplaythrough\", () => {\n this._isReadyToPlay = true;\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n });\n document.body.appendChild(this._htmlAudioElement);\n this._htmlAudioElement.load();\n }\n break;\n }\n }\n break;\n default:\n validParameter = false;\n break;\n }\n if (!validParameter) {\n Logger.Error(\"Parameter must be a URL to the sound, an Array of URLs (.mp3 & .ogg) or an ArrayBuffer of the sound.\");\n }\n else {\n if (!codecSupportedFound) {\n this._isReadyToPlay = true;\n // Simulating a ready to play event to avoid breaking code path\n if (this._readyToPlayCallback) {\n setTimeout(() => {\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }, 1000);\n }\n }\n }\n }\n catch (ex) {\n Logger.Error(\"Unexpected error. Sound creation aborted.\");\n this._scene.mainSoundTrack.removeSound(this);\n }\n }\n }\n else {\n // Adding an empty sound to avoid breaking audio calls for non Web Audio browsers\n this._scene.mainSoundTrack.addSound(this);\n if (AbstractEngine.audioEngine && !AbstractEngine.audioEngine.WarnedWebAudioUnsupported) {\n Logger.Error(\"Web Audio is not supported by your browser.\");\n AbstractEngine.audioEngine.WarnedWebAudioUnsupported = true;\n }\n // Simulating a ready to play event to avoid breaking code for non web audio browsers\n if (this._readyToPlayCallback) {\n setTimeout(() => {\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }, 1000);\n }\n }\n }\n /**\n * Release the sound and its associated resources\n */\n dispose() {\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n if (this.isPlaying) {\n this.stop();\n }\n this._isReadyToPlay = false;\n if (this.soundTrackId === -1) {\n this._scene.mainSoundTrack.removeSound(this);\n }\n else if (this._scene.soundTracks) {\n this._scene.soundTracks[this.soundTrackId].removeSound(this);\n }\n if (this._soundGain) {\n this._soundGain.disconnect();\n this._soundGain = null;\n }\n if (this._soundPanner) {\n this._soundPanner.disconnect();\n this._soundPanner = null;\n }\n if (this._soundSource) {\n this._soundSource.disconnect();\n this._soundSource = null;\n }\n this._audioBuffer = null;\n if (this._htmlAudioElement) {\n this._htmlAudioElement.pause();\n this._htmlAudioElement.src = \"\";\n document.body.removeChild(this._htmlAudioElement);\n }\n if (this._streamingSource) {\n this._streamingSource.disconnect();\n }\n if (this._connectedTransformNode && this._registerFunc) {\n this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc);\n this._connectedTransformNode = null;\n }\n this._clearTimeoutsAndObservers();\n }\n }\n /**\n * Gets if the sounds is ready to be played or not.\n * @returns true if ready, otherwise false\n */\n isReady() {\n return this._isReadyToPlay;\n }\n /**\n * Get the current class name.\n * @returns current class name\n */\n getClassName() {\n return \"Sound\";\n }\n _audioBufferLoaded(buffer) {\n if (!AbstractEngine.audioEngine?.audioContext) {\n return;\n }\n this._audioBuffer = buffer;\n this._isReadyToPlay = true;\n if (this.autoplay) {\n this.play(0, this._offset, this._length);\n }\n if (this._readyToPlayCallback) {\n this._readyToPlayCallback();\n }\n }\n _soundLoaded(audioData) {\n if (!AbstractEngine.audioEngine?.audioContext) {\n return;\n }\n AbstractEngine.audioEngine.audioContext.decodeAudioData(audioData, (buffer) => {\n this._audioBufferLoaded(buffer);\n }, (err) => {\n Logger.Error(\"Error while decoding audio data for: \" + this.name + \" / Error: \" + err);\n });\n }\n /**\n * Sets the data of the sound from an audiobuffer\n * @param audioBuffer The audioBuffer containing the data\n */\n setAudioBuffer(audioBuffer) {\n if (AbstractEngine.audioEngine?.canUseWebAudio) {\n this._audioBuffer = audioBuffer;\n this._isReadyToPlay = true;\n }\n }\n /**\n * Updates the current sounds options such as maxdistance, loop...\n * @param options A JSON object containing values named as the object properties\n */\n updateOptions(options) {\n if (options) {\n this.loop = options.loop ?? this.loop;\n this.maxDistance = options.maxDistance ?? this.maxDistance;\n this.useCustomAttenuation = options.useCustomAttenuation ?? this.useCustomAttenuation;\n this.rolloffFactor = options.rolloffFactor ?? this.rolloffFactor;\n this.refDistance = options.refDistance ?? this.refDistance;\n this.distanceModel = options.distanceModel ?? this.distanceModel;\n this._playbackRate = options.playbackRate ?? this._playbackRate;\n this._length = options.length ?? undefined;\n this.spatialSound = options.spatialSound ?? this._spatialSound;\n this._setOffset(options.offset ?? undefined);\n this.setVolume(options.volume ?? this._volume);\n this._updateSpatialParameters();\n if (this.isPlaying) {\n if (this._streaming && this._htmlAudioElement) {\n this._htmlAudioElement.playbackRate = this._playbackRate;\n if (this._htmlAudioElement.loop !== this.loop) {\n this._htmlAudioElement.loop = this.loop;\n }\n }\n else {\n if (this._soundSource) {\n this._soundSource.playbackRate.value = this._playbackRate;\n if (this._soundSource.loop !== this.loop) {\n this._soundSource.loop = this.loop;\n }\n if (this._offset !== undefined && this._soundSource.loopStart !== this._offset) {\n this._soundSource.loopStart = this._offset;\n }\n if (this._length !== undefined && this._length !== this._soundSource.loopEnd) {\n this._soundSource.loopEnd = (this._offset | 0) + this._length;\n }\n }\n }\n }\n }\n }\n _createSpatialParameters() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && AbstractEngine.audioEngine.audioContext) {\n if (this._scene.headphone) {\n this._panningModel = \"HRTF\";\n }\n this._soundPanner = this._soundPanner ?? AbstractEngine.audioEngine.audioContext.createPanner();\n if (this._soundPanner && this._outputAudioNode) {\n this._updateSpatialParameters();\n this._soundPanner.connect(this._outputAudioNode);\n this._inputAudioNode = this._soundPanner;\n }\n }\n }\n _disableSpatialSound() {\n if (!this._spatialSound) {\n return;\n }\n this._inputAudioNode = this._soundGain;\n this._soundPanner?.disconnect();\n this._soundPanner = null;\n this._spatialSound = false;\n }\n _updateSpatialParameters() {\n if (!this._spatialSound) {\n return;\n }\n if (this._soundPanner) {\n if (this.useCustomAttenuation) {\n // Tricks to disable in a way embedded Web Audio attenuation\n this._soundPanner.distanceModel = \"linear\";\n this._soundPanner.maxDistance = Number.MAX_VALUE;\n this._soundPanner.refDistance = 1;\n this._soundPanner.rolloffFactor = 1;\n this._soundPanner.panningModel = this._panningModel;\n }\n else {\n this._soundPanner.distanceModel = this.distanceModel;\n this._soundPanner.maxDistance = this.maxDistance;\n this._soundPanner.refDistance = this.refDistance;\n this._soundPanner.rolloffFactor = this.rolloffFactor;\n this._soundPanner.panningModel = this._panningModel;\n }\n }\n else {\n this._createSpatialParameters();\n }\n }\n /**\n * Switch the panning model to HRTF:\n * Renders a stereo output of higher quality than equalpower — it uses a convolution with measured impulse responses from human subjects.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n switchPanningModelToHRTF() {\n this._panningModel = \"HRTF\";\n this._switchPanningModel();\n }\n /**\n * Switch the panning model to Equal Power:\n * Represents the equal-power panning algorithm, generally regarded as simple and efficient. equalpower is the default value.\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-a-spatial-3d-sound\n */\n switchPanningModelToEqualPower() {\n this._panningModel = \"equalpower\";\n this._switchPanningModel();\n }\n _switchPanningModel() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._spatialSound && this._soundPanner) {\n this._soundPanner.panningModel = this._panningModel;\n }\n }\n /**\n * Connect this sound to a sound track audio node like gain...\n * @param soundTrackAudioNode the sound track audio node to connect to\n */\n connectToSoundTrackAudioNode(soundTrackAudioNode) {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._outputAudioNode) {\n if (this._isOutputConnected) {\n this._outputAudioNode.disconnect();\n }\n this._outputAudioNode.connect(soundTrackAudioNode);\n this._isOutputConnected = true;\n }\n }\n /**\n * Transform this sound into a directional source\n * @param coneInnerAngle Size of the inner cone in degree\n * @param coneOuterAngle Size of the outer cone in degree\n * @param coneOuterGain Volume of the sound outside the outer cone (between 0.0 and 1.0)\n */\n setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) {\n if (coneOuterAngle < coneInnerAngle) {\n Logger.Error(\"setDirectionalCone(): outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneInnerAngle = coneInnerAngle;\n this._coneOuterAngle = coneOuterAngle;\n this._coneOuterGain = coneOuterGain;\n this._isDirectional = true;\n if (this.isPlaying && this.loop) {\n this.stop();\n this.play(0, this._offset, this._length);\n }\n }\n /**\n * Gets or sets the inner angle for the directional cone.\n */\n get directionalConeInnerAngle() {\n return this._coneInnerAngle;\n }\n /**\n * Gets or sets the inner angle for the directional cone.\n */\n set directionalConeInnerAngle(value) {\n if (value != this._coneInnerAngle) {\n if (this._coneOuterAngle < value) {\n Logger.Error(\"directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneInnerAngle = value;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._spatialSound && this._soundPanner) {\n this._soundPanner.coneInnerAngle = this._coneInnerAngle;\n }\n }\n }\n /**\n * Gets or sets the outer angle for the directional cone.\n */\n get directionalConeOuterAngle() {\n return this._coneOuterAngle;\n }\n /**\n * Gets or sets the outer angle for the directional cone.\n */\n set directionalConeOuterAngle(value) {\n if (value != this._coneOuterAngle) {\n if (value < this._coneInnerAngle) {\n Logger.Error(\"directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneOuterAngle = value;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._spatialSound && this._soundPanner) {\n this._soundPanner.coneOuterAngle = this._coneOuterAngle;\n }\n }\n }\n /**\n * Sets the position of the emitter if spatial sound is enabled\n * @param newPosition Defines the new position\n */\n setPosition(newPosition) {\n if (newPosition.equals(this._position)) {\n return;\n }\n this._position.copyFrom(newPosition);\n if (AbstractEngine.audioEngine?.canUseWebAudio &&\n this._spatialSound &&\n this._soundPanner &&\n !isNaN(this._position.x) &&\n !isNaN(this._position.y) &&\n !isNaN(this._position.z)) {\n this._soundPanner.positionX.value = this._position.x;\n this._soundPanner.positionY.value = this._position.y;\n this._soundPanner.positionZ.value = this._position.z;\n }\n }\n /**\n * Sets the local direction of the emitter if spatial sound is enabled\n * @param newLocalDirection Defines the new local direction\n */\n setLocalDirectionToMesh(newLocalDirection) {\n this._localDirection = newLocalDirection;\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._connectedTransformNode && this.isPlaying) {\n this._updateDirection();\n }\n }\n _updateDirection() {\n if (!this._connectedTransformNode || !this._soundPanner) {\n return;\n }\n const mat = this._connectedTransformNode.getWorldMatrix();\n const direction = Vector3.TransformNormal(this._localDirection, mat);\n direction.normalize();\n this._soundPanner.orientationX.value = direction.x;\n this._soundPanner.orientationY.value = direction.y;\n this._soundPanner.orientationZ.value = direction.z;\n }\n /** @internal */\n updateDistanceFromListener() {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._connectedTransformNode && this.useCustomAttenuation && this._soundGain && this._scene.activeCamera) {\n const distance = this._scene.audioListenerPositionProvider\n ? this._connectedTransformNode.position.subtract(this._scene.audioListenerPositionProvider()).length()\n : this._connectedTransformNode.getDistanceToCamera(this._scene.activeCamera);\n this._soundGain.gain.value = this._customAttenuationFunction(this._volume, distance, this.maxDistance, this.refDistance, this.rolloffFactor);\n }\n }\n /**\n * Sets a new custom attenuation function for the sound.\n * @param callback Defines the function used for the attenuation\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#creating-your-own-custom-attenuation-function\n */\n setAttenuationFunction(callback) {\n this._customAttenuationFunction = callback;\n }\n /**\n * Play the sound\n * @param time (optional) Start the sound after X seconds. Start immediately (0) by default.\n * @param offset (optional) Start the sound at a specific time in seconds\n * @param length (optional) Sound duration (in seconds)\n */\n play(time, offset, length) {\n if (this._isReadyToPlay && this._scene.audioEnabled && AbstractEngine.audioEngine?.audioContext) {\n try {\n this._clearTimeoutsAndObservers();\n let startTime = time ? AbstractEngine.audioEngine?.audioContext.currentTime + time : AbstractEngine.audioEngine?.audioContext.currentTime;\n if (!this._soundSource || !this._streamingSource) {\n if (this._spatialSound && this._soundPanner) {\n if (!isNaN(this._position.x) && !isNaN(this._position.y) && !isNaN(this._position.z)) {\n this._soundPanner.positionX.value = this._position.x;\n this._soundPanner.positionY.value = this._position.y;\n this._soundPanner.positionZ.value = this._position.z;\n }\n if (this._isDirectional) {\n this._soundPanner.coneInnerAngle = this._coneInnerAngle;\n this._soundPanner.coneOuterAngle = this._coneOuterAngle;\n this._soundPanner.coneOuterGain = this._coneOuterGain;\n if (this._connectedTransformNode) {\n this._updateDirection();\n }\n else {\n this._soundPanner.setOrientation(this._localDirection.x, this._localDirection.y, this._localDirection.z);\n }\n }\n }\n }\n if (this._streaming) {\n if (!this._streamingSource) {\n this._streamingSource = AbstractEngine.audioEngine.audioContext.createMediaElementSource(this._htmlAudioElement);\n this._htmlAudioElement.onended = () => {\n this._onended();\n };\n this._htmlAudioElement.playbackRate = this._playbackRate;\n }\n this._streamingSource.disconnect();\n if (this._inputAudioNode) {\n this._streamingSource.connect(this._inputAudioNode);\n }\n if (this._htmlAudioElement) {\n // required to manage properly the new suspended default state of Chrome\n // When the option 'streaming: true' is used, we need first to wait for\n // the audio engine to be unlocked by a user gesture before trying to play\n // an HTML Audio element\n const tryToPlay = () => {\n if (AbstractEngine.audioEngine?.unlocked) {\n const playPromise = this._htmlAudioElement.play();\n // In browsers that don’t yet support this functionality,\n // playPromise won’t be defined.\n if (playPromise !== undefined) {\n playPromise.catch(() => {\n // Automatic playback failed.\n // Waiting for the audio engine to be unlocked by user click on unmute\n AbstractEngine.audioEngine?.lock();\n if (this.loop || this.autoplay) {\n this._audioUnlockedObserver = AbstractEngine.audioEngine?.onAudioUnlockedObservable.addOnce(() => {\n tryToPlay();\n });\n }\n });\n }\n }\n else {\n if (this.loop || this.autoplay) {\n this._audioUnlockedObserver = AbstractEngine.audioEngine?.onAudioUnlockedObservable.addOnce(() => {\n tryToPlay();\n });\n }\n }\n };\n tryToPlay();\n }\n }\n else {\n const tryToPlay = () => {\n if (AbstractEngine.audioEngine?.audioContext) {\n length = length || this._length;\n if (offset !== undefined) {\n this._setOffset(offset);\n }\n if (this._soundSource) {\n const oldSource = this._soundSource;\n oldSource.onended = () => {\n oldSource.disconnect();\n };\n }\n this._soundSource = AbstractEngine.audioEngine?.audioContext.createBufferSource();\n if (this._soundSource && this._inputAudioNode) {\n this._soundSource.buffer = this._audioBuffer;\n this._soundSource.connect(this._inputAudioNode);\n this._soundSource.loop = this.loop;\n if (offset !== undefined) {\n this._soundSource.loopStart = offset;\n }\n if (length !== undefined) {\n this._soundSource.loopEnd = (offset | 0) + length;\n }\n this._soundSource.playbackRate.value = this._playbackRate;\n this._soundSource.onended = () => {\n this._onended();\n };\n startTime = time ? AbstractEngine.audioEngine?.audioContext.currentTime + time : AbstractEngine.audioEngine.audioContext.currentTime;\n const actualOffset = ((this.isPaused ? this.currentTime : 0) + (this._offset ?? 0)) % this._soundSource.buffer.duration;\n this._soundSource.start(startTime, actualOffset, this.loop ? undefined : length);\n }\n }\n };\n if (AbstractEngine.audioEngine?.audioContext.state === \"suspended\") {\n // Wait a bit for FF as context seems late to be ready.\n this._tryToPlayTimeout = setTimeout(() => {\n if (AbstractEngine.audioEngine?.audioContext.state === \"suspended\") {\n // Automatic playback failed.\n // Waiting for the audio engine to be unlocked by user click on unmute\n AbstractEngine.audioEngine.lock();\n if (this.loop || this.autoplay) {\n this._audioUnlockedObserver = AbstractEngine.audioEngine.onAudioUnlockedObservable.addOnce(() => {\n tryToPlay();\n });\n }\n }\n else {\n tryToPlay();\n }\n }, 500);\n }\n else {\n tryToPlay();\n }\n }\n this._startTime = startTime;\n this.isPlaying = true;\n this.isPaused = false;\n }\n catch (ex) {\n Logger.Error(\"Error while trying to play audio: \" + this.name + \", \" + ex.message);\n }\n }\n }\n _onended() {\n this.isPlaying = false;\n this._startTime = 0;\n this._currentTime = 0;\n if (this.onended) {\n this.onended();\n }\n this.onEndedObservable.notifyObservers(this);\n }\n /**\n * Stop the sound\n * @param time (optional) Stop the sound after X seconds. Stop immediately (0) by default.\n */\n stop(time) {\n if (this.isPlaying) {\n this._clearTimeoutsAndObservers();\n if (this._streaming) {\n if (this._htmlAudioElement) {\n this._htmlAudioElement.pause();\n // Test needed for Firefox or it will generate an Invalid State Error\n if (this._htmlAudioElement.currentTime > 0) {\n this._htmlAudioElement.currentTime = 0;\n }\n }\n else {\n this._streamingSource.disconnect();\n }\n this.isPlaying = false;\n }\n else if (AbstractEngine.audioEngine?.audioContext && this._soundSource) {\n const stopTime = time ? AbstractEngine.audioEngine.audioContext.currentTime + time : undefined;\n this._soundSource.onended = () => {\n this.isPlaying = false;\n this.isPaused = false;\n this._startTime = 0;\n this._currentTime = 0;\n if (this._soundSource) {\n this._soundSource.onended = () => void 0;\n }\n this._onended();\n };\n this._soundSource.stop(stopTime);\n }\n else {\n this.isPlaying = false;\n }\n }\n else if (this.isPaused) {\n this.isPaused = false;\n this._startTime = 0;\n this._currentTime = 0;\n }\n }\n /**\n * Put the sound in pause\n */\n pause() {\n if (this.isPlaying) {\n this._clearTimeoutsAndObservers();\n if (this._streaming) {\n if (this._htmlAudioElement) {\n this._htmlAudioElement.pause();\n }\n else {\n this._streamingSource.disconnect();\n }\n this.isPlaying = false;\n this.isPaused = true;\n }\n else if (AbstractEngine.audioEngine?.audioContext && this._soundSource) {\n this._soundSource.onended = () => void 0;\n this._soundSource.stop();\n this.isPlaying = false;\n this.isPaused = true;\n this._currentTime += AbstractEngine.audioEngine.audioContext.currentTime - this._startTime;\n }\n }\n }\n /**\n * Sets a dedicated volume for this sounds\n * @param newVolume Define the new volume of the sound\n * @param time Define time for gradual change to new volume\n */\n setVolume(newVolume, time) {\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._soundGain) {\n if (time && AbstractEngine.audioEngine.audioContext) {\n this._soundGain.gain.cancelScheduledValues(AbstractEngine.audioEngine.audioContext.currentTime);\n this._soundGain.gain.setValueAtTime(this._soundGain.gain.value, AbstractEngine.audioEngine.audioContext.currentTime);\n this._soundGain.gain.linearRampToValueAtTime(newVolume, AbstractEngine.audioEngine.audioContext.currentTime + time);\n }\n else {\n this._soundGain.gain.value = newVolume;\n }\n }\n this._volume = newVolume;\n }\n /**\n * Set the sound play back rate\n * @param newPlaybackRate Define the playback rate the sound should be played at\n */\n setPlaybackRate(newPlaybackRate) {\n this._playbackRate = newPlaybackRate;\n if (this.isPlaying) {\n if (this._streaming && this._htmlAudioElement) {\n this._htmlAudioElement.playbackRate = this._playbackRate;\n }\n else if (this._soundSource) {\n this._soundSource.playbackRate.value = this._playbackRate;\n }\n }\n }\n /**\n * Gets the sound play back rate.\n * @returns the play back rate of the sound\n */\n getPlaybackRate() {\n return this._playbackRate;\n }\n /**\n * Gets the volume of the sound.\n * @returns the volume of the sound\n */\n getVolume() {\n return this._volume;\n }\n /**\n * Attach the sound to a dedicated mesh\n * @param transformNode The transform node to connect the sound with\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#attaching-a-sound-to-a-mesh\n */\n attachToMesh(transformNode) {\n if (this._connectedTransformNode && this._registerFunc) {\n this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc);\n this._registerFunc = null;\n }\n this._connectedTransformNode = transformNode;\n if (!this._spatialSound) {\n this._spatialSound = true;\n this._createSpatialParameters();\n if (this.isPlaying && this.loop) {\n this.stop();\n this.play(0, this._offset, this._length);\n }\n }\n this._onRegisterAfterWorldMatrixUpdate(this._connectedTransformNode);\n this._registerFunc = (transformNode) => this._onRegisterAfterWorldMatrixUpdate(transformNode);\n this._connectedTransformNode.registerAfterWorldMatrixUpdate(this._registerFunc);\n }\n /**\n * Detach the sound from the previously attached mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/audio/playingSoundsMusic#attaching-a-sound-to-a-mesh\n */\n detachFromMesh() {\n if (this._connectedTransformNode && this._registerFunc) {\n this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc);\n this._registerFunc = null;\n this._connectedTransformNode = null;\n }\n }\n _onRegisterAfterWorldMatrixUpdate(node) {\n if (!node.getBoundingInfo) {\n this.setPosition(node.absolutePosition);\n }\n else {\n const mesh = node;\n const boundingInfo = mesh.getBoundingInfo();\n this.setPosition(boundingInfo.boundingSphere.centerWorld);\n }\n if (AbstractEngine.audioEngine?.canUseWebAudio && this._isDirectional && this.isPlaying) {\n this._updateDirection();\n }\n }\n /**\n * Clone the current sound in the scene.\n * @returns the new sound clone\n */\n clone() {\n if (!this._streaming) {\n const setBufferAndRun = () => {\n if (this._isReadyToPlay) {\n clonedSound._audioBuffer = this.getAudioBuffer();\n clonedSound._isReadyToPlay = true;\n if (clonedSound.autoplay) {\n clonedSound.play(0, this._offset, this._length);\n }\n }\n else {\n setTimeout(setBufferAndRun, 300);\n }\n };\n const currentOptions = {\n autoplay: this.autoplay,\n loop: this.loop,\n volume: this._volume,\n spatialSound: this._spatialSound,\n maxDistance: this.maxDistance,\n useCustomAttenuation: this.useCustomAttenuation,\n rolloffFactor: this.rolloffFactor,\n refDistance: this.refDistance,\n distanceModel: this.distanceModel,\n };\n const clonedSound = new Sound(this.name + \"_cloned\", new ArrayBuffer(0), this._scene, null, currentOptions);\n if (this.useCustomAttenuation) {\n clonedSound.setAttenuationFunction(this._customAttenuationFunction);\n }\n clonedSound.setPosition(this._position);\n clonedSound.setPlaybackRate(this._playbackRate);\n setBufferAndRun();\n return clonedSound;\n }\n // Can't clone a streaming sound\n else {\n return null;\n }\n }\n /**\n * Gets the current underlying audio buffer containing the data\n * @returns the audio buffer\n */\n getAudioBuffer() {\n return this._audioBuffer;\n }\n /**\n * Gets the WebAudio AudioBufferSourceNode, lets you keep track of and stop instances of this Sound.\n * @returns the source node\n */\n getSoundSource() {\n return this._soundSource;\n }\n /**\n * Gets the WebAudio GainNode, gives you precise control over the gain of instances of this Sound.\n * @returns the gain node\n */\n getSoundGain() {\n return this._soundGain;\n }\n /**\n * Serializes the Sound in a JSON representation\n * @returns the JSON representation of the sound\n */\n serialize() {\n const serializationObject = {\n name: this.name,\n url: this._url,\n autoplay: this.autoplay,\n loop: this.loop,\n volume: this._volume,\n spatialSound: this._spatialSound,\n maxDistance: this.maxDistance,\n rolloffFactor: this.rolloffFactor,\n refDistance: this.refDistance,\n distanceModel: this.distanceModel,\n playbackRate: this._playbackRate,\n panningModel: this._panningModel,\n soundTrackId: this.soundTrackId,\n metadata: this.metadata,\n };\n if (this._spatialSound) {\n if (this._connectedTransformNode) {\n serializationObject.connectedMeshId = this._connectedTransformNode.id;\n }\n serializationObject.position = this._position.asArray();\n serializationObject.refDistance = this.refDistance;\n serializationObject.distanceModel = this.distanceModel;\n serializationObject.isDirectional = this._isDirectional;\n serializationObject.localDirectionToMesh = this._localDirection.asArray();\n serializationObject.coneInnerAngle = this._coneInnerAngle;\n serializationObject.coneOuterAngle = this._coneOuterAngle;\n serializationObject.coneOuterGain = this._coneOuterGain;\n }\n return serializationObject;\n }\n /**\n * Parse a JSON representation of a sound to instantiate in a given scene\n * @param parsedSound Define the JSON representation of the sound (usually coming from the serialize method)\n * @param scene Define the scene the new parsed sound should be created in\n * @param rootUrl Define the rooturl of the load in case we need to fetch relative dependencies\n * @param sourceSound Define a sound place holder if do not need to instantiate a new one\n * @returns the newly parsed sound\n */\n static Parse(parsedSound, scene, rootUrl, sourceSound) {\n const soundName = parsedSound.name;\n let soundUrl;\n if (parsedSound.url) {\n soundUrl = rootUrl + parsedSound.url;\n }\n else {\n soundUrl = rootUrl + soundName;\n }\n const options = {\n autoplay: parsedSound.autoplay,\n loop: parsedSound.loop,\n volume: parsedSound.volume,\n spatialSound: parsedSound.spatialSound,\n maxDistance: parsedSound.maxDistance,\n rolloffFactor: parsedSound.rolloffFactor,\n refDistance: parsedSound.refDistance,\n distanceModel: parsedSound.distanceModel,\n playbackRate: parsedSound.playbackRate,\n };\n let newSound;\n if (!sourceSound) {\n newSound = new Sound(soundName, soundUrl, scene, () => {\n scene.removePendingData(newSound);\n }, options);\n scene.addPendingData(newSound);\n }\n else {\n const setBufferAndRun = () => {\n if (sourceSound._isReadyToPlay) {\n newSound._audioBuffer = sourceSound.getAudioBuffer();\n newSound._isReadyToPlay = true;\n if (newSound.autoplay) {\n newSound.play(0, newSound._offset, newSound._length);\n }\n }\n else {\n setTimeout(setBufferAndRun, 300);\n }\n };\n newSound = new Sound(soundName, new ArrayBuffer(0), scene, null, options);\n setBufferAndRun();\n }\n if (parsedSound.position) {\n const soundPosition = Vector3.FromArray(parsedSound.position);\n newSound.setPosition(soundPosition);\n }\n if (parsedSound.isDirectional) {\n newSound.setDirectionalCone(parsedSound.coneInnerAngle || 360, parsedSound.coneOuterAngle || 360, parsedSound.coneOuterGain || 0);\n if (parsedSound.localDirectionToMesh) {\n const localDirectionToMesh = Vector3.FromArray(parsedSound.localDirectionToMesh);\n newSound.setLocalDirectionToMesh(localDirectionToMesh);\n }\n }\n if (parsedSound.connectedMeshId) {\n const connectedMesh = scene.getMeshById(parsedSound.connectedMeshId);\n if (connectedMesh) {\n newSound.attachToMesh(connectedMesh);\n }\n }\n if (parsedSound.metadata) {\n newSound.metadata = parsedSound.metadata;\n }\n return newSound;\n }\n _setOffset(value) {\n if (this._offset === value) {\n return;\n }\n if (this.isPaused) {\n this.stop();\n this.isPaused = false;\n }\n this._offset = value;\n }\n _clearTimeoutsAndObservers() {\n if (this._tryToPlayTimeout) {\n clearTimeout(this._tryToPlayTimeout);\n this._tryToPlayTimeout = null;\n }\n if (this._audioUnlockedObserver) {\n AbstractEngine.audioEngine?.onAudioUnlockedObservable.remove(this._audioUnlockedObserver);\n this._audioUnlockedObserver = null;\n }\n }\n}\n/**\n * @internal\n */\nSound._SceneComponentInitialization = (_) => {\n throw _WarnImport(\"AudioSceneComponent\");\n};\n// Register Class Name\nRegisterClass(\"BABYLON.Sound\", Sound);\n//# sourceMappingURL=sound.js.map","import { Logger } from \"../Misc/logger\";\n/**\n * Wraps one or more Sound objects and selects one with random weight for playback.\n */\nexport class WeightedSound {\n /**\n * Creates a new WeightedSound from the list of sounds given.\n * @param loop When true a Sound will be selected and played when the current playing Sound completes.\n * @param sounds Array of Sounds that will be selected from.\n * @param weights Array of number values for selection weights; length must equal sounds, values will be normalized to 1\n */\n constructor(loop, sounds, weights) {\n /** When true a Sound will be selected and played when the current playing Sound completes. */\n this.loop = false;\n this._coneInnerAngle = 360;\n this._coneOuterAngle = 360;\n this._volume = 1;\n /** A Sound is currently playing. */\n this.isPlaying = false;\n /** A Sound is currently paused. */\n this.isPaused = false;\n this._sounds = [];\n this._weights = [];\n if (sounds.length !== weights.length) {\n throw new Error(\"Sounds length does not equal weights length\");\n }\n this.loop = loop;\n this._weights = weights;\n // Normalize the weights\n let weightSum = 0;\n for (const weight of weights) {\n weightSum += weight;\n }\n const invWeightSum = weightSum > 0 ? 1 / weightSum : 0;\n for (let i = 0; i < this._weights.length; i++) {\n this._weights[i] *= invWeightSum;\n }\n this._sounds = sounds;\n for (const sound of this._sounds) {\n sound.onEndedObservable.add(() => {\n this._onended();\n });\n }\n }\n /**\n * The size of cone in degrees for a directional sound in which there will be no attenuation.\n */\n get directionalConeInnerAngle() {\n return this._coneInnerAngle;\n }\n /**\n * The size of cone in degrees for a directional sound in which there will be no attenuation.\n */\n set directionalConeInnerAngle(value) {\n if (value !== this._coneInnerAngle) {\n if (this._coneOuterAngle < value) {\n Logger.Error(\"directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneInnerAngle = value;\n for (const sound of this._sounds) {\n sound.directionalConeInnerAngle = value;\n }\n }\n }\n /**\n * Size of cone in degrees for a directional sound outside of which there will be no sound.\n * Listener angles between innerAngle and outerAngle will falloff linearly.\n */\n get directionalConeOuterAngle() {\n return this._coneOuterAngle;\n }\n /**\n * Size of cone in degrees for a directional sound outside of which there will be no sound.\n * Listener angles between innerAngle and outerAngle will falloff linearly.\n */\n set directionalConeOuterAngle(value) {\n if (value !== this._coneOuterAngle) {\n if (value < this._coneInnerAngle) {\n Logger.Error(\"directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.\");\n return;\n }\n this._coneOuterAngle = value;\n for (const sound of this._sounds) {\n sound.directionalConeOuterAngle = value;\n }\n }\n }\n /**\n * Playback volume.\n */\n get volume() {\n return this._volume;\n }\n /**\n * Playback volume.\n */\n set volume(value) {\n if (value !== this._volume) {\n for (const sound of this._sounds) {\n sound.setVolume(value);\n }\n }\n }\n _onended() {\n if (this._currentIndex !== undefined) {\n this._sounds[this._currentIndex].autoplay = false;\n }\n if (this.loop && this.isPlaying) {\n this.play();\n }\n else {\n this.isPlaying = false;\n }\n }\n /**\n * Suspend playback\n */\n pause() {\n this.isPaused = true;\n if (this._currentIndex !== undefined) {\n this._sounds[this._currentIndex].pause();\n }\n }\n /**\n * Stop playback\n */\n stop() {\n this.isPlaying = false;\n if (this._currentIndex !== undefined) {\n this._sounds[this._currentIndex].stop();\n }\n }\n /**\n * Start playback.\n * @param startOffset Position the clip head at a specific time in seconds.\n */\n play(startOffset) {\n if (!this.isPaused) {\n this.stop();\n const randomValue = Math.random();\n let total = 0;\n for (let i = 0; i < this._weights.length; i++) {\n total += this._weights[i];\n if (randomValue <= total) {\n this._currentIndex = i;\n break;\n }\n }\n }\n const sound = this._sounds[this._currentIndex];\n if (sound.isReady()) {\n sound.play(0, this.isPaused ? undefined : startOffset);\n }\n else {\n sound.autoplay = true;\n }\n this.isPlaying = true;\n this.isPaused = false;\n }\n}\n//# sourceMappingURL=weightedsound.js.map","import { Vector3 } from \"core/Maths/math.vector\";\nimport { Tools } from \"core/Misc/tools\";\nimport { AnimationEvent } from \"core/Animations/animationEvent\";\nimport { Sound } from \"core/Audio/sound\";\nimport { WeightedSound } from \"core/Audio/weightedsound\";\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"MSFT_audio_emitter\";\n/**\n * [Specification](https://github.com/najadojo/glTF/blob/MSFT_audio_emitter/extensions/2.0/Vendor/MSFT_audio_emitter/README.md)\n * !!! Experimental Extension Subject to Changes !!!\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class MSFT_audio_emitter {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n this._clips = null;\n this._emitters = null;\n }\n /** @internal */\n onLoading() {\n const extensions = this._loader.gltf.extensions;\n if (extensions && extensions[this.name]) {\n const extension = extensions[this.name];\n this._clips = extension.clips;\n this._emitters = extension.emitters;\n ArrayItem.Assign(this._clips);\n ArrayItem.Assign(this._emitters);\n }\n }\n /**\n * @internal\n */\n loadSceneAsync(context, scene) {\n return GLTFLoader.LoadExtensionAsync(context, scene, this.name, (extensionContext, extension) => {\n const promises = new Array();\n promises.push(this._loader.loadSceneAsync(context, scene));\n for (const emitterIndex of extension.emitters) {\n const emitter = ArrayItem.Get(`${extensionContext}/emitters`, this._emitters, emitterIndex);\n if (emitter.refDistance != undefined ||\n emitter.maxDistance != undefined ||\n emitter.rolloffFactor != undefined ||\n emitter.distanceModel != undefined ||\n emitter.innerAngle != undefined ||\n emitter.outerAngle != undefined) {\n throw new Error(`${extensionContext}: Direction or Distance properties are not allowed on emitters attached to a scene`);\n }\n promises.push(this._loadEmitterAsync(`${extensionContext}/emitters/${emitter.index}`, emitter));\n }\n return Promise.all(promises).then(() => { });\n });\n }\n /**\n * @internal\n */\n loadNodeAsync(context, node, assign) {\n return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {\n const promises = new Array();\n return this._loader\n .loadNodeAsync(extensionContext, node, (babylonMesh) => {\n for (const emitterIndex of extension.emitters) {\n const emitter = ArrayItem.Get(`${extensionContext}/emitters`, this._emitters, emitterIndex);\n promises.push(this._loadEmitterAsync(`${extensionContext}/emitters/${emitter.index}`, emitter).then(() => {\n for (const sound of emitter._babylonSounds) {\n sound.attachToMesh(babylonMesh);\n if (emitter.innerAngle != undefined || emitter.outerAngle != undefined) {\n sound.setLocalDirectionToMesh(Vector3.Forward());\n sound.setDirectionalCone(2 * Tools.ToDegrees(emitter.innerAngle == undefined ? Math.PI : emitter.innerAngle), 2 * Tools.ToDegrees(emitter.outerAngle == undefined ? Math.PI : emitter.outerAngle), 0);\n }\n }\n }));\n }\n assign(babylonMesh);\n })\n .then((babylonMesh) => {\n return Promise.all(promises).then(() => {\n return babylonMesh;\n });\n });\n });\n }\n /**\n * @internal\n */\n loadAnimationAsync(context, animation) {\n return GLTFLoader.LoadExtensionAsync(context, animation, this.name, (extensionContext, extension) => {\n return this._loader.loadAnimationAsync(context, animation).then((babylonAnimationGroup) => {\n const promises = new Array();\n ArrayItem.Assign(extension.events);\n for (const event of extension.events) {\n promises.push(this._loadAnimationEventAsync(`${extensionContext}/events/${event.index}`, context, animation, event, babylonAnimationGroup));\n }\n return Promise.all(promises).then(() => {\n return babylonAnimationGroup;\n });\n });\n });\n }\n _loadClipAsync(context, clip) {\n if (clip._objectURL) {\n return clip._objectURL;\n }\n let promise;\n if (clip.uri) {\n promise = this._loader.loadUriAsync(context, clip, clip.uri);\n }\n else {\n const bufferView = ArrayItem.Get(`${context}/bufferView`, this._loader.gltf.bufferViews, clip.bufferView);\n promise = this._loader.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView);\n }\n clip._objectURL = promise.then((data) => {\n return URL.createObjectURL(new Blob([data], { type: clip.mimeType }));\n });\n return clip._objectURL;\n }\n _loadEmitterAsync(context, emitter) {\n emitter._babylonSounds = emitter._babylonSounds || [];\n if (!emitter._babylonData) {\n const clipPromises = new Array();\n const name = emitter.name || `emitter${emitter.index}`;\n const options = {\n loop: false,\n autoplay: false,\n volume: emitter.volume == undefined ? 1 : emitter.volume,\n };\n for (let i = 0; i < emitter.clips.length; i++) {\n const clipContext = `/extensions/${this.name}/clips`;\n const clip = ArrayItem.Get(clipContext, this._clips, emitter.clips[i].clip);\n clipPromises.push(this._loadClipAsync(`${clipContext}/${emitter.clips[i].clip}`, clip).then((objectURL) => {\n const sound = (emitter._babylonSounds[i] = new Sound(name, objectURL, this._loader.babylonScene, null, options));\n sound.refDistance = emitter.refDistance || 1;\n sound.maxDistance = emitter.maxDistance || 256;\n sound.rolloffFactor = emitter.rolloffFactor || 1;\n sound.distanceModel = emitter.distanceModel || \"exponential\";\n }));\n }\n const promise = Promise.all(clipPromises).then(() => {\n const weights = emitter.clips.map((clip) => {\n return clip.weight || 1;\n });\n const weightedSound = new WeightedSound(emitter.loop || false, emitter._babylonSounds, weights);\n if (emitter.innerAngle) {\n weightedSound.directionalConeInnerAngle = 2 * Tools.ToDegrees(emitter.innerAngle);\n }\n if (emitter.outerAngle) {\n weightedSound.directionalConeOuterAngle = 2 * Tools.ToDegrees(emitter.outerAngle);\n }\n if (emitter.volume) {\n weightedSound.volume = emitter.volume;\n }\n emitter._babylonData.sound = weightedSound;\n });\n emitter._babylonData = {\n loaded: promise,\n };\n }\n return emitter._babylonData.loaded;\n }\n _getEventAction(context, sound, action, time, startOffset) {\n switch (action) {\n case \"play\" /* IMSFTAudioEmitter_AnimationEventAction.play */: {\n return (currentFrame) => {\n const frameOffset = (startOffset || 0) + (currentFrame - time);\n sound.play(frameOffset);\n };\n }\n case \"stop\" /* IMSFTAudioEmitter_AnimationEventAction.stop */: {\n return () => {\n sound.stop();\n };\n }\n case \"pause\" /* IMSFTAudioEmitter_AnimationEventAction.pause */: {\n return () => {\n sound.pause();\n };\n }\n default: {\n throw new Error(`${context}: Unsupported action ${action}`);\n }\n }\n }\n _loadAnimationEventAsync(context, animationContext, animation, event, babylonAnimationGroup) {\n if (babylonAnimationGroup.targetedAnimations.length == 0) {\n return Promise.resolve();\n }\n const babylonAnimation = babylonAnimationGroup.targetedAnimations[0];\n const emitterIndex = event.emitter;\n const emitter = ArrayItem.Get(`/extensions/${this.name}/emitters`, this._emitters, emitterIndex);\n return this._loadEmitterAsync(context, emitter).then(() => {\n const sound = emitter._babylonData.sound;\n if (sound) {\n const babylonAnimationEvent = new AnimationEvent(event.time, this._getEventAction(context, sound, event.action, event.time, event.startOffset));\n babylonAnimation.animation.addEvent(babylonAnimationEvent);\n // Make sure all started audio stops when this animation is terminated.\n babylonAnimationGroup.onAnimationGroupEndObservable.add(() => {\n sound.stop();\n });\n babylonAnimationGroup.onAnimationGroupPauseObservable.add(() => {\n sound.pause();\n });\n }\n });\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new MSFT_audio_emitter(loader));\n//# sourceMappingURL=MSFT_audio_emitter.js.map"],"names":[],"mappings":"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"}
@@ -1,337 +0,0 @@
1
- import { aq as Observable, aS as Deferred, ak as unregisterGLTFExtension, al as registerGLTFExtension } from './index-CTNAO7X0.esm.js';
2
- import { GLTFLoader, ArrayItem } from './glTFLoader-DB7AOurF.esm.js';
3
- import './rawTexture-DzCCPFKA.esm.js';
4
- import './assetContainer-DVOdWL9b.esm.js';
5
- import './glTFLoaderAnimation-DK5fvCTY.esm.js';
6
-
7
- const NAME = "MSFT_lod";
8
- /**
9
- * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/MSFT_lod/README.md)
10
- */
11
- // eslint-disable-next-line @typescript-eslint/naming-convention
12
- class MSFT_lod {
13
- /**
14
- * @internal
15
- */
16
- constructor(loader) {
17
- /**
18
- * The name of this extension.
19
- */
20
- this.name = NAME;
21
- /**
22
- * Defines a number that determines the order the extensions are applied.
23
- */
24
- this.order = 100;
25
- /**
26
- * Maximum number of LODs to load, starting from the lowest LOD.
27
- */
28
- this.maxLODsToLoad = 10;
29
- /**
30
- * Observable raised when all node LODs of one level are loaded.
31
- * The event data is the index of the loaded LOD starting from zero.
32
- * Dispose the loader to cancel the loading of the next level of LODs.
33
- */
34
- this.onNodeLODsLoadedObservable = new Observable();
35
- /**
36
- * Observable raised when all material LODs of one level are loaded.
37
- * The event data is the index of the loaded LOD starting from zero.
38
- * Dispose the loader to cancel the loading of the next level of LODs.
39
- */
40
- this.onMaterialLODsLoadedObservable = new Observable();
41
- this._bufferLODs = new Array();
42
- this._nodeIndexLOD = null;
43
- this._nodeSignalLODs = new Array();
44
- this._nodePromiseLODs = new Array();
45
- this._nodeBufferLODs = new Array();
46
- this._materialIndexLOD = null;
47
- this._materialSignalLODs = new Array();
48
- this._materialPromiseLODs = new Array();
49
- this._materialBufferLODs = new Array();
50
- this._loader = loader;
51
- // Options takes precedence. The maxLODsToLoad extension property is retained for back compat.
52
- // For new extensions, they should only use options.
53
- this.maxLODsToLoad = this._loader.parent.extensionOptions[NAME]?.maxLODsToLoad ?? this.maxLODsToLoad;
54
- this.enabled = this._loader.isExtensionUsed(NAME);
55
- }
56
- /** @internal */
57
- dispose() {
58
- this._loader = null;
59
- this._nodeIndexLOD = null;
60
- this._nodeSignalLODs.length = 0;
61
- this._nodePromiseLODs.length = 0;
62
- this._nodeBufferLODs.length = 0;
63
- this._materialIndexLOD = null;
64
- this._materialSignalLODs.length = 0;
65
- this._materialPromiseLODs.length = 0;
66
- this._materialBufferLODs.length = 0;
67
- this.onMaterialLODsLoadedObservable.clear();
68
- this.onNodeLODsLoadedObservable.clear();
69
- }
70
- /** @internal */
71
- onReady() {
72
- for (let indexLOD = 0; indexLOD < this._nodePromiseLODs.length; indexLOD++) {
73
- const promise = Promise.all(this._nodePromiseLODs[indexLOD]).then(() => {
74
- if (indexLOD !== 0) {
75
- this._loader.endPerformanceCounter(`Node LOD ${indexLOD}`);
76
- this._loader.log(`Loaded node LOD ${indexLOD}`);
77
- }
78
- this.onNodeLODsLoadedObservable.notifyObservers(indexLOD);
79
- if (indexLOD !== this._nodePromiseLODs.length - 1) {
80
- this._loader.startPerformanceCounter(`Node LOD ${indexLOD + 1}`);
81
- this._loadBufferLOD(this._nodeBufferLODs, indexLOD + 1);
82
- if (this._nodeSignalLODs[indexLOD]) {
83
- this._nodeSignalLODs[indexLOD].resolve();
84
- }
85
- }
86
- });
87
- this._loader._completePromises.push(promise);
88
- }
89
- for (let indexLOD = 0; indexLOD < this._materialPromiseLODs.length; indexLOD++) {
90
- const promise = Promise.all(this._materialPromiseLODs[indexLOD]).then(() => {
91
- if (indexLOD !== 0) {
92
- this._loader.endPerformanceCounter(`Material LOD ${indexLOD}`);
93
- this._loader.log(`Loaded material LOD ${indexLOD}`);
94
- }
95
- this.onMaterialLODsLoadedObservable.notifyObservers(indexLOD);
96
- if (indexLOD !== this._materialPromiseLODs.length - 1) {
97
- this._loader.startPerformanceCounter(`Material LOD ${indexLOD + 1}`);
98
- this._loadBufferLOD(this._materialBufferLODs, indexLOD + 1);
99
- if (this._materialSignalLODs[indexLOD]) {
100
- this._materialSignalLODs[indexLOD].resolve();
101
- }
102
- }
103
- });
104
- this._loader._completePromises.push(promise);
105
- }
106
- }
107
- /**
108
- * @internal
109
- */
110
- loadSceneAsync(context, scene) {
111
- const promise = this._loader.loadSceneAsync(context, scene);
112
- this._loadBufferLOD(this._bufferLODs, 0);
113
- return promise;
114
- }
115
- /**
116
- * @internal
117
- */
118
- loadNodeAsync(context, node, assign) {
119
- return GLTFLoader.LoadExtensionAsync(context, node, this.name, (extensionContext, extension) => {
120
- let firstPromise;
121
- const nodeLODs = this._getLODs(extensionContext, node, this._loader.gltf.nodes, extension.ids);
122
- this._loader.logOpen(`${extensionContext}`);
123
- for (let indexLOD = 0; indexLOD < nodeLODs.length; indexLOD++) {
124
- const nodeLOD = nodeLODs[indexLOD];
125
- if (indexLOD !== 0) {
126
- this._nodeIndexLOD = indexLOD;
127
- this._nodeSignalLODs[indexLOD] = this._nodeSignalLODs[indexLOD] || new Deferred();
128
- }
129
- const assignWrap = (babylonTransformNode) => {
130
- assign(babylonTransformNode);
131
- babylonTransformNode.setEnabled(false);
132
- };
133
- const promise = this._loader.loadNodeAsync(`/nodes/${nodeLOD.index}`, nodeLOD, assignWrap).then((babylonMesh) => {
134
- if (indexLOD !== 0) {
135
- // TODO: should not rely on _babylonTransformNode
136
- const previousNodeLOD = nodeLODs[indexLOD - 1];
137
- if (previousNodeLOD._babylonTransformNode) {
138
- this._disposeTransformNode(previousNodeLOD._babylonTransformNode);
139
- delete previousNodeLOD._babylonTransformNode;
140
- }
141
- }
142
- babylonMesh.setEnabled(true);
143
- return babylonMesh;
144
- });
145
- this._nodePromiseLODs[indexLOD] = this._nodePromiseLODs[indexLOD] || [];
146
- if (indexLOD === 0) {
147
- firstPromise = promise;
148
- }
149
- else {
150
- this._nodeIndexLOD = null;
151
- this._nodePromiseLODs[indexLOD].push(promise);
152
- }
153
- }
154
- this._loader.logClose();
155
- return firstPromise;
156
- });
157
- }
158
- /**
159
- * @internal
160
- */
161
- _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign) {
162
- // Don't load material LODs if already loading a node LOD.
163
- if (this._nodeIndexLOD) {
164
- return null;
165
- }
166
- return GLTFLoader.LoadExtensionAsync(context, material, this.name, (extensionContext, extension) => {
167
- let firstPromise;
168
- const materialLODs = this._getLODs(extensionContext, material, this._loader.gltf.materials, extension.ids);
169
- this._loader.logOpen(`${extensionContext}`);
170
- for (let indexLOD = 0; indexLOD < materialLODs.length; indexLOD++) {
171
- const materialLOD = materialLODs[indexLOD];
172
- if (indexLOD !== 0) {
173
- this._materialIndexLOD = indexLOD;
174
- }
175
- const promise = this._loader
176
- ._loadMaterialAsync(`/materials/${materialLOD.index}`, materialLOD, babylonMesh, babylonDrawMode, (babylonMaterial) => {
177
- if (indexLOD === 0) {
178
- assign(babylonMaterial);
179
- }
180
- })
181
- .then((babylonMaterial) => {
182
- if (indexLOD !== 0) {
183
- assign(babylonMaterial);
184
- // TODO: should not rely on _data
185
- const previousDataLOD = materialLODs[indexLOD - 1]._data;
186
- if (previousDataLOD[babylonDrawMode]) {
187
- this._disposeMaterials([previousDataLOD[babylonDrawMode].babylonMaterial]);
188
- delete previousDataLOD[babylonDrawMode];
189
- }
190
- }
191
- return babylonMaterial;
192
- });
193
- this._materialPromiseLODs[indexLOD] = this._materialPromiseLODs[indexLOD] || [];
194
- if (indexLOD === 0) {
195
- firstPromise = promise;
196
- }
197
- else {
198
- this._materialIndexLOD = null;
199
- this._materialPromiseLODs[indexLOD].push(promise);
200
- }
201
- }
202
- this._loader.logClose();
203
- return firstPromise;
204
- });
205
- }
206
- /**
207
- * @internal
208
- */
209
- _loadUriAsync(context, property, uri) {
210
- // Defer the loading of uris if loading a node or material LOD.
211
- if (this._nodeIndexLOD !== null) {
212
- this._loader.log(`deferred`);
213
- const previousIndexLOD = this._nodeIndexLOD - 1;
214
- this._nodeSignalLODs[previousIndexLOD] = this._nodeSignalLODs[previousIndexLOD] || new Deferred();
215
- return this._nodeSignalLODs[this._nodeIndexLOD - 1].promise.then(() => {
216
- return this._loader.loadUriAsync(context, property, uri);
217
- });
218
- }
219
- else if (this._materialIndexLOD !== null) {
220
- this._loader.log(`deferred`);
221
- const previousIndexLOD = this._materialIndexLOD - 1;
222
- this._materialSignalLODs[previousIndexLOD] = this._materialSignalLODs[previousIndexLOD] || new Deferred();
223
- return this._materialSignalLODs[previousIndexLOD].promise.then(() => {
224
- return this._loader.loadUriAsync(context, property, uri);
225
- });
226
- }
227
- return null;
228
- }
229
- /**
230
- * @internal
231
- */
232
- loadBufferAsync(context, buffer, byteOffset, byteLength) {
233
- if (this._loader.parent.useRangeRequests && !buffer.uri) {
234
- if (!this._loader.bin) {
235
- throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);
236
- }
237
- const loadAsync = (bufferLODs, indexLOD) => {
238
- const start = byteOffset;
239
- const end = start + byteLength - 1;
240
- let bufferLOD = bufferLODs[indexLOD];
241
- if (bufferLOD) {
242
- bufferLOD.start = Math.min(bufferLOD.start, start);
243
- bufferLOD.end = Math.max(bufferLOD.end, end);
244
- }
245
- else {
246
- bufferLOD = { start: start, end: end, loaded: new Deferred() };
247
- bufferLODs[indexLOD] = bufferLOD;
248
- }
249
- return bufferLOD.loaded.promise.then((data) => {
250
- return new Uint8Array(data.buffer, data.byteOffset + byteOffset - bufferLOD.start, byteLength);
251
- });
252
- };
253
- this._loader.log(`deferred`);
254
- if (this._nodeIndexLOD !== null) {
255
- return loadAsync(this._nodeBufferLODs, this._nodeIndexLOD);
256
- }
257
- else if (this._materialIndexLOD !== null) {
258
- return loadAsync(this._materialBufferLODs, this._materialIndexLOD);
259
- }
260
- else {
261
- return loadAsync(this._bufferLODs, 0);
262
- }
263
- }
264
- return null;
265
- }
266
- _loadBufferLOD(bufferLODs, indexLOD) {
267
- const bufferLOD = bufferLODs[indexLOD];
268
- if (bufferLOD) {
269
- this._loader.log(`Loading buffer range [${bufferLOD.start}-${bufferLOD.end}]`);
270
- this._loader.bin.readAsync(bufferLOD.start, bufferLOD.end - bufferLOD.start + 1).then((data) => {
271
- bufferLOD.loaded.resolve(data);
272
- }, (error) => {
273
- bufferLOD.loaded.reject(error);
274
- });
275
- }
276
- }
277
- /**
278
- * @returns an array of LOD properties from lowest to highest.
279
- * @param context
280
- * @param property
281
- * @param array
282
- * @param ids
283
- */
284
- _getLODs(context, property, array, ids) {
285
- if (this.maxLODsToLoad <= 0) {
286
- throw new Error("maxLODsToLoad must be greater than zero");
287
- }
288
- const properties = [];
289
- for (let i = ids.length - 1; i >= 0; i--) {
290
- properties.push(ArrayItem.Get(`${context}/ids/${ids[i]}`, array, ids[i]));
291
- if (properties.length === this.maxLODsToLoad) {
292
- return properties;
293
- }
294
- }
295
- properties.push(property);
296
- return properties;
297
- }
298
- _disposeTransformNode(babylonTransformNode) {
299
- const babylonMaterials = [];
300
- const babylonMaterial = babylonTransformNode.material;
301
- if (babylonMaterial) {
302
- babylonMaterials.push(babylonMaterial);
303
- }
304
- for (const babylonMesh of babylonTransformNode.getChildMeshes()) {
305
- if (babylonMesh.material) {
306
- babylonMaterials.push(babylonMesh.material);
307
- }
308
- }
309
- babylonTransformNode.dispose();
310
- const babylonMaterialsToDispose = babylonMaterials.filter((babylonMaterial) => this._loader.babylonScene.meshes.every((mesh) => mesh.material != babylonMaterial));
311
- this._disposeMaterials(babylonMaterialsToDispose);
312
- }
313
- _disposeMaterials(babylonMaterials) {
314
- const babylonTextures = {};
315
- for (const babylonMaterial of babylonMaterials) {
316
- for (const babylonTexture of babylonMaterial.getActiveTextures()) {
317
- babylonTextures[babylonTexture.uniqueId] = babylonTexture;
318
- }
319
- babylonMaterial.dispose();
320
- }
321
- for (const uniqueId in babylonTextures) {
322
- for (const babylonMaterial of this._loader.babylonScene.materials) {
323
- if (babylonMaterial.hasTexture(babylonTextures[uniqueId])) {
324
- delete babylonTextures[uniqueId];
325
- }
326
- }
327
- }
328
- for (const uniqueId in babylonTextures) {
329
- babylonTextures[uniqueId].dispose();
330
- }
331
- }
332
- }
333
- unregisterGLTFExtension(NAME);
334
- registerGLTFExtension(NAME, true, (loader) => new MSFT_lod(loader));
335
-
336
- export { MSFT_lod };
337
- //# sourceMappingURL=MSFT_lod-Bql1icOF.esm.js.map