@woosh/meep-engine 2.154.0 → 2.156.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +1 -1
  2. package/build/bundle-worker-image-decoder.js +1 -1
  3. package/build/bundle-worker-terrain.js +1 -1
  4. package/editor/view/ecs/ComponentControlView.d.ts +0 -9
  5. package/editor/view/ecs/ComponentControlView.js +2 -98
  6. package/package.json +1 -1
  7. package/src/core/binary/32BitEncoder.js +1 -1
  8. package/src/core/binary/to_half_float_uint16.js +3 -3
  9. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
  10. package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +275 -253
  11. package/src/core/cache/Cache.d.ts.map +1 -1
  12. package/src/core/cache/Cache.js +7 -0
  13. package/src/core/cache/FrequencySketch.d.ts.map +1 -1
  14. package/src/core/cache/FrequencySketch.js +8 -4
  15. package/src/core/clipboard/obtainClipBoard.d.ts +6 -0
  16. package/src/core/clipboard/obtainClipBoard.d.ts.map +1 -0
  17. package/src/core/clipboard/obtainClipBoard.js +29 -0
  18. package/src/core/clipboard/safeClipboardReadText.d.ts +6 -0
  19. package/src/core/clipboard/safeClipboardReadText.d.ts.map +1 -0
  20. package/src/core/clipboard/safeClipboardReadText.js +55 -0
  21. package/src/core/clipboard/safeClipboardWriteText.d.ts +8 -0
  22. package/src/core/clipboard/safeClipboardWriteText.d.ts.map +1 -0
  23. package/src/core/clipboard/safeClipboardWriteText.js +23 -0
  24. package/src/core/collection/array/array_quick_sort_by_lookup_map.js +1 -1
  25. package/src/core/collection/array/array_set_diff_sorting.d.ts.map +1 -1
  26. package/src/core/collection/array/array_set_diff_sorting.js +4 -1
  27. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  28. package/src/core/collection/array/array_shuffle.js +30 -27
  29. package/src/core/collection/array/binarySearchLowIndex.d.ts.map +1 -1
  30. package/src/core/collection/array/binarySearchLowIndex.js +4 -3
  31. package/src/core/collection/array/typed/array_buffer_hash.js +1 -1
  32. package/src/core/collection/array/typed/is_typed_array_equals.d.ts.map +1 -1
  33. package/src/core/collection/array/typed/is_typed_array_equals.js +12 -2
  34. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  35. package/src/core/collection/heap/BinaryHeap.js +12 -2
  36. package/src/core/collection/queue/Deque.d.ts.map +1 -1
  37. package/src/core/collection/queue/Deque.js +10 -8
  38. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  39. package/src/core/collection/table/RowFirstTable.js +4 -2
  40. package/src/core/collection/table/RowFirstTableSpec.js +2 -2
  41. package/src/core/color/operations/color_lerp.d.ts.map +1 -1
  42. package/src/core/color/operations/color_lerp.js +10 -3
  43. package/src/core/color/rgb2uint32.js +1 -1
  44. package/src/core/color/rgbe9995_to_rgb.js +1 -1
  45. package/src/core/function/objectsEqual.d.ts.map +1 -1
  46. package/src/core/function/objectsEqual.js +2 -1
  47. package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
  48. package/src/core/geom/2d/aabb/AABB2.js +12 -11
  49. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.d.ts.map +1 -1
  50. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.js +30 -4
  51. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +1 -1
  52. package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +6 -2
  53. package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
  54. package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +388 -386
  55. package/src/core/geom/2d/hash-grid/shg_query_elements_line.d.ts.map +1 -1
  56. package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +8 -3
  57. package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
  58. package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +9 -1
  59. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +3 -1
  60. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +1 -1
  61. package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +3 -1
  62. package/src/core/geom/2d/quad-tree-binary/QuadTree.js +714 -714
  63. package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
  64. package/src/core/geom/2d/r-tree/StaticR2Tree.js +5 -4
  65. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +1 -1
  66. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +33 -29
  67. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +1 -1
  68. package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +3 -1
  69. package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.d.ts.map +1 -1
  70. package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js +10 -7
  71. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.d.ts.map +1 -1
  72. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +30 -9
  73. package/src/core/geom/3d/aabb/compute_aabb_from_points.js +3 -3
  74. package/src/core/geom/3d/box/box3_raycast.d.ts +37 -0
  75. package/src/core/geom/3d/box/box3_raycast.d.ts.map +1 -0
  76. package/src/core/geom/3d/box/box3_raycast.js +81 -0
  77. package/src/core/geom/3d/capsule/capsule_raycast.d.ts +35 -0
  78. package/src/core/geom/3d/capsule/capsule_raycast.d.ts.map +1 -0
  79. package/src/core/geom/3d/capsule/capsule_raycast.js +93 -0
  80. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +1 -1
  81. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +4 -0
  82. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  83. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
  84. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +3 -2
  85. package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +1 -1
  86. package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +12 -2
  87. package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +2 -2
  88. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts +1 -1
  89. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.d.ts.map +1 -1
  90. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.js +19 -13
  91. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts.map +1 -1
  92. package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.js +3 -2
  93. package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +3 -2
  94. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
  95. package/src/core/geom/3d/shape/MeshShape3D.js +7 -0
  96. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  97. package/src/core/geom/3d/shape/UnionShape3D.js +3 -2
  98. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -1
  99. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +153 -148
  100. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.d.ts.map +1 -1
  101. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.js +7 -0
  102. package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.d.ts.map +1 -1
  103. package/src/core/geom/3d/sphere/harmonics/sh3_sample_by_direction.js +13 -10
  104. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +1 -1
  105. package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +2 -2
  106. package/src/core/geom/3d/sphere/sphere_raycast.d.ts +33 -0
  107. package/src/core/geom/3d/sphere/sphere_raycast.d.ts.map +1 -0
  108. package/src/core/geom/3d/sphere/sphere_raycast.js +47 -0
  109. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +24 -0
  110. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +1 -0
  111. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +39 -0
  112. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.d.ts.map +1 -1
  113. package/src/core/geom/3d/tetrahedra/triangle/trace_triangular_depth_map.js +4 -2
  114. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +3 -3
  115. package/src/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +1 -1
  116. package/src/core/geom/3d/topology/tm_vertex_compute_normal.d.ts.map +1 -1
  117. package/src/core/geom/3d/topology/tm_vertex_compute_normal.js +4 -2
  118. package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +1 -1
  119. package/src/core/geom/3d/util/make_justified_point_grid.js +18 -10
  120. package/src/core/geom/ConicRay.d.ts.map +1 -1
  121. package/src/core/geom/ConicRay.js +11 -13
  122. package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +1 -1
  123. package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +19 -4
  124. package/src/core/geom/vec3/v3_array_copy.d.ts +3 -3
  125. package/src/core/geom/vec3/v3_array_copy.d.ts.map +1 -1
  126. package/src/core/geom/vec3/v3_array_copy.js +2 -2
  127. package/src/core/geom/vec3/v3_cross.d.ts +17 -0
  128. package/src/core/geom/vec3/v3_cross.d.ts.map +1 -0
  129. package/src/core/geom/vec3/v3_cross.js +20 -0
  130. package/src/core/geom/vec3/v3_orthonormal_matrix_from_normal.d.ts.map +1 -0
  131. package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.js +1 -1
  132. package/src/core/geom/vec3/v3_subtract.d.ts +16 -0
  133. package/src/core/geom/vec3/v3_subtract.d.ts.map +1 -0
  134. package/src/core/geom/vec3/v3_subtract.js +19 -0
  135. package/src/core/graph/coloring/colorizeGraph.js +2 -2
  136. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  137. package/src/core/graph/csr/CSRGraph.js +325 -319
  138. package/src/core/graph/layout/CircleLayout.d.ts.map +1 -1
  139. package/src/core/graph/layout/CircleLayout.js +8 -6
  140. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -1
  141. package/src/core/graph/metis/native/refine/compute_kway_params.js +139 -138
  142. package/src/core/graph/mn_graph_coarsen.d.ts.map +1 -1
  143. package/src/core/graph/mn_graph_coarsen.js +4 -2
  144. package/src/core/graph/v2/NodeContainer.js +7 -7
  145. package/src/core/localization/LocalizationEngine.js +1 -1
  146. package/src/core/math/bell_membership_function.d.ts.map +1 -1
  147. package/src/core/math/bell_membership_function.js +3 -1
  148. package/src/core/math/complex/complex_add.d.ts +4 -4
  149. package/src/core/math/complex/complex_add.d.ts.map +1 -1
  150. package/src/core/math/complex/complex_add.js +3 -3
  151. package/src/core/math/complex/complex_div.d.ts +4 -4
  152. package/src/core/math/complex/complex_div.d.ts.map +1 -1
  153. package/src/core/math/complex/complex_div.js +3 -3
  154. package/src/core/math/complex/complex_mul.d.ts +4 -4
  155. package/src/core/math/complex/complex_mul.d.ts.map +1 -1
  156. package/src/core/math/complex/complex_mul.js +3 -3
  157. package/src/core/math/complex/complex_sub.d.ts +4 -4
  158. package/src/core/math/complex/complex_sub.d.ts.map +1 -1
  159. package/src/core/math/complex/complex_sub.js +3 -3
  160. package/src/core/math/idct_1d.d.ts +4 -4
  161. package/src/core/math/idct_1d.d.ts.map +1 -1
  162. package/src/core/math/idct_1d.js +3 -3
  163. package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
  164. package/src/core/math/noise/create_simplex_noise_2d.js +4 -2
  165. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  166. package/src/core/math/noise/sdnoise.js +12 -9
  167. package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
  168. package/src/core/math/physics/mie/compute_bhmie_optical_properties.js +94 -50
  169. package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts +3 -6
  170. package/src/core/math/physics/mie/lorenz_mie_coefs.d.ts.map +1 -1
  171. package/src/core/math/physics/mie/lorenz_mie_coefs.js +180 -157
  172. package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts +3 -4
  173. package/src/core/math/physics/mie/mie_ab_to_optical_properties.d.ts.map +1 -1
  174. package/src/core/math/physics/mie/mie_ab_to_optical_properties.js +47 -21
  175. package/src/core/math/random/randomIntegerBetween.d.ts.map +1 -1
  176. package/src/core/math/random/randomIntegerBetween.js +4 -1
  177. package/src/core/math/solveCubic.d.ts.map +1 -1
  178. package/src/core/math/solveCubic.js +95 -82
  179. package/src/core/math/spline/computeCatmullRomSplineUniformDistance.d.ts.map +1 -1
  180. package/src/core/math/spline/computeCatmullRomSplineUniformDistance.js +13 -0
  181. package/src/core/math/statistics/softmax.js +1 -1
  182. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +1 -0
  183. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  184. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +2 -1
  185. package/src/core/model/node-graph/visual/NodeVisualData.js +1 -1
  186. package/src/core/model/object/ImmutableObjectPool.d.ts +7 -0
  187. package/src/core/model/object/ImmutableObjectPool.d.ts.map +1 -1
  188. package/src/core/model/object/ImmutableObjectPool.js +20 -10
  189. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.d.ts.map +1 -1
  190. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +39 -2
  191. package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
  192. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -0
  193. package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
  194. package/src/core/parser/simple/readHexToken.js +6 -0
  195. package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
  196. package/src/core/primitives/numbers/number_pretty_print.js +4 -1
  197. package/src/core/primitives/strings/string_jaro_winkler.js +1 -1
  198. package/src/core/process/CompositeProcess.js +1 -1
  199. package/src/core/process/action/AsynchronousDelayAction.d.ts.map +1 -1
  200. package/src/core/process/action/AsynchronousDelayAction.js +3 -0
  201. package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
  202. package/src/core/process/executor/ConcurrentExecutor.js +3 -2
  203. package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
  204. package/src/core/process/task/util/randomCountTask.js +3 -1
  205. package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
  206. package/src/core/process/undo/ActionProcessor.js +5 -3
  207. package/src/core/process/worker/WorkerBuilder.js +3 -3
  208. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  209. package/src/engine/animation/curve/AnimationCurve.js +4 -2
  210. package/src/engine/control/first-person/DESIGN.md +1 -1
  211. package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts +55 -0
  212. package/src/engine/control/first-person/FirstPersonMotionPhase.d.ts.map +1 -0
  213. package/src/engine/control/first-person/FirstPersonMotionPhase.js +134 -0
  214. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +23 -2
  215. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  216. package/src/engine/control/first-person/FirstPersonPlayerController.js +1 -1
  217. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +168 -0
  218. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  219. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +115 -0
  220. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +71 -0
  221. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  222. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +255 -55
  223. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +82 -43
  224. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  225. package/src/engine/control/first-person/abilities/LedgeGrab.js +405 -213
  226. package/src/engine/control/first-person/abilities/Mantle.d.ts +6 -0
  227. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
  228. package/src/engine/control/first-person/abilities/Mantle.js +104 -45
  229. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts +61 -0
  230. package/src/engine/control/first-person/abilities/ScrambleUp.d.ts.map +1 -0
  231. package/src/engine/control/first-person/abilities/ScrambleUp.js +182 -0
  232. package/src/engine/control/first-person/math/jumpDynamics.d.ts +84 -0
  233. package/src/engine/control/first-person/math/jumpDynamics.d.ts.map +1 -0
  234. package/src/engine/control/first-person/math/jumpDynamics.js +108 -0
  235. package/src/engine/control/first-person/prototype_first_person_controller.js +45 -1
  236. package/src/engine/graphics/camera/testClippingPlaneComputation.js +1 -1
  237. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.d.ts.map +1 -1
  238. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +8 -0
  239. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +1 -1
  240. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
  241. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +1 -1
  242. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
  243. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  244. package/src/engine/graphics/sh3/path_tracer/texture/sample_material.js +1 -1
  245. package/src/engine/graphics/shadows/testShadowMapRendering.js +1 -1
  246. package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +208 -0
  247. package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +364 -0
  248. package/src/engine/physics/PLAN.md +6 -5
  249. package/src/engine/physics/constraint/solve_constraints.d.ts +4 -1
  250. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  251. package/src/engine/physics/constraint/solve_constraints.js +147 -33
  252. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  253. package/src/engine/physics/ecs/PhysicsSystem.js +1750 -1747
  254. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  255. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts +12 -8
  256. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +1 -1
  257. package/src/engine/physics/gjk/gjk_epa_penetration.js +447 -158
  258. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  259. package/src/engine/physics/narrowphase/convex_convex_manifold.js +22 -25
  260. package/src/engine/physics/narrowphase/convex_decomposition.d.ts +32 -13
  261. package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
  262. package/src/engine/physics/narrowphase/convex_decomposition.js +61 -65
  263. package/src/engine/physics/narrowphase/mesh_convex_hull.d.ts.map +1 -1
  264. package/src/engine/physics/narrowphase/mesh_convex_hull.js +13 -8
  265. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  266. package/src/engine/physics/narrowphase/refine_ray_concave.js +5 -3
  267. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
  268. package/src/engine/physics/narrowphase/refine_ray_hit.js +81 -78
  269. package/src/engine/sound/SoundEngine.d.ts.map +1 -1
  270. package/src/engine/sound/SoundEngine.js +28 -0
  271. package/src/engine/sound/dB2Volume.d.ts +1 -1
  272. package/src/engine/sound/dB2Volume.d.ts.map +1 -1
  273. package/src/engine/sound/dB2Volume.js +1 -1
  274. package/src/engine/sound/ecs/SoundController.d.ts +4 -0
  275. package/src/engine/sound/ecs/SoundController.d.ts.map +1 -1
  276. package/src/engine/sound/ecs/SoundController.js +4 -0
  277. package/src/engine/sound/ecs/SoundControllerSystem.d.ts +5 -0
  278. package/src/engine/sound/ecs/SoundControllerSystem.d.ts.map +1 -1
  279. package/src/engine/sound/ecs/SoundControllerSystem.js +5 -0
  280. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +69 -0
  281. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -0
  282. package/src/engine/sound/ecs/audio/AudioEmitter.js +83 -0
  283. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +97 -0
  284. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -0
  285. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +238 -0
  286. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +90 -0
  287. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -0
  288. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +324 -0
  289. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +59 -0
  290. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -0
  291. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +140 -0
  292. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts +16 -65
  293. package/src/engine/sound/ecs/emitter/SoundEmitter.d.ts.map +1 -1
  294. package/src/engine/sound/ecs/emitter/SoundEmitter.js +19 -224
  295. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts +26 -29
  296. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.d.ts.map +1 -1
  297. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +168 -135
  298. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts +36 -59
  299. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.d.ts.map +1 -1
  300. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +154 -390
  301. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts +20 -23
  302. package/src/engine/sound/ecs/emitter/SoundTrack.d.ts.map +1 -1
  303. package/src/engine/sound/ecs/emitter/SoundTrack.js +34 -152
  304. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +993 -0
  305. package/src/engine/sound/sopra/README.md +643 -7
  306. package/src/engine/sound/sopra/SopraEngine.d.ts +229 -0
  307. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -0
  308. package/src/engine/sound/sopra/SopraEngine.js +423 -0
  309. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts +26 -0
  310. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.d.ts.map +1 -0
  311. package/src/engine/sound/sopra/asset/AssetManagerBufferProvider.js +71 -0
  312. package/src/engine/sound/sopra/asset/BufferProvider.d.ts +24 -0
  313. package/src/engine/sound/sopra/asset/BufferProvider.d.ts.map +1 -0
  314. package/src/engine/sound/sopra/asset/BufferProvider.js +29 -0
  315. package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts +31 -0
  316. package/src/engine/sound/sopra/asset/StubBufferProvider.d.ts.map +1 -0
  317. package/src/engine/sound/sopra/asset/StubBufferProvider.js +58 -0
  318. package/src/engine/sound/sopra/definition/BusDefinition.d.ts +83 -0
  319. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -0
  320. package/src/engine/sound/sopra/definition/BusDefinition.js +142 -0
  321. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts +17 -0
  322. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.d.ts.map +1 -0
  323. package/src/engine/sound/sopra/definition/BusDefinitionSerializationAdapter.js +54 -0
  324. package/src/engine/sound/sopra/definition/DuckingRule.d.ts +71 -0
  325. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -0
  326. package/src/engine/sound/sopra/definition/DuckingRule.js +106 -0
  327. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts +18 -0
  328. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.d.ts.map +1 -0
  329. package/src/engine/sound/sopra/definition/DuckingRuleSerializationAdapter.js +31 -0
  330. package/src/engine/sound/sopra/definition/EventDescription.d.ts +132 -0
  331. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -0
  332. package/src/engine/sound/sopra/definition/EventDescription.js +259 -0
  333. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +17 -0
  334. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -0
  335. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +71 -0
  336. package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts +51 -0
  337. package/src/engine/sound/sopra/definition/MixerSnapshot.d.ts.map +1 -0
  338. package/src/engine/sound/sopra/definition/MixerSnapshot.js +83 -0
  339. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts +18 -0
  340. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.d.ts.map +1 -0
  341. package/src/engine/sound/sopra/definition/MixerSnapshotSerializationAdapter.js +39 -0
  342. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts +72 -0
  343. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -0
  344. package/src/engine/sound/sopra/definition/ParameterDefinition.js +117 -0
  345. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts +18 -0
  346. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.d.ts.map +1 -0
  347. package/src/engine/sound/sopra/definition/ParameterDefinitionSerializationAdapter.js +31 -0
  348. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts +14 -0
  349. package/src/engine/sound/sopra/definition/SopraPanningModel.d.ts.map +1 -0
  350. package/src/engine/sound/sopra/definition/SopraPanningModel.js +20 -0
  351. package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts +10 -0
  352. package/src/engine/sound/sopra/definition/VoiceStealMode.d.ts.map +1 -0
  353. package/src/engine/sound/sopra/definition/VoiceStealMode.js +18 -0
  354. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts +93 -0
  355. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts.map +1 -0
  356. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +109 -0
  357. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts +80 -0
  358. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -0
  359. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +181 -0
  360. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts +17 -0
  361. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  362. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClipSerializationAdapter.js +74 -0
  363. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts +34 -0
  364. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -0
  365. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +100 -0
  366. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +101 -0
  367. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -0
  368. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +230 -0
  369. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts +17 -0
  370. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  371. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClipSerializationAdapter.js +54 -0
  372. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts +103 -0
  373. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -0
  374. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +191 -0
  375. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts +18 -0
  376. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.d.ts.map +1 -0
  377. package/src/engine/sound/sopra/definition/clip/SampleAudioClipSerializationAdapter.js +39 -0
  378. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts +40 -0
  379. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts.map +1 -0
  380. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.js +91 -0
  381. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts +17 -0
  382. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  383. package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClipSerializationAdapter.js +42 -0
  384. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts +44 -0
  385. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.d.ts.map +1 -0
  386. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +77 -0
  387. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts +18 -0
  388. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.d.ts.map +1 -0
  389. package/src/engine/sound/sopra/definition/clip/SilenceAudioClipSerializationAdapter.js +27 -0
  390. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +65 -0
  391. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -0
  392. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +131 -0
  393. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts +17 -0
  394. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.d.ts.map +1 -0
  395. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClipSerializationAdapter.js +41 -0
  396. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +24 -0
  397. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -0
  398. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +24 -0
  399. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +70 -0
  400. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -0
  401. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +120 -0
  402. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts +18 -0
  403. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.d.ts.map +1 -0
  404. package/src/engine/sound/sopra/definition/effect/CompressorEffectSerializationAdapter.js +31 -0
  405. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +74 -0
  406. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -0
  407. package/src/engine/sound/sopra/definition/effect/EqEffect.js +128 -0
  408. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts +18 -0
  409. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.d.ts.map +1 -0
  410. package/src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js +29 -0
  411. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +49 -0
  412. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -0
  413. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +101 -0
  414. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts +18 -0
  415. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.d.ts.map +1 -0
  416. package/src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js +25 -0
  417. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts +31 -0
  418. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.d.ts.map +1 -0
  419. package/src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js +106 -0
  420. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +79 -0
  421. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -0
  422. package/src/engine/sound/sopra/runtime/BusGraph.js +227 -0
  423. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +144 -0
  424. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -0
  425. package/src/engine/sound/sopra/runtime/EventInstance.js +579 -0
  426. package/src/engine/sound/sopra/runtime/ParameterStore.d.ts +42 -0
  427. package/src/engine/sound/sopra/runtime/ParameterStore.d.ts.map +1 -0
  428. package/src/engine/sound/sopra/runtime/ParameterStore.js +98 -0
  429. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts +42 -0
  430. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.d.ts.map +1 -0
  431. package/src/engine/sound/sopra/runtime/SopraPlaybackContext.js +68 -0
  432. package/src/engine/sound/sopra/runtime/Voice.d.ts +67 -0
  433. package/src/engine/sound/sopra/runtime/Voice.d.ts.map +1 -0
  434. package/src/engine/sound/sopra/runtime/Voice.js +145 -0
  435. package/src/engine/sound/sopra/runtime/VoiceManager.d.ts +38 -0
  436. package/src/engine/sound/sopra/runtime/VoiceManager.d.ts.map +1 -0
  437. package/src/engine/sound/sopra/runtime/VoiceManager.js +136 -0
  438. package/src/engine/sound/sopra/runtime/VoicePool.d.ts +12 -0
  439. package/src/engine/sound/sopra/runtime/VoicePool.d.ts.map +1 -0
  440. package/src/engine/sound/sopra/runtime/VoicePool.js +17 -0
  441. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +11 -0
  442. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -0
  443. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +42 -0
  444. package/src/engine/sound/sopra/serialization/sopraJSON.d.ts +33 -0
  445. package/src/engine/sound/sopra/serialization/sopraJSON.d.ts.map +1 -0
  446. package/src/engine/sound/sopra/serialization/sopraJSON.js +99 -0
  447. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +27 -0
  448. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -0
  449. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +49 -0
  450. package/src/engine/sound/sopra/util/MockAudioContext.d.ts +74 -0
  451. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -0
  452. package/src/engine/sound/sopra/util/MockAudioContext.js +215 -0
  453. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts +15 -0
  454. package/src/engine/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -0
  455. package/src/engine/sound/sopra/util/buildAttenuationCurve.js +40 -0
  456. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +34 -0
  457. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -0
  458. package/src/engine/sound/sopra/util/fadeOutAndStop.js +60 -0
  459. package/src/engine/sound/volume2dB.d.ts +1 -1
  460. package/src/engine/sound/volume2dB.d.ts.map +1 -1
  461. package/src/engine/sound/volume2dB.js +1 -1
  462. package/src/engine/graphics/sh3/path_tracer/sampling/v3_orthonormal_matrix_from_normal.d.ts.map +0 -1
  463. package/src/engine/physics/narrowphase/ray_shapes.d.ts +0 -66
  464. package/src/engine/physics/narrowphase/ray_shapes.d.ts.map +0 -1
  465. package/src/engine/physics/narrowphase/ray_shapes.js +0 -187
  466. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts +0 -23
  467. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.d.ts.map +0 -1
  468. package/src/engine/sound/ecs/emitter/SoundEmitterChannel.js +0 -32
  469. package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts +0 -18
  470. package/src/engine/sound/ecs/emitter/SoundTrackNodes.d.ts.map +0 -1
  471. package/src/engine/sound/ecs/emitter/SoundTrackNodes.js +0 -18
  472. package/src/engine/sound/sopra/AbstractAudioClip.d.ts +0 -26
  473. package/src/engine/sound/sopra/AbstractAudioClip.d.ts.map +0 -1
  474. package/src/engine/sound/sopra/AbstractAudioClip.js +0 -29
  475. package/src/engine/sound/sopra/ContainerAudioClip.d.ts +0 -12
  476. package/src/engine/sound/sopra/ContainerAudioClip.d.ts.map +0 -1
  477. package/src/engine/sound/sopra/ContainerAudioClip.js +0 -13
  478. package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts +0 -12
  479. package/src/engine/sound/sopra/RandomContainerAudioClip.d.ts.map +0 -1
  480. package/src/engine/sound/sopra/RandomContainerAudioClip.js +0 -15
  481. package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts +0 -7
  482. package/src/engine/sound/sopra/SequenceContainerAudioClip.d.ts.map +0 -1
  483. package/src/engine/sound/sopra/SequenceContainerAudioClip.js +0 -8
  484. package/src/engine/sound/sopra/SilenceAudioClip.d.ts +0 -13
  485. package/src/engine/sound/sopra/SilenceAudioClip.d.ts.map +0 -1
  486. package/src/engine/sound/sopra/SilenceAudioClip.js +0 -15
  487. /package/src/{engine/graphics/sh3/path_tracer/sampling → core/geom/vec3}/v3_orthonormal_matrix_from_normal.d.ts +0 -0
@@ -0,0 +1,128 @@
1
+ import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
2
+ import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
3
+ import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
4
+
5
+ /**
6
+ * Filter type, mapped to a WebAudio {@link BiquadFilterType}.
7
+ * @enum {number}
8
+ */
9
+ export const EqFilterType = {
10
+ Lowpass: 0,
11
+ Highpass: 1,
12
+ Bandpass: 2,
13
+ Lowshelf: 3,
14
+ Highshelf: 4,
15
+ Peaking: 5,
16
+ Notch: 6,
17
+ Allpass: 7
18
+ };
19
+
20
+ /**
21
+ * @type {string[]}
22
+ */
23
+ const EQ_FILTER_TYPE_TO_BIQUAD = [
24
+ 'lowpass', 'highpass', 'bandpass', 'lowshelf', 'highshelf', 'peaking', 'notch', 'allpass'
25
+ ];
26
+
27
+ /**
28
+ * Equalizer / filter bus insert, backed by a {@link BiquadFilterNode}.
29
+ */
30
+ export class EqEffect extends AbstractAudioEffect {
31
+
32
+ /**
33
+ * @type {EqFilterType|number}
34
+ */
35
+ filterType = EqFilterType.Peaking;
36
+
37
+ /**
38
+ * Cutoff/center frequency in Hz.
39
+ * @type {number}
40
+ */
41
+ frequency = 350;
42
+
43
+ /**
44
+ * Quality factor.
45
+ * @type {number}
46
+ */
47
+ Q = 1;
48
+
49
+ /**
50
+ * Boost/cut in decibels (only used by peaking / shelf filters).
51
+ * @type {number}
52
+ */
53
+ gainDb = 0;
54
+
55
+ /**
56
+ *
57
+ * @param {{filterType?:EqFilterType|number, frequency?:number, Q?:number, gainDb?:number}} [options]
58
+ * @returns {EqEffect}
59
+ */
60
+ static from({ filterType = EqFilterType.Peaking, frequency = 350, Q = 1, gainDb = 0 } = {}) {
61
+ const r = new EqEffect();
62
+
63
+ r.filterType = filterType;
64
+ r.frequency = frequency;
65
+ r.Q = Q;
66
+ r.gainDb = gainDb;
67
+
68
+ return r;
69
+ }
70
+
71
+ /**
72
+ * @param {BaseAudioContext} ctx
73
+ * @returns {{input: AudioNode, output: AudioNode}}
74
+ */
75
+ build(ctx) {
76
+ const node = ctx.createBiquadFilter();
77
+
78
+ node.type = EQ_FILTER_TYPE_TO_BIQUAD[this.filterType] ?? 'peaking';
79
+ node.frequency.value = this.frequency;
80
+ node.Q.value = this.Q;
81
+ node.gain.value = this.gainDb;
82
+
83
+ return { input: node, output: node };
84
+ }
85
+
86
+ /**
87
+ *
88
+ * @param {EqEffect} other
89
+ * @returns {boolean}
90
+ */
91
+ equals(other) {
92
+ return this.filterType === other.filterType
93
+ && this.frequency === other.frequency
94
+ && this.Q === other.Q
95
+ && this.gainDb === other.gainDb;
96
+ }
97
+
98
+ hash() {
99
+ return combine_hash(
100
+ this.filterType,
101
+ computeHashFloat(this.frequency),
102
+ computeHashFloat(this.Q),
103
+ computeHashFloat(this.gainDb)
104
+ );
105
+ }
106
+
107
+ clone() {
108
+ return EqEffect.from(this);
109
+ }
110
+
111
+ toJSON() {
112
+ return {
113
+ filterType: this.filterType,
114
+ frequency: this.frequency,
115
+ Q: this.Q,
116
+ gainDb: this.gainDb
117
+ };
118
+ }
119
+
120
+ fromJSON({ filterType = EqFilterType.Peaking, frequency = 350, Q = 1, gainDb = 0 }) {
121
+ this.filterType = filterType;
122
+ this.frequency = frequency;
123
+ this.Q = Q;
124
+ this.gainDb = gainDb;
125
+ }
126
+ }
127
+
128
+ EqEffect.typeName = "SopraEqEffect";
@@ -0,0 +1,18 @@
1
+ export class EqEffectSerializationAdapter extends BinaryClassSerializationAdapter<any> {
2
+ constructor();
3
+ klass: typeof EqEffect;
4
+ version: number;
5
+ /**
6
+ * @param {BinaryBuffer} buffer
7
+ * @param {EqEffect} value
8
+ */
9
+ serialize(buffer: BinaryBuffer, value: EqEffect): void;
10
+ /**
11
+ * @param {BinaryBuffer} buffer
12
+ * @param {EqEffect} value
13
+ */
14
+ deserialize(buffer: BinaryBuffer, value: EqEffect): void;
15
+ }
16
+ import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
17
+ import { EqEffect } from "./EqEffect.js";
18
+ //# sourceMappingURL=EqEffectSerializationAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EqEffectSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/EqEffectSerializationAdapter.js"],"names":[],"mappings":"AAGA;;IACI,uBAAiB;IACjB,gBAAY;IAEZ;;;OAGG;IACH,uCAFW,QAAQ,QAOlB;IAED;;;OAGG;IACH,yCAFW,QAAQ,QAOlB;CACJ;gDA5B+C,mEAAmE;yBAC1F,eAAe"}
@@ -0,0 +1,29 @@
1
+ import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import { EqEffect } from "./EqEffect.js";
3
+
4
+ export class EqEffectSerializationAdapter extends BinaryClassSerializationAdapter {
5
+ klass = EqEffect;
6
+ version = 0;
7
+
8
+ /**
9
+ * @param {BinaryBuffer} buffer
10
+ * @param {EqEffect} value
11
+ */
12
+ serialize(buffer, value) {
13
+ buffer.writeUint8(value.filterType);
14
+ buffer.writeFloat32(value.frequency);
15
+ buffer.writeFloat32(value.Q);
16
+ buffer.writeFloat32(value.gainDb);
17
+ }
18
+
19
+ /**
20
+ * @param {BinaryBuffer} buffer
21
+ * @param {EqEffect} value
22
+ */
23
+ deserialize(buffer, value) {
24
+ value.filterType = buffer.readUint8();
25
+ value.frequency = buffer.readFloat32();
26
+ value.Q = buffer.readFloat32();
27
+ value.gainDb = buffer.readFloat32();
28
+ }
29
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Convolution reverb bus insert, backed by a {@link ConvolverNode}. Typically used on a dedicated
3
+ * "reverb" bus that other buses route to via {@link BusDefinition.sends}.
4
+ *
5
+ * The impulse response is generated PROCEDURALLY at build time (an exponentially-decaying noise tail),
6
+ * parameterised by {@link decaySeconds} (tail length) and {@link decayPower} (how fast it fades) — so
7
+ * there is no IR-asset dependency and {@link build} stays synchronous. (Loading an authored IR from the
8
+ * BufferProvider is a possible later alternative; it would make build async.)
9
+ */
10
+ export class ReverbEffect extends AbstractAudioEffect {
11
+ /**
12
+ * @param {{decaySeconds?:number, decayPower?:number}} [options]
13
+ * @returns {ReverbEffect}
14
+ */
15
+ static from({ decaySeconds, decayPower }?: {
16
+ decaySeconds?: number;
17
+ decayPower?: number;
18
+ }): ReverbEffect;
19
+ /**
20
+ * Reverb tail length in seconds (the generated IR length).
21
+ * @type {number}
22
+ */
23
+ decaySeconds: number;
24
+ /**
25
+ * Decay envelope exponent: higher fades the tail faster.
26
+ * @type {number}
27
+ */
28
+ decayPower: number;
29
+ /**
30
+ * @param {ReverbEffect} other
31
+ * @returns {boolean}
32
+ */
33
+ equals(other: ReverbEffect): boolean;
34
+ hash(): number;
35
+ clone(): ReverbEffect;
36
+ toJSON(): {
37
+ decaySeconds: number;
38
+ decayPower: number;
39
+ };
40
+ fromJSON({ decaySeconds, decayPower }: {
41
+ decaySeconds?: number;
42
+ decayPower?: number;
43
+ }): void;
44
+ }
45
+ export namespace ReverbEffect {
46
+ let typeName: string;
47
+ }
48
+ import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
49
+ //# sourceMappingURL=ReverbEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReverbEffect.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/ReverbEffect.js"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH;IAcI;;;OAGG;IACH,2CAHW;QAAC,YAAY,CAAC,EAAC,MAAM,CAAC;QAAC,UAAU,CAAC,EAAC,MAAM,CAAA;KAAC,GACxC,YAAY,CASxB;IAvBD;;;OAGG;IACH,cAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,YAFU,MAAM,CAED;IA0Cf;;;OAGG;IACH,cAHW,YAAY,GACV,OAAO,CAKnB;IAED,eAKC;IAED,sBAEC;IAED;;;MAKC;IAED;;;aAGC;CACJ;;;;oCAhGmC,0BAA0B"}
@@ -0,0 +1,101 @@
1
+ import { combine_hash } from "../../../../../core/collection/array/combine_hash.js";
2
+ import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
3
+ import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
4
+
5
+ /**
6
+ * Convolution reverb bus insert, backed by a {@link ConvolverNode}. Typically used on a dedicated
7
+ * "reverb" bus that other buses route to via {@link BusDefinition.sends}.
8
+ *
9
+ * The impulse response is generated PROCEDURALLY at build time (an exponentially-decaying noise tail),
10
+ * parameterised by {@link decaySeconds} (tail length) and {@link decayPower} (how fast it fades) — so
11
+ * there is no IR-asset dependency and {@link build} stays synchronous. (Loading an authored IR from the
12
+ * BufferProvider is a possible later alternative; it would make build async.)
13
+ */
14
+ export class ReverbEffect extends AbstractAudioEffect {
15
+
16
+ /**
17
+ * Reverb tail length in seconds (the generated IR length).
18
+ * @type {number}
19
+ */
20
+ decaySeconds = 1.5;
21
+
22
+ /**
23
+ * Decay envelope exponent: higher fades the tail faster.
24
+ * @type {number}
25
+ */
26
+ decayPower = 2;
27
+
28
+ /**
29
+ * @param {{decaySeconds?:number, decayPower?:number}} [options]
30
+ * @returns {ReverbEffect}
31
+ */
32
+ static from({ decaySeconds = 1.5, decayPower = 2 } = {}) {
33
+ const r = new ReverbEffect();
34
+
35
+ r.decaySeconds = decaySeconds;
36
+ r.decayPower = decayPower;
37
+
38
+ return r;
39
+ }
40
+
41
+ /**
42
+ * @param {BaseAudioContext} ctx
43
+ * @returns {{input: AudioNode, output: AudioNode}}
44
+ */
45
+ build(ctx) {
46
+ const convolver = ctx.createConvolver();
47
+ convolver.normalize = true;
48
+
49
+ const sampleRate = ctx.sampleRate;
50
+ const length = Math.max(1, Math.floor(this.decaySeconds * sampleRate));
51
+ const ir = ctx.createBuffer(2, length, sampleRate);
52
+
53
+ for (let channel = 0; channel < ir.numberOfChannels; channel++) {
54
+ const data = ir.getChannelData(channel);
55
+
56
+ for (let i = 0; i < length; i++) {
57
+ const t = i / length;
58
+ // white noise shaped by an exponentially-decaying envelope
59
+ data[i] = (Math.random() * 2 - 1) * Math.pow(1 - t, this.decayPower);
60
+ }
61
+ }
62
+
63
+ convolver.buffer = ir;
64
+
65
+ return { input: convolver, output: convolver };
66
+ }
67
+
68
+ /**
69
+ * @param {ReverbEffect} other
70
+ * @returns {boolean}
71
+ */
72
+ equals(other) {
73
+ return this.decaySeconds === other.decaySeconds
74
+ && this.decayPower === other.decayPower;
75
+ }
76
+
77
+ hash() {
78
+ return combine_hash(
79
+ computeHashFloat(this.decaySeconds),
80
+ computeHashFloat(this.decayPower)
81
+ );
82
+ }
83
+
84
+ clone() {
85
+ return ReverbEffect.from(this);
86
+ }
87
+
88
+ toJSON() {
89
+ return {
90
+ decaySeconds: this.decaySeconds,
91
+ decayPower: this.decayPower
92
+ };
93
+ }
94
+
95
+ fromJSON({ decaySeconds = 1.5, decayPower = 2 }) {
96
+ this.decaySeconds = decaySeconds;
97
+ this.decayPower = decayPower;
98
+ }
99
+ }
100
+
101
+ ReverbEffect.typeName = "SopraReverbEffect";
@@ -0,0 +1,18 @@
1
+ export class ReverbEffectSerializationAdapter extends BinaryClassSerializationAdapter<any> {
2
+ constructor();
3
+ klass: typeof ReverbEffect;
4
+ version: number;
5
+ /**
6
+ * @param {BinaryBuffer} buffer
7
+ * @param {ReverbEffect} value
8
+ */
9
+ serialize(buffer: BinaryBuffer, value: ReverbEffect): void;
10
+ /**
11
+ * @param {BinaryBuffer} buffer
12
+ * @param {ReverbEffect} value
13
+ */
14
+ deserialize(buffer: BinaryBuffer, value: ReverbEffect): void;
15
+ }
16
+ import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
17
+ import { ReverbEffect } from "./ReverbEffect.js";
18
+ //# sourceMappingURL=ReverbEffectSerializationAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReverbEffectSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/ReverbEffectSerializationAdapter.js"],"names":[],"mappings":"AAGA;;IACI,2BAAqB;IACrB,gBAAY;IAEZ;;;OAGG;IACH,uCAFW,YAAY,QAKtB;IAED;;;OAGG;IACH,yCAFW,YAAY,QAKtB;CACJ;gDAxB+C,mEAAmE;6BACtF,mBAAmB"}
@@ -0,0 +1,25 @@
1
+ import { BinaryClassSerializationAdapter } from "../../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import { ReverbEffect } from "./ReverbEffect.js";
3
+
4
+ export class ReverbEffectSerializationAdapter extends BinaryClassSerializationAdapter {
5
+ klass = ReverbEffect;
6
+ version = 0;
7
+
8
+ /**
9
+ * @param {BinaryBuffer} buffer
10
+ * @param {ReverbEffect} value
11
+ */
12
+ serialize(buffer, value) {
13
+ buffer.writeFloat32(value.decaySeconds);
14
+ buffer.writeFloat32(value.decayPower);
15
+ }
16
+
17
+ /**
18
+ * @param {BinaryBuffer} buffer
19
+ * @param {ReverbEffect} value
20
+ */
21
+ deserialize(buffer, value) {
22
+ value.decaySeconds = buffer.readFloat32();
23
+ value.decayPower = buffer.readFloat32();
24
+ }
25
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @param {SoundAttenuationFunction|number} attenuationFunction
3
+ * @param {number} distanceMin
4
+ * @param {number} distanceMax
5
+ * @returns {AnimationCurve} distance→gain curve reproducing the legacy falloff at sampled distances
6
+ */
7
+ export function attenuationFunctionToCurve(attenuationFunction: SoundAttenuationFunction | number, distanceMin: number, distanceMax: number): AnimationCurve;
8
+ /**
9
+ * @param {SoundPanningModelType|number} panningModel
10
+ * @returns {SopraPanningModel|number}
11
+ */
12
+ export function soundPanningModelToSopra(panningModel: SoundPanningModelType | number): SopraPanningModel | number;
13
+ /**
14
+ * Translate one legacy SoundTrack (in the context of its emitter) into a sopra EventDescription.
15
+ * @param {SoundEmitter} emitter
16
+ * @param {SoundTrack} track
17
+ * @returns {EventDescription}
18
+ */
19
+ export function soundTrackToEventDescription(emitter: SoundEmitter, track: SoundTrack): EventDescription;
20
+ /**
21
+ * Translate all of an emitter's current tracks into EventDescriptions (one per track).
22
+ * @param {SoundEmitter} emitter
23
+ * @returns {EventDescription[]}
24
+ */
25
+ export function soundEmitterToEventDescriptions(emitter: SoundEmitter): EventDescription[];
26
+ import { SoundAttenuationFunction } from "../../ecs/emitter/SoundAttenuationFunction.js";
27
+ import { AnimationCurve } from "../../../animation/curve/AnimationCurve.js";
28
+ import { SoundPanningModelType } from "../../ecs/emitter/SoundPanningModelType.js";
29
+ import { SopraPanningModel } from "../definition/SopraPanningModel.js";
30
+ import { EventDescription } from "../definition/EventDescription.js";
31
+ //# sourceMappingURL=soundEmitterToEventDescription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soundEmitterToEventDescription.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/sopra/legacy/soundEmitterToEventDescription.js"],"names":[],"mappings":"AA2BA;;;;;GAKG;AACH,gEALW,wBAAwB,GAAC,MAAM,eAC/B,MAAM,eACN,MAAM,GACJ,cAAc,CAmB1B;AAED;;;GAGG;AACH,uDAHW,qBAAqB,GAAC,MAAM,GAC1B,iBAAiB,GAAC,MAAM,CAMpC;AAED;;;;;GAKG;AACH,wFAFa,gBAAgB,CAwB5B;AAED;;;;GAIG;AACH,wEAFa,gBAAgB,EAAE,CAU9B;yCArGwC,+CAA+C;+BADzD,4CAA4C;sCAGrC,4CAA4C;kCAKhD,oCAAoC;iCAFrC,mCAAmC"}
@@ -0,0 +1,106 @@
1
+ import { interpolate_irradiance_linear } from "../../../../core/math/physics/irradiance/interpolate_irradiance_linear.js";
2
+ import { interpolate_irradiance_lograrithmic } from "../../../../core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js";
3
+ import { interpolate_irradiance_smith } from "../../../../core/math/physics/irradiance/interpolate_irradiance_smith.js";
4
+ import { AnimationCurve } from "../../../animation/curve/AnimationCurve.js";
5
+ import { SoundAttenuationFunction } from "../../ecs/emitter/SoundAttenuationFunction.js";
6
+ import { SoundEmitterFlags } from "../../ecs/emitter/SoundEmitterFlags.js";
7
+ import { SoundPanningModelType } from "../../ecs/emitter/SoundPanningModelType.js";
8
+ import { SoundTrackFlags } from "../../ecs/emitter/SoundTrackFlags.js";
9
+ import { buildAttenuationCurve } from "../util/buildAttenuationCurve.js";
10
+ import { EventDescription } from "../definition/EventDescription.js";
11
+ import { SampleAudioClip } from "../definition/clip/SampleAudioClip.js";
12
+ import { SopraPanningModel } from "../definition/SopraPanningModel.js";
13
+
14
+ /*
15
+ * Pure translation from the legacy SoundEmitter/SoundTrack data into sopra EventDescriptions. No ECS,
16
+ * no engine, no live state — just maps authored fields. Volume is intentionally NOT baked here: the
17
+ * full live gain (emitter.volume × track.volume) is applied by the ECS layer through the instance's
18
+ * gain (P3.5), so there is one live volume home and no double-counting.
19
+ */
20
+
21
+ /**
22
+ * Translated legacy descriptions get a high instance cap so the legacy "play everything" behaviour is
23
+ * preserved (the per-event VoiceManager limit effectively never trips).
24
+ * @type {number}
25
+ */
26
+ const LEGACY_MAX_INSTANCES = 256;
27
+
28
+ /**
29
+ * @param {SoundAttenuationFunction|number} attenuationFunction
30
+ * @param {number} distanceMin
31
+ * @param {number} distanceMax
32
+ * @returns {AnimationCurve} distance→gain curve reproducing the legacy falloff at sampled distances
33
+ */
34
+ export function attenuationFunctionToCurve(attenuationFunction, distanceMin, distanceMax) {
35
+ let falloff;
36
+
37
+ switch (attenuationFunction) {
38
+ case SoundAttenuationFunction.Logarithmic:
39
+ falloff = interpolate_irradiance_lograrithmic;
40
+ break;
41
+ case SoundAttenuationFunction.Smith:
42
+ falloff = interpolate_irradiance_smith;
43
+ break;
44
+ case SoundAttenuationFunction.Linear:
45
+ default:
46
+ falloff = interpolate_irradiance_linear;
47
+ break;
48
+ }
49
+
50
+ return buildAttenuationCurve(distanceMin, distanceMax, falloff);
51
+ }
52
+
53
+ /**
54
+ * @param {SoundPanningModelType|number} panningModel
55
+ * @returns {SopraPanningModel|number}
56
+ */
57
+ export function soundPanningModelToSopra(panningModel) {
58
+ return panningModel === SoundPanningModelType.EqualPower
59
+ ? SopraPanningModel.EqualPower
60
+ : SopraPanningModel.HRTF;
61
+ }
62
+
63
+ /**
64
+ * Translate one legacy SoundTrack (in the context of its emitter) into a sopra EventDescription.
65
+ * @param {SoundEmitter} emitter
66
+ * @param {SoundTrack} track
67
+ * @returns {EventDescription}
68
+ */
69
+ export function soundTrackToEventDescription(emitter, track) {
70
+ const clip = SampleAudioClip.from(track.url, {
71
+ usingAlias: track.getFlag(SoundTrackFlags.UsingAliasURL),
72
+ loop: track.getFlag(SoundTrackFlags.Loop)
73
+ });
74
+
75
+ const is3D = emitter.getFlag(SoundEmitterFlags.Spatialization);
76
+ const attenuated = emitter.getFlag(SoundEmitterFlags.Attenuation);
77
+
78
+ const attenuation = (is3D && attenuated)
79
+ ? attenuationFunctionToCurve(emitter.attenuation, emitter.distanceMin, emitter.distanceMax)
80
+ : AnimationCurve.constant(0, 1, 1); // flat-1 = no distance attenuation
81
+
82
+ return EventDescription.from(track.url || "", clip, {
83
+ busId: emitter.channel || "effects",
84
+ is3D,
85
+ panningModel: soundPanningModelToSopra(emitter.panningModel),
86
+ distanceMin: emitter.distanceMin,
87
+ distanceMax: emitter.distanceMax,
88
+ attenuation,
89
+ maxInstances: LEGACY_MAX_INSTANCES
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Translate all of an emitter's current tracks into EventDescriptions (one per track).
95
+ * @param {SoundEmitter} emitter
96
+ * @returns {EventDescription[]}
97
+ */
98
+ export function soundEmitterToEventDescriptions(emitter) {
99
+ const result = [];
100
+
101
+ emitter.tracks.forEach(track => {
102
+ result.push(soundTrackToEventDescription(emitter, track));
103
+ });
104
+
105
+ return result;
106
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * A {@link BusDefinition.parentId} equal to this means "no parent" — the bus is a root and routes
3
+ * straight to the engine destination.
4
+ * @type {string}
5
+ */
6
+ export const BUS_ROOT_PARENT: string;
7
+ /**
8
+ * Runtime mixer: instantiates a set of {@link BusDefinition}s into chained WebAudio nodes.
9
+ *
10
+ * Each bus is wired `input → effect[0] → … → effect[n] → gain(output)`; the output then connects to
11
+ * its parent bus's input, or to the engine destination for a root bus (parentId === "").
12
+ */
13
+ export class BusGraph {
14
+ /**
15
+ * @param {BaseAudioContext} ctx
16
+ * @param {AudioNode} destination engine master destination node
17
+ */
18
+ constructor(ctx: BaseAudioContext, destination: AudioNode);
19
+ /**
20
+ * id -> { definition, input, output }
21
+ * @type {Map<string, {definition: BusDefinition, input: AudioNode, output: GainNode}>}
22
+ */
23
+ buses: Map<string, {
24
+ definition: BusDefinition;
25
+ input: AudioNode;
26
+ output: GainNode;
27
+ }>;
28
+ /**
29
+ * Build the graph from a flat list of bus definitions. Order-independent: all nodes are created
30
+ * first, then wired to their parents.
31
+ * @param {BusDefinition[]} definitions
32
+ */
33
+ build(definitions: BusDefinition[]): void;
34
+ /**
35
+ * @param {string} id
36
+ * @returns {boolean}
37
+ */
38
+ has(id: string): boolean;
39
+ /**
40
+ * Node that voices/children should connect into for a given bus.
41
+ * @param {string} id
42
+ * @returns {AudioNode}
43
+ */
44
+ getInput(id: string): AudioNode;
45
+ /**
46
+ * @param {string} id
47
+ * @returns {number} linear gain
48
+ */
49
+ getVolume(id: string): number;
50
+ /**
51
+ * @param {string} id
52
+ * @param {number} linear linear gain
53
+ */
54
+ setVolume(id: string, linear: number): void;
55
+ /**
56
+ * @param {string} id
57
+ * @returns {number} gain in decibels
58
+ */
59
+ getVolumeDb(id: string): number;
60
+ /**
61
+ * Click-safely ramp a bus's linear volume to `linear` over `duration` seconds (used by mixer
62
+ * snapshot blends). For an instant change use {@link setVolume}.
63
+ * @param {string} id
64
+ * @param {number} linear target linear gain
65
+ * @param {number} duration seconds
66
+ * @param {number} [startAfter=0] seconds
67
+ */
68
+ rampVolume(id: string, linear: number, duration: number, startAfter?: number): void;
69
+ /**
70
+ * Exponentially approach a target linear volume with a time constant (used by ducking attack/
71
+ * release). Unlike {@link rampVolume} this does not anchor — it's a smooth setTargetAtTime glide.
72
+ * @param {string} id
73
+ * @param {number} linear target linear gain
74
+ * @param {number} timeConstant seconds
75
+ */
76
+ approachVolume(id: string, linear: number, timeConstant: number): void;
77
+ #private;
78
+ }
79
+ //# sourceMappingURL=BusGraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BusGraph.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/sopra/runtime/BusGraph.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,8BAFU,MAAM,CAEkB;AAElC;;;;;GAKG;AACH;IAkBI;;;OAGG;IACH,iBAHW,gBAAgB,eAChB,SAAS,EAKnB;IAvBD;;;OAGG;IACH,OAFU,IAAI,MAAM,EAAE;QAAC,UAAU,gBAAgB;QAAC,KAAK,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,QAAQ,CAAA;KAAC,CAAC,CAEpE;IAqBlB;;;;OAIG;IACH,mBAFW,eAAe,QAgFzB;IAED;;;OAGG;IACH,QAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,SAAS,CAUrB;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,MAAM,CAUlB;IAED;;;OAGG;IACH,cAHW,MAAM,UACN,MAAM,QAWhB;IAED;;;OAGG;IACH,gBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;OAOG;IACH,eALW,MAAM,UACN,MAAM,YACN,MAAM,eACN,MAAM,QAWhB;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,UACN,MAAM,gBACN,MAAM,QAYhB;;CACJ"}