@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
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
// Wwise PTADPCM (RIFF format tag 0x8311, "Platinum ADPCM") decoder.
|
|
2
|
-
//
|
|
3
|
-
// Original CarbonEngineJS implementation of the publicly documented algorithm
|
|
4
|
-
// (community documentation of the codec: vgmstream/wwiser); no code copied.
|
|
5
|
-
// Verified against EVE Online media (turret/artillery SFX banks).
|
|
6
|
-
//
|
|
7
|
-
// Frame layout, per channel (frames externally interleaved channel-by-channel;
|
|
8
|
-
// frame size = fmt blockAlign / channels, typically 0x24 bytes):
|
|
9
|
-
// 0x00 int16 LE hist2 (second-newest history sample, emitted first)
|
|
10
|
-
// 0x02 int16 LE hist1 (newest history sample, emitted second)
|
|
11
|
-
// 0x04 u8 step table index (clamped to 12)
|
|
12
|
-
// 0x05... 4-bit codes, low nibble first
|
|
13
|
-
// Samples per frame = 2 + (frameSize - 5) * 2.
|
|
14
|
-
// Per code: sample = clamp16(step + 2*hist1 - hist2), then the index moves to
|
|
15
|
-
// the row's nextIndex - {step, nextIndex} from PTADPCM_TABLE[index][code].
|
|
16
|
-
|
|
17
|
-
// [index][code] -> [stepDelta, nextIndex]. Rows 12-15 are zero: the header
|
|
18
|
-
// index is clamped to 12 and no transition targets a row above 11.
|
|
19
|
-
const PTADPCM_TABLE = [[[-14, 2], [-10, 2], [-7, 1], [-5, 1], [-3, 0], [-2, 0], [-1, 0], [0, 0], [0, 0], [1, 0], [2, 0], [3, 0], [5, 1], [7, 1], [10, 2], [14, 2]], [[-28, 3], [-20, 3], [-14, 2], [-10, 2], [-7, 1], [-5, 1], [-3, 1], [-1, 0], [1, 0], [3, 1], [5, 1], [7, 1], [10, 2], [14, 2], [20, 3], [28, 3]], [[-56, 4], [-40, 4], [-28, 3], [-20, 3], [-14, 2], [-10, 2], [-6, 2], [-2, 1], [2, 1], [6, 2], [10, 2], [14, 2], [20, 3], [28, 3], [40, 4], [56, 4]], [[-112, 5], [-80, 5], [-56, 4], [-40, 4], [-28, 3], [-20, 3], [-12, 3], [-4, 2], [4, 2], [12, 3], [20, 3], [28, 3], [40, 4], [56, 4], [80, 5], [112, 5]], [[-224, 6], [-160, 6], [-112, 5], [-80, 5], [-56, 4], [-40, 4], [-24, 4], [-8, 3], [8, 3], [24, 4], [40, 4], [56, 4], [80, 5], [112, 5], [160, 6], [224, 6]], [[-448, 7], [-320, 7], [-224, 6], [-160, 6], [-112, 5], [-80, 5], [-48, 5], [-16, 4], [16, 4], [48, 5], [80, 5], [112, 5], [160, 6], [224, 6], [320, 7], [448, 7]], [[-896, 8], [-640, 8], [-448, 7], [-320, 7], [-224, 6], [-160, 6], [-96, 6], [-32, 5], [32, 5], [96, 6], [160, 6], [224, 6], [320, 7], [448, 7], [640, 8], [896, 8]], [[-1792, 9], [-1280, 9], [-896, 8], [-640, 8], [-448, 7], [-320, 7], [-192, 7], [-64, 6], [64, 6], [192, 7], [320, 7], [448, 7], [640, 8], [896, 8], [1280, 9], [1792, 9]], [[-3584, 10], [-2560, 10], [-1792, 9], [-1280, 9], [-896, 8], [-640, 8], [-384, 8], [-128, 7], [128, 7], [384, 8], [640, 8], [896, 8], [1280, 9], [1792, 9], [2560, 10], [3584, 10]], [[-7168, 11], [-5120, 11], [-3584, 10], [-2560, 10], [-1792, 9], [-1280, 9], [-768, 9], [-256, 8], [256, 8], [768, 9], [1280, 9], [1792, 9], [2560, 10], [3584, 10], [5120, 11], [7168, 11]], [[-14336, 11], [-10240, 11], [-7168, 11], [-5120, 11], [-3584, 10], [-2560, 10], [-1536, 10], [-512, 9], [512, 9], [1536, 10], [2560, 10], [3584, 10], [5120, 11], [7168, 11], [10240, 11], [14336, 11]], [[-28672, 11], [-20480, 11], [-14336, 11], [-10240, 11], [-7168, 11], [-5120, 11], [-3072, 11], [-1024, 10], [1024, 10], [3072, 11], [5120, 11], [7168, 11], [10240, 11], [14336, 11], [20480, 11], [28672, 11]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]];
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Decode PTADPCM audio data to per-channel float32 samples.
|
|
23
|
-
*
|
|
24
|
-
* @param {Uint8Array} bytes Whole wem bytes.
|
|
25
|
-
* @param {object} metadata `inspectWEM` result for those bytes (fmt + data chunk facts).
|
|
26
|
-
* @returns {{channelData: Float32Array[], sampleCount: number, sampleRate: number, channels: number}} AudioBuffer-ready samples.
|
|
27
|
-
*/
|
|
28
|
-
function decodePtadpcm(bytes, metadata) {
|
|
29
|
-
const channels = metadata.channels;
|
|
30
|
-
const frameSize = channels > 0 ? Math.floor(metadata.blockAlign / channels) : 0;
|
|
31
|
-
if (channels < 1 || frameSize < 6 || metadata.blockAlign !== frameSize * channels) {
|
|
32
|
-
throw new Error(`wem: unsupported PTADPCM layout (channels ${channels}, blockAlign ${metadata.blockAlign})`);
|
|
33
|
-
}
|
|
34
|
-
const samplesPerFrame = 2 + (frameSize - 5) * 2;
|
|
35
|
-
const frameGroups = Math.floor(metadata.dataBytes / metadata.blockAlign);
|
|
36
|
-
const sampleCount = frameGroups * samplesPerFrame;
|
|
37
|
-
const channelData = [];
|
|
38
|
-
for (let channel = 0; channel < channels; channel++) {
|
|
39
|
-
channelData.push(new Float32Array(sampleCount));
|
|
40
|
-
}
|
|
41
|
-
for (let group = 0; group < frameGroups; group++) {
|
|
42
|
-
for (let channel = 0; channel < channels; channel++) {
|
|
43
|
-
const frame = metadata.dataOffset + (group * channels + channel) * frameSize;
|
|
44
|
-
const output = channelData[channel];
|
|
45
|
-
let at = group * samplesPerFrame;
|
|
46
|
-
let hist2 = readS16(bytes, frame);
|
|
47
|
-
let hist1 = readS16(bytes, frame + 2);
|
|
48
|
-
let index = Math.min(bytes[frame + 4], 12);
|
|
49
|
-
output[at++] = hist2 / 32768;
|
|
50
|
-
output[at++] = hist1 / 32768;
|
|
51
|
-
for (let i = 0; i < samplesPerFrame - 2; i++) {
|
|
52
|
-
const byte = bytes[frame + 5 + (i >> 1)];
|
|
53
|
-
const code = (i & 1) === 0 ? byte & 0x0f : byte >> 4;
|
|
54
|
-
const [step, nextIndex] = PTADPCM_TABLE[index][code];
|
|
55
|
-
let sample = step + 2 * hist1 - hist2;
|
|
56
|
-
if (sample > 32767) sample = 32767;else if (sample < -32768) sample = -32768;
|
|
57
|
-
index = nextIndex;
|
|
58
|
-
hist2 = hist1;
|
|
59
|
-
hist1 = sample;
|
|
60
|
-
output[at++] = sample / 32768;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
channelData,
|
|
66
|
-
sampleCount,
|
|
67
|
-
sampleRate: metadata.sampleRate,
|
|
68
|
-
channels
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
function readS16(bytes, offset) {
|
|
72
|
-
const value = bytes[offset] | bytes[offset + 1] << 8;
|
|
73
|
-
return value >= 0x8000 ? value - 0x10000 : value;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export { decodePtadpcm };
|
|
77
|
-
//# sourceMappingURL=ptadpcm.js.map
|
|
1
|
+
// Wwise PTADPCM (RIFF format tag 0x8311, "Platinum ADPCM") decoder.
|
|
2
|
+
//
|
|
3
|
+
// Original CarbonEngineJS implementation of the publicly documented algorithm
|
|
4
|
+
// (community documentation of the codec: vgmstream/wwiser); no code copied.
|
|
5
|
+
// Verified against EVE Online media (turret/artillery SFX banks).
|
|
6
|
+
//
|
|
7
|
+
// Frame layout, per channel (frames externally interleaved channel-by-channel;
|
|
8
|
+
// frame size = fmt blockAlign / channels, typically 0x24 bytes):
|
|
9
|
+
// 0x00 int16 LE hist2 (second-newest history sample, emitted first)
|
|
10
|
+
// 0x02 int16 LE hist1 (newest history sample, emitted second)
|
|
11
|
+
// 0x04 u8 step table index (clamped to 12)
|
|
12
|
+
// 0x05... 4-bit codes, low nibble first
|
|
13
|
+
// Samples per frame = 2 + (frameSize - 5) * 2.
|
|
14
|
+
// Per code: sample = clamp16(step + 2*hist1 - hist2), then the index moves to
|
|
15
|
+
// the row's nextIndex - {step, nextIndex} from PTADPCM_TABLE[index][code].
|
|
16
|
+
|
|
17
|
+
// [index][code] -> [stepDelta, nextIndex]. Rows 12-15 are zero: the header
|
|
18
|
+
// index is clamped to 12 and no transition targets a row above 11.
|
|
19
|
+
const PTADPCM_TABLE = [[[-14, 2], [-10, 2], [-7, 1], [-5, 1], [-3, 0], [-2, 0], [-1, 0], [0, 0], [0, 0], [1, 0], [2, 0], [3, 0], [5, 1], [7, 1], [10, 2], [14, 2]], [[-28, 3], [-20, 3], [-14, 2], [-10, 2], [-7, 1], [-5, 1], [-3, 1], [-1, 0], [1, 0], [3, 1], [5, 1], [7, 1], [10, 2], [14, 2], [20, 3], [28, 3]], [[-56, 4], [-40, 4], [-28, 3], [-20, 3], [-14, 2], [-10, 2], [-6, 2], [-2, 1], [2, 1], [6, 2], [10, 2], [14, 2], [20, 3], [28, 3], [40, 4], [56, 4]], [[-112, 5], [-80, 5], [-56, 4], [-40, 4], [-28, 3], [-20, 3], [-12, 3], [-4, 2], [4, 2], [12, 3], [20, 3], [28, 3], [40, 4], [56, 4], [80, 5], [112, 5]], [[-224, 6], [-160, 6], [-112, 5], [-80, 5], [-56, 4], [-40, 4], [-24, 4], [-8, 3], [8, 3], [24, 4], [40, 4], [56, 4], [80, 5], [112, 5], [160, 6], [224, 6]], [[-448, 7], [-320, 7], [-224, 6], [-160, 6], [-112, 5], [-80, 5], [-48, 5], [-16, 4], [16, 4], [48, 5], [80, 5], [112, 5], [160, 6], [224, 6], [320, 7], [448, 7]], [[-896, 8], [-640, 8], [-448, 7], [-320, 7], [-224, 6], [-160, 6], [-96, 6], [-32, 5], [32, 5], [96, 6], [160, 6], [224, 6], [320, 7], [448, 7], [640, 8], [896, 8]], [[-1792, 9], [-1280, 9], [-896, 8], [-640, 8], [-448, 7], [-320, 7], [-192, 7], [-64, 6], [64, 6], [192, 7], [320, 7], [448, 7], [640, 8], [896, 8], [1280, 9], [1792, 9]], [[-3584, 10], [-2560, 10], [-1792, 9], [-1280, 9], [-896, 8], [-640, 8], [-384, 8], [-128, 7], [128, 7], [384, 8], [640, 8], [896, 8], [1280, 9], [1792, 9], [2560, 10], [3584, 10]], [[-7168, 11], [-5120, 11], [-3584, 10], [-2560, 10], [-1792, 9], [-1280, 9], [-768, 9], [-256, 8], [256, 8], [768, 9], [1280, 9], [1792, 9], [2560, 10], [3584, 10], [5120, 11], [7168, 11]], [[-14336, 11], [-10240, 11], [-7168, 11], [-5120, 11], [-3584, 10], [-2560, 10], [-1536, 10], [-512, 9], [512, 9], [1536, 10], [2560, 10], [3584, 10], [5120, 11], [7168, 11], [10240, 11], [14336, 11]], [[-28672, 11], [-20480, 11], [-14336, 11], [-10240, 11], [-7168, 11], [-5120, 11], [-3072, 11], [-1024, 10], [1024, 10], [3072, 11], [5120, 11], [7168, 11], [10240, 11], [14336, 11], [20480, 11], [28672, 11]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Decode PTADPCM audio data to per-channel float32 samples.
|
|
23
|
+
*
|
|
24
|
+
* @param {Uint8Array} bytes Whole wem bytes.
|
|
25
|
+
* @param {object} metadata `inspectWEM` result for those bytes (fmt + data chunk facts).
|
|
26
|
+
* @returns {{channelData: Float32Array[], sampleCount: number, sampleRate: number, channels: number}} AudioBuffer-ready samples.
|
|
27
|
+
*/
|
|
28
|
+
function decodePtadpcm(bytes, metadata) {
|
|
29
|
+
const channels = metadata.channels;
|
|
30
|
+
const frameSize = channels > 0 ? Math.floor(metadata.blockAlign / channels) : 0;
|
|
31
|
+
if (channels < 1 || frameSize < 6 || metadata.blockAlign !== frameSize * channels) {
|
|
32
|
+
throw new Error(`wem: unsupported PTADPCM layout (channels ${channels}, blockAlign ${metadata.blockAlign})`);
|
|
33
|
+
}
|
|
34
|
+
const samplesPerFrame = 2 + (frameSize - 5) * 2;
|
|
35
|
+
const frameGroups = Math.floor(metadata.dataBytes / metadata.blockAlign);
|
|
36
|
+
const sampleCount = frameGroups * samplesPerFrame;
|
|
37
|
+
const channelData = [];
|
|
38
|
+
for (let channel = 0; channel < channels; channel++) {
|
|
39
|
+
channelData.push(new Float32Array(sampleCount));
|
|
40
|
+
}
|
|
41
|
+
for (let group = 0; group < frameGroups; group++) {
|
|
42
|
+
for (let channel = 0; channel < channels; channel++) {
|
|
43
|
+
const frame = metadata.dataOffset + (group * channels + channel) * frameSize;
|
|
44
|
+
const output = channelData[channel];
|
|
45
|
+
let at = group * samplesPerFrame;
|
|
46
|
+
let hist2 = readS16(bytes, frame);
|
|
47
|
+
let hist1 = readS16(bytes, frame + 2);
|
|
48
|
+
let index = Math.min(bytes[frame + 4], 12);
|
|
49
|
+
output[at++] = hist2 / 32768;
|
|
50
|
+
output[at++] = hist1 / 32768;
|
|
51
|
+
for (let i = 0; i < samplesPerFrame - 2; i++) {
|
|
52
|
+
const byte = bytes[frame + 5 + (i >> 1)];
|
|
53
|
+
const code = (i & 1) === 0 ? byte & 0x0f : byte >> 4;
|
|
54
|
+
const [step, nextIndex] = PTADPCM_TABLE[index][code];
|
|
55
|
+
let sample = step + 2 * hist1 - hist2;
|
|
56
|
+
if (sample > 32767) sample = 32767;else if (sample < -32768) sample = -32768;
|
|
57
|
+
index = nextIndex;
|
|
58
|
+
hist2 = hist1;
|
|
59
|
+
hist1 = sample;
|
|
60
|
+
output[at++] = sample / 32768;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
channelData,
|
|
66
|
+
sampleCount,
|
|
67
|
+
sampleRate: metadata.sampleRate,
|
|
68
|
+
channels
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function readS16(bytes, offset) {
|
|
72
|
+
const value = bytes[offset] | bytes[offset + 1] << 8;
|
|
73
|
+
return value >= 0x8000 ? value - 0x10000 : value;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { decodePtadpcm };
|
|
77
|
+
//# sourceMappingURL=ptadpcm.js.map
|
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
import { inspectWithValues } from './helpers.js';
|
|
2
|
-
|
|
3
|
-
// Content-verified codec resolution for wem media (kb §5 resolveType seam).
|
|
4
|
-
// The fmt tag is the declaration; each candidate codec gets ONE bounded
|
|
5
|
-
// structural check against the actual container facts - no audio is decoded:
|
|
6
|
-
//
|
|
7
|
-
// - wwise-vorbis: the Wwise Vorbis sidecar must exist (vorb chunk or inline
|
|
8
|
-
// fmt-0x42 layout) with a positive sample count and data payload;
|
|
9
|
-
// - wwise-ptadpcm: the frame layout must satisfy the decoder's own guard
|
|
10
|
-
// (blockAlign = frameSize * channels, frameSize >= 6) with block-aligned
|
|
11
|
-
// data;
|
|
12
|
-
// - pcm / pcm-extensible: 16-bit with self-consistent blockAlign/byteRate
|
|
13
|
-
// and sample-aligned data.
|
|
14
|
-
//
|
|
15
|
-
// The declared codec is validated FIRST; when its check fails (a mislabeled
|
|
16
|
-
// tag), the other candidates are tried in order. A 2026-07-19 census of all
|
|
17
|
-
// 8,987 embedded wems in EVE build 3435006 found no mislabeled tags, so
|
|
18
|
-
// mismatch is the exceptional path - but the check is what makes that a
|
|
19
|
-
// verified fact per file rather than a corpus-wide assumption.
|
|
20
|
-
const CANDIDATES = ["wwise-vorbis", "wwise-ptadpcm", "pcm"];
|
|
21
|
-
function validateVorbis(metadata) {
|
|
22
|
-
if (metadata.codec === "wwise-vorbis") {
|
|
23
|
-
return metadata.vorbis !== null && metadata.sampleCount > 0 && metadata.dataBytes > 0;
|
|
24
|
-
}
|
|
25
|
-
// Mislabeled tag: inspect() only fills `vorbis` when the tag says so, but
|
|
26
|
-
// the chunk walk always records a standalone vorb sidecar chunk.
|
|
27
|
-
return (metadata.chunks ?? []).some(chunk => chunk.id === "vorb") && metadata.dataBytes > 0;
|
|
28
|
-
}
|
|
29
|
-
function validatePtadpcm(metadata) {
|
|
30
|
-
const channels = metadata.channels;
|
|
31
|
-
const frameSize = channels > 0 ? Math.floor(metadata.blockAlign / channels) : 0;
|
|
32
|
-
return channels >= 1 && frameSize >= 6 && metadata.blockAlign === frameSize * channels && metadata.dataBytes >= metadata.blockAlign && metadata.dataBytes % metadata.blockAlign === 0;
|
|
33
|
-
}
|
|
34
|
-
function validatePcm(metadata) {
|
|
35
|
-
return metadata.bitsPerSample === 16 && metadata.channels >= 1 && metadata.blockAlign === metadata.channels * 2 && metadata.byteRate === metadata.sampleRate * metadata.blockAlign && metadata.dataBytes > 0 && metadata.dataBytes % metadata.blockAlign === 0;
|
|
36
|
-
}
|
|
37
|
-
function validate(candidate, metadata) {
|
|
38
|
-
if (candidate === "wwise-vorbis") return validateVorbis(metadata);
|
|
39
|
-
if (candidate === "wwise-ptadpcm") return validatePtadpcm(metadata);
|
|
40
|
-
return validatePcm(metadata);
|
|
41
|
-
}
|
|
42
|
-
function candidateFor(codec) {
|
|
43
|
-
if (codec === "pcm-extensible") return "pcm";
|
|
44
|
-
return CANDIDATES.includes(codec) ? codec : null;
|
|
45
|
-
}
|
|
46
|
-
function emitFor(candidate) {
|
|
47
|
-
if (candidate === "wwise-vorbis") return "ogg";
|
|
48
|
-
if (candidate === "wwise-ptadpcm" || candidate === "pcm") return "pcm";
|
|
49
|
-
return "raw";
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Resolve a wem's actual decode route from content, not just its fmt tag.
|
|
54
|
-
*
|
|
55
|
-
* @param {*} input Wem bytes.
|
|
56
|
-
* @param {object} values Normalized read values.
|
|
57
|
-
* @returns {object} Probe-shaped report: verified variant flags, `preferred`
|
|
58
|
-
* route, and declared/resolved/mismatch evidence in `metadata`.
|
|
59
|
-
*/
|
|
60
|
-
function resolveTypeWithValues(input, values) {
|
|
61
|
-
const metadata = inspectWithValues(input, values);
|
|
62
|
-
const declared = metadata.codec || null;
|
|
63
|
-
let resolved = null;
|
|
64
|
-
const declaredCandidate = candidateFor(declared);
|
|
65
|
-
if (declaredCandidate && validate(declaredCandidate, metadata)) {
|
|
66
|
-
resolved = declaredCandidate;
|
|
67
|
-
} else {
|
|
68
|
-
for (const candidate of CANDIDATES) {
|
|
69
|
-
if (candidate === declaredCandidate) continue;
|
|
70
|
-
if (validate(candidate, metadata)) {
|
|
71
|
-
resolved = candidate;
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
const preferred = emitFor(resolved);
|
|
77
|
-
const mismatch = resolved !== null && declaredCandidate !== resolved;
|
|
78
|
-
return {
|
|
79
|
-
format: "wem",
|
|
80
|
-
source: values.source || "buffer",
|
|
81
|
-
supported: metadata.codec ? "partial" : "none",
|
|
82
|
-
confidence: resolved ? 1 : 0,
|
|
83
|
-
verified: true,
|
|
84
|
-
preferred,
|
|
85
|
-
reason: resolved ? mismatch ? `Declared codec ${declared} failed content validation; ${resolved} validated instead.` : `Declared codec validated by content.` : `No decodable codec validated against the content (declared ${declared ?? "none"}).`,
|
|
86
|
-
metadata: {
|
|
87
|
-
...metadata,
|
|
88
|
-
declared,
|
|
89
|
-
resolved,
|
|
90
|
-
mismatch
|
|
91
|
-
},
|
|
92
|
-
variants: [{
|
|
93
|
-
kind: "raw",
|
|
94
|
-
payloadType: "raw",
|
|
95
|
-
codec: declared || "unknown",
|
|
96
|
-
mimeType: "application/octet-stream",
|
|
97
|
-
supported: true,
|
|
98
|
-
containerOnly: true,
|
|
99
|
-
isDecoded: false,
|
|
100
|
-
pcmDecodeSupported: false
|
|
101
|
-
}, {
|
|
102
|
-
kind: "ogg",
|
|
103
|
-
payloadType: "raw",
|
|
104
|
-
codec: "vorbis",
|
|
105
|
-
mimeType: "audio/ogg",
|
|
106
|
-
supported: resolved === "wwise-vorbis",
|
|
107
|
-
containerOnly: true,
|
|
108
|
-
isDecoded: false
|
|
109
|
-
}, {
|
|
110
|
-
kind: "pcm",
|
|
111
|
-
payloadType: "pcm",
|
|
112
|
-
codec: "float32",
|
|
113
|
-
supported: resolved === "wwise-ptadpcm" || resolved === "pcm",
|
|
114
|
-
isDecoded: true,
|
|
115
|
-
pcmDecodeSupported: resolved === "wwise-ptadpcm" || resolved === "pcm"
|
|
116
|
-
}]
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export { resolveTypeWithValues };
|
|
121
|
-
//# sourceMappingURL=resolve.js.map
|
|
1
|
+
import { inspectWithValues } from './helpers.js';
|
|
2
|
+
|
|
3
|
+
// Content-verified codec resolution for wem media (kb §5 resolveType seam).
|
|
4
|
+
// The fmt tag is the declaration; each candidate codec gets ONE bounded
|
|
5
|
+
// structural check against the actual container facts - no audio is decoded:
|
|
6
|
+
//
|
|
7
|
+
// - wwise-vorbis: the Wwise Vorbis sidecar must exist (vorb chunk or inline
|
|
8
|
+
// fmt-0x42 layout) with a positive sample count and data payload;
|
|
9
|
+
// - wwise-ptadpcm: the frame layout must satisfy the decoder's own guard
|
|
10
|
+
// (blockAlign = frameSize * channels, frameSize >= 6) with block-aligned
|
|
11
|
+
// data;
|
|
12
|
+
// - pcm / pcm-extensible: 16-bit with self-consistent blockAlign/byteRate
|
|
13
|
+
// and sample-aligned data.
|
|
14
|
+
//
|
|
15
|
+
// The declared codec is validated FIRST; when its check fails (a mislabeled
|
|
16
|
+
// tag), the other candidates are tried in order. A 2026-07-19 census of all
|
|
17
|
+
// 8,987 embedded wems in EVE build 3435006 found no mislabeled tags, so
|
|
18
|
+
// mismatch is the exceptional path - but the check is what makes that a
|
|
19
|
+
// verified fact per file rather than a corpus-wide assumption.
|
|
20
|
+
const CANDIDATES = ["wwise-vorbis", "wwise-ptadpcm", "pcm"];
|
|
21
|
+
function validateVorbis(metadata) {
|
|
22
|
+
if (metadata.codec === "wwise-vorbis") {
|
|
23
|
+
return metadata.vorbis !== null && metadata.sampleCount > 0 && metadata.dataBytes > 0;
|
|
24
|
+
}
|
|
25
|
+
// Mislabeled tag: inspect() only fills `vorbis` when the tag says so, but
|
|
26
|
+
// the chunk walk always records a standalone vorb sidecar chunk.
|
|
27
|
+
return (metadata.chunks ?? []).some(chunk => chunk.id === "vorb") && metadata.dataBytes > 0;
|
|
28
|
+
}
|
|
29
|
+
function validatePtadpcm(metadata) {
|
|
30
|
+
const channels = metadata.channels;
|
|
31
|
+
const frameSize = channels > 0 ? Math.floor(metadata.blockAlign / channels) : 0;
|
|
32
|
+
return channels >= 1 && frameSize >= 6 && metadata.blockAlign === frameSize * channels && metadata.dataBytes >= metadata.blockAlign && metadata.dataBytes % metadata.blockAlign === 0;
|
|
33
|
+
}
|
|
34
|
+
function validatePcm(metadata) {
|
|
35
|
+
return metadata.bitsPerSample === 16 && metadata.channels >= 1 && metadata.blockAlign === metadata.channels * 2 && metadata.byteRate === metadata.sampleRate * metadata.blockAlign && metadata.dataBytes > 0 && metadata.dataBytes % metadata.blockAlign === 0;
|
|
36
|
+
}
|
|
37
|
+
function validate(candidate, metadata) {
|
|
38
|
+
if (candidate === "wwise-vorbis") return validateVorbis(metadata);
|
|
39
|
+
if (candidate === "wwise-ptadpcm") return validatePtadpcm(metadata);
|
|
40
|
+
return validatePcm(metadata);
|
|
41
|
+
}
|
|
42
|
+
function candidateFor(codec) {
|
|
43
|
+
if (codec === "pcm-extensible") return "pcm";
|
|
44
|
+
return CANDIDATES.includes(codec) ? codec : null;
|
|
45
|
+
}
|
|
46
|
+
function emitFor(candidate) {
|
|
47
|
+
if (candidate === "wwise-vorbis") return "ogg";
|
|
48
|
+
if (candidate === "wwise-ptadpcm" || candidate === "pcm") return "pcm";
|
|
49
|
+
return "raw";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Resolve a wem's actual decode route from content, not just its fmt tag.
|
|
54
|
+
*
|
|
55
|
+
* @param {*} input Wem bytes.
|
|
56
|
+
* @param {object} values Normalized read values.
|
|
57
|
+
* @returns {object} Probe-shaped report: verified variant flags, `preferred`
|
|
58
|
+
* route, and declared/resolved/mismatch evidence in `metadata`.
|
|
59
|
+
*/
|
|
60
|
+
function resolveTypeWithValues(input, values) {
|
|
61
|
+
const metadata = inspectWithValues(input, values);
|
|
62
|
+
const declared = metadata.codec || null;
|
|
63
|
+
let resolved = null;
|
|
64
|
+
const declaredCandidate = candidateFor(declared);
|
|
65
|
+
if (declaredCandidate && validate(declaredCandidate, metadata)) {
|
|
66
|
+
resolved = declaredCandidate;
|
|
67
|
+
} else {
|
|
68
|
+
for (const candidate of CANDIDATES) {
|
|
69
|
+
if (candidate === declaredCandidate) continue;
|
|
70
|
+
if (validate(candidate, metadata)) {
|
|
71
|
+
resolved = candidate;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const preferred = emitFor(resolved);
|
|
77
|
+
const mismatch = resolved !== null && declaredCandidate !== resolved;
|
|
78
|
+
return {
|
|
79
|
+
format: "wem",
|
|
80
|
+
source: values.source || "buffer",
|
|
81
|
+
supported: metadata.codec ? "partial" : "none",
|
|
82
|
+
confidence: resolved ? 1 : 0,
|
|
83
|
+
verified: true,
|
|
84
|
+
preferred,
|
|
85
|
+
reason: resolved ? mismatch ? `Declared codec ${declared} failed content validation; ${resolved} validated instead.` : `Declared codec validated by content.` : `No decodable codec validated against the content (declared ${declared ?? "none"}).`,
|
|
86
|
+
metadata: {
|
|
87
|
+
...metadata,
|
|
88
|
+
declared,
|
|
89
|
+
resolved,
|
|
90
|
+
mismatch
|
|
91
|
+
},
|
|
92
|
+
variants: [{
|
|
93
|
+
kind: "raw",
|
|
94
|
+
payloadType: "raw",
|
|
95
|
+
codec: declared || "unknown",
|
|
96
|
+
mimeType: "application/octet-stream",
|
|
97
|
+
supported: true,
|
|
98
|
+
containerOnly: true,
|
|
99
|
+
isDecoded: false,
|
|
100
|
+
pcmDecodeSupported: false
|
|
101
|
+
}, {
|
|
102
|
+
kind: "ogg",
|
|
103
|
+
payloadType: "raw",
|
|
104
|
+
codec: "vorbis",
|
|
105
|
+
mimeType: "audio/ogg",
|
|
106
|
+
supported: resolved === "wwise-vorbis",
|
|
107
|
+
containerOnly: true,
|
|
108
|
+
isDecoded: false
|
|
109
|
+
}, {
|
|
110
|
+
kind: "pcm",
|
|
111
|
+
payloadType: "pcm",
|
|
112
|
+
codec: "float32",
|
|
113
|
+
supported: resolved === "wwise-ptadpcm" || resolved === "pcm",
|
|
114
|
+
isDecoded: true,
|
|
115
|
+
pcmDecodeSupported: resolved === "wwise-ptadpcm" || resolved === "pcm"
|
|
116
|
+
}]
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { resolveTypeWithValues };
|
|
121
|
+
//# sourceMappingURL=resolve.js.map
|