@carbonenginejs/runtime-resource 0.12.2 → 0.14.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 (238) hide show
  1. package/README.md +21 -0
  2. package/dist/CjsResMan.js +393 -29
  3. package/dist/CjsResMan.js.map +1 -1
  4. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +165 -118
  5. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
  6. package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
  7. package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
  8. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +7 -113
  9. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  10. package/dist/format/carbonEffect/carbonEffectRecords.js +258 -66
  11. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
  12. package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
  13. package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
  14. package/dist/format/effect/effectBodyInventory.js +146 -0
  15. package/dist/format/effect/effectBodyInventory.js.map +1 -0
  16. package/dist/format/effect/effectPermutationGraph.js +13 -13
  17. package/dist/format/effect/effectPermutationGraph.js.map +1 -1
  18. package/dist/format/index.js +4 -4
  19. package/dist/formats/black/CjsBlackFormat.js +19 -1
  20. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  21. package/dist/formats/bnk/CjsBnkFormat.js +28 -9
  22. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  23. package/dist/formats/bnk/core/busNodes.js +252 -0
  24. package/dist/formats/bnk/core/busNodes.js.map +1 -0
  25. package/dist/formats/bnk/core/effectNodes.js +147 -0
  26. package/dist/formats/bnk/core/effectNodes.js.map +1 -0
  27. package/dist/formats/bnk/core/eventAction.js +135 -24
  28. package/dist/formats/bnk/core/eventAction.js.map +1 -1
  29. package/dist/formats/bnk/core/globalSettings.js +215 -0
  30. package/dist/formats/bnk/core/globalSettings.js.map +1 -0
  31. package/dist/formats/bnk/core/helpers.js +37 -5
  32. package/dist/formats/bnk/core/helpers.js.map +1 -1
  33. package/dist/formats/bnk/core/musicNodes.js +43 -19
  34. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  35. package/dist/formats/bnk/core/nodeBase.js +28 -7
  36. package/dist/formats/bnk/core/nodeBase.js.map +1 -1
  37. package/dist/formats/dds/core/helpers.js +40 -1
  38. package/dist/formats/dds/core/helpers.js.map +1 -1
  39. package/dist/formats/dxbc/CjsDxbcFormat.js +45 -0
  40. package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
  41. package/dist/formats/dxbc/core/disassemble.js +240 -0
  42. package/dist/formats/dxbc/core/disassemble.js.map +1 -0
  43. package/dist/formats/gltf/CjsGltfFormat.js +1 -39
  44. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
  45. package/dist/formats/gltf/core/helpers.js +1 -21
  46. package/dist/formats/gltf/core/helpers.js.map +1 -1
  47. package/dist/formats/hlsl/CjsHlslFormat.js +0 -21
  48. package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
  49. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +118 -49
  50. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
  51. package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
  52. package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
  53. package/dist/formats/hlsl/core/localLightFamily.js +133 -0
  54. package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
  55. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +79 -73
  56. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  57. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +8 -1
  58. package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
  59. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +11 -691
  60. package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
  61. package/dist/formats/index.js +4 -2
  62. package/dist/formats/index.js.map +1 -1
  63. package/dist/formats/obj/CjsObjFormat.js +1 -22
  64. package/dist/formats/obj/CjsObjFormat.js.map +1 -1
  65. package/dist/formats/obj/core/helpers.js +1 -21
  66. package/dist/formats/obj/core/helpers.js.map +1 -1
  67. package/dist/formats/pickle/CjsPickleFormat.js +214 -0
  68. package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
  69. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
  70. package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
  71. package/dist/formats/pickle/index.js +2 -0
  72. package/dist/formats/pickle/index.js.map +1 -0
  73. package/dist/formats/red/core/redGraph.js +11 -8
  74. package/dist/formats/red/core/redGraph.js.map +1 -1
  75. package/dist/formats/stl/CjsStlFormat.js +1 -46
  76. package/dist/formats/stl/CjsStlFormat.js.map +1 -1
  77. package/dist/formats/stl/core/helpers.js +1 -21
  78. package/dist/formats/stl/core/helpers.js.map +1 -1
  79. package/dist/formats/webgl/CjsWebglFormat.js +33 -55
  80. package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
  81. package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
  82. package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
  83. package/dist/formats/webgl/core/effectPackage.js +216 -108
  84. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  85. package/dist/formats/webgl/core/errors.js +1 -1
  86. package/dist/formats/webgl/core/errors.js.map +1 -1
  87. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +166 -24
  88. package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  89. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +63 -5
  90. package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
  91. package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
  92. package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
  93. package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
  94. package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
  95. package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
  96. package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
  97. package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +12 -8
  98. package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
  99. package/dist/formats/webgl/core/helpers.js +33 -172
  100. package/dist/formats/webgl/core/helpers.js.map +1 -1
  101. package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
  102. package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
  103. package/dist/formats/webgl/core/readGlslEffectContainer.js +249 -0
  104. package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
  105. package/dist/formats/webgpu/CjsWebgpuFormat.js +15 -15
  106. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  107. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +37 -145
  108. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
  109. package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +13 -27
  110. package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
  111. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +1 -1
  112. package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
  113. package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +4 -4
  114. package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
  115. package/dist/formats/webgpu/core/effectBackendBodySet.js +18 -18
  116. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  117. package/dist/formats/webgpu/core/errors.js +1 -1
  118. package/dist/formats/webgpu/core/errors.js.map +1 -1
  119. package/dist/formats/webgpu/core/helpers.js +22 -22
  120. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  121. package/dist/formats/webgpu/core/packageEffect.js +11 -15
  122. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  123. package/dist/formats/webgpu/core/packageEffectSelection.js +1 -1
  124. package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
  125. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +23 -23
  126. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  127. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +6 -6
  128. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  129. package/dist/formats/yaml/CjsYamlFormat.js +3 -3
  130. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  131. package/dist/formats/yaml/core/CjsYamlReader.js +4 -6
  132. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  133. package/dist/formats/yaml/core/helpers.js +27 -1
  134. package/dist/formats/yaml/core/helpers.js.map +1 -1
  135. package/dist/index.js +2 -0
  136. package/dist/index.js.map +1 -1
  137. package/dist/resource/CjsLoadingObject.js +19 -0
  138. package/dist/resource/CjsLoadingObject.js.map +1 -0
  139. package/dist/resource/CjsResource.js +4 -0
  140. package/dist/resource/CjsResource.js.map +1 -1
  141. package/dist/resource/ResourceHandlerMode.js +14 -0
  142. package/dist/resource/ResourceHandlerMode.js.map +1 -0
  143. package/dist/resource/index.js +2 -0
  144. package/dist/resource/index.js.map +1 -1
  145. package/dist/resource/shader/Tr2EffectRes.js +118 -213
  146. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  147. package/dist/resource/shader/Tr2Shader.js +37 -15
  148. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  149. package/dist/resource/shader/reflection/Tr2EffectConstant.js +37 -29
  150. package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
  151. package/dist/resource/shader/reflection/Tr2EffectDescription.js +39 -34
  152. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  153. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +51 -30
  154. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  155. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +45 -25
  156. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  157. package/dist/resource/shader/reflection/Tr2EffectResource.js +51 -17
  158. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  159. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +219 -88
  160. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  161. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +28 -18
  162. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  163. package/dist/resource/shader/reflection/Tr2Pass.js +96 -39
  164. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  165. package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
  166. package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
  167. package/dist/resource/shader/reflection/shaderStage.js +22 -0
  168. package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
  169. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +68 -10
  170. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  171. package/dist/worker/CjsResManMainThreadLoader.js +9 -7
  172. package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
  173. package/dist/worker/CjsResManWorker.js +5 -4
  174. package/dist/worker/CjsResManWorker.js.map +1 -1
  175. package/dist/worker/CjsResManWorkerLoader.js +9 -6
  176. package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
  177. package/docs/README.md +2 -2
  178. package/docs/architecture.md +12 -3
  179. package/docs/concepts/resource-lifecycle.md +9 -8
  180. package/docs/concepts/shader-resource-model.md +14 -17
  181. package/docs/concepts/writing-an-engine-adapter.md +1 -1
  182. package/docs/formats/README.md +4 -2
  183. package/docs/formats/carbon-effect-container.md +127 -26
  184. package/docs/formats/dxbc/architecture.md +1 -1
  185. package/docs/formats/dxbc/reference/api.md +28 -0
  186. package/docs/formats/hlsl/README.md +3 -3
  187. package/docs/formats/hlsl/architecture.md +8 -9
  188. package/docs/formats/hlsl/guides/hydrating-json-output.md +3 -5
  189. package/docs/formats/hlsl/guides/reading-effects.md +5 -1
  190. package/docs/formats/hlsl/reference/advanced-analysis.md +20 -25
  191. package/docs/formats/hlsl/reference/api.md +0 -7
  192. package/docs/formats/hlsl/reference/json-graph.md +1 -4
  193. package/docs/formats/pickle.md +82 -0
  194. package/docs/formats/webgl/README.md +71 -13
  195. package/docs/formats/webgl/architecture.md +16 -17
  196. package/docs/formats/webgl/carbon-constant-layouts.md +3 -3
  197. package/docs/formats/webgl/decl-io.md +3 -3
  198. package/docs/formats/webgl/memory-structured.md +27 -8
  199. package/docs/formats/webgl/texture-sample.md +1 -1
  200. package/docs/formats/webgpu/README.md +3 -3
  201. package/docs/formats/webgpu/architecture.md +5 -6
  202. package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +10 -11
  203. package/docs/formats/webgpu/guides/effect-packaging.md +6 -8
  204. package/docs/formats/webgpu/reference/api.md +11 -12
  205. package/docs/formats/webgpu/reference/wgsl-compatibility.md +11 -8
  206. package/docs/formats/wwise.md +63 -2
  207. package/docs/reference/classes/core.md +10 -0
  208. package/docs/reference/classes/formats.md +40 -48
  209. package/docs/reference/classes/resources.md +2 -2
  210. package/docs/reference/queues.md +88 -4
  211. package/docs/reference/workers.md +7 -0
  212. package/package.json +61 -61
  213. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
  214. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
  215. package/dist/format/effect/effectReflectionPackage.js +0 -636
  216. package/dist/format/effect/effectReflectionPackage.js.map +0 -1
  217. package/dist/formats/hlsl/core/HlslReader.js +0 -16
  218. package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
  219. package/dist/formats/hlsl/core/portableReflection.js +0 -848
  220. package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
  221. package/dist/formats/hlsl/portable.js +0 -2
  222. package/dist/formats/hlsl/portable.js.map +0 -1
  223. package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
  224. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
  225. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
  226. package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
  227. package/dist/formats/webgl/core/cewg/binary.js +0 -19
  228. package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
  229. package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
  230. package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
  231. package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
  232. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
  233. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
  234. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
  235. package/dist/resource/shader/portable.js +0 -33
  236. package/dist/resource/shader/portable.js.map +0 -1
  237. package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
  238. package/docs/formats/webgl/effect-reflection.md +0 -127
@@ -1 +1 @@
1
- {"version":3,"file":"musicNodes.js","sources":["../../../../../src/formats/bnk/core/musicNodes.js"],"sourcesContent":["// Wwise interactive-music node decoding: typed payloads for music-segment\r\n// (10), music-track (11), music-switch-container (12), and\r\n// music-playlist-container (13) HIRC entries. Exposed through\r\n// `CjsBnkFormat.wwise` next to the event graph walk - interpretation over\r\n// `inspect()` results, never part of the format read path.\r\n//\r\n// Verified against EVE soundbanks (bank generator version 150 / Wwise\r\n// 2022.1): 2,484 tracks, 1,326 segments, 214 playlists, and 54 switch\r\n// containers across music.bnk + music_essential.bnk all decode with the\r\n// exact-end validation below (2026-07-19 corpus run).\r\n//\r\n// Approach: consumers of these nodes (music schedulers) only need the fields\r\n// AFTER the variable-length NodeBaseParams block - children, meter, stingers,\r\n// and each type's tail - so segment/playlist/switch payloads are parsed from\r\n// a children+meter ANCHOR (a u32 child count and child ids that exist in the\r\n// bank, followed by a plausible AkMeterInfo) and the parse is accepted only\r\n// when it consumes the payload EXACTLY to its end. Track clips live at the\r\n// head (before NodeBaseParams) and the track's type block is tail-validated\r\n// the same way.\r\n\r\n/**\r\n * Little-endian byte cursor over HIRC payload bytes used to decode Wwise\r\n * interactive-music node payloads with exact-end validation.\r\n */\r\nclass MusicCursor\r\n{\r\n /** Creates an MusicCursor with caller-provided initial state. */\r\n constructor(bytes, offset = 0)\r\n {\r\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n this.bytes = bytes;\r\n this.at = offset;\r\n }\r\n\r\n /** Returns the number of unread BNK bytes for the BNK format reader. */\r\n get remaining()\r\n {\r\n return this.bytes.byteLength - this.at;\r\n }\r\n\r\n /**\r\n * Reads an unsigned 8-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n u8()\r\n {\r\n return this.view.getUint8(this.at++);\r\n }\r\n\r\n /**\r\n * Reads an unsigned 16-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n u16()\r\n {\r\n const value = this.view.getUint16(this.at, true);\r\n this.at += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads a signed 16-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n s16()\r\n {\r\n const value = this.view.getInt16(this.at, true);\r\n this.at += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads an unsigned 32-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n u32()\r\n {\r\n const value = this.view.getUint32(this.at, true);\r\n this.at += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads a signed 32-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n s32()\r\n {\r\n const value = this.view.getInt32(this.at, true);\r\n this.at += 4;\r\n return value;\r\n }\r\n\r\n /** Reads a 32-bit float from the BNK cursor for the BNK format reader. */\r\n f32()\r\n {\r\n const value = this.view.getFloat32(this.at, true);\r\n this.at += 4;\r\n return value;\r\n }\r\n\r\n /** Reads a 64-bit float from the BNK cursor for the BNK format reader. */\r\n f64()\r\n {\r\n const value = this.view.getFloat64(this.at, true);\r\n this.at += 8;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads a null-terminated string from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n stringZ()\r\n {\r\n let end = this.at;\r\n while (end < this.bytes.byteLength && this.bytes[end] !== 0) end++;\r\n let value = \"\";\r\n for (let i = this.at; i < end; i++) value += String.fromCharCode(this.bytes[i]);\r\n this.at = end + 1;\r\n return value;\r\n }\r\n}\r\n\r\nfunction plausibleMeter(view, at, byteLength)\r\n{\r\n if (at + 22 > byteLength) return false;\r\n const grid = view.getFloat64(at, true);\r\n const offset = view.getFloat64(at + 8, true);\r\n const tempo = view.getFloat32(at + 16, true);\r\n const beats = view.getUint8(at + 20);\r\n const beatValue = view.getUint8(at + 21);\r\n return Number.isFinite(grid) && grid >= 0 && grid < 600000\r\n && Number.isFinite(offset) && offset >= 0 && offset < 600000\r\n && Number.isFinite(tempo) && tempo > 0 && tempo < 1000\r\n && beats >= 1 && beats <= 64\r\n && [ 1, 2, 4, 8, 16, 32 ].includes(beatValue);\r\n}\r\n\r\nfunction findAnchors(bytes, knownIds)\r\n{\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n const anchors = [];\r\n for (let at = 1; at + 4 <= bytes.byteLength; at++)\r\n {\r\n const count = view.getUint32(at, true);\r\n if (count > 256 || at + 4 + count * 4 + 22 > bytes.byteLength) continue;\r\n let valid = true;\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (!knownIds.has(view.getUint32(at + 4 + i * 4, true)))\r\n {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n if (valid && plausibleMeter(view, at + 4 + count * 4, bytes.byteLength))\r\n {\r\n anchors.push(at);\r\n }\r\n }\r\n return anchors;\r\n}\r\n\r\nfunction readMusicNodeTail(cursor)\r\n{\r\n const childCount = cursor.u32();\r\n const children = [];\r\n for (let i = 0; i < childCount; i++) children.push(cursor.u32());\r\n const meter = {\r\n gridPeriod: cursor.f64(),\r\n gridOffset: cursor.f64(),\r\n tempo: cursor.f32(),\r\n beatsPerBar: cursor.u8(),\r\n beatValue: cursor.u8()\r\n };\r\n const meterOverride = cursor.u8() !== 0;\r\n const stingerCount = cursor.u32();\r\n const stingers = [];\r\n for (let i = 0; i < stingerCount; i++)\r\n {\r\n stingers.push({\r\n triggerId: cursor.u32(),\r\n segmentId: cursor.u32(),\r\n syncPlayAt: cursor.u32(),\r\n cueFilterHash: cursor.u32(),\r\n dontRepeatTime: cursor.s32(),\r\n numSegmentLookAhead: cursor.u32()\r\n });\r\n }\r\n return { children, meter, meterOverride, stingers };\r\n}\r\n\r\n/** AkMusicTransNodeParams: transition rules shared by playlist + switch containers. */\r\nfunction readTransRules(cursor)\r\n{\r\n const ruleCount = cursor.u32();\r\n if (ruleCount > 4096) throw new RangeError(\"rule count\");\r\n const rules = [];\r\n for (let i = 0; i < ruleCount; i++)\r\n {\r\n const srcCount = cursor.u32();\r\n if (srcCount > 1024) throw new RangeError(\"src count\");\r\n const srcIds = [];\r\n for (let j = 0; j < srcCount; j++) srcIds.push(cursor.s32());\r\n const dstCount = cursor.u32();\r\n if (dstCount > 1024) throw new RangeError(\"dst count\");\r\n const dstIds = [];\r\n for (let j = 0; j < dstCount; j++) dstIds.push(cursor.s32());\r\n const src = {\r\n transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32(),\r\n syncType: cursor.u32(), cueFilterHash: cursor.u32(), playPostExit: cursor.u8() !== 0\r\n };\r\n const dst = {\r\n transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32(),\r\n cueFilterHash: cursor.u32(), jumpToId: cursor.u32(), jumpToType: cursor.u16(),\r\n entryType: cursor.u16(), playPreEntry: cursor.u8() !== 0,\r\n matchSourceCueName: cursor.u8() !== 0\r\n };\r\n let transitionSegment = null;\r\n if (cursor.u8() !== 0)\r\n {\r\n transitionSegment = {\r\n segmentId: cursor.u32(),\r\n fadeIn: { transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32() },\r\n fadeOut: { transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32() },\r\n playPreEntry: cursor.u8() !== 0,\r\n playPostExit: cursor.u8() !== 0\r\n };\r\n }\r\n rules.push({ srcIds, dstIds, src, dst, transitionSegment });\r\n }\r\n return rules;\r\n}\r\n\r\n/**\r\n * Decode a music-segment (HIRC 10) payload: children, meter, stingers,\r\n * duration, and entry/exit markers.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\r\n * @param {Set<number>} knownIds Every HIRC object id in the same bank.\r\n * @returns {object|null} Decoded segment, or null when no anchored parse consumes the payload exactly.\r\n */\r\nexport function parseMusicSegment(bytes, knownIds)\r\n{\r\n for (const anchor of findAnchors(bytes, knownIds))\r\n {\r\n try\r\n {\r\n const cursor = new MusicCursor(bytes, anchor);\r\n const node = readMusicNodeTail(cursor);\r\n const duration = cursor.f64();\r\n if (!Number.isFinite(duration) || duration < 0 || duration > 36000000) continue;\r\n const markerCount = cursor.u32();\r\n if (markerCount > 1024) continue;\r\n const markers = [];\r\n for (let i = 0; i < markerCount; i++)\r\n {\r\n markers.push({ id: cursor.u32(), position: cursor.f64(), name: cursor.stringZ() });\r\n }\r\n if (cursor.at !== bytes.byteLength) continue;\r\n if (markers.some(marker => !Number.isFinite(marker.position) || marker.position < 0)) continue;\r\n return { ...node, duration, markers };\r\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Decode a music-track (HIRC 11) payload: sources, clips (play position and\r\n * trims per subtrack), track type, and switch parameters for switch tracks.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\r\n * @returns {object|null} Decoded track, or null when neither tail layout validates.\r\n */\r\nexport function parseMusicTrack(bytes)\r\n{\r\n const cursor = new MusicCursor(bytes, 0);\r\n cursor.u8(); // uFlags (midi/override bits)\r\n const sourceCount = cursor.u32();\r\n if (sourceCount > 512) return null;\r\n const sources = [];\r\n for (let i = 0; i < sourceCount; i++)\r\n {\r\n const pluginId = cursor.u32();\r\n const streamType = cursor.u8();\r\n const sourceId = cursor.u32();\r\n const inMemoryMediaSize = cursor.u32();\r\n const sourceBits = cursor.u8();\r\n if ((pluginId & 0x0f) === 0x02)\r\n {\r\n const size = cursor.u32();\r\n cursor.at += size;\r\n }\r\n sources.push({ pluginId, streamType, sourceId, inMemoryMediaSize, sourceBits });\r\n }\r\n const clipCount = cursor.u32();\r\n if (clipCount > 4096) return null;\r\n const clips = [];\r\n for (let i = 0; i < clipCount; i++)\r\n {\r\n clips.push({\r\n trackId: cursor.u32(),\r\n sourceId: cursor.u32(),\r\n eventId: cursor.u32(),\r\n playAt: cursor.f64(),\r\n beginTrimOffset: cursor.f64(),\r\n endTrimOffset: cursor.f64(),\r\n srcDuration: cursor.f64()\r\n });\r\n }\r\n const subTrackCount = clipCount > 0 ? cursor.u32() : 0;\r\n const autoCount = cursor.u32();\r\n if (autoCount > 4096) return null;\r\n for (let i = 0; i < autoCount; i++)\r\n {\r\n cursor.u32(); // clip index\r\n cursor.u32(); // automation type\r\n const points = cursor.u32();\r\n if (points > 65536) return null;\r\n cursor.at += points * 12;\r\n }\r\n const headEnd = cursor.at;\r\n\r\n // Tail: [NodeBaseParams...] u8 trackType, [switch+trans params when the\r\n // type is 3], f32 lookAheadTime. The switch layout is tried FIRST because\r\n // it validates every field to the exact payload end - the simple layout\r\n // only checks one byte, and a switch tail ending in zero bytes would\r\n // satisfy it falsely.\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n const end = bytes.byteLength;\r\n for (let typeAt = headEnd; typeAt <= end - 5; typeAt++)\r\n {\r\n if (view.getUint8(typeAt) !== 3) continue;\r\n const tail = new MusicCursor(bytes, typeAt + 1);\r\n try\r\n {\r\n const groupType = tail.u8();\r\n if (groupType > 1) continue;\r\n const groupId = tail.u32();\r\n const defaultSwitch = tail.u32();\r\n const assocCount = tail.u32();\r\n if (assocCount > 1024) continue;\r\n const assoc = [];\r\n for (let i = 0; i < assocCount; i++) assoc.push(tail.u32());\r\n const trans = {\r\n srcTransitionTime: tail.s32(), srcFadeCurve: tail.u32(), srcFadeOffset: tail.s32(),\r\n syncType: tail.u32(), cueFilterHash: tail.u32(),\r\n dstTransitionTime: tail.s32(), dstFadeCurve: tail.u32(), dstFadeOffset: tail.s32()\r\n };\r\n const lookAheadTime = tail.f32();\r\n if (tail.at !== end) continue;\r\n return {\r\n sources, clips, subTrackCount,\r\n trackType: 3,\r\n lookAheadTime,\r\n switchParams: { groupType, groupId, defaultSwitch, assoc, trans }\r\n };\r\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n const simpleAt = end - 5;\r\n if (simpleAt >= headEnd)\r\n {\r\n const type = view.getUint8(simpleAt);\r\n if (type <= 2)\r\n {\r\n return {\r\n sources, clips, subTrackCount,\r\n trackType: type,\r\n lookAheadTime: view.getFloat32(end - 4, true),\r\n switchParams: null\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Decode a music-playlist-container (HIRC 13) payload: children, meter,\r\n * stingers, transition rules, and the flat pre-order playlist tree.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\r\n * @param {Set<number>} knownIds Every HIRC object id in the same bank.\r\n * @returns {object|null} Decoded playlist container, or null when no anchored parse validates.\r\n */\r\nexport function parseMusicPlaylist(bytes, knownIds)\r\n{\r\n for (const anchor of findAnchors(bytes, knownIds))\r\n {\r\n try\r\n {\r\n const cursor = new MusicCursor(bytes, anchor);\r\n const node = readMusicNodeTail(cursor);\r\n const rules = readTransRules(cursor);\r\n const itemCount = cursor.u32();\r\n if (itemCount > 8192) continue;\r\n if (cursor.remaining !== itemCount * 30) continue;\r\n const items = [];\r\n for (let i = 0; i < itemCount; i++)\r\n {\r\n items.push({\r\n segmentId: cursor.u32(),\r\n playlistItemId: cursor.u32(),\r\n childCount: cursor.u32(),\r\n rsType: cursor.s32(),\r\n loop: cursor.s16(),\r\n loopMin: cursor.s16(),\r\n loopMax: cursor.s16(),\r\n weight: cursor.u32(),\r\n avoidRepeatCount: cursor.u16(),\r\n usingWeight: cursor.u8() !== 0,\r\n shuffle: cursor.u8() !== 0\r\n });\r\n }\r\n if (cursor.at !== bytes.byteLength) continue;\r\n return { ...node, rules, playlist: items };\r\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Decode a music-switch-container (HIRC 12) payload: children, meter,\r\n * stingers, transition rules, argument groups, and the decision tree.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\r\n * @param {Set<number>} knownIds Every HIRC object id in the same bank.\r\n * @returns {object|null} Decoded switch container, or null when no anchored parse validates.\r\n */\r\nexport function parseMusicSwitch(bytes, knownIds)\r\n{\r\n for (const anchor of findAnchors(bytes, knownIds))\r\n {\r\n try\r\n {\r\n const cursor = new MusicCursor(bytes, anchor);\r\n const node = readMusicNodeTail(cursor);\r\n const rules = readTransRules(cursor);\r\n const continuePlayback = cursor.u8() !== 0;\r\n const treeDepth = cursor.u32();\r\n if (treeDepth > 16) continue;\r\n const argumentGroups = [];\r\n for (let i = 0; i < treeDepth; i++) argumentGroups.push({ groupId: cursor.u32() });\r\n for (let i = 0; i < treeDepth; i++) argumentGroups[i].groupType = cursor.u8();\r\n const treeDataSize = cursor.u32();\r\n const mode = cursor.u8();\r\n if (cursor.remaining !== treeDataSize) continue;\r\n if (treeDataSize % 12 !== 0) continue;\r\n const treeNodes = [];\r\n const nodeCount = treeDataSize / 12;\r\n for (let i = 0; i < nodeCount; i++)\r\n {\r\n const key = cursor.u32();\r\n // 4-byte union: leaf = audioNodeId, internal = childrenIdx + count.\r\n const audioNodeId = cursor.view.getUint32(cursor.at, true);\r\n const childrenIdx = cursor.u16();\r\n const childrenCount = cursor.u16();\r\n const weight = cursor.u16();\r\n const probability = cursor.u16();\r\n treeNodes.push({ key, audioNodeId, childrenIdx, childrenCount, weight, probability });\r\n }\r\n if (cursor.at !== bytes.byteLength) continue;\r\n return { ...node, rules, continuePlayback, argumentGroups, mode, treeNodes };\r\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nconst MUSIC_PARSERS = Object.freeze({\r\n 10: (payload, knownIds) => parseMusicSegment(payload, knownIds),\r\n 11: payload => parseMusicTrack(payload),\r\n 12: (payload, knownIds) => parseMusicSwitch(payload, knownIds),\r\n 13: (payload, knownIds) => parseMusicPlaylist(payload, knownIds)\r\n});\r\n\r\nconst MUSIC_TYPE_NAMES = Object.freeze({\r\n 10: \"music-segment\",\r\n 11: \"music-track\",\r\n 12: \"music-switch-container\",\r\n 13: \"music-playlist-container\"\r\n});\r\n\r\n/**\r\n * Decode every interactive-music node across one or more inspected banks.\r\n *\r\n * @param {Array<object>} inspections `CjsBnkFormat.inspect()` results for every related music bank.\r\n * @returns {{nodes: Map<number, object>, diagnostics: {parsed: number, failed: Array<{bank: string, type: string, id: number}>}}} Decoded nodes keyed by object id plus per-entry failures.\r\n */\r\nexport function musicNodesFromBanks(inspections)\r\n{\r\n const banks = Array.isArray(inspections) ? inspections : [ inspections ];\r\n const nodes = new Map();\r\n const failed = [];\r\n let parsed = 0;\r\n for (const inspection of banks)\r\n {\r\n const knownIds = new Set();\r\n for (const entry of inspection.hirc ?? []) knownIds.add(entry.id);\r\n for (const entry of inspection.hirc ?? [])\r\n {\r\n const parser = MUSIC_PARSERS[entry.type];\r\n if (!parser) continue;\r\n const payload = entry.payload instanceof Uint8Array ? entry.payload : null;\r\n const decoded = payload ? parser(payload, knownIds) : null;\r\n if (!decoded)\r\n {\r\n failed.push({ bank: inspection.source || \"\", type: MUSIC_TYPE_NAMES[entry.type], id: entry.id });\r\n continue;\r\n }\r\n parsed++;\r\n nodes.set(entry.id, { id: entry.id, type: MUSIC_TYPE_NAMES[entry.type], bank: inspection.source || \"\", ...decoded });\r\n }\r\n }\r\n return { nodes, diagnostics: { parsed, failed } };\r\n}\r\n"],"names":["MusicCursor","constructor","bytes","offset","view","DataView","buffer","byteOffset","byteLength","at","remaining","u8","getUint8","u16","value","getUint16","s16","getInt16","u32","getUint32","s32","getInt32","f32","getFloat32","f64","getFloat64","stringZ","end","i","String","fromCharCode","plausibleMeter","grid","tempo","beats","beatValue","Number","isFinite","includes","findAnchors","knownIds","anchors","count","valid","has","push","readMusicNodeTail","cursor","childCount","children","meter","gridPeriod","gridOffset","beatsPerBar","meterOverride","stingerCount","stingers","triggerId","segmentId","syncPlayAt","cueFilterHash","dontRepeatTime","numSegmentLookAhead","readTransRules","ruleCount","RangeError","rules","srcCount","srcIds","j","dstCount","dstIds","src","transitionTime","fadeCurve","fadeOffset","syncType","playPostExit","dst","jumpToId","jumpToType","entryType","playPreEntry","matchSourceCueName","transitionSegment","fadeIn","fadeOut","parseMusicSegment","anchor","node","duration","markerCount","markers","id","position","name","some","marker","parseMusicTrack","sourceCount","sources","pluginId","streamType","sourceId","inMemoryMediaSize","sourceBits","size","clipCount","clips","trackId","eventId","playAt","beginTrimOffset","endTrimOffset","srcDuration","subTrackCount","autoCount","points","headEnd","typeAt","tail","groupType","groupId","defaultSwitch","assocCount","assoc","trans","srcTransitionTime","srcFadeCurve","srcFadeOffset","dstTransitionTime","dstFadeCurve","dstFadeOffset","lookAheadTime","trackType","switchParams","simpleAt","type","parseMusicPlaylist","itemCount","items","playlistItemId","rsType","loop","loopMin","loopMax","weight","avoidRepeatCount","usingWeight","shuffle","playlist","parseMusicSwitch","continuePlayback","treeDepth","argumentGroups","treeDataSize","mode","treeNodes","nodeCount","key","audioNodeId","childrenIdx","childrenCount","probability","MUSIC_PARSERS","Object","freeze","payload","MUSIC_TYPE_NAMES","musicNodesFromBanks","inspections","banks","Array","isArray","nodes","Map","failed","parsed","inspection","Set","entry","hirc","add","parser","Uint8Array","decoded","bank","source","set","diagnostics"],"mappings":"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"}
1
+ {"version":3,"file":"musicNodes.js","sources":["../../../../../src/formats/bnk/core/musicNodes.js"],"sourcesContent":["// Wwise interactive-music node decoding: typed payloads for music-segment\r\n// (10), music-track (11), music-switch-container (12), and\r\n// music-playlist-container (13) HIRC entries. Exposed through\r\n// `CjsBnkFormat.wwise` next to the event graph walk - interpretation over\r\n// `inspect()` results, never part of the format read path.\r\n//\r\n// Verified against EVE soundbanks (bank generator version 150 / Wwise\r\n// 2022.1): 2,484 tracks, 1,326 segments, 214 playlists, and 54 switch\r\n// containers across music.bnk + music_essential.bnk all decode with the\r\n// exact-end validation below (2026-07-19 corpus run).\r\n//\r\n// Approach: consumers of these nodes (music schedulers) only need the fields\r\n// AFTER the variable-length NodeBaseParams block - children, meter, stingers,\r\n// and each type's tail - so segment/playlist/switch payloads are parsed from\r\n// a children+meter ANCHOR (a u32 child count and child ids that exist in the\r\n// bank, followed by a plausible AkMeterInfo) and the parse is accepted only\r\n// when it consumes the payload EXACTLY to its end. Track clips live at the\r\n// head (before NodeBaseParams) and the track's type block is tail-validated\n// the same way.\n\nimport { parseNodeBaseRange } from \"./nodeBase.js\";\n\r\n/**\r\n * Little-endian byte cursor over HIRC payload bytes used to decode Wwise\r\n * interactive-music node payloads with exact-end validation.\r\n */\r\nclass MusicCursor\r\n{\r\n /** Creates an MusicCursor with caller-provided initial state. */\r\n constructor(bytes, offset = 0)\r\n {\r\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n this.bytes = bytes;\r\n this.at = offset;\r\n }\r\n\r\n /** Returns the number of unread BNK bytes for the BNK format reader. */\r\n get remaining()\r\n {\r\n return this.bytes.byteLength - this.at;\r\n }\r\n\r\n /**\r\n * Reads an unsigned 8-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n u8()\r\n {\r\n return this.view.getUint8(this.at++);\r\n }\r\n\r\n /**\r\n * Reads an unsigned 16-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n u16()\r\n {\r\n const value = this.view.getUint16(this.at, true);\r\n this.at += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads a signed 16-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n s16()\r\n {\r\n const value = this.view.getInt16(this.at, true);\r\n this.at += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads an unsigned 32-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n u32()\r\n {\r\n const value = this.view.getUint32(this.at, true);\r\n this.at += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads a signed 32-bit integer from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n s32()\r\n {\r\n const value = this.view.getInt32(this.at, true);\r\n this.at += 4;\r\n return value;\r\n }\r\n\r\n /** Reads a 32-bit float from the BNK cursor for the BNK format reader. */\r\n f32()\r\n {\r\n const value = this.view.getFloat32(this.at, true);\r\n this.at += 4;\r\n return value;\r\n }\r\n\r\n /** Reads a 64-bit float from the BNK cursor for the BNK format reader. */\r\n f64()\r\n {\r\n const value = this.view.getFloat64(this.at, true);\r\n this.at += 8;\r\n return value;\r\n }\r\n\r\n /**\r\n * Reads a null-terminated string from the BNK cursor for the BNK format\r\n * reader.\r\n */\r\n stringZ()\r\n {\r\n let end = this.at;\r\n while (end < this.bytes.byteLength && this.bytes[end] !== 0) end++;\r\n let value = \"\";\r\n for (let i = this.at; i < end; i++) value += String.fromCharCode(this.bytes[i]);\r\n this.at = end + 1;\r\n return value;\r\n }\r\n}\r\n\r\nfunction plausibleMeter(view, at, byteLength)\r\n{\r\n if (at + 22 > byteLength) return false;\r\n const grid = view.getFloat64(at, true);\r\n const offset = view.getFloat64(at + 8, true);\r\n const tempo = view.getFloat32(at + 16, true);\r\n const beats = view.getUint8(at + 20);\r\n const beatValue = view.getUint8(at + 21);\r\n return Number.isFinite(grid) && grid >= 0 && grid < 600000\r\n && Number.isFinite(offset) && offset >= 0 && offset < 600000\r\n && Number.isFinite(tempo) && tempo > 0 && tempo < 1000\r\n && beats >= 1 && beats <= 64\r\n && [ 1, 2, 4, 8, 16, 32 ].includes(beatValue);\r\n}\r\n\r\nfunction findAnchors(bytes, knownIds)\r\n{\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n const anchors = [];\r\n for (let at = 1; at + 4 <= bytes.byteLength; at++)\r\n {\r\n const count = view.getUint32(at, true);\r\n if (count > 256 || at + 4 + count * 4 + 22 > bytes.byteLength) continue;\r\n let valid = true;\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (!knownIds.has(view.getUint32(at + 4 + i * 4, true)))\r\n {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n if (valid && plausibleMeter(view, at + 4 + count * 4, bytes.byteLength))\r\n {\r\n anchors.push(at);\r\n }\r\n }\r\n return anchors;\r\n}\r\n\r\nfunction readMusicNodeTail(cursor)\r\n{\r\n const childCount = cursor.u32();\r\n const children = [];\r\n for (let i = 0; i < childCount; i++) children.push(cursor.u32());\r\n const meter = {\r\n gridPeriod: cursor.f64(),\r\n gridOffset: cursor.f64(),\r\n tempo: cursor.f32(),\r\n beatsPerBar: cursor.u8(),\r\n beatValue: cursor.u8()\r\n };\r\n const meterOverride = cursor.u8() !== 0;\r\n const stingerCount = cursor.u32();\r\n const stingers = [];\r\n for (let i = 0; i < stingerCount; i++)\r\n {\r\n stingers.push({\r\n triggerId: cursor.u32(),\r\n segmentId: cursor.u32(),\r\n syncPlayAt: cursor.u32(),\r\n cueFilterHash: cursor.u32(),\r\n dontRepeatTime: cursor.s32(),\r\n numSegmentLookAhead: cursor.u32()\r\n });\r\n }\r\n return { children, meter, meterOverride, stingers };\r\n}\r\n\r\n/** AkMusicTransNodeParams: transition rules shared by playlist + switch containers. */\r\nfunction readTransRules(cursor)\r\n{\r\n const ruleCount = cursor.u32();\r\n if (ruleCount > 4096) throw new RangeError(\"rule count\");\r\n const rules = [];\r\n for (let i = 0; i < ruleCount; i++)\r\n {\r\n const srcCount = cursor.u32();\r\n if (srcCount > 1024) throw new RangeError(\"src count\");\r\n const srcIds = [];\r\n for (let j = 0; j < srcCount; j++) srcIds.push(cursor.s32());\r\n const dstCount = cursor.u32();\r\n if (dstCount > 1024) throw new RangeError(\"dst count\");\r\n const dstIds = [];\r\n for (let j = 0; j < dstCount; j++) dstIds.push(cursor.s32());\r\n const src = {\r\n transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32(),\r\n syncType: cursor.u32(), cueFilterHash: cursor.u32(), playPostExit: cursor.u8() !== 0\r\n };\r\n const dst = {\r\n transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32(),\r\n cueFilterHash: cursor.u32(), jumpToId: cursor.u32(), jumpToType: cursor.u16(),\r\n entryType: cursor.u16(), playPreEntry: cursor.u8() !== 0,\r\n matchSourceCueName: cursor.u8() !== 0\r\n };\r\n let transitionSegment = null;\r\n if (cursor.u8() !== 0)\r\n {\r\n transitionSegment = {\r\n segmentId: cursor.u32(),\r\n fadeIn: { transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32() },\r\n fadeOut: { transitionTime: cursor.s32(), fadeCurve: cursor.u32(), fadeOffset: cursor.s32() },\r\n playPreEntry: cursor.u8() !== 0,\r\n playPostExit: cursor.u8() !== 0\r\n };\r\n }\r\n rules.push({ srcIds, dstIds, src, dst, transitionSegment });\r\n }\r\n return rules;\r\n}\r\n\r\n/**\r\n * Decode a music-segment (HIRC 10) payload: children, meter, stingers,\r\n * duration, and entry/exit markers.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\n * @param {Set<number>} knownIds Every HIRC object id in the same bank.\n * @param {object} [options] Bank-version qualification for the NodeBase prefix.\n * @returns {object|null} Decoded segment, or null when no anchored parse consumes the payload exactly.\r\n */\r\nexport function parseMusicSegment(bytes, knownIds, options = {})\n{\n for (const anchor of findAnchors(bytes, knownIds))\n {\n try\n {\n const nodeBase = parseNodeBaseRange(\n bytes,\n 1,\n anchor,\n options,\n );\n\n if (!nodeBase) continue;\n const cursor = new MusicCursor(bytes, anchor);\n const node = readMusicNodeTail(cursor);\n const duration = cursor.f64();\r\n if (!Number.isFinite(duration) || duration < 0 || duration > 36000000) continue;\r\n const markerCount = cursor.u32();\r\n if (markerCount > 1024) continue;\r\n const markers = [];\r\n for (let i = 0; i < markerCount; i++)\r\n {\r\n markers.push({ id: cursor.u32(), position: cursor.f64(), name: cursor.stringZ() });\r\n }\r\n if (cursor.at !== bytes.byteLength) continue;\r\n if (markers.some(marker => !Number.isFinite(marker.position) || marker.position < 0)) continue;\r\n return { nodeBase, ...node, duration, markers };\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Decode a music-track (HIRC 11) payload: sources, clips (play position and\r\n * trims per subtrack), track type, and switch parameters for switch tracks.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\n * @param {object} [options] Bank-version qualification for the NodeBase prefix.\n * @returns {object|null} Decoded track, or null when neither tail layout validates.\r\n */\r\nexport function parseMusicTrack(bytes, options = {})\n{\r\n const cursor = new MusicCursor(bytes, 0);\r\n cursor.u8(); // uFlags (midi/override bits)\r\n const sourceCount = cursor.u32();\r\n if (sourceCount > 512) return null;\r\n const sources = [];\r\n for (let i = 0; i < sourceCount; i++)\r\n {\r\n const pluginId = cursor.u32();\r\n const streamType = cursor.u8();\r\n const sourceId = cursor.u32();\r\n const inMemoryMediaSize = cursor.u32();\r\n const sourceBits = cursor.u8();\r\n if ((pluginId & 0x0f) === 0x02)\r\n {\r\n const size = cursor.u32();\r\n cursor.at += size;\r\n }\r\n sources.push({ pluginId, streamType, sourceId, inMemoryMediaSize, sourceBits });\r\n }\r\n const clipCount = cursor.u32();\r\n if (clipCount > 4096) return null;\r\n const clips = [];\r\n for (let i = 0; i < clipCount; i++)\r\n {\r\n clips.push({\r\n trackId: cursor.u32(),\r\n sourceId: cursor.u32(),\r\n eventId: cursor.u32(),\r\n playAt: cursor.f64(),\r\n beginTrimOffset: cursor.f64(),\r\n endTrimOffset: cursor.f64(),\r\n srcDuration: cursor.f64()\r\n });\r\n }\r\n const subTrackCount = clipCount > 0 ? cursor.u32() : 0;\r\n const autoCount = cursor.u32();\r\n if (autoCount > 4096) return null;\r\n for (let i = 0; i < autoCount; i++)\r\n {\r\n cursor.u32(); // clip index\r\n cursor.u32(); // automation type\r\n const points = cursor.u32();\r\n if (points > 65536) return null;\r\n cursor.at += points * 12;\r\n }\r\n const headEnd = cursor.at;\r\n\r\n // Tail: [NodeBaseParams...] u8 trackType, [switch+trans params when the\r\n // type is 3], signed s32 iLookAheadTime. The switch layout is tried FIRST because\n // it validates every field to the exact payload end - the simple layout\r\n // only checks one byte, and a switch tail ending in zero bytes would\r\n // satisfy it falsely.\r\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\r\n const end = bytes.byteLength;\r\n for (let typeAt = headEnd; typeAt <= end - 5; typeAt++)\r\n {\r\n if (view.getUint8(typeAt) !== 3) continue;\r\n const tail = new MusicCursor(bytes, typeAt + 1);\n try\n {\n const nodeBase = parseNodeBaseRange(\n bytes,\n headEnd,\n typeAt,\n options,\n );\n\n if (!nodeBase) continue;\n const groupType = tail.u8();\n if (groupType > 1) continue;\r\n const groupId = tail.u32();\r\n const defaultSwitch = tail.u32();\r\n const assocCount = tail.u32();\r\n if (assocCount > 1024) continue;\r\n const assoc = [];\r\n for (let i = 0; i < assocCount; i++) assoc.push(tail.u32());\r\n const trans = {\r\n srcTransitionTime: tail.s32(), srcFadeCurve: tail.u32(), srcFadeOffset: tail.s32(),\r\n syncType: tail.u32(), cueFilterHash: tail.u32(),\r\n dstTransitionTime: tail.s32(), dstFadeCurve: tail.u32(), dstFadeOffset: tail.s32()\r\n };\r\n const lookAheadTime = tail.s32();\n if (tail.at !== end) continue;\n return {\n sources, clips, subTrackCount,\n nodeBase,\n trackType: 3,\n lookAheadTime,\r\n switchParams: { groupType, groupId, defaultSwitch, assoc, trans }\r\n };\r\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n const simpleAt = end - 5;\r\n if (simpleAt >= headEnd)\r\n {\r\n const type = view.getUint8(simpleAt);\n if (type <= 2)\n {\n const nodeBase = parseNodeBaseRange(\n bytes,\n headEnd,\n simpleAt,\n options,\n );\n\n if (!nodeBase) return null;\n return {\n sources, clips, subTrackCount,\n nodeBase,\n trackType: type,\n lookAheadTime: view.getInt32(end - 4, true),\n switchParams: null\n };\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Decode a music-playlist-container (HIRC 13) payload: children, meter,\r\n * stingers, transition rules, and the flat pre-order playlist tree.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\n * @param {Set<number>} knownIds Every HIRC object id in the same bank.\n * @param {object} [options] Bank-version qualification for the NodeBase prefix.\n * @returns {object|null} Decoded playlist container, or null when no anchored parse validates.\r\n */\r\nexport function parseMusicPlaylist(bytes, knownIds, options = {})\n{\r\n for (const anchor of findAnchors(bytes, knownIds))\r\n {\r\n try\n {\n const nodeBase = parseNodeBaseRange(\n bytes,\n 1,\n anchor,\n options,\n );\n\n if (!nodeBase) continue;\n const cursor = new MusicCursor(bytes, anchor);\n const node = readMusicNodeTail(cursor);\r\n const rules = readTransRules(cursor);\r\n const itemCount = cursor.u32();\r\n if (itemCount > 8192) continue;\r\n if (cursor.remaining !== itemCount * 30) continue;\r\n const items = [];\r\n for (let i = 0; i < itemCount; i++)\r\n {\r\n items.push({\r\n segmentId: cursor.u32(),\r\n playlistItemId: cursor.u32(),\r\n childCount: cursor.u32(),\r\n rsType: cursor.s32(),\r\n loop: cursor.s16(),\r\n loopMin: cursor.s16(),\r\n loopMax: cursor.s16(),\r\n weight: cursor.u32(),\r\n avoidRepeatCount: cursor.u16(),\r\n usingWeight: cursor.u8() !== 0,\r\n shuffle: cursor.u8() !== 0\r\n });\r\n }\r\n if (cursor.at !== bytes.byteLength) continue;\r\n return { nodeBase, ...node, rules, playlist: items };\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Decode a music-switch-container (HIRC 12) payload: children, meter,\r\n * stingers, transition rules, argument groups, and the decision tree.\r\n *\r\n * @param {Uint8Array} bytes Entry payload view from `inspect()`.\n * @param {Set<number>} knownIds Every HIRC object id in the same bank.\n * @param {object} [options] Bank-version qualification for the NodeBase prefix.\n * @returns {object|null} Decoded switch container, or null when no anchored parse validates.\r\n */\r\nexport function parseMusicSwitch(bytes, knownIds, options = {})\n{\r\n for (const anchor of findAnchors(bytes, knownIds))\r\n {\r\n try\n {\n const nodeBase = parseNodeBaseRange(\n bytes,\n 1,\n anchor,\n options,\n );\n\n if (!nodeBase) continue;\n const cursor = new MusicCursor(bytes, anchor);\n const node = readMusicNodeTail(cursor);\r\n const rules = readTransRules(cursor);\r\n const continuePlayback = cursor.u8() !== 0;\r\n const treeDepth = cursor.u32();\r\n if (treeDepth > 16) continue;\r\n const argumentGroups = [];\r\n for (let i = 0; i < treeDepth; i++) argumentGroups.push({ groupId: cursor.u32() });\r\n for (let i = 0; i < treeDepth; i++) argumentGroups[i].groupType = cursor.u8();\r\n const treeDataSize = cursor.u32();\r\n const mode = cursor.u8();\r\n if (cursor.remaining !== treeDataSize) continue;\r\n if (treeDataSize % 12 !== 0) continue;\r\n const treeNodes = [];\r\n const nodeCount = treeDataSize / 12;\r\n for (let i = 0; i < nodeCount; i++)\r\n {\r\n const key = cursor.u32();\r\n // 4-byte union: leaf = audioNodeId, internal = childrenIdx + count.\r\n const audioNodeId = cursor.view.getUint32(cursor.at, true);\r\n const childrenIdx = cursor.u16();\r\n const childrenCount = cursor.u16();\r\n const weight = cursor.u16();\r\n const probability = cursor.u16();\r\n treeNodes.push({ key, audioNodeId, childrenIdx, childrenCount, weight, probability });\r\n }\r\n if (cursor.at !== bytes.byteLength) continue;\r\n return {\n nodeBase,\n ...node,\n rules,\n continuePlayback,\n argumentGroups,\n mode,\n treeNodes,\n };\n }\r\n catch\r\n {\r\n continue;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nconst MUSIC_PARSERS = Object.freeze({\r\n 10: (payload, knownIds, options) => parseMusicSegment(payload, knownIds, options),\n 11: (payload, knownIds, options) => parseMusicTrack(payload, options),\n 12: (payload, knownIds, options) => parseMusicSwitch(payload, knownIds, options),\n 13: (payload, knownIds, options) => parseMusicPlaylist(payload, knownIds, options)\n});\r\n\r\nconst MUSIC_TYPE_NAMES = Object.freeze({\r\n 10: \"music-segment\",\r\n 11: \"music-track\",\r\n 12: \"music-switch-container\",\r\n 13: \"music-playlist-container\"\r\n});\r\n\r\n/**\r\n * Decode every interactive-music node across one or more inspected banks.\r\n *\r\n * @param {Array<object>} inspections `CjsBnkFormat.inspect()` results for every related music bank.\r\n * @returns {{nodes: Map<number, object>, diagnostics: {parsed: number, failed: Array<{bank: string, type: string, id: number}>}}} Decoded nodes keyed by object id plus per-entry failures.\r\n */\r\nexport function musicNodesFromBanks(inspections)\r\n{\r\n const banks = Array.isArray(inspections) ? inspections : [ inspections ];\r\n const nodes = new Map();\r\n const failed = [];\r\n let parsed = 0;\r\n for (const inspection of banks)\r\n {\r\n const knownIds = new Set();\r\n for (const entry of inspection.hirc ?? []) knownIds.add(entry.id);\r\n for (const entry of inspection.hirc ?? [])\r\n {\r\n const parser = MUSIC_PARSERS[entry.type];\r\n if (!parser) continue;\r\n const payload = entry.payload instanceof Uint8Array ? entry.payload : null;\r\n const decoded = payload\n ? parser(payload, knownIds, {\n bankVersion: inspection.bankVersion,\n })\n : null;\n if (!decoded)\r\n {\r\n failed.push({ bank: inspection.source || \"\", type: MUSIC_TYPE_NAMES[entry.type], id: entry.id });\r\n continue;\r\n }\r\n parsed++;\r\n nodes.set(entry.id, { id: entry.id, type: MUSIC_TYPE_NAMES[entry.type], bank: inspection.source || \"\", ...decoded });\r\n }\r\n }\r\n return { nodes, diagnostics: { parsed, failed } };\r\n}\r\n"],"names":["MusicCursor","constructor","bytes","offset","view","DataView","buffer","byteOffset","byteLength","at","remaining","u8","getUint8","u16","value","getUint16","s16","getInt16","u32","getUint32","s32","getInt32","f32","getFloat32","f64","getFloat64","stringZ","end","i","String","fromCharCode","plausibleMeter","grid","tempo","beats","beatValue","Number","isFinite","includes","findAnchors","knownIds","anchors","count","valid","has","push","readMusicNodeTail","cursor","childCount","children","meter","gridPeriod","gridOffset","beatsPerBar","meterOverride","stingerCount","stingers","triggerId","segmentId","syncPlayAt","cueFilterHash","dontRepeatTime","numSegmentLookAhead","readTransRules","ruleCount","RangeError","rules","srcCount","srcIds","j","dstCount","dstIds","src","transitionTime","fadeCurve","fadeOffset","syncType","playPostExit","dst","jumpToId","jumpToType","entryType","playPreEntry","matchSourceCueName","transitionSegment","fadeIn","fadeOut","parseMusicSegment","options","anchor","nodeBase","parseNodeBaseRange","node","duration","markerCount","markers","id","position","name","some","marker","parseMusicTrack","sourceCount","sources","pluginId","streamType","sourceId","inMemoryMediaSize","sourceBits","size","clipCount","clips","trackId","eventId","playAt","beginTrimOffset","endTrimOffset","srcDuration","subTrackCount","autoCount","points","headEnd","typeAt","tail","groupType","groupId","defaultSwitch","assocCount","assoc","trans","srcTransitionTime","srcFadeCurve","srcFadeOffset","dstTransitionTime","dstFadeCurve","dstFadeOffset","lookAheadTime","trackType","switchParams","simpleAt","type","parseMusicPlaylist","itemCount","items","playlistItemId","rsType","loop","loopMin","loopMax","weight","avoidRepeatCount","usingWeight","shuffle","playlist","parseMusicSwitch","continuePlayback","treeDepth","argumentGroups","treeDataSize","mode","treeNodes","nodeCount","key","audioNodeId","childrenIdx","childrenCount","probability","MUSIC_PARSERS","Object","freeze","payload","MUSIC_TYPE_NAMES","musicNodesFromBanks","inspections","banks","Array","isArray","nodes","Map","failed","parsed","inspection","Set","entry","hirc","add","parser","Uint8Array","decoded","bankVersion","bank","source","set","diagnostics"],"mappings":"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"}
@@ -117,10 +117,10 @@ function readNodeBase(cursor) {
117
117
  attenuationId,
118
118
  loopCount
119
119
  } = ReadInitialProperties(cursor);
120
- const positioning = ReadPositioning(cursor);
121
- const aux = ReadAux(cursor);
120
+ const positioning = readPositioning(cursor);
121
+ const aux = readAux(cursor);
122
122
  const advanced = ReadAdvanced(cursor);
123
- const state = ReadStateChunk(cursor);
123
+ const state = readStateChunk(cursor);
124
124
  const rtpcs = readInitialRtpcs(cursor);
125
125
  return {
126
126
  fx,
@@ -352,7 +352,14 @@ function ReadInitialProperties(cursor) {
352
352
  loopCount
353
353
  };
354
354
  }
355
- function ReadPositioning(cursor) {
355
+
356
+ /**
357
+ * Reads the v150 positioning block shared by NodeBase and bus records.
358
+ *
359
+ * @param {WwiseCursor} cursor Bounded object cursor.
360
+ * @returns {object} Exact positioning flags and optional automation.
361
+ */
362
+ function readPositioning(cursor) {
356
363
  const flags = cursor.u8();
357
364
  const overrideParent = Boolean(flags & 0x01);
358
365
  const listenerRelative = Boolean(flags & 0x02);
@@ -424,7 +431,14 @@ function ReadAutomation(cursor) {
424
431
  ranges
425
432
  };
426
433
  }
427
- function ReadAux(cursor) {
434
+
435
+ /**
436
+ * Reads the v150 auxiliary-send block shared by NodeBase and bus records.
437
+ *
438
+ * @param {WwiseCursor} cursor Bounded object cursor.
439
+ * @returns {object} Exact auxiliary flags and target identities.
440
+ */
441
+ function readAux(cursor) {
428
442
  const flags = cursor.u8();
429
443
  const hasAux = Boolean(flags & 0x08);
430
444
  const auxIds = [];
@@ -467,7 +481,14 @@ function ReadAdvanced(cursor) {
467
481
  enableEnvelope: Boolean(hdrFlags & 0x08)
468
482
  };
469
483
  }
470
- function ReadStateChunk(cursor) {
484
+
485
+ /**
486
+ * Reads one v150 state-aware property and group chunk.
487
+ *
488
+ * @param {WwiseCursor} cursor Bounded object cursor.
489
+ * @returns {object} Exact state property declarations and values.
490
+ */
491
+ function readStateChunk(cursor) {
471
492
  const propertyCount = boundedCount(cursor.variable(), cursor.remaining, 3, 4096);
472
493
  const properties = [];
473
494
  for (let index = 0; index < propertyCount; index++) {
@@ -528,5 +549,5 @@ function FloatFromBits(value) {
528
549
  return view.getFloat32(0, true);
529
550
  }
530
551
 
531
- export { WWISE_NODE_BASE_VERSION, WwiseCursor, boundedCount, finite, parseNodeBaseRange, readCurvePoints, readInitialRtpc, readInitialRtpcs, readNodeBase };
552
+ export { WWISE_NODE_BASE_VERSION, WwiseCursor, boundedCount, finite, parseNodeBaseRange, readAux, readCurvePoints, readInitialRtpc, readInitialRtpcs, readNodeBase, readPositioning, readStateChunk };
532
553
  //# sourceMappingURL=nodeBase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeBase.js","sources":["../../../../../src/formats/bnk/core/nodeBase.js"],"sourcesContent":["// Exact Wwise v150 common audio-node decoding. This module is internal to the\n// BNK toolkit: it preserves authored facts and byte unions without assigning\n// runtime playback or attenuation-curve semantics.\n\nimport { readWwiseVar } from \"./helpers.js\";\n\nexport const WWISE_NODE_BASE_VERSION = 150;\n\nconst ATTENUATION_PROPERTY_ID = 0x55;\nconst LOOP_COUNT_PROPERTY_ID = 0x54;\nconst VALID_CURVE_SCALING = new Set([ 0, 2, 3, 4 ]);\n\n/** Bounds-aware little-endian cursor over one HIRC payload. */\nexport class WwiseCursor\n{\n /**\n * Creates a cursor over a bounded portion of a Wwise payload.\n *\n * @param {Uint8Array} bytes Payload bytes.\n * @param {number} [offset=0] Initial byte offset.\n * @param {number} [end=bytes.byteLength] Exclusive ending offset.\n */\n constructor(bytes, offset = 0, end = bytes?.byteLength)\n {\n if (!(bytes instanceof Uint8Array)\n || !Number.isSafeInteger(offset)\n || !Number.isSafeInteger(end)\n || offset < 0\n || end < offset\n || end > bytes.byteLength)\n {\n throw new TypeError(\"Invalid Wwise cursor range\");\n }\n\n this.bytes = bytes;\n this.view = new DataView(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n );\n this.at = offset;\n this.end = end;\n }\n\n /** Gets the number of unread bytes in the bounded range. */\n get remaining()\n {\n return this.end - this.at;\n }\n\n /**\n * Verifies that a read of the requested size stays within the range.\n *\n * @param {number} size Number of bytes to read.\n * @throws {RangeError} The read would exceed the bounded range.\n */\n ensure(size)\n {\n if (!Number.isSafeInteger(size)\n || size < 0\n || this.at + size > this.end)\n {\n throw new RangeError(\"truncated Wwise object\");\n }\n }\n\n /** Reads an unsigned 8-bit integer. */\n u8()\n {\n this.ensure(1);\n return this.view.getUint8(this.at++);\n }\n\n /** Reads a signed 8-bit integer. */\n s8()\n {\n this.ensure(1);\n return this.view.getInt8(this.at++);\n }\n\n /** Reads a little-endian unsigned 16-bit integer. */\n u16()\n {\n this.ensure(2);\n const value = this.view.getUint16(this.at, true);\n\n this.at += 2;\n return value;\n }\n\n /** Reads a little-endian unsigned 32-bit integer. */\n u32()\n {\n this.ensure(4);\n const value = this.view.getUint32(this.at, true);\n\n this.at += 4;\n return value;\n }\n\n /** Reads a little-endian signed 32-bit integer. */\n s32()\n {\n this.ensure(4);\n const value = this.view.getInt32(this.at, true);\n\n this.at += 4;\n return value;\n }\n\n /** Reads a little-endian 32-bit floating-point value. */\n f32()\n {\n this.ensure(4);\n const value = this.view.getFloat32(this.at, true);\n\n this.at += 4;\n return value;\n }\n\n /** Reads a Wwise variable-length unsigned integer. */\n variable()\n {\n const result = readWwiseVar(\n this.bytes.subarray(0, this.end),\n this.at,\n );\n\n if (!result)\n {\n throw new RangeError(\"invalid Wwise variable integer\");\n }\n\n this.at = result.nextOffset;\n return result.value;\n }\n}\n\n/**\n * Reads one v150 NodeBase from the current cursor position.\n *\n * The cursor is left at the first type-specific byte.\n */\nexport function readNodeBase(cursor)\n{\n const fx = ReadInitialFx(cursor);\n const metadata = ReadInitialMetadata(cursor);\n const overrideBusId = cursor.u32();\n const directParentId = cursor.u32();\n const priority = ReadPriority(cursor);\n const {\n properties,\n ranges,\n attenuationId,\n loopCount,\n } = ReadInitialProperties(cursor);\n const positioning = ReadPositioning(cursor);\n const aux = ReadAux(cursor);\n const advanced = ReadAdvanced(cursor);\n const state = ReadStateChunk(cursor);\n const rtpcs = readInitialRtpcs(cursor);\n\n return {\n fx,\n metadata,\n overrideBusId,\n directParentId,\n priority,\n properties,\n ranges,\n attenuationId,\n loopCount,\n positioning,\n aux,\n advanced,\n state,\n rtpcs,\n };\n}\n\n/** Parses one NodeBase that must consume exactly the supplied byte range. */\nexport function parseNodeBaseRange(\n bytes,\n start,\n end,\n { bankVersion = WWISE_NODE_BASE_VERSION } = {},\n)\n{\n if (!(bytes instanceof Uint8Array)\n || Number(bankVersion) !== WWISE_NODE_BASE_VERSION)\n {\n return null;\n }\n\n try\n {\n const cursor = new WwiseCursor(bytes, start, end);\n const nodeBase = readNodeBase(cursor);\n\n return cursor.at === end ? nodeBase : null;\n }\n catch\n {\n return null;\n }\n}\n\n/** Reads the v150 initial-RTPC list shared by NodeBase and attenuation. */\nexport function readInitialRtpcs(cursor)\n{\n const count = boundedCount(cursor.u16(), cursor.remaining, 14, 4096);\n const rtpcs = [];\n\n for (let index = 0; index < count; index++)\n {\n rtpcs.push(readInitialRtpc(cursor));\n }\n\n return rtpcs;\n}\n\n/** Reads one v150 initial RTPC. */\nexport function readInitialRtpc(cursor)\n{\n const controlId = cursor.u32();\n const controlType = cursor.u8();\n const accumulation = cursor.u8();\n const parameterId = cursor.variable();\n const curveId = cursor.u32();\n const scaling = cursor.u8();\n const pointCount = boundedCount(\n cursor.u16(),\n cursor.remaining,\n 12,\n 65535,\n );\n\n if (controlType > 4\n || accumulation > 6\n || !VALID_CURVE_SCALING.has(scaling))\n {\n throw new RangeError(\"invalid initial RTPC enum\");\n }\n\n return {\n controlId,\n controlType,\n accumulation,\n parameterId,\n curveId,\n scaling,\n points: readCurvePoints(cursor, pointCount),\n };\n}\n\n/** Reads exact Wwise graph points without inferring curve meaning. */\nexport function readCurvePoints(cursor, count)\n{\n const points = [];\n\n for (let index = 0; index < count; index++)\n {\n const from = finite(cursor.f32());\n const to = finite(cursor.f32());\n const interpolation = cursor.u32();\n\n if (interpolation > 9)\n {\n throw new RangeError(\"invalid curve interpolation\");\n }\n\n points.push({ from, to, interpolation });\n }\n\n return points;\n}\n\n/** Validates an encoded count before allocating or iterating it. */\nexport function boundedCount(value, remaining, stride, maximum)\n{\n if (!Number.isSafeInteger(value)\n || value < 0\n || value > maximum\n || value * stride > remaining)\n {\n throw new RangeError(\"invalid Wwise object count\");\n }\n\n return value;\n}\n\n/** Rejects non-finite authored curve/position values. */\nexport function finite(value)\n{\n if (!Number.isFinite(value))\n {\n throw new RangeError(\"non-finite Wwise object value\");\n }\n\n return value;\n}\n\nfunction ReadInitialFx(cursor)\n{\n const overrideParentRaw = cursor.u8();\n const count = cursor.u8();\n const bypassAllRaw = count ? cursor.u8() : 0;\n const slots = [];\n\n boundedCount(count, cursor.remaining, 6, 255);\n\n for (let index = 0; index < count; index++)\n {\n const slot = cursor.u8();\n const fxId = cursor.u32();\n const flags = cursor.u8();\n\n slots.push({\n index: slot,\n fxId,\n flags,\n bypass: Boolean(flags & 0x01),\n shareSet: Boolean(flags & 0x02),\n rendered: Boolean(flags & 0x04),\n });\n }\n\n return {\n overrideParentRaw,\n overrideParent: Boolean(overrideParentRaw),\n bypassAllRaw,\n bypassAll: Boolean(bypassAllRaw),\n slots,\n };\n}\n\nfunction ReadInitialMetadata(cursor)\n{\n const overrideParentRaw = cursor.u8();\n const count = cursor.u8();\n const slots = [];\n\n boundedCount(count, cursor.remaining, 6, 255);\n\n for (let index = 0; index < count; index++)\n {\n const slot = cursor.u8();\n const fxId = cursor.u32();\n const shareSetRaw = cursor.u8();\n\n slots.push({\n index: slot,\n fxId,\n shareSetRaw,\n shareSet: Boolean(shareSetRaw),\n });\n }\n\n return {\n overrideParentRaw,\n overrideParent: Boolean(overrideParentRaw),\n slots,\n };\n}\n\nfunction ReadPriority(cursor)\n{\n const flags = cursor.u8();\n\n return {\n flags,\n overrideParent: Boolean(flags & 0x01),\n applyDistanceFactor: Boolean(flags & 0x02),\n overrideMidiEventsBehavior: Boolean(flags & 0x04),\n overrideMidiNoteTracking: Boolean(flags & 0x08),\n enableMidiNoteTracking: Boolean(flags & 0x10),\n midiBreakLoopOnNoteOff: Boolean(flags & 0x20),\n };\n}\n\nfunction ReadInitialProperties(cursor)\n{\n const propertyCount = boundedCount(\n cursor.u8(),\n cursor.remaining,\n 5,\n 255,\n );\n const propertyIds = [];\n\n for (let index = 0; index < propertyCount; index++)\n {\n propertyIds.push(cursor.u8());\n }\n\n const properties = propertyIds.map((id) =>\n {\n const rawValue = cursor.u32();\n\n if (id === LOOP_COUNT_PROPERTY_ID)\n {\n return {\n id,\n rawValue,\n valueType: \"loop-count\",\n value: rawValue,\n };\n }\n if (id === ATTENUATION_PROPERTY_ID)\n {\n return {\n id,\n rawValue,\n valueType: \"id\",\n value: rawValue,\n };\n }\n\n return {\n id,\n rawValue,\n valueType: \"union\",\n floatValue: FloatFromBits(rawValue),\n };\n });\n const rangeCount = boundedCount(\n cursor.u8(),\n cursor.remaining,\n 9,\n 255,\n );\n const rangeIds = [];\n\n for (let index = 0; index < rangeCount; index++)\n {\n rangeIds.push(cursor.u8());\n }\n\n const ranges = rangeIds.map((id) =>\n {\n const minRaw = cursor.u32();\n const maxRaw = cursor.u32();\n\n return {\n id,\n minRaw,\n maxRaw,\n minFloat: FloatFromBits(minRaw),\n maxFloat: FloatFromBits(maxRaw),\n };\n });\n const attenuationProperties = properties.filter(\n property => property.id === ATTENUATION_PROPERTY_ID,\n );\n const loopCountProperties = properties.filter(\n property => property.id === LOOP_COUNT_PROPERTY_ID,\n );\n\n if (attenuationProperties.length > 1)\n {\n throw new RangeError(\"duplicate v150 Wwise attenuation property\");\n }\n if (loopCountProperties.length > 1)\n {\n throw new RangeError(\"duplicate v150 Wwise loop-count property\");\n }\n\n const loopCount = loopCountProperties[0]?.value ?? null;\n\n if (loopCount !== null && loopCount > 32767)\n {\n throw new RangeError(\"invalid v150 Wwise loop count\");\n }\n\n return {\n properties,\n ranges,\n attenuationId: attenuationProperties[0]?.value ?? null,\n // Wwise serializes this property only when looping is enabled.\n // Zero means infinite; positive values are finite authored repeats.\n loopCount,\n };\n}\n\nfunction ReadPositioning(cursor)\n{\n const flags = cursor.u8();\n const overrideParent = Boolean(flags & 0x01);\n const listenerRelative = Boolean(flags & 0x02);\n const pannerType = (flags >>> 2) & 0x03;\n const positionType = (flags >>> 5) & 0x03;\n let spatial = null;\n let automation = null;\n\n if (positionType === 3)\n {\n throw new RangeError(\"invalid v150 Wwise position type\");\n }\n\n if (overrideParent && listenerRelative)\n {\n const spatialFlags = cursor.u8();\n\n spatial = {\n flags: spatialFlags,\n mode: spatialFlags & 0x03,\n enableAttenuation: Boolean(spatialFlags & 0x08),\n holdEmitterPositionOrientation: Boolean(spatialFlags & 0x10),\n holdListenerOrientation: Boolean(spatialFlags & 0x20),\n enableDiffraction: Boolean(spatialFlags & 0x40),\n };\n\n if (positionType !== 0)\n {\n automation = ReadAutomation(cursor);\n }\n }\n\n return {\n flags,\n overrideParent,\n listenerRelative,\n pannerType,\n positionType,\n spatial,\n automation,\n };\n}\n\nfunction ReadAutomation(cursor)\n{\n const pathMode = cursor.u8();\n const transitionTime = cursor.s32();\n const vertexCount = boundedCount(\n cursor.u32(),\n cursor.remaining,\n 16,\n 65535,\n );\n const vertices = [];\n\n for (let index = 0; index < vertexCount; index++)\n {\n vertices.push({\n x: finite(cursor.f32()),\n y: finite(cursor.f32()),\n z: finite(cursor.f32()),\n duration: cursor.s32(),\n });\n }\n\n const playlistCount = boundedCount(\n cursor.u32(),\n cursor.remaining,\n 20,\n 65535,\n );\n const playlist = [];\n\n for (let index = 0; index < playlistCount; index++)\n {\n playlist.push({\n verticesOffset: cursor.u32(),\n numVertices: cursor.u32(),\n });\n }\n\n const ranges = [];\n\n for (let index = 0; index < playlistCount; index++)\n {\n ranges.push({\n x: finite(cursor.f32()),\n y: finite(cursor.f32()),\n z: finite(cursor.f32()),\n });\n }\n\n return {\n pathMode,\n transitionTime,\n vertices,\n playlist,\n ranges,\n };\n}\n\nfunction ReadAux(cursor)\n{\n const flags = cursor.u8();\n const hasAux = Boolean(flags & 0x08);\n const auxIds = [];\n\n if (hasAux)\n {\n for (let index = 0; index < 4; index++)\n {\n auxIds.push(cursor.u32());\n }\n }\n\n return {\n flags,\n overrideUserAux: Boolean(flags & 0x04),\n hasAux,\n overrideReflectionsAux: Boolean(flags & 0x10),\n auxIds,\n reflectionsAuxBusId: cursor.u32(),\n };\n}\n\nfunction ReadAdvanced(cursor)\n{\n const flags = cursor.u8();\n const virtualQueueBehavior = cursor.u8();\n const maxInstances = cursor.u16();\n const belowThresholdBehavior = cursor.u8();\n const hdrFlags = cursor.u8();\n\n if (virtualQueueBehavior > 2 || belowThresholdBehavior > 3)\n {\n throw new RangeError(\"invalid v150 Wwise advanced setting\");\n }\n\n return {\n flags,\n killNewest: Boolean(flags & 0x01),\n useVirtualBehavior: Boolean(flags & 0x02),\n ignoreParentMaxInstances: Boolean(flags & 0x08),\n overrideVirtualVoiceBehavior: Boolean(flags & 0x10),\n virtualQueueBehavior,\n maxInstances,\n belowThresholdBehavior,\n hdrFlags,\n overrideHdrEnvelope: Boolean(hdrFlags & 0x01),\n overrideAnalysis: Boolean(hdrFlags & 0x02),\n normalizeLoudness: Boolean(hdrFlags & 0x04),\n enableEnvelope: Boolean(hdrFlags & 0x08),\n };\n}\n\nfunction ReadStateChunk(cursor)\n{\n const propertyCount = boundedCount(\n cursor.variable(),\n cursor.remaining,\n 3,\n 4096,\n );\n const properties = [];\n\n for (let index = 0; index < propertyCount; index++)\n {\n const propertyId = cursor.variable();\n const accumulation = cursor.u8();\n const inDbRaw = cursor.u8();\n\n if (accumulation > 6 || inDbRaw > 1)\n {\n throw new RangeError(\"invalid v150 Wwise state property\");\n }\n\n properties.push({\n propertyId,\n accumulation,\n inDbRaw,\n inDb: Boolean(inDbRaw),\n });\n }\n\n const groupCount = boundedCount(\n cursor.variable(),\n cursor.remaining,\n 6,\n 4096,\n );\n const groups = [];\n\n for (let index = 0; index < groupCount; index++)\n {\n const groupId = cursor.u32();\n const syncType = cursor.u8();\n const stateCount = boundedCount(\n cursor.variable(),\n cursor.remaining,\n 6,\n 4096,\n );\n const states = [];\n\n if (syncType > 9)\n {\n throw new RangeError(\"invalid v150 Wwise state sync type\");\n }\n\n for (let stateIndex = 0; stateIndex < stateCount; stateIndex++)\n {\n const stateId = cursor.u32();\n const valueCount = boundedCount(\n cursor.u16(),\n cursor.remaining,\n 6,\n 65535,\n );\n const propertyIds = [];\n\n for (let valueIndex = 0; valueIndex < valueCount; valueIndex++)\n {\n propertyIds.push(cursor.u16());\n }\n\n const values = propertyIds.map(propertyId => ({\n propertyId,\n value: finite(cursor.f32()),\n }));\n\n states.push({ stateId, values });\n }\n\n groups.push({ groupId, syncType, states });\n }\n\n return { properties, groups };\n}\n\nfunction FloatFromBits(value)\n{\n const bytes = new ArrayBuffer(4);\n const view = new DataView(bytes);\n\n view.setUint32(0, value, true);\n return view.getFloat32(0, true);\n}\n"],"names":["WWISE_NODE_BASE_VERSION","ATTENUATION_PROPERTY_ID","LOOP_COUNT_PROPERTY_ID","VALID_CURVE_SCALING","Set","WwiseCursor","constructor","bytes","offset","end","byteLength","Uint8Array","Number","isSafeInteger","TypeError","view","DataView","buffer","byteOffset","at","remaining","ensure","size","RangeError","u8","getUint8","s8","getInt8","u16","value","getUint16","u32","getUint32","s32","getInt32","f32","getFloat32","variable","result","readWwiseVar","subarray","nextOffset","readNodeBase","cursor","fx","ReadInitialFx","metadata","ReadInitialMetadata","overrideBusId","directParentId","priority","ReadPriority","properties","ranges","attenuationId","loopCount","ReadInitialProperties","positioning","ReadPositioning","aux","ReadAux","advanced","ReadAdvanced","state","ReadStateChunk","rtpcs","readInitialRtpcs","parseNodeBaseRange","start","bankVersion","nodeBase","count","boundedCount","index","push","readInitialRtpc","controlId","controlType","accumulation","parameterId","curveId","scaling","pointCount","has","points","readCurvePoints","from","finite","to","interpolation","stride","maximum","isFinite","overrideParentRaw","bypassAllRaw","slots","slot","fxId","flags","bypass","Boolean","shareSet","rendered","overrideParent","bypassAll","shareSetRaw","applyDistanceFactor","overrideMidiEventsBehavior","overrideMidiNoteTracking","enableMidiNoteTracking","midiBreakLoopOnNoteOff","propertyCount","propertyIds","map","id","rawValue","valueType","floatValue","FloatFromBits","rangeCount","rangeIds","minRaw","maxRaw","minFloat","maxFloat","attenuationProperties","filter","property","loopCountProperties","length","listenerRelative","pannerType","positionType","spatial","automation","spatialFlags","mode","enableAttenuation","holdEmitterPositionOrientation","holdListenerOrientation","enableDiffraction","ReadAutomation","pathMode","transitionTime","vertexCount","vertices","x","y","z","duration","playlistCount","playlist","verticesOffset","numVertices","hasAux","auxIds","overrideUserAux","overrideReflectionsAux","reflectionsAuxBusId","virtualQueueBehavior","maxInstances","belowThresholdBehavior","hdrFlags","killNewest","useVirtualBehavior","ignoreParentMaxInstances","overrideVirtualVoiceBehavior","overrideHdrEnvelope","overrideAnalysis","normalizeLoudness","enableEnvelope","propertyId","inDbRaw","inDb","groupCount","groups","groupId","syncType","stateCount","states","stateIndex","stateId","valueCount","valueIndex","values","ArrayBuffer","setUint32"],"mappings":"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"}
1
+ {"version":3,"file":"nodeBase.js","sources":["../../../../../src/formats/bnk/core/nodeBase.js"],"sourcesContent":["// Exact Wwise v150 common audio-node decoding. This module is internal to the\n// BNK toolkit: it preserves authored facts and byte unions without assigning\n// runtime playback or attenuation-curve semantics.\n\nimport { readWwiseVar } from \"./helpers.js\";\n\nexport const WWISE_NODE_BASE_VERSION = 150;\n\nconst ATTENUATION_PROPERTY_ID = 0x55;\nconst LOOP_COUNT_PROPERTY_ID = 0x54;\nconst VALID_CURVE_SCALING = new Set([ 0, 2, 3, 4 ]);\n\n/** Bounds-aware little-endian cursor over one HIRC payload. */\nexport class WwiseCursor\n{\n /**\n * Creates a cursor over a bounded portion of a Wwise payload.\n *\n * @param {Uint8Array} bytes Payload bytes.\n * @param {number} [offset=0] Initial byte offset.\n * @param {number} [end=bytes.byteLength] Exclusive ending offset.\n */\n constructor(bytes, offset = 0, end = bytes?.byteLength)\n {\n if (!(bytes instanceof Uint8Array)\n || !Number.isSafeInteger(offset)\n || !Number.isSafeInteger(end)\n || offset < 0\n || end < offset\n || end > bytes.byteLength)\n {\n throw new TypeError(\"Invalid Wwise cursor range\");\n }\n\n this.bytes = bytes;\n this.view = new DataView(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n );\n this.at = offset;\n this.end = end;\n }\n\n /** Gets the number of unread bytes in the bounded range. */\n get remaining()\n {\n return this.end - this.at;\n }\n\n /**\n * Verifies that a read of the requested size stays within the range.\n *\n * @param {number} size Number of bytes to read.\n * @throws {RangeError} The read would exceed the bounded range.\n */\n ensure(size)\n {\n if (!Number.isSafeInteger(size)\n || size < 0\n || this.at + size > this.end)\n {\n throw new RangeError(\"truncated Wwise object\");\n }\n }\n\n /** Reads an unsigned 8-bit integer. */\n u8()\n {\n this.ensure(1);\n return this.view.getUint8(this.at++);\n }\n\n /** Reads a signed 8-bit integer. */\n s8()\n {\n this.ensure(1);\n return this.view.getInt8(this.at++);\n }\n\n /** Reads a little-endian unsigned 16-bit integer. */\n u16()\n {\n this.ensure(2);\n const value = this.view.getUint16(this.at, true);\n\n this.at += 2;\n return value;\n }\n\n /** Reads a little-endian unsigned 32-bit integer. */\n u32()\n {\n this.ensure(4);\n const value = this.view.getUint32(this.at, true);\n\n this.at += 4;\n return value;\n }\n\n /** Reads a little-endian signed 32-bit integer. */\n s32()\n {\n this.ensure(4);\n const value = this.view.getInt32(this.at, true);\n\n this.at += 4;\n return value;\n }\n\n /** Reads a little-endian 32-bit floating-point value. */\n f32()\n {\n this.ensure(4);\n const value = this.view.getFloat32(this.at, true);\n\n this.at += 4;\n return value;\n }\n\n /** Reads a Wwise variable-length unsigned integer. */\n variable()\n {\n const result = readWwiseVar(\n this.bytes.subarray(0, this.end),\n this.at,\n );\n\n if (!result)\n {\n throw new RangeError(\"invalid Wwise variable integer\");\n }\n\n this.at = result.nextOffset;\n return result.value;\n }\n}\n\n/**\n * Reads one v150 NodeBase from the current cursor position.\n *\n * The cursor is left at the first type-specific byte.\n */\nexport function readNodeBase(cursor)\n{\n const fx = ReadInitialFx(cursor);\n const metadata = ReadInitialMetadata(cursor);\n const overrideBusId = cursor.u32();\n const directParentId = cursor.u32();\n const priority = ReadPriority(cursor);\n const {\n properties,\n ranges,\n attenuationId,\n loopCount,\n } = ReadInitialProperties(cursor);\n const positioning = readPositioning(cursor);\n const aux = readAux(cursor);\n const advanced = ReadAdvanced(cursor);\n const state = readStateChunk(cursor);\n const rtpcs = readInitialRtpcs(cursor);\n\n return {\n fx,\n metadata,\n overrideBusId,\n directParentId,\n priority,\n properties,\n ranges,\n attenuationId,\n loopCount,\n positioning,\n aux,\n advanced,\n state,\n rtpcs,\n };\n}\n\n/** Parses one NodeBase that must consume exactly the supplied byte range. */\nexport function parseNodeBaseRange(\n bytes,\n start,\n end,\n { bankVersion = WWISE_NODE_BASE_VERSION } = {},\n)\n{\n if (!(bytes instanceof Uint8Array)\n || Number(bankVersion) !== WWISE_NODE_BASE_VERSION)\n {\n return null;\n }\n\n try\n {\n const cursor = new WwiseCursor(bytes, start, end);\n const nodeBase = readNodeBase(cursor);\n\n return cursor.at === end ? nodeBase : null;\n }\n catch\n {\n return null;\n }\n}\n\n/** Reads the v150 initial-RTPC list shared by NodeBase and attenuation. */\nexport function readInitialRtpcs(cursor)\n{\n const count = boundedCount(cursor.u16(), cursor.remaining, 14, 4096);\n const rtpcs = [];\n\n for (let index = 0; index < count; index++)\n {\n rtpcs.push(readInitialRtpc(cursor));\n }\n\n return rtpcs;\n}\n\n/** Reads one v150 initial RTPC. */\nexport function readInitialRtpc(cursor)\n{\n const controlId = cursor.u32();\n const controlType = cursor.u8();\n const accumulation = cursor.u8();\n const parameterId = cursor.variable();\n const curveId = cursor.u32();\n const scaling = cursor.u8();\n const pointCount = boundedCount(\n cursor.u16(),\n cursor.remaining,\n 12,\n 65535,\n );\n\n if (controlType > 4\n || accumulation > 6\n || !VALID_CURVE_SCALING.has(scaling))\n {\n throw new RangeError(\"invalid initial RTPC enum\");\n }\n\n return {\n controlId,\n controlType,\n accumulation,\n parameterId,\n curveId,\n scaling,\n points: readCurvePoints(cursor, pointCount),\n };\n}\n\n/** Reads exact Wwise graph points without inferring curve meaning. */\nexport function readCurvePoints(cursor, count)\n{\n const points = [];\n\n for (let index = 0; index < count; index++)\n {\n const from = finite(cursor.f32());\n const to = finite(cursor.f32());\n const interpolation = cursor.u32();\n\n if (interpolation > 9)\n {\n throw new RangeError(\"invalid curve interpolation\");\n }\n\n points.push({ from, to, interpolation });\n }\n\n return points;\n}\n\n/** Validates an encoded count before allocating or iterating it. */\nexport function boundedCount(value, remaining, stride, maximum)\n{\n if (!Number.isSafeInteger(value)\n || value < 0\n || value > maximum\n || value * stride > remaining)\n {\n throw new RangeError(\"invalid Wwise object count\");\n }\n\n return value;\n}\n\n/** Rejects non-finite authored curve/position values. */\nexport function finite(value)\n{\n if (!Number.isFinite(value))\n {\n throw new RangeError(\"non-finite Wwise object value\");\n }\n\n return value;\n}\n\nfunction ReadInitialFx(cursor)\n{\n const overrideParentRaw = cursor.u8();\n const count = cursor.u8();\n const bypassAllRaw = count ? cursor.u8() : 0;\n const slots = [];\n\n boundedCount(count, cursor.remaining, 6, 255);\n\n for (let index = 0; index < count; index++)\n {\n const slot = cursor.u8();\n const fxId = cursor.u32();\n const flags = cursor.u8();\n\n slots.push({\n index: slot,\n fxId,\n flags,\n bypass: Boolean(flags & 0x01),\n shareSet: Boolean(flags & 0x02),\n rendered: Boolean(flags & 0x04),\n });\n }\n\n return {\n overrideParentRaw,\n overrideParent: Boolean(overrideParentRaw),\n bypassAllRaw,\n bypassAll: Boolean(bypassAllRaw),\n slots,\n };\n}\n\nfunction ReadInitialMetadata(cursor)\n{\n const overrideParentRaw = cursor.u8();\n const count = cursor.u8();\n const slots = [];\n\n boundedCount(count, cursor.remaining, 6, 255);\n\n for (let index = 0; index < count; index++)\n {\n const slot = cursor.u8();\n const fxId = cursor.u32();\n const shareSetRaw = cursor.u8();\n\n slots.push({\n index: slot,\n fxId,\n shareSetRaw,\n shareSet: Boolean(shareSetRaw),\n });\n }\n\n return {\n overrideParentRaw,\n overrideParent: Boolean(overrideParentRaw),\n slots,\n };\n}\n\nfunction ReadPriority(cursor)\n{\n const flags = cursor.u8();\n\n return {\n flags,\n overrideParent: Boolean(flags & 0x01),\n applyDistanceFactor: Boolean(flags & 0x02),\n overrideMidiEventsBehavior: Boolean(flags & 0x04),\n overrideMidiNoteTracking: Boolean(flags & 0x08),\n enableMidiNoteTracking: Boolean(flags & 0x10),\n midiBreakLoopOnNoteOff: Boolean(flags & 0x20),\n };\n}\n\nfunction ReadInitialProperties(cursor)\n{\n const propertyCount = boundedCount(\n cursor.u8(),\n cursor.remaining,\n 5,\n 255,\n );\n const propertyIds = [];\n\n for (let index = 0; index < propertyCount; index++)\n {\n propertyIds.push(cursor.u8());\n }\n\n const properties = propertyIds.map((id) =>\n {\n const rawValue = cursor.u32();\n\n if (id === LOOP_COUNT_PROPERTY_ID)\n {\n return {\n id,\n rawValue,\n valueType: \"loop-count\",\n value: rawValue,\n };\n }\n if (id === ATTENUATION_PROPERTY_ID)\n {\n return {\n id,\n rawValue,\n valueType: \"id\",\n value: rawValue,\n };\n }\n\n return {\n id,\n rawValue,\n valueType: \"union\",\n floatValue: FloatFromBits(rawValue),\n };\n });\n const rangeCount = boundedCount(\n cursor.u8(),\n cursor.remaining,\n 9,\n 255,\n );\n const rangeIds = [];\n\n for (let index = 0; index < rangeCount; index++)\n {\n rangeIds.push(cursor.u8());\n }\n\n const ranges = rangeIds.map((id) =>\n {\n const minRaw = cursor.u32();\n const maxRaw = cursor.u32();\n\n return {\n id,\n minRaw,\n maxRaw,\n minFloat: FloatFromBits(minRaw),\n maxFloat: FloatFromBits(maxRaw),\n };\n });\n const attenuationProperties = properties.filter(\n property => property.id === ATTENUATION_PROPERTY_ID,\n );\n const loopCountProperties = properties.filter(\n property => property.id === LOOP_COUNT_PROPERTY_ID,\n );\n\n if (attenuationProperties.length > 1)\n {\n throw new RangeError(\"duplicate v150 Wwise attenuation property\");\n }\n if (loopCountProperties.length > 1)\n {\n throw new RangeError(\"duplicate v150 Wwise loop-count property\");\n }\n\n const loopCount = loopCountProperties[0]?.value ?? null;\n\n if (loopCount !== null && loopCount > 32767)\n {\n throw new RangeError(\"invalid v150 Wwise loop count\");\n }\n\n return {\n properties,\n ranges,\n attenuationId: attenuationProperties[0]?.value ?? null,\n // Wwise serializes this property only when looping is enabled.\n // Zero means infinite; positive values are finite authored repeats.\n loopCount,\n };\n}\n\n/**\n * Reads the v150 positioning block shared by NodeBase and bus records.\n *\n * @param {WwiseCursor} cursor Bounded object cursor.\n * @returns {object} Exact positioning flags and optional automation.\n */\nexport function readPositioning(cursor)\n{\n const flags = cursor.u8();\n const overrideParent = Boolean(flags & 0x01);\n const listenerRelative = Boolean(flags & 0x02);\n const pannerType = (flags >>> 2) & 0x03;\n const positionType = (flags >>> 5) & 0x03;\n let spatial = null;\n let automation = null;\n\n if (positionType === 3)\n {\n throw new RangeError(\"invalid v150 Wwise position type\");\n }\n\n if (overrideParent && listenerRelative)\n {\n const spatialFlags = cursor.u8();\n\n spatial = {\n flags: spatialFlags,\n mode: spatialFlags & 0x03,\n enableAttenuation: Boolean(spatialFlags & 0x08),\n holdEmitterPositionOrientation: Boolean(spatialFlags & 0x10),\n holdListenerOrientation: Boolean(spatialFlags & 0x20),\n enableDiffraction: Boolean(spatialFlags & 0x40),\n };\n\n if (positionType !== 0)\n {\n automation = ReadAutomation(cursor);\n }\n }\n\n return {\n flags,\n overrideParent,\n listenerRelative,\n pannerType,\n positionType,\n spatial,\n automation,\n };\n}\n\nfunction ReadAutomation(cursor)\n{\n const pathMode = cursor.u8();\n const transitionTime = cursor.s32();\n const vertexCount = boundedCount(\n cursor.u32(),\n cursor.remaining,\n 16,\n 65535,\n );\n const vertices = [];\n\n for (let index = 0; index < vertexCount; index++)\n {\n vertices.push({\n x: finite(cursor.f32()),\n y: finite(cursor.f32()),\n z: finite(cursor.f32()),\n duration: cursor.s32(),\n });\n }\n\n const playlistCount = boundedCount(\n cursor.u32(),\n cursor.remaining,\n 20,\n 65535,\n );\n const playlist = [];\n\n for (let index = 0; index < playlistCount; index++)\n {\n playlist.push({\n verticesOffset: cursor.u32(),\n numVertices: cursor.u32(),\n });\n }\n\n const ranges = [];\n\n for (let index = 0; index < playlistCount; index++)\n {\n ranges.push({\n x: finite(cursor.f32()),\n y: finite(cursor.f32()),\n z: finite(cursor.f32()),\n });\n }\n\n return {\n pathMode,\n transitionTime,\n vertices,\n playlist,\n ranges,\n };\n}\n\n/**\n * Reads the v150 auxiliary-send block shared by NodeBase and bus records.\n *\n * @param {WwiseCursor} cursor Bounded object cursor.\n * @returns {object} Exact auxiliary flags and target identities.\n */\nexport function readAux(cursor)\n{\n const flags = cursor.u8();\n const hasAux = Boolean(flags & 0x08);\n const auxIds = [];\n\n if (hasAux)\n {\n for (let index = 0; index < 4; index++)\n {\n auxIds.push(cursor.u32());\n }\n }\n\n return {\n flags,\n overrideUserAux: Boolean(flags & 0x04),\n hasAux,\n overrideReflectionsAux: Boolean(flags & 0x10),\n auxIds,\n reflectionsAuxBusId: cursor.u32(),\n };\n}\n\nfunction ReadAdvanced(cursor)\n{\n const flags = cursor.u8();\n const virtualQueueBehavior = cursor.u8();\n const maxInstances = cursor.u16();\n const belowThresholdBehavior = cursor.u8();\n const hdrFlags = cursor.u8();\n\n if (virtualQueueBehavior > 2 || belowThresholdBehavior > 3)\n {\n throw new RangeError(\"invalid v150 Wwise advanced setting\");\n }\n\n return {\n flags,\n killNewest: Boolean(flags & 0x01),\n useVirtualBehavior: Boolean(flags & 0x02),\n ignoreParentMaxInstances: Boolean(flags & 0x08),\n overrideVirtualVoiceBehavior: Boolean(flags & 0x10),\n virtualQueueBehavior,\n maxInstances,\n belowThresholdBehavior,\n hdrFlags,\n overrideHdrEnvelope: Boolean(hdrFlags & 0x01),\n overrideAnalysis: Boolean(hdrFlags & 0x02),\n normalizeLoudness: Boolean(hdrFlags & 0x04),\n enableEnvelope: Boolean(hdrFlags & 0x08),\n };\n}\n\n/**\n * Reads one v150 state-aware property and group chunk.\n *\n * @param {WwiseCursor} cursor Bounded object cursor.\n * @returns {object} Exact state property declarations and values.\n */\nexport function readStateChunk(cursor)\n{\n const propertyCount = boundedCount(\n cursor.variable(),\n cursor.remaining,\n 3,\n 4096,\n );\n const properties = [];\n\n for (let index = 0; index < propertyCount; index++)\n {\n const propertyId = cursor.variable();\n const accumulation = cursor.u8();\n const inDbRaw = cursor.u8();\n\n if (accumulation > 6 || inDbRaw > 1)\n {\n throw new RangeError(\"invalid v150 Wwise state property\");\n }\n\n properties.push({\n propertyId,\n accumulation,\n inDbRaw,\n inDb: Boolean(inDbRaw),\n });\n }\n\n const groupCount = boundedCount(\n cursor.variable(),\n cursor.remaining,\n 6,\n 4096,\n );\n const groups = [];\n\n for (let index = 0; index < groupCount; index++)\n {\n const groupId = cursor.u32();\n const syncType = cursor.u8();\n const stateCount = boundedCount(\n cursor.variable(),\n cursor.remaining,\n 6,\n 4096,\n );\n const states = [];\n\n if (syncType > 9)\n {\n throw new RangeError(\"invalid v150 Wwise state sync type\");\n }\n\n for (let stateIndex = 0; stateIndex < stateCount; stateIndex++)\n {\n const stateId = cursor.u32();\n const valueCount = boundedCount(\n cursor.u16(),\n cursor.remaining,\n 6,\n 65535,\n );\n const propertyIds = [];\n\n for (let valueIndex = 0; valueIndex < valueCount; valueIndex++)\n {\n propertyIds.push(cursor.u16());\n }\n\n const values = propertyIds.map(propertyId => ({\n propertyId,\n value: finite(cursor.f32()),\n }));\n\n states.push({ stateId, values });\n }\n\n groups.push({ groupId, syncType, states });\n }\n\n return { properties, groups };\n}\n\nfunction FloatFromBits(value)\n{\n const bytes = new ArrayBuffer(4);\n const view = new DataView(bytes);\n\n view.setUint32(0, value, true);\n return view.getFloat32(0, true);\n}\n"],"names":["WWISE_NODE_BASE_VERSION","ATTENUATION_PROPERTY_ID","LOOP_COUNT_PROPERTY_ID","VALID_CURVE_SCALING","Set","WwiseCursor","constructor","bytes","offset","end","byteLength","Uint8Array","Number","isSafeInteger","TypeError","view","DataView","buffer","byteOffset","at","remaining","ensure","size","RangeError","u8","getUint8","s8","getInt8","u16","value","getUint16","u32","getUint32","s32","getInt32","f32","getFloat32","variable","result","readWwiseVar","subarray","nextOffset","readNodeBase","cursor","fx","ReadInitialFx","metadata","ReadInitialMetadata","overrideBusId","directParentId","priority","ReadPriority","properties","ranges","attenuationId","loopCount","ReadInitialProperties","positioning","readPositioning","aux","readAux","advanced","ReadAdvanced","state","readStateChunk","rtpcs","readInitialRtpcs","parseNodeBaseRange","start","bankVersion","nodeBase","count","boundedCount","index","push","readInitialRtpc","controlId","controlType","accumulation","parameterId","curveId","scaling","pointCount","has","points","readCurvePoints","from","finite","to","interpolation","stride","maximum","isFinite","overrideParentRaw","bypassAllRaw","slots","slot","fxId","flags","bypass","Boolean","shareSet","rendered","overrideParent","bypassAll","shareSetRaw","applyDistanceFactor","overrideMidiEventsBehavior","overrideMidiNoteTracking","enableMidiNoteTracking","midiBreakLoopOnNoteOff","propertyCount","propertyIds","map","id","rawValue","valueType","floatValue","FloatFromBits","rangeCount","rangeIds","minRaw","maxRaw","minFloat","maxFloat","attenuationProperties","filter","property","loopCountProperties","length","listenerRelative","pannerType","positionType","spatial","automation","spatialFlags","mode","enableAttenuation","holdEmitterPositionOrientation","holdListenerOrientation","enableDiffraction","ReadAutomation","pathMode","transitionTime","vertexCount","vertices","x","y","z","duration","playlistCount","playlist","verticesOffset","numVertices","hasAux","auxIds","overrideUserAux","overrideReflectionsAux","reflectionsAuxBusId","virtualQueueBehavior","maxInstances","belowThresholdBehavior","hdrFlags","killNewest","useVirtualBehavior","ignoreParentMaxInstances","overrideVirtualVoiceBehavior","overrideHdrEnvelope","overrideAnalysis","normalizeLoudness","enableEnvelope","propertyId","inDbRaw","inDb","groupCount","groups","groupId","syncType","stateCount","states","stateIndex","stateId","valueCount","valueIndex","values","ArrayBuffer","setUint32"],"mappings":"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"}
@@ -16,6 +16,8 @@ const DDS_PIXELFORMAT_OFFSET = 76;
16
16
  const DDS_FOURCC = 0x00000004;
17
17
  const DDS_RGB = 0x00000040;
18
18
  const DDS_ALPHAPIXELS = 0x00000001;
19
+ const DDS_ALPHA = 0x00000002;
20
+ const DDS_LUMINANCE = 0x00020000;
19
21
  const DDSCAPS2_CUBEMAP = 0x00000200;
20
22
  const DDSCAPS2_VOLUME = 0x00200000;
21
23
  const DDS_CUBE_FACE_FLAGS = Object.freeze([["positive-x", 0x00000400], ["negative-x", 0x00000800], ["positive-y", 0x00001000], ["negative-y", 0x00002000], ["positive-z", 0x00004000], ["negative-z", 0x00008000]]);
@@ -458,7 +460,7 @@ function readDdsTexture(bytes, metadata) {
458
460
  };
459
461
  }
460
462
  function canDecodeDdsToRgba(metadata) {
461
- return ["rgba32float", "rgb32float", "rgba16float", "rg32float", "r32float", "r16float", "rgba8unorm", "rgba8unorm-srgb", "bgra8unorm", "bgra8unorm-srgb", "bgrx8unorm", "bgrx8unorm-srgb", "bgr8unorm", "rg8unorm", "r8unorm", "bc1-rgba-unorm", "bc1-rgba-unorm-srgb", "bc2-rgba-unorm", "bc2-rgba-unorm-srgb", "bc3-rgba-unorm", "bc3-rgba-unorm-srgb", "bc4-r-unorm", "bc4-r-snorm", "bc5-rg-unorm", "bc5-rg-snorm", "bc6h-rgb-ufloat", "bc6h-rgb-float", "bc7-rgba-unorm", "bc7-rgba-unorm-srgb"].includes(metadata.pixelFormat);
463
+ return ["rgba32float", "rgb32float", "rgba16float", "rg32float", "r32float", "r16float", "rgba8unorm", "rgba8unorm-srgb", "bgra8unorm", "bgra8unorm-srgb", "bgrx8unorm", "bgrx8unorm-srgb", "rgbx8unorm", "bgr8unorm", "l8unorm", "l8a8unorm", "a8unorm", "rg8unorm", "r8unorm", "bc1-rgba-unorm", "bc1-rgba-unorm-srgb", "bc2-rgba-unorm", "bc2-rgba-unorm-srgb", "bc3-rgba-unorm", "bc3-rgba-unorm-srgb", "bc4-r-unorm", "bc4-r-snorm", "bc5-rg-unorm", "bc5-rg-snorm", "bc6h-rgb-ufloat", "bc6h-rgb-float", "bc7-rgba-unorm", "bc7-rgba-unorm-srgb"].includes(metadata.pixelFormat);
462
464
  }
463
465
  function readDdsToRgba(bytes, metadata) {
464
466
  if (!canDecodeDdsToRgba(metadata)) {
@@ -569,7 +571,11 @@ function getDdsLevelLayout(pixelFormat, width, height, depth) {
569
571
  "bgra8unorm-srgb": 4,
570
572
  "bgrx8unorm": 4,
571
573
  "bgrx8unorm-srgb": 4,
574
+ "rgbx8unorm": 4,
572
575
  "bgr8unorm": 3,
576
+ "l8a8unorm": 2,
577
+ "l8unorm": 1,
578
+ "a8unorm": 1,
573
579
  "rg8unorm": 2,
574
580
  "r8unorm": 1
575
581
  }[pixelFormat];
@@ -602,6 +608,24 @@ function decodeUncompressed(source, metadata) {
602
608
  rgba[outputOffset + 1] = source[sourceOffset + 1];
603
609
  rgba[outputOffset + 2] = source[sourceOffset];
604
610
  rgba[outputOffset + 3] = 255;
611
+ } else if (metadata.pixelFormat.startsWith("rgbx")) {
612
+ // Fourth byte is padding, not alpha.
613
+ rgba[outputOffset] = source[sourceOffset];
614
+ rgba[outputOffset + 1] = source[sourceOffset + 1];
615
+ rgba[outputOffset + 2] = source[sourceOffset + 2];
616
+ rgba[outputOffset + 3] = 255;
617
+ } else if (metadata.pixelFormat === "l8unorm" || metadata.pixelFormat === "l8a8unorm") {
618
+ // Luminance replicates its one channel across RGB.
619
+ const luminance = source[sourceOffset];
620
+ rgba[outputOffset] = luminance;
621
+ rgba[outputOffset + 1] = luminance;
622
+ rgba[outputOffset + 2] = luminance;
623
+ rgba[outputOffset + 3] = metadata.pixelFormat === "l8a8unorm" ? source[sourceOffset + 1] : 255;
624
+ } else if (metadata.pixelFormat === "a8unorm") {
625
+ rgba[outputOffset] = 0;
626
+ rgba[outputOffset + 1] = 0;
627
+ rgba[outputOffset + 2] = 0;
628
+ rgba[outputOffset + 3] = source[sourceOffset];
605
629
  } else if (metadata.pixelFormat === "rg8unorm") {
606
630
  rgba[outputOffset] = source[sourceOffset];
607
631
  rgba[outputOffset + 1] = source[sourceOffset + 1];
@@ -819,8 +843,23 @@ function getDdsPixelFormat(format) {
819
843
  if (format.pfFlags & DDS_RGB) {
820
844
  if (format.rgbBitCount === 32 && format.rBitMask === 0x000000ff && format.gBitMask === 0x0000ff00 && format.bBitMask === 0x00ff0000 && format.aBitMask === 0xff000000) return "rgba8unorm";
821
845
  if (format.rgbBitCount === 32 && format.rBitMask === 0x00ff0000 && format.gBitMask === 0x0000ff00 && format.bBitMask === 0x000000ff && format.aBitMask === 0xff000000) return "bgra8unorm";
846
+ // D3DFMT_X8R8G8B8 / D3DFMT_X8B8G8R8: 32bpp with no alpha channel.
847
+ // DDPF_ALPHAPIXELS is clear and the alpha mask is zero, so the fourth
848
+ // byte is padding and reads as opaque.
849
+ if (format.rgbBitCount === 32 && format.rBitMask === 0x00ff0000 && format.gBitMask === 0x0000ff00 && format.bBitMask === 0x000000ff && !format.aBitMask) return "bgrx8unorm";
850
+ if (format.rgbBitCount === 32 && format.rBitMask === 0x000000ff && format.gBitMask === 0x0000ff00 && format.bBitMask === 0x00ff0000 && !format.aBitMask) return "rgbx8unorm";
822
851
  if (format.rgbBitCount === 24 && format.rBitMask === 0x00ff0000 && format.gBitMask === 0x0000ff00 && format.bBitMask === 0x000000ff) return "bgr8unorm";
823
852
  }
853
+ // Single-channel masks are authored both ways: some declare DDPF_LUMINANCE,
854
+ // others DDPF_RGB with only a red mask. Both mean one channel replicated
855
+ // across RGB, which is not the same as r8unorm (that samples as red only).
856
+ if (format.pfFlags & DDS_RGB && format.rgbBitCount === 8 && format.rBitMask === 0x000000ff && !format.gBitMask && !format.bBitMask && !format.aBitMask) return "l8unorm";
857
+ if (format.pfFlags & DDS_LUMINANCE) {
858
+ if (format.rgbBitCount === 8 && !(format.pfFlags & DDS_ALPHAPIXELS)) return "l8unorm";
859
+ if (format.rgbBitCount === 16 && format.pfFlags & DDS_ALPHAPIXELS) return "l8a8unorm";
860
+ }
861
+ // D3DFMT_A8: alpha only.
862
+ if (format.pfFlags & DDS_ALPHA && format.rgbBitCount === 8) return "a8unorm";
824
863
  return "";
825
864
  }
826
865
  function inspectTGA(bytes) {