@babylonjs/viewer 7.23.0 → 7.23.1-alpha
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.
- package/dist/babylon-viewer.esm.js +2 -0
- package/dist/babylon-viewer.esm.js.map +1 -0
- package/dist/babylon-viewer.esm.min.js +2 -0
- package/dist/babylon-viewer.esm.min.js.map +1 -0
- package/dist/chunks/EXT_lights_image_based-D3ZBYLgC.esm.js +170 -0
- package/dist/chunks/EXT_lights_image_based-D3ZBYLgC.esm.js.map +1 -0
- package/dist/chunks/EXT_lights_image_based-DyWZGFdC.esm.min.js +2 -0
- package/dist/chunks/EXT_lights_image_based-DyWZGFdC.esm.min.js.map +1 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-BsSuxC3A.esm.js +86 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-BsSuxC3A.esm.js.map +1 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-DtTWXKzv.esm.min.js +2 -0
- package/dist/chunks/EXT_mesh_gpu_instancing-DtTWXKzv.esm.min.js.map +1 -0
- package/dist/chunks/EXT_meshopt_compression-BncKn2rD.esm.js +134 -0
- package/dist/chunks/EXT_meshopt_compression-BncKn2rD.esm.js.map +1 -0
- package/dist/chunks/EXT_meshopt_compression-CjW8GcrA.esm.min.js +2 -0
- package/dist/chunks/EXT_meshopt_compression-CjW8GcrA.esm.min.js.map +1 -0
- package/dist/chunks/EXT_texture_avif-DLrVqqUz.esm.min.js +2 -0
- package/dist/chunks/EXT_texture_avif-DLrVqqUz.esm.min.js.map +1 -0
- package/dist/chunks/EXT_texture_avif-wG4GNQfZ.esm.js +44 -0
- package/dist/chunks/EXT_texture_avif-wG4GNQfZ.esm.js.map +1 -0
- package/dist/chunks/EXT_texture_webp-BccV6Svg.esm.js +43 -0
- package/dist/chunks/EXT_texture_webp-BccV6Svg.esm.js.map +1 -0
- package/dist/chunks/EXT_texture_webp-DNAe2ii8.esm.min.js +2 -0
- package/dist/chunks/EXT_texture_webp-DNAe2ii8.esm.min.js.map +1 -0
- package/dist/chunks/ExtrasAsMetadata-BA0NyQBn.esm.js +64 -0
- package/dist/chunks/ExtrasAsMetadata-BA0NyQBn.esm.js.map +1 -0
- package/dist/chunks/ExtrasAsMetadata-BN02lRw7.esm.min.js +2 -0
- package/dist/chunks/ExtrasAsMetadata-BN02lRw7.esm.min.js.map +1 -0
- package/dist/chunks/KHR_animation_pointer-B7mk-XJN.esm.min.js +2 -0
- package/dist/chunks/KHR_animation_pointer-B7mk-XJN.esm.min.js.map +1 -0
- package/dist/chunks/KHR_animation_pointer-BFFpQV4X.esm.js +343 -0
- package/dist/chunks/KHR_animation_pointer-BFFpQV4X.esm.js.map +1 -0
- package/dist/chunks/KHR_draco_mesh_compression-7zqRIpZt.esm.js +610 -0
- package/dist/chunks/KHR_draco_mesh_compression-7zqRIpZt.esm.js.map +1 -0
- package/dist/chunks/KHR_draco_mesh_compression-Bw4rV4ln.esm.min.js +2 -0
- package/dist/chunks/KHR_draco_mesh_compression-Bw4rV4ln.esm.min.js.map +1 -0
- package/dist/chunks/KHR_interactivity-Bd_6hpGb.esm.js +4033 -0
- package/dist/chunks/KHR_interactivity-Bd_6hpGb.esm.js.map +1 -0
- package/dist/chunks/KHR_interactivity-DIJyLERv.esm.min.js +2 -0
- package/dist/chunks/KHR_interactivity-DIJyLERv.esm.min.js.map +1 -0
- package/dist/chunks/KHR_lights_punctual-CFUUYlNK.esm.min.js +2 -0
- package/dist/chunks/KHR_lights_punctual-CFUUYlNK.esm.min.js.map +1 -0
- package/dist/chunks/KHR_lights_punctual-XL2dnY2h.esm.js +1253 -0
- package/dist/chunks/KHR_lights_punctual-XL2dnY2h.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_anisotropy-04SftzV0.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_anisotropy-04SftzV0.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_anisotropy-gAd08wDG.esm.js +64 -0
- package/dist/chunks/KHR_materials_anisotropy-gAd08wDG.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_clearcoat-9GQaVx6k.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_clearcoat-9GQaVx6k.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_clearcoat-Cv_yIIaW.esm.js +96 -0
- package/dist/chunks/KHR_materials_clearcoat-Cv_yIIaW.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-Dj9EU7q2.esm.js +96 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-Dj9EU7q2.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-fmv70uuH.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_diffuse_transmission-fmv70uuH.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_dispersion-CCzM2Avp.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_dispersion-CCzM2Avp.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_dispersion-JNxGdAqc.esm.js +63 -0
- package/dist/chunks/KHR_materials_dispersion-JNxGdAqc.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_emissive_strength-D25-ItKl.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_emissive_strength-D25-ItKl.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_emissive_strength-DlkptyaM.esm.js +55 -0
- package/dist/chunks/KHR_materials_emissive_strength-DlkptyaM.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_ior-Jqj5Ph_V.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_ior-Jqj5Ph_V.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_ior-KGZBae4Y.esm.js +64 -0
- package/dist/chunks/KHR_materials_ior-KGZBae4Y.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_iridescence-ByOHUtdO.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_iridescence-ByOHUtdO.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_iridescence-FmAV1QDy.esm.js +72 -0
- package/dist/chunks/KHR_materials_iridescence-FmAV1QDy.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-BiqCrcmj.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-BiqCrcmj.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-CRnlTYx-.esm.js +81 -0
- package/dist/chunks/KHR_materials_pbrSpecularGlossiness-CRnlTYx-.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_sheen-7li6Dlkh.esm.js +85 -0
- package/dist/chunks/KHR_materials_sheen-7li6Dlkh.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_sheen-BL2qM8Rp.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_sheen-BL2qM8Rp.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_specular-C2ks7gPC.esm.js +75 -0
- package/dist/chunks/KHR_materials_specular-C2ks7gPC.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_specular-DCAt3T_l.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_specular-DCAt3T_l.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_transmission-B8w41MT6.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_transmission-B8w41MT6.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_transmission-DRL9BE9q.esm.js +307 -0
- package/dist/chunks/KHR_materials_transmission-DRL9BE9q.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_unlit-B-il-TRX.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_unlit-B-il-TRX.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_unlit-B44Oqon6.esm.js +74 -0
- package/dist/chunks/KHR_materials_unlit-B44Oqon6.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_variants-BCdEgpch.esm.js +238 -0
- package/dist/chunks/KHR_materials_variants-BCdEgpch.esm.js.map +1 -0
- package/dist/chunks/KHR_materials_variants-ClQElTeo.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_variants-ClQElTeo.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_volume-BXv3M95S.esm.min.js +2 -0
- package/dist/chunks/KHR_materials_volume-BXv3M95S.esm.min.js.map +1 -0
- package/dist/chunks/KHR_materials_volume-BuUrRniE.esm.js +88 -0
- package/dist/chunks/KHR_materials_volume-BuUrRniE.esm.js.map +1 -0
- package/dist/chunks/KHR_mesh_quantization-WPngIGGs.esm.min.js +2 -0
- package/dist/chunks/KHR_mesh_quantization-WPngIGGs.esm.min.js.map +1 -0
- package/dist/chunks/KHR_mesh_quantization-p2nyy6Ym.esm.js +26 -0
- package/dist/chunks/KHR_mesh_quantization-p2nyy6Ym.esm.js.map +1 -0
- package/dist/chunks/KHR_texture_basisu-BHsmOUDV.esm.js +43 -0
- package/dist/chunks/KHR_texture_basisu-BHsmOUDV.esm.js.map +1 -0
- package/dist/chunks/KHR_texture_basisu-DObdWvzE.esm.min.js +2 -0
- package/dist/chunks/KHR_texture_basisu-DObdWvzE.esm.min.js.map +1 -0
- package/dist/chunks/KHR_texture_transform-B7NCdTO_.esm.js +63 -0
- package/dist/chunks/KHR_texture_transform-B7NCdTO_.esm.js.map +1 -0
- package/dist/chunks/KHR_texture_transform-D6Ee6UiP.esm.min.js +2 -0
- package/dist/chunks/KHR_texture_transform-D6Ee6UiP.esm.min.js.map +1 -0
- package/dist/chunks/KHR_xmp_json_ld-Coh_hfCi.esm.js +51 -0
- package/dist/chunks/KHR_xmp_json_ld-Coh_hfCi.esm.js.map +1 -0
- package/dist/chunks/KHR_xmp_json_ld-ijOY8DMb.esm.min.js +2 -0
- package/dist/chunks/KHR_xmp_json_ld-ijOY8DMb.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_audio_emitter-CGjUSgI2.esm.min.js +2 -0
- package/dist/chunks/MSFT_audio_emitter-CGjUSgI2.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_audio_emitter-fFvTv2YK.esm.js +1600 -0
- package/dist/chunks/MSFT_audio_emitter-fFvTv2YK.esm.js.map +1 -0
- package/dist/chunks/MSFT_lod-Bql1icOF.esm.js +337 -0
- package/dist/chunks/MSFT_lod-Bql1icOF.esm.js.map +1 -0
- package/dist/chunks/MSFT_lod-Du_akN0I.esm.min.js +2 -0
- package/dist/chunks/MSFT_lod-Du_akN0I.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_minecraftMesh-Brch3HUo.esm.min.js +2 -0
- package/dist/chunks/MSFT_minecraftMesh-Brch3HUo.esm.min.js.map +1 -0
- package/dist/chunks/MSFT_minecraftMesh-jrYC8YE9.esm.js +46 -0
- package/dist/chunks/MSFT_minecraftMesh-jrYC8YE9.esm.js.map +1 -0
- package/dist/chunks/MSFT_sRGBFactors-Dp3CtJ9B.esm.js +47 -0
- package/dist/chunks/MSFT_sRGBFactors-Dp3CtJ9B.esm.js.map +1 -0
- package/dist/chunks/MSFT_sRGBFactors-LZM-HF4P.esm.min.js +2 -0
- package/dist/chunks/MSFT_sRGBFactors-LZM-HF4P.esm.min.js.map +1 -0
- package/dist/chunks/assetContainer-Bo08Fxv3.esm.min.js +2 -0
- package/dist/chunks/assetContainer-Bo08Fxv3.esm.min.js.map +1 -0
- package/dist/chunks/assetContainer-DVOdWL9b.esm.js +1598 -0
- package/dist/chunks/assetContainer-DVOdWL9b.esm.js.map +1 -0
- package/dist/chunks/basisTextureLoader-C2Or-Jx_.esm.min.js +2 -0
- package/dist/chunks/basisTextureLoader-C2Or-Jx_.esm.min.js.map +1 -0
- package/dist/chunks/basisTextureLoader-DiYg6uNN.esm.js +600 -0
- package/dist/chunks/basisTextureLoader-DiYg6uNN.esm.js.map +1 -0
- package/dist/chunks/ddsTextureLoader-CDlttCBi.esm.js +87 -0
- package/dist/chunks/ddsTextureLoader-CDlttCBi.esm.js.map +1 -0
- package/dist/chunks/ddsTextureLoader-T_I1TPiz.esm.min.js +2 -0
- package/dist/chunks/ddsTextureLoader-T_I1TPiz.esm.min.js.map +1 -0
- package/dist/chunks/default.fragment-C8ZCxgTK.esm.js +515 -0
- package/dist/chunks/default.fragment-C8ZCxgTK.esm.js.map +1 -0
- package/dist/chunks/default.fragment-Conpp30r.esm.js +452 -0
- package/dist/chunks/default.fragment-Conpp30r.esm.js.map +1 -0
- package/dist/chunks/default.fragment-DTP98j1l.esm.min.js +2 -0
- package/dist/chunks/default.fragment-DTP98j1l.esm.min.js.map +1 -0
- package/dist/chunks/default.fragment-DjistPBR.esm.min.js +2 -0
- package/dist/chunks/default.fragment-DjistPBR.esm.min.js.map +1 -0
- package/dist/chunks/default.vertex-BSCjzhXG.esm.js +178 -0
- package/dist/chunks/default.vertex-BSCjzhXG.esm.js.map +1 -0
- package/dist/chunks/default.vertex-Ba7zxY0T.esm.min.js +2 -0
- package/dist/chunks/default.vertex-Ba7zxY0T.esm.min.js.map +1 -0
- package/dist/chunks/default.vertex-CPurFhOJ.esm.js +199 -0
- package/dist/chunks/default.vertex-CPurFhOJ.esm.js.map +1 -0
- package/dist/chunks/default.vertex-D_4jDtBx.esm.min.js +2 -0
- package/dist/chunks/default.vertex-D_4jDtBx.esm.min.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-BjT2yBnm.esm.js +15 -0
- package/dist/chunks/defaultUboDeclaration-BjT2yBnm.esm.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-BuAk9gJA.esm.min.js +2 -0
- package/dist/chunks/defaultUboDeclaration-BuAk9gJA.esm.min.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-CC8YfLoS.esm.min.js +2 -0
- package/dist/chunks/defaultUboDeclaration-CC8YfLoS.esm.min.js.map +1 -0
- package/dist/chunks/defaultUboDeclaration-ClvuiT6M.esm.js +13 -0
- package/dist/chunks/defaultUboDeclaration-ClvuiT6M.esm.js.map +1 -0
- package/dist/chunks/envTextureLoader-DuE-52NK.esm.min.js +2 -0
- package/dist/chunks/envTextureLoader-DuE-52NK.esm.min.js.map +1 -0
- package/dist/chunks/envTextureLoader-ENMUumOz.esm.js +63 -0
- package/dist/chunks/envTextureLoader-ENMUumOz.esm.js.map +1 -0
- package/dist/chunks/environmentTextureTools-Cw-ZbYYv.esm.js +381 -0
- package/dist/chunks/environmentTextureTools-Cw-ZbYYv.esm.js.map +1 -0
- package/dist/chunks/environmentTextureTools-mWXMV1Cr.esm.min.js +2 -0
- package/dist/chunks/environmentTextureTools-mWXMV1Cr.esm.min.js.map +1 -0
- package/dist/chunks/exrTextureLoader-9ioAK1Ph.esm.js +1682 -0
- package/dist/chunks/exrTextureLoader-9ioAK1Ph.esm.js.map +1 -0
- package/dist/chunks/exrTextureLoader-zc2N62c3.esm.min.js +2 -0
- package/dist/chunks/exrTextureLoader-zc2N62c3.esm.min.js.map +1 -0
- package/dist/chunks/fogFragment-DLguActo.esm.min.js +2 -0
- package/dist/chunks/fogFragment-DLguActo.esm.min.js.map +1 -0
- package/dist/chunks/fogFragment-sACeXatv.esm.js +102 -0
- package/dist/chunks/fogFragment-sACeXatv.esm.js.map +1 -0
- package/dist/chunks/glTFLoader-BuxqXvJ-.esm.min.js +2 -0
- package/dist/chunks/glTFLoader-BuxqXvJ-.esm.min.js.map +1 -0
- package/dist/chunks/glTFLoader-DB7AOurF.esm.js +7552 -0
- package/dist/chunks/glTFLoader-DB7AOurF.esm.js.map +1 -0
- package/dist/chunks/glTFLoaderAnimation-BWhMcDgk.esm.min.js +2 -0
- package/dist/chunks/glTFLoaderAnimation-BWhMcDgk.esm.min.js.map +1 -0
- package/dist/chunks/glTFLoaderAnimation-DK5fvCTY.esm.js +77 -0
- package/dist/chunks/glTFLoaderAnimation-DK5fvCTY.esm.js.map +1 -0
- package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js +2 -0
- package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js.map +1 -0
- package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js +67 -0
- package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-BMUi3P6Y.esm.js +35 -0
- package/dist/chunks/harmonicsFunctions-BMUi3P6Y.esm.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-BWj3xZKa.esm.min.js +2 -0
- package/dist/chunks/harmonicsFunctions-BWj3xZKa.esm.min.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-D9GUclWs.esm.min.js +2 -0
- package/dist/chunks/harmonicsFunctions-D9GUclWs.esm.min.js.map +1 -0
- package/dist/chunks/harmonicsFunctions-DQngcILt.esm.js +34 -0
- package/dist/chunks/harmonicsFunctions-DQngcILt.esm.js.map +1 -0
- package/dist/chunks/hdrTextureLoader-3TOTpFyV.esm.min.js +2 -0
- package/dist/chunks/hdrTextureLoader-3TOTpFyV.esm.min.js.map +1 -0
- package/dist/chunks/hdrTextureLoader-zIHMNTOp.esm.js +252 -0
- package/dist/chunks/hdrTextureLoader-zIHMNTOp.esm.js.map +1 -0
- package/dist/chunks/helperFunctions-B_yzbgEv.esm.min.js +2 -0
- package/dist/chunks/helperFunctions-B_yzbgEv.esm.min.js.map +1 -0
- package/dist/chunks/helperFunctions-BjYz-6zr.esm.js +108 -0
- package/dist/chunks/helperFunctions-BjYz-6zr.esm.js.map +1 -0
- package/dist/chunks/helperFunctions-CXLST6hZ.esm.js +80 -0
- package/dist/chunks/helperFunctions-CXLST6hZ.esm.js.map +1 -0
- package/dist/chunks/helperFunctions-DTBzTIjJ.esm.min.js +2 -0
- package/dist/chunks/helperFunctions-DTBzTIjJ.esm.min.js.map +1 -0
- package/dist/chunks/index-CTNAO7X0.esm.js +81630 -0
- package/dist/chunks/index-CTNAO7X0.esm.js.map +1 -0
- package/dist/chunks/index-DYqHhEAk.esm.min.js +57 -0
- package/dist/chunks/index-DYqHhEAk.esm.min.js.map +1 -0
- package/dist/chunks/ktxTextureLoader-9AGBpjf1.esm.js +814 -0
- package/dist/chunks/ktxTextureLoader-9AGBpjf1.esm.js.map +1 -0
- package/dist/chunks/ktxTextureLoader-DbSU4wBV.esm.min.js +2 -0
- package/dist/chunks/ktxTextureLoader-DbSU4wBV.esm.min.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-BCN89cGc.esm.min.js +2 -0
- package/dist/chunks/logDepthDeclaration-BCN89cGc.esm.min.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-CZCatKgj.esm.js +42 -0
- package/dist/chunks/logDepthDeclaration-CZCatKgj.esm.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-_gJVcKC2.esm.js +35 -0
- package/dist/chunks/logDepthDeclaration-_gJVcKC2.esm.js.map +1 -0
- package/dist/chunks/logDepthDeclaration-cpc5vyCy.esm.min.js +2 -0
- package/dist/chunks/logDepthDeclaration-cpc5vyCy.esm.min.js.map +1 -0
- package/dist/chunks/logDepthVertex-7sCVTIjr.esm.min.js +2 -0
- package/dist/chunks/logDepthVertex-7sCVTIjr.esm.min.js.map +1 -0
- package/dist/chunks/logDepthVertex-B09oc-mi.esm.js +77 -0
- package/dist/chunks/logDepthVertex-B09oc-mi.esm.js.map +1 -0
- package/dist/chunks/logDepthVertex-Bq3-XtSp.esm.min.js +2 -0
- package/dist/chunks/logDepthVertex-Bq3-XtSp.esm.min.js.map +1 -0
- package/dist/chunks/logDepthVertex-DZoye-59.esm.js +605 -0
- package/dist/chunks/logDepthVertex-DZoye-59.esm.js.map +1 -0
- package/dist/chunks/mainUVVaryingDeclaration-LHNQQPPQ.esm.js +11 -0
- package/dist/chunks/mainUVVaryingDeclaration-LHNQQPPQ.esm.js.map +1 -0
- package/dist/chunks/mainUVVaryingDeclaration-wmRFnah8.esm.min.js +2 -0
- package/dist/chunks/mainUVVaryingDeclaration-wmRFnah8.esm.min.js.map +1 -0
- package/dist/chunks/objFileLoader-BvWwH6aj.esm.js +1280 -0
- package/dist/chunks/objFileLoader-BvWwH6aj.esm.js.map +1 -0
- package/dist/chunks/objFileLoader-LDP87u1T.esm.min.js +2 -0
- package/dist/chunks/objFileLoader-LDP87u1T.esm.min.js.map +1 -0
- package/dist/chunks/oitFragment-BAVtrG6V.esm.min.js +2 -0
- package/dist/chunks/oitFragment-BAVtrG6V.esm.min.js.map +1 -0
- package/dist/chunks/oitFragment-BqzVjWja.esm.js +1210 -0
- package/dist/chunks/oitFragment-BqzVjWja.esm.js.map +1 -0
- package/dist/chunks/oitFragment-CIelz994.esm.js +1166 -0
- package/dist/chunks/oitFragment-CIelz994.esm.js.map +1 -0
- package/dist/chunks/oitFragment-P20Uiy73.esm.min.js +2 -0
- package/dist/chunks/oitFragment-P20Uiy73.esm.min.js.map +1 -0
- package/dist/chunks/pass.fragment-D-67YTNJ.esm.min.js +2 -0
- package/dist/chunks/pass.fragment-D-67YTNJ.esm.min.js.map +1 -0
- package/dist/chunks/pass.fragment-ke3_LMQY.esm.js +15 -0
- package/dist/chunks/pass.fragment-ke3_LMQY.esm.js.map +1 -0
- package/dist/chunks/pbr.fragment-3QJykQmh.esm.js +3228 -0
- package/dist/chunks/pbr.fragment-3QJykQmh.esm.js.map +1 -0
- package/dist/chunks/pbr.fragment-BfhoPEE4.esm.js +3163 -0
- package/dist/chunks/pbr.fragment-BfhoPEE4.esm.js.map +1 -0
- package/dist/chunks/pbr.fragment-BpCKAJQO.esm.min.js +2 -0
- package/dist/chunks/pbr.fragment-BpCKAJQO.esm.min.js.map +1 -0
- package/dist/chunks/pbr.fragment-Buc8F3ii.esm.min.js +2 -0
- package/dist/chunks/pbr.fragment-Buc8F3ii.esm.min.js.map +1 -0
- package/dist/chunks/pbr.vertex-Bwl6238q.esm.min.js +2 -0
- package/dist/chunks/pbr.vertex-Bwl6238q.esm.min.js.map +1 -0
- package/dist/chunks/pbr.vertex-COtog_7X.esm.js +335 -0
- package/dist/chunks/pbr.vertex-COtog_7X.esm.js.map +1 -0
- package/dist/chunks/pbr.vertex-CX-ksiMG.esm.min.js +2 -0
- package/dist/chunks/pbr.vertex-CX-ksiMG.esm.min.js.map +1 -0
- package/dist/chunks/pbr.vertex-WxxbIMZL.esm.js +208 -0
- package/dist/chunks/pbr.vertex-WxxbIMZL.esm.js.map +1 -0
- package/dist/chunks/postprocess.vertex-6VuephE3.esm.min.js +2 -0
- package/dist/chunks/postprocess.vertex-6VuephE3.esm.min.js.map +1 -0
- package/dist/chunks/postprocess.vertex-y9rNSbFH.esm.js +20 -0
- package/dist/chunks/postprocess.vertex-y9rNSbFH.esm.js.map +1 -0
- package/dist/chunks/rawTexture-BjAjz6eU.esm.min.js +2 -0
- package/dist/chunks/rawTexture-BjAjz6eU.esm.min.js.map +1 -0
- package/dist/chunks/rawTexture-DzCCPFKA.esm.js +562 -0
- package/dist/chunks/rawTexture-DzCCPFKA.esm.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-B2z-Bt71.esm.js +17 -0
- package/dist/chunks/rgbdDecode.fragment-B2z-Bt71.esm.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-CdzoW-6f.esm.min.js +2 -0
- package/dist/chunks/rgbdDecode.fragment-CdzoW-6f.esm.min.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-DrLvcO8Q.esm.js +17 -0
- package/dist/chunks/rgbdDecode.fragment-DrLvcO8Q.esm.js.map +1 -0
- package/dist/chunks/rgbdDecode.fragment-DuXK_20s.esm.min.js +2 -0
- package/dist/chunks/rgbdDecode.fragment-DuXK_20s.esm.min.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-B8TjBZ9S.esm.js +17 -0
- package/dist/chunks/rgbdEncode.fragment-B8TjBZ9S.esm.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-CGQHcoVr.esm.min.js +2 -0
- package/dist/chunks/rgbdEncode.fragment-CGQHcoVr.esm.min.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-CHPMUGpL.esm.js +17 -0
- package/dist/chunks/rgbdEncode.fragment-CHPMUGpL.esm.js.map +1 -0
- package/dist/chunks/rgbdEncode.fragment-Ch8KaRMn.esm.min.js +2 -0
- package/dist/chunks/rgbdEncode.fragment-Ch8KaRMn.esm.min.js.map +1 -0
- package/dist/chunks/splatFileLoader-BOlEs8up.esm.min.js +2 -0
- package/dist/chunks/splatFileLoader-BOlEs8up.esm.min.js.map +1 -0
- package/dist/chunks/splatFileLoader-bjTdN6CH.esm.js +3137 -0
- package/dist/chunks/splatFileLoader-bjTdN6CH.esm.js.map +1 -0
- package/dist/chunks/standardMaterial-AtuI8LET.esm.min.js +2 -0
- package/dist/chunks/standardMaterial-AtuI8LET.esm.min.js.map +1 -0
- package/dist/chunks/standardMaterial-pkPTNFQZ.esm.js +1809 -0
- package/dist/chunks/standardMaterial-pkPTNFQZ.esm.js.map +1 -0
- package/dist/chunks/stlFileLoader-D_S8zIWi.esm.min.js +2 -0
- package/dist/chunks/stlFileLoader-D_S8zIWi.esm.min.js.map +1 -0
- package/dist/chunks/stlFileLoader-LAl8UbnA.esm.js +237 -0
- package/dist/chunks/stlFileLoader-LAl8UbnA.esm.js.map +1 -0
- package/dist/chunks/tgaTextureLoader-6J7hFLap.esm.min.js +2 -0
- package/dist/chunks/tgaTextureLoader-6J7hFLap.esm.min.js.map +1 -0
- package/dist/chunks/tgaTextureLoader-C9bFUsSu.esm.js +349 -0
- package/dist/chunks/tgaTextureLoader-C9bFUsSu.esm.js.map +1 -0
- package/dist/chunks/thinInstanceMesh-01jRjs2y.esm.js +314 -0
- package/dist/chunks/thinInstanceMesh-01jRjs2y.esm.js.map +1 -0
- package/dist/chunks/thinInstanceMesh-BkM6bBqz.esm.min.js +2 -0
- package/dist/chunks/thinInstanceMesh-BkM6bBqz.esm.min.js.map +1 -0
- package/dist/chunks/vertexColorMixing-BQURABk9.esm.js +528 -0
- package/dist/chunks/vertexColorMixing-BQURABk9.esm.js.map +1 -0
- package/dist/chunks/vertexColorMixing-DtyijcYJ.esm.min.js +2 -0
- package/dist/chunks/vertexColorMixing-DtyijcYJ.esm.min.js.map +1 -0
- package/dist/chunks/workerPool-BUOov2K1.esm.js +122 -0
- package/dist/chunks/workerPool-BUOov2K1.esm.js.map +1 -0
- package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js +2 -0
- package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js.map +1 -0
- package/lib/index.d.ts +237 -0
- package/lib/index.js +871 -0
- package/lib/index.js.map +1 -0
- package/package.json +17 -27
- package/readme.md +35 -21
- package/configuration/configuration.d.ts +0 -107
- package/configuration/configuration.js +0 -16
- package/configuration/configuration.js.map +0 -1
- package/configuration/configurationCompatibility.d.ts +0 -8
- package/configuration/configurationCompatibility.js +0 -66
- package/configuration/configurationCompatibility.js.map +0 -1
- package/configuration/configurationContainer.d.ts +0 -10
- package/configuration/configurationContainer.js +0 -10
- package/configuration/configurationContainer.js.map +0 -1
- package/configuration/globals.d.ts +0 -6
- package/configuration/globals.js +0 -18
- package/configuration/globals.js.map +0 -1
- package/configuration/index.d.ts +0 -2
- package/configuration/index.js +0 -4
- package/configuration/index.js.map +0 -1
- package/configuration/interfaces/cameraConfiguration.d.ts +0 -31
- package/configuration/interfaces/cameraConfiguration.js +0 -2
- package/configuration/interfaces/cameraConfiguration.js.map +0 -1
- package/configuration/interfaces/colorGradingConfiguration.d.ts +0 -81
- package/configuration/interfaces/colorGradingConfiguration.js +0 -2
- package/configuration/interfaces/colorGradingConfiguration.js.map +0 -1
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.d.ts +0 -20
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.js +0 -2
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.js.map +0 -1
- package/configuration/interfaces/environmentMapConfiguration.d.ts +0 -22
- package/configuration/interfaces/environmentMapConfiguration.js +0 -2
- package/configuration/interfaces/environmentMapConfiguration.js.map +0 -1
- package/configuration/interfaces/groundConfiguration.d.ts +0 -24
- package/configuration/interfaces/groundConfiguration.js +0 -2
- package/configuration/interfaces/groundConfiguration.js.map +0 -1
- package/configuration/interfaces/imageProcessingConfiguration.d.ts +0 -45
- package/configuration/interfaces/imageProcessingConfiguration.js +0 -2
- package/configuration/interfaces/imageProcessingConfiguration.js.map +0 -1
- package/configuration/interfaces/index.d.ts +0 -15
- package/configuration/interfaces/index.js +0 -16
- package/configuration/interfaces/index.js.map +0 -1
- package/configuration/interfaces/lightConfiguration.d.ts +0 -60
- package/configuration/interfaces/lightConfiguration.js +0 -2
- package/configuration/interfaces/lightConfiguration.js.map +0 -1
- package/configuration/interfaces/modelAnimationConfiguration.d.ts +0 -26
- package/configuration/interfaces/modelAnimationConfiguration.js +0 -2
- package/configuration/interfaces/modelAnimationConfiguration.js.map +0 -1
- package/configuration/interfaces/modelConfiguration.d.ts +0 -65
- package/configuration/interfaces/modelConfiguration.js +0 -2
- package/configuration/interfaces/modelConfiguration.js.map +0 -1
- package/configuration/interfaces/observersConfiguration.d.ts +0 -5
- package/configuration/interfaces/observersConfiguration.js +0 -2
- package/configuration/interfaces/observersConfiguration.js.map +0 -1
- package/configuration/interfaces/sceneConfiguration.d.ts +0 -48
- package/configuration/interfaces/sceneConfiguration.js +0 -2
- package/configuration/interfaces/sceneConfiguration.js.map +0 -1
- package/configuration/interfaces/sceneOptimizerConfiguration.d.ts +0 -23
- package/configuration/interfaces/sceneOptimizerConfiguration.js +0 -2
- package/configuration/interfaces/sceneOptimizerConfiguration.js.map +0 -1
- package/configuration/interfaces/skyboxConfiguration.d.ts +0 -21
- package/configuration/interfaces/skyboxConfiguration.js +0 -2
- package/configuration/interfaces/skyboxConfiguration.js.map +0 -1
- package/configuration/interfaces/templateConfiguration.d.ts +0 -67
- package/configuration/interfaces/templateConfiguration.js +0 -2
- package/configuration/interfaces/templateConfiguration.js.map +0 -1
- package/configuration/interfaces/vrConfiguration.d.ts +0 -16
- package/configuration/interfaces/vrConfiguration.js +0 -2
- package/configuration/interfaces/vrConfiguration.js.map +0 -1
- package/configuration/loader.d.ts +0 -4
- package/configuration/loader.js +0 -17
- package/configuration/loader.js.map +0 -1
- package/configuration/mappers.d.ts +0 -43
- package/configuration/mappers.js +0 -192
- package/configuration/mappers.js.map +0 -1
- package/configuration/renderOnlyLoader.d.ts +0 -33
- package/configuration/renderOnlyLoader.js +0 -162
- package/configuration/renderOnlyLoader.js.map +0 -1
- package/configuration/types/default.d.ts +0 -6
- package/configuration/types/default.js +0 -121
- package/configuration/types/default.js.map +0 -1
- package/configuration/types/environmentMap.d.ts +0 -5
- package/configuration/types/environmentMap.js +0 -14
- package/configuration/types/environmentMap.js.map +0 -1
- package/configuration/types/extended.d.ts +0 -6
- package/configuration/types/extended.js +0 -317
- package/configuration/types/extended.js.map +0 -1
- package/configuration/types/index.d.ts +0 -14
- package/configuration/types/index.js +0 -51
- package/configuration/types/index.js.map +0 -1
- package/configuration/types/minimal.d.ts +0 -6
- package/configuration/types/minimal.js +0 -43
- package/configuration/types/minimal.js.map +0 -1
- package/configuration/types/renderOnlyDefault.d.ts +0 -30
- package/configuration/types/renderOnlyDefault.js +0 -31
- package/configuration/types/renderOnlyDefault.js.map +0 -1
- package/configuration/types/shadowLight.d.ts +0 -9
- package/configuration/types/shadowLight.js +0 -64
- package/configuration/types/shadowLight.js.map +0 -1
- package/helper/index.d.ts +0 -29
- package/helper/index.js +0 -66
- package/helper/index.js.map +0 -1
- package/index.d.ts +0 -30
- package/index.js +0 -46
- package/index.js.map +0 -1
- package/initializer.d.ts +0 -11
- package/initializer.js +0 -35
- package/initializer.js.map +0 -1
- package/interfaces.d.ts +0 -5
- package/interfaces.js +0 -7
- package/interfaces.js.map +0 -1
- package/labs/environmentSerializer.d.ts +0 -126
- package/labs/environmentSerializer.js +0 -191
- package/labs/environmentSerializer.js.map +0 -1
- package/labs/texture.d.ts +0 -183
- package/labs/texture.js +0 -351
- package/labs/texture.js.map +0 -1
- package/labs/viewerLabs.d.ts +0 -51
- package/labs/viewerLabs.js +0 -134
- package/labs/viewerLabs.js.map +0 -1
- package/loader/modelLoader.d.ts +0 -56
- package/loader/modelLoader.js +0 -199
- package/loader/modelLoader.js.map +0 -1
- package/loader/plugins/applyMaterialConfig.d.ts +0 -12
- package/loader/plugins/applyMaterialConfig.js +0 -16
- package/loader/plugins/applyMaterialConfig.js.map +0 -1
- package/loader/plugins/extendedMaterialLoaderPlugin.d.ts +0 -9
- package/loader/plugins/extendedMaterialLoaderPlugin.js +0 -16
- package/loader/plugins/extendedMaterialLoaderPlugin.js.map +0 -1
- package/loader/plugins/index.d.ts +0 -19
- package/loader/plugins/index.js +0 -44
- package/loader/plugins/index.js.map +0 -1
- package/loader/plugins/loaderPlugin.d.ts +0 -24
- package/loader/plugins/loaderPlugin.js +0 -2
- package/loader/plugins/loaderPlugin.js.map +0 -1
- package/loader/plugins/msftLodLoaderPlugin.d.ts +0 -12
- package/loader/plugins/msftLodLoaderPlugin.js +0 -21
- package/loader/plugins/msftLodLoaderPlugin.js.map +0 -1
- package/loader/plugins/telemetryLoaderPlugin.d.ts +0 -12
- package/loader/plugins/telemetryLoaderPlugin.js +0 -36
- package/loader/plugins/telemetryLoaderPlugin.js.map +0 -1
- package/managers/observablesManager.d.ts +0 -66
- package/managers/observablesManager.js +0 -35
- package/managers/observablesManager.js.map +0 -1
- package/managers/sceneManager.d.ts +0 -245
- package/managers/sceneManager.js +0 -1375
- package/managers/sceneManager.js.map +0 -1
- package/managers/telemetryManager.d.ts +0 -78
- package/managers/telemetryManager.js +0 -117
- package/managers/telemetryManager.js.map +0 -1
- package/model/modelAnimation.d.ts +0 -215
- package/model/modelAnimation.js +0 -237
- package/model/modelAnimation.js.map +0 -1
- package/model/viewerModel.d.ts +0 -233
- package/model/viewerModel.js +0 -673
- package/model/viewerModel.js.map +0 -1
- package/optimizer/custom/extended.d.ts +0 -13
- package/optimizer/custom/extended.js +0 -101
- package/optimizer/custom/extended.js.map +0 -1
- package/optimizer/custom/index.d.ts +0 -9
- package/optimizer/custom/index.js +0 -26
- package/optimizer/custom/index.js.map +0 -1
- package/renderOnlyIndex.d.ts +0 -11
- package/renderOnlyIndex.js +0 -18
- package/renderOnlyIndex.js.map +0 -1
- package/templating/eventManager.d.ts +0 -35
- package/templating/eventManager.js +0 -66
- package/templating/eventManager.js.map +0 -1
- package/templating/plugins/hdButtonPlugin.d.ts +0 -9
- package/templating/plugins/hdButtonPlugin.js +0 -21
- package/templating/plugins/hdButtonPlugin.js.map +0 -1
- package/templating/plugins/printButton.d.ts +0 -9
- package/templating/plugins/printButton.js +0 -40
- package/templating/plugins/printButton.js.map +0 -1
- package/templating/templateManager.d.ts +0 -197
- package/templating/templateManager.js +0 -561
- package/templating/templateManager.js.map +0 -1
- package/templating/viewerTemplatePlugin.d.ts +0 -21
- package/templating/viewerTemplatePlugin.js +0 -69
- package/templating/viewerTemplatePlugin.js.map +0 -1
- package/viewer/defaultViewer.d.ts +0 -130
- package/viewer/defaultViewer.js +0 -675
- package/viewer/defaultViewer.js.map +0 -1
- package/viewer/renderOnlyViewer.d.ts +0 -9
- package/viewer/renderOnlyViewer.js +0 -46
- package/viewer/renderOnlyViewer.js.map +0 -1
- package/viewer/viewer.d.ts +0 -258
- package/viewer/viewer.js +0 -783
- package/viewer/viewer.js.map +0 -1
- package/viewer/viewerManager.d.ts +0 -58
- package/viewer/viewerManager.js +0 -91
- package/viewer/viewerManager.js.map +0 -1
- package/viewer/viewerWithTemplate.d.ts +0 -9
- package/viewer/viewerWithTemplate.js +0 -20
- package/viewer/viewerWithTemplate.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { GLTFLoader, ArrayItem } from './glTFLoader-DB7AOurF.esm.js';
|
|
2
|
+
import { ak as unregisterGLTFExtension, al as registerGLTFExtension } from './index-CTNAO7X0.esm.js';
|
|
3
|
+
import './rawTexture-DzCCPFKA.esm.js';
|
|
4
|
+
import './assetContainer-DVOdWL9b.esm.js';
|
|
5
|
+
import './glTFLoaderAnimation-DK5fvCTY.esm.js';
|
|
6
|
+
|
|
7
|
+
const NAME = "KHR_texture_basisu";
|
|
8
|
+
/**
|
|
9
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md)
|
|
10
|
+
*/
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
12
|
+
class KHR_texture_basisu {
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
constructor(loader) {
|
|
17
|
+
/** The name of this extension. */
|
|
18
|
+
this.name = NAME;
|
|
19
|
+
this._loader = loader;
|
|
20
|
+
this.enabled = loader.isExtensionUsed(NAME);
|
|
21
|
+
}
|
|
22
|
+
/** @internal */
|
|
23
|
+
dispose() {
|
|
24
|
+
this._loader = null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
_loadTextureAsync(context, texture, assign) {
|
|
30
|
+
return GLTFLoader.LoadExtensionAsync(context, texture, this.name, (extensionContext, extension) => {
|
|
31
|
+
const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler);
|
|
32
|
+
const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);
|
|
33
|
+
return this._loader._createTextureAsync(context, sampler, image, (babylonTexture) => {
|
|
34
|
+
assign(babylonTexture);
|
|
35
|
+
}, texture._textureInfo.nonColorData ? { useRGBAIfASTCBC7NotAvailableWhenUASTC: true } : undefined, !texture._textureInfo.nonColorData);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
unregisterGLTFExtension(NAME);
|
|
40
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_texture_basisu(loader));
|
|
41
|
+
|
|
42
|
+
export { KHR_texture_basisu };
|
|
43
|
+
//# sourceMappingURL=KHR_texture_basisu-BHsmOUDV.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_texture_basisu-BHsmOUDV.esm.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/KHR_texture_basisu.js"],"sourcesContent":["import { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"KHR_texture_basisu\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_texture_basisu {\n /**\n * @internal\n */\n constructor(loader) {\n /** The name of this extension. */\n this.name = NAME;\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n }\n /**\n * @internal\n */\n _loadTextureAsync(context, texture, assign) {\n return GLTFLoader.LoadExtensionAsync(context, texture, this.name, (extensionContext, extension) => {\n const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler);\n const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);\n return this._loader._createTextureAsync(context, sampler, image, (babylonTexture) => {\n assign(babylonTexture);\n }, texture._textureInfo.nonColorData ? { useRGBAIfASTCBC7NotAvailableWhenUASTC: true } : undefined, !texture._textureInfo.nonColorData);\n });\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_basisu(loader));\n//# sourceMappingURL=KHR_texture_basisu.js.map"],"names":[],"mappings":";;;;;;AAEA,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC;AACA;AACA;AACA;AACO,MAAM,kBAAkB,CAAC;AAChC;AACA;AACA;AACA,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC9B,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACpD,KAAK;AACL;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5B,KAAK;AACL;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;AAChD,QAAQ,OAAO,UAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,SAAS,KAAK;AAC3G,YAAY,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,GAAG,UAAU,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACxK,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAClH,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,cAAc,KAAK;AACjG,gBAAgB,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,YAAY,GAAG,EAAE,qCAAqC,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;AACpJ,SAAS,CAAC,CAAC;AACX,KAAK;AACL,CAAC;AACD,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{GLTFLoader as e,ArrayItem as s}from"./glTFLoader-BuxqXvJ-.esm.min.js";import{ak as t,al as r}from"./index-DYqHhEAk.esm.min.js";import"./rawTexture-BjAjz6eU.esm.min.js";import"./assetContainer-Bo08Fxv3.esm.min.js";import"./glTFLoaderAnimation-BWhMcDgk.esm.min.js";const o="KHR_texture_basisu";class a{constructor(e){this.name=o,this._loader=e,this.enabled=e.isExtensionUsed(o)}dispose(){this._loader=null}_loadTextureAsync(t,r,o){return e.LoadExtensionAsync(t,r,this.name,((a,n)=>{const i=null==r.sampler?e.DefaultSampler:s.Get(`${t}/sampler`,this._loader.gltf.samplers,r.sampler),l=s.Get(`${a}/source`,this._loader.gltf.images,n.source);return this._loader._createTextureAsync(t,i,l,(e=>{o(e)}),r._textureInfo.nonColorData?{useRGBAIfASTCBC7NotAvailableWhenUASTC:!0}:void 0,!r._textureInfo.nonColorData)}))}}t(o),r(o,!0,(e=>new a(e)));export{a as KHR_texture_basisu};
|
|
2
|
+
//# sourceMappingURL=KHR_texture_basisu-DObdWvzE.esm.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_texture_basisu-DObdWvzE.esm.min.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/KHR_texture_basisu.js"],"sourcesContent":["import { GLTFLoader, ArrayItem } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"KHR_texture_basisu\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_texture_basisu {\n /**\n * @internal\n */\n constructor(loader) {\n /** The name of this extension. */\n this.name = NAME;\n this._loader = loader;\n this.enabled = loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n }\n /**\n * @internal\n */\n _loadTextureAsync(context, texture, assign) {\n return GLTFLoader.LoadExtensionAsync(context, texture, this.name, (extensionContext, extension) => {\n const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler);\n const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);\n return this._loader._createTextureAsync(context, sampler, image, (babylonTexture) => {\n assign(babylonTexture);\n }, texture._textureInfo.nonColorData ? { useRGBAIfASTCBC7NotAvailableWhenUASTC: true } : undefined, !texture._textureInfo.nonColorData);\n });\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_basisu(loader));\n//# sourceMappingURL=KHR_texture_basisu.js.map"],"names":["NAME","KHR_texture_basisu","constructor","loader","this","name","_loader","enabled","isExtensionUsed","dispose","_loadTextureAsync","context","texture","assign","GLTFLoader","LoadExtensionAsync","extensionContext","extension","sampler","undefined","DefaultSampler","ArrayItem","Get","gltf","samplers","image","images","source","_createTextureAsync","babylonTexture","_textureInfo","nonColorData","useRGBAIfASTCBC7NotAvailableWhenUASTC","unregisterGLTFExtension","registerGLTFExtension"],"mappings":"8QAEA,MAAMA,EAAO,qBAKN,MAAMC,EAIT,WAAAC,CAAYC,GAERC,KAAKC,KAAOL,EACZI,KAAKE,QAAUH,EACfC,KAAKG,QAAUJ,EAAOK,gBAAgBR,EACzC,CAED,OAAAS,GACIL,KAAKE,QAAU,IAClB,CAID,iBAAAI,CAAkBC,EAASC,EAASC,GAChC,OAAOC,EAAWC,mBAAmBJ,EAASC,EAASR,KAAKC,MAAM,CAACW,EAAkBC,KACjF,MAAMC,EAA6BC,MAAnBP,EAAQM,QAAuBJ,EAAWM,eAAiBC,EAAUC,IAAI,GAAGX,YAAmBP,KAAKE,QAAQiB,KAAKC,SAAUZ,EAAQM,SAC7IO,EAAQJ,EAAUC,IAAI,GAAGN,WAA2BZ,KAAKE,QAAQiB,KAAKG,OAAQT,EAAUU,QAC9F,OAAOvB,KAAKE,QAAQsB,oBAAoBjB,EAASO,EAASO,GAAQI,IAC9DhB,EAAOgB,EAAe,GACvBjB,EAAQkB,aAAaC,aAAe,CAAEC,uCAAuC,QAASb,GAAYP,EAAQkB,aAAaC,aAAa,GAE9I,EAELE,EAAwBjC,GACxBkC,EAAsBlC,GAAM,GAAOG,GAAW,IAAIF,EAAmBE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { T as Texture, ak as unregisterGLTFExtension, al as registerGLTFExtension } from './index-CTNAO7X0.esm.js';
|
|
2
|
+
import { GLTFLoader } 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 = "KHR_texture_transform";
|
|
8
|
+
/**
|
|
9
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_transform/README.md)
|
|
10
|
+
*/
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
12
|
+
class KHR_texture_transform {
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
constructor(loader) {
|
|
17
|
+
/**
|
|
18
|
+
* The name of this extension.
|
|
19
|
+
*/
|
|
20
|
+
this.name = NAME;
|
|
21
|
+
this._loader = loader;
|
|
22
|
+
this.enabled = this._loader.isExtensionUsed(NAME);
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
dispose() {
|
|
26
|
+
this._loader = null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
loadTextureInfoAsync(context, textureInfo, assign) {
|
|
32
|
+
return GLTFLoader.LoadExtensionAsync(context, textureInfo, this.name, (extensionContext, extension) => {
|
|
33
|
+
return this._loader.loadTextureInfoAsync(context, textureInfo, (babylonTexture) => {
|
|
34
|
+
if (!(babylonTexture instanceof Texture)) {
|
|
35
|
+
throw new Error(`${extensionContext}: Texture type not supported`);
|
|
36
|
+
}
|
|
37
|
+
if (extension.offset) {
|
|
38
|
+
babylonTexture.uOffset = extension.offset[0];
|
|
39
|
+
babylonTexture.vOffset = extension.offset[1];
|
|
40
|
+
}
|
|
41
|
+
// Always rotate around the origin.
|
|
42
|
+
babylonTexture.uRotationCenter = 0;
|
|
43
|
+
babylonTexture.vRotationCenter = 0;
|
|
44
|
+
if (extension.rotation) {
|
|
45
|
+
babylonTexture.wAng = -extension.rotation;
|
|
46
|
+
}
|
|
47
|
+
if (extension.scale) {
|
|
48
|
+
babylonTexture.uScale = extension.scale[0];
|
|
49
|
+
babylonTexture.vScale = extension.scale[1];
|
|
50
|
+
}
|
|
51
|
+
if (extension.texCoord != undefined) {
|
|
52
|
+
babylonTexture.coordinatesIndex = extension.texCoord;
|
|
53
|
+
}
|
|
54
|
+
assign(babylonTexture);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
unregisterGLTFExtension(NAME);
|
|
60
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_texture_transform(loader));
|
|
61
|
+
|
|
62
|
+
export { KHR_texture_transform };
|
|
63
|
+
//# sourceMappingURL=KHR_texture_transform-B7NCdTO_.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_texture_transform-B7NCdTO_.esm.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/KHR_texture_transform.js"],"sourcesContent":["import { Texture } from \"core/Materials/Textures/texture\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"KHR_texture_transform\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_transform/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_texture_transform {\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 }\n /**\n * @internal\n */\n loadTextureInfoAsync(context, textureInfo, assign) {\n return GLTFLoader.LoadExtensionAsync(context, textureInfo, this.name, (extensionContext, extension) => {\n return this._loader.loadTextureInfoAsync(context, textureInfo, (babylonTexture) => {\n if (!(babylonTexture instanceof Texture)) {\n throw new Error(`${extensionContext}: Texture type not supported`);\n }\n if (extension.offset) {\n babylonTexture.uOffset = extension.offset[0];\n babylonTexture.vOffset = extension.offset[1];\n }\n // Always rotate around the origin.\n babylonTexture.uRotationCenter = 0;\n babylonTexture.vRotationCenter = 0;\n if (extension.rotation) {\n babylonTexture.wAng = -extension.rotation;\n }\n if (extension.scale) {\n babylonTexture.uScale = extension.scale[0];\n babylonTexture.vScale = extension.scale[1];\n }\n if (extension.texCoord != undefined) {\n babylonTexture.coordinatesIndex = extension.texCoord;\n }\n assign(babylonTexture);\n });\n });\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_transform(loader));\n//# sourceMappingURL=KHR_texture_transform.js.map"],"names":[],"mappings":";;;;;;AAGA,MAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC;AACA;AACA;AACA;AACO,MAAM,qBAAqB,CAAC;AACnC;AACA;AACA;AACA,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC9B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1D,KAAK;AACL;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5B,KAAK;AACL;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE;AACvD,QAAQ,OAAO,UAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,SAAS,KAAK;AAC/G,YAAY,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,cAAc,KAAK;AAC/F,gBAAgB,IAAI,EAAE,cAAc,YAAY,OAAO,CAAC,EAAE;AAC1D,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACvF,iBAAiB;AACjB,gBAAgB,IAAI,SAAS,CAAC,MAAM,EAAE;AACtC,oBAAoB,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,oBAAoB,cAAc,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjE,iBAAiB;AACjB;AACA,gBAAgB,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;AACnD,gBAAgB,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;AACnD,gBAAgB,IAAI,SAAS,CAAC,QAAQ,EAAE;AACxC,oBAAoB,cAAc,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC9D,iBAAiB;AACjB,gBAAgB,IAAI,SAAS,CAAC,KAAK,EAAE;AACrC,oBAAoB,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,oBAAoB,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,iBAAiB;AACjB,gBAAgB,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,EAAE;AACrD,oBAAoB,cAAc,CAAC,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;AACzE,iBAAiB;AACjB,gBAAgB,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK;AACL,CAAC;AACD,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{T as e,ak as t,al as o}from"./index-DYqHhEAk.esm.min.js";import{GLTFLoader as s}from"./glTFLoader-BuxqXvJ-.esm.min.js";import"./rawTexture-BjAjz6eU.esm.min.js";import"./assetContainer-Bo08Fxv3.esm.min.js";import"./glTFLoaderAnimation-BWhMcDgk.esm.min.js";const n="KHR_texture_transform";class r{constructor(e){this.name=n,this._loader=e,this.enabled=this._loader.isExtensionUsed(n)}dispose(){this._loader=null}loadTextureInfoAsync(t,o,n){return s.LoadExtensionAsync(t,o,this.name,((s,r)=>this._loader.loadTextureInfoAsync(t,o,(t=>{if(!(t instanceof e))throw new Error(`${s}: Texture type not supported`);r.offset&&(t.uOffset=r.offset[0],t.vOffset=r.offset[1]),t.uRotationCenter=0,t.vRotationCenter=0,r.rotation&&(t.wAng=-r.rotation),r.scale&&(t.uScale=r.scale[0],t.vScale=r.scale[1]),null!=r.texCoord&&(t.coordinatesIndex=r.texCoord),n(t)}))))}}t(n),o(n,!0,(e=>new r(e)));export{r as KHR_texture_transform};
|
|
2
|
+
//# sourceMappingURL=KHR_texture_transform-D6Ee6UiP.esm.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_texture_transform-D6Ee6UiP.esm.min.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/KHR_texture_transform.js"],"sourcesContent":["import { Texture } from \"core/Materials/Textures/texture\";\nimport { GLTFLoader } from \"../glTFLoader\";\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"KHR_texture_transform\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_transform/README.md)\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_texture_transform {\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 }\n /**\n * @internal\n */\n loadTextureInfoAsync(context, textureInfo, assign) {\n return GLTFLoader.LoadExtensionAsync(context, textureInfo, this.name, (extensionContext, extension) => {\n return this._loader.loadTextureInfoAsync(context, textureInfo, (babylonTexture) => {\n if (!(babylonTexture instanceof Texture)) {\n throw new Error(`${extensionContext}: Texture type not supported`);\n }\n if (extension.offset) {\n babylonTexture.uOffset = extension.offset[0];\n babylonTexture.vOffset = extension.offset[1];\n }\n // Always rotate around the origin.\n babylonTexture.uRotationCenter = 0;\n babylonTexture.vRotationCenter = 0;\n if (extension.rotation) {\n babylonTexture.wAng = -extension.rotation;\n }\n if (extension.scale) {\n babylonTexture.uScale = extension.scale[0];\n babylonTexture.vScale = extension.scale[1];\n }\n if (extension.texCoord != undefined) {\n babylonTexture.coordinatesIndex = extension.texCoord;\n }\n assign(babylonTexture);\n });\n });\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_texture_transform(loader));\n//# sourceMappingURL=KHR_texture_transform.js.map"],"names":["NAME","KHR_texture_transform","constructor","loader","this","name","_loader","enabled","isExtensionUsed","dispose","loadTextureInfoAsync","context","textureInfo","assign","GLTFLoader","LoadExtensionAsync","extensionContext","extension","babylonTexture","Texture","Error","offset","uOffset","vOffset","uRotationCenter","vRotationCenter","rotation","wAng","scale","uScale","vScale","undefined","texCoord","coordinatesIndex","unregisterGLTFExtension","registerGLTFExtension"],"mappings":"sQAGA,MAAMA,EAAO,wBAKN,MAAMC,EAIT,WAAAC,CAAYC,GAIRC,KAAKC,KAAOL,EACZI,KAAKE,QAAUH,EACfC,KAAKG,QAAUH,KAAKE,QAAQE,gBAAgBR,EAC/C,CAED,OAAAS,GACIL,KAAKE,QAAU,IAClB,CAID,oBAAAI,CAAqBC,EAASC,EAAaC,GACvC,OAAOC,EAAWC,mBAAmBJ,EAASC,EAAaR,KAAKC,MAAM,CAACW,EAAkBC,IAC9Eb,KAAKE,QAAQI,qBAAqBC,EAASC,GAAcM,IAC5D,KAAMA,aAA0BC,GAC5B,MAAM,IAAIC,MAAM,GAAGJ,iCAEnBC,EAAUI,SACVH,EAAeI,QAAUL,EAAUI,OAAO,GAC1CH,EAAeK,QAAUN,EAAUI,OAAO,IAG9CH,EAAeM,gBAAkB,EACjCN,EAAeO,gBAAkB,EAC7BR,EAAUS,WACVR,EAAeS,MAAQV,EAAUS,UAEjCT,EAAUW,QACVV,EAAeW,OAASZ,EAAUW,MAAM,GACxCV,EAAeY,OAASb,EAAUW,MAAM,IAElBG,MAAtBd,EAAUe,WACVd,EAAee,iBAAmBhB,EAAUe,UAEhDnB,EAAOK,EAAe,KAGjC,EAELgB,EAAwBlC,GACxBmC,EAAsBnC,GAAM,GAAOG,GAAW,IAAIF,EAAsBE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ak as unregisterGLTFExtension, al as registerGLTFExtension } from './index-CTNAO7X0.esm.js';
|
|
2
|
+
|
|
3
|
+
const NAME = "KHR_xmp_json_ld";
|
|
4
|
+
/**
|
|
5
|
+
* [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/README.md)
|
|
6
|
+
* @since 5.0.0
|
|
7
|
+
*/
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
9
|
+
class KHR_xmp_json_ld {
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
constructor(loader) {
|
|
14
|
+
/**
|
|
15
|
+
* The name of this extension.
|
|
16
|
+
*/
|
|
17
|
+
this.name = NAME;
|
|
18
|
+
/**
|
|
19
|
+
* Defines a number that determines the order the extensions are applied.
|
|
20
|
+
*/
|
|
21
|
+
this.order = 100;
|
|
22
|
+
this._loader = loader;
|
|
23
|
+
this.enabled = this._loader.isExtensionUsed(NAME);
|
|
24
|
+
}
|
|
25
|
+
/** @internal */
|
|
26
|
+
dispose() {
|
|
27
|
+
this._loader = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Called after the loader state changes to LOADING.
|
|
31
|
+
*/
|
|
32
|
+
onLoading() {
|
|
33
|
+
if (this._loader.rootBabylonMesh === null) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const xmp_gltf = this._loader.gltf.extensions?.KHR_xmp_json_ld;
|
|
37
|
+
const xmp_node = this._loader.gltf.asset?.extensions?.KHR_xmp_json_ld;
|
|
38
|
+
if (xmp_gltf && xmp_node) {
|
|
39
|
+
const packet = +xmp_node.packet;
|
|
40
|
+
if (xmp_gltf.packets && packet < xmp_gltf.packets.length) {
|
|
41
|
+
this._loader.rootBabylonMesh.metadata = this._loader.rootBabylonMesh.metadata || {};
|
|
42
|
+
this._loader.rootBabylonMesh.metadata.xmp = xmp_gltf.packets[packet];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
unregisterGLTFExtension(NAME);
|
|
48
|
+
registerGLTFExtension(NAME, true, (loader) => new KHR_xmp_json_ld(loader));
|
|
49
|
+
|
|
50
|
+
export { KHR_xmp_json_ld };
|
|
51
|
+
//# sourceMappingURL=KHR_xmp_json_ld-Coh_hfCi.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_xmp_json_ld-Coh_hfCi.esm.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/KHR_xmp_json_ld.js"],"sourcesContent":["import { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"KHR_xmp_json_ld\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/README.md)\n * @since 5.0.0\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_xmp_json_ld {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n this.order = 100;\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n }\n /**\n * Called after the loader state changes to LOADING.\n */\n onLoading() {\n if (this._loader.rootBabylonMesh === null) {\n return;\n }\n const xmp_gltf = this._loader.gltf.extensions?.KHR_xmp_json_ld;\n const xmp_node = this._loader.gltf.asset?.extensions?.KHR_xmp_json_ld;\n if (xmp_gltf && xmp_node) {\n const packet = +xmp_node.packet;\n if (xmp_gltf.packets && packet < xmp_gltf.packets.length) {\n this._loader.rootBabylonMesh.metadata = this._loader.rootBabylonMesh.metadata || {};\n this._loader.rootBabylonMesh.metadata.xmp = xmp_gltf.packets[packet];\n }\n }\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_xmp_json_ld(loader));\n//# sourceMappingURL=KHR_xmp_json_ld.js.map"],"names":[],"mappings":";;AACA,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,CAAC;AAC7B;AACA;AACA;AACA,IAAI,WAAW,CAAC,MAAM,EAAE;AACxB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC9B,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1D,KAAK;AACL;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAC5B,KAAK;AACL;AACA;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE;AACnD,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;AACvE,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC;AAC9E,QAAQ,IAAI,QAAQ,IAAI,QAAQ,EAAE;AAClC,YAAY,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5C,YAAY,IAAI,QAAQ,CAAC,OAAO,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;AACtE,gBAAgB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;AACpG,gBAAgB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrF,aAAa;AACb,SAAS;AACT,KAAK;AACL,CAAC;AACD,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAC9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ak as s,al as t}from"./index-DYqHhEAk.esm.min.js";const o="KHR_xmp_json_ld";class e{constructor(s){this.name=o,this.order=100,this._loader=s,this.enabled=this._loader.isExtensionUsed(o)}dispose(){this._loader=null}onLoading(){if(null===this._loader.rootBabylonMesh)return;const s=this._loader.gltf.extensions?.KHR_xmp_json_ld,t=this._loader.gltf.asset?.extensions?.KHR_xmp_json_ld;if(s&&t){const o=+t.packet;s.packets&&o<s.packets.length&&(this._loader.rootBabylonMesh.metadata=this._loader.rootBabylonMesh.metadata||{},this._loader.rootBabylonMesh.metadata.xmp=s.packets[o])}}}s(o),t(o,!0,(s=>new e(s)));export{e as KHR_xmp_json_ld};
|
|
2
|
+
//# sourceMappingURL=KHR_xmp_json_ld-ijOY8DMb.esm.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KHR_xmp_json_ld-ijOY8DMb.esm.min.js","sources":["../../../../../dev/loaders/dist/glTF/2.0/Extensions/KHR_xmp_json_ld.js"],"sourcesContent":["import { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\nconst NAME = \"KHR_xmp_json_ld\";\n/**\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/README.md)\n * @since 5.0.0\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class KHR_xmp_json_ld {\n /**\n * @internal\n */\n constructor(loader) {\n /**\n * The name of this extension.\n */\n this.name = NAME;\n /**\n * Defines a number that determines the order the extensions are applied.\n */\n this.order = 100;\n this._loader = loader;\n this.enabled = this._loader.isExtensionUsed(NAME);\n }\n /** @internal */\n dispose() {\n this._loader = null;\n }\n /**\n * Called after the loader state changes to LOADING.\n */\n onLoading() {\n if (this._loader.rootBabylonMesh === null) {\n return;\n }\n const xmp_gltf = this._loader.gltf.extensions?.KHR_xmp_json_ld;\n const xmp_node = this._loader.gltf.asset?.extensions?.KHR_xmp_json_ld;\n if (xmp_gltf && xmp_node) {\n const packet = +xmp_node.packet;\n if (xmp_gltf.packets && packet < xmp_gltf.packets.length) {\n this._loader.rootBabylonMesh.metadata = this._loader.rootBabylonMesh.metadata || {};\n this._loader.rootBabylonMesh.metadata.xmp = xmp_gltf.packets[packet];\n }\n }\n }\n}\nunregisterGLTFExtension(NAME);\nregisterGLTFExtension(NAME, true, (loader) => new KHR_xmp_json_ld(loader));\n//# sourceMappingURL=KHR_xmp_json_ld.js.map"],"names":["NAME","KHR_xmp_json_ld","constructor","loader","this","name","order","_loader","enabled","isExtensionUsed","dispose","onLoading","rootBabylonMesh","xmp_gltf","gltf","extensions","xmp_node","asset","packet","packets","length","metadata","xmp","unregisterGLTFExtension","registerGLTFExtension"],"mappings":"yDACA,MAAMA,EAAO,kBAMN,MAAMC,EAIT,WAAAC,CAAYC,GAIRC,KAAKC,KAAOL,EAIZI,KAAKE,MAAQ,IACbF,KAAKG,QAAUJ,EACfC,KAAKI,QAAUJ,KAAKG,QAAQE,gBAAgBT,EAC/C,CAED,OAAAU,GACIN,KAAKG,QAAU,IAClB,CAID,SAAAI,GACI,GAAqC,OAAjCP,KAAKG,QAAQK,gBACb,OAEJ,MAAMC,EAAWT,KAAKG,QAAQO,KAAKC,YAAYd,gBACzCe,EAAWZ,KAAKG,QAAQO,KAAKG,OAAOF,YAAYd,gBACtD,GAAIY,GAAYG,EAAU,CACtB,MAAME,GAAUF,EAASE,OACrBL,EAASM,SAAWD,EAASL,EAASM,QAAQC,SAC9ChB,KAAKG,QAAQK,gBAAgBS,SAAWjB,KAAKG,QAAQK,gBAAgBS,UAAY,GACjFjB,KAAKG,QAAQK,gBAAgBS,SAASC,IAAMT,EAASM,QAAQD,GAEpE,CACJ,EAELK,EAAwBvB,GACxBwB,EAAsBxB,GAAM,GAAOG,GAAW,IAAIF,EAAgBE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a_ as e,R as t,aE as i,aq as n,b as s,y as o,L as a,e as r,ak as u,al as l}from"./index-DYqHhEAk.esm.min.js";import{ArrayItem as d,GLTFLoader as h}from"./glTFLoader-BuxqXvJ-.esm.min.js";import"./rawTexture-BjAjz6eU.esm.min.js";import"./assetContainer-Bo08Fxv3.esm.min.js";import"./glTFLoaderAnimation-BWhMcDgk.esm.min.js";class c{constructor(e,t,i){this.frame=e,this.action=t,this.onlyOnce=i,this.isDone=!1}_clone(){return new c(this.frame,this.action,this.onlyOnce)}}class _{get loop(){return this._loop}set loop(e){e!==this._loop&&(this._loop=e,this.updateOptions({loop:e}))}get currentTime(){if(this._htmlAudioElement)return this._htmlAudioElement.currentTime;if(i.audioEngine?.audioContext&&(this.isPlaying||this.isPaused)){const e=this.isPaused?0:i.audioEngine.audioContext.currentTime-this._startTime;return this._currentTime+e}return 0}get spatialSound(){return this._spatialSound}set spatialSound(e){if(e==this._spatialSound)return;const t=this.isPlaying;this.pause(),e?(this._spatialSound=e,this._updateSpatialParameters()):this._disableSpatialSound(),t&&this.play()}constructor(e,t,u,l=null,d){if(this.autoplay=!1,this._loop=!1,this.useCustomAttenuation=!1,this.isPlaying=!1,this.isPaused=!1,this.refDistance=1,this.rolloffFactor=1,this.maxDistance=100,this.distanceModel="linear",this.metadata=null,this.onEndedObservable=new n,this._spatialSound=!1,this._panningModel="equalpower",this._playbackRate=1,this._streaming=!1,this._startTime=0,this._currentTime=0,this._position=s.Zero(),this._localDirection=new s(1,0,0),this._volume=1,this._isReadyToPlay=!1,this._isDirectional=!1,this._coneInnerAngle=360,this._coneOuterAngle=360,this._coneOuterGain=0,this._isOutputConnected=!1,this._urlType="Unknown",this.name=e,u=u||o.LastCreatedScene)if(this._scene=u,_._SceneComponentInitialization(u),this._readyToPlayCallback=l,this._customAttenuationFunction=(e,t,i,n,s)=>t<i?e*(1-t/i):0,d&&(this.autoplay=d.autoplay||!1,this._loop=d.loop||!1,void 0!==d.volume&&(this._volume=d.volume),this._spatialSound=d.spatialSound??!1,this.maxDistance=d.maxDistance??100,this.useCustomAttenuation=d.useCustomAttenuation??!1,this.rolloffFactor=d.rolloffFactor||1,this.refDistance=d.refDistance||1,this.distanceModel=d.distanceModel||"linear",this._playbackRate=d.playbackRate||1,this._streaming=d.streaming??!1,this._length=d.length,this._offset=d.offset),i.audioEngine?.canUseWebAudio&&i.audioEngine.audioContext){this._soundGain=i.audioEngine.audioContext.createGain(),this._soundGain.gain.value=this._volume,this._inputAudioNode=this._soundGain,this._outputAudioNode=this._soundGain,this._spatialSound&&this._createSpatialParameters(),this._scene.mainSoundTrack.addSound(this);let e=!0;if(t)try{"string"==typeof t?(this._urlType="String",this._url=t):t instanceof ArrayBuffer?this._urlType="ArrayBuffer":t instanceof HTMLMediaElement?this._urlType="MediaElement":t instanceof MediaStream?this._urlType="MediaStream":t instanceof AudioBuffer?this._urlType="AudioBuffer":Array.isArray(t)&&(this._urlType="Array");let n=[],s=!1;switch(this._urlType){case"MediaElement":this._streaming=!0,this._isReadyToPlay=!0,this._streamingSource=i.audioEngine.audioContext.createMediaElementSource(t),this.autoplay&&this.play(0,this._offset,this._length),this._readyToPlayCallback&&this._readyToPlayCallback();break;case"MediaStream":this._streaming=!0,this._isReadyToPlay=!0,this._streamingSource=i.audioEngine.audioContext.createMediaStreamSource(t),this.autoplay&&this.play(0,this._offset,this._length),this._readyToPlayCallback&&this._readyToPlayCallback();break;case"ArrayBuffer":t.byteLength>0&&(s=!0,this._soundLoaded(t));break;case"AudioBuffer":this._audioBufferLoaded(t);break;case"String":n.push(t);case"Array":0===n.length&&(n=t);for(let e=0;e<n.length;e++){const t=n[e];if(s=d&&d.skipCodecCheck||-1!==t.indexOf(".mp3",t.length-4)&&i.audioEngine.isMP3supported||-1!==t.indexOf(".ogg",t.length-4)&&i.audioEngine.isOGGsupported||-1!==t.indexOf(".wav",t.length-4)||-1!==t.indexOf(".m4a",t.length-4)||-1!==t.indexOf(".mp4",t.length-4)||-1!==t.indexOf("blob:"),s){this._streaming?(this._htmlAudioElement=new Audio(t),this._htmlAudioElement.controls=!1,this._htmlAudioElement.loop=this.loop,r.SetCorsBehavior(t,this._htmlAudioElement),this._htmlAudioElement.preload="auto",this._htmlAudioElement.addEventListener("canplaythrough",(()=>{this._isReadyToPlay=!0,this.autoplay&&this.play(0,this._offset,this._length),this._readyToPlayCallback&&this._readyToPlayCallback()})),document.body.appendChild(this._htmlAudioElement),this._htmlAudioElement.load()):this._scene._loadFile(t,(e=>{this._soundLoaded(e)}),void 0,!0,!0,(e=>{e&&a.Error("XHR "+e.status+" error on: "+t+"."),a.Error("Sound creation aborted."),this._scene.mainSoundTrack.removeSound(this)}));break}}break;default:e=!1}e?s||(this._isReadyToPlay=!0,this._readyToPlayCallback&&setTimeout((()=>{this._readyToPlayCallback&&this._readyToPlayCallback()}),1e3)):a.Error("Parameter must be a URL to the sound, an Array of URLs (.mp3 & .ogg) or an ArrayBuffer of the sound.")}catch(e){a.Error("Unexpected error. Sound creation aborted."),this._scene.mainSoundTrack.removeSound(this)}}else this._scene.mainSoundTrack.addSound(this),i.audioEngine&&!i.audioEngine.WarnedWebAudioUnsupported&&(a.Error("Web Audio is not supported by your browser."),i.audioEngine.WarnedWebAudioUnsupported=!0),this._readyToPlayCallback&&setTimeout((()=>{this._readyToPlayCallback&&this._readyToPlayCallback()}),1e3)}dispose(){i.audioEngine?.canUseWebAudio&&(this.isPlaying&&this.stop(),this._isReadyToPlay=!1,-1===this.soundTrackId?this._scene.mainSoundTrack.removeSound(this):this._scene.soundTracks&&this._scene.soundTracks[this.soundTrackId].removeSound(this),this._soundGain&&(this._soundGain.disconnect(),this._soundGain=null),this._soundPanner&&(this._soundPanner.disconnect(),this._soundPanner=null),this._soundSource&&(this._soundSource.disconnect(),this._soundSource=null),this._audioBuffer=null,this._htmlAudioElement&&(this._htmlAudioElement.pause(),this._htmlAudioElement.src="",document.body.removeChild(this._htmlAudioElement)),this._streamingSource&&this._streamingSource.disconnect(),this._connectedTransformNode&&this._registerFunc&&(this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc),this._connectedTransformNode=null),this._clearTimeoutsAndObservers())}isReady(){return this._isReadyToPlay}getClassName(){return"Sound"}_audioBufferLoaded(e){i.audioEngine?.audioContext&&(this._audioBuffer=e,this._isReadyToPlay=!0,this.autoplay&&this.play(0,this._offset,this._length),this._readyToPlayCallback&&this._readyToPlayCallback())}_soundLoaded(e){i.audioEngine?.audioContext&&i.audioEngine.audioContext.decodeAudioData(e,(e=>{this._audioBufferLoaded(e)}),(e=>{a.Error("Error while decoding audio data for: "+this.name+" / Error: "+e)}))}setAudioBuffer(e){i.audioEngine?.canUseWebAudio&&(this._audioBuffer=e,this._isReadyToPlay=!0)}updateOptions(e){e&&(this.loop=e.loop??this.loop,this.maxDistance=e.maxDistance??this.maxDistance,this.useCustomAttenuation=e.useCustomAttenuation??this.useCustomAttenuation,this.rolloffFactor=e.rolloffFactor??this.rolloffFactor,this.refDistance=e.refDistance??this.refDistance,this.distanceModel=e.distanceModel??this.distanceModel,this._playbackRate=e.playbackRate??this._playbackRate,this._length=e.length??void 0,this.spatialSound=e.spatialSound??this._spatialSound,this._setOffset(e.offset??void 0),this.setVolume(e.volume??this._volume),this._updateSpatialParameters(),this.isPlaying&&(this._streaming&&this._htmlAudioElement?(this._htmlAudioElement.playbackRate=this._playbackRate,this._htmlAudioElement.loop!==this.loop&&(this._htmlAudioElement.loop=this.loop)):this._soundSource&&(this._soundSource.playbackRate.value=this._playbackRate,this._soundSource.loop!==this.loop&&(this._soundSource.loop=this.loop),void 0!==this._offset&&this._soundSource.loopStart!==this._offset&&(this._soundSource.loopStart=this._offset),void 0!==this._length&&this._length!==this._soundSource.loopEnd&&(this._soundSource.loopEnd=(0|this._offset)+this._length))))}_createSpatialParameters(){i.audioEngine?.canUseWebAudio&&i.audioEngine.audioContext&&(this._scene.headphone&&(this._panningModel="HRTF"),this._soundPanner=this._soundPanner??i.audioEngine.audioContext.createPanner(),this._soundPanner&&this._outputAudioNode&&(this._updateSpatialParameters(),this._soundPanner.connect(this._outputAudioNode),this._inputAudioNode=this._soundPanner))}_disableSpatialSound(){this._spatialSound&&(this._inputAudioNode=this._soundGain,this._soundPanner?.disconnect(),this._soundPanner=null,this._spatialSound=!1)}_updateSpatialParameters(){this._spatialSound&&(this._soundPanner?this.useCustomAttenuation?(this._soundPanner.distanceModel="linear",this._soundPanner.maxDistance=Number.MAX_VALUE,this._soundPanner.refDistance=1,this._soundPanner.rolloffFactor=1,this._soundPanner.panningModel=this._panningModel):(this._soundPanner.distanceModel=this.distanceModel,this._soundPanner.maxDistance=this.maxDistance,this._soundPanner.refDistance=this.refDistance,this._soundPanner.rolloffFactor=this.rolloffFactor,this._soundPanner.panningModel=this._panningModel):this._createSpatialParameters())}switchPanningModelToHRTF(){this._panningModel="HRTF",this._switchPanningModel()}switchPanningModelToEqualPower(){this._panningModel="equalpower",this._switchPanningModel()}_switchPanningModel(){i.audioEngine?.canUseWebAudio&&this._spatialSound&&this._soundPanner&&(this._soundPanner.panningModel=this._panningModel)}connectToSoundTrackAudioNode(e){i.audioEngine?.canUseWebAudio&&this._outputAudioNode&&(this._isOutputConnected&&this._outputAudioNode.disconnect(),this._outputAudioNode.connect(e),this._isOutputConnected=!0)}setDirectionalCone(e,t,i){t<e?a.Error("setDirectionalCone(): outer angle of the cone must be superior or equal to the inner angle."):(this._coneInnerAngle=e,this._coneOuterAngle=t,this._coneOuterGain=i,this._isDirectional=!0,this.isPlaying&&this.loop&&(this.stop(),this.play(0,this._offset,this._length)))}get directionalConeInnerAngle(){return this._coneInnerAngle}set directionalConeInnerAngle(e){if(e!=this._coneInnerAngle){if(this._coneOuterAngle<e)return void a.Error("directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.");this._coneInnerAngle=e,i.audioEngine?.canUseWebAudio&&this._spatialSound&&this._soundPanner&&(this._soundPanner.coneInnerAngle=this._coneInnerAngle)}}get directionalConeOuterAngle(){return this._coneOuterAngle}set directionalConeOuterAngle(e){if(e!=this._coneOuterAngle){if(e<this._coneInnerAngle)return void a.Error("directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.");this._coneOuterAngle=e,i.audioEngine?.canUseWebAudio&&this._spatialSound&&this._soundPanner&&(this._soundPanner.coneOuterAngle=this._coneOuterAngle)}}setPosition(e){e.equals(this._position)||(this._position.copyFrom(e),i.audioEngine?.canUseWebAudio&&this._spatialSound&&this._soundPanner&&!isNaN(this._position.x)&&!isNaN(this._position.y)&&!isNaN(this._position.z)&&(this._soundPanner.positionX.value=this._position.x,this._soundPanner.positionY.value=this._position.y,this._soundPanner.positionZ.value=this._position.z))}setLocalDirectionToMesh(e){this._localDirection=e,i.audioEngine?.canUseWebAudio&&this._connectedTransformNode&&this.isPlaying&&this._updateDirection()}_updateDirection(){if(!this._connectedTransformNode||!this._soundPanner)return;const e=this._connectedTransformNode.getWorldMatrix(),t=s.TransformNormal(this._localDirection,e);t.normalize(),this._soundPanner.orientationX.value=t.x,this._soundPanner.orientationY.value=t.y,this._soundPanner.orientationZ.value=t.z}updateDistanceFromListener(){if(i.audioEngine?.canUseWebAudio&&this._connectedTransformNode&&this.useCustomAttenuation&&this._soundGain&&this._scene.activeCamera){const e=this._scene.audioListenerPositionProvider?this._connectedTransformNode.position.subtract(this._scene.audioListenerPositionProvider()).length():this._connectedTransformNode.getDistanceToCamera(this._scene.activeCamera);this._soundGain.gain.value=this._customAttenuationFunction(this._volume,e,this.maxDistance,this.refDistance,this.rolloffFactor)}}setAttenuationFunction(e){this._customAttenuationFunction=e}play(e,t,n){if(this._isReadyToPlay&&this._scene.audioEnabled&&i.audioEngine?.audioContext)try{this._clearTimeoutsAndObservers();let s=e?i.audioEngine?.audioContext.currentTime+e:i.audioEngine?.audioContext.currentTime;if(this._soundSource&&this._streamingSource||this._spatialSound&&this._soundPanner&&(isNaN(this._position.x)||isNaN(this._position.y)||isNaN(this._position.z)||(this._soundPanner.positionX.value=this._position.x,this._soundPanner.positionY.value=this._position.y,this._soundPanner.positionZ.value=this._position.z),this._isDirectional&&(this._soundPanner.coneInnerAngle=this._coneInnerAngle,this._soundPanner.coneOuterAngle=this._coneOuterAngle,this._soundPanner.coneOuterGain=this._coneOuterGain,this._connectedTransformNode?this._updateDirection():this._soundPanner.setOrientation(this._localDirection.x,this._localDirection.y,this._localDirection.z))),this._streaming){if(this._streamingSource||(this._streamingSource=i.audioEngine.audioContext.createMediaElementSource(this._htmlAudioElement),this._htmlAudioElement.onended=()=>{this._onended()},this._htmlAudioElement.playbackRate=this._playbackRate),this._streamingSource.disconnect(),this._inputAudioNode&&this._streamingSource.connect(this._inputAudioNode),this._htmlAudioElement){const e=()=>{if(i.audioEngine?.unlocked){const t=this._htmlAudioElement.play();void 0!==t&&t.catch((()=>{i.audioEngine?.lock(),(this.loop||this.autoplay)&&(this._audioUnlockedObserver=i.audioEngine?.onAudioUnlockedObservable.addOnce((()=>{e()})))}))}else(this.loop||this.autoplay)&&(this._audioUnlockedObserver=i.audioEngine?.onAudioUnlockedObservable.addOnce((()=>{e()})))};e()}}else{const o=()=>{if(i.audioEngine?.audioContext){if(n=n||this._length,void 0!==t&&this._setOffset(t),this._soundSource){const e=this._soundSource;e.onended=()=>{e.disconnect()}}if(this._soundSource=i.audioEngine?.audioContext.createBufferSource(),this._soundSource&&this._inputAudioNode){this._soundSource.buffer=this._audioBuffer,this._soundSource.connect(this._inputAudioNode),this._soundSource.loop=this.loop,void 0!==t&&(this._soundSource.loopStart=t),void 0!==n&&(this._soundSource.loopEnd=(0|t)+n),this._soundSource.playbackRate.value=this._playbackRate,this._soundSource.onended=()=>{this._onended()},s=e?i.audioEngine?.audioContext.currentTime+e:i.audioEngine.audioContext.currentTime;const o=((this.isPaused?this.currentTime:0)+(this._offset??0))%this._soundSource.buffer.duration;this._soundSource.start(s,o,this.loop?void 0:n)}}};"suspended"===i.audioEngine?.audioContext.state?this._tryToPlayTimeout=setTimeout((()=>{"suspended"===i.audioEngine?.audioContext.state?(i.audioEngine.lock(),(this.loop||this.autoplay)&&(this._audioUnlockedObserver=i.audioEngine.onAudioUnlockedObservable.addOnce((()=>{o()})))):o()}),500):o()}this._startTime=s,this.isPlaying=!0,this.isPaused=!1}catch(e){a.Error("Error while trying to play audio: "+this.name+", "+e.message)}}_onended(){this.isPlaying=!1,this._startTime=0,this._currentTime=0,this.onended&&this.onended(),this.onEndedObservable.notifyObservers(this)}stop(e){if(this.isPlaying)if(this._clearTimeoutsAndObservers(),this._streaming)this._htmlAudioElement?(this._htmlAudioElement.pause(),this._htmlAudioElement.currentTime>0&&(this._htmlAudioElement.currentTime=0)):this._streamingSource.disconnect(),this.isPlaying=!1;else if(i.audioEngine?.audioContext&&this._soundSource){const t=e?i.audioEngine.audioContext.currentTime+e:void 0;this._soundSource.onended=()=>{this.isPlaying=!1,this.isPaused=!1,this._startTime=0,this._currentTime=0,this._soundSource&&(this._soundSource.onended=()=>{}),this._onended()},this._soundSource.stop(t)}else this.isPlaying=!1;else this.isPaused&&(this.isPaused=!1,this._startTime=0,this._currentTime=0)}pause(){this.isPlaying&&(this._clearTimeoutsAndObservers(),this._streaming?(this._htmlAudioElement?this._htmlAudioElement.pause():this._streamingSource.disconnect(),this.isPlaying=!1,this.isPaused=!0):i.audioEngine?.audioContext&&this._soundSource&&(this._soundSource.onended=()=>{},this._soundSource.stop(),this.isPlaying=!1,this.isPaused=!0,this._currentTime+=i.audioEngine.audioContext.currentTime-this._startTime))}setVolume(e,t){i.audioEngine?.canUseWebAudio&&this._soundGain&&(t&&i.audioEngine.audioContext?(this._soundGain.gain.cancelScheduledValues(i.audioEngine.audioContext.currentTime),this._soundGain.gain.setValueAtTime(this._soundGain.gain.value,i.audioEngine.audioContext.currentTime),this._soundGain.gain.linearRampToValueAtTime(e,i.audioEngine.audioContext.currentTime+t)):this._soundGain.gain.value=e),this._volume=e}setPlaybackRate(e){this._playbackRate=e,this.isPlaying&&(this._streaming&&this._htmlAudioElement?this._htmlAudioElement.playbackRate=this._playbackRate:this._soundSource&&(this._soundSource.playbackRate.value=this._playbackRate))}getPlaybackRate(){return this._playbackRate}getVolume(){return this._volume}attachToMesh(e){this._connectedTransformNode&&this._registerFunc&&(this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc),this._registerFunc=null),this._connectedTransformNode=e,this._spatialSound||(this._spatialSound=!0,this._createSpatialParameters(),this.isPlaying&&this.loop&&(this.stop(),this.play(0,this._offset,this._length))),this._onRegisterAfterWorldMatrixUpdate(this._connectedTransformNode),this._registerFunc=e=>this._onRegisterAfterWorldMatrixUpdate(e),this._connectedTransformNode.registerAfterWorldMatrixUpdate(this._registerFunc)}detachFromMesh(){this._connectedTransformNode&&this._registerFunc&&(this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc),this._registerFunc=null,this._connectedTransformNode=null)}_onRegisterAfterWorldMatrixUpdate(e){if(e.getBoundingInfo){const t=e.getBoundingInfo();this.setPosition(t.boundingSphere.centerWorld)}else this.setPosition(e.absolutePosition);i.audioEngine?.canUseWebAudio&&this._isDirectional&&this.isPlaying&&this._updateDirection()}clone(){if(this._streaming)return null;{const e=()=>{this._isReadyToPlay?(i._audioBuffer=this.getAudioBuffer(),i._isReadyToPlay=!0,i.autoplay&&i.play(0,this._offset,this._length)):setTimeout(e,300)},t={autoplay:this.autoplay,loop:this.loop,volume:this._volume,spatialSound:this._spatialSound,maxDistance:this.maxDistance,useCustomAttenuation:this.useCustomAttenuation,rolloffFactor:this.rolloffFactor,refDistance:this.refDistance,distanceModel:this.distanceModel},i=new _(this.name+"_cloned",new ArrayBuffer(0),this._scene,null,t);return this.useCustomAttenuation&&i.setAttenuationFunction(this._customAttenuationFunction),i.setPosition(this._position),i.setPlaybackRate(this._playbackRate),e(),i}}getAudioBuffer(){return this._audioBuffer}getSoundSource(){return this._soundSource}getSoundGain(){return this._soundGain}serialize(){const e={name:this.name,url:this._url,autoplay:this.autoplay,loop:this.loop,volume:this._volume,spatialSound:this._spatialSound,maxDistance:this.maxDistance,rolloffFactor:this.rolloffFactor,refDistance:this.refDistance,distanceModel:this.distanceModel,playbackRate:this._playbackRate,panningModel:this._panningModel,soundTrackId:this.soundTrackId,metadata:this.metadata};return this._spatialSound&&(this._connectedTransformNode&&(e.connectedMeshId=this._connectedTransformNode.id),e.position=this._position.asArray(),e.refDistance=this.refDistance,e.distanceModel=this.distanceModel,e.isDirectional=this._isDirectional,e.localDirectionToMesh=this._localDirection.asArray(),e.coneInnerAngle=this._coneInnerAngle,e.coneOuterAngle=this._coneOuterAngle,e.coneOuterGain=this._coneOuterGain),e}static Parse(e,t,i,n){const o=e.name;let a;a=e.url?i+e.url:i+o;const r={autoplay:e.autoplay,loop:e.loop,volume:e.volume,spatialSound:e.spatialSound,maxDistance:e.maxDistance,rolloffFactor:e.rolloffFactor,refDistance:e.refDistance,distanceModel:e.distanceModel,playbackRate:e.playbackRate};let u;if(n){const e=()=>{n._isReadyToPlay?(u._audioBuffer=n.getAudioBuffer(),u._isReadyToPlay=!0,u.autoplay&&u.play(0,u._offset,u._length)):setTimeout(e,300)};u=new _(o,new ArrayBuffer(0),t,null,r),e()}else u=new _(o,a,t,(()=>{t.removePendingData(u)}),r),t.addPendingData(u);if(e.position){const t=s.FromArray(e.position);u.setPosition(t)}if(e.isDirectional&&(u.setDirectionalCone(e.coneInnerAngle||360,e.coneOuterAngle||360,e.coneOuterGain||0),e.localDirectionToMesh)){const t=s.FromArray(e.localDirectionToMesh);u.setLocalDirectionToMesh(t)}if(e.connectedMeshId){const i=t.getMeshById(e.connectedMeshId);i&&u.attachToMesh(i)}return e.metadata&&(u.metadata=e.metadata),u}_setOffset(e){this._offset!==e&&(this.isPaused&&(this.stop(),this.isPaused=!1),this._offset=e)}_clearTimeoutsAndObservers(){this._tryToPlayTimeout&&(clearTimeout(this._tryToPlayTimeout),this._tryToPlayTimeout=null),this._audioUnlockedObserver&&(i.audioEngine?.onAudioUnlockedObservable.remove(this._audioUnlockedObserver),this._audioUnlockedObserver=null)}}_._SceneComponentInitialization=t=>{throw e("AudioSceneComponent")},t("BABYLON.Sound",_);class m{constructor(e,t,i){if(this.loop=!1,this._coneInnerAngle=360,this._coneOuterAngle=360,this._volume=1,this.isPlaying=!1,this.isPaused=!1,this._sounds=[],this._weights=[],t.length!==i.length)throw new Error("Sounds length does not equal weights length");this.loop=e,this._weights=i;let n=0;for(const e of i)n+=e;const s=n>0?1/n:0;for(let e=0;e<this._weights.length;e++)this._weights[e]*=s;this._sounds=t;for(const e of this._sounds)e.onEndedObservable.add((()=>{this._onended()}))}get directionalConeInnerAngle(){return this._coneInnerAngle}set directionalConeInnerAngle(e){if(e!==this._coneInnerAngle){if(this._coneOuterAngle<e)return void a.Error("directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.");this._coneInnerAngle=e;for(const t of this._sounds)t.directionalConeInnerAngle=e}}get directionalConeOuterAngle(){return this._coneOuterAngle}set directionalConeOuterAngle(e){if(e!==this._coneOuterAngle){if(e<this._coneInnerAngle)return void a.Error("directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.");this._coneOuterAngle=e;for(const t of this._sounds)t.directionalConeOuterAngle=e}}get volume(){return this._volume}set volume(e){if(e!==this._volume)for(const t of this._sounds)t.setVolume(e)}_onended(){void 0!==this._currentIndex&&(this._sounds[this._currentIndex].autoplay=!1),this.loop&&this.isPlaying?this.play():this.isPlaying=!1}pause(){this.isPaused=!0,void 0!==this._currentIndex&&this._sounds[this._currentIndex].pause()}stop(){this.isPlaying=!1,void 0!==this._currentIndex&&this._sounds[this._currentIndex].stop()}play(e){if(!this.isPaused){this.stop();const e=Math.random();let t=0;for(let i=0;i<this._weights.length;i++)if(t+=this._weights[i],e<=t){this._currentIndex=i;break}}const t=this._sounds[this._currentIndex];t.isReady()?t.play(0,this.isPaused?void 0:e):t.autoplay=!0,this.isPlaying=!0,this.isPaused=!1}}const p="MSFT_audio_emitter";class g{constructor(e){this.name=p,this._loader=e,this.enabled=this._loader.isExtensionUsed(p)}dispose(){this._loader=null,this._clips=null,this._emitters=null}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._clips=t.clips,this._emitters=t.emitters,d.Assign(this._clips),d.Assign(this._emitters)}}loadSceneAsync(e,t){return h.LoadExtensionAsync(e,t,this.name,((i,n)=>{const s=new Array;s.push(this._loader.loadSceneAsync(e,t));for(const e of n.emitters){const t=d.Get(`${i}/emitters`,this._emitters,e);if(null!=t.refDistance||null!=t.maxDistance||null!=t.rolloffFactor||null!=t.distanceModel||null!=t.innerAngle||null!=t.outerAngle)throw new Error(`${i}: Direction or Distance properties are not allowed on emitters attached to a scene`);s.push(this._loadEmitterAsync(`${i}/emitters/${t.index}`,t))}return Promise.all(s).then((()=>{}))}))}loadNodeAsync(e,t,i){return h.LoadExtensionAsync(e,t,this.name,((e,n)=>{const o=new Array;return this._loader.loadNodeAsync(e,t,(t=>{for(const i of n.emitters){const n=d.Get(`${e}/emitters`,this._emitters,i);o.push(this._loadEmitterAsync(`${e}/emitters/${n.index}`,n).then((()=>{for(const e of n._babylonSounds)e.attachToMesh(t),null==n.innerAngle&&null==n.outerAngle||(e.setLocalDirectionToMesh(s.Forward()),e.setDirectionalCone(2*r.ToDegrees(null==n.innerAngle?Math.PI:n.innerAngle),2*r.ToDegrees(null==n.outerAngle?Math.PI:n.outerAngle),0))})))}i(t)})).then((e=>Promise.all(o).then((()=>e))))}))}loadAnimationAsync(e,t){return h.LoadExtensionAsync(e,t,this.name,((i,n)=>this._loader.loadAnimationAsync(e,t).then((s=>{const o=new Array;d.Assign(n.events);for(const a of n.events)o.push(this._loadAnimationEventAsync(`${i}/events/${a.index}`,e,t,a,s));return Promise.all(o).then((()=>s))}))))}_loadClipAsync(e,t){if(t._objectURL)return t._objectURL;let i;if(t.uri)i=this._loader.loadUriAsync(e,t,t.uri);else{const n=d.Get(`${e}/bufferView`,this._loader.gltf.bufferViews,t.bufferView);i=this._loader.loadBufferViewAsync(`/bufferViews/${n.index}`,n)}return t._objectURL=i.then((e=>URL.createObjectURL(new Blob([e],{type:t.mimeType})))),t._objectURL}_loadEmitterAsync(e,t){if(t._babylonSounds=t._babylonSounds||[],!t._babylonData){const e=new Array,i=t.name||`emitter${t.index}`,n={loop:!1,autoplay:!1,volume:null==t.volume?1:t.volume};for(let s=0;s<t.clips.length;s++){const o=`/extensions/${this.name}/clips`,a=d.Get(o,this._clips,t.clips[s].clip);e.push(this._loadClipAsync(`${o}/${t.clips[s].clip}`,a).then((e=>{const o=t._babylonSounds[s]=new _(i,e,this._loader.babylonScene,null,n);o.refDistance=t.refDistance||1,o.maxDistance=t.maxDistance||256,o.rolloffFactor=t.rolloffFactor||1,o.distanceModel=t.distanceModel||"exponential"})))}const s=Promise.all(e).then((()=>{const e=t.clips.map((e=>e.weight||1)),i=new m(t.loop||!1,t._babylonSounds,e);t.innerAngle&&(i.directionalConeInnerAngle=2*r.ToDegrees(t.innerAngle)),t.outerAngle&&(i.directionalConeOuterAngle=2*r.ToDegrees(t.outerAngle)),t.volume&&(i.volume=t.volume),t._babylonData.sound=i}));t._babylonData={loaded:s}}return t._babylonData.loaded}_getEventAction(e,t,i,n,s){switch(i){case"play":return e=>{const i=(s||0)+(e-n);t.play(i)};case"stop":return()=>{t.stop()};case"pause":return()=>{t.pause()};default:throw new Error(`${e}: Unsupported action ${i}`)}}_loadAnimationEventAsync(e,t,i,n,s){if(0==s.targetedAnimations.length)return Promise.resolve();const o=s.targetedAnimations[0],a=n.emitter,r=d.Get(`/extensions/${this.name}/emitters`,this._emitters,a);return this._loadEmitterAsync(e,r).then((()=>{const t=r._babylonData.sound;if(t){const i=new c(n.time,this._getEventAction(e,t,n.action,n.time,n.startOffset));o.animation.addEvent(i),s.onAnimationGroupEndObservable.add((()=>{t.stop()})),s.onAnimationGroupPauseObservable.add((()=>{t.pause()}))}}))}}u(p),l(p,!0,(e=>new g(e)));export{g as MSFT_audio_emitter};
|
|
2
|
+
//# sourceMappingURL=MSFT_audio_emitter-CGjUSgI2.esm.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MSFT_audio_emitter-CGjUSgI2.esm.min.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":["AnimationEvent","constructor","frame","action","onlyOnce","this","isDone","_clone","Sound","loop","_loop","value","updateOptions","currentTime","_htmlAudioElement","AbstractEngine","audioEngine","audioContext","isPlaying","isPaused","timeSinceLastStart","_startTime","_currentTime","spatialSound","_spatialSound","newValue","wasPlaying","pause","_updateSpatialParameters","_disableSpatialSound","play","name","urlOrArrayBuffer","scene","readyToPlayCallback","options","autoplay","useCustomAttenuation","refDistance","rolloffFactor","maxDistance","distanceModel","metadata","onEndedObservable","Observable","_panningModel","_playbackRate","_streaming","_position","Vector3","Zero","_localDirection","_volume","_isReadyToPlay","_isDirectional","_coneInnerAngle","_coneOuterAngle","_coneOuterGain","_isOutputConnected","_urlType","EngineStore","LastCreatedScene","_scene","_SceneComponentInitialization","_readyToPlayCallback","_customAttenuationFunction","currentVolume","currentDistance","undefined","volume","playbackRate","streaming","_length","length","_offset","offset","canUseWebAudio","_soundGain","createGain","gain","_inputAudioNode","_outputAudioNode","_createSpatialParameters","mainSoundTrack","addSound","validParameter","_url","ArrayBuffer","HTMLMediaElement","MediaStream","AudioBuffer","Array","isArray","urls","codecSupportedFound","_streamingSource","createMediaElementSource","createMediaStreamSource","byteLength","_soundLoaded","_audioBufferLoaded","push","i","url","skipCodecCheck","indexOf","isMP3supported","isOGGsupported","Audio","controls","Tools","SetCorsBehavior","preload","addEventListener","document","body","appendChild","load","_loadFile","data","exception","Logger","Error","status","removeSound","setTimeout","ex","WarnedWebAudioUnsupported","dispose","stop","soundTrackId","soundTracks","disconnect","_soundPanner","_soundSource","_audioBuffer","src","removeChild","_connectedTransformNode","_registerFunc","unregisterAfterWorldMatrixUpdate","_clearTimeoutsAndObservers","isReady","getClassName","buffer","audioData","decodeAudioData","err","setAudioBuffer","audioBuffer","_setOffset","setVolume","loopStart","loopEnd","headphone","createPanner","connect","Number","MAX_VALUE","panningModel","switchPanningModelToHRTF","_switchPanningModel","switchPanningModelToEqualPower","connectToSoundTrackAudioNode","soundTrackAudioNode","setDirectionalCone","coneInnerAngle","coneOuterAngle","coneOuterGain","directionalConeInnerAngle","directionalConeOuterAngle","setPosition","newPosition","equals","copyFrom","isNaN","x","y","z","positionX","positionY","positionZ","setLocalDirectionToMesh","newLocalDirection","_updateDirection","mat","getWorldMatrix","direction","TransformNormal","normalize","orientationX","orientationY","orientationZ","updateDistanceFromListener","activeCamera","distance","audioListenerPositionProvider","position","subtract","getDistanceToCamera","setAttenuationFunction","callback","time","audioEnabled","startTime","setOrientation","onended","_onended","tryToPlay","unlocked","playPromise","catch","lock","_audioUnlockedObserver","onAudioUnlockedObservable","addOnce","oldSource","createBufferSource","actualOffset","duration","start","state","_tryToPlayTimeout","message","notifyObservers","stopTime","newVolume","cancelScheduledValues","setValueAtTime","linearRampToValueAtTime","setPlaybackRate","newPlaybackRate","getPlaybackRate","getVolume","attachToMesh","transformNode","_onRegisterAfterWorldMatrixUpdate","registerAfterWorldMatrixUpdate","detachFromMesh","node","getBoundingInfo","boundingInfo","boundingSphere","centerWorld","absolutePosition","clone","setBufferAndRun","clonedSound","getAudioBuffer","currentOptions","getSoundSource","getSoundGain","serialize","serializationObject","connectedMeshId","id","asArray","isDirectional","localDirectionToMesh","Parse","parsedSound","rootUrl","sourceSound","soundName","soundUrl","newSound","removePendingData","addPendingData","soundPosition","FromArray","connectedMesh","getMeshById","clearTimeout","remove","_","_WarnImport","RegisterClass","WeightedSound","sounds","weights","_sounds","_weights","weightSum","weight","invWeightSum","sound","add","_currentIndex","startOffset","randomValue","Math","random","total","NAME","MSFT_audio_emitter","loader","_loader","enabled","isExtensionUsed","_clips","_emitters","onLoading","extensions","gltf","extension","clips","emitters","ArrayItem","Assign","loadSceneAsync","context","GLTFLoader","LoadExtensionAsync","extensionContext","promises","emitterIndex","emitter","Get","innerAngle","outerAngle","_loadEmitterAsync","index","Promise","all","then","loadNodeAsync","assign","babylonMesh","_babylonSounds","Forward","ToDegrees","PI","loadAnimationAsync","animation","babylonAnimationGroup","events","event","_loadAnimationEventAsync","_loadClipAsync","clip","_objectURL","promise","uri","loadUriAsync","bufferView","bufferViews","loadBufferViewAsync","URL","createObjectURL","Blob","type","mimeType","_babylonData","clipPromises","clipContext","objectURL","babylonScene","map","weightedSound","loaded","_getEventAction","currentFrame","frameOffset","animationContext","targetedAnimations","resolve","babylonAnimation","babylonAnimationEvent","addEvent","onAnimationGroupEndObservable","onAnimationGroupPauseObservable","unregisterGLTFExtension","registerGLTFExtension"],"mappings":"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"}
|