@carbonenginejs/runtime-resource 0.11.1 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/CjsResMan.js +4 -4
  2. package/dist/CjsResMan.js.map +1 -1
  3. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -4
  4. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  5. package/dist/format/CjsByteReader.js +310 -0
  6. package/dist/format/CjsByteReader.js.map +1 -0
  7. package/dist/format/CjsByteWriter.js +242 -0
  8. package/dist/format/CjsByteWriter.js.map +1 -0
  9. package/dist/format/CjsFormatError.js +41 -0
  10. package/dist/format/CjsFormatError.js.map +1 -0
  11. package/dist/format/CjsStringTable.js +268 -0
  12. package/dist/format/CjsStringTable.js.map +1 -0
  13. package/dist/format/carbonEffect/CjsCarbonEffectReader.js +361 -0
  14. package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -0
  15. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -0
  16. package/dist/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -0
  17. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +372 -0
  18. package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +1 -0
  19. package/dist/format/carbonEffect/carbonEffectBackendBlock.js +427 -0
  20. package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -0
  21. package/dist/format/carbonEffect/carbonEffectRecords.js +955 -0
  22. package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -0
  23. package/dist/format/compareUtf8.js +36 -0
  24. package/dist/format/compareUtf8.js.map +1 -0
  25. package/dist/format/index.js +11 -0
  26. package/dist/format/index.js.map +1 -0
  27. package/dist/formats/bnk/CjsBnkFormat.js +18 -2
  28. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  29. package/dist/formats/bnk/core/eventAction.js +305 -0
  30. package/dist/formats/bnk/core/eventAction.js.map +1 -0
  31. package/dist/formats/bnk/core/graph.js +3 -6
  32. package/dist/formats/bnk/core/graph.js.map +1 -1
  33. package/dist/formats/bnk/core/helpers.js +62 -11
  34. package/dist/formats/bnk/core/helpers.js.map +1 -1
  35. package/dist/formats/bnk/core/nodeBase.js +532 -0
  36. package/dist/formats/bnk/core/nodeBase.js.map +1 -0
  37. package/dist/formats/bnk/core/sfxNodes.js +632 -0
  38. package/dist/formats/bnk/core/sfxNodes.js.map +1 -0
  39. package/dist/formats/bnk/core/soundbanksInfo.js +59 -51
  40. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  41. package/dist/formats/gr2/CjsGr2Format.js +256 -13
  42. package/dist/formats/gr2/CjsGr2Format.js.map +1 -1
  43. package/dist/formats/gr2/core/helpers.js +15 -15
  44. package/dist/formats/gr2/core/helpers.js.map +1 -1
  45. package/dist/formats/gr2/core/json.js +1 -1
  46. package/dist/formats/gr2/core/json.js.map +1 -1
  47. package/dist/formats/gr2/core/targets.js +1 -1
  48. package/dist/formats/gr2/core/targets.js.map +1 -1
  49. package/dist/formats/gr2/index.js +0 -1
  50. package/dist/formats/gr2/index.js.map +1 -1
  51. package/dist/formats/hlsl/core/HlslReader.js +7 -257
  52. package/dist/formats/hlsl/core/HlslReader.js.map +1 -1
  53. package/dist/formats/hlsl/core/analysis.js +1 -1
  54. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +781 -0
  55. package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -0
  56. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +21 -1
  57. package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
  58. package/dist/formats/hlsl/index.js +1 -0
  59. package/dist/formats/hlsl/index.js.map +1 -1
  60. package/dist/formats/index.js +3 -6
  61. package/dist/formats/index.js.map +1 -1
  62. package/dist/formats/webgl/core/cewg/CewgPackage.js +2 -1
  63. package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -1
  64. package/dist/formats/webgl/core/cewg/binary.js +11 -93
  65. package/dist/formats/webgl/core/cewg/binary.js.map +1 -1
  66. package/dist/formats/webgl/core/effectPackage.js +4 -1
  67. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  68. package/dist/formats/webgl/core/errors.js +3 -3
  69. package/dist/formats/webgl/core/errors.js.map +1 -1
  70. package/dist/formats/webgpu/CjsWebgpuFormat.js +4 -23
  71. package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
  72. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +197 -0
  73. package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -0
  74. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js +368 -0
  75. package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +1 -0
  76. package/dist/formats/webgpu/core/cewgpu/containerViews.js +355 -0
  77. package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +1 -0
  78. package/dist/formats/webgpu/core/cewgpu/validateContainer.js +90 -0
  79. package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +1 -0
  80. package/dist/formats/webgpu/core/effectBackendBodySet.js +21 -20
  81. package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  82. package/dist/formats/webgpu/core/helpers.js +87 -92
  83. package/dist/formats/webgpu/core/helpers.js.map +1 -1
  84. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +14 -13
  85. package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -1
  86. package/dist/formats/webgpu/core/ir/inferValueTypes.js +10 -8
  87. package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -1
  88. package/dist/formats/webgpu/core/packageEffect.js +94 -9
  89. package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
  90. package/dist/formats/webgpu/core/packageMetadata.js +10 -1
  91. package/dist/formats/webgpu/core/packageMetadata.js.map +1 -1
  92. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +17 -15
  93. package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
  94. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +13 -12
  95. package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -1
  96. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +9 -8
  97. package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
  98. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +23 -22
  99. package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -1
  100. package/dist/formats/webgpu/core/wgsl/selectionPlans.js +46 -44
  101. package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -1
  102. package/dist/resource/CjsResource.js +700 -684
  103. package/dist/resource/CjsResource.js.map +1 -1
  104. package/dist/resource/Tr2LightProfileRes.js +18 -27
  105. package/dist/resource/Tr2LightProfileRes.js.map +1 -1
  106. package/dist/resource/audio/CjsAudioBufferRes.js +2 -2
  107. package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -1
  108. package/dist/resource/audio/CjsAudioRes.js +2 -2
  109. package/dist/resource/audio/CjsAudioRes.js.map +1 -1
  110. package/dist/resource/geometry/TriGeometryRes.js +605 -586
  111. package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
  112. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +21 -30
  113. package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -1
  114. package/dist/resource/geometry/granny/TriGrannyRes.js +21 -30
  115. package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -1
  116. package/dist/resource/shader/Tr2EffectRes.js +9 -7
  117. package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
  118. package/dist/resource/shader/Tr2MaterialArea.js +5 -3
  119. package/dist/resource/shader/Tr2MaterialArea.js.map +1 -1
  120. package/dist/resource/shader/Tr2MaterialMesh.js +4 -2
  121. package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -1
  122. package/dist/resource/shader/Tr2MaterialRes.js +5 -3
  123. package/dist/resource/shader/Tr2MaterialRes.js.map +1 -1
  124. package/dist/resource/shader/Tr2Shader.js +26 -21
  125. package/dist/resource/shader/Tr2Shader.js.map +1 -1
  126. package/dist/resource/shader/Tr2ShaderPermutation.js +8 -6
  127. package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -1
  128. package/dist/resource/shader/reflection/Tr2EffectDefine.js +5 -3
  129. package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -1
  130. package/dist/resource/shader/reflection/Tr2EffectDescription.js +5 -3
  131. package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
  132. package/dist/resource/shader/reflection/Tr2EffectLibrary.js +17 -15
  133. package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
  134. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +11 -9
  135. package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
  136. package/dist/resource/shader/reflection/Tr2EffectResource.js +8 -6
  137. package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
  138. package/dist/resource/shader/reflection/Tr2EffectStageInput.js +15 -13
  139. package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
  140. package/dist/resource/shader/reflection/Tr2EffectTechnique.js +7 -5
  141. package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
  142. package/dist/resource/shader/reflection/Tr2Pass.js +11 -9
  143. package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
  144. package/dist/resource/shader/sampler/Tr2SamplerSetup.js +8 -6
  145. package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
  146. package/dist/resource/texture/CjsTextureArrayRes.js +400 -411
  147. package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -1
  148. package/dist/resource/texture/Tr2ImageRes.js +99 -95
  149. package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
  150. package/dist/resource/texture/TriTextureRes.js +312 -273
  151. package/dist/resource/texture/TriTextureRes.js.map +1 -1
  152. package/docs/README.md +13 -1
  153. package/docs/architecture.md +3 -3
  154. package/docs/concepts/resource-lifecycle.md +9 -2
  155. package/docs/concepts/shader-resource-model.md +114 -0
  156. package/docs/concepts/writing-an-engine-adapter.md +115 -0
  157. package/docs/formats/README.md +24 -1
  158. package/docs/formats/carbon-effect-container.md +452 -0
  159. package/docs/formats/dxbc/README.md +68 -0
  160. package/docs/formats/dxbc/architecture.md +80 -0
  161. package/docs/formats/dxbc/reference/api.md +77 -0
  162. package/docs/formats/dxbc/reference/classes/README.md +9 -0
  163. package/docs/formats/dxbc/reference/decoded-output.md +122 -0
  164. package/docs/formats/gr2.md +3 -4
  165. package/docs/formats/hlsl/README.md +54 -0
  166. package/docs/formats/hlsl/architecture.md +67 -0
  167. package/docs/formats/hlsl/guides/hydrating-json-output.md +62 -0
  168. package/docs/formats/hlsl/guides/reading-effects.md +64 -0
  169. package/docs/formats/hlsl/reference/advanced-analysis.md +66 -0
  170. package/docs/formats/hlsl/reference/api.md +98 -0
  171. package/docs/formats/hlsl/reference/classes/README.md +11 -0
  172. package/docs/formats/hlsl/reference/json-graph.md +100 -0
  173. package/docs/formats/hlsl/reference/portable-reflection.md +141 -0
  174. package/docs/formats/provenance.md +32 -17
  175. package/docs/formats/webgl/README.md +57 -0
  176. package/docs/formats/webgl/architecture.md +70 -0
  177. package/docs/formats/webgl/carbon-constant-layouts.md +326 -0
  178. package/docs/formats/webgl/decl-io.md +1234 -0
  179. package/docs/formats/webgl/effect-reflection.md +127 -0
  180. package/docs/formats/webgl/memory-structured.md +871 -0
  181. package/docs/formats/webgl/reference/classes/README.md +9 -0
  182. package/docs/formats/webgl/texture-sample.md +964 -0
  183. package/docs/formats/webgpu/README.md +84 -0
  184. package/docs/formats/webgpu/architecture.md +96 -0
  185. package/docs/formats/webgpu/formats/cewgpu.md +216 -0
  186. package/docs/formats/webgpu/guides/effect-packaging.md +191 -0
  187. package/docs/formats/webgpu/reference/api.md +197 -0
  188. package/docs/formats/webgpu/reference/classes/README.md +9 -0
  189. package/docs/formats/webgpu/reference/wgsl-compatibility.md +1543 -0
  190. package/docs/formats/wwise.md +45 -4
  191. package/docs/reference/classes/core.md +80 -0
  192. package/docs/reference/classes/formats.md +24 -34
  193. package/docs/reference/events.md +25 -0
  194. package/docs/reference/motherlode-cache.md +22 -8
  195. package/docs/reference/workers.md +5 -5
  196. package/docs/roadmap.md +61 -41
  197. package/format-notices/bnk/NOTICE +5 -4
  198. package/format-notices/webgl/NOTICE +1 -1
  199. package/package.json +2 -1
  200. package/dist/formats/gr2/core/CjsFormatGr2.js +0 -273
  201. package/dist/formats/gr2/core/CjsFormatGr2.js.map +0 -1
  202. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +0 -415
  203. package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +0 -1
  204. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +0 -100
  205. package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +0 -1
  206. package/dist/formats/webgpu/core/cewgpu/binary.js +0 -93
  207. package/dist/formats/webgpu/core/cewgpu/binary.js.map +0 -1
  208. package/dist/formats/webgpu/core/cewgpu/tags.js +0 -17
  209. package/dist/formats/webgpu/core/cewgpu/tags.js.map +0 -1
  210. package/dist/formats/webgpu/core/effectPackageValidation.js +0 -1078
  211. package/dist/formats/webgpu/core/effectPackageValidation.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfxNodes.js","sources":["../../../../../src/formats/bnk/core/sfxNodes.js"],"sourcesContent":["// Wwise v150 authored-SFX node decoding. Like musicNodes.js, this interprets\n// inspect() payload views outside the BNK read path and accepts a suffix only\n// when one anchored candidate consumes the payload exactly. Common NodeBase\n// facts and non-playable hierarchy/attenuation objects stay separate from the\n// playback-node map.\n\nimport {\n WWISE_NODE_BASE_VERSION,\n WwiseCursor as SfxCursor,\n boundedCount as BoundedCount,\n finite as Finite,\n parseNodeBaseRange,\n readCurvePoints as ReadPoints,\n readInitialRtpc as ReadInitialRTPC,\n readInitialRtpcs,\n readNodeBase,\n} from \"./nodeBase.js\";\n\nconst SUPPORTED_VERSION = WWISE_NODE_BASE_VERSION;\nconst SFX_CHILD_TYPES = new Set([ 2, 5, 6, 7, 9 ]);\nconst TYPE_NAMES = Object.freeze({\n 2: \"sound\",\n 5: \"random-sequence-container\",\n 6: \"switch-container\",\n 7: \"actor-mixer\",\n 9: \"blend-container\",\n 14: \"attenuation\",\n});\n\n/**\n * Decodes one v150 HIRC 5 Random/Sequence payload.\n *\n * @returns {object|null} Typed node, or null when no unique exact-end anchor\n * validates.\n */\nexport function parseSfxRandomSequence(\n payload,\n knownObjects,\n { bankVersion = SUPPORTED_VERSION } = {},\n)\n{\n return FindRandomSequence(\n payload,\n NormalizeKnownObjects(knownObjects),\n bankVersion,\n ).node;\n}\n\n/**\n * Decodes one v150 HIRC 6 Switch payload.\n *\n * @returns {object|null} Typed node, or null when no unique exact-end anchor\n * validates.\n */\nexport function parseSfxSwitch(\n payload,\n knownObjects,\n { bankVersion = SUPPORTED_VERSION } = {},\n)\n{\n return FindSwitch(\n payload,\n NormalizeKnownObjects(knownObjects),\n bankVersion,\n ).node;\n}\n\n/**\n * Decodes one v150 HIRC 9 Layer payload without lowering curve semantics.\n *\n * @returns {object|null} Typed node, or null when no unique exact-end anchor\n * validates.\n */\nexport function parseSfxLayer(\n payload,\n knownObjects,\n { bankVersion = SUPPORTED_VERSION } = {},\n)\n{\n return FindLayer(\n payload,\n NormalizeKnownObjects(knownObjects),\n bankVersion,\n ).node;\n}\n\n/**\n * Decodes one exact v150 HIRC 7 Actor-Mixer hierarchy object.\n *\n * Actor-Mixers carry inherited NodeBase facts and child identities, but are\n * not themselves playable container behavior.\n *\n * @returns {object|null} Typed hierarchy object, or null when invalid.\n */\nexport function parseSfxActorMixer(\n payload,\n { bankVersion = SUPPORTED_VERSION } = {},\n)\n{\n return FindActorMixer(payload, bankVersion).node;\n}\n\n/**\n * Decodes one exact v150 HIRC 14 attenuation object without assigning curve\n * slots semantic names.\n *\n * @returns {object|null} Typed attenuation object, or null when invalid.\n */\nexport function parseSfxAttenuation(\n payload,\n { bankVersion = SUPPORTED_VERSION } = {},\n)\n{\n return FindAttenuation(payload, bankVersion).node;\n}\n\n/**\n * Decodes typed SFX nodes, events, and actions across inspected v150 banks.\n *\n * Raw Wwise identities and semantics are preserved. Runtime schema lowering\n * and optional authoring-name enrichment belong to runtime-audio's builder.\n */\nexport function sfxNodesFromBanks(inspections)\n{\n const banks = Array.isArray(inspections)\n ? inspections\n : [ inspections ];\n const knownObjects = new Map();\n const duplicates = [];\n\n for (const inspection of banks)\n {\n for (const entry of inspection?.hirc ?? [])\n {\n if (knownObjects.has(entry.id))\n {\n duplicates.push({\n id: entry.id,\n previousBank: knownObjects.get(entry.id).bank,\n bank: inspection.source || \"\",\n });\n }\n knownObjects.set(entry.id, {\n ...entry,\n bank: inspection.source || \"\",\n });\n }\n }\n\n const nodes = new Map();\n const nodeBases = new Map();\n const actorMixers = new Map();\n const attenuations = new Map();\n const events = new Map();\n const actions = new Map();\n const failed = [];\n const nodeBaseFailed = [];\n const ambiguous = [];\n const unsupportedVersions = [];\n const parsedByType = {};\n let parsed = 0;\n\n for (const inspection of banks)\n {\n const version = Number(inspection?.bankVersion) >>> 0;\n const bank = inspection?.source || \"\";\n\n if (version !== SUPPORTED_VERSION)\n {\n unsupportedVersions.push({ bank, version });\n continue;\n }\n\n for (const entry of inspection?.hirc ?? [])\n {\n if (entry.type === 4)\n {\n events.set(entry.id, {\n id: entry.id,\n type: \"event\",\n bank,\n actionIds: [ ...(entry.actionIds ?? []) ],\n });\n continue;\n }\n if (entry.type === 3)\n {\n actions.set(entry.id, {\n id: entry.id,\n type: \"event-action\",\n bank,\n actionType: entry.actionType,\n targetId: entry.targetId,\n action: entry.action ?? null,\n payload: entry.payload,\n });\n continue;\n }\n\n let result = null;\n\n if (entry.type === 2)\n {\n if (entry.pluginId === undefined\n || entry.sourceId === undefined)\n {\n result = { node: null, reason: \"missing typed sound fields\" };\n }\n else\n {\n result = {\n node: {\n type: \"sound\",\n pluginId: entry.pluginId,\n pluginType: entry.pluginType\n ?? (entry.pluginId & 0x0f),\n streamType: entry.streamType,\n sourceId: entry.sourceId,\n inMemoryMediaSize: entry.inMemoryMediaSize,\n },\n reason: \"\",\n };\n }\n }\n else if (entry.type === 5)\n {\n result = FindRandomSequence(\n entry.payload,\n knownObjects,\n version,\n );\n }\n else if (entry.type === 6)\n {\n result = FindSwitch(\n entry.payload,\n knownObjects,\n version,\n );\n }\n else if (entry.type === 7)\n {\n result = FindActorMixer(entry.payload, version);\n }\n else if (entry.type === 9)\n {\n result = FindLayer(\n entry.payload,\n knownObjects,\n version,\n );\n }\n else if (entry.type === 14)\n {\n result = FindAttenuation(entry.payload, version);\n }\n else\n {\n continue;\n }\n\n if (!result.node)\n {\n const failure = {\n bank,\n version,\n type: TYPE_NAMES[entry.type],\n id: entry.id,\n reason: result.reason,\n };\n\n failed.push(failure);\n if (result.reason === \"ambiguous anchors\")\n {\n ambiguous.push(failure);\n }\n continue;\n }\n\n parsed++;\n parsedByType[result.node.type] = (\n parsedByType[result.node.type] ?? 0\n ) + 1;\n\n if (entry.type === 14)\n {\n attenuations.set(entry.id, {\n id: entry.id,\n bank,\n ...result.node,\n });\n continue;\n }\n\n if (entry.type === 7)\n {\n actorMixers.set(entry.id, {\n id: entry.id,\n bank,\n ...result.node,\n });\n nodeBases.set(entry.id, result.node.nodeBase);\n continue;\n }\n\n const node = {\n id: entry.id,\n bank,\n ...result.node,\n };\n const nodeBaseResult = ReadEntryNodeBase(\n entry,\n result,\n version,\n );\n\n nodes.set(entry.id, node);\n\n if (nodeBaseResult.nodeBase)\n {\n nodeBases.set(entry.id, nodeBaseResult.nodeBase);\n }\n else\n {\n nodeBaseFailed.push({\n bank,\n version,\n type: TYPE_NAMES[entry.type],\n id: entry.id,\n reason: nodeBaseResult.reason,\n });\n }\n }\n }\n\n return {\n nodes,\n nodeBases,\n actorMixers,\n attenuations,\n events,\n actions,\n diagnostics: {\n parsed,\n parsedByType,\n failed,\n nodeBaseFailed,\n ambiguous,\n unsupportedVersions,\n duplicates,\n },\n };\n}\n\nfunction ReadEntryNodeBase(entry, result, bankVersion)\n{\n if (entry.type === 2)\n {\n const start = SoundNodeBaseOffset(entry);\n\n if (start === null)\n {\n return {\n nodeBase: null,\n reason: \"sound NodeBase offset is unavailable\",\n };\n }\n\n const nodeBase = parseNodeBaseRange(\n entry.payload,\n start,\n entry.payload.byteLength,\n { bankVersion },\n );\n\n return {\n nodeBase,\n reason: nodeBase\n ? \"\"\n : \"sound NodeBase did not consume its exact byte range\",\n };\n }\n\n if (result.anchor === undefined)\n {\n return {\n nodeBase: null,\n reason: \"container NodeBase anchor is unavailable\",\n };\n }\n\n const nodeBase = parseNodeBaseRange(\n entry.payload,\n 0,\n result.anchor,\n { bankVersion },\n );\n\n return {\n nodeBase,\n reason: nodeBase\n ? \"\"\n : \"container NodeBase did not consume its exact byte range\",\n };\n}\n\nfunction SoundNodeBaseOffset(entry)\n{\n const payload = entry?.payload;\n\n if (!(payload instanceof Uint8Array) || payload.byteLength < 14)\n {\n return null;\n }\n\n const pluginType = Number(\n entry.pluginType ?? (entry.pluginId & 0x0f),\n );\n\n if (pluginType !== 2)\n {\n return 14;\n }\n\n if (payload.byteLength < 18)\n {\n return null;\n }\n\n const view = new DataView(\n payload.buffer,\n payload.byteOffset,\n payload.byteLength,\n );\n const parameterSize = view.getUint32(14, true);\n const start = 18 + parameterSize;\n\n return Number.isSafeInteger(start) && start <= payload.byteLength\n ? start\n : null;\n}\n\nfunction FindActorMixer(payload, bankVersion)\n{\n return ParseExact(payload, bankVersion, (cursor) =>\n {\n const nodeBase = readNodeBase(cursor);\n const count = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 4,\n 8192,\n );\n const children = [];\n\n for (let index = 0; index < count; index++)\n {\n children.push(cursor.u32());\n }\n\n return {\n type: \"actor-mixer\",\n nodeBase,\n children,\n };\n });\n}\n\nfunction FindAttenuation(payload, bankVersion)\n{\n return ParseExact(payload, bankVersion, (cursor) =>\n {\n const heightSpreadRaw = cursor.u8();\n const coneFlags = cursor.u8();\n let cone = null;\n\n if (coneFlags & 0x01)\n {\n cone = {\n insideDegrees: Finite(cursor.f32()),\n outsideDegrees: Finite(cursor.f32()),\n outsideVolume: Finite(cursor.f32()),\n lowPass: Finite(cursor.f32()),\n highPass: Finite(cursor.f32()),\n };\n }\n\n const curveToUse = [];\n\n for (let index = 0; index < 19; index++)\n {\n curveToUse.push(cursor.s8());\n }\n\n const curveCount = BoundedCount(\n cursor.u8(),\n cursor.remaining,\n 3,\n 19,\n );\n\n const curves = [];\n\n for (let index = 0; index < curveCount; index++)\n {\n const scaling = cursor.u8();\n const pointCount = BoundedCount(\n cursor.u16(),\n cursor.remaining,\n 12,\n 65535,\n );\n const rtpc = ReadInitialRTPCFromCurve(\n cursor,\n scaling,\n pointCount,\n );\n\n curves.push(rtpc);\n }\n\n return {\n type: \"attenuation\",\n heightSpreadRaw,\n heightSpread: Boolean(heightSpreadRaw),\n coneFlags,\n cone,\n curveToUse,\n curves,\n rtpcs: readInitialRtpcs(cursor),\n };\n });\n}\n\nfunction ReadInitialRTPCFromCurve(cursor, scaling, pointCount)\n{\n if (![ 0, 2, 3, 4 ].includes(scaling))\n {\n throw new RangeError(\"invalid attenuation curve scaling\");\n }\n\n return {\n scaling,\n points: ReadPoints(cursor, pointCount),\n };\n}\n\nfunction FindRandomSequence(payload, knownObjects, bankVersion)\n{\n return FindUnique(payload, bankVersion, (cursor) =>\n {\n const loopCount = cursor.u16();\n const loopModMin = cursor.u16();\n const loopModMax = cursor.u16();\n const transitionTime = Finite(cursor.f32());\n const transitionTimeModMin = Finite(cursor.f32());\n const transitionTimeModMax = Finite(cursor.f32());\n const avoidRepeatCount = cursor.u16();\n const transitionMode = cursor.u8();\n const randomMode = cursor.u8();\n const containerMode = cursor.u8();\n const flags = cursor.u8();\n\n if (transitionMode > 5\n || randomMode > 1\n || containerMode > 1\n || (flags & ~0x1f))\n {\n throw new RangeError(\"invalid Random/Sequence enum\");\n }\n\n const children = ReadChildren(cursor, knownObjects);\n const playlistCount = BoundedCount(\n cursor.u16(),\n cursor.remaining,\n 8,\n 8192,\n );\n const childSet = new Set(children);\n const playlist = [];\n\n for (let index = 0; index < playlistCount; index++)\n {\n const playId = cursor.u32();\n const weight = cursor.s32();\n\n if (!childSet.has(playId) || weight < 0)\n {\n throw new RangeError(\"invalid Random/Sequence playlist\");\n }\n playlist.push({ playId, weight });\n }\n\n return {\n type: containerMode === 0 ? \"random\" : \"sequence\",\n loopCount,\n loopModMin,\n loopModMax,\n transitionTime,\n transitionTimeModMin,\n transitionTimeModMax,\n avoidRepeatCount,\n transitionMode,\n randomMode,\n usingWeight: Boolean(flags & 0x01),\n resetPlaylistEachPlay: Boolean(flags & 0x02),\n restartBackward: Boolean(flags & 0x04),\n continuous: Boolean(flags & 0x08),\n global: Boolean(flags & 0x10),\n children,\n playlist,\n };\n });\n}\n\nfunction FindSwitch(payload, knownObjects, bankVersion)\n{\n return FindUnique(payload, bankVersion, (cursor) =>\n {\n const groupType = cursor.u8();\n const groupId = cursor.u32();\n const defaultValueId = cursor.u32();\n const continuousValidation = cursor.u8();\n\n if (groupType > 1 || continuousValidation > 1)\n {\n throw new RangeError(\"invalid Switch enum\");\n }\n\n const children = ReadChildren(cursor, knownObjects);\n const assignmentCount = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 8,\n 8192,\n );\n const assignments = [];\n\n for (let index = 0; index < assignmentCount; index++)\n {\n const valueId = cursor.u32();\n const itemCount = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 4,\n 8192,\n );\n const childIds = [];\n\n for (let item = 0; item < itemCount; item++)\n {\n const childId = cursor.u32();\n\n childIds.push(childId);\n }\n assignments.push({ valueId, childIds });\n }\n\n const parameterCount = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 14,\n 8192,\n );\n const parameters = [];\n\n for (let index = 0; index < parameterCount; index++)\n {\n const childId = cursor.u32();\n const flags1 = cursor.u8();\n const flags2 = cursor.u8();\n const onSwitchMode = flags2 & 0x07;\n\n if ((flags1 & ~0x03)\n || (flags2 & ~0x07)\n || onSwitchMode > 1)\n {\n throw new RangeError(\"invalid Switch parameter\");\n }\n parameters.push({\n childId,\n firstOnly: Boolean(flags1 & 0x01),\n continuePlayback: Boolean(flags1 & 0x02),\n onSwitchMode,\n fadeOutMs: cursor.s32(),\n fadeInMs: cursor.s32(),\n });\n }\n\n // Essential and partial banks may retain raw SwitchList and parameter\n // references to nodes that are not serialized in direct Children.\n // Consumers decide whether those referenced nodes are available.\n return {\n type: \"switch\",\n groupType,\n groupId,\n defaultValueId,\n continuousValidation: Boolean(continuousValidation),\n children,\n assignments,\n parameters,\n };\n });\n}\n\nfunction FindLayer(payload, knownObjects, bankVersion)\n{\n return FindUnique(payload, bankVersion, (cursor) =>\n {\n const children = ReadChildren(cursor, knownObjects);\n const childSet = new Set(children);\n const layerCount = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 15,\n 1024,\n );\n const layers = [];\n\n for (let index = 0; index < layerCount; index++)\n {\n const layerId = cursor.u32();\n const initialRtpcCount = BoundedCount(\n cursor.u16(),\n cursor.remaining,\n 14,\n 4096,\n );\n const initialRtpcs = [];\n\n for (let rtpc = 0; rtpc < initialRtpcCount; rtpc++)\n {\n initialRtpcs.push(ReadInitialRTPC(cursor));\n }\n\n const controlId = cursor.u32();\n const controlType = cursor.u8();\n const associationCount = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 8,\n 8192,\n );\n const associations = [];\n\n if (controlType > 4)\n {\n throw new RangeError(\"invalid Layer control type\");\n }\n\n for (let association = 0;\n association < associationCount;\n association++)\n {\n const childId = cursor.u32();\n const pointCount = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 12,\n 65535,\n );\n\n if (!childSet.has(childId))\n {\n throw new RangeError(\"invalid Layer association child\");\n }\n associations.push({\n childId,\n points: ReadPoints(cursor, pointCount),\n });\n }\n\n layers.push({\n layerId,\n initialRtpcs,\n controlId,\n controlType,\n associations,\n });\n }\n\n const continuousValidation = cursor.u8();\n\n if (continuousValidation > 1)\n {\n throw new RangeError(\"invalid Layer validation mode\");\n }\n\n return {\n type: \"layer\",\n children,\n layers,\n continuousValidation: Boolean(continuousValidation),\n };\n });\n}\n\nfunction ReadChildren(cursor, knownObjects)\n{\n const count = BoundedCount(\n cursor.u32(),\n cursor.remaining,\n 4,\n 8192,\n );\n const children = [];\n\n for (let index = 0; index < count; index++)\n {\n const id = cursor.u32();\n const type = KnownType(knownObjects.get(id));\n\n if (!SFX_CHILD_TYPES.has(type))\n {\n throw new RangeError(\"invalid SFX child identity\");\n }\n children.push(id);\n }\n return children;\n}\n\nfunction FindUnique(payload, bankVersion, parse)\n{\n if (!(payload instanceof Uint8Array)\n || Number(bankVersion) !== SUPPORTED_VERSION)\n {\n return { node: null, reason: \"unsupported bank version\" };\n }\n\n const candidates = [];\n\n for (let anchor = 0; anchor < payload.byteLength; anchor++)\n {\n try\n {\n const cursor = new SfxCursor(payload, anchor);\n const node = parse(cursor);\n\n if (cursor.at === payload.byteLength)\n {\n candidates.push({ node, anchor });\n }\n }\n catch\n {\n // This byte was not the exact type-tail anchor.\n }\n }\n\n if (candidates.length === 1)\n {\n return {\n node: candidates[0].node,\n anchor: candidates[0].anchor,\n reason: \"\",\n };\n }\n if (candidates.length > 1)\n {\n const exactNodeBase = candidates.filter(candidate =>\n parseNodeBaseRange(\n payload,\n 0,\n candidate.anchor,\n { bankVersion },\n ));\n\n if (exactNodeBase.length === 1)\n {\n return {\n node: exactNodeBase[0].node,\n anchor: exactNodeBase[0].anchor,\n reason: \"\",\n };\n }\n }\n return {\n node: null,\n reason: candidates.length ? \"ambiguous anchors\" : \"no exact anchor\",\n };\n}\n\nfunction ParseExact(payload, bankVersion, parse)\n{\n if (!(payload instanceof Uint8Array)\n || Number(bankVersion) !== SUPPORTED_VERSION)\n {\n return { node: null, reason: \"unsupported bank version\" };\n }\n\n try\n {\n const cursor = new SfxCursor(payload);\n const node = parse(cursor);\n\n return cursor.at === payload.byteLength\n ? { node, reason: \"\" }\n : { node: null, reason: \"trailing bytes\" };\n }\n catch (cause)\n {\n return {\n node: null,\n reason: cause instanceof Error\n ? cause.message\n : \"invalid object\",\n };\n }\n}\n\nfunction NormalizeKnownObjects(value)\n{\n if (value instanceof Map)\n {\n return value;\n }\n\n const map = new Map();\n\n for (const entry of value ?? [])\n {\n if (typeof entry === \"number\")\n {\n map.set(entry, { type: 2 });\n }\n else if (entry?.id !== undefined)\n {\n map.set(Number(entry.id) >>> 0, entry);\n }\n }\n return map;\n}\n\nfunction KnownType(value)\n{\n return typeof value === \"number\" ? value : value?.type;\n}\n"],"names":["SUPPORTED_VERSION","WWISE_NODE_BASE_VERSION","SFX_CHILD_TYPES","Set","TYPE_NAMES","Object","freeze","parseSfxRandomSequence","payload","knownObjects","bankVersion","FindRandomSequence","NormalizeKnownObjects","node","parseSfxSwitch","FindSwitch","parseSfxLayer","FindLayer","parseSfxActorMixer","FindActorMixer","parseSfxAttenuation","FindAttenuation","sfxNodesFromBanks","inspections","banks","Array","isArray","Map","duplicates","inspection","entry","hirc","has","id","push","previousBank","get","bank","source","set","nodes","nodeBases","actorMixers","attenuations","events","actions","failed","nodeBaseFailed","ambiguous","unsupportedVersions","parsedByType","parsed","version","Number","type","actionIds","actionType","targetId","action","result","pluginId","undefined","sourceId","reason","pluginType","streamType","inMemoryMediaSize","failure","nodeBase","nodeBaseResult","ReadEntryNodeBase","diagnostics","start","SoundNodeBaseOffset","parseNodeBaseRange","byteLength","anchor","Uint8Array","view","DataView","buffer","byteOffset","parameterSize","getUint32","isSafeInteger","ParseExact","cursor","readNodeBase","count","BoundedCount","u32","remaining","children","index","heightSpreadRaw","u8","coneFlags","cone","insideDegrees","Finite","f32","outsideDegrees","outsideVolume","lowPass","highPass","curveToUse","s8","curveCount","curves","scaling","pointCount","u16","rtpc","ReadInitialRTPCFromCurve","heightSpread","Boolean","rtpcs","readInitialRtpcs","includes","RangeError","points","ReadPoints","FindUnique","loopCount","loopModMin","loopModMax","transitionTime","transitionTimeModMin","transitionTimeModMax","avoidRepeatCount","transitionMode","randomMode","containerMode","flags","ReadChildren","playlistCount","childSet","playlist","playId","weight","s32","usingWeight","resetPlaylistEachPlay","restartBackward","continuous","global","groupType","groupId","defaultValueId","continuousValidation","assignmentCount","assignments","valueId","itemCount","childIds","item","childId","parameterCount","parameters","flags1","flags2","onSwitchMode","firstOnly","continuePlayback","fadeOutMs","fadeInMs","layerCount","layers","layerId","initialRtpcCount","initialRtpcs","ReadInitialRTPC","controlId","controlType","associationCount","associations","association","KnownType","parse","candidates","SfxCursor","at","length","exactNodeBase","filter","candidate","cause","Error","message","value","map"],"mappings":"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"}
@@ -1,22 +1,22 @@
1
- /**
2
- * Readers for Wwise SoundbanksInfo metadata (the `soundbanksinfo.json` file
3
- * generated next to soundbanks).
4
- *
5
- * SoundbanksInfo is the authoring-name authority for soundbank content: it
6
- * maps media ids to original source paths and lists per-bank events, switch
7
- * groups, state groups, and game parameters. These helpers normalize that
8
- * document and join it against `CjsBnkFormat` inspection output; they never
9
- * touch audio bytes.
1
+ /**
2
+ * Readers for Wwise SoundbanksInfo metadata (the `soundbanksinfo.json` file
3
+ * generated next to soundbanks).
4
+ *
5
+ * SoundbanksInfo is the authoring-name authority for soundbank content: it
6
+ * maps media ids to original source paths and lists per-bank events, switch
7
+ * groups, state groups, and game parameters. These helpers normalize that
8
+ * document and join it against `CjsBnkFormat` inspection output; they never
9
+ * touch audio bytes.
10
10
  */
11
11
 
12
- /**
13
- * Compute the Wwise 32-bit id for a name.
14
- *
15
- * Wwise derives bank, event, and language ids as the FNV-1 32-bit hash of the
16
- * lowercased name (verified against EVE build 3421648 bank and language ids).
17
- *
18
- * @param {string} name Bank, event, switch, or language name.
19
- * @returns {number} Unsigned 32-bit Wwise id.
12
+ /**
13
+ * Compute the Wwise 32-bit id for a name.
14
+ *
15
+ * Wwise derives bank, event, and language ids as the FNV-1 32-bit hash of the
16
+ * lowercased name (verified against EVE build 3421648 bank and language ids).
17
+ *
18
+ * @param {string} name Bank, event, switch, or language name.
19
+ * @returns {number} Unsigned 32-bit Wwise id.
20
20
  */
21
21
  function wwiseIdFromName(name) {
22
22
  let hash = 2166136261 >>> 0;
@@ -51,11 +51,11 @@ function toSoundbanksInfoDocument(input) {
51
51
  return document;
52
52
  }
53
53
 
54
- /**
55
- * Test whether input looks like a Wwise SoundbanksInfo document.
56
- *
57
- * @param {Uint8Array|ArrayBuffer|DataView|string|object} input Candidate document.
58
- * @returns {boolean} True when a SoundBanksInfo bank list is present.
54
+ /**
55
+ * Test whether input looks like a Wwise SoundbanksInfo document.
56
+ *
57
+ * @param {Uint8Array|ArrayBuffer|DataView|string|object} input Candidate document.
58
+ * @returns {boolean} True when a SoundBanksInfo bank list is present.
59
59
  */
60
60
  function isSoundbanksInfo(input) {
61
61
  try {
@@ -66,11 +66,11 @@ function isSoundbanksInfo(input) {
66
66
  }
67
67
  }
68
68
 
69
- /**
70
- * Parse SoundbanksInfo into a normalized camelCase summary.
71
- *
72
- * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.
73
- * @returns {object} Normalized document summary with per-bank details.
69
+ /**
70
+ * Parse SoundbanksInfo into a normalized camelCase summary.
71
+ *
72
+ * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.
73
+ * @returns {object} Normalized document summary with per-bank details.
74
74
  */
75
75
  function parseSoundbanksInfo(input) {
76
76
  const document = toSoundbanksInfoDocument(input);
@@ -98,23 +98,27 @@ function parseSoundbanksInfo(input) {
98
98
  return summary;
99
99
  }
100
100
  function normalizeBank(bank) {
101
+ const media = Array.isArray(bank.Media) ? bank.Media : bank.IncludedMemoryFiles || [];
102
+ const events = Array.isArray(bank.Events) ? bank.Events : bank.IncludedEvents || [];
101
103
  return {
102
104
  id: String(bank.Id ?? ""),
103
105
  type: bank.Type || "",
104
106
  language: bank.Language || "",
105
107
  shortName: bank.ShortName || "",
106
108
  path: bank.Path || "",
107
- media: (bank.Media || []).map(entry => ({
109
+ media: media.map(entry => ({
108
110
  id: String(entry.Id ?? ""),
109
111
  shortName: entry.ShortName || "",
110
112
  cachePath: entry.CachePath || "",
113
+ path: entry.Path || "",
111
114
  language: entry.Language || "",
112
115
  streaming: entry.Streaming === "true",
113
- location: entry.Location || ""
116
+ location: entry.Location || (Array.isArray(bank.IncludedMemoryFiles) ? "Memory" : "")
114
117
  })),
115
- events: (bank.Events || []).map(entry => ({
118
+ events: events.map(entry => ({
116
119
  id: String(entry.Id ?? ""),
117
- name: entry.Name || ""
120
+ name: entry.Name || "",
121
+ maxAttenuation: finiteNumber(entry.MaxAttenuation, 0)
118
122
  })),
119
123
  switchGroups: (bank.SwitchGroups || []).map(group => ({
120
124
  id: String(group.Id ?? ""),
@@ -138,15 +142,19 @@ function normalizeBank(bank) {
138
142
  }))
139
143
  };
140
144
  }
145
+ function finiteNumber(value, fallback) {
146
+ const number = Number(value);
147
+ return Number.isFinite(number) ? number : fallback;
148
+ }
141
149
 
142
- /**
143
- * Build id-keyed lookup tables from SoundbanksInfo.
144
- *
145
- * Media ids repeat across language variants of the same bank, so
146
- * `mediaById[id]` is an array of entries; event ids are unique.
147
- *
148
- * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.
149
- * @returns {object} Catalog with banksById, mediaById, eventsById, and eventsByName.
150
+ /**
151
+ * Build id-keyed lookup tables from SoundbanksInfo.
152
+ *
153
+ * Media ids repeat across language variants of the same bank, so
154
+ * `mediaById[id]` is an array of entries; event ids are unique.
155
+ *
156
+ * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.
157
+ * @returns {object} Catalog with banksById, mediaById, eventsById, and eventsByName.
150
158
  */
151
159
  function buildSoundbanksCatalog(input) {
152
160
  const parsed = parseSoundbanksInfo(input);
@@ -189,18 +197,18 @@ function buildSoundbanksCatalog(input) {
189
197
  return catalog;
190
198
  }
191
199
 
192
- /**
193
- * Join a `CjsBnkFormat` inspection result with a SoundbanksInfo catalog.
194
- *
195
- * Annotates the bank's embedded media and HIRC event listing with authoring
196
- * names. Entries with no catalog match keep `null` name fields rather than
197
- * being dropped, so counts stay aligned with the inspected bank. Language
198
- * variants of a bank share one bank id; the inspected BKHD `languageId`
199
- * (an FNV-1 hash of the language name) selects the exact variant.
200
- *
201
- * @param {object} bankInfo `CjsBnkFormat` inspect output.
202
- * @param {object} catalog `buildSoundbanksCatalog` output.
203
- * @returns {object} Bank/media/event annotations for the inspected bank.
200
+ /**
201
+ * Join a `CjsBnkFormat` inspection result with a SoundbanksInfo catalog.
202
+ *
203
+ * Annotates the bank's embedded media and HIRC event listing with authoring
204
+ * names. Entries with no catalog match keep `null` name fields rather than
205
+ * being dropped, so counts stay aligned with the inspected bank. Language
206
+ * variants of a bank share one bank id; the inspected BKHD `languageId`
207
+ * (an FNV-1 hash of the language name) selects the exact variant.
208
+ *
209
+ * @param {object} bankInfo `CjsBnkFormat` inspect output.
210
+ * @param {object} catalog `buildSoundbanksCatalog` output.
211
+ * @returns {object} Bank/media/event annotations for the inspected bank.
204
212
  */
205
213
  function joinSoundbanksInfo(bankInfo, catalog) {
206
214
  const bankId = String(bankInfo.bankId ?? "");
@@ -1 +1 @@
1
- {"version":3,"file":"soundbanksInfo.js","sources":["../../../../../src/formats/bnk/core/soundbanksInfo.js"],"sourcesContent":["/**\n * Readers for Wwise SoundbanksInfo metadata (the `soundbanksinfo.json` file\n * generated next to soundbanks).\n *\n * SoundbanksInfo is the authoring-name authority for soundbank content: it\n * maps media ids to original source paths and lists per-bank events, switch\n * groups, state groups, and game parameters. These helpers normalize that\n * document and join it against `CjsBnkFormat` inspection output; they never\n * touch audio bytes.\n */\n\n/**\n * Compute the Wwise 32-bit id for a name.\n *\n * Wwise derives bank, event, and language ids as the FNV-1 32-bit hash of the\n * lowercased name (verified against EVE build 3421648 bank and language ids).\n *\n * @param {string} name Bank, event, switch, or language name.\n * @returns {number} Unsigned 32-bit Wwise id.\n */\nexport function wwiseIdFromName(name)\n{\n let hash = 2166136261 >>> 0;\n const text = String(name).toLowerCase();\n for (let i = 0; i < text.length; i++)\n {\n hash = Math.imul(hash, 16777619) >>> 0;\n hash = (hash ^ text.charCodeAt(i)) >>> 0;\n }\n return hash;\n}\n\n/** Converts the current BNK format reader value to soundbanks info document. */\nexport function toSoundbanksInfoDocument(input)\n{\n let value = input;\n if (value instanceof ArrayBuffer) value = new Uint8Array(value);\n if (ArrayBuffer.isView(value)) value = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n if (value instanceof Uint8Array) value = utf8String(value);\n if (typeof value === \"string\")\n {\n try\n {\n value = JSON.parse(value);\n }\n catch (error)\n {\n throw new TypeError(`CjsBnkFormat: SoundbanksInfo input is not valid JSON (${error.message})`);\n }\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n {\n throw new TypeError(\"CjsBnkFormat: SoundbanksInfo input must be JSON bytes, text, or an object\");\n }\n const document = value.SoundBanksInfo || value;\n if (!document || typeof document !== \"object\" || !Array.isArray(document.SoundBanks))\n {\n throw new TypeError(\"CjsBnkFormat: input has no SoundBanksInfo.SoundBanks document\");\n }\n return document;\n}\n\n/**\n * Test whether input looks like a Wwise SoundbanksInfo document.\n *\n * @param {Uint8Array|ArrayBuffer|DataView|string|object} input Candidate document.\n * @returns {boolean} True when a SoundBanksInfo bank list is present.\n */\nexport function isSoundbanksInfo(input)\n{\n try\n {\n toSoundbanksInfoDocument(input);\n return true;\n }\n catch\n {\n return false;\n }\n}\n\n/**\n * Parse SoundbanksInfo into a normalized camelCase summary.\n *\n * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.\n * @returns {object} Normalized document summary with per-bank details.\n */\nexport function parseSoundbanksInfo(input)\n{\n const document = toSoundbanksInfoDocument(input);\n const banks = document.SoundBanks.map(normalizeBank);\n const summary = {\n platform: document.Platform || \"\",\n basePlatform: document.BasePlatform || \"\",\n schemaVersion: document.SchemaVersion || \"\",\n soundBankVersion: document.SoundBankVersion || \"\",\n bankCount: banks.length,\n mediaCount: 0,\n streamingMediaCount: 0,\n eventCount: 0,\n languages: [],\n banks\n };\n\n const languages = new Set();\n for (const bank of banks)\n {\n summary.mediaCount += bank.media.length;\n summary.streamingMediaCount += bank.media.filter((entry) => entry.streaming).length;\n summary.eventCount += bank.events.length;\n if (bank.language) languages.add(bank.language);\n }\n summary.languages = [ ...languages ].sort();\n return summary;\n}\n\nfunction normalizeBank(bank)\n{\n return {\n id: String(bank.Id ?? \"\"),\n type: bank.Type || \"\",\n language: bank.Language || \"\",\n shortName: bank.ShortName || \"\",\n path: bank.Path || \"\",\n media: (bank.Media || []).map((entry) => ({\n id: String(entry.Id ?? \"\"),\n shortName: entry.ShortName || \"\",\n cachePath: entry.CachePath || \"\",\n language: entry.Language || \"\",\n streaming: entry.Streaming === \"true\",\n location: entry.Location || \"\"\n })),\n events: (bank.Events || []).map((entry) => ({\n id: String(entry.Id ?? \"\"),\n name: entry.Name || \"\"\n })),\n switchGroups: (bank.SwitchGroups || []).map((group) => ({\n id: String(group.Id ?? \"\"),\n name: group.Name || \"\",\n switches: (group.Switches || []).map((entry) => ({\n id: String(entry.Id ?? \"\"),\n name: entry.Name || \"\"\n }))\n })),\n stateGroups: (bank.StateGroups || []).map((group) => ({\n id: String(group.Id ?? \"\"),\n name: group.Name || \"\",\n states: (group.States || []).map((entry) => ({\n id: String(entry.Id ?? \"\"),\n name: entry.Name || \"\"\n }))\n })),\n gameParameters: (bank.GameParameters || []).map((entry) => ({\n id: String(entry.Id ?? \"\"),\n name: entry.Name || \"\"\n }))\n };\n}\n\n/**\n * Build id-keyed lookup tables from SoundbanksInfo.\n *\n * Media ids repeat across language variants of the same bank, so\n * `mediaById[id]` is an array of entries; event ids are unique.\n *\n * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.\n * @returns {object} Catalog with banksById, mediaById, eventsById, and eventsByName.\n */\nexport function buildSoundbanksCatalog(input)\n{\n const parsed = parseSoundbanksInfo(input);\n const catalog = {\n platform: parsed.platform,\n soundBankVersion: parsed.soundBankVersion,\n bankCount: parsed.bankCount,\n mediaCount: parsed.mediaCount,\n eventCount: parsed.eventCount,\n languages: parsed.languages,\n banksById: {},\n bankVariantsById: {},\n mediaById: {},\n eventsById: {},\n eventsByName: {}\n };\n\n for (const bank of parsed.banks)\n {\n if (!catalog.banksById[bank.id]) catalog.banksById[bank.id] = bank;\n if (!catalog.bankVariantsById[bank.id]) catalog.bankVariantsById[bank.id] = [];\n catalog.bankVariantsById[bank.id].push(bank);\n for (const entry of bank.media)\n {\n const reference = {\n ...entry,\n bankId: bank.id,\n bankName: bank.shortName\n };\n if (!catalog.mediaById[entry.id]) catalog.mediaById[entry.id] = [];\n catalog.mediaById[entry.id].push(reference);\n }\n for (const entry of bank.events)\n {\n const reference = {\n ...entry,\n bankId: bank.id,\n bankName: bank.shortName\n };\n catalog.eventsById[entry.id] = reference;\n catalog.eventsByName[entry.name] = reference;\n }\n }\n\n return catalog;\n}\n\n/**\n * Join a `CjsBnkFormat` inspection result with a SoundbanksInfo catalog.\n *\n * Annotates the bank's embedded media and HIRC event listing with authoring\n * names. Entries with no catalog match keep `null` name fields rather than\n * being dropped, so counts stay aligned with the inspected bank. Language\n * variants of a bank share one bank id; the inspected BKHD `languageId`\n * (an FNV-1 hash of the language name) selects the exact variant.\n *\n * @param {object} bankInfo `CjsBnkFormat` inspect output.\n * @param {object} catalog `buildSoundbanksCatalog` output.\n * @returns {object} Bank/media/event annotations for the inspected bank.\n */\nexport function joinSoundbanksInfo(bankInfo, catalog)\n{\n const bankId = String(bankInfo.bankId ?? \"\");\n const variants = catalog.bankVariantsById[bankId] || [];\n const bank = variants.find((variant) => wwiseIdFromName(variant.language) === bankInfo.languageId) ||\n catalog.banksById[bankId] ||\n null;\n const bankLanguage = bank ? bank.language : \"\";\n\n const media = (bankInfo.media || []).map((entry) =>\n {\n const references = catalog.mediaById[String(entry.id)] || [];\n const match = references.find((reference) => reference.bankId === bankId && reference.language === bankLanguage) ||\n references.find((reference) => reference.bankId === bankId) ||\n references[0] ||\n null;\n return {\n id: entry.id,\n length: entry.length,\n available: entry.available,\n shortName: match ? match.shortName : null,\n cachePath: match ? match.cachePath : null,\n language: match ? match.language : null,\n streaming: match ? match.streaming : null\n };\n });\n\n const events = (bankInfo.hirc || [])\n .filter((entry) => entry.typeName === \"event\")\n .map((entry) =>\n {\n const match = catalog.eventsById[String(entry.id)] || null;\n return {\n id: entry.id,\n name: match ? match.name : null,\n bankName: match ? match.bankName : null\n };\n });\n\n return {\n bankId,\n bank,\n media,\n namedMediaCount: media.filter((entry) => entry.shortName !== null).length,\n events,\n namedEventCount: events.filter((entry) => entry.name !== null).length\n };\n}\n\nfunction utf8String(bytes)\n{\n if (typeof TextDecoder !== \"undefined\") return new TextDecoder(\"utf-8\").decode(bytes);\n let value = \"\";\n for (let i = 0; i < bytes.length; i++) value += String.fromCharCode(bytes[i]);\n return value;\n}\n"],"names":["wwiseIdFromName","name","hash","text","String","toLowerCase","i","length","Math","imul","charCodeAt","toSoundbanksInfoDocument","input","value","ArrayBuffer","Uint8Array","isView","buffer","byteOffset","byteLength","utf8String","JSON","parse","error","TypeError","message","Array","isArray","document","SoundBanksInfo","SoundBanks","isSoundbanksInfo","parseSoundbanksInfo","banks","map","normalizeBank","summary","platform","Platform","basePlatform","BasePlatform","schemaVersion","SchemaVersion","soundBankVersion","SoundBankVersion","bankCount","mediaCount","streamingMediaCount","eventCount","languages","Set","bank","media","filter","entry","streaming","events","language","add","sort","id","Id","type","Type","Language","shortName","ShortName","path","Path","Media","cachePath","CachePath","Streaming","location","Location","Events","Name","switchGroups","SwitchGroups","group","switches","Switches","stateGroups","StateGroups","states","States","gameParameters","GameParameters","buildSoundbanksCatalog","parsed","catalog","banksById","bankVariantsById","mediaById","eventsById","eventsByName","push","reference","bankId","bankName","joinSoundbanksInfo","bankInfo","variants","find","variant","languageId","bankLanguage","references","match","available","hirc","typeName","namedMediaCount","namedEventCount","bytes","TextDecoder","decode","fromCharCode"],"mappings":"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"}
1
+ {"version":3,"file":"soundbanksInfo.js","sources":["../../../../../src/formats/bnk/core/soundbanksInfo.js"],"sourcesContent":["/**\r\n * Readers for Wwise SoundbanksInfo metadata (the `soundbanksinfo.json` file\r\n * generated next to soundbanks).\r\n *\r\n * SoundbanksInfo is the authoring-name authority for soundbank content: it\r\n * maps media ids to original source paths and lists per-bank events, switch\r\n * groups, state groups, and game parameters. These helpers normalize that\r\n * document and join it against `CjsBnkFormat` inspection output; they never\r\n * touch audio bytes.\r\n */\r\n\r\n/**\r\n * Compute the Wwise 32-bit id for a name.\r\n *\r\n * Wwise derives bank, event, and language ids as the FNV-1 32-bit hash of the\r\n * lowercased name (verified against EVE build 3421648 bank and language ids).\r\n *\r\n * @param {string} name Bank, event, switch, or language name.\r\n * @returns {number} Unsigned 32-bit Wwise id.\r\n */\r\nexport function wwiseIdFromName(name)\r\n{\r\n let hash = 2166136261 >>> 0;\r\n const text = String(name).toLowerCase();\r\n for (let i = 0; i < text.length; i++)\r\n {\r\n hash = Math.imul(hash, 16777619) >>> 0;\r\n hash = (hash ^ text.charCodeAt(i)) >>> 0;\r\n }\r\n return hash;\r\n}\r\n\r\n/** Converts the current BNK format reader value to soundbanks info document. */\r\nexport function toSoundbanksInfoDocument(input)\r\n{\r\n let value = input;\r\n if (value instanceof ArrayBuffer) value = new Uint8Array(value);\r\n if (ArrayBuffer.isView(value)) value = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\r\n if (value instanceof Uint8Array) value = utf8String(value);\r\n if (typeof value === \"string\")\r\n {\r\n try\r\n {\r\n value = JSON.parse(value);\r\n }\r\n catch (error)\r\n {\r\n throw new TypeError(`CjsBnkFormat: SoundbanksInfo input is not valid JSON (${error.message})`);\r\n }\r\n }\r\n if (!value || typeof value !== \"object\" || Array.isArray(value))\r\n {\r\n throw new TypeError(\"CjsBnkFormat: SoundbanksInfo input must be JSON bytes, text, or an object\");\r\n }\r\n const document = value.SoundBanksInfo || value;\r\n if (!document || typeof document !== \"object\" || !Array.isArray(document.SoundBanks))\r\n {\r\n throw new TypeError(\"CjsBnkFormat: input has no SoundBanksInfo.SoundBanks document\");\r\n }\r\n return document;\r\n}\r\n\r\n/**\r\n * Test whether input looks like a Wwise SoundbanksInfo document.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|DataView|string|object} input Candidate document.\r\n * @returns {boolean} True when a SoundBanksInfo bank list is present.\r\n */\r\nexport function isSoundbanksInfo(input)\r\n{\r\n try\r\n {\r\n toSoundbanksInfoDocument(input);\r\n return true;\r\n }\r\n catch\r\n {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Parse SoundbanksInfo into a normalized camelCase summary.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.\r\n * @returns {object} Normalized document summary with per-bank details.\r\n */\r\nexport function parseSoundbanksInfo(input)\r\n{\r\n const document = toSoundbanksInfoDocument(input);\r\n const banks = document.SoundBanks.map(normalizeBank);\r\n const summary = {\r\n platform: document.Platform || \"\",\r\n basePlatform: document.BasePlatform || \"\",\r\n schemaVersion: document.SchemaVersion || \"\",\r\n soundBankVersion: document.SoundBankVersion || \"\",\r\n bankCount: banks.length,\r\n mediaCount: 0,\r\n streamingMediaCount: 0,\r\n eventCount: 0,\r\n languages: [],\r\n banks\r\n };\r\n\r\n const languages = new Set();\r\n for (const bank of banks)\r\n {\r\n summary.mediaCount += bank.media.length;\r\n summary.streamingMediaCount += bank.media.filter((entry) => entry.streaming).length;\r\n summary.eventCount += bank.events.length;\r\n if (bank.language) languages.add(bank.language);\r\n }\r\n summary.languages = [ ...languages ].sort();\r\n return summary;\r\n}\r\n\r\nfunction normalizeBank(bank)\r\n{\r\n const media = Array.isArray(bank.Media)\r\n ? bank.Media\r\n : bank.IncludedMemoryFiles || [];\r\n const events = Array.isArray(bank.Events)\r\n ? bank.Events\r\n : bank.IncludedEvents || [];\r\n\r\n return {\r\n id: String(bank.Id ?? \"\"),\r\n type: bank.Type || \"\",\r\n language: bank.Language || \"\",\r\n shortName: bank.ShortName || \"\",\r\n path: bank.Path || \"\",\r\n media: media.map((entry) => ({\r\n id: String(entry.Id ?? \"\"),\r\n shortName: entry.ShortName || \"\",\r\n cachePath: entry.CachePath || \"\",\r\n path: entry.Path || \"\",\r\n language: entry.Language || \"\",\r\n streaming: entry.Streaming === \"true\",\r\n location: entry.Location\r\n || (Array.isArray(bank.IncludedMemoryFiles)\r\n ? \"Memory\"\r\n : \"\")\r\n })),\r\n events: events.map((entry) => ({\r\n id: String(entry.Id ?? \"\"),\r\n name: entry.Name || \"\",\r\n maxAttenuation: finiteNumber(entry.MaxAttenuation, 0)\r\n })),\r\n switchGroups: (bank.SwitchGroups || []).map((group) => ({\r\n id: String(group.Id ?? \"\"),\r\n name: group.Name || \"\",\r\n switches: (group.Switches || []).map((entry) => ({\r\n id: String(entry.Id ?? \"\"),\r\n name: entry.Name || \"\"\r\n }))\r\n })),\r\n stateGroups: (bank.StateGroups || []).map((group) => ({\r\n id: String(group.Id ?? \"\"),\r\n name: group.Name || \"\",\r\n states: (group.States || []).map((entry) => ({\r\n id: String(entry.Id ?? \"\"),\r\n name: entry.Name || \"\"\r\n }))\r\n })),\r\n gameParameters: (bank.GameParameters || []).map((entry) => ({\r\n id: String(entry.Id ?? \"\"),\r\n name: entry.Name || \"\"\r\n }))\r\n };\r\n}\r\n\r\nfunction finiteNumber(value, fallback)\r\n{\r\n const number = Number(value);\r\n\r\n return Number.isFinite(number) ? number : fallback;\r\n}\r\n\r\n/**\r\n * Build id-keyed lookup tables from SoundbanksInfo.\r\n *\r\n * Media ids repeat across language variants of the same bank, so\r\n * `mediaById[id]` is an array of entries; event ids are unique.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|DataView|string|object} input SoundbanksInfo JSON bytes, text, or object.\r\n * @returns {object} Catalog with banksById, mediaById, eventsById, and eventsByName.\r\n */\r\nexport function buildSoundbanksCatalog(input)\r\n{\r\n const parsed = parseSoundbanksInfo(input);\r\n const catalog = {\r\n platform: parsed.platform,\r\n soundBankVersion: parsed.soundBankVersion,\r\n bankCount: parsed.bankCount,\r\n mediaCount: parsed.mediaCount,\r\n eventCount: parsed.eventCount,\r\n languages: parsed.languages,\r\n banksById: {},\r\n bankVariantsById: {},\r\n mediaById: {},\r\n eventsById: {},\r\n eventsByName: {}\r\n };\r\n\r\n for (const bank of parsed.banks)\r\n {\r\n if (!catalog.banksById[bank.id]) catalog.banksById[bank.id] = bank;\r\n if (!catalog.bankVariantsById[bank.id]) catalog.bankVariantsById[bank.id] = [];\r\n catalog.bankVariantsById[bank.id].push(bank);\r\n for (const entry of bank.media)\r\n {\r\n const reference = {\r\n ...entry,\r\n bankId: bank.id,\r\n bankName: bank.shortName\r\n };\r\n if (!catalog.mediaById[entry.id]) catalog.mediaById[entry.id] = [];\r\n catalog.mediaById[entry.id].push(reference);\r\n }\r\n for (const entry of bank.events)\r\n {\r\n const reference = {\r\n ...entry,\r\n bankId: bank.id,\r\n bankName: bank.shortName\r\n };\r\n catalog.eventsById[entry.id] = reference;\r\n catalog.eventsByName[entry.name] = reference;\r\n }\r\n }\r\n\r\n return catalog;\r\n}\r\n\r\n/**\r\n * Join a `CjsBnkFormat` inspection result with a SoundbanksInfo catalog.\r\n *\r\n * Annotates the bank's embedded media and HIRC event listing with authoring\r\n * names. Entries with no catalog match keep `null` name fields rather than\r\n * being dropped, so counts stay aligned with the inspected bank. Language\r\n * variants of a bank share one bank id; the inspected BKHD `languageId`\r\n * (an FNV-1 hash of the language name) selects the exact variant.\r\n *\r\n * @param {object} bankInfo `CjsBnkFormat` inspect output.\r\n * @param {object} catalog `buildSoundbanksCatalog` output.\r\n * @returns {object} Bank/media/event annotations for the inspected bank.\r\n */\r\nexport function joinSoundbanksInfo(bankInfo, catalog)\r\n{\r\n const bankId = String(bankInfo.bankId ?? \"\");\r\n const variants = catalog.bankVariantsById[bankId] || [];\r\n const bank = variants.find((variant) => wwiseIdFromName(variant.language) === bankInfo.languageId) ||\r\n catalog.banksById[bankId] ||\r\n null;\r\n const bankLanguage = bank ? bank.language : \"\";\r\n\r\n const media = (bankInfo.media || []).map((entry) =>\r\n {\r\n const references = catalog.mediaById[String(entry.id)] || [];\r\n const match = references.find((reference) => reference.bankId === bankId && reference.language === bankLanguage) ||\r\n references.find((reference) => reference.bankId === bankId) ||\r\n references[0] ||\r\n null;\r\n return {\r\n id: entry.id,\r\n length: entry.length,\r\n available: entry.available,\r\n shortName: match ? match.shortName : null,\r\n cachePath: match ? match.cachePath : null,\r\n language: match ? match.language : null,\r\n streaming: match ? match.streaming : null\r\n };\r\n });\r\n\r\n const events = (bankInfo.hirc || [])\r\n .filter((entry) => entry.typeName === \"event\")\r\n .map((entry) =>\r\n {\r\n const match = catalog.eventsById[String(entry.id)] || null;\r\n return {\r\n id: entry.id,\r\n name: match ? match.name : null,\r\n bankName: match ? match.bankName : null\r\n };\r\n });\r\n\r\n return {\r\n bankId,\r\n bank,\r\n media,\r\n namedMediaCount: media.filter((entry) => entry.shortName !== null).length,\r\n events,\r\n namedEventCount: events.filter((entry) => entry.name !== null).length\r\n };\r\n}\r\n\r\nfunction utf8String(bytes)\r\n{\r\n if (typeof TextDecoder !== \"undefined\") return new TextDecoder(\"utf-8\").decode(bytes);\r\n let value = \"\";\r\n for (let i = 0; i < bytes.length; i++) value += String.fromCharCode(bytes[i]);\r\n return value;\r\n}\r\n"],"names":["wwiseIdFromName","name","hash","text","String","toLowerCase","i","length","Math","imul","charCodeAt","toSoundbanksInfoDocument","input","value","ArrayBuffer","Uint8Array","isView","buffer","byteOffset","byteLength","utf8String","JSON","parse","error","TypeError","message","Array","isArray","document","SoundBanksInfo","SoundBanks","isSoundbanksInfo","parseSoundbanksInfo","banks","map","normalizeBank","summary","platform","Platform","basePlatform","BasePlatform","schemaVersion","SchemaVersion","soundBankVersion","SoundBankVersion","bankCount","mediaCount","streamingMediaCount","eventCount","languages","Set","bank","media","filter","entry","streaming","events","language","add","sort","Media","IncludedMemoryFiles","Events","IncludedEvents","id","Id","type","Type","Language","shortName","ShortName","path","Path","cachePath","CachePath","Streaming","location","Location","Name","maxAttenuation","finiteNumber","MaxAttenuation","switchGroups","SwitchGroups","group","switches","Switches","stateGroups","StateGroups","states","States","gameParameters","GameParameters","fallback","number","Number","isFinite","buildSoundbanksCatalog","parsed","catalog","banksById","bankVariantsById","mediaById","eventsById","eventsByName","push","reference","bankId","bankName","joinSoundbanksInfo","bankInfo","variants","find","variant","languageId","bankLanguage","references","match","available","hirc","typeName","namedMediaCount","namedEventCount","bytes","TextDecoder","decode","fromCharCode"],"mappings":"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"}