@carbonenginejs/runtime-resource 0.8.0 → 0.9.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.
- package/LICENSE +21 -21
- package/NOTICE +29 -29
- package/README.md +67 -548
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3005 -3005
- package/dist/CjsResManQueue.js +214 -214
- package/dist/CjsResource.js +566 -566
- package/dist/CjsResourceSource.js +59 -59
- package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -153
- package/dist/format/CjsBlueReader.js +269 -269
- package/dist/format/CjsFormat.js +192 -192
- package/dist/format/CjsReader.js +18 -18
- package/dist/format/CjsResourceProbe.js +277 -277
- package/dist/format/payloadContract.js +173 -173
- package/dist/formats/black/CjsBlackFormat.js +278 -278
- package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -153
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -382
- package/dist/formats/black/core/CjsBlackReader.js +639 -639
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -433
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +182 -182
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +125 -125
- package/dist/formats/bnk/core/graph.js +140 -140
- package/dist/formats/bnk/core/helpers.js +409 -409
- package/dist/formats/bnk/core/musicNodes.js +489 -489
- package/dist/formats/bnk/core/soundbanksInfo.js +246 -246
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +118 -118
- package/dist/formats/cmf/core/buffers.js +233 -233
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +287 -287
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +364 -364
- package/dist/formats/cmf/core/shared.js +268 -268
- package/dist/formats/cmf/core/writer.js +517 -517
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +193 -193
- package/dist/formats/dds/core/bc6h.js +288 -288
- package/dist/formats/dds/core/bc7.js +251 -251
- package/dist/formats/dds/core/helpers.js +815 -815
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3901 -3901
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +87 -87
- package/dist/formats/flac/core/helpers.js +295 -295
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +87 -87
- package/dist/formats/gif/core/helpers.js +360 -360
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +290 -290
- package/dist/formats/gltf/core/helpers.js +292 -292
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +666 -666
- package/dist/formats/gltf/core/targets.js +163 -163
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +46 -0
- package/dist/formats/gr2/CjsGr2Format.js.map +1 -0
- package/dist/formats/gr2/core/CjsFormatGr2.js +273 -0
- package/dist/formats/gr2/core/CjsFormatGr2.js.map +1 -0
- package/dist/formats/gr2/core/bitknit2.js +280 -0
- package/dist/formats/gr2/core/bitknit2.js.map +1 -0
- package/dist/formats/gr2/core/curves.js +1047 -0
- package/dist/formats/gr2/core/curves.js.map +1 -0
- package/dist/formats/gr2/core/gsf.js +72 -0
- package/dist/formats/gr2/core/gsf.js.map +1 -0
- package/dist/formats/gr2/core/helpers.js +332 -0
- package/dist/formats/gr2/core/helpers.js.map +1 -0
- package/dist/formats/gr2/core/json.js +622 -0
- package/dist/formats/gr2/core/json.js.map +1 -0
- package/dist/formats/gr2/core/oodle1.js +388 -0
- package/dist/formats/gr2/core/oodle1.js.map +1 -0
- package/dist/formats/gr2/core/reader.js +617 -0
- package/dist/formats/gr2/core/reader.js.map +1 -0
- package/dist/formats/gr2/core/tangents.js +48 -0
- package/dist/formats/gr2/core/tangents.js.map +1 -0
- package/dist/formats/gr2/core/targets.js +351 -0
- package/dist/formats/gr2/core/targets.js.map +1 -0
- package/dist/formats/gr2/index.js +3 -0
- package/dist/formats/gr2/index.js.map +1 -0
- package/dist/formats/index.js +30 -23
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/jpeg/CjsJpegFormat.js +206 -206
- package/dist/formats/jpeg/core/helpers.js +350 -350
- package/dist/formats/jpeg/core/jpeg.js +377 -377
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +192 -192
- package/dist/formats/mp3/core/helpers.js +338 -338
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +191 -191
- package/dist/formats/mp4/core/helpers.js +449 -449
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +253 -253
- package/dist/formats/obj/core/helpers.js +573 -573
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +88 -88
- package/dist/formats/ogg/core/helpers.js +387 -387
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +999 -999
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +195 -195
- package/dist/formats/png/core/helpers.js +583 -583
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +261 -261
- package/dist/formats/red/core/CjsRedReader.js +194 -194
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +139 -139
- package/dist/formats/red/core/redGraph.js +68 -68
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +365 -365
- package/dist/formats/stl/core/helpers.js +261 -261
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +629 -629
- package/dist/formats/stl/core/targets.js +163 -163
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +192 -192
- package/dist/formats/tga/core/helpers.js +446 -446
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +192 -192
- package/dist/formats/wav/core/helpers.js +328 -328
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +191 -191
- package/dist/formats/webm/core/helpers.js +537 -537
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +86 -86
- package/dist/formats/webp/core/helpers.js +214 -214
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +241 -241
- package/dist/formats/wem/core/bitStream.js +259 -259
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +417 -417
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +83 -83
- package/dist/formats/yaml/core/CjsYamlReader.js +305 -305
- package/dist/formats/yaml/core/helpers.js +160 -160
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +49 -48
- package/dist/index.js.map +1 -1
- package/dist/resourcePath.js +18 -18
- package/dist/resourceStates.js +9 -9
- package/dist/resources/AudioGeometryResData.js +47 -47
- package/dist/resources/GStateBindingCallbackData.js +31 -31
- package/dist/resources/MeshDecalData.js +37 -37
- package/dist/resources/MeshDecalLodData.js +34 -34
- package/dist/resources/Tr2EffectRes.js +71 -71
- package/dist/resources/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resources/Tr2GrannyStateRes.js +44 -44
- package/dist/resources/Tr2ImageRes.js +114 -114
- package/dist/resources/Tr2LightProfileRes.js +40 -40
- package/dist/resources/Tr2MaterialArea.js +34 -34
- package/dist/resources/Tr2MaterialMesh.js +31 -31
- package/dist/resources/Tr2MaterialRes.js +34 -34
- package/dist/resources/Tr2ShaderPermutation.js +43 -43
- package/dist/resources/Tr2TextureLodManager.js +80 -80
- package/dist/resources/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resources/Tr2TexturePackChannel.js +37 -37
- package/dist/resources/Tr2TexturePipeline.js +52 -52
- package/dist/resources/Tr2TexturePipelineParams.js +34 -34
- package/dist/resources/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js +22 -0
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resources/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resources/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resources/TriGeometryRes.js +239 -239
- package/dist/resources/TriGeometryResAreaData.js +59 -59
- package/dist/resources/TriGeometryResJointData.js +38 -38
- package/dist/resources/TriGeometryResLodData.js +88 -88
- package/dist/resources/TriGeometryResMeshData.js +63 -63
- package/dist/resources/TriGeometryResSkeletonData.js +34 -34
- package/dist/resources/TriGrannyRes.js +43 -43
- package/dist/resources/TriJointBinding.js +38 -38
- package/dist/resources/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resources/TriRtGeometryConstants.js +88 -88
- package/dist/resources/TriTextureRes.js +304 -304
- package/dist/resources/enums.js +18 -18
- package/dist/resources/resourceBoundary.js +47 -47
- package/dist/resources/texturePipelineBehavior.js +308 -308
- package/dist/texture/CjsTextureArrayRes.js +406 -406
- package/dist/texture/CjsTextureParameterProxy.js +133 -133
- package/docs/README.md +69 -0
- package/docs/architecture.md +86 -0
- package/docs/concepts/resource-lifecycle.md +217 -0
- package/docs/formats/README.md +104 -0
- package/{FORMAT-PROVENANCE.md → docs/formats/provenance.md} +173 -155
- package/docs/formats/stl.md +37 -0
- package/docs/formats/wwise.md +44 -0
- package/docs/reference/events.md +92 -0
- package/docs/reference/motherlode-cache.md +244 -0
- package/docs/reference/queues.md +102 -0
- package/docs/reference/reload.md +107 -0
- package/docs/reference/texture-arrays.md +113 -0
- package/docs/reference/texture-pipeline.md +53 -0
- package/docs/roadmap.md +104 -0
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +20 -20
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -0
- package/format-notices/gr2/NOTICE +60 -0
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -0
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +52 -51
- package/resource-lifecycle.md +0 -679
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Format subpaths
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource/formats`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Maps every non-shader format subpath and records cross-format output conventions.
|
|
7
|
+
|
|
8
|
+
## Import rule
|
|
9
|
+
|
|
10
|
+
Concrete formats are never imported or registered by the package root. Each
|
|
11
|
+
format is an explicit tree-shakeable subpath, registered by the caller:
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
import { CjsResMan } from "@carbonenginejs/runtime-resource";
|
|
15
|
+
import { CjsMp4Format } from "@carbonenginejs/runtime-resource/formats/mp4";
|
|
16
|
+
|
|
17
|
+
const resMan = new CjsResMan().Register({
|
|
18
|
+
source,
|
|
19
|
+
formats: [ CjsMp4Format ]
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const resource = resMan.GetResource("res:/video/intro.mp4");
|
|
23
|
+
const video = await resource.Ready();
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Formats return plain payload objects. Semantic resource classes apply them
|
|
27
|
+
through `SetPayload()`, validate their own required fields, and throw
|
|
28
|
+
`CJS_RESOURCE_PAYLOAD_INVALID` before replacing a previously valid payload.
|
|
29
|
+
`GetPayload()`, `HasPayload()`, and `ReleasePayload()` manage transient CPU
|
|
30
|
+
retention without introducing a parallel DTO class hierarchy.
|
|
31
|
+
|
|
32
|
+
## Format map
|
|
33
|
+
|
|
34
|
+
| Format | Class | Import |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| Black (`.black`) | `CjsBlackFormat` | `@carbonenginejs/runtime-resource/formats/black` |
|
|
37
|
+
| Wwise soundbank (`.bnk`) | `CjsBnkFormat` | `@carbonenginejs/runtime-resource/formats/bnk` |
|
|
38
|
+
| CMF (`.cmf`) | `CjsCmfFormat` | `@carbonenginejs/runtime-resource/formats/cmf` |
|
|
39
|
+
| DDS (`.dds`) | `CjsDdsFormat` | `@carbonenginejs/runtime-resource/formats/dds` |
|
|
40
|
+
| FBX (`.fbx`) | `CjsFbxFormat` | `@carbonenginejs/runtime-resource/formats/fbx` |
|
|
41
|
+
| FLAC (`.flac`) | `CjsFlacFormat` | `@carbonenginejs/runtime-resource/formats/flac` |
|
|
42
|
+
| GIF (`.gif`) | `CjsGifFormat` | `@carbonenginejs/runtime-resource/formats/gif` |
|
|
43
|
+
| glTF (`.gltf`/`.glb`) | `CjsGltfFormat` | `@carbonenginejs/runtime-resource/formats/gltf` |
|
|
44
|
+
| Granny GR2/GSF (`.gr2`/`.gsf`) | `CjsGr2Format` | `@carbonenginejs/runtime-resource/formats/gr2` |
|
|
45
|
+
| JPEG (`.jpg`/`.jpeg`) | `CjsJpegFormat` | `@carbonenginejs/runtime-resource/formats/jpeg` |
|
|
46
|
+
| MP3 (`.mp3`) | `CjsMp3Format` | `@carbonenginejs/runtime-resource/formats/mp3` |
|
|
47
|
+
| MP4 (`.mp4`) | `CjsMp4Format` | `@carbonenginejs/runtime-resource/formats/mp4` |
|
|
48
|
+
| OBJ (`.obj`) | `CjsObjFormat` | `@carbonenginejs/runtime-resource/formats/obj` |
|
|
49
|
+
| Ogg (`.ogg`) | `CjsOggFormat` | `@carbonenginejs/runtime-resource/formats/ogg` |
|
|
50
|
+
| PNG (`.png`) | `CjsPngFormat` | `@carbonenginejs/runtime-resource/formats/png` |
|
|
51
|
+
| Red (`.red`) | `CjsRedFormat` | `@carbonenginejs/runtime-resource/formats/red` |
|
|
52
|
+
| STL (`.stl`) | `CjsStlFormat` | `@carbonenginejs/runtime-resource/formats/stl` |
|
|
53
|
+
| TGA (`.tga`) | `CjsTgaFormat` | `@carbonenginejs/runtime-resource/formats/tga` |
|
|
54
|
+
| WAV (`.wav`) | `CjsWavFormat` | `@carbonenginejs/runtime-resource/formats/wav` |
|
|
55
|
+
| WebM (`.webm`) | `CjsWebmFormat` | `@carbonenginejs/runtime-resource/formats/webm` |
|
|
56
|
+
| WebP (`.webp`) | `CjsWebpFormat` | `@carbonenginejs/runtime-resource/formats/webp` |
|
|
57
|
+
| Wwise media (`.wem`) | `CjsWemFormat` | `@carbonenginejs/runtime-resource/formats/wem` |
|
|
58
|
+
| YAML (`.yaml`/`.yml`) | `CjsYamlFormat` | `@carbonenginejs/runtime-resource/formats/yaml` |
|
|
59
|
+
|
|
60
|
+
Detailed pages: [Wwise soundbanks and media](wwise.md),
|
|
61
|
+
[STL export](stl.md). Ownership history, retained snapshots, and donor
|
|
62
|
+
licensing are recorded in [provenance.md](provenance.md).
|
|
63
|
+
|
|
64
|
+
## Granny GR2/GSF
|
|
65
|
+
|
|
66
|
+
`CjsGr2Format` reads `.gr2` geometry/skeleton/animation graphs and `.gsf`
|
|
67
|
+
(GState) profiles with no native tooling: section decompression (None,
|
|
68
|
+
Oodle1, and the clean-room BitKnit2 decoder), reflected type-tree walking,
|
|
69
|
+
GR2 JSON emission, optional curve decompression, CCP packed tangent-frame
|
|
70
|
+
unpacking, and caller-class hydration (`emit: "gr2"`/`"cmf"` with a
|
|
71
|
+
`classes` map). It was migrated from `@carbonenginejs/format-gr2` after that
|
|
72
|
+
package's 2026-07-24 MIT relicense; the frozen donor repository documents
|
|
73
|
+
the reader API and JSON graph in detail, and this copy preserves its
|
|
74
|
+
behavior and test surface.
|
|
75
|
+
|
|
76
|
+
## Red output markers
|
|
77
|
+
|
|
78
|
+
Red payload output reserves configurable type, ID, reference, and sequence
|
|
79
|
+
values markers (`_type`, `_id`, `_reference`, and `_values` by default).
|
|
80
|
+
Repeated or cyclic sequences use an ID-bearing values envelope; unique
|
|
81
|
+
sequences remain arrays. Authored fields may not collide with active markers,
|
|
82
|
+
so remap the marker options when those names are real data. Disabling the
|
|
83
|
+
reference marker preserves actual JavaScript identity; cyclic output in that
|
|
84
|
+
mode is intentionally not JSON-serializable.
|
|
85
|
+
|
|
86
|
+
## DDS decoded fallback
|
|
87
|
+
|
|
88
|
+
Decoded DDS fallback currently has a narrower contract than native DDS
|
|
89
|
+
texture output. `emit: "rgba"` returns one canonical 2D surface decoded from
|
|
90
|
+
the first DDS subresource; it does not preserve stored mip levels, cube
|
|
91
|
+
faces, array layers, or volume slices. Consumers may use it for ordinary 2D
|
|
92
|
+
fallback when the engine owns any required mip generation, but must not infer
|
|
93
|
+
decoded multi-subresource support from a successful RGBA probe. A future
|
|
94
|
+
richer decoded-texture contract must be introduced explicitly rather than
|
|
95
|
+
overloading the current RGBA fields.
|
|
96
|
+
|
|
97
|
+
The software path includes BC1-BC5 and BC7 as RGBA8, plus signed and unsigned
|
|
98
|
+
BC6H as linear `Float32Array` RGBA without clamping HDR values. These block
|
|
99
|
+
decoders are implemented in-project with no codec package.
|
|
100
|
+
|
|
101
|
+
## Related documentation
|
|
102
|
+
|
|
103
|
+
- [Queues, publication, and registration](../reference/queues.md)
|
|
104
|
+
- [Format ownership and fork provenance](provenance.md)
|
|
@@ -1,155 +1,173 @@
|
|
|
1
|
-
# Format ownership and fork provenance
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
| `format-
|
|
19
|
-
| `format-
|
|
20
|
-
| `format-
|
|
21
|
-
| `format-
|
|
22
|
-
| `format-
|
|
23
|
-
| `format-
|
|
24
|
-
| `format-
|
|
25
|
-
| `format-
|
|
26
|
-
| `format-
|
|
27
|
-
| `format-
|
|
28
|
-
| `format-
|
|
29
|
-
| `format-
|
|
30
|
-
| `format-
|
|
31
|
-
| `format-
|
|
32
|
-
| `format-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
`
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
`
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
`
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
1
|
+
# Format ownership and fork provenance
|
|
2
|
+
|
|
3
|
+
Status: Stable
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource/formats`
|
|
5
|
+
Audience: Users, integrators, and maintainers
|
|
6
|
+
Summary: Records where each format implementation came from, retained snapshots and digests, and what was deliberately not copied.
|
|
7
|
+
|
|
8
|
+
On 2026-07-13, the non-shader runtime format implementations below were copied
|
|
9
|
+
once into `runtime-resource`. Their standalone repositories remain frozen with
|
|
10
|
+
their existing APIs and names; they are not upstreams for the runtime copies.
|
|
11
|
+
|
|
12
|
+
Copied paths were `src/` and the behavioral `test/` corpus. Package publishing
|
|
13
|
+
scripts and CLIs were not copied. Exact donor license and notice files are kept
|
|
14
|
+
under `format-notices/<format>/`.
|
|
15
|
+
|
|
16
|
+
| Legacy package | Source revision/state | Runtime class | Runtime import |
|
|
17
|
+
|---|---|---|---|
|
|
18
|
+
| `format-black` | `9fcaaff9e5f28c90b628d8a10b7c79aff7913a90` | `CjsBlackFormat` | `@carbonenginejs/runtime-resource/formats/black` |
|
|
19
|
+
| `format-cmf` | unborn working-tree snapshot | `CjsCmfFormat` | `@carbonenginejs/runtime-resource/formats/cmf` |
|
|
20
|
+
| `format-dds` | `66fa149cd826e1114ad0be84479f89dee753ed76` | `CjsDdsFormat` | `@carbonenginejs/runtime-resource/formats/dds` |
|
|
21
|
+
| `format-fbx` | `8d0fcc2fe44c8096b35e360a903bff30b49eb592` | `CjsFbxFormat` | `@carbonenginejs/runtime-resource/formats/fbx` |
|
|
22
|
+
| `format-flac` | unborn working-tree snapshot | `CjsFlacFormat` | `@carbonenginejs/runtime-resource/formats/flac` |
|
|
23
|
+
| `format-gif` | `5d831c5c0533a9579682f776274574289a520899` | `CjsGifFormat` | `@carbonenginejs/runtime-resource/formats/gif` |
|
|
24
|
+
| `format-gltf` | `d0dadf920828bceec987c2a5fa1f161f81db28aa` | `CjsGltfFormat` | `@carbonenginejs/runtime-resource/formats/gltf` |
|
|
25
|
+
| `format-jpeg` | `bed2253ea979bba27812420fa897987d82a91793` | `CjsJpegFormat` | `@carbonenginejs/runtime-resource/formats/jpeg` |
|
|
26
|
+
| `format-mp3` | unborn working-tree snapshot | `CjsMp3Format` | `@carbonenginejs/runtime-resource/formats/mp3` |
|
|
27
|
+
| `format-mp4` | `cffc5a57b115a99ed9e0947a6b9d3390ffc3581c` | `CjsMp4Format` | `@carbonenginejs/runtime-resource/formats/mp4` |
|
|
28
|
+
| `format-obj` | `e5d3f9a1520c7855bd5b6edc1e2304a7b4e18176` | `CjsObjFormat` | `@carbonenginejs/runtime-resource/formats/obj` |
|
|
29
|
+
| `format-ogg` | unborn working-tree snapshot | `CjsOggFormat` | `@carbonenginejs/runtime-resource/formats/ogg` |
|
|
30
|
+
| `format-png` | `04dbb7c0f289043c3c32d9141ec3ef74aeeb1c43` | `CjsPngFormat` | `@carbonenginejs/runtime-resource/formats/png` |
|
|
31
|
+
| `format-red` | `98beab6988111418d6e09827b92d27e08da4c05b` | `CjsRedFormat` | `@carbonenginejs/runtime-resource/formats/red` |
|
|
32
|
+
| `format-stl` | `4858f9a37bf140a3c544fa30a13a6fcce015247b` | `CjsStlFormat` | `@carbonenginejs/runtime-resource/formats/stl` |
|
|
33
|
+
| `format-tga` | `b0f9df263727057537b2279322e8cd088f366179` | `CjsTgaFormat` | `@carbonenginejs/runtime-resource/formats/tga` |
|
|
34
|
+
| `format-wav` | unborn working-tree snapshot | `CjsWavFormat` | `@carbonenginejs/runtime-resource/formats/wav` |
|
|
35
|
+
| `format-webm` | `459203ac293d0d53fff0e43494b7e47d8d4c92bd` | `CjsWebmFormat` | `@carbonenginejs/runtime-resource/formats/webm` |
|
|
36
|
+
| `format-webp` | `19155e9cc7ae05845c23a3c259d3a586569eba40` | `CjsWebpFormat` | `@carbonenginejs/runtime-resource/formats/webp` |
|
|
37
|
+
| `format-yaml` | `3d7e1d1cf9b7a936283d6050efe43a0a9fadb6a4` | `CjsYamlFormat` | `@carbonenginejs/runtime-resource/formats/yaml` |
|
|
38
|
+
|
|
39
|
+
The unborn donors had no commit-addressable `HEAD`; this document deliberately
|
|
40
|
+
records them as working-tree snapshots rather than inventing a revision. Their
|
|
41
|
+
copied runtime files are the deterministic retained snapshot.
|
|
42
|
+
|
|
43
|
+
On 2026-07-24, following `format-gr2`'s MIT relicense (its EUPL-derived
|
|
44
|
+
BitKnit decoder was replaced by a clean-room implementation written from the
|
|
45
|
+
published specification in that package's `docs/formats/bitknit2.md`), the
|
|
46
|
+
GR2/GSF reader joined the runtime copies:
|
|
47
|
+
|
|
48
|
+
| Legacy package | Source revision/state | Runtime class | Runtime import |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| `format-gr2` | `fa64607de7a3a96ed3b1aec5288bf71057642043` (v0.2.0, MIT) | `CjsGr2Format` | `@carbonenginejs/runtime-resource/formats/gr2` |
|
|
51
|
+
|
|
52
|
+
The copied engine keeps its donor class name (`CjsFormatGr2`, re-exported)
|
|
53
|
+
under `formats/gr2/core/`; `CjsGr2Format` is the runtime-authored contract
|
|
54
|
+
wrapper. Donor license and notice files are kept under
|
|
55
|
+
`format-notices/gr2/`.
|
|
56
|
+
|
|
57
|
+
## Black definition snapshot
|
|
58
|
+
|
|
59
|
+
The Black reader uses the package-owned generated definition snapshot at
|
|
60
|
+
`src/formats/black/core/black-schema-v1-2026-07-11.json`. The Red format exposes
|
|
61
|
+
the same catalog for discovery, but its YAML reader currently accepts named
|
|
62
|
+
fields without registry enforcement. The snapshot was copied from
|
|
63
|
+
`format-carbon` revision `d2a3c67cf3d46e8ba78ca19e66558d868178ec24`
|
|
64
|
+
with SHA-256
|
|
65
|
+
`008ECB29E670EFC678B471A6EFF099600A29C2907912FC42B854995904604691`.
|
|
66
|
+
|
|
67
|
+
This retained generated artifact keeps the published readers deterministic and
|
|
68
|
+
browser-safe without a runtime dependency on a sibling checkout or an
|
|
69
|
+
unpublished `format-carbon` export. `format-carbon` remains the build-time
|
|
70
|
+
authority for future schema regeneration; an updated snapshot must record its
|
|
71
|
+
new source revision and digest here.
|
|
72
|
+
|
|
73
|
+
## Native additions
|
|
74
|
+
|
|
75
|
+
Formats below were authored directly in `runtime-resource` and have no legacy
|
|
76
|
+
donor package. Their `format-notices/<format>/` entries record third-party
|
|
77
|
+
format attribution rather than fork provenance.
|
|
78
|
+
|
|
79
|
+
| Format | Runtime class | Runtime import | Notes |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| Wwise soundbank (`.bnk`) | `CjsBnkFormat` | `@carbonenginejs/runtime-resource/formats/bnk` | Original code; chunk layout from public community documentation (ww2ogg, vgmstream, wwiser), no code copied. Also carries the SoundbanksInfo JSON helpers (`parseSoundbanksInfo`, `buildSoundbanksCatalog`, `joinSoundbanksInfo`) and `wwiseIdFromName` (FNV-1 32 of the lowercased name, verified against EVE bank/language ids). HIRC entries additionally decode version-stable typed fields (event action lists, action type/target, sound and music-track source ids), pinned by hexdump against bank generator version 150, and the `wwise` static namespace groups the domain toolkit (SoundbanksInfo helpers, id hash, `wwise.eventMediaFromBanks` event → media resolution over inspected banks — graph interpretation for consumers; never used by the resource lifecycle). |
|
|
82
|
+
| Wwise media (`.wem`) | `CjsWemFormat` | `@carbonenginejs/runtime-resource/formats/wem` | Original code; container/codec-tag behavior from public community documentation (ww2ogg, vgmstream, wwiser), no code copied. Includes a Wwise-Vorbis→Ogg repacker (`emit: "ogg"`), an original reimplementation of the ww2ogg algorithm with inline granule computation (no revorb pass needed), and a PTADPCM/16-bit-PCM decoder (`emit: "pcm"` / `toPcm()`, AudioBuffer-ready float32; PTADPCM algorithm from community documentation, verified against EVE media). |
|
|
83
|
+
|
|
84
|
+
## Post-fork additions inside copied formats
|
|
85
|
+
|
|
86
|
+
- `formats/dds` gained original, dependency-free **BC6H and BC7 CPU decoders**
|
|
87
|
+
in `runtime-resource` 0.8.0 (2026-07-21). BC6H covers all fourteen modes,
|
|
88
|
+
signed and unsigned HDR, transformed endpoints, partition/anchor fixups,
|
|
89
|
+
interpolation, reserved opaque-black modes, and float RGBA output. BC7 covers
|
|
90
|
+
all eight modes,
|
|
91
|
+
two- and three-subset partitions, anchor fixups, P-bits, dual index streams,
|
|
92
|
+
channel rotation, edge blocks, and the reserved transparent mode. Fixed bit
|
|
93
|
+
layouts and tables follow the Khronos Data Format Specification and Microsoft
|
|
94
|
+
BC6H/BC7 documentation. Tests cover every mode and signed/unsigned fixtures;
|
|
95
|
+
BC7 was also checked against randomized valid-mode blocks and both decoders
|
|
96
|
+
were exercised on real EVE textures acquired through `tools-core`.
|
|
97
|
+
- `formats/stl` received a writer hardening pass (2026-07-18) without changing
|
|
98
|
+
its donor origin: binary provenance headers now round-trip the caller's solid
|
|
99
|
+
name, shared triangle indices are validated as in-range safe integers, scaled
|
|
100
|
+
coordinates must remain finite, and binary coordinates must fit float32
|
|
101
|
+
instead of silently becoming infinities. Writer JSDoc and ASCII/binary
|
|
102
|
+
round-trip/error coverage were expanded in the runtime-owned copy.
|
|
103
|
+
- `formats/cmf` gained a **binary CMF v1 writer** (2026-07-15,
|
|
104
|
+
`src/formats/cmf/core/writer.js`, `CjsCmfFormat.write`/`writeAsync` and
|
|
105
|
+
`Write`/`WriteAsync`): original code implementing CarbonEngine's
|
|
106
|
+
`cmf::BuildFile` behavior — tagged self-relative span flattening with leaf
|
|
107
|
+
chunk dedup, BufferView→section remapping in first-encounter order,
|
|
108
|
+
meshoptimizer vertex/index compression (index compression canonicalizes
|
|
109
|
+
triangle rotation, matching the engine's own writer test expectations), and
|
|
110
|
+
the post-crc32 file checksum. Verified by write→read roundtrips against the
|
|
111
|
+
runtime reader; CarbonEngine's `mesh` CMF sources were the behavioral
|
|
112
|
+
reference, no code copied. `writeShared`/`writeSharedAsync` plus
|
|
113
|
+
`core/pack.js` (channel interleaving, index packing, unique buffer-index
|
|
114
|
+
assignment) serialize shared geometry directly, enabling GR2/OBJ/glTF→CMF —
|
|
115
|
+
verified against real EVE `.gr2` models fetched via
|
|
116
|
+
`@carbonenginejs/tool-index` (positions exact, triangles equivalent).
|
|
117
|
+
- `formats/cmf` also gained the **GR2 skeleton/animation converter**
|
|
118
|
+
(2026-07-15, `src/formats/cmf/core/gr2Anim.js`, applied automatically by
|
|
119
|
+
`writeShared`): GR2-shaped skeletons (root list or `models[].skeleton`)
|
|
120
|
+
convert to CMF bones/parents/rest transforms with inverse binds rebuilt
|
|
121
|
+
from the rest hierarchy; decoded Granny curves convert to CMF Step/Linear
|
|
122
|
+
channels — degree ≤ 1 exactly, degree 2 via adaptive de Boor resampling
|
|
123
|
+
with discontinuities snapped to one float32 ULP. Consumes only decoded
|
|
124
|
+
`{knots, controls}` data so the MIT runtime stays independent of the GR2
|
|
125
|
+
package. Validated on EVE ships (cde3_t3, gde3_t3, cfaux1_t1, mfaux1_t1:
|
|
126
|
+
3,377 channels ≤ 8.3e-4 positional / ≤ 0.14° rotational vs the GR2 runtime
|
|
127
|
+
sampler; 9 Granny curve formats) and characters (basicfemale: 132-bone
|
|
128
|
+
skeleton, exact skin weights).
|
|
129
|
+
- `formats/ogg` gained a pure-JS **Ogg Vorbis PCM decoder** (2026-07-15,
|
|
130
|
+
`src/formats/ogg/core/{vorbis.js,imdct.js}`, `emit: "pcm"`/`"audio"`):
|
|
131
|
+
original code implementing the Vorbis I specification (floor 1, residues
|
|
132
|
+
0/1/2, square-polar coupling, FFT-based IMDCT, windowed overlap-add).
|
|
133
|
+
stb_vorbis (public domain) was consulted as a behavioral reference and is
|
|
134
|
+
the source of the spec's floor1 `inverse_db_table` constants; no licensed
|
|
135
|
+
code was copied. Validated bit-comparable to ffmpeg (max diff ~3e-8) and
|
|
136
|
+
vgmstream (±1 int16 LSB) across the EVE Vorbis corpus.
|
|
137
|
+
|
|
138
|
+
## Wem packed-codebook snapshot
|
|
139
|
+
|
|
140
|
+
The wem Ogg repacker ships a package-owned copy of the aoTuV 6.03 packed
|
|
141
|
+
Vorbis codebook library at
|
|
142
|
+
`src/formats/wem/core/packedCodebooksAotuv603.js` (base64 module). It was
|
|
143
|
+
copied byte-identically from `packed_codebooks_aoTuV_603.bin` in the ww2ogg
|
|
144
|
+
distribution (`github.com/hcs64/ww2ogg`), 74,387 bytes, SHA-256
|
|
145
|
+
`00a93eab267d281401b1efd54e888a2e183299b9e6c446c48d09f701a89d9d27`, retrieved
|
|
146
|
+
2026-07-15. The data is BSD-licensed (Xiph.org Foundation, Adam Gashlin);
|
|
147
|
+
attribution and the full license terms are recorded in
|
|
148
|
+
`format-notices/wem/NOTICE` and `format-notices/wem/LICENSE`. An updated
|
|
149
|
+
snapshot must record its new source and digest here.
|
|
150
|
+
|
|
151
|
+
## Deliberately not copied
|
|
152
|
+
|
|
153
|
+
- `format-gr2` migrated into `formats/gr2` on 2026-07-24 (see the dated
|
|
154
|
+
table above) after its EUPL constraint was resolved; its standalone
|
|
155
|
+
repository is now a frozen legacy distribution like the other donors.
|
|
156
|
+
- `format-carbon` remains the schema emitter/generator and build-time schema
|
|
157
|
+
authority. Black consumes its published definitions; Red exposes the copied
|
|
158
|
+
catalog but does not yet enforce it while reading YAML fields.
|
|
159
|
+
- `format-dxbc`, `format-hlsl`, `format-webgl`, and `format-webgpu` are active
|
|
160
|
+
shader work and were not copied, annotated, or otherwise modified by this
|
|
161
|
+
migration.
|
|
162
|
+
|
|
163
|
+
## Typed-array ownership adjustments
|
|
164
|
+
|
|
165
|
+
The runtime copies preserve caller byte objects by reference. During the fork,
|
|
166
|
+
three avoidable source-buffer copies were changed to views:
|
|
167
|
+
|
|
168
|
+
- CMF compressed sections use `Uint8Array.subarray`.
|
|
169
|
+
- glTF GLB chunks use `Uint8Array.subarray`.
|
|
170
|
+
- FBX raw binary property payloads use `Uint8Array.subarray`.
|
|
171
|
+
|
|
172
|
+
Decoder output buffers and GIF per-frame snapshots still allocate because those
|
|
173
|
+
values have independent semantic identity.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# STL export
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource/formats/stl`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Defines the STL writer contract for shared geometry, including validation and watertight checking.
|
|
7
|
+
|
|
8
|
+
## Contract
|
|
9
|
+
|
|
10
|
+
`CjsStlFormat` writes shared geometry directly to binary or ASCII STL. The
|
|
11
|
+
writer consumes `mesh.vertex.position` and triangular `mesh.indices[].faces`;
|
|
12
|
+
multiple meshes and index groups are flattened in encounter order because STL
|
|
13
|
+
does not carry portable scene, material, skin, or animation structure.
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
import { CjsStlFormat } from "@carbonenginejs/runtime-resource/formats/stl";
|
|
17
|
+
|
|
18
|
+
const bytes = CjsStlFormat.write(sharedGeometry, {
|
|
19
|
+
binary: true,
|
|
20
|
+
solidName: "ship_hull",
|
|
21
|
+
scale: 1000,
|
|
22
|
+
requireWatertight: true
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Writes do not mutate the shared input. Facet normals are recalculated from
|
|
27
|
+
winding by default; set `recalculateNormals: false` to average valid vertex
|
|
28
|
+
normals. Degenerate triangles are skipped by default. Index values must be
|
|
29
|
+
safe integers within the position channel, and binary output rejects
|
|
30
|
+
coordinates outside float32 range instead of silently emitting infinities.
|
|
31
|
+
The `requireWatertight` option rejects open, non-manifold, inconsistently
|
|
32
|
+
wound, or degenerate output.
|
|
33
|
+
|
|
34
|
+
## Related documentation
|
|
35
|
+
|
|
36
|
+
- [Format subpaths](README.md)
|
|
37
|
+
- [Format ownership and fork provenance](provenance.md)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Wwise soundbanks and media
|
|
2
|
+
|
|
3
|
+
Status: Evolving
|
|
4
|
+
Scope: `@carbonenginejs/runtime-resource/formats/bnk`, `@carbonenginejs/runtime-resource/formats/wem`
|
|
5
|
+
Audience: Users and integrators
|
|
6
|
+
Summary: Defines the Wwise container inspection, event/media graph extraction, and WEM conversion contracts.
|
|
7
|
+
|
|
8
|
+
## Scope
|
|
9
|
+
|
|
10
|
+
`formats/bnk` and `formats/wem` cover Wwise container inspection, event/media
|
|
11
|
+
graph extraction, embedded-member access, and the currently supported WEM
|
|
12
|
+
conversion routes. They do not own AudioBuffer construction, playback, audio
|
|
13
|
+
manager behavior, or decoded-backend retention.
|
|
14
|
+
|
|
15
|
+
## Soundbank inspection
|
|
16
|
+
|
|
17
|
+
`CjsBnkFormat.inspect()` decodes the chunk map, embedded media index, bank
|
|
18
|
+
names, and the HIRC listing with version-stable typed fields (event action
|
|
19
|
+
lists, action type/target, sound and music-track source ids; pinned against
|
|
20
|
+
bank generator version 150). The Wwise-domain toolkit is grouped under the
|
|
21
|
+
`CjsBnkFormat.wwise` static: the SoundbanksInfo catalog helpers, the FNV-1
|
|
22
|
+
id hash, and event to media resolution:
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
import { CjsBnkFormat } from "@carbonenginejs/runtime-resource/formats/bnk";
|
|
26
|
+
import { CjsWemFormat } from "@carbonenginejs/runtime-resource/formats/wem";
|
|
27
|
+
|
|
28
|
+
const inspections = bankByteArrays.map(bytes => CjsBnkFormat.inspect(bytes));
|
|
29
|
+
const { eventMedia } = CjsBnkFormat.wwise.eventMediaFromBanks(inspections);
|
|
30
|
+
// eventMedia: Map<eventObjectId, Set<wemId>> - banks may split events from
|
|
31
|
+
// their target sounds, so pass every related bank to one call.
|
|
32
|
+
|
|
33
|
+
const ogg = CjsWemFormat.toOgg(wemBytes); // Wwise Vorbis -> Ogg (lossless)
|
|
34
|
+
const pcm = CjsWemFormat.toPcm(wemBytes); // PTADPCM / 16-bit PCM -> float32
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The read/inspect path stays a pure container reader;
|
|
38
|
+
`wwise.eventMediaFromBanks` is graph interpretation offered for consumers
|
|
39
|
+
with their own engines — the resource lifecycle never calls it.
|
|
40
|
+
|
|
41
|
+
## Related documentation
|
|
42
|
+
|
|
43
|
+
- [Format subpaths](README.md)
|
|
44
|
+
- [Format ownership and fork provenance](provenance.md)
|