@woosh/meep-engine 3.46.0 → 3.47.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 (230) hide show
  1. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  2. package/editor/actions/concrete/TransformModifyAction.js +10 -2
  3. package/editor/ecs/component/FieldDescriptor.js +15 -0
  4. package/editor/ecs/component/createObjectEditor.js +41 -12
  5. package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -1
  6. package/editor/ecs/component/editors/ecs/Transform64Editor.js +77 -70
  7. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  8. package/editor/tools/TransformToolV2.js +4 -0
  9. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  10. package/editor/tools/v2/TransformControls.js +7 -0
  11. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  12. package/editor/view/ecs/EntityEditor.js +4 -2
  13. package/package.json +1 -1
  14. package/src/core/collection/array/array_insert_at.d.ts +16 -0
  15. package/src/core/collection/array/array_insert_at.d.ts.map +1 -0
  16. package/src/core/collection/array/array_insert_at.js +32 -0
  17. package/src/core/collection/array/array_remove_at.d.ts +15 -0
  18. package/src/core/collection/array/array_remove_at.d.ts.map +1 -0
  19. package/src/core/collection/array/array_remove_at.js +30 -0
  20. package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts +37 -0
  21. package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts.map +1 -0
  22. package/src/core/geom/3d/quaternion/quat3_look_rotation.js +172 -0
  23. package/src/core/geom/Quaternion.d.ts +1 -0
  24. package/src/core/geom/Quaternion.d.ts.map +1 -1
  25. package/src/core/geom/Quaternion.js +12 -48
  26. package/src/engine/Engine.d.ts.map +1 -1
  27. package/src/engine/Engine.js +9 -4
  28. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  29. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +10 -0
  30. package/src/engine/ecs/transform/t64_look_rotation.d.ts +4 -4
  31. package/src/engine/ecs/transform/t64_look_rotation.d.ts.map +1 -1
  32. package/src/engine/ecs/transform/t64_look_rotation.js +7 -18
  33. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  34. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +30 -1
  35. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -0
  36. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  37. package/src/engine/graphics3/GPUParticleEmitterSystem.js +72 -29
  38. package/src/engine/input/devices/KeyboardDevice.d.ts +1 -0
  39. package/src/engine/input/devices/KeyboardDevice.d.ts.map +1 -1
  40. package/src/engine/input/devices/KeyboardDevice.js +7 -6
  41. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  42. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +15 -2
  43. package/src/engine/network/CONGESTION_CONTROL.md +9 -9
  44. package/src/engine/network/MESSAGE_TRANSPORT.md +364 -0
  45. package/src/engine/network/NetworkSession.d.ts +31 -11
  46. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  47. package/src/engine/network/NetworkSession.js +453 -286
  48. package/src/engine/network/README.md +77 -27
  49. package/src/engine/network/SMOOTHNESS_DESIGN.md +13 -5
  50. package/src/engine/network/diagnostics/BandwidthMeter.d.ts +1 -1
  51. package/src/engine/network/diagnostics/BandwidthMeter.js +1 -1
  52. package/src/engine/network/orchestrator/HostJoin.d.ts +111 -0
  53. package/src/engine/network/orchestrator/HostJoin.d.ts.map +1 -0
  54. package/src/engine/network/orchestrator/HostJoin.js +271 -0
  55. package/src/engine/network/orchestrator/NetworkPeer.d.ts +151 -112
  56. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  57. package/src/engine/network/orchestrator/NetworkPeer.js +450 -499
  58. package/src/engine/network/orchestrator/PendingSlices.d.ts +30 -0
  59. package/src/engine/network/orchestrator/PendingSlices.d.ts.map +1 -0
  60. package/src/engine/network/orchestrator/PendingSlices.js +83 -0
  61. package/src/engine/network/orchestrator/ReliableFrames.d.ts +34 -0
  62. package/src/engine/network/orchestrator/ReliableFrames.d.ts.map +1 -0
  63. package/src/engine/network/orchestrator/ReliableFrames.js +96 -0
  64. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +77 -10
  65. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  66. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +236 -61
  67. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +20 -6
  68. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  69. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +33 -8
  70. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  71. package/src/engine/network/replication/Replicator.js +7 -1
  72. package/src/engine/network/sim/ActionLog.d.ts +32 -5
  73. package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
  74. package/src/engine/network/sim/ActionLog.js +47 -5
  75. package/src/engine/network/sim/SimActionExecutor.d.ts +42 -2
  76. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  77. package/src/engine/network/sim/SimActionExecutor.js +100 -4
  78. package/src/engine/network/sim/Snapshotter.d.ts +12 -0
  79. package/src/engine/network/sim/Snapshotter.d.ts.map +1 -1
  80. package/src/engine/network/sim/Snapshotter.js +43 -0
  81. package/src/engine/network/state/Baseline.d.ts +1 -1
  82. package/src/engine/network/state/Baseline.js +1 -1
  83. package/src/engine/network/state/FrameBufferRing.d.ts +25 -6
  84. package/src/engine/network/state/FrameBufferRing.d.ts.map +1 -1
  85. package/src/engine/network/state/FrameBufferRing.js +51 -6
  86. package/src/engine/network/state/InputRing.d.ts +4 -0
  87. package/src/engine/network/state/InputRing.d.ts.map +1 -1
  88. package/src/engine/network/state/InputRing.js +7 -0
  89. package/src/engine/network/transport/DeferredTransport.d.ts.map +1 -1
  90. package/src/engine/network/transport/DeferredTransport.js +1 -0
  91. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
  92. package/src/engine/network/transport/LoopbackTransport.js +4 -2
  93. package/src/engine/network/transport/Transport.d.ts +7 -0
  94. package/src/engine/network/transport/Transport.d.ts.map +1 -1
  95. package/src/engine/network/transport/Transport.js +8 -0
  96. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  97. package/src/engine/network/transport/adapters/NodeUDPTransport.js +20 -5
  98. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts.map +1 -1
  99. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +8 -0
  100. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
  101. package/src/engine/network/transport/adapters/WebTransportTransport.js +6 -0
  102. package/src/engine/network/transport/connection/Connection.d.ts +191 -0
  103. package/src/engine/network/transport/connection/Connection.d.ts.map +1 -0
  104. package/src/engine/network/transport/connection/Connection.js +1262 -0
  105. package/src/engine/network/transport/connection/RangeSet.d.ts +94 -0
  106. package/src/engine/network/transport/connection/RangeSet.d.ts.map +1 -0
  107. package/src/engine/network/transport/connection/RangeSet.js +260 -0
  108. package/src/engine/network/transport/connection/RxStream.d.ts +48 -0
  109. package/src/engine/network/transport/connection/RxStream.d.ts.map +1 -0
  110. package/src/engine/network/transport/connection/RxStream.js +211 -0
  111. package/src/engine/network/transport/connection/TxStream.d.ts +90 -0
  112. package/src/engine/network/transport/connection/TxStream.d.ts.map +1 -0
  113. package/src/engine/network/transport/connection/TxStream.js +243 -0
  114. package/src/engine/network/transport/connection/bytes_copy.d.ts +17 -0
  115. package/src/engine/network/transport/connection/bytes_copy.d.ts.map +1 -0
  116. package/src/engine/network/transport/connection/bytes_copy.js +34 -0
  117. package/src/engine/network/transport/connection/varint.d.ts +46 -0
  118. package/src/engine/network/transport/connection/varint.d.ts.map +1 -0
  119. package/src/engine/network/transport/connection/varint.js +107 -0
  120. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  121. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +38 -7
  122. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  123. package/src/engine/sound/ecs/audio/AudioEmitter.js +35 -7
  124. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.d.ts.map +1 -1
  125. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.js +5 -1
  126. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts +18 -0
  127. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts.map +1 -0
  128. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.js +48 -0
  129. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +12 -2
  130. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  131. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +173 -9
  132. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +9 -3
  133. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  134. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +28 -8
  135. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts +8 -0
  136. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  137. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts.map +1 -1
  138. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.js +5 -1
  139. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts +18 -0
  140. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts.map +1 -0
  141. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.js +51 -0
  142. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
  143. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +15 -1
  144. package/src/engine/sound/sopra/README.md +768 -644
  145. package/src/engine/sound/sopra/SopraEngine.d.ts +104 -8
  146. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
  147. package/src/engine/sound/sopra/SopraEngine.js +327 -12
  148. package/src/engine/sound/sopra/definition/EventDescription.d.ts +28 -2
  149. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  150. package/src/engine/sound/sopra/definition/EventDescription.js +55 -5
  151. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +10 -0
  152. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -1
  153. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +77 -55
  154. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts +31 -0
  155. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts.map +1 -0
  156. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.js +75 -0
  157. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +38 -9
  158. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -1
  159. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +34 -5
  160. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +7 -2
  161. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  162. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +137 -122
  163. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +3 -1
  164. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  165. package/src/engine/sound/sopra/definition/effect/EqEffect.js +146 -131
  166. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +1 -0
  167. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -1
  168. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +6 -1
  169. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +44 -2
  170. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
  171. package/src/engine/sound/sopra/runtime/BusGraph.js +83 -43
  172. package/src/engine/sound/sopra/runtime/EffectChain.d.ts +96 -0
  173. package/src/engine/sound/sopra/runtime/EffectChain.d.ts.map +1 -0
  174. package/src/engine/sound/sopra/runtime/EffectChain.js +286 -0
  175. package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts +123 -0
  176. package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts.map +1 -0
  177. package/src/engine/sound/sopra/runtime/EffectParamOverrides.js +320 -0
  178. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +55 -5
  179. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  180. package/src/engine/sound/sopra/runtime/EventInstance.js +201 -26
  181. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +2 -1
  182. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -1
  183. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +6 -1
  184. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +15 -0
  185. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -1
  186. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +32 -0
  187. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -1
  188. package/src/engine/sound/sopra/util/MockAudioContext.js +3 -0
  189. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +13 -3
  190. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -1
  191. package/src/engine/sound/sopra/util/fadeOutAndStop.js +25 -13
  192. package/src/shade/RENDERER_CONTRACT.md +6 -3
  193. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts +24 -0
  194. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -0
  195. package/src/shade/device/SHADE_DEVICE_FLOOR.js +34 -0
  196. package/src/shade/device/ShadeDeviceFailure.d.ts +12 -5
  197. package/src/shade/device/ShadeDeviceFailure.d.ts.map +1 -1
  198. package/src/shade/device/ShadeDeviceFailure.js +17 -8
  199. package/src/shade/device/ShadeDeviceFailureReason.d.ts +1 -1
  200. package/src/shade/device/ShadeDeviceFailureReason.js +2 -2
  201. package/src/shade/device/shade_device_floor_unmet.d.ts +13 -0
  202. package/src/shade/device/shade_device_floor_unmet.d.ts.map +1 -0
  203. package/src/shade/device/shade_device_floor_unmet.js +32 -0
  204. package/src/shade/renderer/Renderer.d.ts +2 -0
  205. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  206. package/src/shade/renderer/Renderer.js +29 -55
  207. package/src/shade/renderer/buffer/GPUBufferAllocator.d.ts.map +1 -1
  208. package/src/shade/renderer/buffer/GPUBufferAllocator.js +9 -0
  209. package/src/shade/renderer/buffer/buffer_pool_ops.d.ts +21 -12
  210. package/src/shade/renderer/buffer/buffer_pool_ops.d.ts.map +1 -1
  211. package/src/shade/renderer/buffer/buffer_pool_ops.js +18 -19
  212. package/src/shade/renderer/gpu_primitive/test/gpu_test.d.ts.map +1 -1
  213. package/src/shade/renderer/gpu_primitive/test/gpu_test.js +8 -11
  214. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  215. package/src/shade/renderer/pool/TransientResourcePool.d.ts +24 -0
  216. package/src/shade/renderer/pool/TransientResourcePool.d.ts.map +1 -1
  217. package/src/shade/renderer/pool/TransientResourcePool.js +41 -10
  218. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  219. package/src/shade/renderer/shader/ComputeShader.js +18 -2
  220. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  221. package/src/shade/renderer/shader/ImageShader.js +230 -218
  222. package/src/view/graphics/GraphicsContextFailureView.d.ts +1 -2
  223. package/src/view/graphics/GraphicsContextFailureView.d.ts.map +1 -1
  224. package/src/view/graphics/GraphicsContextFailureView.js +1 -2
  225. package/src/engine/network/transport/Channel.js +0 -336
  226. package/src/engine/network/transport/ReliableCommandPipeline.js +0 -335
  227. package/src/engine/network/transport/fragments/FragmentAssembler.js +0 -350
  228. package/src/engine/network/transport/fragments/FragmentRetention.js +0 -191
  229. package/src/engine/network/transport/fragments/fragment_send.js +0 -157
  230. package/src/engine/network/transport/fragments/packet_size.js +0 -107
@@ -1,122 +1,137 @@
1
- import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
2
- import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
3
- import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
4
-
5
- /**
6
- * Dynamics compressor bus insert, backed by a {@link DynamicsCompressorNode}.
7
- * NOTE: this is a per-bus insert; the engine's master compressor (in SoundEngine) is separate
8
- * master-glue and is not duplicated here.
9
- */
10
- export class CompressorEffect extends AbstractAudioEffect {
11
-
12
- /**
13
- * dB.
14
- * @type {number}
15
- */
16
- threshold = -24;
17
-
18
- /**
19
- * dB.
20
- * @type {number}
21
- */
22
- knee = 30;
23
-
24
- /**
25
- * @type {number}
26
- */
27
- ratio = 12;
28
-
29
- /**
30
- * Seconds.
31
- * @type {number}
32
- */
33
- attack = 0.003;
34
-
35
- /**
36
- * Seconds.
37
- * @type {number}
38
- */
39
- release = 0.25;
40
-
41
- /**
42
- *
43
- * @param {{threshold?:number, knee?:number, ratio?:number, attack?:number, release?:number}} [options]
44
- * @returns {CompressorEffect}
45
- */
46
- static from({ threshold = -24, knee = 30, ratio = 12, attack = 0.003, release = 0.25 } = {}) {
47
- const r = new CompressorEffect();
48
-
49
- r.threshold = threshold;
50
- r.knee = knee;
51
- r.ratio = ratio;
52
- r.attack = attack;
53
- r.release = release;
54
-
55
- return r;
56
- }
57
-
58
- /**
59
- * @param {BaseAudioContext} ctx
60
- * @returns {{input: AudioNode, output: AudioNode}}
61
- */
62
- build(ctx) {
63
- const node = ctx.createDynamicsCompressor();
64
-
65
- node.threshold.value = this.threshold;
66
- node.knee.value = this.knee;
67
- node.ratio.value = this.ratio;
68
- node.attack.value = this.attack;
69
- node.release.value = this.release;
70
-
71
- return { input: node, output: node };
72
- }
73
-
74
- /**
75
- *
76
- * @param {CompressorEffect} other
77
- * @returns {boolean}
78
- */
79
- equals(other) {
80
- return this.threshold === other.threshold
81
- && this.knee === other.knee
82
- && this.ratio === other.ratio
83
- && this.attack === other.attack
84
- && this.release === other.release;
85
- }
86
-
87
- hash() {
88
- return hash_mix3(
89
- hash_mix3(
90
- computeHashFloat(this.threshold),
91
- computeHashFloat(this.knee),
92
- computeHashFloat(this.ratio)
93
- ),
94
- computeHashFloat(this.attack),
95
- computeHashFloat(this.release)
96
- );
97
- }
98
-
99
- clone() {
100
- return CompressorEffect.from(this);
101
- }
102
-
103
- toJSON() {
104
- return {
105
- threshold: this.threshold,
106
- knee: this.knee,
107
- ratio: this.ratio,
108
- attack: this.attack,
109
- release: this.release
110
- };
111
- }
112
-
113
- fromJSON({ threshold = -24, knee = 30, ratio = 12, attack = 0.003, release = 0.25 }) {
114
- this.threshold = threshold;
115
- this.knee = knee;
116
- this.ratio = ratio;
117
- this.attack = attack;
118
- this.release = release;
119
- }
120
- }
121
-
122
- CompressorEffect.typeName = "SopraCompressorEffect";
1
+ import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
2
+ import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
3
+ import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
4
+
5
+ /**
6
+ * @typedef {import("./AbstractAudioEffect.js").BuiltAudioEffect} BuiltAudioEffect
7
+ */
8
+
9
+ /**
10
+ * Dynamics compressor insert (on a bus or an event), backed by a {@link DynamicsCompressorNode}.
11
+ * NOTE: this is a per-bus or per-instance insert; the engine's master compressor (in SoundEngine) is separate
12
+ * master-glue and is not duplicated here.
13
+ */
14
+ export class CompressorEffect extends AbstractAudioEffect {
15
+
16
+ /**
17
+ * dB.
18
+ * @type {number}
19
+ */
20
+ threshold = -24;
21
+
22
+ /**
23
+ * dB.
24
+ * @type {number}
25
+ */
26
+ knee = 30;
27
+
28
+ /**
29
+ * @type {number}
30
+ */
31
+ ratio = 12;
32
+
33
+ /**
34
+ * Seconds.
35
+ * @type {number}
36
+ */
37
+ attack = 0.003;
38
+
39
+ /**
40
+ * Seconds.
41
+ * @type {number}
42
+ */
43
+ release = 0.25;
44
+
45
+ /**
46
+ *
47
+ * @param {{threshold?:number, knee?:number, ratio?:number, attack?:number, release?:number}} [options]
48
+ * @returns {CompressorEffect}
49
+ */
50
+ static from({ threshold = -24, knee = 30, ratio = 12, attack = 0.003, release = 0.25 } = {}) {
51
+ const r = new CompressorEffect();
52
+
53
+ r.threshold = threshold;
54
+ r.knee = knee;
55
+ r.ratio = ratio;
56
+ r.attack = attack;
57
+ r.release = release;
58
+
59
+ return r;
60
+ }
61
+
62
+ /**
63
+ * @param {BaseAudioContext} ctx
64
+ * @returns {BuiltAudioEffect}
65
+ */
66
+ build(ctx) {
67
+ const node = ctx.createDynamicsCompressor();
68
+
69
+ node.threshold.value = this.threshold;
70
+ node.knee.value = this.knee;
71
+ node.ratio.value = this.ratio;
72
+ node.attack.value = this.attack;
73
+ node.release.value = this.release;
74
+
75
+ return {
76
+ input: node,
77
+ output: node,
78
+ params: [node.threshold, node.knee, node.ratio, node.attack, node.release]
79
+ };
80
+ }
81
+
82
+ /**
83
+ *
84
+ * @param {CompressorEffect} other
85
+ * @returns {boolean}
86
+ */
87
+ equals(other) {
88
+ return this.threshold === other.threshold
89
+ && this.knee === other.knee
90
+ && this.ratio === other.ratio
91
+ && this.attack === other.attack
92
+ && this.release === other.release;
93
+ }
94
+
95
+ hash() {
96
+ return hash_mix3(
97
+ hash_mix3(
98
+ computeHashFloat(this.threshold),
99
+ computeHashFloat(this.knee),
100
+ computeHashFloat(this.ratio)
101
+ ),
102
+ computeHashFloat(this.attack),
103
+ computeHashFloat(this.release)
104
+ );
105
+ }
106
+
107
+ clone() {
108
+ return CompressorEffect.from(this);
109
+ }
110
+
111
+ toJSON() {
112
+ return {
113
+ threshold: this.threshold,
114
+ knee: this.knee,
115
+ ratio: this.ratio,
116
+ attack: this.attack,
117
+ release: this.release
118
+ };
119
+ }
120
+
121
+ fromJSON({ threshold = -24, knee = 30, ratio = 12, attack = 0.003, release = 0.25 }) {
122
+ this.threshold = threshold;
123
+ this.knee = knee;
124
+ this.ratio = ratio;
125
+ this.attack = attack;
126
+ this.release = release;
127
+ }
128
+ }
129
+
130
+ CompressorEffect.typeName = "SopraCompressorEffect";
131
+
132
+ /**
133
+ * What a built compressor can move while it plays.
134
+ * @readonly
135
+ * @type {string[]}
136
+ */
137
+ CompressorEffect.parameters = ['threshold', 'knee', 'ratio', 'attack', 'release'];
@@ -13,7 +13,7 @@ export namespace EqFilterType {
13
13
  let Allpass: number;
14
14
  }
15
15
  /**
16
- * Equalizer / filter bus insert, backed by a {@link BiquadFilterNode}.
16
+ * Equalizer / filter insert (on a bus or an event), backed by a {@link BiquadFilterNode}.
17
17
  */
18
18
  export class EqEffect extends AbstractAudioEffect {
19
19
  /**
@@ -69,6 +69,8 @@ export class EqEffect extends AbstractAudioEffect {
69
69
  }
70
70
  export namespace EqEffect {
71
71
  let typeName: string;
72
+ let parameters: string[];
72
73
  }
74
+ export type BuiltAudioEffect = import("./AbstractAudioEffect.js").BuiltAudioEffect;
73
75
  import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
74
76
  //# sourceMappingURL=EqEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EqEffect.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/EqEffect.js"],"names":[],"mappings":";;;2BAOU,MAAM;;;;;;;;;;;AAoBhB;;GAEG;AACH;IAyBI;;;;OAIG;IACH,mDAHW;QAAC,UAAU,CAAC,EAAC,YAAY,GAAC,MAAM,CAAC;QAAC,SAAS,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,CAAC,EAAC,MAAM,CAAC;QAAC,MAAM,CAAC,EAAC,MAAM,CAAA;KAAC,GAC7E,QAAQ,CAWpB;IArCD;;OAEG;IACH,YAFU,YAAY,GAAC,MAAM,CAEK;IAElC;;;OAGG;IACH,WAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,GAFU,MAAM,CAEV;IAEN;;;OAGG;IACH,QAFU,MAAM,CAEL;IAiCX;;;;OAIG;IACH,cAHW,QAAQ,GACN,OAAO,CAOnB;IAED,eASC;IAED,kBAEC;IAED;;;;;MAOC;IAED;;;;;aAKC;CACJ;;;;oCA7HmC,0BAA0B"}
1
+ {"version":3,"file":"EqEffect.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/EqEffect.js"],"names":[],"mappings":";;;2BAWU,MAAM;;;;;;;;;;;AAoBhB;;GAEG;AACH;IAyBI;;;;OAIG;IACH,mDAHW;QAAC,UAAU,CAAC,EAAC,YAAY,GAAC,MAAM,CAAC;QAAC,SAAS,CAAC,EAAC,MAAM,CAAC;QAAC,CAAC,CAAC,EAAC,MAAM,CAAC;QAAC,MAAM,CAAC,EAAC,MAAM,CAAA;KAAC,GAC7E,QAAQ,CAWpB;IArCD;;OAEG;IACH,YAFU,YAAY,GAAC,MAAM,CAEK;IAElC;;;OAGG;IACH,WAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,GAFU,MAAM,CAEV;IAEN;;;OAGG;IACH,QAFU,MAAM,CAEL;IAqCX;;;;OAIG;IACH,cAHW,QAAQ,GACN,OAAO,CAOnB;IAED,eASC;IAED,kBAEC;IAED;;;;;MAOC;IAED;;;;;aAKC;CACJ;;;oBAOS,MAAM,EAAE;;+BAzIL,OAAO,0BAA0B,EAAE,gBAAgB;oCAH5B,0BAA0B"}
@@ -1,131 +1,146 @@
1
- import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
2
- import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
3
- import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
4
- import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
5
-
6
- /**
7
- * Filter type, mapped to a WebAudio {@link BiquadFilterType}.
8
- * @enum {number}
9
- */
10
- export const EqFilterType = {
11
- Lowpass: 0,
12
- Highpass: 1,
13
- Bandpass: 2,
14
- Lowshelf: 3,
15
- Highshelf: 4,
16
- Peaking: 5,
17
- Notch: 6,
18
- Allpass: 7
19
- };
20
-
21
- /**
22
- * @type {string[]}
23
- */
24
- const EQ_FILTER_TYPE_TO_BIQUAD = [
25
- 'lowpass', 'highpass', 'bandpass', 'lowshelf', 'highshelf', 'peaking', 'notch', 'allpass'
26
- ];
27
-
28
- /**
29
- * Equalizer / filter bus insert, backed by a {@link BiquadFilterNode}.
30
- */
31
- export class EqEffect extends AbstractAudioEffect {
32
-
33
- /**
34
- * @type {EqFilterType|number}
35
- */
36
- filterType = EqFilterType.Peaking;
37
-
38
- /**
39
- * Cutoff/center frequency in Hz.
40
- * @type {number}
41
- */
42
- frequency = 350;
43
-
44
- /**
45
- * Quality factor.
46
- * @type {number}
47
- */
48
- Q = 1;
49
-
50
- /**
51
- * Boost/cut in decibels (only used by peaking / shelf filters).
52
- * @type {number}
53
- */
54
- gainDb = 0;
55
-
56
- /**
57
- *
58
- * @param {{filterType?:EqFilterType|number, frequency?:number, Q?:number, gainDb?:number}} [options]
59
- * @returns {EqEffect}
60
- */
61
- static from({ filterType = EqFilterType.Peaking, frequency = 350, Q = 1, gainDb = 0 } = {}) {
62
- const r = new EqEffect();
63
-
64
- r.filterType = filterType;
65
- r.frequency = frequency;
66
- r.Q = Q;
67
- r.gainDb = gainDb;
68
-
69
- return r;
70
- }
71
-
72
- /**
73
- * @param {BaseAudioContext} ctx
74
- * @returns {{input: AudioNode, output: AudioNode}}
75
- */
76
- build(ctx) {
77
- const node = ctx.createBiquadFilter();
78
-
79
- node.type = EQ_FILTER_TYPE_TO_BIQUAD[this.filterType] ?? 'peaking';
80
- node.frequency.value = this.frequency;
81
- node.Q.value = this.Q;
82
- node.gain.value = this.gainDb;
83
-
84
- return { input: node, output: node };
85
- }
86
-
87
- /**
88
- *
89
- * @param {EqEffect} other
90
- * @returns {boolean}
91
- */
92
- equals(other) {
93
- return this.filterType === other.filterType
94
- && this.frequency === other.frequency
95
- && this.Q === other.Q
96
- && this.gainDb === other.gainDb;
97
- }
98
-
99
- hash() {
100
- return hash_mix2(
101
- hash_mix3(
102
- this.filterType,
103
- computeHashFloat(this.frequency),
104
- computeHashFloat(this.Q)
105
- ),
106
- computeHashFloat(this.gainDb)
107
- );
108
- }
109
-
110
- clone() {
111
- return EqEffect.from(this);
112
- }
113
-
114
- toJSON() {
115
- return {
116
- filterType: this.filterType,
117
- frequency: this.frequency,
118
- Q: this.Q,
119
- gainDb: this.gainDb
120
- };
121
- }
122
-
123
- fromJSON({ filterType = EqFilterType.Peaking, frequency = 350, Q = 1, gainDb = 0 }) {
124
- this.filterType = filterType;
125
- this.frequency = frequency;
126
- this.Q = Q;
127
- this.gainDb = gainDb;
128
- }
129
- }
130
-
131
- EqEffect.typeName = "SopraEqEffect";
1
+ import { hash_mix2 } from "../../../../../core/math/hash/hash_mix2.js";
2
+ import { hash_mix3 } from "../../../../../core/math/hash/hash_mix3.js";
3
+ import { computeHashFloat } from "../../../../../core/primitives/numbers/computeHashFloat.js";
4
+ import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
5
+
6
+ /**
7
+ * @typedef {import("./AbstractAudioEffect.js").BuiltAudioEffect} BuiltAudioEffect
8
+ */
9
+
10
+ /**
11
+ * Filter type, mapped to a WebAudio {@link BiquadFilterType}.
12
+ * @enum {number}
13
+ */
14
+ export const EqFilterType = {
15
+ Lowpass: 0,
16
+ Highpass: 1,
17
+ Bandpass: 2,
18
+ Lowshelf: 3,
19
+ Highshelf: 4,
20
+ Peaking: 5,
21
+ Notch: 6,
22
+ Allpass: 7
23
+ };
24
+
25
+ /**
26
+ * @type {string[]}
27
+ */
28
+ const EQ_FILTER_TYPE_TO_BIQUAD = [
29
+ 'lowpass', 'highpass', 'bandpass', 'lowshelf', 'highshelf', 'peaking', 'notch', 'allpass'
30
+ ];
31
+
32
+ /**
33
+ * Equalizer / filter insert (on a bus or an event), backed by a {@link BiquadFilterNode}.
34
+ */
35
+ export class EqEffect extends AbstractAudioEffect {
36
+
37
+ /**
38
+ * @type {EqFilterType|number}
39
+ */
40
+ filterType = EqFilterType.Peaking;
41
+
42
+ /**
43
+ * Cutoff/center frequency in Hz.
44
+ * @type {number}
45
+ */
46
+ frequency = 350;
47
+
48
+ /**
49
+ * Quality factor.
50
+ * @type {number}
51
+ */
52
+ Q = 1;
53
+
54
+ /**
55
+ * Boost/cut in decibels (only used by peaking / shelf filters).
56
+ * @type {number}
57
+ */
58
+ gainDb = 0;
59
+
60
+ /**
61
+ *
62
+ * @param {{filterType?:EqFilterType|number, frequency?:number, Q?:number, gainDb?:number}} [options]
63
+ * @returns {EqEffect}
64
+ */
65
+ static from({ filterType = EqFilterType.Peaking, frequency = 350, Q = 1, gainDb = 0 } = {}) {
66
+ const r = new EqEffect();
67
+
68
+ r.filterType = filterType;
69
+ r.frequency = frequency;
70
+ r.Q = Q;
71
+ r.gainDb = gainDb;
72
+
73
+ return r;
74
+ }
75
+
76
+ /**
77
+ * @param {BaseAudioContext} ctx
78
+ * @returns {BuiltAudioEffect}
79
+ */
80
+ build(ctx) {
81
+ const node = ctx.createBiquadFilter();
82
+
83
+ node.type = EQ_FILTER_TYPE_TO_BIQUAD[this.filterType] ?? 'peaking';
84
+ node.frequency.value = this.frequency;
85
+ node.Q.value = this.Q;
86
+ node.gain.value = this.gainDb;
87
+
88
+ return {
89
+ input: node,
90
+ output: node,
91
+ params: [node.frequency, node.Q, node.gain]
92
+ };
93
+ }
94
+
95
+ /**
96
+ *
97
+ * @param {EqEffect} other
98
+ * @returns {boolean}
99
+ */
100
+ equals(other) {
101
+ return this.filterType === other.filterType
102
+ && this.frequency === other.frequency
103
+ && this.Q === other.Q
104
+ && this.gainDb === other.gainDb;
105
+ }
106
+
107
+ hash() {
108
+ return hash_mix2(
109
+ hash_mix3(
110
+ this.filterType,
111
+ computeHashFloat(this.frequency),
112
+ computeHashFloat(this.Q)
113
+ ),
114
+ computeHashFloat(this.gainDb)
115
+ );
116
+ }
117
+
118
+ clone() {
119
+ return EqEffect.from(this);
120
+ }
121
+
122
+ toJSON() {
123
+ return {
124
+ filterType: this.filterType,
125
+ frequency: this.frequency,
126
+ Q: this.Q,
127
+ gainDb: this.gainDb
128
+ };
129
+ }
130
+
131
+ fromJSON({ filterType = EqFilterType.Peaking, frequency = 350, Q = 1, gainDb = 0 }) {
132
+ this.filterType = filterType;
133
+ this.frequency = frequency;
134
+ this.Q = Q;
135
+ this.gainDb = gainDb;
136
+ }
137
+ }
138
+
139
+ EqEffect.typeName = "SopraEqEffect";
140
+
141
+ /**
142
+ * What a built EQ can move while it plays. The filter TYPE is structure, not a parameter.
143
+ * @readonly
144
+ * @type {string[]}
145
+ */
146
+ EqEffect.parameters = ['frequency', 'Q', 'gainDb'];
@@ -48,5 +48,6 @@ export class ReverbEffect extends AbstractAudioEffect {
48
48
  export namespace ReverbEffect {
49
49
  let typeName: string;
50
50
  }
51
+ export type BuiltAudioEffect = import("./AbstractAudioEffect.js").BuiltAudioEffect;
51
52
  import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
52
53
  //# sourceMappingURL=ReverbEffect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReverbEffect.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/ReverbEffect.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;GAWG;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;IAoCf;;;OAGG;IACH,cAHW,YAAY,GACV,OAAO,CAKnB;IAED,eAKC;IAED,sBAEC;IAED;;;MAKC;IAED;;;aAGC;CACJ;;;;oCA1GmC,0BAA0B"}
1
+ {"version":3,"file":"ReverbEffect.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/sound/sopra/definition/effect/ReverbEffect.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;GAWG;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;IAqCf;;;OAGG;IACH,cAHW,YAAY,GACV,OAAO,CAKnB;IAED,eAKC;IAED,sBAEC;IAED;;;MAKC;IAED;;;aAGC;CACJ;;;;+BA5GY,OAAO,0BAA0B,EAAE,gBAAgB;oCAH5B,0BAA0B"}
@@ -4,6 +4,10 @@ import { computeHashFloat } from "../../../../../core/primitives/numbers/compute
4
4
  import { reverbImpulseResponse } from "../../../simulation/render/reverbImpulseResponse.js";
5
5
  import { AbstractAudioEffect } from "./AbstractAudioEffect.js";
6
6
 
7
+ /**
8
+ * @typedef {import("./AbstractAudioEffect.js").BuiltAudioEffect} BuiltAudioEffect
9
+ */
10
+
7
11
  /**
8
12
  * Seed for the procedural impulse response. Fixed (not authorable): the IR is a decaying noise tail whose
9
13
  * audible character comes entirely from `decaySeconds`/`decayPower`, so the noise realisation carries no
@@ -58,7 +62,8 @@ export class ReverbEffect extends AbstractAudioEffect {
58
62
 
59
63
  /**
60
64
  * @param {BaseAudioContext} ctx
61
- * @returns {{input: AudioNode, output: AudioNode}}
65
+ * @returns {BuiltAudioEffect} no params: the tail is baked into the impulse response at build, so
66
+ * {@link ReverbEffect.parameters} is empty (inherited)
62
67
  */
63
68
  build(ctx) {
64
69
  const convolver = ctx.createConvolver();