@carbonenginejs/runtime-resource 0.1.0 → 0.8.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/FORMAT-PROVENANCE.md +155 -135
- package/LICENSE +21 -21
- package/NOTICE +29 -29
- package/README.md +548 -241
- package/dist/CjsMotherLode.js +1271 -56
- package/dist/CjsMotherLode.js.map +1 -1
- package/dist/CjsResMan.js +3005 -740
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResManQueue.js +214 -214
- package/dist/CjsResource.js +566 -366
- package/dist/CjsResource.js.map +1 -1
- package/dist/CjsResourceSource.js +59 -59
- package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -153
- package/dist/format/CjsBlueReader.js +269 -0
- package/dist/format/CjsBlueReader.js.map +1 -0
- package/dist/format/CjsFormat.js +192 -178
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsReader.js +18 -0
- package/dist/format/CjsReader.js.map +1 -0
- package/dist/format/CjsResourceProbe.js +277 -269
- package/dist/format/CjsResourceProbe.js.map +1 -1
- package/dist/format/payloadContract.js +173 -173
- package/dist/formats/black/CjsBlackFormat.js +278 -272
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- 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 -760
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
- 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 +238 -245
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/graph.js +140 -0
- package/dist/formats/bnk/core/graph.js.map +1 -0
- package/dist/formats/bnk/core/helpers.js +409 -354
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +521 -0
- package/dist/formats/bnk/core/musicNodes.js.map +1 -0
- package/dist/formats/bnk/core/soundbanksInfo.js +246 -246
- package/dist/formats/bnk/index.js +2 -3
- package/dist/formats/bnk/index.js.map +1 -1
- package/dist/formats/cmf/CjsCmfFormat.js +497 -491
- package/dist/formats/cmf/CjsCmfFormat.js.map +1 -1
- 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 -187
- package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/formats/dds/core/bc6h.js +288 -0
- package/dist/formats/dds/core/bc6h.js.map +1 -0
- package/dist/formats/dds/core/bc7.js +251 -0
- package/dist/formats/dds/core/bc7.js.map +1 -0
- package/dist/formats/dds/core/helpers.js +815 -812
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -260
- package/dist/formats/fbx/CjsFbxFormat.js.map +1 -1
- package/dist/formats/fbx/core/helpers.js +3901 -3901
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +87 -81
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/flac/core/helpers.js +295 -295
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +87 -81
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gif/core/helpers.js +360 -360
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +290 -284
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- 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/index.js +23 -23
- package/dist/formats/jpeg/CjsJpegFormat.js +206 -200
- package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
- 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 -186
- package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/formats/mp3/core/helpers.js +338 -338
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +191 -185
- package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/formats/mp4/core/helpers.js +449 -449
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +253 -247
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- 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 -82
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- 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 -189
- package/dist/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/formats/png/core/helpers.js +583 -583
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +261 -247
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/red/core/CjsRedReader.js +194 -201
- package/dist/formats/red/core/CjsRedReader.js.map +1 -1
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +139 -136
- package/dist/formats/red/core/helpers.js.map +1 -1
- 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 -304
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +261 -257
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +629 -544
- package/dist/formats/stl/core/stl.js.map +1 -1
- package/dist/formats/stl/core/targets.js +163 -163
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +192 -186
- package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/formats/tga/core/helpers.js +446 -446
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +192 -186
- package/dist/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/formats/wav/core/helpers.js +328 -328
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +191 -185
- package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/formats/webm/core/helpers.js +537 -537
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +86 -80
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/webp/core/helpers.js +214 -214
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +241 -197
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- 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 -336
- package/dist/formats/wem/core/helpers.js.map +1 -1
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -0
- package/dist/formats/wem/core/ptadpcm.js.map +1 -0
- package/dist/formats/wem/core/resolve.js +121 -0
- package/dist/formats/wem/core/resolve.js.map +1 -0
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +83 -77
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +305 -304
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +160 -160
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +48 -52
- package/dist/index.js.map +1 -1
- package/dist/resourcePath.js +18 -18
- package/dist/resourceStates.js +9 -9
- package/dist/{generated/resources → resources}/AudioGeometryResData.js +47 -47
- package/dist/resources/AudioGeometryResData.js.map +1 -0
- package/dist/{generated/resources → resources}/GStateBindingCallbackData.js +31 -31
- package/dist/resources/GStateBindingCallbackData.js.map +1 -0
- package/dist/{generated/resources → resources}/MeshDecalData.js +37 -37
- package/dist/resources/MeshDecalData.js.map +1 -0
- package/dist/{generated/resources → resources}/MeshDecalLodData.js +34 -34
- package/dist/resources/MeshDecalLodData.js.map +1 -0
- package/dist/resources/Tr2EffectRes.js +71 -71
- package/dist/resources/Tr2GrannyIntersectionResult.js +60 -0
- package/dist/resources/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/resources/Tr2GrannyStateRes.js +44 -44
- package/dist/resources/Tr2ImageRes.js +114 -114
- package/dist/resources/Tr2LightProfileRes.js +40 -40
- package/dist/{generated/resources → resources}/Tr2MaterialArea.js +34 -34
- package/dist/resources/Tr2MaterialArea.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2MaterialMesh.js +31 -31
- package/dist/resources/Tr2MaterialMesh.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2MaterialRes.js +34 -34
- package/dist/resources/Tr2MaterialRes.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2ShaderPermutation.js +43 -43
- package/dist/resources/Tr2ShaderPermutation.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TextureLodManager.js +100 -60
- package/dist/resources/Tr2TextureLodManager.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TexturePackChannel.js +37 -37
- package/dist/resources/Tr2TexturePackChannel.js.map +1 -0
- package/dist/resources/Tr2TexturePipeline.js +68 -0
- package/dist/resources/Tr2TexturePipeline.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TexturePipelineParams.js +34 -34
- package/dist/resources/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/{generated/resources → resources}/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resources/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/resources/TriGeometryRes.js +239 -216
- package/dist/resources/TriGeometryRes.js.map +1 -1
- package/dist/{generated/resources → resources}/TriGeometryResAreaData.js +59 -59
- package/dist/resources/TriGeometryResAreaData.js.map +1 -0
- package/dist/{generated/resources → resources}/TriGeometryResJointData.js +38 -38
- package/dist/resources/TriGeometryResJointData.js.map +1 -0
- package/dist/{generated/resources → resources}/TriGeometryResLodData.js +88 -88
- package/dist/resources/TriGeometryResLodData.js.map +1 -0
- package/dist/{generated/resources → resources}/TriGeometryResMeshData.js +63 -63
- package/dist/resources/TriGeometryResMeshData.js.map +1 -0
- package/dist/{generated/resources → resources}/TriGeometryResSkeletonData.js +34 -34
- package/dist/resources/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/resources/TriGrannyRes.js +43 -43
- package/dist/{generated/resources → resources}/TriJointBinding.js +38 -38
- package/dist/resources/TriJointBinding.js.map +1 -0
- package/dist/{generated/resources → resources}/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resources/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/{generated/resources → resources}/TriRtGeometryConstants.js +88 -88
- package/dist/resources/TriRtGeometryConstants.js.map +1 -0
- package/dist/resources/TriTextureRes.js +304 -304
- package/dist/{generated/resources → resources}/enums.js +18 -18
- package/dist/resources/enums.js.map +1 -0
- package/dist/resources/resourceBoundary.js +47 -47
- package/dist/resources/texturePipelineBehavior.js +320 -0
- package/dist/resources/texturePipelineBehavior.js.map +1 -0
- package/dist/texture/CjsTextureArrayRes.js +406 -406
- package/dist/texture/CjsTextureParameterProxy.js +133 -133
- 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 -17
- 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/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 +51 -51
- package/resource-lifecycle.md +679 -487
- package/dist/generated/resources/AudioGeometryResData.js.map +0 -1
- package/dist/generated/resources/CmfVertexReader.js +0 -46
- package/dist/generated/resources/CmfVertexReader.js.map +0 -1
- package/dist/generated/resources/GStateBindingCallbackData.js.map +0 -1
- package/dist/generated/resources/MeshDecalData.js.map +0 -1
- package/dist/generated/resources/MeshDecalLodData.js.map +0 -1
- package/dist/generated/resources/Tr2AsyncSave.js +0 -46
- package/dist/generated/resources/Tr2AsyncSave.js.map +0 -1
- package/dist/generated/resources/Tr2CmfContents.js +0 -37
- package/dist/generated/resources/Tr2CmfContents.js.map +0 -1
- package/dist/generated/resources/Tr2GrannyIntersectionResult.js +0 -58
- package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +0 -1
- package/dist/generated/resources/Tr2LoadPrepareFence.js +0 -37
- package/dist/generated/resources/Tr2LoadPrepareFence.js.map +0 -1
- package/dist/generated/resources/Tr2MaterialArea.js.map +0 -1
- package/dist/generated/resources/Tr2MaterialMesh.js.map +0 -1
- package/dist/generated/resources/Tr2MaterialRes.js.map +0 -1
- package/dist/generated/resources/Tr2ShaderPermutation.js.map +0 -1
- package/dist/generated/resources/Tr2TextureLodManager.js.map +0 -1
- package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePackChannel.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePipeline.js +0 -44
- package/dist/generated/resources/Tr2TexturePipeline.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePipelineParams.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
- package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +0 -1
- package/dist/generated/resources/TriGeometryResAreaData.js.map +0 -1
- package/dist/generated/resources/TriGeometryResJointData.js.map +0 -1
- package/dist/generated/resources/TriGeometryResLodData.js.map +0 -1
- package/dist/generated/resources/TriGeometryResMeshData.js.map +0 -1
- package/dist/generated/resources/TriGeometryResSkeletonData.js.map +0 -1
- package/dist/generated/resources/TriJointBinding.js.map +0 -1
- package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +0 -1
- package/dist/generated/resources/TriRtGeometryConstants.js.map +0 -1
- package/dist/generated/resources/enums.js.map +0 -1
- package/dist/generated/resources/index.js +0 -32
- package/dist/generated/resources/index.js.map +0 -1
|
@@ -1,164 +1,164 @@
|
|
|
1
|
-
import { BitReader, ilog } from './bitStream.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Packed Vorbis codebook library handling for Wwise Vorbis repacking.
|
|
5
|
-
*
|
|
6
|
-
* Wwise strips the standard Vorbis codebooks from the setup header and
|
|
7
|
-
* references entries in a shared packed library by 10-bit id. Rebuilding
|
|
8
|
-
* expands each packed codebook back into the standard Vorbis codebook
|
|
9
|
-
* encoding. Behavior mirrors the ww2ogg reference (BSD-licensed, Xiph.org
|
|
10
|
-
* Foundation / Adam Gashlin); this is an original reimplementation.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
function parseError(message) {
|
|
14
|
-
const error = new Error(`wem: ${message}`);
|
|
15
|
-
error.code = "CJS_FORMAT_PARSE_ERROR";
|
|
16
|
-
return error;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Parse a packed codebook library blob.
|
|
21
|
-
*
|
|
22
|
-
* Layout: codebook data, then a table of u32-le offsets; the last u32 in the
|
|
23
|
-
* file points at the start of the offset table. Codebook `i` spans
|
|
24
|
-
* offsets[i]..offsets[i+1].
|
|
25
|
-
*
|
|
26
|
-
* @param {Uint8Array} bytes Packed codebook library bytes.
|
|
27
|
-
* @returns {object} Parsed library with `count` usable codebooks.
|
|
28
|
-
*/
|
|
29
|
-
function parseCodebookLibrary(bytes) {
|
|
30
|
-
if (bytes.length < 4) throw parseError("packed codebook library is truncated");
|
|
31
|
-
const offsetTableStart = readU32(bytes, bytes.length - 4);
|
|
32
|
-
if (offsetTableStart > bytes.length - 4 || (bytes.length - offsetTableStart) % 4 !== 0) {
|
|
33
|
-
throw parseError("packed codebook library has an invalid offset table");
|
|
34
|
-
}
|
|
35
|
-
const offsetCount = (bytes.length - offsetTableStart) / 4;
|
|
36
|
-
const offsets = new Uint32Array(offsetCount);
|
|
37
|
-
for (let i = 0; i < offsetCount; i++) {
|
|
38
|
-
offsets[i] = readU32(bytes, offsetTableStart + i * 4);
|
|
39
|
-
if (offsets[i] > offsetTableStart) throw parseError("packed codebook offset out of range");
|
|
40
|
-
if (i > 0 && offsets[i] < offsets[i - 1]) throw parseError("packed codebook offsets not ascending");
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
bytes,
|
|
44
|
-
offsets,
|
|
45
|
-
count: offsetCount - 1
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Rebuild one packed codebook, referenced by library id, into `writer`.
|
|
51
|
-
*
|
|
52
|
-
* @param {object} library `parseCodebookLibrary` output.
|
|
53
|
-
* @param {number} id Codebook id from the setup header.
|
|
54
|
-
* @param {object} writer OggPageWriter positioned inside the setup packet.
|
|
55
|
-
*/
|
|
56
|
-
function rebuildCodebookById(library, id, writer) {
|
|
57
|
-
if (id < 0 || id >= library.count) {
|
|
58
|
-
throw parseError(`invalid codebook id ${id} for library of ${library.count}`);
|
|
59
|
-
}
|
|
60
|
-
const start = library.offsets[id];
|
|
61
|
-
const size = library.offsets[id + 1] - start;
|
|
62
|
-
const reader = new BitReader(library.bytes.subarray(start, start + size));
|
|
63
|
-
rebuildCodebook(reader, size, writer);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Rebuild one packed codebook from `reader` into the standard Vorbis
|
|
68
|
-
* codebook encoding on `writer`.
|
|
69
|
-
*
|
|
70
|
-
* @param {object} reader BitReader at the start of the packed codebook.
|
|
71
|
-
* @param {number} size Packed codebook size in bytes (0 skips the size check).
|
|
72
|
-
* @param {object} writer OggPageWriter positioned inside the setup packet.
|
|
73
|
-
*/
|
|
74
|
-
function rebuildCodebook(reader, size, writer) {
|
|
75
|
-
const dimensions = reader.readBits(4);
|
|
76
|
-
const entries = reader.readBits(14);
|
|
77
|
-
writer.writeBits(0x564342, 24);
|
|
78
|
-
writer.writeBits(dimensions, 16);
|
|
79
|
-
writer.writeBits(entries, 24);
|
|
80
|
-
const ordered = reader.readBits(1);
|
|
81
|
-
writer.writeBits(ordered, 1);
|
|
82
|
-
if (ordered) {
|
|
83
|
-
const initialLength = reader.readBits(5);
|
|
84
|
-
writer.writeBits(initialLength, 5);
|
|
85
|
-
let currentEntry = 0;
|
|
86
|
-
while (currentEntry < entries) {
|
|
87
|
-
const bits = ilog(entries - currentEntry);
|
|
88
|
-
const number = reader.readBits(bits);
|
|
89
|
-
writer.writeBits(number, bits);
|
|
90
|
-
currentEntry += number;
|
|
91
|
-
}
|
|
92
|
-
if (currentEntry > entries) throw parseError("codebook current entry out of range");
|
|
93
|
-
} else {
|
|
94
|
-
const codewordLengthLength = reader.readBits(3);
|
|
95
|
-
const sparse = reader.readBits(1);
|
|
96
|
-
if (codewordLengthLength === 0 || codewordLengthLength > 5) {
|
|
97
|
-
throw parseError("nonsense codeword length");
|
|
98
|
-
}
|
|
99
|
-
writer.writeBits(sparse, 1);
|
|
100
|
-
for (let i = 0; i < entries; i++) {
|
|
101
|
-
let present = true;
|
|
102
|
-
if (sparse) {
|
|
103
|
-
const presentBit = reader.readBits(1);
|
|
104
|
-
writer.writeBits(presentBit, 1);
|
|
105
|
-
present = presentBit !== 0;
|
|
106
|
-
}
|
|
107
|
-
if (present) {
|
|
108
|
-
const codewordLength = reader.readBits(codewordLengthLength);
|
|
109
|
-
writer.writeBits(codewordLength, 5);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const lookupType = reader.readBits(1);
|
|
114
|
-
writer.writeBits(lookupType, 4);
|
|
115
|
-
if (lookupType === 1) {
|
|
116
|
-
const min = reader.readBits(32);
|
|
117
|
-
const max = reader.readBits(32);
|
|
118
|
-
const valueLength = reader.readBits(4);
|
|
119
|
-
const sequenceFlag = reader.readBits(1);
|
|
120
|
-
writer.writeBits(min, 32);
|
|
121
|
-
writer.writeBits(max, 32);
|
|
122
|
-
writer.writeBits(valueLength, 4);
|
|
123
|
-
writer.writeBits(sequenceFlag, 1);
|
|
124
|
-
const quantvals = bookMaptype1Quantvals(entries, dimensions);
|
|
125
|
-
for (let i = 0; i < quantvals; i++) {
|
|
126
|
-
writer.writeBits(reader.readBits(valueLength + 1), valueLength + 1);
|
|
127
|
-
}
|
|
128
|
-
} else if (lookupType !== 0) {
|
|
129
|
-
throw parseError(`unexpected codebook lookup type ${lookupType}`);
|
|
130
|
-
}
|
|
131
|
-
if (size !== 0 && Math.floor(reader.totalBitsRead / 8) + 1 !== size) {
|
|
132
|
-
throw parseError(`codebook size mismatch (expected ${size}, used ${Math.floor(reader.totalBitsRead / 8) + 1})`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Number of quantized values for a maptype-1 codebook lookup table
|
|
138
|
-
* (Vorbis/Tremor `_book_maptype1_quantvals`).
|
|
139
|
-
*
|
|
140
|
-
* @param {number} entries Codebook entry count.
|
|
141
|
-
* @param {number} dimensions Codebook dimensions.
|
|
142
|
-
* @returns {number} Quantized value count.
|
|
143
|
-
*/
|
|
144
|
-
function bookMaptype1Quantvals(entries, dimensions) {
|
|
145
|
-
if (dimensions === 0) return 0;
|
|
146
|
-
const bits = ilog(entries);
|
|
147
|
-
let vals = entries >>> Math.floor((bits - 1) * (dimensions - 1) / dimensions);
|
|
148
|
-
for (;;) {
|
|
149
|
-
let acc = 1;
|
|
150
|
-
let acc1 = 1;
|
|
151
|
-
for (let i = 0; i < dimensions; i++) {
|
|
152
|
-
acc *= vals;
|
|
153
|
-
acc1 *= vals + 1;
|
|
154
|
-
}
|
|
155
|
-
if (acc <= entries && acc1 > entries) return vals;
|
|
156
|
-
if (acc > entries) vals--;else vals++;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
function readU32(bytes, offset) {
|
|
160
|
-
return (bytes[offset] | bytes[offset + 1] << 8 | bytes[offset + 2] << 16 | bytes[offset + 3] * 0x1000000) >>> 0;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export { bookMaptype1Quantvals, parseCodebookLibrary, rebuildCodebook, rebuildCodebookById };
|
|
164
|
-
//# sourceMappingURL=codebookLibrary.js.map
|
|
1
|
+
import { BitReader, ilog } from './bitStream.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Packed Vorbis codebook library handling for Wwise Vorbis repacking.
|
|
5
|
+
*
|
|
6
|
+
* Wwise strips the standard Vorbis codebooks from the setup header and
|
|
7
|
+
* references entries in a shared packed library by 10-bit id. Rebuilding
|
|
8
|
+
* expands each packed codebook back into the standard Vorbis codebook
|
|
9
|
+
* encoding. Behavior mirrors the ww2ogg reference (BSD-licensed, Xiph.org
|
|
10
|
+
* Foundation / Adam Gashlin); this is an original reimplementation.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
function parseError(message) {
|
|
14
|
+
const error = new Error(`wem: ${message}`);
|
|
15
|
+
error.code = "CJS_FORMAT_PARSE_ERROR";
|
|
16
|
+
return error;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Parse a packed codebook library blob.
|
|
21
|
+
*
|
|
22
|
+
* Layout: codebook data, then a table of u32-le offsets; the last u32 in the
|
|
23
|
+
* file points at the start of the offset table. Codebook `i` spans
|
|
24
|
+
* offsets[i]..offsets[i+1].
|
|
25
|
+
*
|
|
26
|
+
* @param {Uint8Array} bytes Packed codebook library bytes.
|
|
27
|
+
* @returns {object} Parsed library with `count` usable codebooks.
|
|
28
|
+
*/
|
|
29
|
+
function parseCodebookLibrary(bytes) {
|
|
30
|
+
if (bytes.length < 4) throw parseError("packed codebook library is truncated");
|
|
31
|
+
const offsetTableStart = readU32(bytes, bytes.length - 4);
|
|
32
|
+
if (offsetTableStart > bytes.length - 4 || (bytes.length - offsetTableStart) % 4 !== 0) {
|
|
33
|
+
throw parseError("packed codebook library has an invalid offset table");
|
|
34
|
+
}
|
|
35
|
+
const offsetCount = (bytes.length - offsetTableStart) / 4;
|
|
36
|
+
const offsets = new Uint32Array(offsetCount);
|
|
37
|
+
for (let i = 0; i < offsetCount; i++) {
|
|
38
|
+
offsets[i] = readU32(bytes, offsetTableStart + i * 4);
|
|
39
|
+
if (offsets[i] > offsetTableStart) throw parseError("packed codebook offset out of range");
|
|
40
|
+
if (i > 0 && offsets[i] < offsets[i - 1]) throw parseError("packed codebook offsets not ascending");
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
bytes,
|
|
44
|
+
offsets,
|
|
45
|
+
count: offsetCount - 1
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Rebuild one packed codebook, referenced by library id, into `writer`.
|
|
51
|
+
*
|
|
52
|
+
* @param {object} library `parseCodebookLibrary` output.
|
|
53
|
+
* @param {number} id Codebook id from the setup header.
|
|
54
|
+
* @param {object} writer OggPageWriter positioned inside the setup packet.
|
|
55
|
+
*/
|
|
56
|
+
function rebuildCodebookById(library, id, writer) {
|
|
57
|
+
if (id < 0 || id >= library.count) {
|
|
58
|
+
throw parseError(`invalid codebook id ${id} for library of ${library.count}`);
|
|
59
|
+
}
|
|
60
|
+
const start = library.offsets[id];
|
|
61
|
+
const size = library.offsets[id + 1] - start;
|
|
62
|
+
const reader = new BitReader(library.bytes.subarray(start, start + size));
|
|
63
|
+
rebuildCodebook(reader, size, writer);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Rebuild one packed codebook from `reader` into the standard Vorbis
|
|
68
|
+
* codebook encoding on `writer`.
|
|
69
|
+
*
|
|
70
|
+
* @param {object} reader BitReader at the start of the packed codebook.
|
|
71
|
+
* @param {number} size Packed codebook size in bytes (0 skips the size check).
|
|
72
|
+
* @param {object} writer OggPageWriter positioned inside the setup packet.
|
|
73
|
+
*/
|
|
74
|
+
function rebuildCodebook(reader, size, writer) {
|
|
75
|
+
const dimensions = reader.readBits(4);
|
|
76
|
+
const entries = reader.readBits(14);
|
|
77
|
+
writer.writeBits(0x564342, 24);
|
|
78
|
+
writer.writeBits(dimensions, 16);
|
|
79
|
+
writer.writeBits(entries, 24);
|
|
80
|
+
const ordered = reader.readBits(1);
|
|
81
|
+
writer.writeBits(ordered, 1);
|
|
82
|
+
if (ordered) {
|
|
83
|
+
const initialLength = reader.readBits(5);
|
|
84
|
+
writer.writeBits(initialLength, 5);
|
|
85
|
+
let currentEntry = 0;
|
|
86
|
+
while (currentEntry < entries) {
|
|
87
|
+
const bits = ilog(entries - currentEntry);
|
|
88
|
+
const number = reader.readBits(bits);
|
|
89
|
+
writer.writeBits(number, bits);
|
|
90
|
+
currentEntry += number;
|
|
91
|
+
}
|
|
92
|
+
if (currentEntry > entries) throw parseError("codebook current entry out of range");
|
|
93
|
+
} else {
|
|
94
|
+
const codewordLengthLength = reader.readBits(3);
|
|
95
|
+
const sparse = reader.readBits(1);
|
|
96
|
+
if (codewordLengthLength === 0 || codewordLengthLength > 5) {
|
|
97
|
+
throw parseError("nonsense codeword length");
|
|
98
|
+
}
|
|
99
|
+
writer.writeBits(sparse, 1);
|
|
100
|
+
for (let i = 0; i < entries; i++) {
|
|
101
|
+
let present = true;
|
|
102
|
+
if (sparse) {
|
|
103
|
+
const presentBit = reader.readBits(1);
|
|
104
|
+
writer.writeBits(presentBit, 1);
|
|
105
|
+
present = presentBit !== 0;
|
|
106
|
+
}
|
|
107
|
+
if (present) {
|
|
108
|
+
const codewordLength = reader.readBits(codewordLengthLength);
|
|
109
|
+
writer.writeBits(codewordLength, 5);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const lookupType = reader.readBits(1);
|
|
114
|
+
writer.writeBits(lookupType, 4);
|
|
115
|
+
if (lookupType === 1) {
|
|
116
|
+
const min = reader.readBits(32);
|
|
117
|
+
const max = reader.readBits(32);
|
|
118
|
+
const valueLength = reader.readBits(4);
|
|
119
|
+
const sequenceFlag = reader.readBits(1);
|
|
120
|
+
writer.writeBits(min, 32);
|
|
121
|
+
writer.writeBits(max, 32);
|
|
122
|
+
writer.writeBits(valueLength, 4);
|
|
123
|
+
writer.writeBits(sequenceFlag, 1);
|
|
124
|
+
const quantvals = bookMaptype1Quantvals(entries, dimensions);
|
|
125
|
+
for (let i = 0; i < quantvals; i++) {
|
|
126
|
+
writer.writeBits(reader.readBits(valueLength + 1), valueLength + 1);
|
|
127
|
+
}
|
|
128
|
+
} else if (lookupType !== 0) {
|
|
129
|
+
throw parseError(`unexpected codebook lookup type ${lookupType}`);
|
|
130
|
+
}
|
|
131
|
+
if (size !== 0 && Math.floor(reader.totalBitsRead / 8) + 1 !== size) {
|
|
132
|
+
throw parseError(`codebook size mismatch (expected ${size}, used ${Math.floor(reader.totalBitsRead / 8) + 1})`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Number of quantized values for a maptype-1 codebook lookup table
|
|
138
|
+
* (Vorbis/Tremor `_book_maptype1_quantvals`).
|
|
139
|
+
*
|
|
140
|
+
* @param {number} entries Codebook entry count.
|
|
141
|
+
* @param {number} dimensions Codebook dimensions.
|
|
142
|
+
* @returns {number} Quantized value count.
|
|
143
|
+
*/
|
|
144
|
+
function bookMaptype1Quantvals(entries, dimensions) {
|
|
145
|
+
if (dimensions === 0) return 0;
|
|
146
|
+
const bits = ilog(entries);
|
|
147
|
+
let vals = entries >>> Math.floor((bits - 1) * (dimensions - 1) / dimensions);
|
|
148
|
+
for (;;) {
|
|
149
|
+
let acc = 1;
|
|
150
|
+
let acc1 = 1;
|
|
151
|
+
for (let i = 0; i < dimensions; i++) {
|
|
152
|
+
acc *= vals;
|
|
153
|
+
acc1 *= vals + 1;
|
|
154
|
+
}
|
|
155
|
+
if (acc <= entries && acc1 > entries) return vals;
|
|
156
|
+
if (acc > entries) vals--;else vals++;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function readU32(bytes, offset) {
|
|
160
|
+
return (bytes[offset] | bytes[offset + 1] << 8 | bytes[offset + 2] << 16 | bytes[offset + 3] * 0x1000000) >>> 0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export { bookMaptype1Quantvals, parseCodebookLibrary, rebuildCodebook, rebuildCodebookById };
|
|
164
|
+
//# sourceMappingURL=codebookLibrary.js.map
|