@openclaw/whatsapp 2026.5.28 → 2026.5.31-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{access-control-Z0fYaWrx.js → access-control-C53zKYSN.js} +1 -1
- package/dist/{accounts-BMGM1RtF.js → accounts-DgViSyJx.js} +1 -0
- package/dist/{action-runtime-BdhkGtaP.js → action-runtime-Cyp5GNIT.js} +2 -2
- package/dist/action-runtime-api.js +1 -1
- package/dist/action-runtime.runtime.js +1 -1
- package/dist/api.js +9 -9
- package/dist/{approval-handler.runtime-C25wPeBf.js → approval-handler.runtime-BVmOu6x1.js} +1 -2
- package/dist/{auth-store-BrKb0mwT.js → auth-store-CZ22aNcV.js} +4 -2
- package/dist/{channel-D3y4A5Dd.js → channel-DA2BAIo5.js} +17 -64
- package/dist/channel-config-api.js +1 -1
- package/dist/channel-plugin-api.js +1 -1
- package/dist/{channel-react-action-Cd2qkLqp.js → channel-react-action-zvbaCnGe.js} +3 -3
- package/dist/{channel.runtime-C228XUjs.js → channel.runtime-Q1LZDB5s.js} +4 -4
- package/dist/{channel.setup-BJQyTUUP.js → channel.setup-DHXOo4h5.js} +2 -3
- package/dist/{config-schema-CsNDlDpL.js → config-schema-CROZuhT-.js} +16 -0
- package/dist/{connection-controller-mpPGmqGq.js → connection-controller-Bnm4INld.js} +2 -2
- package/dist/contract-api.js +1 -1
- package/dist/light-runtime-api.js +1 -1
- package/dist/{login-CE4UYnyO.js → login-2fuBM7Je.js} +4 -4
- package/dist/{login-qr-LBvhEes5.js → login-qr-B1o7GFy8.js} +10 -6
- package/dist/login-qr-runtime.js +1 -1
- package/dist/{monitor-Ccph7Y8M.js → monitor-BVRq04Dt.js} +36 -18
- package/dist/runtime-api.js +7 -7
- package/dist/{send-C4LG-Cl6.js → send-DSlVXKL_.js} +53 -41
- package/dist/{send-api-C66vkRl9.js → send-api-Bjn-h80j.js} +3 -2
- package/dist/{session-D8UW2Vbn.js → session-DyGWNClj.js} +1 -1
- package/dist/{setup-core-DpfT4K-2.js → setup-core-OvPMaAsx.js} +4 -4
- package/dist/{setup-finalize-CFnxX7la.js → setup-finalize-Dk23pfKc.js} +3 -3
- package/dist/setup-plugin-api.js +1 -1
- package/dist/{setup-surface-DRsmp0ZS.js → setup-surface-F-jVrH8u.js} +3 -3
- package/node_modules/@audio/decode-aac/LICENSE +9 -0
- package/node_modules/@audio/decode-aac/README.md +60 -0
- package/node_modules/@audio/decode-aac/decode-aac.d.ts +16 -0
- package/node_modules/@audio/decode-aac/decode-aac.js +391 -0
- package/node_modules/@audio/decode-aac/package.json +47 -0
- package/node_modules/@audio/decode-aac/src/aac.wasm.cjs +0 -0
- package/node_modules/@audio/decode-aiff/LICENSE +21 -0
- package/node_modules/@audio/decode-aiff/README.md +53 -0
- package/node_modules/@audio/decode-aiff/decode-aiff.d.ts +16 -0
- package/node_modules/@audio/decode-aiff/decode-aiff.js +583 -0
- package/node_modules/@audio/decode-aiff/package.json +42 -0
- package/node_modules/@audio/decode-amr/LICENSE +191 -0
- package/node_modules/@audio/decode-amr/README.md +65 -0
- package/node_modules/@audio/decode-amr/decode-amr.d.ts +16 -0
- package/node_modules/@audio/decode-amr/decode-amr.js +159 -0
- package/node_modules/@audio/decode-amr/package.json +48 -0
- package/node_modules/@audio/decode-amr/src/amr.wasm.cjs +0 -0
- package/node_modules/@audio/decode-caf/LICENSE +21 -0
- package/node_modules/@audio/decode-caf/README.md +55 -0
- package/node_modules/@audio/decode-caf/decode-caf.d.ts +16 -0
- package/node_modules/@audio/decode-caf/decode-caf.js +190 -0
- package/node_modules/@audio/decode-caf/package.json +43 -0
- package/node_modules/{audio-buffer → @audio/decode-flac}/LICENSE +5 -2
- package/node_modules/@audio/decode-flac/README.md +23 -0
- package/node_modules/@audio/decode-flac/decode-flac.d.ts +16 -0
- package/node_modules/@audio/decode-flac/decode-flac.js +2994 -0
- package/node_modules/@audio/decode-flac/meta.js +115 -0
- package/node_modules/@audio/decode-flac/package.json +49 -0
- package/node_modules/@audio/decode-mp3/LICENSE +25 -0
- package/node_modules/@audio/decode-mp3/README.md +23 -0
- package/node_modules/@audio/decode-mp3/decode-mp3.d.ts +16 -0
- package/node_modules/@audio/decode-mp3/decode-mp3.js +868 -0
- package/node_modules/@audio/decode-mp3/meta.js +143 -0
- package/node_modules/@audio/decode-mp3/package.json +50 -0
- package/node_modules/@audio/decode-opus/LICENSE +25 -0
- package/node_modules/@audio/decode-opus/README.md +23 -0
- package/node_modules/@audio/decode-opus/decode-opus.d.ts +16 -0
- package/node_modules/@audio/decode-opus/decode-opus.js +3179 -0
- package/node_modules/@audio/decode-opus/package.json +47 -0
- package/node_modules/@audio/decode-qoa/LICENSE +25 -0
- package/node_modules/@audio/decode-qoa/README.md +21 -0
- package/node_modules/@audio/decode-qoa/decode-qoa.d.ts +16 -0
- package/node_modules/@audio/decode-qoa/decode-qoa.js +278 -0
- package/node_modules/@audio/decode-qoa/package.json +46 -0
- package/node_modules/@audio/decode-vorbis/LICENSE +25 -0
- package/node_modules/@audio/decode-vorbis/README.md +23 -0
- package/node_modules/@audio/decode-vorbis/decode-vorbis.d.ts +16 -0
- package/node_modules/@audio/decode-vorbis/decode-vorbis.js +2984 -0
- package/node_modules/@audio/decode-vorbis/package.json +47 -0
- package/node_modules/@audio/decode-wav/decode-wav.js +104 -0
- package/node_modules/@audio/decode-wav/meta.js +114 -0
- package/node_modules/@audio/decode-wav/package.json +27 -0
- package/node_modules/@audio/decode-webm/LICENSE +21 -0
- package/node_modules/@audio/decode-webm/README.md +57 -0
- package/node_modules/@audio/decode-webm/decode-webm.d.ts +16 -0
- package/node_modules/@audio/decode-webm/decode-webm.js +3964 -0
- package/node_modules/@audio/decode-webm/package.json +51 -0
- package/node_modules/@audio/decode-wma/LICENSE +12 -0
- package/node_modules/@audio/decode-wma/README.md +76 -0
- package/node_modules/@audio/decode-wma/decode-wma.d.ts +33 -0
- package/node_modules/@audio/decode-wma/decode-wma.js +525 -0
- package/node_modules/@audio/decode-wma/package.json +47 -0
- package/node_modules/@audio/decode-wma/src/wma.wasm.cjs +0 -0
- package/node_modules/audio-decode/.claude/settings.json +204 -0
- package/node_modules/audio-decode/.github/workflows/test.js.yml +11 -20
- package/node_modules/audio-decode/.gitmodules +9 -0
- package/node_modules/audio-decode/audio-decode.d.ts +48 -10
- package/node_modules/audio-decode/audio-decode.js +193 -77
- package/node_modules/audio-decode/meta.js +11 -0
- package/node_modules/audio-decode/package.json +49 -21
- package/node_modules/audio-decode/readme.md +129 -29
- package/node_modules/audio-decode/stream.d.ts +15 -0
- package/node_modules/audio-decode/stream.js +1 -0
- package/node_modules/audio-decode/test.html +29 -10
- package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/browser/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/browser/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/browser/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/commonjs/node/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.js.map +1 -1
- package/node_modules/lru-cache/dist/commonjs/node/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/browser/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/browser/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/index.min.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.d.ts +2 -2
- package/node_modules/lru-cache/dist/esm/node/index.d.ts.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.js.map +1 -1
- package/node_modules/lru-cache/dist/esm/node/index.min.js.map +1 -1
- package/node_modules/lru-cache/package.json +1 -1
- package/node_modules/typebox/build/type/script/mapping.d.mts +5 -2
- package/node_modules/typebox/build/type/script/mapping.mjs +15 -8
- package/node_modules/typebox/build/type/script/parser.d.mts +3 -1
- package/node_modules/typebox/build/type/script/parser.mjs +2 -1
- package/node_modules/typebox/package.json +29 -29
- package/npm-shrinkwrap.json +156 -39
- package/openclaw.plugin.json +76 -0
- package/package.json +6 -6
- package/node_modules/audio-buffer/.eslintrc.json +0 -44
- package/node_modules/audio-buffer/.github/workflows/node.js.yml +0 -31
- package/node_modules/audio-buffer/.travis.yml +0 -7
- package/node_modules/audio-buffer/index.js +0 -76
- package/node_modules/audio-buffer/package.json +0 -37
- package/node_modules/audio-buffer/readme.md +0 -56
- package/node_modules/audio-decode/.eslintrc.json +0 -43
- package/node_modules/audio-decode/.travis.yml +0 -13
- package/node_modules/audio-decode/tea.yaml +0 -6
- package/node_modules/audio-decode/test-case.js +0 -11
- package/node_modules/audio-decode/test.js +0 -107
- package/node_modules/node-wav/README.md +0 -35
- package/node_modules/node-wav/file.wav +0 -0
- package/node_modules/node-wav/index.js +0 -291
- package/node_modules/node-wav/package.json +0 -29
- package/node_modules/node-wav/tests/file1.wav +0 -0
- package/node_modules/node-wav/tests/test.js +0 -66
- package/node_modules/node-wav/x.js +0 -12
- package/node_modules/node-wav/x.json +0 -86702
- package/node_modules/node-wav/x.js~ +0 -13
|
@@ -0,0 +1,2994 @@
|
|
|
1
|
+
// ../../node_modules/simple-yenc/dist/esm.js
|
|
2
|
+
var t = (t2, n = 4294967295, e2 = 79764919) => {
|
|
3
|
+
const r = new Int32Array(256);
|
|
4
|
+
let o, s, i, c = n;
|
|
5
|
+
for (o = 0; o < 256; o++) {
|
|
6
|
+
for (i = o << 24, s = 8; s > 0; --s) i = 2147483648 & i ? i << 1 ^ e2 : i << 1;
|
|
7
|
+
r[o] = i;
|
|
8
|
+
}
|
|
9
|
+
for (o = 0; o < t2.length; o++) c = c << 8 ^ r[255 & (c >> 24 ^ t2[o])];
|
|
10
|
+
return c;
|
|
11
|
+
};
|
|
12
|
+
var e = (n, e2 = t) => {
|
|
13
|
+
const r = (t2) => new Uint8Array(t2.length / 2).map(((n2, e3) => parseInt(t2.substring(2 * e3, 2 * (e3 + 1)), 16))), o = (t2) => r(t2)[0], s = /* @__PURE__ */ new Map();
|
|
14
|
+
[, 8364, , 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, , 381, , , 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, , 382, 376].forEach(((t2, n2) => s.set(t2, n2)));
|
|
15
|
+
const i = new Uint8Array(n.length);
|
|
16
|
+
let c, a, l, f = false, g = 0, h = 42, p = n.length > 13 && "dynEncode" === n.substring(0, 9), u = 0;
|
|
17
|
+
p && (u = 11, a = o(n.substring(9, u)), a <= 1 && (u += 2, h = o(n.substring(11, u))), 1 === a && (u += 8, l = ((t2) => new DataView(r(t2).buffer).getInt32(0, true))(n.substring(13, u))));
|
|
18
|
+
const d = 256 - h;
|
|
19
|
+
for (let t2 = u; t2 < n.length; t2++) if (c = n.charCodeAt(t2), 61 !== c || f) {
|
|
20
|
+
if (92 === c && t2 < n.length - 5 && p) {
|
|
21
|
+
const e3 = n.charCodeAt(t2 + 1);
|
|
22
|
+
117 !== e3 && 85 !== e3 || (c = parseInt(n.substring(t2 + 2, t2 + 6), 16), t2 += 5);
|
|
23
|
+
}
|
|
24
|
+
if (c > 255) {
|
|
25
|
+
const t3 = s.get(c);
|
|
26
|
+
t3 && (c = t3 + 127);
|
|
27
|
+
}
|
|
28
|
+
f && (f = false, c -= 64), i[g++] = c < h && c > 0 ? c + d : c - h;
|
|
29
|
+
} else f = true;
|
|
30
|
+
const m = i.subarray(0, g);
|
|
31
|
+
if (p && 1 === a) {
|
|
32
|
+
const t2 = e2(m);
|
|
33
|
+
if (t2 !== l) {
|
|
34
|
+
const n2 = "Decode failed crc32 validation";
|
|
35
|
+
throw console.error("`simple-yenc`\n", n2 + "\n", "Expected: " + l + "; Got: " + t2 + "\n", "Visit https://github.com/eshaz/simple-yenc for more information"), Error(n2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return m;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderCommon.js
|
|
42
|
+
function WASMAudioDecoderCommon() {
|
|
43
|
+
const uint8Array2 = Uint8Array;
|
|
44
|
+
const float32Array = Float32Array;
|
|
45
|
+
if (!WASMAudioDecoderCommon.modules) {
|
|
46
|
+
Object.defineProperties(WASMAudioDecoderCommon, {
|
|
47
|
+
modules: {
|
|
48
|
+
value: /* @__PURE__ */ new WeakMap()
|
|
49
|
+
},
|
|
50
|
+
setModule: {
|
|
51
|
+
value(Ref, module) {
|
|
52
|
+
WASMAudioDecoderCommon.modules.set(Ref, Promise.resolve(module));
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
getModule: {
|
|
56
|
+
value(Ref, wasmString) {
|
|
57
|
+
let module = WASMAudioDecoderCommon.modules.get(Ref);
|
|
58
|
+
if (!module) {
|
|
59
|
+
if (!wasmString) {
|
|
60
|
+
wasmString = Ref.wasm;
|
|
61
|
+
module = WASMAudioDecoderCommon.inflateDynEncodeString(
|
|
62
|
+
wasmString
|
|
63
|
+
).then((data3) => WebAssembly.compile(data3));
|
|
64
|
+
} else {
|
|
65
|
+
module = WebAssembly.compile(e(wasmString));
|
|
66
|
+
}
|
|
67
|
+
WASMAudioDecoderCommon.modules.set(Ref, module);
|
|
68
|
+
}
|
|
69
|
+
return module;
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
concatFloat32: {
|
|
73
|
+
value(buffers, length2) {
|
|
74
|
+
let ret = new float32Array(length2), i = 0, offset = 0;
|
|
75
|
+
while (i < buffers.length) {
|
|
76
|
+
ret.set(buffers[i], offset);
|
|
77
|
+
offset += buffers[i++].length;
|
|
78
|
+
}
|
|
79
|
+
return ret;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
getDecodedAudio: {
|
|
83
|
+
value: (errors, channelData, samplesDecoded, sampleRate2, bitDepth2) => ({
|
|
84
|
+
errors,
|
|
85
|
+
channelData,
|
|
86
|
+
samplesDecoded,
|
|
87
|
+
sampleRate: sampleRate2,
|
|
88
|
+
bitDepth: bitDepth2
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
getDecodedAudioMultiChannel: {
|
|
92
|
+
value(errors, input, channelsDecoded, samplesDecoded, sampleRate2, bitDepth2) {
|
|
93
|
+
let channelData = [], i, j;
|
|
94
|
+
for (i = 0; i < channelsDecoded; i++) {
|
|
95
|
+
const channel2 = [];
|
|
96
|
+
for (j = 0; j < input.length; ) channel2.push(input[j++][i] || []);
|
|
97
|
+
channelData.push(
|
|
98
|
+
WASMAudioDecoderCommon.concatFloat32(channel2, samplesDecoded)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return WASMAudioDecoderCommon.getDecodedAudio(
|
|
102
|
+
errors,
|
|
103
|
+
channelData,
|
|
104
|
+
samplesDecoded,
|
|
105
|
+
sampleRate2,
|
|
106
|
+
bitDepth2
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/*
|
|
111
|
+
******************
|
|
112
|
+
* Compression Code
|
|
113
|
+
******************
|
|
114
|
+
*/
|
|
115
|
+
inflateDynEncodeString: {
|
|
116
|
+
value(source) {
|
|
117
|
+
source = e(source);
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
const puffString = String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;
|
|
120
|
+
WASMAudioDecoderCommon.getModule(WASMAudioDecoderCommon, puffString).then((wasm) => WebAssembly.instantiate(wasm, {})).then(({ exports }) => {
|
|
121
|
+
const instanceExports = new Map(Object.entries(exports));
|
|
122
|
+
const puff = instanceExports.get("puff");
|
|
123
|
+
const memory = instanceExports.get("memory")["buffer"];
|
|
124
|
+
const dataArray = new uint8Array2(memory);
|
|
125
|
+
const heapView = new DataView(memory);
|
|
126
|
+
let heapPos = instanceExports.get("__heap_base");
|
|
127
|
+
const sourceLength = source.length;
|
|
128
|
+
const sourceLengthPtr = heapPos;
|
|
129
|
+
heapPos += 4;
|
|
130
|
+
heapView.setInt32(sourceLengthPtr, sourceLength, true);
|
|
131
|
+
const sourcePtr = heapPos;
|
|
132
|
+
heapPos += sourceLength;
|
|
133
|
+
dataArray.set(source, sourcePtr);
|
|
134
|
+
const destLengthPtr = heapPos;
|
|
135
|
+
heapPos += 4;
|
|
136
|
+
heapView.setInt32(
|
|
137
|
+
destLengthPtr,
|
|
138
|
+
dataArray.byteLength - heapPos,
|
|
139
|
+
true
|
|
140
|
+
);
|
|
141
|
+
puff(heapPos, destLengthPtr, sourcePtr, sourceLengthPtr);
|
|
142
|
+
resolve(
|
|
143
|
+
dataArray.slice(
|
|
144
|
+
heapPos,
|
|
145
|
+
heapPos + heapView.getInt32(destLengthPtr, true)
|
|
146
|
+
)
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
Object.defineProperty(this, "wasm", {
|
|
155
|
+
enumerable: true,
|
|
156
|
+
get: () => this._wasm
|
|
157
|
+
});
|
|
158
|
+
this.getOutputChannels = (outputData, channelsDecoded, samplesDecoded) => {
|
|
159
|
+
let output = [], i = 0;
|
|
160
|
+
while (i < channelsDecoded)
|
|
161
|
+
output.push(
|
|
162
|
+
outputData.slice(
|
|
163
|
+
i * samplesDecoded,
|
|
164
|
+
i++ * samplesDecoded + samplesDecoded
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
return output;
|
|
168
|
+
};
|
|
169
|
+
this.allocateTypedArray = (len, TypedArray, setPointer = true) => {
|
|
170
|
+
const ptr = this._wasm.malloc(TypedArray.BYTES_PER_ELEMENT * len);
|
|
171
|
+
if (setPointer) this._pointers.add(ptr);
|
|
172
|
+
return {
|
|
173
|
+
ptr,
|
|
174
|
+
len,
|
|
175
|
+
buf: new TypedArray(this._wasm.HEAP, ptr, len)
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
this.free = () => {
|
|
179
|
+
this._pointers.forEach((ptr) => {
|
|
180
|
+
this._wasm.free(ptr);
|
|
181
|
+
});
|
|
182
|
+
this._pointers.clear();
|
|
183
|
+
};
|
|
184
|
+
this.codeToString = (ptr) => {
|
|
185
|
+
const characters = [], heap = new Uint8Array(this._wasm.HEAP);
|
|
186
|
+
for (let character = heap[ptr]; character !== 0; character = heap[++ptr])
|
|
187
|
+
characters.push(character);
|
|
188
|
+
return String.fromCharCode.apply(null, characters);
|
|
189
|
+
};
|
|
190
|
+
this.addError = (errors, message, frameLength2, frameNumber2, inputBytes, outputSamples) => {
|
|
191
|
+
errors.push({
|
|
192
|
+
message,
|
|
193
|
+
frameLength: frameLength2,
|
|
194
|
+
frameNumber: frameNumber2,
|
|
195
|
+
inputBytes,
|
|
196
|
+
outputSamples
|
|
197
|
+
});
|
|
198
|
+
};
|
|
199
|
+
this.instantiate = (_EmscriptenWASM, _module) => {
|
|
200
|
+
if (_module) WASMAudioDecoderCommon.setModule(_EmscriptenWASM, _module);
|
|
201
|
+
this._wasm = new _EmscriptenWASM(WASMAudioDecoderCommon).instantiate();
|
|
202
|
+
this._pointers = /* @__PURE__ */ new Set();
|
|
203
|
+
return this._wasm.ready.then(() => this);
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// ../_build/empty-worker.js
|
|
208
|
+
var empty_worker_default = null;
|
|
209
|
+
|
|
210
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/WASMAudioDecoderWorker.js
|
|
211
|
+
var getWorker = () => globalThis.Worker || empty_worker_default;
|
|
212
|
+
var WASMAudioDecoderWorker = class extends getWorker() {
|
|
213
|
+
constructor(options, name, Decoder2, EmscriptenWASM2) {
|
|
214
|
+
if (!WASMAudioDecoderCommon.modules) new WASMAudioDecoderCommon();
|
|
215
|
+
let source = WASMAudioDecoderCommon.modules.get(Decoder2);
|
|
216
|
+
if (!source) {
|
|
217
|
+
let type = "text/javascript", isNode, webworkerSourceCode = `'use strict';(${((_Decoder, _WASMAudioDecoderCommon, _EmscriptenWASM) => {
|
|
218
|
+
let decoder2, moduleResolve, modulePromise = new Promise((resolve) => {
|
|
219
|
+
moduleResolve = resolve;
|
|
220
|
+
});
|
|
221
|
+
self.onmessage = ({ data: { id, command, data: data3 } }) => {
|
|
222
|
+
let messagePromise = modulePromise, messagePayload = { id }, transferList;
|
|
223
|
+
if (command === "init") {
|
|
224
|
+
Object.defineProperties(_Decoder, {
|
|
225
|
+
WASMAudioDecoderCommon: { value: _WASMAudioDecoderCommon },
|
|
226
|
+
EmscriptenWASM: { value: _EmscriptenWASM },
|
|
227
|
+
module: { value: data3.module },
|
|
228
|
+
isWebWorker: { value: true }
|
|
229
|
+
});
|
|
230
|
+
decoder2 = new _Decoder(data3.options);
|
|
231
|
+
moduleResolve();
|
|
232
|
+
} else if (command === "free") {
|
|
233
|
+
decoder2.free();
|
|
234
|
+
} else if (command === "ready") {
|
|
235
|
+
messagePromise = messagePromise.then(() => decoder2.ready);
|
|
236
|
+
} else if (command === "reset") {
|
|
237
|
+
messagePromise = messagePromise.then(() => decoder2.reset());
|
|
238
|
+
} else {
|
|
239
|
+
Object.assign(
|
|
240
|
+
messagePayload,
|
|
241
|
+
decoder2[command](
|
|
242
|
+
// detach buffers
|
|
243
|
+
Array.isArray(data3) ? data3.map((data4) => new Uint8Array(data4)) : new Uint8Array(data3)
|
|
244
|
+
)
|
|
245
|
+
);
|
|
246
|
+
transferList = messagePayload.channelData ? messagePayload.channelData.map((channel2) => channel2.buffer) : [];
|
|
247
|
+
}
|
|
248
|
+
messagePromise.then(
|
|
249
|
+
() => self.postMessage(messagePayload, transferList)
|
|
250
|
+
);
|
|
251
|
+
};
|
|
252
|
+
}).toString()})(${Decoder2}, ${WASMAudioDecoderCommon}, ${EmscriptenWASM2})`;
|
|
253
|
+
try {
|
|
254
|
+
isNode = typeof process.versions.node !== "undefined";
|
|
255
|
+
} catch {
|
|
256
|
+
}
|
|
257
|
+
source = isNode ? `data:${type};base64,${Buffer.from(webworkerSourceCode).toString(
|
|
258
|
+
"base64"
|
|
259
|
+
)}` : URL.createObjectURL(new Blob([webworkerSourceCode], { type }));
|
|
260
|
+
WASMAudioDecoderCommon.modules.set(Decoder2, source);
|
|
261
|
+
}
|
|
262
|
+
super(source, { name });
|
|
263
|
+
this._id = Number.MIN_SAFE_INTEGER;
|
|
264
|
+
this._enqueuedOperations = /* @__PURE__ */ new Map();
|
|
265
|
+
this.onmessage = ({ data: data3 }) => {
|
|
266
|
+
const { id, ...rest } = data3;
|
|
267
|
+
this._enqueuedOperations.get(id)(rest);
|
|
268
|
+
this._enqueuedOperations.delete(id);
|
|
269
|
+
};
|
|
270
|
+
new EmscriptenWASM2(WASMAudioDecoderCommon).getModule().then((module) => {
|
|
271
|
+
this.postToDecoder("init", { module, options });
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
async postToDecoder(command, data3) {
|
|
275
|
+
return new Promise((resolve) => {
|
|
276
|
+
this.postMessage({
|
|
277
|
+
command,
|
|
278
|
+
id: this._id,
|
|
279
|
+
data: data3
|
|
280
|
+
});
|
|
281
|
+
this._enqueuedOperations.set(this._id++, resolve);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
get ready() {
|
|
285
|
+
return this.postToDecoder("ready");
|
|
286
|
+
}
|
|
287
|
+
async free() {
|
|
288
|
+
await this.postToDecoder("free").finally(() => {
|
|
289
|
+
this.terminate();
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async reset() {
|
|
293
|
+
await this.postToDecoder("reset");
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
// ../../node_modules/@wasm-audio-decoders/common/src/utilities.js
|
|
298
|
+
var assignNames = (Class, name) => {
|
|
299
|
+
Object.defineProperty(Class, "name", { value: name });
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// ../../node_modules/codec-parser/src/constants.js
|
|
303
|
+
var symbol = Symbol;
|
|
304
|
+
var mappingJoin = ", ";
|
|
305
|
+
var channelMappings = (() => {
|
|
306
|
+
const front = "front";
|
|
307
|
+
const side = "side";
|
|
308
|
+
const rear = "rear";
|
|
309
|
+
const left = "left";
|
|
310
|
+
const center = "center";
|
|
311
|
+
const right = "right";
|
|
312
|
+
return ["", front + " ", side + " ", rear + " "].map(
|
|
313
|
+
(x) => [
|
|
314
|
+
[left, right],
|
|
315
|
+
[left, right, center],
|
|
316
|
+
[left, center, right],
|
|
317
|
+
[center, left, right],
|
|
318
|
+
[center]
|
|
319
|
+
].flatMap((y) => y.map((z) => x + z).join(mappingJoin))
|
|
320
|
+
);
|
|
321
|
+
})();
|
|
322
|
+
var lfe = "LFE";
|
|
323
|
+
var monophonic = "monophonic (mono)";
|
|
324
|
+
var stereo = "stereo";
|
|
325
|
+
var surround = "surround";
|
|
326
|
+
var getChannelMapping = (channelCount, ...mappings) => `${[
|
|
327
|
+
monophonic,
|
|
328
|
+
stereo,
|
|
329
|
+
`linear ${surround}`,
|
|
330
|
+
"quadraphonic",
|
|
331
|
+
`5.0 ${surround}`,
|
|
332
|
+
`5.1 ${surround}`,
|
|
333
|
+
`6.1 ${surround}`,
|
|
334
|
+
`7.1 ${surround}`
|
|
335
|
+
][channelCount - 1]} (${mappings.join(mappingJoin)})`;
|
|
336
|
+
var vorbisOpusChannelMapping = [
|
|
337
|
+
monophonic,
|
|
338
|
+
getChannelMapping(2, channelMappings[0][0]),
|
|
339
|
+
getChannelMapping(3, channelMappings[0][2]),
|
|
340
|
+
getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]),
|
|
341
|
+
getChannelMapping(5, channelMappings[1][2], channelMappings[3][0]),
|
|
342
|
+
getChannelMapping(6, channelMappings[1][2], channelMappings[3][0], lfe),
|
|
343
|
+
getChannelMapping(7, channelMappings[1][2], channelMappings[2][0], channelMappings[3][4], lfe),
|
|
344
|
+
getChannelMapping(8, channelMappings[1][2], channelMappings[2][0], channelMappings[3][0], lfe)
|
|
345
|
+
];
|
|
346
|
+
var rate192000 = 192e3;
|
|
347
|
+
var rate176400 = 176400;
|
|
348
|
+
var rate96000 = 96e3;
|
|
349
|
+
var rate88200 = 88200;
|
|
350
|
+
var rate64000 = 64e3;
|
|
351
|
+
var rate48000 = 48e3;
|
|
352
|
+
var rate44100 = 44100;
|
|
353
|
+
var rate32000 = 32e3;
|
|
354
|
+
var rate24000 = 24e3;
|
|
355
|
+
var rate22050 = 22050;
|
|
356
|
+
var rate16000 = 16e3;
|
|
357
|
+
var rate12000 = 12e3;
|
|
358
|
+
var rate11025 = 11025;
|
|
359
|
+
var rate8000 = 8e3;
|
|
360
|
+
var rate7350 = 7350;
|
|
361
|
+
var absoluteGranulePosition = "absoluteGranulePosition";
|
|
362
|
+
var bandwidth = "bandwidth";
|
|
363
|
+
var bitDepth = "bitDepth";
|
|
364
|
+
var bitrate = "bitrate";
|
|
365
|
+
var bitrateMaximum = bitrate + "Maximum";
|
|
366
|
+
var bitrateMinimum = bitrate + "Minimum";
|
|
367
|
+
var bitrateNominal = bitrate + "Nominal";
|
|
368
|
+
var buffer = "buffer";
|
|
369
|
+
var bufferFullness = buffer + "Fullness";
|
|
370
|
+
var codec = "codec";
|
|
371
|
+
var codecFrames = codec + "Frames";
|
|
372
|
+
var coupledStreamCount = "coupledStreamCount";
|
|
373
|
+
var crc = "crc";
|
|
374
|
+
var crc16 = crc + "16";
|
|
375
|
+
var crc32 = crc + "32";
|
|
376
|
+
var data = "data";
|
|
377
|
+
var description = "description";
|
|
378
|
+
var duration = "duration";
|
|
379
|
+
var emphasis = "emphasis";
|
|
380
|
+
var hasOpusPadding = "hasOpusPadding";
|
|
381
|
+
var header = "header";
|
|
382
|
+
var isContinuedPacket = "isContinuedPacket";
|
|
383
|
+
var isCopyrighted = "isCopyrighted";
|
|
384
|
+
var isFirstPage = "isFirstPage";
|
|
385
|
+
var isHome = "isHome";
|
|
386
|
+
var isLastPage = "isLastPage";
|
|
387
|
+
var isOriginal = "isOriginal";
|
|
388
|
+
var isPrivate = "isPrivate";
|
|
389
|
+
var isVbr = "isVbr";
|
|
390
|
+
var layer = "layer";
|
|
391
|
+
var length = "length";
|
|
392
|
+
var mode = "mode";
|
|
393
|
+
var modeExtension = mode + "Extension";
|
|
394
|
+
var mpeg = "mpeg";
|
|
395
|
+
var mpegVersion = mpeg + "Version";
|
|
396
|
+
var numberAACFrames = "numberAACFrames";
|
|
397
|
+
var outputGain = "outputGain";
|
|
398
|
+
var preSkip = "preSkip";
|
|
399
|
+
var profile = "profile";
|
|
400
|
+
var profileBits = symbol();
|
|
401
|
+
var protection = "protection";
|
|
402
|
+
var rawData = "rawData";
|
|
403
|
+
var segments = "segments";
|
|
404
|
+
var subarray = "subarray";
|
|
405
|
+
var version = "version";
|
|
406
|
+
var vorbis = "vorbis";
|
|
407
|
+
var vorbisComments = vorbis + "Comments";
|
|
408
|
+
var vorbisSetup = vorbis + "Setup";
|
|
409
|
+
var block = "block";
|
|
410
|
+
var blockingStrategy = block + "ingStrategy";
|
|
411
|
+
var blockingStrategyBits = symbol();
|
|
412
|
+
var blockSize = block + "Size";
|
|
413
|
+
var blocksize0 = block + "size0";
|
|
414
|
+
var blocksize1 = block + "size1";
|
|
415
|
+
var blockSizeBits = symbol();
|
|
416
|
+
var channel = "channel";
|
|
417
|
+
var channelMappingFamily = channel + "MappingFamily";
|
|
418
|
+
var channelMappingTable = channel + "MappingTable";
|
|
419
|
+
var channelMode = channel + "Mode";
|
|
420
|
+
var channelModeBits = symbol();
|
|
421
|
+
var channels = channel + "s";
|
|
422
|
+
var copyright = "copyright";
|
|
423
|
+
var copyrightId = copyright + "Id";
|
|
424
|
+
var copyrightIdStart = copyright + "IdStart";
|
|
425
|
+
var frame = "frame";
|
|
426
|
+
var frameCount = frame + "Count";
|
|
427
|
+
var frameLength = frame + "Length";
|
|
428
|
+
var Number2 = "Number";
|
|
429
|
+
var frameNumber = frame + Number2;
|
|
430
|
+
var framePadding = frame + "Padding";
|
|
431
|
+
var frameSize = frame + "Size";
|
|
432
|
+
var Rate = "Rate";
|
|
433
|
+
var inputSampleRate = "inputSample" + Rate;
|
|
434
|
+
var page = "page";
|
|
435
|
+
var pageChecksum = page + "Checksum";
|
|
436
|
+
var pageSegmentBytes = symbol();
|
|
437
|
+
var pageSegmentTable = page + "SegmentTable";
|
|
438
|
+
var pageSequenceNumber = page + "Sequence" + Number2;
|
|
439
|
+
var sample = "sample";
|
|
440
|
+
var sampleNumber = sample + Number2;
|
|
441
|
+
var sampleRate = sample + Rate;
|
|
442
|
+
var sampleRateBits = symbol();
|
|
443
|
+
var samples = sample + "s";
|
|
444
|
+
var stream = "stream";
|
|
445
|
+
var streamCount = stream + "Count";
|
|
446
|
+
var streamInfo = stream + "Info";
|
|
447
|
+
var streamSerialNumber = stream + "Serial" + Number2;
|
|
448
|
+
var streamStructureVersion = stream + "StructureVersion";
|
|
449
|
+
var total = "total";
|
|
450
|
+
var totalBytesOut = total + "BytesOut";
|
|
451
|
+
var totalDuration = total + "Duration";
|
|
452
|
+
var totalSamples = total + "Samples";
|
|
453
|
+
var readRawData = symbol();
|
|
454
|
+
var incrementRawData = symbol();
|
|
455
|
+
var mapCodecFrameStats = symbol();
|
|
456
|
+
var mapFrameStats = symbol();
|
|
457
|
+
var logWarning = symbol();
|
|
458
|
+
var logError2 = symbol();
|
|
459
|
+
var syncFrame = symbol();
|
|
460
|
+
var fixedLengthFrameSync = symbol();
|
|
461
|
+
var getHeader = symbol();
|
|
462
|
+
var setHeader = symbol();
|
|
463
|
+
var getFrame = symbol();
|
|
464
|
+
var parseFrame = symbol();
|
|
465
|
+
var parseOggPage = symbol();
|
|
466
|
+
var checkCodecUpdate = symbol();
|
|
467
|
+
var reset = symbol();
|
|
468
|
+
var enable = symbol();
|
|
469
|
+
var getHeaderFromUint8Array = symbol();
|
|
470
|
+
var checkFrameFooterCrc16 = symbol();
|
|
471
|
+
var uint8Array = Uint8Array;
|
|
472
|
+
var dataView = DataView;
|
|
473
|
+
var reserved = "reserved";
|
|
474
|
+
var bad = "bad";
|
|
475
|
+
var free = "free";
|
|
476
|
+
var none = "none";
|
|
477
|
+
var sixteenBitCRC = "16bit CRC";
|
|
478
|
+
|
|
479
|
+
// ../../node_modules/codec-parser/src/utilities.js
|
|
480
|
+
var getCrcTable = (crcTable, crcInitialValueFunction, crcFunction) => {
|
|
481
|
+
for (let byte = 0; byte < crcTable[length]; byte++) {
|
|
482
|
+
let crc2 = crcInitialValueFunction(byte);
|
|
483
|
+
for (let bit = 8; bit > 0; bit--) crc2 = crcFunction(crc2);
|
|
484
|
+
crcTable[byte] = crc2;
|
|
485
|
+
}
|
|
486
|
+
return crcTable;
|
|
487
|
+
};
|
|
488
|
+
var crc8Table = getCrcTable(
|
|
489
|
+
new uint8Array(256),
|
|
490
|
+
(b) => b,
|
|
491
|
+
(crc2) => crc2 & 128 ? 7 ^ crc2 << 1 : crc2 << 1
|
|
492
|
+
);
|
|
493
|
+
var flacCrc16Table = [
|
|
494
|
+
getCrcTable(
|
|
495
|
+
new Uint16Array(256),
|
|
496
|
+
(b) => b << 8,
|
|
497
|
+
(crc2) => crc2 << 1 ^ (crc2 & 1 << 15 ? 32773 : 0)
|
|
498
|
+
)
|
|
499
|
+
];
|
|
500
|
+
var crc32Table = [
|
|
501
|
+
getCrcTable(
|
|
502
|
+
new Uint32Array(256),
|
|
503
|
+
(b) => b,
|
|
504
|
+
(crc2) => crc2 >>> 1 ^ (crc2 & 1) * 3988292384
|
|
505
|
+
)
|
|
506
|
+
];
|
|
507
|
+
for (let i = 0; i < 15; i++) {
|
|
508
|
+
flacCrc16Table.push(new Uint16Array(256));
|
|
509
|
+
crc32Table.push(new Uint32Array(256));
|
|
510
|
+
for (let j = 0; j <= 255; j++) {
|
|
511
|
+
flacCrc16Table[i + 1][j] = flacCrc16Table[0][flacCrc16Table[i][j] >>> 8] ^ flacCrc16Table[i][j] << 8;
|
|
512
|
+
crc32Table[i + 1][j] = crc32Table[i][j] >>> 8 ^ crc32Table[0][crc32Table[i][j] & 255];
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
var crc8 = (data3) => {
|
|
516
|
+
let crc2 = 0;
|
|
517
|
+
const dataLength = data3[length];
|
|
518
|
+
for (let i = 0; i !== dataLength; i++) crc2 = crc8Table[crc2 ^ data3[i]];
|
|
519
|
+
return crc2;
|
|
520
|
+
};
|
|
521
|
+
var flacCrc16 = (data3) => {
|
|
522
|
+
const dataLength = data3[length];
|
|
523
|
+
const crcChunkSize = dataLength - 16;
|
|
524
|
+
let crc2 = 0;
|
|
525
|
+
let i = 0;
|
|
526
|
+
while (i <= crcChunkSize) {
|
|
527
|
+
crc2 ^= data3[i++] << 8 | data3[i++];
|
|
528
|
+
crc2 = flacCrc16Table[15][crc2 >> 8] ^ flacCrc16Table[14][crc2 & 255] ^ flacCrc16Table[13][data3[i++]] ^ flacCrc16Table[12][data3[i++]] ^ flacCrc16Table[11][data3[i++]] ^ flacCrc16Table[10][data3[i++]] ^ flacCrc16Table[9][data3[i++]] ^ flacCrc16Table[8][data3[i++]] ^ flacCrc16Table[7][data3[i++]] ^ flacCrc16Table[6][data3[i++]] ^ flacCrc16Table[5][data3[i++]] ^ flacCrc16Table[4][data3[i++]] ^ flacCrc16Table[3][data3[i++]] ^ flacCrc16Table[2][data3[i++]] ^ flacCrc16Table[1][data3[i++]] ^ flacCrc16Table[0][data3[i++]];
|
|
529
|
+
}
|
|
530
|
+
while (i !== dataLength)
|
|
531
|
+
crc2 = (crc2 & 255) << 8 ^ flacCrc16Table[0][crc2 >> 8 ^ data3[i++]];
|
|
532
|
+
return crc2;
|
|
533
|
+
};
|
|
534
|
+
var crc32Function = (data3) => {
|
|
535
|
+
const dataLength = data3[length];
|
|
536
|
+
const crcChunkSize = dataLength - 16;
|
|
537
|
+
let crc2 = 0;
|
|
538
|
+
let i = 0;
|
|
539
|
+
while (i <= crcChunkSize)
|
|
540
|
+
crc2 = crc32Table[15][(data3[i++] ^ crc2) & 255] ^ crc32Table[14][(data3[i++] ^ crc2 >>> 8) & 255] ^ crc32Table[13][(data3[i++] ^ crc2 >>> 16) & 255] ^ crc32Table[12][data3[i++] ^ crc2 >>> 24] ^ crc32Table[11][data3[i++]] ^ crc32Table[10][data3[i++]] ^ crc32Table[9][data3[i++]] ^ crc32Table[8][data3[i++]] ^ crc32Table[7][data3[i++]] ^ crc32Table[6][data3[i++]] ^ crc32Table[5][data3[i++]] ^ crc32Table[4][data3[i++]] ^ crc32Table[3][data3[i++]] ^ crc32Table[2][data3[i++]] ^ crc32Table[1][data3[i++]] ^ crc32Table[0][data3[i++]];
|
|
541
|
+
while (i !== dataLength)
|
|
542
|
+
crc2 = crc32Table[0][(crc2 ^ data3[i++]) & 255] ^ crc2 >>> 8;
|
|
543
|
+
return crc2 ^ -1;
|
|
544
|
+
};
|
|
545
|
+
var concatBuffers = (...buffers) => {
|
|
546
|
+
const buffer2 = new uint8Array(
|
|
547
|
+
buffers.reduce((acc, buf) => acc + buf[length], 0)
|
|
548
|
+
);
|
|
549
|
+
buffers.reduce((offset, buf) => {
|
|
550
|
+
buffer2.set(buf, offset);
|
|
551
|
+
return offset + buf[length];
|
|
552
|
+
}, 0);
|
|
553
|
+
return buffer2;
|
|
554
|
+
};
|
|
555
|
+
var bytesToString = (bytes) => String.fromCharCode(...bytes);
|
|
556
|
+
var reverseTable = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];
|
|
557
|
+
var reverse = (val) => reverseTable[val & 15] << 4 | reverseTable[val >> 4];
|
|
558
|
+
var BitReader = class {
|
|
559
|
+
constructor(data3) {
|
|
560
|
+
this._data = data3;
|
|
561
|
+
this._pos = data3[length] * 8;
|
|
562
|
+
}
|
|
563
|
+
set position(position) {
|
|
564
|
+
this._pos = position;
|
|
565
|
+
}
|
|
566
|
+
get position() {
|
|
567
|
+
return this._pos;
|
|
568
|
+
}
|
|
569
|
+
read(bits) {
|
|
570
|
+
const byte = Math.floor(this._pos / 8);
|
|
571
|
+
const bit = this._pos % 8;
|
|
572
|
+
this._pos -= bits;
|
|
573
|
+
const window = (reverse(this._data[byte - 1]) << 8) + reverse(this._data[byte]);
|
|
574
|
+
return window >> 7 - bit & 255;
|
|
575
|
+
}
|
|
576
|
+
};
|
|
577
|
+
var readInt64le = (view, offset) => {
|
|
578
|
+
try {
|
|
579
|
+
return view.getBigInt64(offset, true);
|
|
580
|
+
} catch {
|
|
581
|
+
const sign = view.getUint8(offset + 7) & 128 ? -1 : 1;
|
|
582
|
+
let firstPart = view.getUint32(offset, true);
|
|
583
|
+
let secondPart = view.getUint32(offset + 4, true);
|
|
584
|
+
if (sign === -1) {
|
|
585
|
+
firstPart = ~firstPart + 1;
|
|
586
|
+
secondPart = ~secondPart + 1;
|
|
587
|
+
}
|
|
588
|
+
if (secondPart > 1048575) {
|
|
589
|
+
console.warn("This platform does not support BigInt");
|
|
590
|
+
}
|
|
591
|
+
return sign * (firstPart + secondPart * 2 ** 32);
|
|
592
|
+
}
|
|
593
|
+
};
|
|
594
|
+
|
|
595
|
+
// ../../node_modules/codec-parser/src/codecs/HeaderCache.js
|
|
596
|
+
var HeaderCache = class {
|
|
597
|
+
constructor(onCodecHeader, onCodecUpdate) {
|
|
598
|
+
this._onCodecHeader = onCodecHeader;
|
|
599
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
600
|
+
this[reset]();
|
|
601
|
+
}
|
|
602
|
+
[enable]() {
|
|
603
|
+
this._isEnabled = true;
|
|
604
|
+
}
|
|
605
|
+
[reset]() {
|
|
606
|
+
this._headerCache = /* @__PURE__ */ new Map();
|
|
607
|
+
this._codecUpdateData = /* @__PURE__ */ new WeakMap();
|
|
608
|
+
this._codecHeaderSent = false;
|
|
609
|
+
this._codecShouldUpdate = false;
|
|
610
|
+
this._bitrate = null;
|
|
611
|
+
this._isEnabled = false;
|
|
612
|
+
}
|
|
613
|
+
[checkCodecUpdate](bitrate2, totalDuration2) {
|
|
614
|
+
if (this._onCodecUpdate) {
|
|
615
|
+
if (this._bitrate !== bitrate2) {
|
|
616
|
+
this._bitrate = bitrate2;
|
|
617
|
+
this._codecShouldUpdate = true;
|
|
618
|
+
}
|
|
619
|
+
const codecData = this._codecUpdateData.get(
|
|
620
|
+
this._headerCache.get(this._currentHeader)
|
|
621
|
+
);
|
|
622
|
+
if (this._codecShouldUpdate && codecData) {
|
|
623
|
+
this._onCodecUpdate(
|
|
624
|
+
{
|
|
625
|
+
bitrate: bitrate2,
|
|
626
|
+
...codecData
|
|
627
|
+
},
|
|
628
|
+
totalDuration2
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
this._codecShouldUpdate = false;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
[getHeader](key) {
|
|
635
|
+
const header2 = this._headerCache.get(key);
|
|
636
|
+
if (header2) {
|
|
637
|
+
this._updateCurrentHeader(key);
|
|
638
|
+
}
|
|
639
|
+
return header2;
|
|
640
|
+
}
|
|
641
|
+
[setHeader](key, header2, codecUpdateFields) {
|
|
642
|
+
if (this._isEnabled) {
|
|
643
|
+
if (!this._codecHeaderSent) {
|
|
644
|
+
this._onCodecHeader({ ...header2 });
|
|
645
|
+
this._codecHeaderSent = true;
|
|
646
|
+
}
|
|
647
|
+
this._updateCurrentHeader(key);
|
|
648
|
+
this._headerCache.set(key, header2);
|
|
649
|
+
this._codecUpdateData.set(header2, codecUpdateFields);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
_updateCurrentHeader(key) {
|
|
653
|
+
if (this._onCodecUpdate && key !== this._currentHeader) {
|
|
654
|
+
this._codecShouldUpdate = true;
|
|
655
|
+
this._currentHeader = key;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
|
|
660
|
+
// ../../node_modules/codec-parser/src/globals.js
|
|
661
|
+
var headerStore = /* @__PURE__ */ new WeakMap();
|
|
662
|
+
var frameStore = /* @__PURE__ */ new WeakMap();
|
|
663
|
+
|
|
664
|
+
// ../../node_modules/codec-parser/src/codecs/Parser.js
|
|
665
|
+
var Parser = class {
|
|
666
|
+
constructor(codecParser, headerCache) {
|
|
667
|
+
this._codecParser = codecParser;
|
|
668
|
+
this._headerCache = headerCache;
|
|
669
|
+
}
|
|
670
|
+
*[syncFrame]() {
|
|
671
|
+
let frameData;
|
|
672
|
+
do {
|
|
673
|
+
frameData = yield* this.Frame[getFrame](
|
|
674
|
+
this._codecParser,
|
|
675
|
+
this._headerCache,
|
|
676
|
+
0
|
|
677
|
+
);
|
|
678
|
+
if (frameData) return frameData;
|
|
679
|
+
this._codecParser[incrementRawData](1);
|
|
680
|
+
} while (true);
|
|
681
|
+
}
|
|
682
|
+
/**
|
|
683
|
+
* @description Searches for Frames within bytes containing a sequence of known codec frames.
|
|
684
|
+
* @param {boolean} ignoreNextFrame Set to true to return frames even if the next frame may not exist at the expected location
|
|
685
|
+
* @returns {Frame}
|
|
686
|
+
*/
|
|
687
|
+
*[fixedLengthFrameSync](ignoreNextFrame) {
|
|
688
|
+
let frameData = yield* this[syncFrame]();
|
|
689
|
+
const frameLength2 = frameStore.get(frameData)[length];
|
|
690
|
+
if (ignoreNextFrame || this._codecParser._flushing || // check if there is a frame right after this one
|
|
691
|
+
(yield* this.Header[getHeader](
|
|
692
|
+
this._codecParser,
|
|
693
|
+
this._headerCache,
|
|
694
|
+
frameLength2
|
|
695
|
+
))) {
|
|
696
|
+
this._headerCache[enable]();
|
|
697
|
+
this._codecParser[incrementRawData](frameLength2);
|
|
698
|
+
this._codecParser[mapFrameStats](frameData);
|
|
699
|
+
return frameData;
|
|
700
|
+
}
|
|
701
|
+
this._codecParser[logWarning](
|
|
702
|
+
`Missing ${frame} at ${frameLength2} bytes from current position.`,
|
|
703
|
+
`Dropping current ${frame} and trying again.`
|
|
704
|
+
);
|
|
705
|
+
this._headerCache[reset]();
|
|
706
|
+
this._codecParser[incrementRawData](1);
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
|
|
710
|
+
// ../../node_modules/codec-parser/src/containers/Frame.js
|
|
711
|
+
var Frame = class {
|
|
712
|
+
constructor(headerValue, dataValue) {
|
|
713
|
+
frameStore.set(this, { [header]: headerValue });
|
|
714
|
+
this[data] = dataValue;
|
|
715
|
+
}
|
|
716
|
+
};
|
|
717
|
+
|
|
718
|
+
// ../../node_modules/codec-parser/src/codecs/CodecFrame.js
|
|
719
|
+
var CodecFrame = class extends Frame {
|
|
720
|
+
static *[getFrame](Header, Frame2, codecParser, headerCache, readOffset) {
|
|
721
|
+
const headerValue = yield* Header[getHeader](
|
|
722
|
+
codecParser,
|
|
723
|
+
headerCache,
|
|
724
|
+
readOffset
|
|
725
|
+
);
|
|
726
|
+
if (headerValue) {
|
|
727
|
+
const frameLengthValue = headerStore.get(headerValue)[frameLength];
|
|
728
|
+
const samplesValue = headerStore.get(headerValue)[samples];
|
|
729
|
+
const frame2 = (yield* codecParser[readRawData](
|
|
730
|
+
frameLengthValue,
|
|
731
|
+
readOffset
|
|
732
|
+
))[subarray](0, frameLengthValue);
|
|
733
|
+
return new Frame2(headerValue, frame2, samplesValue);
|
|
734
|
+
} else {
|
|
735
|
+
return null;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
constructor(headerValue, dataValue, samplesValue) {
|
|
739
|
+
super(headerValue, dataValue);
|
|
740
|
+
this[header] = headerValue;
|
|
741
|
+
this[samples] = samplesValue;
|
|
742
|
+
this[duration] = samplesValue / headerValue[sampleRate] * 1e3;
|
|
743
|
+
this[frameNumber] = null;
|
|
744
|
+
this[totalBytesOut] = null;
|
|
745
|
+
this[totalSamples] = null;
|
|
746
|
+
this[totalDuration] = null;
|
|
747
|
+
frameStore.get(this)[length] = dataValue[length];
|
|
748
|
+
}
|
|
749
|
+
};
|
|
750
|
+
|
|
751
|
+
// ../../node_modules/codec-parser/src/metadata/ID3v2.js
|
|
752
|
+
var unsynchronizationFlag = "unsynchronizationFlag";
|
|
753
|
+
var extendedHeaderFlag = "extendedHeaderFlag";
|
|
754
|
+
var experimentalFlag = "experimentalFlag";
|
|
755
|
+
var footerPresent = "footerPresent";
|
|
756
|
+
var ID3v2 = class _ID3v2 {
|
|
757
|
+
static *getID3v2Header(codecParser, headerCache, readOffset) {
|
|
758
|
+
const headerLength = 10;
|
|
759
|
+
const header2 = {};
|
|
760
|
+
let data3 = yield* codecParser[readRawData](3, readOffset);
|
|
761
|
+
if (data3[0] !== 73 || data3[1] !== 68 || data3[2] !== 51) return null;
|
|
762
|
+
data3 = yield* codecParser[readRawData](headerLength, readOffset);
|
|
763
|
+
header2[version] = `id3v2.${data3[3]}.${data3[4]}`;
|
|
764
|
+
if (data3[5] & 15) return null;
|
|
765
|
+
header2[unsynchronizationFlag] = !!(data3[5] & 128);
|
|
766
|
+
header2[extendedHeaderFlag] = !!(data3[5] & 64);
|
|
767
|
+
header2[experimentalFlag] = !!(data3[5] & 32);
|
|
768
|
+
header2[footerPresent] = !!(data3[5] & 16);
|
|
769
|
+
if (data3[6] & 128 || data3[7] & 128 || data3[8] & 128 || data3[9] & 128)
|
|
770
|
+
return null;
|
|
771
|
+
const dataLength = data3[6] << 21 | data3[7] << 14 | data3[8] << 7 | data3[9];
|
|
772
|
+
header2[length] = headerLength + dataLength;
|
|
773
|
+
return new _ID3v2(header2);
|
|
774
|
+
}
|
|
775
|
+
constructor(header2) {
|
|
776
|
+
this[version] = header2[version];
|
|
777
|
+
this[unsynchronizationFlag] = header2[unsynchronizationFlag];
|
|
778
|
+
this[extendedHeaderFlag] = header2[extendedHeaderFlag];
|
|
779
|
+
this[experimentalFlag] = header2[experimentalFlag];
|
|
780
|
+
this[footerPresent] = header2[footerPresent];
|
|
781
|
+
this[length] = header2[length];
|
|
782
|
+
}
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
// ../../node_modules/codec-parser/src/codecs/CodecHeader.js
|
|
786
|
+
var CodecHeader = class {
|
|
787
|
+
/**
|
|
788
|
+
* @private
|
|
789
|
+
*/
|
|
790
|
+
constructor(header2) {
|
|
791
|
+
headerStore.set(this, header2);
|
|
792
|
+
this[bitDepth] = header2[bitDepth];
|
|
793
|
+
this[bitrate] = null;
|
|
794
|
+
this[channels] = header2[channels];
|
|
795
|
+
this[channelMode] = header2[channelMode];
|
|
796
|
+
this[sampleRate] = header2[sampleRate];
|
|
797
|
+
}
|
|
798
|
+
};
|
|
799
|
+
|
|
800
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGHeader.js
|
|
801
|
+
var bitrateMatrix = {
|
|
802
|
+
// bits | V1,L1 | V1,L2 | V1,L3 | V2,L1 | V2,L2 & L3
|
|
803
|
+
0: [free, free, free, free, free],
|
|
804
|
+
16: [32, 32, 32, 32, 8],
|
|
805
|
+
// 0b00100000: [64, 48, 40, 48, 16,],
|
|
806
|
+
// 0b00110000: [96, 56, 48, 56, 24,],
|
|
807
|
+
// 0b01000000: [128, 64, 56, 64, 32,],
|
|
808
|
+
// 0b01010000: [160, 80, 64, 80, 40,],
|
|
809
|
+
// 0b01100000: [192, 96, 80, 96, 48,],
|
|
810
|
+
// 0b01110000: [224, 112, 96, 112, 56,],
|
|
811
|
+
// 0b10000000: [256, 128, 112, 128, 64,],
|
|
812
|
+
// 0b10010000: [288, 160, 128, 144, 80,],
|
|
813
|
+
// 0b10100000: [320, 192, 160, 160, 96,],
|
|
814
|
+
// 0b10110000: [352, 224, 192, 176, 112,],
|
|
815
|
+
// 0b11000000: [384, 256, 224, 192, 128,],
|
|
816
|
+
// 0b11010000: [416, 320, 256, 224, 144,],
|
|
817
|
+
// 0b11100000: [448, 384, 320, 256, 160,],
|
|
818
|
+
240: [bad, bad, bad, bad, bad]
|
|
819
|
+
};
|
|
820
|
+
var calcBitrate = (idx, interval, intervalOffset) => 8 * ((idx + intervalOffset) % interval + interval) * (1 << (idx + intervalOffset) / interval) - 8 * interval * (interval / 8 | 0);
|
|
821
|
+
for (let i = 2; i < 15; i++)
|
|
822
|
+
bitrateMatrix[i << 4] = [
|
|
823
|
+
i * 32,
|
|
824
|
+
// V1,L1
|
|
825
|
+
calcBitrate(i, 4, 0),
|
|
826
|
+
// V1,L2
|
|
827
|
+
calcBitrate(i, 4, -1),
|
|
828
|
+
// V1,L3
|
|
829
|
+
calcBitrate(i, 8, 4),
|
|
830
|
+
// V2,L1
|
|
831
|
+
calcBitrate(i, 8, 0)
|
|
832
|
+
// V2,L2 & L3
|
|
833
|
+
];
|
|
834
|
+
var v1Layer1 = 0;
|
|
835
|
+
var v1Layer2 = 1;
|
|
836
|
+
var v1Layer3 = 2;
|
|
837
|
+
var v2Layer1 = 3;
|
|
838
|
+
var v2Layer23 = 4;
|
|
839
|
+
var bands = "bands ";
|
|
840
|
+
var to31 = " to 31";
|
|
841
|
+
var layer12ModeExtensions = {
|
|
842
|
+
0: bands + 4 + to31,
|
|
843
|
+
16: bands + 8 + to31,
|
|
844
|
+
32: bands + 12 + to31,
|
|
845
|
+
48: bands + 16 + to31
|
|
846
|
+
};
|
|
847
|
+
var bitrateIndex = "bitrateIndex";
|
|
848
|
+
var v2 = "v2";
|
|
849
|
+
var v1 = "v1";
|
|
850
|
+
var intensityStereo = "Intensity stereo ";
|
|
851
|
+
var msStereo = ", MS stereo ";
|
|
852
|
+
var on = "on";
|
|
853
|
+
var off = "off";
|
|
854
|
+
var layer3ModeExtensions = {
|
|
855
|
+
0: intensityStereo + off + msStereo + off,
|
|
856
|
+
16: intensityStereo + on + msStereo + off,
|
|
857
|
+
32: intensityStereo + off + msStereo + on,
|
|
858
|
+
48: intensityStereo + on + msStereo + on
|
|
859
|
+
};
|
|
860
|
+
var layersValues = {
|
|
861
|
+
0: { [description]: reserved },
|
|
862
|
+
2: {
|
|
863
|
+
[description]: "Layer III",
|
|
864
|
+
[framePadding]: 1,
|
|
865
|
+
[modeExtension]: layer3ModeExtensions,
|
|
866
|
+
[v1]: {
|
|
867
|
+
[bitrateIndex]: v1Layer3,
|
|
868
|
+
[samples]: 1152
|
|
869
|
+
},
|
|
870
|
+
[v2]: {
|
|
871
|
+
[bitrateIndex]: v2Layer23,
|
|
872
|
+
[samples]: 576
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
4: {
|
|
876
|
+
[description]: "Layer II",
|
|
877
|
+
[framePadding]: 1,
|
|
878
|
+
[modeExtension]: layer12ModeExtensions,
|
|
879
|
+
[samples]: 1152,
|
|
880
|
+
[v1]: {
|
|
881
|
+
[bitrateIndex]: v1Layer2
|
|
882
|
+
},
|
|
883
|
+
[v2]: {
|
|
884
|
+
[bitrateIndex]: v2Layer23
|
|
885
|
+
}
|
|
886
|
+
},
|
|
887
|
+
6: {
|
|
888
|
+
[description]: "Layer I",
|
|
889
|
+
[framePadding]: 4,
|
|
890
|
+
[modeExtension]: layer12ModeExtensions,
|
|
891
|
+
[samples]: 384,
|
|
892
|
+
[v1]: {
|
|
893
|
+
[bitrateIndex]: v1Layer1
|
|
894
|
+
},
|
|
895
|
+
[v2]: {
|
|
896
|
+
[bitrateIndex]: v2Layer1
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
};
|
|
900
|
+
var mpegVersionDescription = "MPEG Version ";
|
|
901
|
+
var isoIec = "ISO/IEC ";
|
|
902
|
+
var mpegVersions = {
|
|
903
|
+
0: {
|
|
904
|
+
[description]: `${mpegVersionDescription}2.5 (later extension of MPEG 2)`,
|
|
905
|
+
[layer]: v2,
|
|
906
|
+
[sampleRate]: {
|
|
907
|
+
0: rate11025,
|
|
908
|
+
4: rate12000,
|
|
909
|
+
8: rate8000,
|
|
910
|
+
12: reserved
|
|
911
|
+
}
|
|
912
|
+
},
|
|
913
|
+
8: { [description]: reserved },
|
|
914
|
+
16: {
|
|
915
|
+
[description]: `${mpegVersionDescription}2 (${isoIec}13818-3)`,
|
|
916
|
+
[layer]: v2,
|
|
917
|
+
[sampleRate]: {
|
|
918
|
+
0: rate22050,
|
|
919
|
+
4: rate24000,
|
|
920
|
+
8: rate16000,
|
|
921
|
+
12: reserved
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
24: {
|
|
925
|
+
[description]: `${mpegVersionDescription}1 (${isoIec}11172-3)`,
|
|
926
|
+
[layer]: v1,
|
|
927
|
+
[sampleRate]: {
|
|
928
|
+
0: rate44100,
|
|
929
|
+
4: rate48000,
|
|
930
|
+
8: rate32000,
|
|
931
|
+
12: reserved
|
|
932
|
+
}
|
|
933
|
+
},
|
|
934
|
+
length
|
|
935
|
+
};
|
|
936
|
+
var protectionValues = {
|
|
937
|
+
0: sixteenBitCRC,
|
|
938
|
+
1: none
|
|
939
|
+
};
|
|
940
|
+
var emphasisValues = {
|
|
941
|
+
0: none,
|
|
942
|
+
1: "50/15 ms",
|
|
943
|
+
2: reserved,
|
|
944
|
+
3: "CCIT J.17"
|
|
945
|
+
};
|
|
946
|
+
var channelModes = {
|
|
947
|
+
0: { [channels]: 2, [description]: stereo },
|
|
948
|
+
64: { [channels]: 2, [description]: "joint " + stereo },
|
|
949
|
+
128: { [channels]: 2, [description]: "dual channel" },
|
|
950
|
+
192: { [channels]: 1, [description]: monophonic }
|
|
951
|
+
};
|
|
952
|
+
var MPEGHeader = class _MPEGHeader extends CodecHeader {
|
|
953
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
954
|
+
const header2 = {};
|
|
955
|
+
const id3v2Header = yield* ID3v2.getID3v2Header(
|
|
956
|
+
codecParser,
|
|
957
|
+
headerCache,
|
|
958
|
+
readOffset
|
|
959
|
+
);
|
|
960
|
+
if (id3v2Header) {
|
|
961
|
+
yield* codecParser[readRawData](id3v2Header[length], readOffset);
|
|
962
|
+
codecParser[incrementRawData](id3v2Header[length]);
|
|
963
|
+
}
|
|
964
|
+
const data3 = yield* codecParser[readRawData](4, readOffset);
|
|
965
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
966
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
967
|
+
if (cachedHeader) return new _MPEGHeader(cachedHeader);
|
|
968
|
+
if (data3[0] !== 255 || data3[1] < 224) return null;
|
|
969
|
+
const mpegVersionValues2 = mpegVersions[data3[1] & 24];
|
|
970
|
+
if (mpegVersionValues2[description] === reserved) return null;
|
|
971
|
+
const layerBits = data3[1] & 6;
|
|
972
|
+
if (layersValues[layerBits][description] === reserved) return null;
|
|
973
|
+
const layerValues2 = {
|
|
974
|
+
...layersValues[layerBits],
|
|
975
|
+
...layersValues[layerBits][mpegVersionValues2[layer]]
|
|
976
|
+
};
|
|
977
|
+
header2[mpegVersion] = mpegVersionValues2[description];
|
|
978
|
+
header2[layer] = layerValues2[description];
|
|
979
|
+
header2[samples] = layerValues2[samples];
|
|
980
|
+
header2[protection] = protectionValues[data3[1] & 1];
|
|
981
|
+
header2[length] = 4;
|
|
982
|
+
header2[bitrate] = bitrateMatrix[data3[2] & 240][layerValues2[bitrateIndex]];
|
|
983
|
+
if (header2[bitrate] === bad) return null;
|
|
984
|
+
header2[sampleRate] = mpegVersionValues2[sampleRate][data3[2] & 12];
|
|
985
|
+
if (header2[sampleRate] === reserved) return null;
|
|
986
|
+
header2[framePadding] = data3[2] & 2 && layerValues2[framePadding];
|
|
987
|
+
header2[isPrivate] = !!(data3[2] & 1);
|
|
988
|
+
header2[frameLength] = Math.floor(
|
|
989
|
+
125 * header2[bitrate] * header2[samples] / header2[sampleRate] + header2[framePadding]
|
|
990
|
+
);
|
|
991
|
+
if (!header2[frameLength]) return null;
|
|
992
|
+
const channelModeBits2 = data3[3] & 192;
|
|
993
|
+
header2[channelMode] = channelModes[channelModeBits2][description];
|
|
994
|
+
header2[channels] = channelModes[channelModeBits2][channels];
|
|
995
|
+
header2[modeExtension] = layerValues2[modeExtension][data3[3] & 48];
|
|
996
|
+
header2[isCopyrighted] = !!(data3[3] & 8);
|
|
997
|
+
header2[isOriginal] = !!(data3[3] & 4);
|
|
998
|
+
header2[emphasis] = emphasisValues[data3[3] & 3];
|
|
999
|
+
if (header2[emphasis] === reserved) return null;
|
|
1000
|
+
header2[bitDepth] = 16;
|
|
1001
|
+
{
|
|
1002
|
+
const { length: length2, frameLength: frameLength2, samples: samples2, ...codecUpdateFields } = header2;
|
|
1003
|
+
headerCache[setHeader](key, header2, codecUpdateFields);
|
|
1004
|
+
}
|
|
1005
|
+
return new _MPEGHeader(header2);
|
|
1006
|
+
}
|
|
1007
|
+
/**
|
|
1008
|
+
* @private
|
|
1009
|
+
* Call MPEGHeader.getHeader(Array<Uint8>) to get instance
|
|
1010
|
+
*/
|
|
1011
|
+
constructor(header2) {
|
|
1012
|
+
super(header2);
|
|
1013
|
+
this[bitrate] = header2[bitrate];
|
|
1014
|
+
this[emphasis] = header2[emphasis];
|
|
1015
|
+
this[framePadding] = header2[framePadding];
|
|
1016
|
+
this[isCopyrighted] = header2[isCopyrighted];
|
|
1017
|
+
this[isOriginal] = header2[isOriginal];
|
|
1018
|
+
this[isPrivate] = header2[isPrivate];
|
|
1019
|
+
this[layer] = header2[layer];
|
|
1020
|
+
this[modeExtension] = header2[modeExtension];
|
|
1021
|
+
this[mpegVersion] = header2[mpegVersion];
|
|
1022
|
+
this[protection] = header2[protection];
|
|
1023
|
+
}
|
|
1024
|
+
};
|
|
1025
|
+
|
|
1026
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGFrame.js
|
|
1027
|
+
var MPEGFrame = class _MPEGFrame extends CodecFrame {
|
|
1028
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1029
|
+
return yield* super[getFrame](
|
|
1030
|
+
MPEGHeader,
|
|
1031
|
+
_MPEGFrame,
|
|
1032
|
+
codecParser,
|
|
1033
|
+
headerCache,
|
|
1034
|
+
readOffset
|
|
1035
|
+
);
|
|
1036
|
+
}
|
|
1037
|
+
constructor(header2, frame2, samples2) {
|
|
1038
|
+
super(header2, frame2, samples2);
|
|
1039
|
+
}
|
|
1040
|
+
};
|
|
1041
|
+
|
|
1042
|
+
// ../../node_modules/codec-parser/src/codecs/mpeg/MPEGParser.js
|
|
1043
|
+
var MPEGParser = class extends Parser {
|
|
1044
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1045
|
+
super(codecParser, headerCache);
|
|
1046
|
+
this.Frame = MPEGFrame;
|
|
1047
|
+
this.Header = MPEGHeader;
|
|
1048
|
+
onCodec(this[codec]);
|
|
1049
|
+
}
|
|
1050
|
+
get [codec]() {
|
|
1051
|
+
return mpeg;
|
|
1052
|
+
}
|
|
1053
|
+
*[parseFrame]() {
|
|
1054
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1055
|
+
}
|
|
1056
|
+
};
|
|
1057
|
+
|
|
1058
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACHeader.js
|
|
1059
|
+
var mpegVersionValues = {
|
|
1060
|
+
0: "MPEG-4",
|
|
1061
|
+
8: "MPEG-2"
|
|
1062
|
+
};
|
|
1063
|
+
var layerValues = {
|
|
1064
|
+
0: "valid",
|
|
1065
|
+
2: bad,
|
|
1066
|
+
4: bad,
|
|
1067
|
+
6: bad
|
|
1068
|
+
};
|
|
1069
|
+
var protectionValues2 = {
|
|
1070
|
+
0: sixteenBitCRC,
|
|
1071
|
+
1: none
|
|
1072
|
+
};
|
|
1073
|
+
var profileValues = {
|
|
1074
|
+
0: "AAC Main",
|
|
1075
|
+
64: "AAC LC (Low Complexity)",
|
|
1076
|
+
128: "AAC SSR (Scalable Sample Rate)",
|
|
1077
|
+
192: "AAC LTP (Long Term Prediction)"
|
|
1078
|
+
};
|
|
1079
|
+
var sampleRates = {
|
|
1080
|
+
0: rate96000,
|
|
1081
|
+
4: rate88200,
|
|
1082
|
+
8: rate64000,
|
|
1083
|
+
12: rate48000,
|
|
1084
|
+
16: rate44100,
|
|
1085
|
+
20: rate32000,
|
|
1086
|
+
24: rate24000,
|
|
1087
|
+
28: rate22050,
|
|
1088
|
+
32: rate16000,
|
|
1089
|
+
36: rate12000,
|
|
1090
|
+
40: rate11025,
|
|
1091
|
+
44: rate8000,
|
|
1092
|
+
48: rate7350,
|
|
1093
|
+
52: reserved,
|
|
1094
|
+
56: reserved,
|
|
1095
|
+
60: "frequency is written explicitly"
|
|
1096
|
+
};
|
|
1097
|
+
var channelModeValues = {
|
|
1098
|
+
0: { [channels]: 0, [description]: "Defined in AOT Specific Config" },
|
|
1099
|
+
/*
|
|
1100
|
+
'monophonic (mono)'
|
|
1101
|
+
'stereo (left, right)'
|
|
1102
|
+
'linear surround (front center, front left, front right)'
|
|
1103
|
+
'quadraphonic (front center, front left, front right, rear center)'
|
|
1104
|
+
'5.0 surround (front center, front left, front right, rear left, rear right)'
|
|
1105
|
+
'5.1 surround (front center, front left, front right, rear left, rear right, LFE)'
|
|
1106
|
+
'7.1 surround (front center, front left, front right, side left, side right, rear left, rear right, LFE)'
|
|
1107
|
+
*/
|
|
1108
|
+
64: { [channels]: 1, [description]: monophonic },
|
|
1109
|
+
128: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1110
|
+
192: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[1][3]) },
|
|
1111
|
+
256: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][3], channelMappings[3][4]) },
|
|
1112
|
+
320: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][3], channelMappings[3][0]) },
|
|
1113
|
+
384: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][3], channelMappings[3][0], lfe) },
|
|
1114
|
+
448: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][3], channelMappings[2][0], channelMappings[3][0], lfe) }
|
|
1115
|
+
};
|
|
1116
|
+
var AACHeader = class _AACHeader extends CodecHeader {
|
|
1117
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1118
|
+
const header2 = {};
|
|
1119
|
+
const data3 = yield* codecParser[readRawData](7, readOffset);
|
|
1120
|
+
const key = bytesToString([
|
|
1121
|
+
data3[0],
|
|
1122
|
+
data3[1],
|
|
1123
|
+
data3[2],
|
|
1124
|
+
data3[3] & 252 | data3[6] & 3
|
|
1125
|
+
// frame length, buffer fullness varies so don't cache it
|
|
1126
|
+
]);
|
|
1127
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1128
|
+
if (!cachedHeader) {
|
|
1129
|
+
if (data3[0] !== 255 || data3[1] < 240) return null;
|
|
1130
|
+
header2[mpegVersion] = mpegVersionValues[data3[1] & 8];
|
|
1131
|
+
header2[layer] = layerValues[data3[1] & 6];
|
|
1132
|
+
if (header2[layer] === bad) return null;
|
|
1133
|
+
const protectionBit = data3[1] & 1;
|
|
1134
|
+
header2[protection] = protectionValues2[protectionBit];
|
|
1135
|
+
header2[length] = protectionBit ? 7 : 9;
|
|
1136
|
+
header2[profileBits] = data3[2] & 192;
|
|
1137
|
+
header2[sampleRateBits] = data3[2] & 60;
|
|
1138
|
+
const privateBit = data3[2] & 2;
|
|
1139
|
+
header2[profile] = profileValues[header2[profileBits]];
|
|
1140
|
+
header2[sampleRate] = sampleRates[header2[sampleRateBits]];
|
|
1141
|
+
if (header2[sampleRate] === reserved) return null;
|
|
1142
|
+
header2[isPrivate] = !!privateBit;
|
|
1143
|
+
header2[channelModeBits] = (data3[2] << 8 | data3[3]) & 448;
|
|
1144
|
+
header2[channelMode] = channelModeValues[header2[channelModeBits]][description];
|
|
1145
|
+
header2[channels] = channelModeValues[header2[channelModeBits]][channels];
|
|
1146
|
+
header2[isOriginal] = !!(data3[3] & 32);
|
|
1147
|
+
header2[isHome] = !!(data3[3] & 8);
|
|
1148
|
+
header2[copyrightId] = !!(data3[3] & 8);
|
|
1149
|
+
header2[copyrightIdStart] = !!(data3[3] & 4);
|
|
1150
|
+
header2[bitDepth] = 16;
|
|
1151
|
+
header2[samples] = 1024;
|
|
1152
|
+
header2[numberAACFrames] = data3[6] & 3;
|
|
1153
|
+
{
|
|
1154
|
+
const {
|
|
1155
|
+
length: length2,
|
|
1156
|
+
channelModeBits: channelModeBits2,
|
|
1157
|
+
profileBits: profileBits2,
|
|
1158
|
+
sampleRateBits: sampleRateBits2,
|
|
1159
|
+
frameLength: frameLength2,
|
|
1160
|
+
samples: samples2,
|
|
1161
|
+
numberAACFrames: numberAACFrames2,
|
|
1162
|
+
...codecUpdateFields
|
|
1163
|
+
} = header2;
|
|
1164
|
+
headerCache[setHeader](key, header2, codecUpdateFields);
|
|
1165
|
+
}
|
|
1166
|
+
} else {
|
|
1167
|
+
Object.assign(header2, cachedHeader);
|
|
1168
|
+
}
|
|
1169
|
+
header2[frameLength] = (data3[3] << 11 | data3[4] << 3 | data3[5] >> 5) & 8191;
|
|
1170
|
+
if (!header2[frameLength]) return null;
|
|
1171
|
+
const bufferFullnessBits = (data3[5] << 6 | data3[6] >> 2) & 2047;
|
|
1172
|
+
header2[bufferFullness] = bufferFullnessBits === 2047 ? "VBR" : bufferFullnessBits;
|
|
1173
|
+
return new _AACHeader(header2);
|
|
1174
|
+
}
|
|
1175
|
+
/**
|
|
1176
|
+
* @private
|
|
1177
|
+
* Call AACHeader.getHeader(Array<Uint8>) to get instance
|
|
1178
|
+
*/
|
|
1179
|
+
constructor(header2) {
|
|
1180
|
+
super(header2);
|
|
1181
|
+
this[copyrightId] = header2[copyrightId];
|
|
1182
|
+
this[copyrightIdStart] = header2[copyrightIdStart];
|
|
1183
|
+
this[bufferFullness] = header2[bufferFullness];
|
|
1184
|
+
this[isHome] = header2[isHome];
|
|
1185
|
+
this[isOriginal] = header2[isOriginal];
|
|
1186
|
+
this[isPrivate] = header2[isPrivate];
|
|
1187
|
+
this[layer] = header2[layer];
|
|
1188
|
+
this[length] = header2[length];
|
|
1189
|
+
this[mpegVersion] = header2[mpegVersion];
|
|
1190
|
+
this[numberAACFrames] = header2[numberAACFrames];
|
|
1191
|
+
this[profile] = header2[profile];
|
|
1192
|
+
this[protection] = header2[protection];
|
|
1193
|
+
}
|
|
1194
|
+
get audioSpecificConfig() {
|
|
1195
|
+
const header2 = headerStore.get(this);
|
|
1196
|
+
const audioSpecificConfig = header2[profileBits] + 64 << 5 | header2[sampleRateBits] << 5 | header2[channelModeBits] >> 3;
|
|
1197
|
+
const bytes = new uint8Array(2);
|
|
1198
|
+
new dataView(bytes[buffer]).setUint16(0, audioSpecificConfig, false);
|
|
1199
|
+
return bytes;
|
|
1200
|
+
}
|
|
1201
|
+
};
|
|
1202
|
+
|
|
1203
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACFrame.js
|
|
1204
|
+
var AACFrame = class _AACFrame extends CodecFrame {
|
|
1205
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1206
|
+
return yield* super[getFrame](
|
|
1207
|
+
AACHeader,
|
|
1208
|
+
_AACFrame,
|
|
1209
|
+
codecParser,
|
|
1210
|
+
headerCache,
|
|
1211
|
+
readOffset
|
|
1212
|
+
);
|
|
1213
|
+
}
|
|
1214
|
+
constructor(header2, frame2, samples2) {
|
|
1215
|
+
super(header2, frame2, samples2);
|
|
1216
|
+
}
|
|
1217
|
+
};
|
|
1218
|
+
|
|
1219
|
+
// ../../node_modules/codec-parser/src/codecs/aac/AACParser.js
|
|
1220
|
+
var AACParser = class extends Parser {
|
|
1221
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1222
|
+
super(codecParser, headerCache);
|
|
1223
|
+
this.Frame = AACFrame;
|
|
1224
|
+
this.Header = AACHeader;
|
|
1225
|
+
onCodec(this[codec]);
|
|
1226
|
+
}
|
|
1227
|
+
get [codec]() {
|
|
1228
|
+
return "aac";
|
|
1229
|
+
}
|
|
1230
|
+
*[parseFrame]() {
|
|
1231
|
+
return yield* this[fixedLengthFrameSync]();
|
|
1232
|
+
}
|
|
1233
|
+
};
|
|
1234
|
+
|
|
1235
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACFrame.js
|
|
1236
|
+
var FLACFrame = class _FLACFrame extends CodecFrame {
|
|
1237
|
+
static _getFrameFooterCrc16(data3) {
|
|
1238
|
+
return (data3[data3[length] - 2] << 8) + data3[data3[length] - 1];
|
|
1239
|
+
}
|
|
1240
|
+
// check frame footer crc
|
|
1241
|
+
// https://xiph.org/flac/format.html#frame_footer
|
|
1242
|
+
static [checkFrameFooterCrc16](data3) {
|
|
1243
|
+
const expectedCrc16 = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1244
|
+
const actualCrc16 = flacCrc16(data3[subarray](0, -2));
|
|
1245
|
+
return expectedCrc16 === actualCrc16;
|
|
1246
|
+
}
|
|
1247
|
+
constructor(data3, header2, streamInfoValue) {
|
|
1248
|
+
header2[streamInfo] = streamInfoValue;
|
|
1249
|
+
header2[crc16] = _FLACFrame._getFrameFooterCrc16(data3);
|
|
1250
|
+
super(header2, data3, headerStore.get(header2)[samples]);
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1253
|
+
|
|
1254
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACHeader.js
|
|
1255
|
+
var getFromStreamInfo = "get from STREAMINFO metadata block";
|
|
1256
|
+
var blockingStrategyValues = {
|
|
1257
|
+
0: "Fixed",
|
|
1258
|
+
1: "Variable"
|
|
1259
|
+
};
|
|
1260
|
+
var blockSizeValues = {
|
|
1261
|
+
0: reserved,
|
|
1262
|
+
16: 192
|
|
1263
|
+
// 0b00100000: 576,
|
|
1264
|
+
// 0b00110000: 1152,
|
|
1265
|
+
// 0b01000000: 2304,
|
|
1266
|
+
// 0b01010000: 4608,
|
|
1267
|
+
// 0b01100000: "8-bit (blocksize-1) from end of header",
|
|
1268
|
+
// 0b01110000: "16-bit (blocksize-1) from end of header",
|
|
1269
|
+
// 0b10000000: 256,
|
|
1270
|
+
// 0b10010000: 512,
|
|
1271
|
+
// 0b10100000: 1024,
|
|
1272
|
+
// 0b10110000: 2048,
|
|
1273
|
+
// 0b11000000: 4096,
|
|
1274
|
+
// 0b11010000: 8192,
|
|
1275
|
+
// 0b11100000: 16384,
|
|
1276
|
+
// 0b11110000: 32768,
|
|
1277
|
+
};
|
|
1278
|
+
for (let i = 2; i < 16; i++)
|
|
1279
|
+
blockSizeValues[i << 4] = i < 6 ? 576 * 2 ** (i - 2) : 2 ** i;
|
|
1280
|
+
var sampleRateValues = {
|
|
1281
|
+
0: getFromStreamInfo,
|
|
1282
|
+
1: rate88200,
|
|
1283
|
+
2: rate176400,
|
|
1284
|
+
3: rate192000,
|
|
1285
|
+
4: rate8000,
|
|
1286
|
+
5: rate16000,
|
|
1287
|
+
6: rate22050,
|
|
1288
|
+
7: rate24000,
|
|
1289
|
+
8: rate32000,
|
|
1290
|
+
9: rate44100,
|
|
1291
|
+
10: rate48000,
|
|
1292
|
+
11: rate96000,
|
|
1293
|
+
// 0b00001100: "8-bit sample rate (in kHz) from end of header",
|
|
1294
|
+
// 0b00001101: "16-bit sample rate (in Hz) from end of header",
|
|
1295
|
+
// 0b00001110: "16-bit sample rate (in tens of Hz) from end of header",
|
|
1296
|
+
15: bad
|
|
1297
|
+
};
|
|
1298
|
+
var channelAssignments = {
|
|
1299
|
+
/*'
|
|
1300
|
+
'monophonic (mono)'
|
|
1301
|
+
'stereo (left, right)'
|
|
1302
|
+
'linear surround (left, right, center)'
|
|
1303
|
+
'quadraphonic (front left, front right, rear left, rear right)'
|
|
1304
|
+
'5.0 surround (front left, front right, front center, rear left, rear right)'
|
|
1305
|
+
'5.1 surround (front left, front right, front center, LFE, rear left, rear right)'
|
|
1306
|
+
'6.1 surround (front left, front right, front center, LFE, rear center, side left, side right)'
|
|
1307
|
+
'7.1 surround (front left, front right, front center, LFE, rear left, rear right, side left, side right)'
|
|
1308
|
+
*/
|
|
1309
|
+
0: { [channels]: 1, [description]: monophonic },
|
|
1310
|
+
16: { [channels]: 2, [description]: getChannelMapping(2, channelMappings[0][0]) },
|
|
1311
|
+
32: { [channels]: 3, [description]: getChannelMapping(3, channelMappings[0][1]) },
|
|
1312
|
+
48: { [channels]: 4, [description]: getChannelMapping(4, channelMappings[1][0], channelMappings[3][0]) },
|
|
1313
|
+
64: { [channels]: 5, [description]: getChannelMapping(5, channelMappings[1][1], channelMappings[3][0]) },
|
|
1314
|
+
80: { [channels]: 6, [description]: getChannelMapping(6, channelMappings[1][1], lfe, channelMappings[3][0]) },
|
|
1315
|
+
96: { [channels]: 7, [description]: getChannelMapping(7, channelMappings[1][1], lfe, channelMappings[3][4], channelMappings[2][0]) },
|
|
1316
|
+
112: { [channels]: 8, [description]: getChannelMapping(8, channelMappings[1][1], lfe, channelMappings[3][0], channelMappings[2][0]) },
|
|
1317
|
+
128: { [channels]: 2, [description]: `${stereo} (left, diff)` },
|
|
1318
|
+
144: { [channels]: 2, [description]: `${stereo} (diff, right)` },
|
|
1319
|
+
160: { [channels]: 2, [description]: `${stereo} (avg, diff)` },
|
|
1320
|
+
176: reserved,
|
|
1321
|
+
192: reserved,
|
|
1322
|
+
208: reserved,
|
|
1323
|
+
224: reserved,
|
|
1324
|
+
240: reserved
|
|
1325
|
+
};
|
|
1326
|
+
var bitDepthValues = {
|
|
1327
|
+
0: getFromStreamInfo,
|
|
1328
|
+
2: 8,
|
|
1329
|
+
4: 12,
|
|
1330
|
+
6: reserved,
|
|
1331
|
+
8: 16,
|
|
1332
|
+
10: 20,
|
|
1333
|
+
12: 24,
|
|
1334
|
+
14: reserved
|
|
1335
|
+
};
|
|
1336
|
+
var FLACHeader = class _FLACHeader extends CodecHeader {
|
|
1337
|
+
// https://datatracker.ietf.org/doc/html/rfc3629#section-3
|
|
1338
|
+
// Char. number range | UTF-8 octet sequence
|
|
1339
|
+
// (hexadecimal) | (binary)
|
|
1340
|
+
// --------------------+---------------------------------------------
|
|
1341
|
+
// 0000 0000-0000 007F | 0xxxxxxx
|
|
1342
|
+
// 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
|
|
1343
|
+
// 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
|
|
1344
|
+
// 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
1345
|
+
static _decodeUTF8Int(data3) {
|
|
1346
|
+
if (data3[0] > 254) {
|
|
1347
|
+
return null;
|
|
1348
|
+
}
|
|
1349
|
+
if (data3[0] < 128) return { value: data3[0], length: 1 };
|
|
1350
|
+
let length2 = 1;
|
|
1351
|
+
for (let zeroMask = 64; zeroMask & data3[0]; zeroMask >>= 1) length2++;
|
|
1352
|
+
let idx = length2 - 1, value = 0, shift = 0;
|
|
1353
|
+
for (; idx > 0; shift += 6, idx--) {
|
|
1354
|
+
if ((data3[idx] & 192) !== 128) {
|
|
1355
|
+
return null;
|
|
1356
|
+
}
|
|
1357
|
+
value |= (data3[idx] & 63) << shift;
|
|
1358
|
+
}
|
|
1359
|
+
value |= (data3[idx] & 127 >> length2) << shift;
|
|
1360
|
+
return { value, length: length2 };
|
|
1361
|
+
}
|
|
1362
|
+
static [getHeaderFromUint8Array](data3, headerCache) {
|
|
1363
|
+
const codecParserStub = {
|
|
1364
|
+
[readRawData]: function* () {
|
|
1365
|
+
return data3;
|
|
1366
|
+
}
|
|
1367
|
+
};
|
|
1368
|
+
return _FLACHeader[getHeader](codecParserStub, headerCache, 0).next().value;
|
|
1369
|
+
}
|
|
1370
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1371
|
+
let data3 = yield* codecParser[readRawData](6, readOffset);
|
|
1372
|
+
if (data3[0] !== 255 || !(data3[1] === 248 || data3[1] === 249)) {
|
|
1373
|
+
return null;
|
|
1374
|
+
}
|
|
1375
|
+
const header2 = {};
|
|
1376
|
+
const key = bytesToString(data3[subarray](0, 4));
|
|
1377
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1378
|
+
if (!cachedHeader) {
|
|
1379
|
+
header2[blockingStrategyBits] = data3[1] & 1;
|
|
1380
|
+
header2[blockingStrategy] = blockingStrategyValues[header2[blockingStrategyBits]];
|
|
1381
|
+
header2[blockSizeBits] = data3[2] & 240;
|
|
1382
|
+
header2[sampleRateBits] = data3[2] & 15;
|
|
1383
|
+
header2[blockSize] = blockSizeValues[header2[blockSizeBits]];
|
|
1384
|
+
if (header2[blockSize] === reserved) {
|
|
1385
|
+
return null;
|
|
1386
|
+
}
|
|
1387
|
+
header2[sampleRate] = sampleRateValues[header2[sampleRateBits]];
|
|
1388
|
+
if (header2[sampleRate] === bad) {
|
|
1389
|
+
return null;
|
|
1390
|
+
}
|
|
1391
|
+
if (data3[3] & 1) {
|
|
1392
|
+
return null;
|
|
1393
|
+
}
|
|
1394
|
+
const channelAssignment = channelAssignments[data3[3] & 240];
|
|
1395
|
+
if (channelAssignment === reserved) {
|
|
1396
|
+
return null;
|
|
1397
|
+
}
|
|
1398
|
+
header2[channels] = channelAssignment[channels];
|
|
1399
|
+
header2[channelMode] = channelAssignment[description];
|
|
1400
|
+
header2[bitDepth] = bitDepthValues[data3[3] & 14];
|
|
1401
|
+
if (header2[bitDepth] === reserved) {
|
|
1402
|
+
return null;
|
|
1403
|
+
}
|
|
1404
|
+
} else {
|
|
1405
|
+
Object.assign(header2, cachedHeader);
|
|
1406
|
+
}
|
|
1407
|
+
header2[length] = 5;
|
|
1408
|
+
data3 = yield* codecParser[readRawData](header2[length] + 8, readOffset);
|
|
1409
|
+
const decodedUtf8 = _FLACHeader._decodeUTF8Int(data3[subarray](4));
|
|
1410
|
+
if (!decodedUtf8) {
|
|
1411
|
+
return null;
|
|
1412
|
+
}
|
|
1413
|
+
if (header2[blockingStrategyBits]) {
|
|
1414
|
+
header2[sampleNumber] = decodedUtf8.value;
|
|
1415
|
+
} else {
|
|
1416
|
+
header2[frameNumber] = decodedUtf8.value;
|
|
1417
|
+
}
|
|
1418
|
+
header2[length] += decodedUtf8[length];
|
|
1419
|
+
if (header2[blockSizeBits] === 96) {
|
|
1420
|
+
if (data3[length] < header2[length])
|
|
1421
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1422
|
+
header2[blockSize] = data3[header2[length] - 1] + 1;
|
|
1423
|
+
header2[length] += 1;
|
|
1424
|
+
} else if (header2[blockSizeBits] === 112) {
|
|
1425
|
+
if (data3[length] < header2[length])
|
|
1426
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1427
|
+
header2[blockSize] = (data3[header2[length] - 1] << 8) + data3[header2[length]] + 1;
|
|
1428
|
+
header2[length] += 2;
|
|
1429
|
+
}
|
|
1430
|
+
header2[samples] = header2[blockSize];
|
|
1431
|
+
if (header2[sampleRateBits] === 12) {
|
|
1432
|
+
if (data3[length] < header2[length])
|
|
1433
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1434
|
+
header2[sampleRate] = data3[header2[length] - 1] * 1e3;
|
|
1435
|
+
header2[length] += 1;
|
|
1436
|
+
} else if (header2[sampleRateBits] === 13) {
|
|
1437
|
+
if (data3[length] < header2[length])
|
|
1438
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1439
|
+
header2[sampleRate] = (data3[header2[length] - 1] << 8) + data3[header2[length]];
|
|
1440
|
+
header2[length] += 2;
|
|
1441
|
+
} else if (header2[sampleRateBits] === 14) {
|
|
1442
|
+
if (data3[length] < header2[length])
|
|
1443
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1444
|
+
header2[sampleRate] = ((data3[header2[length] - 1] << 8) + data3[header2[length]]) * 10;
|
|
1445
|
+
header2[length] += 2;
|
|
1446
|
+
}
|
|
1447
|
+
if (data3[length] < header2[length])
|
|
1448
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1449
|
+
header2[crc] = data3[header2[length] - 1];
|
|
1450
|
+
if (header2[crc] !== crc8(data3[subarray](0, header2[length] - 1))) {
|
|
1451
|
+
return null;
|
|
1452
|
+
}
|
|
1453
|
+
{
|
|
1454
|
+
if (!cachedHeader) {
|
|
1455
|
+
const {
|
|
1456
|
+
blockingStrategyBits: blockingStrategyBits2,
|
|
1457
|
+
frameNumber: frameNumber2,
|
|
1458
|
+
sampleNumber: sampleNumber2,
|
|
1459
|
+
samples: samples2,
|
|
1460
|
+
sampleRateBits: sampleRateBits2,
|
|
1461
|
+
blockSizeBits: blockSizeBits2,
|
|
1462
|
+
crc: crc2,
|
|
1463
|
+
length: length2,
|
|
1464
|
+
...codecUpdateFields
|
|
1465
|
+
} = header2;
|
|
1466
|
+
headerCache[setHeader](key, header2, codecUpdateFields);
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1469
|
+
return new _FLACHeader(header2);
|
|
1470
|
+
}
|
|
1471
|
+
/**
|
|
1472
|
+
* @private
|
|
1473
|
+
* Call FLACHeader.getHeader(Array<Uint8>) to get instance
|
|
1474
|
+
*/
|
|
1475
|
+
constructor(header2) {
|
|
1476
|
+
super(header2);
|
|
1477
|
+
this[crc16] = null;
|
|
1478
|
+
this[blockingStrategy] = header2[blockingStrategy];
|
|
1479
|
+
this[blockSize] = header2[blockSize];
|
|
1480
|
+
this[frameNumber] = header2[frameNumber];
|
|
1481
|
+
this[sampleNumber] = header2[sampleNumber];
|
|
1482
|
+
this[streamInfo] = null;
|
|
1483
|
+
}
|
|
1484
|
+
};
|
|
1485
|
+
|
|
1486
|
+
// ../../node_modules/codec-parser/src/codecs/flac/FLACParser.js
|
|
1487
|
+
var MIN_FLAC_FRAME_SIZE = 2;
|
|
1488
|
+
var MAX_FLAC_FRAME_SIZE = 512 * 1024;
|
|
1489
|
+
var FLACParser = class extends Parser {
|
|
1490
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1491
|
+
super(codecParser, headerCache);
|
|
1492
|
+
this.Frame = FLACFrame;
|
|
1493
|
+
this.Header = FLACHeader;
|
|
1494
|
+
onCodec(this[codec]);
|
|
1495
|
+
}
|
|
1496
|
+
get [codec]() {
|
|
1497
|
+
return "flac";
|
|
1498
|
+
}
|
|
1499
|
+
*_getNextFrameSyncOffset(offset) {
|
|
1500
|
+
const data3 = yield* this._codecParser[readRawData](2, 0);
|
|
1501
|
+
const dataLength = data3[length] - 2;
|
|
1502
|
+
while (offset < dataLength) {
|
|
1503
|
+
const firstByte = data3[offset];
|
|
1504
|
+
if (firstByte === 255) {
|
|
1505
|
+
const secondByte = data3[offset + 1];
|
|
1506
|
+
if (secondByte === 248 || secondByte === 249) break;
|
|
1507
|
+
if (secondByte !== 255) offset++;
|
|
1508
|
+
}
|
|
1509
|
+
offset++;
|
|
1510
|
+
}
|
|
1511
|
+
return offset;
|
|
1512
|
+
}
|
|
1513
|
+
*[parseFrame]() {
|
|
1514
|
+
do {
|
|
1515
|
+
const header2 = yield* FLACHeader[getHeader](
|
|
1516
|
+
this._codecParser,
|
|
1517
|
+
this._headerCache,
|
|
1518
|
+
0
|
|
1519
|
+
);
|
|
1520
|
+
if (header2) {
|
|
1521
|
+
let nextHeaderOffset = headerStore.get(header2)[length] + MIN_FLAC_FRAME_SIZE;
|
|
1522
|
+
while (nextHeaderOffset <= MAX_FLAC_FRAME_SIZE) {
|
|
1523
|
+
if (this._codecParser._flushing || (yield* FLACHeader[getHeader](
|
|
1524
|
+
this._codecParser,
|
|
1525
|
+
this._headerCache,
|
|
1526
|
+
nextHeaderOffset
|
|
1527
|
+
))) {
|
|
1528
|
+
let frameData = yield* this._codecParser[readRawData](nextHeaderOffset);
|
|
1529
|
+
if (!this._codecParser._flushing)
|
|
1530
|
+
frameData = frameData[subarray](0, nextHeaderOffset);
|
|
1531
|
+
if (FLACFrame[checkFrameFooterCrc16](frameData)) {
|
|
1532
|
+
const frame2 = new FLACFrame(frameData, header2);
|
|
1533
|
+
this._headerCache[enable]();
|
|
1534
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
1535
|
+
this._codecParser[mapFrameStats](frame2);
|
|
1536
|
+
return frame2;
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
nextHeaderOffset = yield* this._getNextFrameSyncOffset(
|
|
1540
|
+
nextHeaderOffset + 1
|
|
1541
|
+
);
|
|
1542
|
+
}
|
|
1543
|
+
this._codecParser[logWarning](
|
|
1544
|
+
`Unable to sync FLAC frame after searching ${nextHeaderOffset} bytes.`
|
|
1545
|
+
);
|
|
1546
|
+
this._codecParser[incrementRawData](nextHeaderOffset);
|
|
1547
|
+
} else {
|
|
1548
|
+
this._codecParser[incrementRawData](
|
|
1549
|
+
yield* this._getNextFrameSyncOffset(1)
|
|
1550
|
+
);
|
|
1551
|
+
}
|
|
1552
|
+
} while (true);
|
|
1553
|
+
}
|
|
1554
|
+
[parseOggPage](oggPage) {
|
|
1555
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
1556
|
+
this._headerCache[enable]();
|
|
1557
|
+
this._streamInfo = oggPage[data][subarray](13);
|
|
1558
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
1559
|
+
} else {
|
|
1560
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
1561
|
+
const header2 = FLACHeader[getHeaderFromUint8Array](
|
|
1562
|
+
segment,
|
|
1563
|
+
this._headerCache
|
|
1564
|
+
);
|
|
1565
|
+
if (header2) {
|
|
1566
|
+
return new FLACFrame(segment, header2, this._streamInfo);
|
|
1567
|
+
} else {
|
|
1568
|
+
this._codecParser[logWarning](
|
|
1569
|
+
"Failed to parse Ogg FLAC frame",
|
|
1570
|
+
"Skipping invalid FLAC frame"
|
|
1571
|
+
);
|
|
1572
|
+
}
|
|
1573
|
+
}).filter((frame2) => !!frame2);
|
|
1574
|
+
}
|
|
1575
|
+
return oggPage;
|
|
1576
|
+
}
|
|
1577
|
+
};
|
|
1578
|
+
|
|
1579
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPageHeader.js
|
|
1580
|
+
var OggPageHeader = class _OggPageHeader {
|
|
1581
|
+
static *[getHeader](codecParser, headerCache, readOffset) {
|
|
1582
|
+
const header2 = {};
|
|
1583
|
+
let data3 = yield* codecParser[readRawData](28, readOffset);
|
|
1584
|
+
if (data3[0] !== 79 || // O
|
|
1585
|
+
data3[1] !== 103 || // g
|
|
1586
|
+
data3[2] !== 103 || // g
|
|
1587
|
+
data3[3] !== 83) {
|
|
1588
|
+
return null;
|
|
1589
|
+
}
|
|
1590
|
+
header2[streamStructureVersion] = data3[4];
|
|
1591
|
+
const zeros = data3[5] & 248;
|
|
1592
|
+
if (zeros) return null;
|
|
1593
|
+
header2[isLastPage] = !!(data3[5] & 4);
|
|
1594
|
+
header2[isFirstPage] = !!(data3[5] & 2);
|
|
1595
|
+
header2[isContinuedPacket] = !!(data3[5] & 1);
|
|
1596
|
+
const view = new dataView(uint8Array.from(data3[subarray](0, 28))[buffer]);
|
|
1597
|
+
header2[absoluteGranulePosition] = readInt64le(view, 6);
|
|
1598
|
+
header2[streamSerialNumber] = view.getInt32(14, true);
|
|
1599
|
+
header2[pageSequenceNumber] = view.getInt32(18, true);
|
|
1600
|
+
header2[pageChecksum] = view.getInt32(22, true);
|
|
1601
|
+
const pageSegmentTableLength = data3[26];
|
|
1602
|
+
header2[length] = pageSegmentTableLength + 27;
|
|
1603
|
+
data3 = yield* codecParser[readRawData](header2[length], readOffset);
|
|
1604
|
+
header2[frameLength] = 0;
|
|
1605
|
+
header2[pageSegmentTable] = [];
|
|
1606
|
+
header2[pageSegmentBytes] = uint8Array.from(
|
|
1607
|
+
data3[subarray](27, header2[length])
|
|
1608
|
+
);
|
|
1609
|
+
for (let i = 0, segmentLength = 0; i < pageSegmentTableLength; i++) {
|
|
1610
|
+
const segmentByte = header2[pageSegmentBytes][i];
|
|
1611
|
+
header2[frameLength] += segmentByte;
|
|
1612
|
+
segmentLength += segmentByte;
|
|
1613
|
+
if (segmentByte !== 255 || i === pageSegmentTableLength - 1) {
|
|
1614
|
+
header2[pageSegmentTable].push(segmentLength);
|
|
1615
|
+
segmentLength = 0;
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
return new _OggPageHeader(header2);
|
|
1619
|
+
}
|
|
1620
|
+
/**
|
|
1621
|
+
* @private
|
|
1622
|
+
* Call OggPageHeader.getHeader(Array<Uint8>) to get instance
|
|
1623
|
+
*/
|
|
1624
|
+
constructor(header2) {
|
|
1625
|
+
headerStore.set(this, header2);
|
|
1626
|
+
this[absoluteGranulePosition] = header2[absoluteGranulePosition];
|
|
1627
|
+
this[isContinuedPacket] = header2[isContinuedPacket];
|
|
1628
|
+
this[isFirstPage] = header2[isFirstPage];
|
|
1629
|
+
this[isLastPage] = header2[isLastPage];
|
|
1630
|
+
this[pageSegmentTable] = header2[pageSegmentTable];
|
|
1631
|
+
this[pageSequenceNumber] = header2[pageSequenceNumber];
|
|
1632
|
+
this[pageChecksum] = header2[pageChecksum];
|
|
1633
|
+
this[streamSerialNumber] = header2[streamSerialNumber];
|
|
1634
|
+
}
|
|
1635
|
+
};
|
|
1636
|
+
|
|
1637
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggPage.js
|
|
1638
|
+
var OggPage = class _OggPage extends Frame {
|
|
1639
|
+
static *[getFrame](codecParser, headerCache, readOffset) {
|
|
1640
|
+
const header2 = yield* OggPageHeader[getHeader](
|
|
1641
|
+
codecParser,
|
|
1642
|
+
headerCache,
|
|
1643
|
+
readOffset
|
|
1644
|
+
);
|
|
1645
|
+
if (header2) {
|
|
1646
|
+
const frameLengthValue = headerStore.get(header2)[frameLength];
|
|
1647
|
+
const headerLength = headerStore.get(header2)[length];
|
|
1648
|
+
const totalLength = headerLength + frameLengthValue;
|
|
1649
|
+
const rawDataValue = (yield* codecParser[readRawData](totalLength, 0))[subarray](0, totalLength);
|
|
1650
|
+
const frame2 = rawDataValue[subarray](headerLength, totalLength);
|
|
1651
|
+
return new _OggPage(header2, frame2, rawDataValue);
|
|
1652
|
+
} else {
|
|
1653
|
+
return null;
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
constructor(header2, frame2, rawDataValue) {
|
|
1657
|
+
super(header2, frame2);
|
|
1658
|
+
frameStore.get(this)[length] = rawDataValue[length];
|
|
1659
|
+
this[codecFrames] = [];
|
|
1660
|
+
this[rawData] = rawDataValue;
|
|
1661
|
+
this[absoluteGranulePosition] = header2[absoluteGranulePosition];
|
|
1662
|
+
this[crc32] = header2[pageChecksum];
|
|
1663
|
+
this[duration] = 0;
|
|
1664
|
+
this[isContinuedPacket] = header2[isContinuedPacket];
|
|
1665
|
+
this[isFirstPage] = header2[isFirstPage];
|
|
1666
|
+
this[isLastPage] = header2[isLastPage];
|
|
1667
|
+
this[pageSequenceNumber] = header2[pageSequenceNumber];
|
|
1668
|
+
this[samples] = 0;
|
|
1669
|
+
this[streamSerialNumber] = header2[streamSerialNumber];
|
|
1670
|
+
}
|
|
1671
|
+
};
|
|
1672
|
+
|
|
1673
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusFrame.js
|
|
1674
|
+
var OpusFrame = class extends CodecFrame {
|
|
1675
|
+
constructor(data3, header2, samples2) {
|
|
1676
|
+
super(header2, data3, samples2);
|
|
1677
|
+
}
|
|
1678
|
+
};
|
|
1679
|
+
|
|
1680
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusHeader.js
|
|
1681
|
+
var channelMappingFamilies = {
|
|
1682
|
+
0: vorbisOpusChannelMapping.slice(0, 2),
|
|
1683
|
+
/*
|
|
1684
|
+
0: "monophonic (mono)"
|
|
1685
|
+
1: "stereo (left, right)"
|
|
1686
|
+
*/
|
|
1687
|
+
1: vorbisOpusChannelMapping
|
|
1688
|
+
/*
|
|
1689
|
+
0: "monophonic (mono)"
|
|
1690
|
+
1: "stereo (left, right)"
|
|
1691
|
+
2: "linear surround (left, center, right)"
|
|
1692
|
+
3: "quadraphonic (front left, front right, rear left, rear right)"
|
|
1693
|
+
4: "5.0 surround (front left, front center, front right, rear left, rear right)"
|
|
1694
|
+
5: "5.1 surround (front left, front center, front right, rear left, rear right, LFE)"
|
|
1695
|
+
6: "6.1 surround (front left, front center, front right, side left, side right, rear center, LFE)"
|
|
1696
|
+
7: "7.1 surround (front left, front center, front right, side left, side right, rear left, rear right, LFE)"
|
|
1697
|
+
*/
|
|
1698
|
+
// additional channel mappings are user defined
|
|
1699
|
+
};
|
|
1700
|
+
var silkOnly = "SILK-only";
|
|
1701
|
+
var celtOnly = "CELT-only";
|
|
1702
|
+
var hybrid = "Hybrid";
|
|
1703
|
+
var narrowBand = "narrowband";
|
|
1704
|
+
var mediumBand = "medium-band";
|
|
1705
|
+
var wideBand = "wideband";
|
|
1706
|
+
var superWideBand = "super-wideband";
|
|
1707
|
+
var fullBand = "fullband";
|
|
1708
|
+
var configTable = {
|
|
1709
|
+
0: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
1710
|
+
8: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
1711
|
+
16: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 40 },
|
|
1712
|
+
24: { [mode]: silkOnly, [bandwidth]: narrowBand, [frameSize]: 60 },
|
|
1713
|
+
32: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 10 },
|
|
1714
|
+
40: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 20 },
|
|
1715
|
+
48: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 40 },
|
|
1716
|
+
56: { [mode]: silkOnly, [bandwidth]: mediumBand, [frameSize]: 60 },
|
|
1717
|
+
64: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
1718
|
+
72: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
1719
|
+
80: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 40 },
|
|
1720
|
+
88: { [mode]: silkOnly, [bandwidth]: wideBand, [frameSize]: 60 },
|
|
1721
|
+
96: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
1722
|
+
104: { [mode]: hybrid, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
1723
|
+
112: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
1724
|
+
120: { [mode]: hybrid, [bandwidth]: fullBand, [frameSize]: 20 },
|
|
1725
|
+
128: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 2.5 },
|
|
1726
|
+
136: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 5 },
|
|
1727
|
+
144: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 10 },
|
|
1728
|
+
152: { [mode]: celtOnly, [bandwidth]: narrowBand, [frameSize]: 20 },
|
|
1729
|
+
160: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 2.5 },
|
|
1730
|
+
168: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 5 },
|
|
1731
|
+
176: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 10 },
|
|
1732
|
+
184: { [mode]: celtOnly, [bandwidth]: wideBand, [frameSize]: 20 },
|
|
1733
|
+
192: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 2.5 },
|
|
1734
|
+
200: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 5 },
|
|
1735
|
+
208: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 10 },
|
|
1736
|
+
216: { [mode]: celtOnly, [bandwidth]: superWideBand, [frameSize]: 20 },
|
|
1737
|
+
224: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 2.5 },
|
|
1738
|
+
232: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 5 },
|
|
1739
|
+
240: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 10 },
|
|
1740
|
+
248: { [mode]: celtOnly, [bandwidth]: fullBand, [frameSize]: 20 }
|
|
1741
|
+
};
|
|
1742
|
+
var OpusHeader = class _OpusHeader extends CodecHeader {
|
|
1743
|
+
static [getHeaderFromUint8Array](dataValue, packetData, headerCache) {
|
|
1744
|
+
const header2 = {};
|
|
1745
|
+
header2[channels] = dataValue[9];
|
|
1746
|
+
header2[channelMappingFamily] = dataValue[18];
|
|
1747
|
+
header2[length] = header2[channelMappingFamily] !== 0 ? 21 + header2[channels] : 19;
|
|
1748
|
+
if (dataValue[length] < header2[length])
|
|
1749
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
1750
|
+
const packetMode = packetData[0] & 3;
|
|
1751
|
+
const packetLength = packetMode === 3 ? 2 : 1;
|
|
1752
|
+
const key = bytesToString(dataValue[subarray](0, header2[length])) + bytesToString(packetData[subarray](0, packetLength));
|
|
1753
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1754
|
+
if (cachedHeader) return new _OpusHeader(cachedHeader);
|
|
1755
|
+
if (key.substr(0, 8) !== "OpusHead") {
|
|
1756
|
+
return null;
|
|
1757
|
+
}
|
|
1758
|
+
if (dataValue[8] !== 1) return null;
|
|
1759
|
+
header2[data] = uint8Array.from(dataValue[subarray](0, header2[length]));
|
|
1760
|
+
const view = new dataView(header2[data][buffer]);
|
|
1761
|
+
header2[bitDepth] = 16;
|
|
1762
|
+
header2[preSkip] = view.getUint16(10, true);
|
|
1763
|
+
header2[inputSampleRate] = view.getUint32(12, true);
|
|
1764
|
+
header2[sampleRate] = rate48000;
|
|
1765
|
+
header2[outputGain] = view.getInt16(16, true);
|
|
1766
|
+
if (header2[channelMappingFamily] in channelMappingFamilies) {
|
|
1767
|
+
header2[channelMode] = channelMappingFamilies[header2[channelMappingFamily]][header2[channels] - 1];
|
|
1768
|
+
if (!header2[channelMode]) return null;
|
|
1769
|
+
}
|
|
1770
|
+
if (header2[channelMappingFamily] !== 0) {
|
|
1771
|
+
header2[streamCount] = dataValue[19];
|
|
1772
|
+
header2[coupledStreamCount] = dataValue[20];
|
|
1773
|
+
header2[channelMappingTable] = [
|
|
1774
|
+
...dataValue[subarray](21, header2[channels] + 21)
|
|
1775
|
+
];
|
|
1776
|
+
}
|
|
1777
|
+
const packetConfig = configTable[248 & packetData[0]];
|
|
1778
|
+
header2[mode] = packetConfig[mode];
|
|
1779
|
+
header2[bandwidth] = packetConfig[bandwidth];
|
|
1780
|
+
header2[frameSize] = packetConfig[frameSize];
|
|
1781
|
+
switch (packetMode) {
|
|
1782
|
+
case 0:
|
|
1783
|
+
header2[frameCount] = 1;
|
|
1784
|
+
break;
|
|
1785
|
+
case 1:
|
|
1786
|
+
// 1: 2 frames in the packet, each with equal compressed size
|
|
1787
|
+
case 2:
|
|
1788
|
+
header2[frameCount] = 2;
|
|
1789
|
+
break;
|
|
1790
|
+
case 3:
|
|
1791
|
+
header2[isVbr] = !!(128 & packetData[1]);
|
|
1792
|
+
header2[hasOpusPadding] = !!(64 & packetData[1]);
|
|
1793
|
+
header2[frameCount] = 63 & packetData[1];
|
|
1794
|
+
break;
|
|
1795
|
+
default:
|
|
1796
|
+
return null;
|
|
1797
|
+
}
|
|
1798
|
+
{
|
|
1799
|
+
const {
|
|
1800
|
+
length: length2,
|
|
1801
|
+
data: headerData,
|
|
1802
|
+
channelMappingFamily: channelMappingFamily2,
|
|
1803
|
+
...codecUpdateFields
|
|
1804
|
+
} = header2;
|
|
1805
|
+
headerCache[setHeader](key, header2, codecUpdateFields);
|
|
1806
|
+
}
|
|
1807
|
+
return new _OpusHeader(header2);
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* @private
|
|
1811
|
+
* Call OpusHeader.getHeader(Array<Uint8>) to get instance
|
|
1812
|
+
*/
|
|
1813
|
+
constructor(header2) {
|
|
1814
|
+
super(header2);
|
|
1815
|
+
this[data] = header2[data];
|
|
1816
|
+
this[bandwidth] = header2[bandwidth];
|
|
1817
|
+
this[channelMappingFamily] = header2[channelMappingFamily];
|
|
1818
|
+
this[channelMappingTable] = header2[channelMappingTable];
|
|
1819
|
+
this[coupledStreamCount] = header2[coupledStreamCount];
|
|
1820
|
+
this[frameCount] = header2[frameCount];
|
|
1821
|
+
this[frameSize] = header2[frameSize];
|
|
1822
|
+
this[hasOpusPadding] = header2[hasOpusPadding];
|
|
1823
|
+
this[inputSampleRate] = header2[inputSampleRate];
|
|
1824
|
+
this[isVbr] = header2[isVbr];
|
|
1825
|
+
this[mode] = header2[mode];
|
|
1826
|
+
this[outputGain] = header2[outputGain];
|
|
1827
|
+
this[preSkip] = header2[preSkip];
|
|
1828
|
+
this[streamCount] = header2[streamCount];
|
|
1829
|
+
}
|
|
1830
|
+
};
|
|
1831
|
+
|
|
1832
|
+
// ../../node_modules/codec-parser/src/codecs/opus/OpusParser.js
|
|
1833
|
+
var OpusParser = class extends Parser {
|
|
1834
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1835
|
+
super(codecParser, headerCache);
|
|
1836
|
+
this.Frame = OpusFrame;
|
|
1837
|
+
this.Header = OpusHeader;
|
|
1838
|
+
onCodec(this[codec]);
|
|
1839
|
+
this._identificationHeader = null;
|
|
1840
|
+
this._preSkipRemaining = null;
|
|
1841
|
+
}
|
|
1842
|
+
get [codec]() {
|
|
1843
|
+
return "opus";
|
|
1844
|
+
}
|
|
1845
|
+
/**
|
|
1846
|
+
* @todo implement continued page support
|
|
1847
|
+
*/
|
|
1848
|
+
[parseOggPage](oggPage) {
|
|
1849
|
+
if (oggPage[pageSequenceNumber] === 0) {
|
|
1850
|
+
this._headerCache[enable]();
|
|
1851
|
+
this._identificationHeader = oggPage[data];
|
|
1852
|
+
} else if (oggPage[pageSequenceNumber] === 1) {
|
|
1853
|
+
} else {
|
|
1854
|
+
oggPage[codecFrames] = frameStore.get(oggPage)[segments].map((segment) => {
|
|
1855
|
+
const header2 = OpusHeader[getHeaderFromUint8Array](
|
|
1856
|
+
this._identificationHeader,
|
|
1857
|
+
segment,
|
|
1858
|
+
this._headerCache
|
|
1859
|
+
);
|
|
1860
|
+
if (header2) {
|
|
1861
|
+
if (this._preSkipRemaining === null)
|
|
1862
|
+
this._preSkipRemaining = header2[preSkip];
|
|
1863
|
+
let samples2 = header2[frameSize] * header2[frameCount] / 1e3 * header2[sampleRate];
|
|
1864
|
+
if (this._preSkipRemaining > 0) {
|
|
1865
|
+
this._preSkipRemaining -= samples2;
|
|
1866
|
+
samples2 = this._preSkipRemaining < 0 ? -this._preSkipRemaining : 0;
|
|
1867
|
+
}
|
|
1868
|
+
return new OpusFrame(segment, header2, samples2);
|
|
1869
|
+
}
|
|
1870
|
+
this._codecParser[logError2](
|
|
1871
|
+
"Failed to parse Ogg Opus Header",
|
|
1872
|
+
"Not a valid Ogg Opus file"
|
|
1873
|
+
);
|
|
1874
|
+
});
|
|
1875
|
+
}
|
|
1876
|
+
return oggPage;
|
|
1877
|
+
}
|
|
1878
|
+
};
|
|
1879
|
+
|
|
1880
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisFrame.js
|
|
1881
|
+
var VorbisFrame = class extends CodecFrame {
|
|
1882
|
+
constructor(data3, header2, samples2) {
|
|
1883
|
+
super(header2, data3, samples2);
|
|
1884
|
+
}
|
|
1885
|
+
};
|
|
1886
|
+
|
|
1887
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisHeader.js
|
|
1888
|
+
var blockSizes = {
|
|
1889
|
+
// 0b0110: 64,
|
|
1890
|
+
// 0b0111: 128,
|
|
1891
|
+
// 0b1000: 256,
|
|
1892
|
+
// 0b1001: 512,
|
|
1893
|
+
// 0b1010: 1024,
|
|
1894
|
+
// 0b1011: 2048,
|
|
1895
|
+
// 0b1100: 4096,
|
|
1896
|
+
// 0b1101: 8192
|
|
1897
|
+
};
|
|
1898
|
+
for (let i = 0; i < 8; i++) blockSizes[i + 6] = 2 ** (6 + i);
|
|
1899
|
+
var VorbisHeader = class _VorbisHeader extends CodecHeader {
|
|
1900
|
+
static [getHeaderFromUint8Array](dataValue, headerCache, vorbisCommentsData, vorbisSetupData) {
|
|
1901
|
+
if (dataValue[length] < 30)
|
|
1902
|
+
throw new Error("Out of data while inside an Ogg Page");
|
|
1903
|
+
const key = bytesToString(dataValue[subarray](0, 30));
|
|
1904
|
+
const cachedHeader = headerCache[getHeader](key);
|
|
1905
|
+
if (cachedHeader) return new _VorbisHeader(cachedHeader);
|
|
1906
|
+
const header2 = { [length]: 30 };
|
|
1907
|
+
if (key.substr(0, 7) !== "vorbis") {
|
|
1908
|
+
return null;
|
|
1909
|
+
}
|
|
1910
|
+
header2[data] = uint8Array.from(dataValue[subarray](0, 30));
|
|
1911
|
+
const view = new dataView(header2[data][buffer]);
|
|
1912
|
+
header2[version] = view.getUint32(7, true);
|
|
1913
|
+
if (header2[version] !== 0) return null;
|
|
1914
|
+
header2[channels] = dataValue[11];
|
|
1915
|
+
header2[channelMode] = vorbisOpusChannelMapping[header2[channels] - 1] || "application defined";
|
|
1916
|
+
header2[sampleRate] = view.getUint32(12, true);
|
|
1917
|
+
header2[bitrateMaximum] = view.getInt32(16, true);
|
|
1918
|
+
header2[bitrateNominal] = view.getInt32(20, true);
|
|
1919
|
+
header2[bitrateMinimum] = view.getInt32(24, true);
|
|
1920
|
+
header2[blocksize1] = blockSizes[(dataValue[28] & 240) >> 4];
|
|
1921
|
+
header2[blocksize0] = blockSizes[dataValue[28] & 15];
|
|
1922
|
+
if (header2[blocksize0] > header2[blocksize1]) return null;
|
|
1923
|
+
if (dataValue[29] !== 1) return null;
|
|
1924
|
+
header2[bitDepth] = 32;
|
|
1925
|
+
header2[vorbisSetup] = vorbisSetupData;
|
|
1926
|
+
header2[vorbisComments] = vorbisCommentsData;
|
|
1927
|
+
{
|
|
1928
|
+
const {
|
|
1929
|
+
length: length2,
|
|
1930
|
+
data: data3,
|
|
1931
|
+
version: version2,
|
|
1932
|
+
vorbisSetup: vorbisSetup2,
|
|
1933
|
+
vorbisComments: vorbisComments2,
|
|
1934
|
+
...codecUpdateFields
|
|
1935
|
+
} = header2;
|
|
1936
|
+
headerCache[setHeader](key, header2, codecUpdateFields);
|
|
1937
|
+
}
|
|
1938
|
+
return new _VorbisHeader(header2);
|
|
1939
|
+
}
|
|
1940
|
+
/**
|
|
1941
|
+
* @private
|
|
1942
|
+
* Call VorbisHeader.getHeader(Array<Uint8>) to get instance
|
|
1943
|
+
*/
|
|
1944
|
+
constructor(header2) {
|
|
1945
|
+
super(header2);
|
|
1946
|
+
this[bitrateMaximum] = header2[bitrateMaximum];
|
|
1947
|
+
this[bitrateMinimum] = header2[bitrateMinimum];
|
|
1948
|
+
this[bitrateNominal] = header2[bitrateNominal];
|
|
1949
|
+
this[blocksize0] = header2[blocksize0];
|
|
1950
|
+
this[blocksize1] = header2[blocksize1];
|
|
1951
|
+
this[data] = header2[data];
|
|
1952
|
+
this[vorbisComments] = header2[vorbisComments];
|
|
1953
|
+
this[vorbisSetup] = header2[vorbisSetup];
|
|
1954
|
+
}
|
|
1955
|
+
};
|
|
1956
|
+
|
|
1957
|
+
// ../../node_modules/codec-parser/src/codecs/vorbis/VorbisParser.js
|
|
1958
|
+
var VorbisParser = class extends Parser {
|
|
1959
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
1960
|
+
super(codecParser, headerCache);
|
|
1961
|
+
this.Frame = VorbisFrame;
|
|
1962
|
+
onCodec(this[codec]);
|
|
1963
|
+
this._identificationHeader = null;
|
|
1964
|
+
this._setupComplete = false;
|
|
1965
|
+
this._prevBlockSize = null;
|
|
1966
|
+
}
|
|
1967
|
+
get [codec]() {
|
|
1968
|
+
return vorbis;
|
|
1969
|
+
}
|
|
1970
|
+
[parseOggPage](oggPage) {
|
|
1971
|
+
oggPage[codecFrames] = [];
|
|
1972
|
+
for (const oggPageSegment of frameStore.get(oggPage)[segments]) {
|
|
1973
|
+
if (oggPageSegment[0] === 1) {
|
|
1974
|
+
this._headerCache[enable]();
|
|
1975
|
+
this._identificationHeader = oggPage[data];
|
|
1976
|
+
this._setupComplete = false;
|
|
1977
|
+
} else if (oggPageSegment[0] === 3) {
|
|
1978
|
+
this._vorbisComments = oggPageSegment;
|
|
1979
|
+
} else if (oggPageSegment[0] === 5) {
|
|
1980
|
+
this._vorbisSetup = oggPageSegment;
|
|
1981
|
+
this._mode = this._parseSetupHeader(oggPageSegment);
|
|
1982
|
+
this._setupComplete = true;
|
|
1983
|
+
} else if (this._setupComplete) {
|
|
1984
|
+
const header2 = VorbisHeader[getHeaderFromUint8Array](
|
|
1985
|
+
this._identificationHeader,
|
|
1986
|
+
this._headerCache,
|
|
1987
|
+
this._vorbisComments,
|
|
1988
|
+
this._vorbisSetup
|
|
1989
|
+
);
|
|
1990
|
+
if (header2) {
|
|
1991
|
+
oggPage[codecFrames].push(
|
|
1992
|
+
new VorbisFrame(
|
|
1993
|
+
oggPageSegment,
|
|
1994
|
+
header2,
|
|
1995
|
+
this._getSamples(oggPageSegment, header2)
|
|
1996
|
+
)
|
|
1997
|
+
);
|
|
1998
|
+
} else {
|
|
1999
|
+
this._codecParser[logError](
|
|
2000
|
+
"Failed to parse Ogg Vorbis Header",
|
|
2001
|
+
"Not a valid Ogg Vorbis file"
|
|
2002
|
+
);
|
|
2003
|
+
}
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
2006
|
+
return oggPage;
|
|
2007
|
+
}
|
|
2008
|
+
_getSamples(segment, header2) {
|
|
2009
|
+
const blockFlag = this._mode.blockFlags[segment[0] >> 1 & this._mode.mask];
|
|
2010
|
+
const currentBlockSize = blockFlag ? header2[blocksize1] : header2[blocksize0];
|
|
2011
|
+
const samplesValue = this._prevBlockSize === null ? 0 : (this._prevBlockSize + currentBlockSize) / 4;
|
|
2012
|
+
this._prevBlockSize = currentBlockSize;
|
|
2013
|
+
return samplesValue;
|
|
2014
|
+
}
|
|
2015
|
+
// https://gitlab.xiph.org/xiph/liboggz/-/blob/master/src/liboggz/oggz_auto.c#L911
|
|
2016
|
+
// https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/vorbis_parser.c
|
|
2017
|
+
/*
|
|
2018
|
+
* This is the format of the mode data at the end of the packet for all
|
|
2019
|
+
* Vorbis Version 1 :
|
|
2020
|
+
*
|
|
2021
|
+
* [ 6:number_of_modes ]
|
|
2022
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2023
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2024
|
+
* [ 1:size | 16:window_type(0) | 16:transform_type(0) | 8:mapping ]
|
|
2025
|
+
* [ 1:framing(1) ]
|
|
2026
|
+
*
|
|
2027
|
+
* e.g.:
|
|
2028
|
+
*
|
|
2029
|
+
* MsB LsB
|
|
2030
|
+
* <-
|
|
2031
|
+
* 0 0 0 0 0 1 0 0
|
|
2032
|
+
* 0 0 1 0 0 0 0 0
|
|
2033
|
+
* 0 0 1 0 0 0 0 0
|
|
2034
|
+
* 0 0 1|0 0 0 0 0
|
|
2035
|
+
* 0 0 0 0|0|0 0 0
|
|
2036
|
+
* 0 0 0 0 0 0 0 0
|
|
2037
|
+
* 0 0 0 0|0 0 0 0
|
|
2038
|
+
* 0 0 0 0 0 0 0 0
|
|
2039
|
+
* 0 0 0 0|0 0 0 0
|
|
2040
|
+
* 0 0 0|1|0 0 0 0 |
|
|
2041
|
+
* 0 0 0 0 0 0 0 0 V
|
|
2042
|
+
* 0 0 0|0 0 0 0 0
|
|
2043
|
+
* 0 0 0 0 0 0 0 0
|
|
2044
|
+
* 0 0|1 0 0 0 0 0
|
|
2045
|
+
*
|
|
2046
|
+
* The simplest way to approach this is to start at the end
|
|
2047
|
+
* and read backwards to determine the mode configuration.
|
|
2048
|
+
*
|
|
2049
|
+
* liboggz and ffmpeg both use this method.
|
|
2050
|
+
*/
|
|
2051
|
+
_parseSetupHeader(setup) {
|
|
2052
|
+
const bitReader = new BitReader(setup);
|
|
2053
|
+
const mode2 = {
|
|
2054
|
+
count: 0,
|
|
2055
|
+
blockFlags: []
|
|
2056
|
+
};
|
|
2057
|
+
while ((bitReader.read(1) & 1) !== 1) {
|
|
2058
|
+
}
|
|
2059
|
+
let modeBits;
|
|
2060
|
+
while (mode2.count < 64 && bitReader.position > 0) {
|
|
2061
|
+
reverse(bitReader.read(8));
|
|
2062
|
+
let currentByte = 0;
|
|
2063
|
+
while (bitReader.read(8) === 0 && currentByte++ < 3) {
|
|
2064
|
+
}
|
|
2065
|
+
if (currentByte === 4) {
|
|
2066
|
+
modeBits = bitReader.read(7);
|
|
2067
|
+
mode2.blockFlags.unshift(modeBits & 1);
|
|
2068
|
+
bitReader.position += 6;
|
|
2069
|
+
mode2.count++;
|
|
2070
|
+
} else {
|
|
2071
|
+
if (((reverse(modeBits) & 126) >> 1) + 1 !== mode2.count) {
|
|
2072
|
+
this._codecParser[logWarning](
|
|
2073
|
+
"vorbis derived mode count did not match actual mode count"
|
|
2074
|
+
);
|
|
2075
|
+
}
|
|
2076
|
+
break;
|
|
2077
|
+
}
|
|
2078
|
+
}
|
|
2079
|
+
mode2.mask = (1 << Math.log2(mode2.count)) - 1;
|
|
2080
|
+
return mode2;
|
|
2081
|
+
}
|
|
2082
|
+
};
|
|
2083
|
+
|
|
2084
|
+
// ../../node_modules/codec-parser/src/containers/ogg/OggParser.js
|
|
2085
|
+
var OggStream = class {
|
|
2086
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2087
|
+
this._codecParser = codecParser;
|
|
2088
|
+
this._headerCache = headerCache;
|
|
2089
|
+
this._onCodec = onCodec;
|
|
2090
|
+
this._continuedPacket = new uint8Array();
|
|
2091
|
+
this._codec = null;
|
|
2092
|
+
this._isSupported = null;
|
|
2093
|
+
this._previousAbsoluteGranulePosition = null;
|
|
2094
|
+
}
|
|
2095
|
+
get [codec]() {
|
|
2096
|
+
return this._codec || "";
|
|
2097
|
+
}
|
|
2098
|
+
_updateCodec(codec2, Parser2) {
|
|
2099
|
+
if (this._codec !== codec2) {
|
|
2100
|
+
this._headerCache[reset]();
|
|
2101
|
+
this._parser = new Parser2(
|
|
2102
|
+
this._codecParser,
|
|
2103
|
+
this._headerCache,
|
|
2104
|
+
this._onCodec
|
|
2105
|
+
);
|
|
2106
|
+
this._codec = codec2;
|
|
2107
|
+
}
|
|
2108
|
+
}
|
|
2109
|
+
_checkCodecSupport({ data: data3 }) {
|
|
2110
|
+
const idString = bytesToString(data3[subarray](0, 8));
|
|
2111
|
+
switch (idString) {
|
|
2112
|
+
case "fishead\0":
|
|
2113
|
+
return false;
|
|
2114
|
+
// ignore ogg skeleton packets
|
|
2115
|
+
case "OpusHead":
|
|
2116
|
+
this._updateCodec("opus", OpusParser);
|
|
2117
|
+
return true;
|
|
2118
|
+
case (/^\x7fFLAC/.test(idString) && idString):
|
|
2119
|
+
this._updateCodec("flac", FLACParser);
|
|
2120
|
+
return true;
|
|
2121
|
+
case (/^\x01vorbis/.test(idString) && idString):
|
|
2122
|
+
this._updateCodec(vorbis, VorbisParser);
|
|
2123
|
+
return true;
|
|
2124
|
+
default:
|
|
2125
|
+
return false;
|
|
2126
|
+
}
|
|
2127
|
+
}
|
|
2128
|
+
_checkPageSequenceNumber(oggPage) {
|
|
2129
|
+
if (oggPage[pageSequenceNumber] !== this._pageSequenceNumber + 1 && this._pageSequenceNumber > 1 && oggPage[pageSequenceNumber] > 1) {
|
|
2130
|
+
this._codecParser[logWarning](
|
|
2131
|
+
"Unexpected gap in Ogg Page Sequence Number.",
|
|
2132
|
+
`Expected: ${this._pageSequenceNumber + 1}, Got: ${oggPage[pageSequenceNumber]}`
|
|
2133
|
+
);
|
|
2134
|
+
}
|
|
2135
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2136
|
+
}
|
|
2137
|
+
_parsePage(oggPage) {
|
|
2138
|
+
if (this._isSupported === null) {
|
|
2139
|
+
this._pageSequenceNumber = oggPage[pageSequenceNumber];
|
|
2140
|
+
this._isSupported = this._checkCodecSupport(oggPage);
|
|
2141
|
+
}
|
|
2142
|
+
this._checkPageSequenceNumber(oggPage);
|
|
2143
|
+
const oggPageStore = frameStore.get(oggPage);
|
|
2144
|
+
const headerData = headerStore.get(oggPageStore[header]);
|
|
2145
|
+
let offset = 0;
|
|
2146
|
+
oggPageStore[segments] = headerData[pageSegmentTable].map(
|
|
2147
|
+
(segmentLength) => oggPage[data][subarray](offset, offset += segmentLength)
|
|
2148
|
+
);
|
|
2149
|
+
if (this._continuedPacket[length]) {
|
|
2150
|
+
oggPageStore[segments][0] = concatBuffers(
|
|
2151
|
+
this._continuedPacket,
|
|
2152
|
+
oggPageStore[segments][0]
|
|
2153
|
+
);
|
|
2154
|
+
this._continuedPacket = new uint8Array();
|
|
2155
|
+
}
|
|
2156
|
+
if (headerData[pageSegmentBytes][headerData[pageSegmentBytes][length] - 1] === 255) {
|
|
2157
|
+
this._continuedPacket = concatBuffers(
|
|
2158
|
+
this._continuedPacket,
|
|
2159
|
+
oggPageStore[segments].pop()
|
|
2160
|
+
);
|
|
2161
|
+
}
|
|
2162
|
+
if (this._previousAbsoluteGranulePosition !== null) {
|
|
2163
|
+
oggPage[samples] = Number(
|
|
2164
|
+
oggPage[absoluteGranulePosition] - this._previousAbsoluteGranulePosition
|
|
2165
|
+
);
|
|
2166
|
+
}
|
|
2167
|
+
this._previousAbsoluteGranulePosition = oggPage[absoluteGranulePosition];
|
|
2168
|
+
if (this._isSupported) {
|
|
2169
|
+
const frame2 = this._parser[parseOggPage](oggPage);
|
|
2170
|
+
this._codecParser[mapFrameStats](frame2);
|
|
2171
|
+
return frame2;
|
|
2172
|
+
} else {
|
|
2173
|
+
return oggPage;
|
|
2174
|
+
}
|
|
2175
|
+
}
|
|
2176
|
+
};
|
|
2177
|
+
var OggParser = class extends Parser {
|
|
2178
|
+
constructor(codecParser, headerCache, onCodec) {
|
|
2179
|
+
super(codecParser, headerCache);
|
|
2180
|
+
this._onCodec = onCodec;
|
|
2181
|
+
this.Frame = OggPage;
|
|
2182
|
+
this.Header = OggPageHeader;
|
|
2183
|
+
this._streams = /* @__PURE__ */ new Map();
|
|
2184
|
+
this._currentSerialNumber = null;
|
|
2185
|
+
}
|
|
2186
|
+
get [codec]() {
|
|
2187
|
+
const oggStream = this._streams.get(this._currentSerialNumber);
|
|
2188
|
+
return oggStream ? oggStream.codec : "";
|
|
2189
|
+
}
|
|
2190
|
+
*[parseFrame]() {
|
|
2191
|
+
const oggPage = yield* this[fixedLengthFrameSync](true);
|
|
2192
|
+
this._currentSerialNumber = oggPage[streamSerialNumber];
|
|
2193
|
+
let oggStream = this._streams.get(this._currentSerialNumber);
|
|
2194
|
+
if (!oggStream) {
|
|
2195
|
+
oggStream = new OggStream(
|
|
2196
|
+
this._codecParser,
|
|
2197
|
+
this._headerCache,
|
|
2198
|
+
this._onCodec
|
|
2199
|
+
);
|
|
2200
|
+
this._streams.set(this._currentSerialNumber, oggStream);
|
|
2201
|
+
}
|
|
2202
|
+
if (oggPage[isLastPage]) this._streams.delete(this._currentSerialNumber);
|
|
2203
|
+
return oggStream._parsePage(oggPage);
|
|
2204
|
+
}
|
|
2205
|
+
};
|
|
2206
|
+
|
|
2207
|
+
// ../../node_modules/codec-parser/src/CodecParser.js
|
|
2208
|
+
var noOp = () => {
|
|
2209
|
+
};
|
|
2210
|
+
var CodecParser = class {
|
|
2211
|
+
constructor(mimeType2, {
|
|
2212
|
+
onCodec,
|
|
2213
|
+
onCodecHeader,
|
|
2214
|
+
onCodecUpdate,
|
|
2215
|
+
enableLogging = false,
|
|
2216
|
+
enableFrameCRC32 = true
|
|
2217
|
+
} = {}) {
|
|
2218
|
+
this._inputMimeType = mimeType2;
|
|
2219
|
+
this._onCodec = onCodec || noOp;
|
|
2220
|
+
this._onCodecHeader = onCodecHeader || noOp;
|
|
2221
|
+
this._onCodecUpdate = onCodecUpdate;
|
|
2222
|
+
this._enableLogging = enableLogging;
|
|
2223
|
+
this._crc32 = enableFrameCRC32 ? crc32Function : noOp;
|
|
2224
|
+
this[reset]();
|
|
2225
|
+
}
|
|
2226
|
+
/**
|
|
2227
|
+
* @public
|
|
2228
|
+
* @returns The detected codec
|
|
2229
|
+
*/
|
|
2230
|
+
get [codec]() {
|
|
2231
|
+
return this._parser ? this._parser[codec] : "";
|
|
2232
|
+
}
|
|
2233
|
+
[reset]() {
|
|
2234
|
+
this._headerCache = new HeaderCache(
|
|
2235
|
+
this._onCodecHeader,
|
|
2236
|
+
this._onCodecUpdate
|
|
2237
|
+
);
|
|
2238
|
+
this._generator = this._getGenerator();
|
|
2239
|
+
this._generator.next();
|
|
2240
|
+
}
|
|
2241
|
+
/**
|
|
2242
|
+
* @public
|
|
2243
|
+
* @description Generator function that yields any buffered CodecFrames and resets the CodecParser
|
|
2244
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2245
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2246
|
+
*/
|
|
2247
|
+
*flush() {
|
|
2248
|
+
this._flushing = true;
|
|
2249
|
+
for (let i = this._generator.next(); i.value; i = this._generator.next()) {
|
|
2250
|
+
yield i.value;
|
|
2251
|
+
}
|
|
2252
|
+
this._flushing = false;
|
|
2253
|
+
this[reset]();
|
|
2254
|
+
}
|
|
2255
|
+
/**
|
|
2256
|
+
* @public
|
|
2257
|
+
* @description Generator function takes in a Uint8Array of data and returns a CodecFrame from the data for each iteration
|
|
2258
|
+
* @param {Uint8Array} chunk Next chunk of codec data to read
|
|
2259
|
+
* @returns {Iterable<CodecFrame|OggPage>} Iterator that operates over the codec data.
|
|
2260
|
+
* @yields {CodecFrame|OggPage} Parsed codec or ogg page data
|
|
2261
|
+
*/
|
|
2262
|
+
*parseChunk(chunk) {
|
|
2263
|
+
for (let i = this._generator.next(chunk); i.value; i = this._generator.next()) {
|
|
2264
|
+
yield i.value;
|
|
2265
|
+
}
|
|
2266
|
+
}
|
|
2267
|
+
/**
|
|
2268
|
+
* @public
|
|
2269
|
+
* @description Parses an entire file and returns all of the contained frames.
|
|
2270
|
+
* @param {Uint8Array} fileData Coded data to read
|
|
2271
|
+
* @returns {Array<CodecFrame|OggPage>} CodecFrames
|
|
2272
|
+
*/
|
|
2273
|
+
parseAll(fileData) {
|
|
2274
|
+
return [...this.parseChunk(fileData), ...this.flush()];
|
|
2275
|
+
}
|
|
2276
|
+
/**
|
|
2277
|
+
* @private
|
|
2278
|
+
*/
|
|
2279
|
+
*_getGenerator() {
|
|
2280
|
+
if (this._inputMimeType.match(/aac/)) {
|
|
2281
|
+
this._parser = new AACParser(this, this._headerCache, this._onCodec);
|
|
2282
|
+
} else if (this._inputMimeType.match(/mpeg/)) {
|
|
2283
|
+
this._parser = new MPEGParser(this, this._headerCache, this._onCodec);
|
|
2284
|
+
} else if (this._inputMimeType.match(/flac/)) {
|
|
2285
|
+
this._parser = new FLACParser(this, this._headerCache, this._onCodec);
|
|
2286
|
+
} else if (this._inputMimeType.match(/ogg/)) {
|
|
2287
|
+
this._parser = new OggParser(this, this._headerCache, this._onCodec);
|
|
2288
|
+
} else {
|
|
2289
|
+
throw new Error(`Unsupported Codec ${mimeType}`);
|
|
2290
|
+
}
|
|
2291
|
+
this._frameNumber = 0;
|
|
2292
|
+
this._currentReadPosition = 0;
|
|
2293
|
+
this._totalBytesIn = 0;
|
|
2294
|
+
this._totalBytesOut = 0;
|
|
2295
|
+
this._totalSamples = 0;
|
|
2296
|
+
this._sampleRate = void 0;
|
|
2297
|
+
this._rawData = new Uint8Array(0);
|
|
2298
|
+
while (true) {
|
|
2299
|
+
const frame2 = yield* this._parser[parseFrame]();
|
|
2300
|
+
if (frame2) yield frame2;
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
/**
|
|
2304
|
+
* @protected
|
|
2305
|
+
* @param {number} minSize Minimum bytes to have present in buffer
|
|
2306
|
+
* @returns {Uint8Array} rawData
|
|
2307
|
+
*/
|
|
2308
|
+
*[readRawData](minSize = 0, readOffset = 0) {
|
|
2309
|
+
let rawData2;
|
|
2310
|
+
while (this._rawData[length] <= minSize + readOffset) {
|
|
2311
|
+
rawData2 = yield;
|
|
2312
|
+
if (this._flushing) return this._rawData[subarray](readOffset);
|
|
2313
|
+
if (rawData2) {
|
|
2314
|
+
this._totalBytesIn += rawData2[length];
|
|
2315
|
+
this._rawData = concatBuffers(this._rawData, rawData2);
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
2318
|
+
return this._rawData[subarray](readOffset);
|
|
2319
|
+
}
|
|
2320
|
+
/**
|
|
2321
|
+
* @protected
|
|
2322
|
+
* @param {number} increment Bytes to increment codec data
|
|
2323
|
+
*/
|
|
2324
|
+
[incrementRawData](increment) {
|
|
2325
|
+
this._currentReadPosition += increment;
|
|
2326
|
+
this._rawData = this._rawData[subarray](increment);
|
|
2327
|
+
}
|
|
2328
|
+
/**
|
|
2329
|
+
* @protected
|
|
2330
|
+
*/
|
|
2331
|
+
[mapCodecFrameStats](frame2) {
|
|
2332
|
+
this._sampleRate = frame2[header][sampleRate];
|
|
2333
|
+
frame2[header][bitrate] = frame2[duration] > 0 ? Math.round(frame2[data][length] / frame2[duration]) * 8 : 0;
|
|
2334
|
+
frame2[frameNumber] = this._frameNumber++;
|
|
2335
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2336
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2337
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3;
|
|
2338
|
+
frame2[crc32] = this._crc32(frame2[data]);
|
|
2339
|
+
this._headerCache[checkCodecUpdate](
|
|
2340
|
+
frame2[header][bitrate],
|
|
2341
|
+
frame2[totalDuration]
|
|
2342
|
+
);
|
|
2343
|
+
this._totalBytesOut += frame2[data][length];
|
|
2344
|
+
this._totalSamples += frame2[samples];
|
|
2345
|
+
}
|
|
2346
|
+
/**
|
|
2347
|
+
* @protected
|
|
2348
|
+
*/
|
|
2349
|
+
[mapFrameStats](frame2) {
|
|
2350
|
+
if (frame2[codecFrames]) {
|
|
2351
|
+
if (frame2[isLastPage]) {
|
|
2352
|
+
let absoluteGranulePositionSamples = frame2[samples];
|
|
2353
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2354
|
+
const untrimmedCodecSamples = codecFrame[samples];
|
|
2355
|
+
if (absoluteGranulePositionSamples < untrimmedCodecSamples) {
|
|
2356
|
+
codecFrame[samples] = absoluteGranulePositionSamples > 0 ? absoluteGranulePositionSamples : 0;
|
|
2357
|
+
codecFrame[duration] = codecFrame[samples] / codecFrame[header][sampleRate] * 1e3;
|
|
2358
|
+
}
|
|
2359
|
+
absoluteGranulePositionSamples -= untrimmedCodecSamples;
|
|
2360
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2361
|
+
});
|
|
2362
|
+
} else {
|
|
2363
|
+
frame2[samples] = 0;
|
|
2364
|
+
frame2[codecFrames].forEach((codecFrame) => {
|
|
2365
|
+
frame2[samples] += codecFrame[samples];
|
|
2366
|
+
this[mapCodecFrameStats](codecFrame);
|
|
2367
|
+
});
|
|
2368
|
+
}
|
|
2369
|
+
frame2[duration] = frame2[samples] / this._sampleRate * 1e3 || 0;
|
|
2370
|
+
frame2[totalSamples] = this._totalSamples;
|
|
2371
|
+
frame2[totalDuration] = this._totalSamples / this._sampleRate * 1e3 || 0;
|
|
2372
|
+
frame2[totalBytesOut] = this._totalBytesOut;
|
|
2373
|
+
} else {
|
|
2374
|
+
this[mapCodecFrameStats](frame2);
|
|
2375
|
+
}
|
|
2376
|
+
}
|
|
2377
|
+
/**
|
|
2378
|
+
* @private
|
|
2379
|
+
*/
|
|
2380
|
+
_log(logger, messages) {
|
|
2381
|
+
if (this._enableLogging) {
|
|
2382
|
+
const stats = [
|
|
2383
|
+
`${codec}: ${this[codec]}`,
|
|
2384
|
+
`inputMimeType: ${this._inputMimeType}`,
|
|
2385
|
+
`readPosition: ${this._currentReadPosition}`,
|
|
2386
|
+
`totalBytesIn: ${this._totalBytesIn}`,
|
|
2387
|
+
`${totalBytesOut}: ${this._totalBytesOut}`
|
|
2388
|
+
];
|
|
2389
|
+
const width = Math.max(...stats.map((s) => s[length]));
|
|
2390
|
+
messages.push(
|
|
2391
|
+
`--stats--${"-".repeat(width - 9)}`,
|
|
2392
|
+
...stats,
|
|
2393
|
+
"-".repeat(width)
|
|
2394
|
+
);
|
|
2395
|
+
logger(
|
|
2396
|
+
"codec-parser",
|
|
2397
|
+
messages.reduce((acc, message) => acc + "\n " + message, "")
|
|
2398
|
+
);
|
|
2399
|
+
}
|
|
2400
|
+
}
|
|
2401
|
+
/**
|
|
2402
|
+
* @protected
|
|
2403
|
+
*/
|
|
2404
|
+
[logWarning](...messages) {
|
|
2405
|
+
this._log(console.warn, messages);
|
|
2406
|
+
}
|
|
2407
|
+
/**
|
|
2408
|
+
* @protected
|
|
2409
|
+
*/
|
|
2410
|
+
[logError2](...messages) {
|
|
2411
|
+
this._log(console.error, messages);
|
|
2412
|
+
}
|
|
2413
|
+
};
|
|
2414
|
+
|
|
2415
|
+
// ../../node_modules/codec-parser/index.js
|
|
2416
|
+
var codec_parser_default = CodecParser;
|
|
2417
|
+
var codecFrames2 = codecFrames;
|
|
2418
|
+
var data2 = data;
|
|
2419
|
+
var isLastPage2 = isLastPage;
|
|
2420
|
+
var totalSamples2 = totalSamples;
|
|
2421
|
+
|
|
2422
|
+
// ../../node_modules/@wasm-audio-decoders/flac/src/EmscriptenWasm.js
|
|
2423
|
+
function EmscriptenWASM(WASMAudioDecoderCommon2) {
|
|
2424
|
+
var Module = Module;
|
|
2425
|
+
var out = (text) => console.log(text);
|
|
2426
|
+
var err = (text) => console.error(text);
|
|
2427
|
+
function ready() {
|
|
2428
|
+
}
|
|
2429
|
+
Module = {};
|
|
2430
|
+
function abort(what) {
|
|
2431
|
+
throw what;
|
|
2432
|
+
}
|
|
2433
|
+
var HEAP8, HEAP16, HEAP32, HEAPU8, HEAPU16, HEAPU32, HEAPF32, HEAPF64, HEAP64, HEAPU64, wasmMemory;
|
|
2434
|
+
function updateMemoryViews() {
|
|
2435
|
+
var b = wasmMemory.buffer;
|
|
2436
|
+
HEAP8 = new Int8Array(b);
|
|
2437
|
+
HEAP16 = new Int16Array(b);
|
|
2438
|
+
HEAPU8 = new Uint8Array(b);
|
|
2439
|
+
HEAPU16 = new Uint16Array(b);
|
|
2440
|
+
HEAP32 = new Int32Array(b);
|
|
2441
|
+
HEAPU32 = new Uint32Array(b);
|
|
2442
|
+
HEAPF32 = new Float32Array(b);
|
|
2443
|
+
HEAPF64 = new Float64Array(b);
|
|
2444
|
+
HEAP64 = new BigInt64Array(b);
|
|
2445
|
+
HEAPU64 = new BigUint64Array(b);
|
|
2446
|
+
}
|
|
2447
|
+
var base64Decode = (b64) => {
|
|
2448
|
+
var b1, b2, i2 = 0, j = 0, bLength = b64.length;
|
|
2449
|
+
var output = new Uint8Array((bLength * 3 >> 2) - (b64[bLength - 2] == "=") - (b64[bLength - 1] == "="));
|
|
2450
|
+
for (; i2 < bLength; i2 += 4, j += 3) {
|
|
2451
|
+
b1 = base64ReverseLookup[b64.charCodeAt(i2 + 1)];
|
|
2452
|
+
b2 = base64ReverseLookup[b64.charCodeAt(i2 + 2)];
|
|
2453
|
+
output[j] = base64ReverseLookup[b64.charCodeAt(i2)] << 2 | b1 >> 4;
|
|
2454
|
+
output[j + 1] = b1 << 4 | b2 >> 2;
|
|
2455
|
+
output[j + 2] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i2 + 3)];
|
|
2456
|
+
}
|
|
2457
|
+
return output;
|
|
2458
|
+
};
|
|
2459
|
+
var __abort_js = () => abort("");
|
|
2460
|
+
var __emscripten_runtime_keepalive_clear = () => {
|
|
2461
|
+
};
|
|
2462
|
+
var timers = {};
|
|
2463
|
+
var callUserCallback = (func) => func();
|
|
2464
|
+
var _emscripten_get_now = () => performance.now();
|
|
2465
|
+
var __setitimer_js = (which, timeout_ms) => {
|
|
2466
|
+
if (timers[which]) {
|
|
2467
|
+
clearTimeout(timers[which].id);
|
|
2468
|
+
delete timers[which];
|
|
2469
|
+
}
|
|
2470
|
+
if (!timeout_ms) return 0;
|
|
2471
|
+
var id = setTimeout(() => {
|
|
2472
|
+
delete timers[which];
|
|
2473
|
+
callUserCallback(() => __emscripten_timeout(which, _emscripten_get_now()));
|
|
2474
|
+
}, timeout_ms);
|
|
2475
|
+
timers[which] = {
|
|
2476
|
+
id,
|
|
2477
|
+
timeout_ms
|
|
2478
|
+
};
|
|
2479
|
+
return 0;
|
|
2480
|
+
};
|
|
2481
|
+
var _emscripten_resize_heap = (requestedSize) => {
|
|
2482
|
+
var oldSize = HEAPU8.length;
|
|
2483
|
+
requestedSize >>>= 0;
|
|
2484
|
+
return false;
|
|
2485
|
+
};
|
|
2486
|
+
var _fd_close = (fd) => 52;
|
|
2487
|
+
var _fd_read = (fd, iov, iovcnt, pnum) => 52;
|
|
2488
|
+
var INT53_MAX = 9007199254740992;
|
|
2489
|
+
var INT53_MIN = -9007199254740992;
|
|
2490
|
+
var bigintToI53Checked = (num) => num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);
|
|
2491
|
+
function _fd_seek(fd, offset, whence, newOffset) {
|
|
2492
|
+
offset = bigintToI53Checked(offset);
|
|
2493
|
+
return 70;
|
|
2494
|
+
}
|
|
2495
|
+
var printCharBuffers = [null, [], []];
|
|
2496
|
+
var UTF8Decoder = new TextDecoder();
|
|
2497
|
+
var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => {
|
|
2498
|
+
var endIdx = idx + maxBytesToRead;
|
|
2499
|
+
var endPtr = idx;
|
|
2500
|
+
while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
|
|
2501
|
+
return UTF8Decoder.decode(heapOrArray.buffer ? heapOrArray.subarray(idx, endPtr) : new Uint8Array(heapOrArray.slice(idx, endPtr)));
|
|
2502
|
+
};
|
|
2503
|
+
var printChar = (stream2, curr) => {
|
|
2504
|
+
var buffer2 = printCharBuffers[stream2];
|
|
2505
|
+
if (curr === 0 || curr === 10) {
|
|
2506
|
+
(stream2 === 1 ? out : err)(UTF8ArrayToString(buffer2));
|
|
2507
|
+
buffer2.length = 0;
|
|
2508
|
+
} else {
|
|
2509
|
+
buffer2.push(curr);
|
|
2510
|
+
}
|
|
2511
|
+
};
|
|
2512
|
+
var _fd_write = (fd, iov, iovcnt, pnum) => {
|
|
2513
|
+
var num = 0;
|
|
2514
|
+
for (var i2 = 0; i2 < iovcnt; i2++) {
|
|
2515
|
+
var ptr = HEAPU32[iov >> 2];
|
|
2516
|
+
var len = HEAPU32[iov + 4 >> 2];
|
|
2517
|
+
iov += 8;
|
|
2518
|
+
for (var j = 0; j < len; j++) {
|
|
2519
|
+
printChar(fd, HEAPU8[ptr + j]);
|
|
2520
|
+
}
|
|
2521
|
+
num += len;
|
|
2522
|
+
}
|
|
2523
|
+
HEAPU32[pnum >> 2] = num;
|
|
2524
|
+
return 0;
|
|
2525
|
+
};
|
|
2526
|
+
var _proc_exit = (code) => {
|
|
2527
|
+
throw `exit(${code})`;
|
|
2528
|
+
};
|
|
2529
|
+
for (var base64ReverseLookup = new Uint8Array(123), i = 25; i >= 0; --i) {
|
|
2530
|
+
base64ReverseLookup[48 + i] = 52 + i;
|
|
2531
|
+
base64ReverseLookup[65 + i] = i;
|
|
2532
|
+
base64ReverseLookup[97 + i] = 26 + i;
|
|
2533
|
+
}
|
|
2534
|
+
base64ReverseLookup[43] = 62;
|
|
2535
|
+
base64ReverseLookup[47] = 63;
|
|
2536
|
+
var wasmImports = {
|
|
2537
|
+
/** @export */
|
|
2538
|
+
"c": __abort_js,
|
|
2539
|
+
/** @export */
|
|
2540
|
+
"b": __emscripten_runtime_keepalive_clear,
|
|
2541
|
+
/** @export */
|
|
2542
|
+
"d": __setitimer_js,
|
|
2543
|
+
/** @export */
|
|
2544
|
+
"e": _emscripten_resize_heap,
|
|
2545
|
+
/** @export */
|
|
2546
|
+
"g": _fd_close,
|
|
2547
|
+
/** @export */
|
|
2548
|
+
"i": _fd_read,
|
|
2549
|
+
/** @export */
|
|
2550
|
+
"f": _fd_seek,
|
|
2551
|
+
/** @export */
|
|
2552
|
+
"h": _fd_write,
|
|
2553
|
+
/** @export */
|
|
2554
|
+
"a": _proc_exit
|
|
2555
|
+
};
|
|
2556
|
+
function assignWasmExports(wasmExports) {
|
|
2557
|
+
_free = wasmExports["l"];
|
|
2558
|
+
_malloc = wasmExports["m"];
|
|
2559
|
+
_create_decoder = wasmExports["n"];
|
|
2560
|
+
_destroy_decoder = wasmExports["o"];
|
|
2561
|
+
_decode_frame = wasmExports["p"];
|
|
2562
|
+
__emscripten_timeout = wasmExports["r"];
|
|
2563
|
+
}
|
|
2564
|
+
var _free, _malloc, _create_decoder, _destroy_decoder, _decode_frame, __emscripten_timeout;
|
|
2565
|
+
function initRuntime(wasmExports) {
|
|
2566
|
+
wasmExports["k"]();
|
|
2567
|
+
}
|
|
2568
|
+
if (!EmscriptenWASM.wasm) Object.defineProperty(EmscriptenWASM, "wasm", { get: () => String.raw`dynEncode01561175c7ec¥fÓŬѣkÁ@2ºÙì:rÛyë½ÙR9ßVNdü~=
|
|
2569
|
+
xW±b\°Û¼¥õä= ãjð$k¾¥OøÃ3tÚÇA0$|"ïô´
|
|
2570
|
+
Îß|Ø~´¹Î)@±nné|
|
|
2571
|
+
=}¼¤ç,Ò·CÈzä^(ËÒ;È?¯¡Ô+ºÕÌ |mlýÒ*môƽBI[µçFã6L|x9ÂÇrustRI¼ë7Çzÿ¡ÄáÌ%=Mä$+N!.L÷«´ÕÒeäºÏo0|d@1»¼¼¼¼¼Láþ˱Ýúâ "ÞMxhxéP4qÅ
|
|
2572
|
+
.3/=MRóMÚ6Ræ©®w±î×ÃñÉۯ̡Í@nê!'mù Bu= 2ªâ\Ä1É:«R´êîö>¦k?§ÞCuw"µçQùä{)3/®^ê2ãÃPrç5®u8Ë<ÄaSêXÁ'¦ôE£äñ'¨ 9v0ãKa= ¬ª/_Ør%A$ÕÞlÎýsÛ;d³ÎÌ=}äyAÞÛvjÑeaÜ»ÒHù)&*¢ÊJ¦ôñ fÉ¢n¢ë{©èm%ÞÛ¶*3.rªîjäËç{&Ìqkéº'äyp9¸áÒÿ<ü¹·I\CpðI<EÈsçççdr_oÖ{5Ͳé«Î¤à]³m-¬'EY(×!2[Ä!¹Ð= »ZA ×ÛWY3ö í³Ùày!·§¶kð.y¨;ÖZ¾à<æLMÂäN±ºT0@´®¹{Í
|
|
2573
|
+
¹ 8ÑeÍ"lž;=M2T¬P6u:'m7~qT4öZuU ×÷½÷N/uHee&Hò5ñÕÆ´¹,eĬöR¬dàFR7bݸÁ÷u*"2þ6¡yBÝmTÊ:*=Mt½Ü<¥Yî#&"S¸4õÇe¸½ auX67ó3øbòEHøDúºØtP´im2Wk_¯j>e¹pr#bCQ o|G&9ró"ÛyLb¿C½ì3MØõFØ#TjüÅgæºèÆ5¨UõÍ¢G¹m¨4&LäóFzÖ¥ÛÄF¨Ðm"_¡C¬»ÇÀê3tç4¾[£"=M¿ÿ7Z)IOR4Ô;2.j3Ü{9¬$0ÁGøTyaímE¯L(Ïä®#k«a3>§º.ocOй þùDjotF.ÅRG7HÿifåSËÒ.9°@½1åe ©}&æ-kM,u@í-ó.*Pßi}Lq¢_°çëÓ±¹s¬ KÍÓZøó:vÕ^×ʲ[5Òò1»ç˽6ÐÜr;íEp?Ýbbb©ÊÂVñ:¬ÍÓÀÊ!{ä¢T«ÁS]·dßÑ*zQtLG^i9g9׳½ÞD*7>.¹0y9ÌnpÄ®ÎEIÿ|'ºA=}äÔ¯8DLµøA<'@zèß²ndj¯È»Âu³7EÄʰ®B0"èÁðäôA©©-i1J''øyJVÿÉ&æÀp()xBØzäs%¿L
|
|
2574
|
+
î)øqÔÀÉã*Áú°hEJk©wáå2ݼE¿'+x)X6óÞ«ö=MmYì=}ºIÂ=Mgìb$öÇìbàÉ Ó9ûPÁ÷¾ÒÃëH®Õ?Ý5×Ã3ñ¨ä¢¯=M¡À?ì(-cͱä1±/¸#áuQOíÉò1MÐÇ cõRRÙõA ¸/nfÏÄÆ2F
UÖ·MGÈ<À= 267SõÑJÝbªV²â1¡ê.ûv(²2|w}ðWztGBÛhzh{ç*®5T7Á´éª &æÆïeÕÏ´ÜòÆN.;eϰضdÖ«2á~*úì9ò*Od¤<±
«cë#GÅɹx·Øq4MÞ±9¾zi'Î4I´M»èà¼NRÔ2³¨ÖÊvD³B×/|.=MõG³3Á&ÔF ý¡8WQåÏ5_pì¿Yöa1äÎI÷ ìQA@)E; e2ëBAôPAµIî$*ÖìÌë¸òÒsëÔÔÛáÃिÔ:Ñ
Ø}%2|@òøDîÓT½5Nt=MkKÙm¼½WÑpJ"kÑ[ÁþŵÔ/Ak*¹ÍDgîŦRôÔP'ZkªºT4I?ªc}´
éSOíOÿpA÷>ÁmÝLoLüÓS;M¡PT-MÀ&öÌüûC)¤ÕR:´ïìã)§*õÒ;y¥ÀÃC×p°Y:å2©kwÜåÑ/ñ®
-Ï5F9ÅmvÓ´½_¼yîÖåtS£4^MÖ0GßZ,ëÚYMûÇTø½UH÷ZòóÖÑ$-uMd©ÆlwIîÌbMî)eÔ®.ØMìµÕQ£òÁYÅÌXE*».¬½9SH¯ÅRîññ]´ÍXE:ô ªôcM,%´Ð1Ê¡É
|
|
2575
|
+
Ý1ºDòVÓPtQL\*ãÕLIÝT0xülÂËvôx&T6Ñ7«³¾CÞ@ëõRb#\¿V4é%²Hªd@Â#,ø=} !´RÒtåCû¤¶]lix*ÒÑC;a«µÙP\JãÔQ8
|
|
2576
|
+
\&EÒ;³ý±+ÖtÕHA"j|¬$Ã)î
Ô)Í.pÙ_&MT@¬¦sp1%8³1Ö_1éìKIµÒ«scno=}æ-ÏýáR2=}=}ÑrODR<w¯Ùa¨|È= ®é4I?¥Î¨¾~ÆMÁ½0=MF uÇûà*$¨= ¤I)òQ
5xb]I½Âxy}}3òéÈa'ʽÇ7h/óç$,ÏòëÄé3àq¿Ü3Ø|÷¬oÔ8¦ÐtÞîÀðâÊ{á¬ÒTg¼èÅùø]½OÌ6ä÷ë·/åi¼µ}"×óýËïÄüéýé??úÅ(Êó¢óÑó¤ØüéðÔ+_ fBo§\wúw£{"ß|"nwò
|
|
2577
|
+
Úrvl¥ÙÐÀ·à6Èoû=M%Gùl¦*4A ÜeS§ø;Wßd¥¨Ý}/b¥7T\c¥¾éÂÜ}7FZc¥¾i®ÎææÞsxyw= ËÞ£lw-Òü¦®ä¤·¯â)ýL%L=Még1¢åWõOWaErhS¬CûH
|
|
2578
|
+
¹ÌvÎÐæ:UÀ,þ³ÛóªkԤ̮أ%Õ
|
|
2579
|
+
32>|Jìáþóñz³êïô8ö¤÷ >eãnâ n¼ëÚú,³ýv#79µútWçl]ħ{p¨¿¿6쪰<Ò¡ûñc2#ª+3 û1c2CªÆ]ªPS×QÓLÃH²KtÜ¥Æ×%ý.x¾bºá¤6vþ6IÊ:ÈHüÃ.=}í-tUPVyEÈÈOæExÒ/C1n/=MÌJôr§L^@¤¾³éE49²ÐG½Gé§ÉvpËÐl<îÆb-¾2¯Ilp,7BÅ;ÈÐÐoèmf¢@(@ìÍ
|
|
2580
|
+
b|Ô5À=Mï÷w»B®Ô/ÇT ËÌõ
ïÇÀôE¸õ= ©zL)BÕú#üټ릦¢EÚsÈ
\tÙà=}8JD´Nîee¦gCYù9É?ÌëË-ïµ®9£÷ε=Mû[ù[õüßS¸ª ÔÎÔ!Á¬µ×@Ó#@ÊY+M´ ÐE\ÿ1wónDU!Á
|
|
2581
|
+
&×Za×°ÙèÅêRlûÊi_2 _A´[-ÃP;S_,ø)äJúÝ=MårJºêª2ýô_Sª<GÎýînb Ô°LØî^=MÜg{cD²SÔD+%Ñ@=}y¼@õ.öÄÏøÄ@°#IIðTA}ÆjòYäæXäõÖÏ<âµÛá#ñJ¼2ûº¹h:BîΣßð)îÜrb=}ú¡ñ(= àïîßÖòæyè.wh
|
|
2582
|
+
ÆB·ü{øÝ+ô>íf¤C<ü3
|
|
2583
|
+
©ýîÌ8j)¤ò¸0<j),ýî4ø³XLÌNÉ4ï@³³f5Í*aòßaÑ¿âW#»:.ÈDk½~FdRjiWÁ!W»@»ÞÅsËIÕ9*Îü²ê0Hü½Å²ÎÐ:²Ê!ÔñaôVóܲb»ò«Ð UJXËTu0Uen¿oÙ¸ÚU ÷êÉÿos¯Ë¬©äm·QW ®$ÑTjEX5>ãûPÆþóAQ?Ù@@öeDGL îäýУ58©üè·½Þ;ÎÕ!cÁb.^pj{ñ¸Ã¿B,·¨C³ýSüJ9¡<>[¥Grä@á$©Ø
|
|
2584
|
+
!É5ð¥4¡-³(Q´fJh
|
|
2585
|
+
覣
|
|
2586
|
+
£a¬ÅCJAq,ýÐq:öÛKwOd±'8©TMÁñ!£Ö´|B¢öûx5"¬è¤êj×ºØ y®}ða;ÄzEX»z «º(w¹Óúù±Å¶Áм|sAâļ¢ì|Ñcoé3"îB»¢ìB¿±À¡ÔåÂ_¹ùõUÿ殼<Úh4Ö«W¼\"ñ:f9æFV;µßAä>þàíâeê
±ñ£mͯW>KIF8ØÊ8Lv7¥B³º%MTr5ek(OTÃòU¡D¥¾DWÕ!è=}$²MAØî@H!:4§¨Bq¯Q ÐÞa4ÇïUí>Û©oYÖ2ÇÀµ_ l-CíCÁtýAPçdÈ_]äCù
|
|
2587
|
+
pöF6PêÓ
|
|
2588
|
+
ÁÎÜUÃTÖSÎóhæóήõ4d%a°1ËÅ@Ã$pøE7æ³T+h=MÆsaèlåBÍË©¾·yÇhÝÄS £ÚÊ"tÚeu,¾Ã¦ //üüBT°\ù UhÍ6OEy/ÓÁ]0'C%«³ÚlÄòqËåþwe6MMK«xpOß+ÅNÕt
ïÕ÷b¹Èÿ«~ÂïѼͻÈÏ;ðz"QÏÅ=}ýwª=}´ÐP=M¾½«1²ð:*)ÕH¼\¡Ãn¤8çCÃÞ÷×ÈæInCÝtÐ8>_dòPBó U¼»r0b»ÐhÕû³UþIoU/sBõÜ·:J¹ñ\t!N'û×cçø=Mà8aãjvX=}á©7ù~«Æj˾Jf¸ÞA¼gM÷ìkÀÃPf¹7DÓ&Q¦¯¾õ÷Ó~
|
|
2589
|
+
=M&4¥Q[0s&Ä[aba¢».¤AÊV7Â9Ñ:Û%»m°! ½¶o×Äø½cBÃ6¶YM&ªÌéF7ø,ïÚ_¯hzéFÈ5ýÁéWìú1êÃ-ÒÙ»õÊo<9RM¼mßuu]UÈr>g7J9¦£J&²HktÆÙø_~tèd+íkBK
GÑfR;9µG
|
|
2590
|
+
Z¥vøJ#ºRºÝ«?9$´ÿF´
µ±ËèöjØÈ|~= ZÊ\W4 {Å{xÌ)j¬^)Ã7Á6du,5µ-05f¿ýبÐòJ=M^ex?ÅgSøãOLáàe·MTT\P1QbãT¬¾Å÷×ôÎ×Y0+LN
|
|
2591
|
+
£ëåë%15X¿Yq&ª,LM$LÍ|w¡ìÚ¼è¹5³T¡Õù=MÕAEaÌÎÝø+aüóMëg#a'ÀhþfC54Üx×l·q@ºÚp>Ö.Tf°vuÜ'¸á\±Fï}5?³¯-0.KHÁ@ ̶\¹TY<¥
|
|
2592
|
+
ò!Nkd\X·,tƯ ÛáÙ̧cÁu~Äá³"âJ!éxcöh ð
GõüµGØ«(ß"¯<ì¢Ø5JI×4\¬æÃ¶qpÒ»y½ZRùÞVúý¼{¦E}¸f7/>ñÅã@ð¿<æË~è;{à#0iû7¢'Ühl ~~C=}¿Åý9%)ÂýKZÝâßÊòÈù²læB2ol汿ųèJHÔl&4\dÆÅYE [ïlUî&[= éùm¿·×8
|
|
2593
|
+
[z&|,X\Ûk°A¥evðý;èÒ(XÁ7§óïAµYÀ/Ë+ÕLM2Ñ$ÓɵU¿Q¡ýæYJ¹Ü¦PõéüUÕÚXXXXXȵþï?¹fÓyª_&ÀÖþ§Zjb{× ½*©Þh6Vâ»Öo^]£áAM±QBÍDÓM{é uÑL/5Á--´Qº>@¹z¶ðç}üòÍ,j_ø}NÂ|= ô )3 kçÝ{þ}l³o®òk=}ªeVÀ°¹ñØo÷t©, ¬c¬ °º¼Ù w_Ãp*¼dظ»ÛÁQö£²ê¡*%k7Ú4XÐaÎWÓc¯[öøf .8û'àZ¨WqvC±;Jìä1Ù%êÒE'f&³5ÿøs¨Ý±4éäfÀÂ׫(h®Y¶#%X+ºþ¤Èº!ùð,Eq+nù0]c÷
VÓG Öôþ®Û´Ç³#A&}ÏU÷5Ie=Mfs¢¥Kk(¥[%)NDí>IS¨ùmlÞoîÛôúÝÀqô¿l½±ÃÙÚÖÃoovþJ£òªá©Î¥-%+E>"Ð~fà%* £CóLK&/8w£Û &*$/¸©á ©K/øtèé½ômîÇ(cþ=}LX9
|
|
2594
|
+
ø÷I¦~&[þd#|Òv\ò¤ê#eGݳT8ÐIn(ÊÓkÏl¾ÇÕ\´ÓÃF¤uÇõÚMôÁûp¥KYal×s1Þqþ\ù$aÜgѨ782þé'W 8X UCÞ\ÛZäåØ'j@ºÎ2·)Eâz¡´Êvì;_]^ÜWn=Mâ"Üi·roÒö#qxçfï¹îßxÓMÚâ½Ù5
g¬zÝ-@¦cTóüÖSK!¶[ÓÉG² ´ÓMgH¿Q@o#Ë´û,Þ©Uù¤¢ÒAâcǼpÙ®emõW1ûbîÇ8\ a²îiFp!I}ÕTÕI%SÕÁ5QÅRCIÕGÑUT
Pë LËbT<ï{@d4¼ÊÆÜ'%A§´QEm¾ÖA¬µDÜîé¶}êú´òÄGÆrPfeÜAvØ5?Ûj^]*íÎpãÝ2nù
|
|
2595
|
+
ãçâ«7;S©ÞÐ1ïH&t½Àa[Ò-Ðÿ?ß7>+;é¶T²rÁç´ä=MsMÆêÌ~}[cÀÐ÷½®Åû¡laj>£xüg§nEÒl!4xwígv·P.'Oæ)ÊØ|©NvaJF_XÁ¿hàùËã´CéUSrÖÝQl7éi,Ô,»¼é9ëñÔ*W/P/¨=
|
|
2596
|
+
4S¿^¬2Ò
|
|
2597
|
+
w®õOÒú6â%ìÀ³îj¦óOÊ
V}#¶Ó3ËÅ=M ÙiÄ×
$ö Ù*ç9xçJÁ¥
{еhC@¨õÜ"kè~In{ 躶Fñ ÿåÜ(ïdÞå6Ër[»Æ~oýG
|
|
2598
|
+
d_CTþèu|«¡[u+]¦Öì!õݼ*Ù
|
|
2599
|
+
ë6GÁoôÀ[ôô|zK\7AûOUoc¶-p0*ÆÃâõ¯ôÓÆßoV!¿BapÅæúÂQäZXø¢H\"æ»Úû,j¬ @ÍÁ
Å@)eN|/4¹hp¸G#µí¼ðD¼?VKwÑDür\y¬ºëoâHn
Y¬V}bËJ÷>=}á£R^£¦«ú¡Ü%ÛÐù Z¾±u'Ô¾A³«º=}t¬ß³¾þøØx0®Òô= ;ÄÐz<·pBëãp$öæÔbk!uÄy¬¶ä±®ÆzMo¿ÜcÍD*¹· Cý>äpºZZ;ED¡u£æøq§Jÿ*ÏúÜ=}»,þdëX~pú}¹¶GiájÛ= ìb1·^t/ä÷ß;go¼Ö¢'°ý}ÉÎÇ#[MV2èëvçàiÄo0ûjÉ~,]@ª®Q:oô2C|ÁKýÏlî̯
|
|
2600
|
+
ÈW¢[\çþæ {NТÃíz°ê¾>!·2¢+"á[R« ²j©la±¡¹lÓÕaÍ&FáUÌ9SÇ2ëµÑgm÷r²×Nê°-aRùü_LVèãù!29+å)>
|
|
2601
|
+
pÊCÓ>Hiá¼íP"ø@aÕ~Àvu¤7):Á@gâ³Aû$9Qbòç9T
?[·xvÑüv°tæ@4A~åxE÷Z148aÉi²Z1e p+VåEÅEAFãYMû= ,èíhÆØ y
|
|
2602
|
+
©àEN¡~Ô_lÆ~T4ð= ò¦õ^Þ¢ÊQ¾óûbvrÌ3맪=MÝÝóÑZ_ëd>×<
OU#ÅpÞ"õ1¼Ö'¶Jx¶^wEPß¾´
 kU?^©ÏDªLÉsnù¬qÓÛjÒªa·ÙöʵV§û¯eѬ¸dºò°d½I[¦vD²òüp×F¦?´ 4@.bÞRÐ.+M[\= CÕ¾)Ví8sroÒÔFÀ(»±¢ä¡!ñÀGjt_Ã¥¼û¢QÐâuÒ¸ô0Öû´¨<¼±(Å.Þ¦Á+#«õ1Ú»]ýrê)üê±»~åjMNrKEÉå]³ì
öÈÊ8{æ¦îF~7=}oVOåâÓ:ÆTK=M%MÉKm%f6a=}·2+VAÑY¹^¤¶7OfÒx)
ãj1%aBHeHßøJùýa¬}À§ÅO®=}!à.¢'g7
|
|
2603
|
+
ðQ¿ïaãôuô<ߤ×ÖuÙ¿¥hÝND Ü:¦\qUÀÁÑO8²795kÚUÙ¢HvÎëµnOlÕZÁ¤<F)KÜÄ'ë"n³Õ|!$
|
|
2604
|
+
Àá±þÂÈ',zI}:}:íI©\!$Ú¦Ægd«ÒMQ;ËÆOHò;QÑØoMj<HwnÓÖ²èål¤_sëøYïWG@øÞKe˾932ÅæØÕº=MÊɶÊJ_UÚþM/ÑÆZÏeÿ
i*vÁ§K{¸ÙPª[ã\OìmÂpJùþ¿?ª1í\T-c?uaîwÒ+ùgfë_ÀOþFðj¤® RôºD¾<²úýݣÝdï죽£°uºÕ%VÏÒGÊ-ºz×0l>*?à4ÓÐ,<ÇkÕ¹²ÉNÍ
ÔÔ²Ò58mÄîr?å £ûP @bb^Y(±ålèÅo-hÅv=MöÅkÁR
|
|
2605
|
+
mXÂDmÃ.ǰdÙKU³ = LÑëø"Ôuqã>K䣴0°ÒîdË U ÖÎ4V»@]f¨i= "¨»Øk°Âß9B=}!î¤5ìgýë©Úz¥¦TáJC!êF;4
cÄ\VJYy'@úÿ°kÏ·ª{üj¦»
|
|
2606
|
+
GN$e:iª¬ÙÍõ´ÊܲÓaU¹Èßgº-vm5o<"DRÏ·*ëÀêhx÷= ÎÕóØê§ ®:ìÓ ÄF±ôZË>= íbC¦[É¿sDÜ-bÆÿ©n¯¸Óµùñb¥Öó¥Ìj®8%7Oüýb]Tb'
ë´Ê¡ÜbFÝ[µ"ÚÃÀrº:P¦Ùt §2ëáØÅ6Júì¦é¬
|
|
2607
|
+
h¾e¬îNd+;ÊÆÃsc7ÍâöKc"F¼îCq´}Á éi:(Ì@£ý¯>©'ªjaÔüϪxûtð×êÏ?yg¶[QñmI9ã)DÚP¹f=M|«§¬ªØ1$~á%1Ô¦aÎäÜQ¯ª¯X×>hº¿ZïeÖ ÇäÙ÷rAÙ!B:m8$;±{ÅO\%E%5ÕV+ ¾Ð°kLkN| iqÞ]&ce6Æ= y|Ù«c¶«yºè= ¬é4k?VkÈWÉ0Çdd¼Z[®ÓëWÚGå¯ @
|
|
2608
|
+
Φ ô:º5Î wãé2£¬+sɰF ñ !Mê¹kÁ®j/V¢§÷1¤ê+oY"&h&CkR'zØÔLyYÜ|p$Ç©J«{ò°6ÊúÝ¤ï¥ ü²âE ôNl]DG¾â[³"èGäuïöýøD±_º³òm«x5´/763X¼ñgèå÷tÁ»×¿»Ð¼-¯N§
OG±6ºy+þßc^iÄkY;vùGÔz»wõÁn»Ã¢ÌQ~~jÃÕÂ.øu´]Ðã ®ìGMm¡G@Ît¿¯u«ÊÈèòþ@¹ËdKÎd6õíì2®ü.$a"Ç>}?'JVfoL·,;×%Pj<'ñ7á´¨ïÇÂË
9Êo±îçл¨Ë¡jÕ¸ÎúF'²R¾G÷£K
|
|
2609
|
+
Nv0¡0:°K.¸¥.Úl¥Ùñÿ®^!¨d«pÆ}Ï+KÌè¸éIÈ¥¯¯WÄk
|
|
2610
|
+
´ÊUeFÝ=M÷=}@í^Í(4_ïìâgíäÛäæsy·äZeGØÚ?Ñy=}é¯W\ÁéïdÁ90ªæíeÀo¢õpÚoÁ?ÆF·DÌ0~tïtjLD2¼ÃuÝ@¾aÅîë³Ò
|
|
2611
|
+
C¾áHôÃZERvæðÁ< #&!àZ-Ê'©þéöBæÝ÷/ÕdH¨
4ØÖ|À¤§b¢*ÏFXº £$SýôªÿPÓ¤4é}$±ÂÅ4$Ü]Èô0l}Y_@7ÏßÏÈÖ6M¼à÷èiØX= Iï¼Ò£«¨ì0$°u¦ëì~³þnÓ¶©±ÄÁ¨1]ö¼]cCa
F9¹jé>ä~^X0û)cqJxÅãrDuÊÔ9J&²/¥Lç#ÖxvÒº[³¸
|
|
2612
|
+
(¬«k´ë¯ÝÜÆwêÃïâÅW6Ý©³ÖaþV+¸{.@íºXózHÁ6@{)íjÂHùSÀ
|
|
2613
|
+
'G¤Dîë-Ñté²N$ÎR̤oî4÷vëì~I¼_c@ÂÝk95
ø§PD MJ´ÎxÑQ©ÃfaÔv0buÞLQµT4eûÌúÃÁéq=}g°ì¿tïhÝ}ýºûBp}ËÚè·2ù&{íï_ÄÆi»íï
|
|
2614
|
+
ÝÿÙë,¹Hï:á= SÀ©Ñ1JdëÛ*}\½ùÌ_ÆkÞ:ÉÙÂ>dÇy
îÐ)dH4Åî2SY$ÑÛ{TÂðsThæÐäö«-5^îSÈE ^gOlö_¹/·´YûO
|
|
2615
|
+
û+Ä¿ë¨ðetêüu¼t~#dꬦð)6|ðô}óÇUæ0³Ô|Òjá/äå^ªóéýo¢øZ&ÌÇl,¹Fù
ä>í5voÓT[2'ÄtXè>õ°ÊJæG<ĬmoKijÍÑeº¦ïk;ûµÍªÁìÀ#ùº}OD.ÓaÓºC<ÿh¥³@c.6ÿõMSëà+Σ¦ÕÄÃÐÓ$ZÉréÈÜb}l ¼e5KHk]\IóaGAk£¼Í"û
|
|
2616
|
+
ûϳoõS ÃI1ÉUÁñRÌK¼)$H1%)ùøumÃó5T:{)¤äTû¿ùðU»0ÐY@ÔQ¥Æ0RLÅ;ç±æýb|E¸ù$ùî\µ1v¶kMè5ñ7¦0µ?m»Ìlõu³_ôÎ]_ªÊV;²·ÒiÃ]-gk0Úkø¯øw®yä°zbØèXD¯!jÍw¹cà.zj}ëïVØb8W@z»+ó5(= àaôdQnGhÍ*haóû{¤E°þépêà¡ozôNSÜku¬¯xäX¿åR|4.³@¸{£+Í*ï©k÷\Å b?¾!þ¨´>r$ðëfÙão>¼9ɾPx)e´hjETêÕ= O¬IE Tóê)RÍbÏIsHI·ï<q:íÖÏ719A!Húǵàzwo·ä¶?«vs×BÃ|3´ÛʳB>!·EK±µíü8¹d¯ÁÓ.
|
|
2617
|
+
¦xë¿ç ·çÐMLúDqæ't¦-C÷¬#É]¬§ÙÅÑB³R..6Øà]ÌÌjzÈQéâuò-nE@ªÍ@éà"D*ßz¹i.g®àiüªè_{Y¬t§¢Ò¦ø7bä{ôè¢ïï¬8󼼬ã´{®EÎæÀDH¨ïªù
|
|
2618
|
+
Ñ/MËlqIÜv¡d¡!«¨®C@X*YF_NÏ.³Üpú432~7j²7ßhÂüZõúçûÌEú6¤|[í×4w[S
|
|
2619
|
+
ªý£Cê~j®Mìj¢IW»¨ûsøÔ,óÝ#
|
|
2620
|
+
¿ÄÜ ÌgrϹ=M}Ìßù´G&ì6ïÊ! C°|ÓKcîëÿ¶^£¦ÌZT.ÀE_ò^ô72Ð\öV<1¡
|
|
2621
|
+
Ùc&£ØX#d#¾Ìbp/5Û{o5ô:¢¨Æ©sñ©ân= 5×rê_2ü)
«¤9ìkkÝuáuÙõXÀ,ËÜwòJ¢¨sÇ«þ«¯ó8þLúb°Ò±åjXYã2aλ6#'·4ËúFÔË0+ÙÐT!RF°OæçÝÞZ+ ( 7/öf÷{Ì2Ü®Ætuõè-÷é|"víÙ2v_#|ù3>.gXÏ:÷rÂøv?>¶IÄ3ªÍÔ®i"ÿ=}p2^0J4º(7QRмá]ÑeÄäSÊØ-ÉÛMpû9xªzõ22TécÇÿS*T¡ÈÄÉQÉÒÉ©Q©Qõ½ë%ÂÄUol44*TÌÀUaÈÔÉQIÒÁ©Q=M¨Qµºë%ÃÄUû
|
|
2622
|
+
£CEúLõ52TIÒÑ©Q=M©Qµ¼ë
ÄÄUl43*TÄÀUÊ.¦9ïß]¿vô.CbjºcQÅ_̽xYýT¤7©e®KzâeËdFj¢YãÛ,ãZ9üró#v÷"7ï?ë]ÿÍJ"Px"ç±è$pÙ¢Êÿ=Mè-xò±Ì{òp¡Ddú%¼W[w®}»##GT·é lÐ9ÜoL´ÉºÒcäªHW ª¬=MÁïÁX^rø!pJ#Úe±Üúo;¹æ9= hûé×@YÊ©[B|Æ£®TejëZ<jµ°° ýÖÛ£D;U5B¶,râ _¬ï0°å E9ùÐåNÖ= îoÇV¶Å¯½w-ô@ É©Zª²ïd'l
¢íLÁ÷âs¦oÅ×ô°/Ò lN_3¦%=M#ü1¶ÈH_aÛzkhÈUGMñ79µC÷ó÷¤
[XìÎÞyѬÑÕÌ¿»jU5±Ãêdª©&¨Ù:ó£òݤÝ%Ý.Ý¥ð/NfJÊa/5H¡ÊøÉÅD>ó(©÷èqª3l>æ5MA3h0
=M=}*¤¤Ã=}ªñ©Iòð;ªó¨,Æ
Ãÿ¦Ýy_õ|eªÙ= 6]k?.gûÖNG?È
|
|
2623
|
+
çpIjâB°
|
|
2624
|
+
âÒ {WGË&þvÈ|Ô¶lo8Ö
= ÆQyºrK+%>aô³àÄ·°Wý@Û«©ëþÐaf:hÇòê(»ÚfθËe NüýÔG«[DqÍrVËèE$cóDG*é¹sAºSY¹²J:(¶Û1zÃC¥4[óËÚ¯¡"¬ÎàNQLÊoòÜÅ|mÖÒ!%ÿõ¾vyfN¢,¼Õøñ1«
|
|
2625
|
+
=}9vo»ÞcÚ/oCM6ÿ>IãýõÒÇ2Cf
|
|
2626
|
+
®ôÄ~oyþp$\±(æ5j
|
|
2627
|
+
o¸#KVÖÙÃÛdjbIÀd¸ÖI¦àÝu²èÐ#Ñ>BUý/Ft4Ù= À,«&KÔH?IH)N"ÓeÞsçMñ?ï//ÅÍÅUÀÃK¢,$§8=MH00z/¯ò®ä[gu<ÖWY\"DXÈzQʰò§ZròÖrn^fvvWlîyÖ2÷VY\Èfs^^vvÖÖ_:Ô+KPK@?Ïs¡§Â+«)+³«)3 A3ÌÉã½ÖýÚ'Ù&]«Â2uYÂ×uì¡D]=Mä®|'B¦?´ÃÇRÜKøw¼{òâixÓØßñü¥®ß¥Põ&oíQÚãé^½íK_ñ}¹Ì»¡LÅ3:~Lo
}«.îþ²zÑÚÃ{WºçÀá°Ý½)ñf»û/ÍjÇC±³FÕÁRnzÇlæy?Lðl4×ß$elºvÑ{/Pý¡ÑÊYí5ýXmÂÅÅKÂ<4GÆÌôêêÄ(qx%È,éÛÃ@³âû!Àca?¡½Ñ÷Äï¡Ñîªk'ì¤.=}+_¿"ƺ±e¢ÀBùcCp¾Øp>ú¤:và÷¯¿ãÆ»5¹1¢lÂ1Ã0øcǤ«}¦{, é´ëwÓ¤,vÇp¶ìv9ÑÂý}£}̸ÆW0ÓTsq>ÂÝ_Í¿¸5ûN7í"F¡üPÍÖ.ÒQ¦W:RÈ·s~ùø÷WD4VbhwaûéÃx(c*ÞÜo§lá¸Ãйã쪢B'UR17?cÙMuÁÙ*=M]Îñ}eÒ¦Û"C47IS)ÏNJÄFàUbÒýO×[òu#=}=MÕ(¸º¬qA¯_B4ä»Äå\<Lú=M=M»ÄÉÂ
|
|
2628
|
+
]Üs.wô1eOsíËÄýH&s5
|
|
2629
|
+
*-óLÝNb2¢OyrÐxÅ6¹Áãëù¡Ã?>ϧ?ø)ê=}/(¥ÓäzLtëäÇ=}zòL,ñÞ:?srãçùûZÏ\ø? ü@b«óO+e"+,+eøi=M»K¹Ðüõ²ÊXmbõÔ³Sr:-S&= ®Sb9Wmqaê7u¼P¬Ã³Svï)_«GõL6@½ûuÚSï©4é¨m±.Ér+¯Ã´ûÒjG¸^µ¦ç8c<¨RÚàó|wiE*®WA? ±ªB G©GMª²Äf2É3|øë8sGkûÎåàñdÇË-ÓxLúNÒ´í8«ÄGpk¥{ÇëôAyxÄ;þN©äàýòȪ3Fömg%þN)áà½ó´ªÒù¯¶µ½
x?Jø8±¤
CJø8Ä ¢²!YÐgGò)!òâ
þÎ'?l«äo,\÷K;éJ®4«ü¥iøz7}¬ú= ÛÅéFSe,íKC¯GQ¥7~ÑäO²8{h©ÀRUêðû4½þaã¦%4|OKVÊô'è&¯öáâ¤i0[~õPCRϱDÆfIIÌð= ç³Åy¢0IÌÈÝþùÚÊçïÍ_:éÖ\bñ*|yß\îåcç>)½©.Ã-Å}ÄTê, ±'´kóÌûA^
|
|
2630
|
+
*6-H5HP>Qûí;à x¶<ãÌaÂìñ{]¯¸ Ý11½ 1'i0gñQû<5½èòe§=M;~eoÂ_¶A ÞyCªÃX}ÌXñr-÷ý«F©Ø)ZyFMZZUÆì6ÃØÉZUñ6Zm_Tç6hZí_Tß6©ZEgÒð6õ_twÎõö{Nà6]'¤« Þ+àÐA
gÜÔ»Óþòðò>jCGÒi½±.0¸qæLÌÏmk&D°_ϽYH[{u_=}êRÊ4«H©WOÃ{
]:=Mêjæ5ªH¸ÔIWOè=}XHA ôc½ê2cýëiæ¥Ïv:vÅÏvõ¦Hª4¦ÈvgÈóAD°å'.>7>ùk³[>= &k¦>&»mÖ~0[0«
|
|
2631
|
+
Z°0W0§]ððV£jÃCh=}±¸Ë!áÍ{jØT·\ñÇÏkX>9ÀÂØÜ7b]xà=}+jÚéæ4»«çÀp@«¦@+bª#Â+/ªOlOñº SÆò1ûøîÏôêáó§½§lá̧lÉ$öò¯b¯ø¬ò¯¢Û.£»¹/øºò0¶t©Þ{8º_O«¸'qºbZÙΦÝ8xÚ¯9¶Ý qù;'0ñ¹¤"]ÉÎS0Õ«»XÑ*9
$«õ1¥6d9Cæ Á·¢T4d´C*ì;&Öt´5}0a{ºßvµåQ"T ý&¢[
émK´ogÅ\8Ïï«u+¾"éYq*! >º5ÿí;'ð Ͳ {LÏÙÒ¯y&Ôþ'y"]z]<Íð¢¼íô
|
|
2632
|
+
"Sâ-èä§þ[è+Ûn*_N:ºìÞ/pÄÝáñü(,éðsZÜép
|
|
2633
|
+
§Xe®±îhøWÀc}w¹rÒçÉ»tÆâ¬ryäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëÇäëgàÒGÀãsÁGÈ +е ήßT.gÑí´·ÖÌGèCC/\:a hæ%O?Ö:ýXH1 ´dÅÏvÿ:ÖRÜè=}YH¯{%[:-ëqæ%~qæ¥Ï|võ¨HÊÔ¯»4ªHº÷:ÿÖ÷:Ì´gÈsçÝ;KNðãðôhä´¸Jþøk³Wøþ[Àk³\>X&[àì¡à<Éiößø¡´õ6* Ádm¡$tu"(ügʦ÷1@nÚÿ´ÖÞ+Z´Ú+¡¦d+c\Pd"ªÓm-vAé ðy¾ó¯Ñßà¸FEçðEͦl1ÄöÜä®K{êú
øL²¯âOX ¸¹ÂåCp×t/ÿäX¡[Á ¿jâ @1þþ.GZJ¦é·ÏAîÁú»ª«Å×û,-ì'¨Á«+å×}È5¹µ+yöÏ£UDõTçPþhTT}Q¥Bê
KiÒ 8ϱhQÜ1íIÇÕ
,¹6o
|
|
2634
|
+
9&¢]ãÊy¸_ÜQ o^lxÊÝ4$
81:wãþ¶83oÃîË$&q¿"çQ@L´0ÀÐ\àrÔþªªbʾL¶ÒYxÄ&êBW"Iðêî8³ÓßYqViEg¼Hñű= pK=}2iu{ñ®¬i®8¬sÙìþh!DÀð\ÑÚgâ³Xõwâ6v$gcÝhÝæ6³Úgr»ØM7fÆNô|Îë6gØ-^°Øug^Tض£F\kØõfÒÜ6_¡FlÉUZÕØ56T_SiR|M¥F~M¥F±2ÅÉUG¤KÃÑÝÞÏÆ*tÏPÿ;¡áaIÉ ó¨±.=}TÖ©PÃûÛ¤?=Mêrûërû5ªÈ>êý:&SÜèýÊ«÷©PË{ݤ? dó(½êrû dó(°÷©°Ê èýJ4JäèYýJ{ݤ?èýÊvMênæåÏvÏv~Ïv±{ÍYHè½XHØèýYÈ»ëoæ ô= èW§HÄh#*mÝíM@Ú¹2LSÜ=M}|Ù1iéüû/uT?NC6ê¢hòè_e*hB%ümÜtêt~¹Ø,:*¢ØUD>¢Â/@çG¬å*¾NÃJÿ= µ×2y;UÆI]yðݳ+rwÿôéç9¼Úð{zRã¹lS¤ªNY¾/!6F°ÑÖ°©N>üÐ46tâ1nø¨scwܧEâZW [¸~Ð,7óA;ør7æcÙE²J
|
|
2635
|
+
½è[\¤+ÿªlà
|
|
2636
|
+
z,ö¿½ÿQò²=MËxG\¸Ô_èGjí}¯ÁãÑr¾Ñ"Ü£Ä,MA¹ÉèE.,,AÝ]X%*À>o
|
|
2637
|
+
ÍrCû êì-ÐLáphL=}Ý tæSA/CW/åb½µfÑÅ!ÔËRUeÃ÷öV©Ö;"
|
|
2638
|
+
ü¢.%êNäÖô= f¹EÔ¦§%®ëIñaÛèÊ9 l¶æbAaëçò;hÖùÍKPÏr=}yl%a&Ë-7©dµÆNí×é/öø
|
|
2639
|
+
·sÃËÖXð?9d-ÔäÔ´Tæ³õ»¤ÚØÂ"QmId
|
|
2640
|
+
Ú(!HºÊ;É·Â:ôç¬Õ¸+Ù<0ÁºFuiÚÓÿ½XÆÑ$9(SI'Øeqß^£FH¬´çàewîzøÝä¶òÍlÑu¬£e)ð¬"æ¢ÜaA«<|í"ý¸ÐwW>wìí$¿Nì~D|l¢Mg9ʨH7áÂzs!CA²ö=Mª4˰ïãÖÚXHLÓ7yʲã7«N0<ýözaî yGåxàè¯ôk C|Ðí5ý^úyÞ>û NäT/¼uÅjì¼#pôQMø}9ìÅ->7Z¿îP§µÆJd¸KKw¬5G(ÿÞëVÓ®=MhíÕÌ9°s?
BzìMɤªoòY¾9Íÿ¢%4 "ô¡¹(Tg=M¥g&«è=MÆ.s¤eÆÝ/±=}Ñ[]gPéÜ£í¢ª¿õwÃtÑbÐ,ü
u¡q%ø\Ëq æcéº{´à¿æüXý>öM[ÃάO{½aäÐvöjæaöÁås¨åñôêläñc±¦lªÂÈÔ7ÂÄɵäãúyÂyDwMvB¸§ìÛH¢ ÔØÂsdDôgNqþ×ta4ãkÏrÈv1?Äs90ËM<+Ú#3p7f´9³[':ìI>|G&\ÎU= ]Ó10&8Ù9ÃBGâ#´9,Ã)âáºëgOk\¦5LÞ9ÄjHzÉA4ªæhȰÝ\ý©9È¡o+2ÞOøpGm,yÁ ®YúãçÙ8ûäköt¬åºrR×)h§$¤m;BeJTx&µÑÙÞî h+v¦s¹ãNcþ&ÞóJ§¯É¦
|
|
2641
|
+
5y}NR&\#3äÇo³¡<1<]R¬©M$v¡¥ùØ<ܵø¢ >ZOr=}ÀÕâöÀ߯}xs:'ìbøîpxàMÿ® G¥ªBøÞM{eýª´ß'ÚnûÍOâjÛo~½;l¡GU.ÎØÒY׺箫kÔnµüF_Z·rã¹+ptAÙ¾Û~FzþÔJ+nÓ/¼{©ç°àîòàU@¦x¨¶èè-
|
|
2642
|
+
9^è*ß!
ò¾Ô7ê4èèµ®I1üðµ3w±ÈÔ7ª1j·Gé×R§ §BÃ-ç<m\HaðµÎöçZOÛyØ·ðµÔ·âFv*Ç/ìã%ÂØÂ!÷ðµ
¼Ô²°çñ/i&xÆOήö¡"2i¼_¥9ñEkùø£Q¡êÄ$ö PÆT˲ÚõÞUÂb=}5d7}øFõëiO¥683wRjT¦»ÉU|T¿^gÛU£ªÏÏU!ÎÅ^gÛUªòUjTÏ^gÛUêòU4u¥75ëÉÀòéõã zÓã³j)¡ÈÞT(j=Mþ~OêÕvkØ¥{Îusç6©#Ý5=}Ú:|kH®7z/Üë¼-´Ûþõf(o,DÈÔZûe§Ä}òþ<Y¤Äw8±WaX WÖ,6ÖÌÄ}¢ÂgÇõJÒÆkoãð ÛqPZ8ƲJºLj)ê7ç^ÕµU~¶þÈRáÆ¦!æ;½Q¯È-!%ìµB½Oû¹O½gÒõ;iÈ RºOKÔì5ìµÏì±w!EL Ò@®ÄÏì%ì5E½OÙ¹O¢®:4
|
|
2643
|
+
nÆkjUðx=MË7Ú}Áº±öûäs7$Å±è¢ ß
|
|
2644
|
+
ÚØý$XÚè4±þðÈ1[o¯Ãb´ÿj2Ë$Õ0R½Â¹g9¨´PòèXâÖªårÉ4e'Ü~éé¶RÙÖ÷3Òb×È$tÒÙÂÍî·¿!nüê6âv±?½â)b³h6ÛaW"çR6Z«\ëv4Ëá/Õ¸±®®pªÄTø_Õñ%¬9ÓIµRã
T m,øcYS:ì*V°= {yîå59ÙÏY°M8ùVAóìµWhòi1àú
|
|
2645
|
+
ðÛjmZA= ~[ÊVvè§ß"ó634áò'ìP⺪Sò£l§½B
ÆÂ´=Mô-.0²9ó"ð¹JÜúYëÕ°UÇÔеtbߥºâzdAÚ'ì!»
|
|
2646
|
+
jêW?ÉI|Ú~áý!nnáèÏ@u@^/é*C=}8¬+·µo¡ëûlíÕ+ªÛIÒ¨Ù÷ÞS
|
|
2647
|
+
o
ÊÚÊõptéq N¢·P1S01$Ãæï¼e
Ú§wA9-·*u,fåëº(nÌ8æÕî~âPñî6zÍ«¦e 1kM*{k¸g=},i~èø¶â7L/Ç qÄÂñ,Z8½Þ¥:Ý<ÚÀò
QZú%|0ÏßV¦Ô i_ú»qµ²ÝÇíÝ,l*àú= ÄC=}jµÚJzaö5ÎioûsOyµØxF'âJÊ]yÕyÞÚ¶B2À!LG¢Ðú¨ß&*Çúô¹âj-lKÿÅ(^Fsq5¢#~DçRÅpmí)¡qªz4»+ìfýhbÛ²;âú¥z
r¼iñwôZo¸ÝùM$!Iç¶ad-&vÏðÞ7úêËÖÎHiÏzRÐÚËA$#+ê<¹-t:DŽ]ozYwîóÐH¼Ëðñï笹¬X«£ÃTµ6uAHУð£ËêIuI%Õfաøõy5BÁiû!JÓôÝÈ¡9ÂtTæøÂ÷8=}Ó ¤é:Üz(±û÷Kb¡ô0ÐúÌ®»¹)ñÃOw%MêD¨]l<ÇÅRºêçGÞ°@<«øúνq¸ÊÕpÒ.üÝ6P¡\ÞßIG}Mp/qÇÑ¿v,§<)Ø&êËFªè:ì\Ìr_N\ë¸ñb+ýàzÍÝ´'R¡ÌGÙ|ÏÆ¶
|
|
2648
|
+
j¦sÏ0ìþjðW)°âmSúç'á8ºI.ÄhÐÌðÑ
ëÕÔÿu$Cl±Â{}(L ÛûøN%=} ôÆáU¹êb×Ü·2]îý±m¯ñÃ;cí8·8FdßùuÝMlÅFdto}ìÒ!S!H
|
|
2649
|
+
qiÎç0nw¡¥W¯XQ¯¸.vY½àPfÂðºêÐÔ»0ºMZ÷Çÿ0= £évGµ·F,Ý×·ñoG§v{H&xëh±ÚjEÔ¤à;66ÏÕ3óÍz;ϧ4ë¥;±Í$MàGêá&Ðëo!3WØ"^°Uµ´Ôù½
,b#%q´@;lxb_mŹQ¢óÐÊö´36ÁRp!
|
|
2650
|
+
òòÉu-
;Hq;§Ï©ÔVcWHT4\VdaZ¼¢·V'daÿx]d_rqhkzyÆÍÔÏÂÁ¸»¥ª©°³6=}D?RQHK.5,' #æíôïâáØÛþü÷
|
|
2651
|
+
$12+(UNGL9:C@=MûøåÞ×Üéêóð}vunglYZc= ¦¯´¡¢Å¾·¼ÉÊÓÐßäÝÖëèñòùúOTMF;8AB%30)*¿Ä½¶ËÈÑÒ§¬µ®£ otmf[Xabw|
~¤¨«²±ÌÇÎÕÀú¹x{\W^epsjiÿöýìçîõàãÚÙ4/&-"!<7>ZY¶vVVXÐ1Ã1Ã1¼Ã1Ã1ù13UÓ[whw\øÈ÷VHcè÷°÷Y0e\=M÷= À@÷÷Zà@þ¤6r¤AlDAü6i¦ÕF¬uFbå^!§Á]cñ«e = 9¨*yäùáI)©ß1Ó&Ñ,qâáSÞ%S'ÅN-WR%@q1I?yèBÈEDD´rÄäÄC¼¢Dª"
|
|
2652
|
+
$Ø$CÂâî¤BÎbEbÞÐÖdY= ØVÎÅ=MÃ1Ã1#0Ã1ÃóRÏÜlÝßn5( ûj(¬+ök·¼=MÄBÃÃV}0jä8ÆÁ¿Ã.ßCtq±³¿åCt51}6©I=Mv*T&)Ô1Ä=M³ÌÜmC
|
|
2653
|
+
s9h
|
|
2654
|
+
#äIÃg½Æ£¢³I´·[ì@ÇÛaÑÆ¦ÍAÒ-µFµcú\uô6ûÔ,ÍåÆYü,y*-Ì>Ã[Ü·
|
|
2655
|
+
¤+_nþ&a3qÈÁ§Öà°[û¦²©ÀpºÐãÝpWg$8X8XÆoåÞaÉèåÝÈFáVR}9nVÇWNàuúYEÞaÁ|VqqÌ·ÇWÜézâS[¶e/zQ®¤²Vì¶ÇWî¸nþYäVV^öÂDÊ}^wfhXwÚÚ^wfhXwïwwf^ÚÚfXwwf^ÚÚESÞMEMõõ{U]xWxòÈâf¨²Éábmx$oÀIß\>ø#m¥~ù a= ÈårÌ" ÞY8"h±Î9!dtÂäq¹î¹Z"ãkbà_Ynø%µ@ïdÀ6Þüp:ê,0ùÛéäÁ<ðDÐ÷åÄAûé!@8Øä0=}óHPöàúì5T9ÝðQüî=}´7ã Ñ;çàÐøÖÝDAJÖVlZV<|QÃ1Ã,ÃyÀ1Ã1ÃA3·Ü= ¦×ÄNbZs¶rÔØµbÒcvÒWL·k[}o2ס.VUÙa¡R]ÕØ[Fs«F]ÄÙ¦^6¾XF\ªÎ^¶Î[4gFo$FW2ݳm×W>÷§åpÅpµ§[ãõþ¼ª³¹öß= þ@þ)®S¾lø'Ã#Q¾'R(Òá4µð>ß<vqóñ+ßo",¡ñ,<<©¡ô¸p°ëî¸",ÌÓ(Ì
|
|
2656
|
+
sÌp,¾¸Õ¹!0E0¥0DRÁR=MDÕRÄ¡=Ml5åõ@Ä
TøÑÞ5Ë9àó¬2ÙdÓArÊÇ!$Äþ))B@åJ½ßqS8GUøUç~ß%PKÔU
Ç÷=M|2K0_)q{êiðÐÕÐûÚeíÚZJ.>w;;1>;-þ»ª¡?ý¢ã8þíÈú©,5ÿ9ðÇKî©©5ãeí*»@4ÎòDo}wËc\ úãx?ðÊÎNèú½ÙШ+öºFí
|
|
2657
|
+
2zuéEÜCºòoäè!£¨HÝ7¡H¹ÜjðïÕÛ[Iõo,#]<éOðE"7å¯wð4¥m
=MJÓP+»¡õîc(?ϼýó
|
|
2658
|
+
·02Êóïô(ô)£+J·°üSñ$Ù:lÊ¢rî\¹éàyNc |Eé_VO5ßsù^VLjQrV¥çë.¸*7Ôi*à7Ú%N§:9{·ooäÕßò£ÝÞ+¯;xÜÞ=Måx@7w¸H
Hùæ²ãâ¥Ç×=M:Ó yȽmÏ>tÆVfVVÚ4i0r,ü#¹Ãä)ó9^wÚf^wÚf^wÚwÚf^wÚf^wÚf^wR5M
Põ\|NðÃÉÄ:âÚ<p»ÓeûU¶ u@±îÛÍí6£}ÆWyÿ*ÿªÚÐ¬à ¥Óÿo»ùâ*
|
|
2659
|
+
H¬ñÀ£¿[ÆW¥e|°²!Ùk¾¾uC^@0pvVr^v2ßà¾á"ÚîäÎÞ HlQGjq%HAhm¸vüºo^Èdàå|.Zyèd4úÀ&aÓÜÓ_9·ô¾yRÚ°e-j§näCîì$Ì'D¯
¹ÅBçë5¬)/}ªÆ$iKó_àù Èp>Ùä¤ss:L]tFITUÐÃÅD=}RÚI4P»ÍÄaU2jt8ñËEá¡DciÍ7Nå÷ÆÂ÷9Ô
|
|
2660
|
+
¿àù*¿à¦@^±r,1lÀɱÃä.ºA.¿ å¾sýëû¿ûÃ?øË±Ãä.ºA.gñÂo¹÷M%I«Eµ |*p+XÙõërdûÄήǯ®æxànë°×å" rããÝmêQ!yçg.Þ2yðéÇ %ÏÂÓë ¬¢aòôú?ùúÃëúÌæÈ¨°Snðts¼Lî¨O*ÔeñÆ2Ð2æøE ¨=};?KãÊǰ6òGò»ð«ð0,¤tË,À}1fÇ$Ûõ(µ¼d*±AcïN(©ß©*N~C[Údôl(çJø)î_ó|çîî°Ù¥ !òã£}jªQiçbyMâ<ì¦J2è*M@Ðs«×11ì«P1 ¿»±u¯nÆ\
|
|
2661
|
+
[Lñ¦óu¿l¢|4*
!]Ä®ÅnìY¨Õ¥où³46øèv
v^¨aáóÛDD:¸¸ÇÀzIpÉZ³¬&9E_9측ÉY/ûmimÿB~=}+ÙPhÎî×"~VÂîKDü:¢¸¼ÀiôéÏßj!½kQñ !ç/.B2!ðO Ò%kÏ´Ó3¥"a²´:?Âaú[Ãs:2¬½Ìc ûÉ9Ã<l)rÔ¤ÕaÁnF¯Ó\Ù@ÿwVÀúX¨ãùØÀúû9b?:ÎíÀG¤X¸i½°ü¯g+Å\ïC¨=M«Í?#W½*ïÈÏÙ{eôu§?©ÓzgçíW²¦CÚª½«¨÷·s,¬¯ý³ãGWÞA£AOcla²jãü:|¸y»ë^ùä>·q
|
|
2662
|
+
Û3Â1ÃBV}=Mi~²ÌpÍBÍaç÷óB1¿ý·ÏË/3ÝEKD[MdàÝ¢ÝNÙì¨.kÇ·ûe~ù«¶»¢Â"í¯ 7à[¬D[@èË+~cÊùÙo×>¦c±ÃìÀb¡Û¾û0;dþÙÄÍÆ~^mÀ¸ñÃ#¨évYÖx¾QF´Å
.mAj¢³Òýû]Däʹ]:8W˵]3ùEDöÍÛó¦ækÃøj}õô%gÒV¸¥}ü}R©!yNÇ:LMÜÒAÐ'Gî\¹-ü-R!¡N:[L(ZÒ ÔxÜþeH>ySGtÓ}4Ýj·¡àÐÕ3·Óoøí¹@ÁͬÐñ8MÞ¿7 ¾ë¤É= Z·óGÐÔì²{Τð¥¥ò-²ZKÂÖ$´µx¼èÉï$%_´ëlIhVù¡5ßv<t¢ÓÓ$ÄÍÖ$½íQ[Ç«
0jÀÔ[ÔWTøG-~ÀSÛSíÚïR= IqD=MRÙw?¡HíiS3iS©ºéOgÜ7¬=}¹MÐ#U²2rä]êd3ÁSºO{¼Ç=}aM±Ðe1U2kä¹ ¤#ÕuT]˰UÃUmæ½T%SåU¯Æ¦PÿRé¨ù[åãÿ>_AnQ®8zõÇÎÍÆÊðn[*@vÓ|¨½ôÜ6ã$MÎð¼oÕ®s$Þ¤¨ÀÖ¬³4Ö
|
|
2663
|
+
îId35ó£ÉAõwݽÉê|£WÎi·÷=MCÞ±úõ¯:O6?ÒnÎö±5Ö±ÑNÓ½çÑÓÝAµ}à7+' ¦IF¥Fõã5U¶/áßè¹ÓéUÓFÁèzÝiµ-RfR}Re9e&±¡Bd8Å:µïEÉ59UhRjë;ÍÖw3wS:éjQÞÕÆ2]>MBUÔg4m3~Vh¢Ù©f^#FÊXwí(ÛÂÅfIúr±/¤0?óBtTö®Cëe~qWo4Üá+N8wÏådÍNý8y¿ÔübWuZRdÏã8Nqøk¾]ñ·l?²v@\ÜûO²è;ÉVW¨Tñ×óçí÷çÙÛ'å7ßGWgýw÷ §·ÇTWNgHwJ<6§@·BÇ$×ç÷,&'072GªW¨g®w´¢ §·Çº×¸ç¾÷ÄÒÐ'Æ7ÌG×ç÷
'{7yGWW]gcwaou§k·iÇÙéù )}9wIYY[iey_qs©m¹gɬY¦i°y²¤©¹É¼Ù¶éÀù ÔÎ)È9ÊIRYPiFyL:8©>¹DÉ"Ù éù *().94IïÙõéëùé ×Ý)ã9áIÿYiûyù=M©¹ÉþXhúxø¨¸ÈîØôèêøèÖÜ(â8àH#Ø!èø+)(/85HSXQhGxM;9¨?¸EȽطèÁøÃÕÏ(É8ËHX§h±x³¥¨¸ÈXXZhdx^pr¨l¸fÈØèø(|8vHªÅÅv÷ÄÏv¿ÄÆËÊv¸Ë¼¼»ÈÉVVVVTVTUTUU VVV¥æoVÚ::WÈîm]ì=}äeb»'ë¾¹Ýý×\yî!6îñg¸ î±ÞsÞYÞ½Y_l\2U×ÖÇ×_yÆÈhWs7<9X7\8k ¦\|2v²©£ïjúV` });
|
|
2664
|
+
var imports = {
|
|
2665
|
+
"a": wasmImports
|
|
2666
|
+
};
|
|
2667
|
+
this.setModule = (data3) => {
|
|
2668
|
+
WASMAudioDecoderCommon2.setModule(EmscriptenWASM, data3);
|
|
2669
|
+
};
|
|
2670
|
+
this.getModule = () => WASMAudioDecoderCommon2.getModule(EmscriptenWASM);
|
|
2671
|
+
this.instantiate = () => {
|
|
2672
|
+
this.getModule().then((wasm) => WebAssembly.instantiate(wasm, imports)).then((instance) => {
|
|
2673
|
+
const wasmExports = instance.exports;
|
|
2674
|
+
assignWasmExports(wasmExports);
|
|
2675
|
+
wasmMemory = wasmExports["j"];
|
|
2676
|
+
updateMemoryViews();
|
|
2677
|
+
initRuntime(wasmExports);
|
|
2678
|
+
ready();
|
|
2679
|
+
});
|
|
2680
|
+
this.ready = new Promise((resolve) => {
|
|
2681
|
+
ready = resolve;
|
|
2682
|
+
}).then(() => {
|
|
2683
|
+
this.HEAP = wasmMemory.buffer;
|
|
2684
|
+
this.malloc = _malloc;
|
|
2685
|
+
this.free = _free;
|
|
2686
|
+
this.create_decoder = _create_decoder;
|
|
2687
|
+
this.destroy_decoder = _destroy_decoder;
|
|
2688
|
+
this.decode_frame = _decode_frame;
|
|
2689
|
+
});
|
|
2690
|
+
return this;
|
|
2691
|
+
};
|
|
2692
|
+
}
|
|
2693
|
+
|
|
2694
|
+
// ../../node_modules/@wasm-audio-decoders/flac/src/FLACDecoder.js
|
|
2695
|
+
function Decoder() {
|
|
2696
|
+
this._init = () => {
|
|
2697
|
+
return new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM, this._module).then((common) => {
|
|
2698
|
+
this._common = common;
|
|
2699
|
+
this._inputBytes = 0;
|
|
2700
|
+
this._outputSamples = 0;
|
|
2701
|
+
this._frameNumber = 0;
|
|
2702
|
+
this._channels = this._common.allocateTypedArray(1, Uint32Array);
|
|
2703
|
+
this._sampleRate = this._common.allocateTypedArray(1, Uint32Array);
|
|
2704
|
+
this._bitsPerSample = this._common.allocateTypedArray(1, Uint32Array);
|
|
2705
|
+
this._samplesDecoded = this._common.allocateTypedArray(1, Uint32Array);
|
|
2706
|
+
this._outputBufferPtr = this._common.allocateTypedArray(1, Uint32Array);
|
|
2707
|
+
this._outputBufferLen = this._common.allocateTypedArray(1, Uint32Array);
|
|
2708
|
+
this._errorStringPtr = this._common.allocateTypedArray(1, Uint32Array);
|
|
2709
|
+
this._stateStringPtr = this._common.allocateTypedArray(1, Uint32Array);
|
|
2710
|
+
this._decoder = this._common.wasm.create_decoder(
|
|
2711
|
+
this._channels.ptr,
|
|
2712
|
+
this._sampleRate.ptr,
|
|
2713
|
+
this._bitsPerSample.ptr,
|
|
2714
|
+
this._samplesDecoded.ptr,
|
|
2715
|
+
this._outputBufferPtr.ptr,
|
|
2716
|
+
this._outputBufferLen.ptr,
|
|
2717
|
+
this._errorStringPtr.ptr,
|
|
2718
|
+
this._stateStringPtr.ptr
|
|
2719
|
+
);
|
|
2720
|
+
});
|
|
2721
|
+
};
|
|
2722
|
+
Object.defineProperty(this, "ready", {
|
|
2723
|
+
enumerable: true,
|
|
2724
|
+
get: () => this._ready
|
|
2725
|
+
});
|
|
2726
|
+
this.reset = () => {
|
|
2727
|
+
this.free();
|
|
2728
|
+
return this._init();
|
|
2729
|
+
};
|
|
2730
|
+
this.free = () => {
|
|
2731
|
+
this._common.wasm.destroy_decoder(this._decoder);
|
|
2732
|
+
this._common.free();
|
|
2733
|
+
};
|
|
2734
|
+
this._decode = (data3) => {
|
|
2735
|
+
if (!(data3 instanceof Uint8Array))
|
|
2736
|
+
throw Error(
|
|
2737
|
+
"Data to decode must be Uint8Array. Instead got " + typeof data3
|
|
2738
|
+
);
|
|
2739
|
+
const input = this._common.allocateTypedArray(
|
|
2740
|
+
data3.length,
|
|
2741
|
+
Uint8Array,
|
|
2742
|
+
false
|
|
2743
|
+
);
|
|
2744
|
+
input.buf.set(data3);
|
|
2745
|
+
this._common.wasm.decode_frame(this._decoder, input.ptr, input.len);
|
|
2746
|
+
let errorMessage = [], error;
|
|
2747
|
+
if (this._errorStringPtr.buf[0])
|
|
2748
|
+
errorMessage.push(
|
|
2749
|
+
"Error: " + this._common.codeToString(this._errorStringPtr.buf[0])
|
|
2750
|
+
);
|
|
2751
|
+
if (this._stateStringPtr.buf[0])
|
|
2752
|
+
errorMessage.push(
|
|
2753
|
+
"State: " + this._common.codeToString(this._stateStringPtr.buf[0])
|
|
2754
|
+
);
|
|
2755
|
+
if (errorMessage.length) {
|
|
2756
|
+
error = errorMessage.join("; ");
|
|
2757
|
+
console.error(
|
|
2758
|
+
"@wasm-audio-decoders/flac: \n " + errorMessage.join("\n ")
|
|
2759
|
+
);
|
|
2760
|
+
}
|
|
2761
|
+
const output = new Float32Array(
|
|
2762
|
+
this._common.wasm.HEAP,
|
|
2763
|
+
this._outputBufferPtr.buf[0],
|
|
2764
|
+
this._outputBufferLen.buf[0]
|
|
2765
|
+
);
|
|
2766
|
+
const decoded = {
|
|
2767
|
+
error,
|
|
2768
|
+
outputBuffer: this._common.getOutputChannels(
|
|
2769
|
+
output,
|
|
2770
|
+
this._channels.buf[0],
|
|
2771
|
+
this._samplesDecoded.buf[0]
|
|
2772
|
+
),
|
|
2773
|
+
samplesDecoded: this._samplesDecoded.buf[0]
|
|
2774
|
+
};
|
|
2775
|
+
this._common.wasm.free(this._outputBufferPtr.buf[0]);
|
|
2776
|
+
this._outputBufferLen.buf[0] = 0;
|
|
2777
|
+
this._samplesDecoded.buf[0] = 0;
|
|
2778
|
+
return decoded;
|
|
2779
|
+
};
|
|
2780
|
+
this.decodeFrames = (frames) => {
|
|
2781
|
+
let outputBuffers = [], errors = [], outputSamples = 0;
|
|
2782
|
+
for (let i = 0; i < frames.length; i++) {
|
|
2783
|
+
let offset = 0;
|
|
2784
|
+
const data3 = frames[i];
|
|
2785
|
+
while (offset < data3.length) {
|
|
2786
|
+
const chunk = data3.subarray(offset, offset + this._MAX_INPUT_SIZE);
|
|
2787
|
+
offset += chunk.length;
|
|
2788
|
+
const decoded = this._decode(chunk);
|
|
2789
|
+
outputBuffers.push(decoded.outputBuffer);
|
|
2790
|
+
outputSamples += decoded.samplesDecoded;
|
|
2791
|
+
if (decoded.error)
|
|
2792
|
+
this._common.addError(
|
|
2793
|
+
errors,
|
|
2794
|
+
decoded.error,
|
|
2795
|
+
data3.length,
|
|
2796
|
+
this._frameNumber,
|
|
2797
|
+
this._inputBytes,
|
|
2798
|
+
this._outputSamples
|
|
2799
|
+
);
|
|
2800
|
+
this._inputBytes += data3.length;
|
|
2801
|
+
this._outputSamples += decoded.samplesDecoded;
|
|
2802
|
+
}
|
|
2803
|
+
this._frameNumber++;
|
|
2804
|
+
}
|
|
2805
|
+
return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(
|
|
2806
|
+
errors,
|
|
2807
|
+
outputBuffers,
|
|
2808
|
+
this._channels.buf[0],
|
|
2809
|
+
outputSamples,
|
|
2810
|
+
this._sampleRate.buf[0],
|
|
2811
|
+
this._bitsPerSample.buf[0]
|
|
2812
|
+
);
|
|
2813
|
+
};
|
|
2814
|
+
this._isWebWorker = Decoder.isWebWorker;
|
|
2815
|
+
this._WASMAudioDecoderCommon = Decoder.WASMAudioDecoderCommon || WASMAudioDecoderCommon;
|
|
2816
|
+
this._EmscriptenWASM = Decoder.EmscriptenWASM || EmscriptenWASM;
|
|
2817
|
+
this._module = Decoder.module;
|
|
2818
|
+
this._MAX_INPUT_SIZE = 65535 * 8;
|
|
2819
|
+
this._ready = this._init();
|
|
2820
|
+
return this;
|
|
2821
|
+
}
|
|
2822
|
+
var setDecoderClass = /* @__PURE__ */ Symbol();
|
|
2823
|
+
var determineDecodeMethod = /* @__PURE__ */ Symbol();
|
|
2824
|
+
var decodeFlac = /* @__PURE__ */ Symbol();
|
|
2825
|
+
var decodeOggFlac = /* @__PURE__ */ Symbol();
|
|
2826
|
+
var placeholderDecodeMethod = /* @__PURE__ */ Symbol();
|
|
2827
|
+
var decodeMethod = /* @__PURE__ */ Symbol();
|
|
2828
|
+
var init = /* @__PURE__ */ Symbol();
|
|
2829
|
+
var totalSamplesDecoded = /* @__PURE__ */ Symbol();
|
|
2830
|
+
var FLACDecoder = class {
|
|
2831
|
+
constructor() {
|
|
2832
|
+
this._onCodec = (codec2) => {
|
|
2833
|
+
if (codec2 !== "flac")
|
|
2834
|
+
throw new Error(
|
|
2835
|
+
"@wasm-audio-decoders/flac does not support this codec " + codec2
|
|
2836
|
+
);
|
|
2837
|
+
};
|
|
2838
|
+
new WASMAudioDecoderCommon();
|
|
2839
|
+
this[init]();
|
|
2840
|
+
this[setDecoderClass](Decoder);
|
|
2841
|
+
}
|
|
2842
|
+
[init]() {
|
|
2843
|
+
this[decodeMethod] = placeholderDecodeMethod;
|
|
2844
|
+
this[totalSamplesDecoded] = 0;
|
|
2845
|
+
this._codecParser = null;
|
|
2846
|
+
}
|
|
2847
|
+
[determineDecodeMethod](data3) {
|
|
2848
|
+
if (!this._codecParser && data3.length >= 4) {
|
|
2849
|
+
let codec2 = "audio/";
|
|
2850
|
+
if (data3[0] !== 79 || // O
|
|
2851
|
+
data3[1] !== 103 || // g
|
|
2852
|
+
data3[2] !== 103 || // g
|
|
2853
|
+
data3[3] !== 83) {
|
|
2854
|
+
codec2 += "flac";
|
|
2855
|
+
this[decodeMethod] = decodeFlac;
|
|
2856
|
+
} else {
|
|
2857
|
+
codec2 += "ogg";
|
|
2858
|
+
this[decodeMethod] = decodeOggFlac;
|
|
2859
|
+
}
|
|
2860
|
+
this._codecParser = new codec_parser_default(codec2, {
|
|
2861
|
+
onCodec: this._onCodec,
|
|
2862
|
+
enableFrameCRC32: false
|
|
2863
|
+
});
|
|
2864
|
+
}
|
|
2865
|
+
}
|
|
2866
|
+
[setDecoderClass](decoderClass) {
|
|
2867
|
+
if (this._decoder) {
|
|
2868
|
+
const oldDecoder = this._decoder;
|
|
2869
|
+
oldDecoder.ready.then(() => oldDecoder.free());
|
|
2870
|
+
}
|
|
2871
|
+
this._decoder = new decoderClass();
|
|
2872
|
+
this._ready = this._decoder.ready;
|
|
2873
|
+
}
|
|
2874
|
+
[decodeFlac](flacFrames) {
|
|
2875
|
+
return this._decoder.decodeFrames(flacFrames.map((f) => f[data2] || f));
|
|
2876
|
+
}
|
|
2877
|
+
[decodeOggFlac](oggPages) {
|
|
2878
|
+
const frames = oggPages.map((page2) => page2[codecFrames2].map((f) => f[data2])).flat();
|
|
2879
|
+
const decoded = this._decoder.decodeFrames(frames);
|
|
2880
|
+
const oggPage = oggPages[oggPages.length - 1];
|
|
2881
|
+
if (oggPage && oggPage[isLastPage2]) {
|
|
2882
|
+
const samplesToTrim = this[totalSamplesDecoded] - oggPage[totalSamples2];
|
|
2883
|
+
if (samplesToTrim > 0) {
|
|
2884
|
+
for (let i = 0; i < decoded.channelData.length; i++)
|
|
2885
|
+
decoded.channelData[i] = decoded.channelData[i].subarray(
|
|
2886
|
+
0,
|
|
2887
|
+
decoded.samplesDecoded - samplesToTrim
|
|
2888
|
+
);
|
|
2889
|
+
decoded.samplesDecoded -= samplesToTrim;
|
|
2890
|
+
}
|
|
2891
|
+
}
|
|
2892
|
+
this[totalSamplesDecoded] += decoded.samplesDecoded;
|
|
2893
|
+
return decoded;
|
|
2894
|
+
}
|
|
2895
|
+
[placeholderDecodeMethod]() {
|
|
2896
|
+
return WASMAudioDecoderCommon.getDecodedAudio([], [], 0, 0, 0);
|
|
2897
|
+
}
|
|
2898
|
+
get ready() {
|
|
2899
|
+
return this._ready;
|
|
2900
|
+
}
|
|
2901
|
+
async reset() {
|
|
2902
|
+
this[init]();
|
|
2903
|
+
return this._decoder.reset();
|
|
2904
|
+
}
|
|
2905
|
+
free() {
|
|
2906
|
+
this._decoder.free();
|
|
2907
|
+
}
|
|
2908
|
+
async decode(flacData) {
|
|
2909
|
+
if (this[decodeMethod] === placeholderDecodeMethod)
|
|
2910
|
+
this[determineDecodeMethod](flacData);
|
|
2911
|
+
return this[this[decodeMethod]]([
|
|
2912
|
+
...this._codecParser.parseChunk(flacData)
|
|
2913
|
+
]);
|
|
2914
|
+
}
|
|
2915
|
+
async flush() {
|
|
2916
|
+
const decoded = this[this[decodeMethod]]([...this._codecParser.flush()]);
|
|
2917
|
+
await this.reset();
|
|
2918
|
+
return decoded;
|
|
2919
|
+
}
|
|
2920
|
+
async decodeFile(flacData) {
|
|
2921
|
+
this[determineDecodeMethod](flacData);
|
|
2922
|
+
const decoded = this[this[decodeMethod]]([
|
|
2923
|
+
...this._codecParser.parseAll(flacData)
|
|
2924
|
+
]);
|
|
2925
|
+
await this.reset();
|
|
2926
|
+
return decoded;
|
|
2927
|
+
}
|
|
2928
|
+
async decodeFrames(flacFrames) {
|
|
2929
|
+
return this[decodeFlac](flacFrames);
|
|
2930
|
+
}
|
|
2931
|
+
};
|
|
2932
|
+
|
|
2933
|
+
// ../../node_modules/@wasm-audio-decoders/flac/src/FLACDecoderWebWorker.js
|
|
2934
|
+
var DecoderWorker = class extends WASMAudioDecoderWorker {
|
|
2935
|
+
constructor(options) {
|
|
2936
|
+
super(options, "flac-decoder", Decoder, EmscriptenWASM);
|
|
2937
|
+
}
|
|
2938
|
+
async decodeFrames(frames) {
|
|
2939
|
+
return this.postToDecoder("decodeFrames", frames);
|
|
2940
|
+
}
|
|
2941
|
+
};
|
|
2942
|
+
var FLACDecoderWebWorker = class extends FLACDecoder {
|
|
2943
|
+
constructor() {
|
|
2944
|
+
super();
|
|
2945
|
+
super[setDecoderClass](DecoderWorker);
|
|
2946
|
+
}
|
|
2947
|
+
async free() {
|
|
2948
|
+
await this._decoder.free();
|
|
2949
|
+
}
|
|
2950
|
+
terminate() {
|
|
2951
|
+
this._decoder.terminate();
|
|
2952
|
+
}
|
|
2953
|
+
};
|
|
2954
|
+
|
|
2955
|
+
// ../../node_modules/@wasm-audio-decoders/flac/index.js
|
|
2956
|
+
assignNames(FLACDecoder, "FLACDecoder");
|
|
2957
|
+
assignNames(FLACDecoderWebWorker, "FLACDecoderWebWorker");
|
|
2958
|
+
|
|
2959
|
+
// src/decode-flac.src.js
|
|
2960
|
+
var EMPTY = Object.freeze({ channelData: Object.freeze([]), sampleRate: 0 });
|
|
2961
|
+
async function decode(src) {
|
|
2962
|
+
let buf = src instanceof Uint8Array ? src : new Uint8Array(src);
|
|
2963
|
+
let dec = await decoder();
|
|
2964
|
+
try {
|
|
2965
|
+
let a = await dec.decode(buf);
|
|
2966
|
+
let b = dec.flush ? await dec.flush() : null;
|
|
2967
|
+
return b?.channelData?.length ? merge(a, b) : a;
|
|
2968
|
+
} finally {
|
|
2969
|
+
dec.free();
|
|
2970
|
+
}
|
|
2971
|
+
}
|
|
2972
|
+
async function decoder() {
|
|
2973
|
+
let d = new FLACDecoder();
|
|
2974
|
+
await d.ready;
|
|
2975
|
+
return d;
|
|
2976
|
+
}
|
|
2977
|
+
function merge(a, b) {
|
|
2978
|
+
if (!b?.channelData?.length) return a;
|
|
2979
|
+
if (!a?.channelData?.length) return b;
|
|
2980
|
+
return {
|
|
2981
|
+
channelData: a.channelData.map((ch, i) => {
|
|
2982
|
+
let bc = b.channelData[i] || b.channelData[0];
|
|
2983
|
+
let m = new Float32Array(ch.length + bc.length);
|
|
2984
|
+
m.set(ch);
|
|
2985
|
+
m.set(bc, ch.length);
|
|
2986
|
+
return m;
|
|
2987
|
+
}),
|
|
2988
|
+
sampleRate: a.sampleRate
|
|
2989
|
+
};
|
|
2990
|
+
}
|
|
2991
|
+
export {
|
|
2992
|
+
decoder,
|
|
2993
|
+
decode as default
|
|
2994
|
+
};
|