@modplayjs/stb-vorbis 0.0.0-stage → 0.2.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/README.md +30 -2
- package/dist/codebook.d.ts +19 -0
- package/dist/codebook.d.ts.map +1 -0
- package/dist/codebook.js +332 -0
- package/dist/codebook.js.map +1 -0
- package/dist/crc32.d.ts +4 -0
- package/dist/crc32.d.ts.map +1 -0
- package/dist/crc32.js +22 -0
- package/dist/crc32.js.map +1 -0
- package/dist/imdct.d.ts +9 -0
- package/dist/imdct.d.ts.map +1 -0
- package/dist/imdct.js +197 -0
- package/dist/imdct.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/mdct.d.ts +3 -0
- package/dist/mdct.d.ts.map +1 -0
- package/dist/mdct.js +185 -0
- package/dist/mdct.js.map +1 -0
- package/dist/residue.d.ts +3 -0
- package/dist/residue.d.ts.map +1 -0
- package/dist/residue.js +180 -0
- package/dist/residue.js.map +1 -0
- package/dist/stream.d.ts +26 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +233 -0
- package/dist/stream.js.map +1 -0
- package/dist/tables.d.ts +2 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +4 -0
- package/dist/tables.js.map +1 -0
- package/dist/types.d.ts +147 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/vorbis.d.ts +12 -0
- package/dist/vorbis.d.ts.map +1 -0
- package/dist/vorbis.js +1053 -0
- package/dist/vorbis.js.map +1 -0
- package/package.json +51 -4
package/README.md
CHANGED
|
@@ -1,3 +1,31 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @modplayjs/stb-vorbis
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Ogg Vorbis decoder** — a 1:1 TypeScript port of stb_vorbis.c from the
|
|
4
|
+
OpenMPT reference bundle (`reference/openmpt/include/stb_vorbis/`).
|
|
5
|
+
|
|
6
|
+
**Verified bit-exact** against the compiled C reference: max sample
|
|
7
|
+
difference 4.8e-7 over a 1.33-million-frame render, byte-identical int16
|
|
8
|
+
output across the full test corpus.
|
|
9
|
+
|
|
10
|
+
Used by `@modplayjs/fmt-mo3` (MO3 v5 Ogg-compressed samples, incl.
|
|
11
|
+
shared-Ogg-header remux) and `@modplayjs/stream-audio` (.ogg files).
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npm install @modplayjs/stb-vorbis
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { stbVorbisOpenMemory, stbVorbisGetFrameFloat } from '@modplayjs/stb-vorbis';
|
|
23
|
+
|
|
24
|
+
const v = stbVorbisOpenMemory(bytes);
|
|
25
|
+
// then pull interleaved float frames per audio block
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
stb_vorbis is public domain (Sean Barrett); see [NOTICE](../../NOTICE).
|
|
29
|
+
|
|
30
|
+
Part of the [modplayjs monorepo](../../README.md). BSD-3-Clause for the
|
|
31
|
+
port.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Vorb, type Codebook } from './types.js';
|
|
2
|
+
import { getBits } from './stream.js';
|
|
3
|
+
export declare function bitReverse(n: number): number;
|
|
4
|
+
export declare function ilog(n: number): number;
|
|
5
|
+
export declare function float32Unpack(x: number): number;
|
|
6
|
+
export declare function lookup1Values(entries: number, dim: number): number;
|
|
7
|
+
export declare function computeCodewords(c: Codebook, len: Uint8Array, n: number, values: Uint32Array | null): boolean;
|
|
8
|
+
export declare function computeAcceleratedHuffman(c: Codebook): void;
|
|
9
|
+
export declare function computeSortedHuffman(c: Codebook, lengths: Uint8Array, values: Uint32Array | null): void;
|
|
10
|
+
export declare function decodeRawShared(z: Vorb, c: Codebook): number;
|
|
11
|
+
export declare function codebookDecode(z: Vorb, c: Codebook, output: Float32Array, len0: number): boolean;
|
|
12
|
+
export declare function codebookDecodeStep(z: Vorb, c: Codebook, output: Float32Array, off: number, len0: number, step: number): boolean;
|
|
13
|
+
export declare function codebookDecodeDeinterleaveRepeat(z: Vorb, c: Codebook, outputs: Array<Float32Array | null>, ch: number, cInterP: {
|
|
14
|
+
v: number;
|
|
15
|
+
}, pInterP: {
|
|
16
|
+
v: number;
|
|
17
|
+
}, len: number, totalDecode0: number): boolean;
|
|
18
|
+
export { getBits };
|
|
19
|
+
//# sourceMappingURL=codebook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codebook.d.ts","sourceRoot":"","sources":["../src/codebook.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,IAAI,EAAE,KAAK,QAAQ,EAEzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,OAAO,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAYtC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlE;AAYD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAuB7G;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAY3D;AAQD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAmCvG;AAyCD,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAE5D;AA+BD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBhG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAY/H;AAED,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EACrE,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAChF,OAAO,CAuCT;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/codebook.js
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Ported from stb_vorbis.c — codebooks: codeword computation, accelerated
|
|
3
|
+
// huffman, sorted tables, VQ lookup expansion, and scalar decode.
|
|
4
|
+
import { NO_CODE, FAST_HUFFMAN_TABLE_SIZE, FAST_HUFFMAN_TABLE_MASK, STB_VORBIS_FAST_HUFFMAN_LENGTH, } from './types.js';
|
|
5
|
+
import { prepHuffman, getBits } from './stream.js';
|
|
6
|
+
export function bitReverse(n) {
|
|
7
|
+
n = ((n & 0xaaaaaaaa) >>> 1) | ((n & 0x55555555) << 1);
|
|
8
|
+
n = ((n & 0xcccccccc) >>> 2) | ((n & 0x33333333) << 2);
|
|
9
|
+
n = ((n & 0xf0f0f0f0) >>> 4) | ((n & 0x0f0f0f0f) << 4);
|
|
10
|
+
n = ((n & 0xff00ff00) >>> 8) | ((n & 0x00ff00ff) << 8);
|
|
11
|
+
return (n >>> 16 | n << 16) >>> 0;
|
|
12
|
+
}
|
|
13
|
+
export function ilog(n) {
|
|
14
|
+
const log2_4 = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4];
|
|
15
|
+
if (n < 0)
|
|
16
|
+
return 0;
|
|
17
|
+
if (n < (1 << 14)) {
|
|
18
|
+
if (n < (1 << 4))
|
|
19
|
+
return 0 + log2_4[n];
|
|
20
|
+
else if (n < (1 << 9))
|
|
21
|
+
return 5 + log2_4[n >> 5];
|
|
22
|
+
else
|
|
23
|
+
return 10 + log2_4[n >> 10];
|
|
24
|
+
}
|
|
25
|
+
else if (n < (1 << 24)) {
|
|
26
|
+
if (n < (1 << 19))
|
|
27
|
+
return 15 + log2_4[n >> 15];
|
|
28
|
+
else
|
|
29
|
+
return 20 + log2_4[n >> 20];
|
|
30
|
+
}
|
|
31
|
+
else if (n < (1 << 29))
|
|
32
|
+
return 25 + log2_4[n >> 25];
|
|
33
|
+
else
|
|
34
|
+
return 30 + log2_4[n >>> 30];
|
|
35
|
+
}
|
|
36
|
+
export function float32Unpack(x) {
|
|
37
|
+
const mantissa = x & 0x1fffff;
|
|
38
|
+
const sign = x & 0x80000000;
|
|
39
|
+
const exp = (x & 0x7fe00000) >> 21;
|
|
40
|
+
const res = sign ? -mantissa : mantissa;
|
|
41
|
+
return Math.fround(res * Math.pow(2, exp - 788));
|
|
42
|
+
}
|
|
43
|
+
export function lookup1Values(entries, dim) {
|
|
44
|
+
let r = Math.floor(Math.exp(Math.log(entries) / dim));
|
|
45
|
+
if (Math.floor(Math.pow(r + 1, dim)) <= entries)
|
|
46
|
+
++r;
|
|
47
|
+
if (Math.pow(r + 1, dim) <= entries)
|
|
48
|
+
return -1;
|
|
49
|
+
if (Math.floor(Math.pow(r, dim)) > entries)
|
|
50
|
+
return -1;
|
|
51
|
+
return r;
|
|
52
|
+
}
|
|
53
|
+
function addEntry(c, huffCode, symbol, count, len, values) {
|
|
54
|
+
if (!c.sparse) {
|
|
55
|
+
c.codewords[symbol] = huffCode;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
c.codewords[count] = huffCode;
|
|
59
|
+
c.codewordLengths[count] = len;
|
|
60
|
+
values[count] = symbol;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function computeCodewords(c, len, n, values) {
|
|
64
|
+
let m = 0;
|
|
65
|
+
const available = new Uint32Array(32);
|
|
66
|
+
let k = 0;
|
|
67
|
+
for (; k < n; ++k)
|
|
68
|
+
if (len[k] < NO_CODE)
|
|
69
|
+
break;
|
|
70
|
+
if (k === n)
|
|
71
|
+
return true;
|
|
72
|
+
addEntry(c, 0, k, m++, len[k], values);
|
|
73
|
+
for (let i = 1; i <= len[k]; ++i)
|
|
74
|
+
available[i] = (1 << (32 - i)) >>> 0;
|
|
75
|
+
for (let i = k + 1; i < n; ++i) {
|
|
76
|
+
let z = len[i];
|
|
77
|
+
if (z === NO_CODE)
|
|
78
|
+
continue;
|
|
79
|
+
while (z > 0 && available[z] === 0)
|
|
80
|
+
--z;
|
|
81
|
+
if (z === 0)
|
|
82
|
+
return false;
|
|
83
|
+
const res = available[z];
|
|
84
|
+
available[z] = 0;
|
|
85
|
+
addEntry(c, bitReverse(res), i, m++, len[i], values);
|
|
86
|
+
if (z !== len[i]) {
|
|
87
|
+
for (let y = len[i]; y > z; --y) {
|
|
88
|
+
available[y] = (res + (1 << (32 - y))) >>> 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
export function computeAcceleratedHuffman(c) {
|
|
95
|
+
for (let i = 0; i < FAST_HUFFMAN_TABLE_SIZE; ++i)
|
|
96
|
+
c.fastHuffman[i] = -1;
|
|
97
|
+
const len = c.sparse ? c.sortedEntries : c.entries;
|
|
98
|
+
for (let i = 0; i < len; ++i) {
|
|
99
|
+
if (c.codewordLengths[i] <= STB_VORBIS_FAST_HUFFMAN_LENGTH) {
|
|
100
|
+
let z = c.sparse ? bitReverse(c.sortedCodewords[i]) : c.codewords[i];
|
|
101
|
+
while (z < FAST_HUFFMAN_TABLE_SIZE) {
|
|
102
|
+
c.fastHuffman[z] = i;
|
|
103
|
+
z += 1 << c.codewordLengths[i];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function includeInSort(c, len) {
|
|
109
|
+
if (c.sparse)
|
|
110
|
+
return true;
|
|
111
|
+
if (len === NO_CODE)
|
|
112
|
+
return false;
|
|
113
|
+
return len > STB_VORBIS_FAST_HUFFMAN_LENGTH;
|
|
114
|
+
}
|
|
115
|
+
export function computeSortedHuffman(c, lengths, values) {
|
|
116
|
+
if (!c.sparse) {
|
|
117
|
+
let k = 0;
|
|
118
|
+
for (let i = 0; i < c.entries; ++i) {
|
|
119
|
+
if (includeInSort(c, lengths[i]))
|
|
120
|
+
c.sortedCodewords[k++] = bitReverse(c.codewords[i]);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
for (let i = 0; i < c.sortedEntries; ++i) {
|
|
125
|
+
c.sortedCodewords[i] = bitReverse(c.codewords[i]);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const arr = c.sortedCodewords;
|
|
129
|
+
const sub = arr.subarray(0, c.sortedEntries);
|
|
130
|
+
Array.prototype.sort.call(sub, (a, b) => a - b);
|
|
131
|
+
arr.subarray(0, c.sortedEntries).set(sub);
|
|
132
|
+
arr[c.sortedEntries] = 0xffffffff;
|
|
133
|
+
const len = c.sparse ? c.sortedEntries : c.entries;
|
|
134
|
+
for (let i = 0; i < len; ++i) {
|
|
135
|
+
const huffLen = c.sparse ? lengths[values[i]] : lengths[i];
|
|
136
|
+
if (includeInSort(c, huffLen)) {
|
|
137
|
+
const code = bitReverse(c.codewords[i]);
|
|
138
|
+
let x = 0, n = c.sortedEntries;
|
|
139
|
+
while (n > 1) {
|
|
140
|
+
const m = x + (n >> 1);
|
|
141
|
+
if (c.sortedCodewords[m] <= code) {
|
|
142
|
+
x = m;
|
|
143
|
+
n -= n >> 1;
|
|
144
|
+
}
|
|
145
|
+
else
|
|
146
|
+
n >>= 1;
|
|
147
|
+
}
|
|
148
|
+
if (c.sparse) {
|
|
149
|
+
c.sortedValues[x] = values[i];
|
|
150
|
+
c.codewordLengths[x] = huffLen;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
c.sortedValues[x] = i;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// huffman scalar decode (stb_vorbis.c:1665-1783)
|
|
159
|
+
function codebookDecodeScalarRaw(z, c) {
|
|
160
|
+
prepHuffman(z);
|
|
161
|
+
if (c.codewords === null && c.sortedCodewords === null)
|
|
162
|
+
return -1;
|
|
163
|
+
if (c.entries > 8 ? c.sortedCodewords !== null : c.codewords === null) {
|
|
164
|
+
const code = bitReverse(z.acc);
|
|
165
|
+
let x = 0, n = c.sortedEntries;
|
|
166
|
+
while (n > 1) {
|
|
167
|
+
const m = x + (n >> 1);
|
|
168
|
+
if (c.sortedCodewords[m] <= code) {
|
|
169
|
+
x = m;
|
|
170
|
+
n -= n >> 1;
|
|
171
|
+
}
|
|
172
|
+
else
|
|
173
|
+
n >>= 1;
|
|
174
|
+
}
|
|
175
|
+
if (!c.sparse)
|
|
176
|
+
x = c.sortedValues[x];
|
|
177
|
+
const len = c.codewordLengths[x];
|
|
178
|
+
if (z.validBits >= len) {
|
|
179
|
+
z.acc >>>= len;
|
|
180
|
+
z.validBits -= len;
|
|
181
|
+
return x;
|
|
182
|
+
}
|
|
183
|
+
z.validBits = 0;
|
|
184
|
+
return -1;
|
|
185
|
+
}
|
|
186
|
+
for (let i = 0; i < c.entries; ++i) {
|
|
187
|
+
if (c.codewordLengths[i] === NO_CODE)
|
|
188
|
+
continue;
|
|
189
|
+
if (c.codewords[i] === (z.acc & ((1 << c.codewordLengths[i]) - 1))) {
|
|
190
|
+
if (z.validBits >= c.codewordLengths[i]) {
|
|
191
|
+
z.acc >>>= c.codewordLengths[i];
|
|
192
|
+
z.validBits -= c.codewordLengths[i];
|
|
193
|
+
return i;
|
|
194
|
+
}
|
|
195
|
+
z.validBits = 0;
|
|
196
|
+
return -1;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
z.error = 11;
|
|
200
|
+
z.validBits = 0;
|
|
201
|
+
return -1;
|
|
202
|
+
}
|
|
203
|
+
export function decodeRawShared(z, c) {
|
|
204
|
+
return decodeRaw(z, c);
|
|
205
|
+
}
|
|
206
|
+
function decodeRaw(z, c) {
|
|
207
|
+
if (z.validBits < STB_VORBIS_FAST_HUFFMAN_LENGTH)
|
|
208
|
+
prepHuffman(z);
|
|
209
|
+
const v0 = z.acc & FAST_HUFFMAN_TABLE_MASK;
|
|
210
|
+
let v = c.fastHuffman[v0] ?? -1;
|
|
211
|
+
if (v >= 0) {
|
|
212
|
+
const n = c.codewordLengths[v];
|
|
213
|
+
z.acc >>>= n;
|
|
214
|
+
z.validBits -= n;
|
|
215
|
+
if (z.validBits < 0) {
|
|
216
|
+
z.validBits = 0;
|
|
217
|
+
v = -1;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
v = codebookDecodeScalarRaw(z, c);
|
|
222
|
+
}
|
|
223
|
+
return v;
|
|
224
|
+
}
|
|
225
|
+
function codebookDecodeStart(z, c) {
|
|
226
|
+
if (c.lookupType === 0) {
|
|
227
|
+
z.error = 11;
|
|
228
|
+
return -1;
|
|
229
|
+
}
|
|
230
|
+
let zz = decodeRaw(z, c);
|
|
231
|
+
if (c.sparse)
|
|
232
|
+
zz = c.sortedValues[zz];
|
|
233
|
+
if (zz < 0) {
|
|
234
|
+
if (z.bytesInSeg === 0 && z.lastSeg)
|
|
235
|
+
return zz;
|
|
236
|
+
z.error = 11;
|
|
237
|
+
}
|
|
238
|
+
return zz;
|
|
239
|
+
}
|
|
240
|
+
export function codebookDecode(z, c, output, len0) {
|
|
241
|
+
let zz = codebookDecodeStart(z, c);
|
|
242
|
+
if (zz < 0)
|
|
243
|
+
return false;
|
|
244
|
+
let len = len0 > c.dimensions ? c.dimensions : len0;
|
|
245
|
+
zz *= c.dimensions;
|
|
246
|
+
if (c.sequenceP) {
|
|
247
|
+
let last = 0;
|
|
248
|
+
for (let i = 0; i < len; ++i) {
|
|
249
|
+
const val = c.multiplicands[zz + i] + last;
|
|
250
|
+
output[i] = (output[i] ?? 0) + val;
|
|
251
|
+
last = val + c.minimumValue;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
for (let i = 0; i < len; ++i) {
|
|
256
|
+
output[i] = (output[i] ?? 0) + c.multiplicands[zz + i];
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
export function codebookDecodeStep(z, c, output, off, len0, step) {
|
|
262
|
+
let zz = codebookDecodeStart(z, c);
|
|
263
|
+
let last = 0;
|
|
264
|
+
if (zz < 0)
|
|
265
|
+
return false;
|
|
266
|
+
let len = len0 > c.dimensions ? c.dimensions : len0;
|
|
267
|
+
zz *= c.dimensions;
|
|
268
|
+
for (let i = 0; i < len; ++i) {
|
|
269
|
+
const val = c.multiplicands[zz + i] + last;
|
|
270
|
+
output[off + i * step] = (output[off + i * step] ?? 0) + val;
|
|
271
|
+
if (c.sequenceP)
|
|
272
|
+
last = val;
|
|
273
|
+
}
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
export function codebookDecodeDeinterleaveRepeat(z, c, outputs, ch, cInterP, pInterP, len, totalDecode0) {
|
|
277
|
+
let cInter = cInterP.v;
|
|
278
|
+
let pInter = pInterP.v;
|
|
279
|
+
let totalDecode = totalDecode0;
|
|
280
|
+
if (c.lookupType === 0) {
|
|
281
|
+
z.error = 11;
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
while (totalDecode > 0) {
|
|
285
|
+
let last = 0;
|
|
286
|
+
let zz = decodeRaw(z, c);
|
|
287
|
+
if (zz < 0) {
|
|
288
|
+
if (z.bytesInSeg === 0 && z.lastSeg)
|
|
289
|
+
return false;
|
|
290
|
+
z.error = 11;
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
let effective = c.dimensions;
|
|
294
|
+
if (cInter + pInter * ch + effective > len * ch) {
|
|
295
|
+
// C: effective = len*ch - (p_inter*ch - c_inter) — note the minus
|
|
296
|
+
// binds inside the parens (stb_vorbis.c:2275-2278).
|
|
297
|
+
effective = len * ch - (pInter * ch - cInter);
|
|
298
|
+
}
|
|
299
|
+
zz *= c.dimensions;
|
|
300
|
+
if (c.sequenceP) {
|
|
301
|
+
for (let i = 0; i < effective; ++i) {
|
|
302
|
+
const val = c.multiplicands[zz + i] + last;
|
|
303
|
+
const ob = outputs[cInter];
|
|
304
|
+
if (ob)
|
|
305
|
+
ob[pInter] = (ob[pInter] ?? 0) + val;
|
|
306
|
+
if (++cInter === ch) {
|
|
307
|
+
cInter = 0;
|
|
308
|
+
++pInter;
|
|
309
|
+
}
|
|
310
|
+
last = val;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
for (let i = 0; i < effective; ++i) {
|
|
315
|
+
const val = c.multiplicands[zz + i] + last;
|
|
316
|
+
const ob = outputs[cInter];
|
|
317
|
+
if (ob)
|
|
318
|
+
ob[pInter] = (ob[pInter] ?? 0) + val;
|
|
319
|
+
if (++cInter === ch) {
|
|
320
|
+
cInter = 0;
|
|
321
|
+
++pInter;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
totalDecode -= effective;
|
|
326
|
+
}
|
|
327
|
+
cInterP.v = cInter;
|
|
328
|
+
pInterP.v = pInter;
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
export { getBits };
|
|
332
|
+
//# sourceMappingURL=codebook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codebook.js","sourceRoot":"","sources":["../src/codebook.ts"],"names":[],"mappings":"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"}
|
package/dist/crc32.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crc32.d.ts","sourceRoot":"","sources":["../src/crc32.ts"],"names":[],"mappings":"AAMA,wBAAgB,SAAS,IAAI,IAAI,CAUhC;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3D"}
|
package/dist/crc32.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// CRC32 (stb_vorbis.c:1000-1026) — the Ogg CRC, polynomial 0x04c11db7.
|
|
2
|
+
const CRC32_POLY = 0x04c11db7;
|
|
3
|
+
const crcTable = new Uint32Array(256);
|
|
4
|
+
let crcInitialized = false;
|
|
5
|
+
export function crc32Init() {
|
|
6
|
+
if (crcInitialized)
|
|
7
|
+
return;
|
|
8
|
+
for (let i = 0; i < 256; ++i) {
|
|
9
|
+
let s = i << 24;
|
|
10
|
+
for (let j = 0; j < 8; ++j) {
|
|
11
|
+
s = (s << 1) ^ (s >= 0x80000000 ? CRC32_POLY : 0);
|
|
12
|
+
}
|
|
13
|
+
crcTable[i] = s >>> 0;
|
|
14
|
+
}
|
|
15
|
+
crcInitialized = true;
|
|
16
|
+
}
|
|
17
|
+
/** Running CRC update (C crc32_update in stb_vorbis.c seek section). */
|
|
18
|
+
export function crcUpdate(crc, byte) {
|
|
19
|
+
crc = ((crc << 8) ^ (crcTable[byte ^ (crc >>> 24)] ?? 0)) >>> 0;
|
|
20
|
+
return crc;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=crc32.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crc32.js","sourceRoot":"","sources":["../src/crc32.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;AACtC,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,MAAM,UAAU,SAAS;IACvB,IAAI,cAAc;QAAE,OAAO;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3B,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY;IACjD,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/imdct.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function computeTwiddleFactors(n: number, A: Float32Array, B: Float32Array, C: Float32Array): void;
|
|
2
|
+
export declare function computeWindow(n: number, window: Float32Array): void;
|
|
3
|
+
export declare function computeBitReverse(n: number, rev: Uint16Array): void;
|
|
4
|
+
declare function imdctStep3Iter0Loop(n: number, e: Float32Array, base: number, iOff: number, kOff: number, A: Float32Array): void;
|
|
5
|
+
declare function imdctStep3InnerRLoop(lim: number, e: Float32Array, base: number, d0Off: number, kOff: number, A: Float32Array, k1: number): void;
|
|
6
|
+
declare function imdctStep3InnerSLoop(n: number, e: Float32Array, base: number, iOff: number, kOff: number, A: Float32Array, aOff0: number, aOff: number, k0: number): void;
|
|
7
|
+
declare function imdctStep3InnerSLoopLd654(n: number, e: Float32Array, base: number, iOff: number, A: Float32Array, baseN: number): void;
|
|
8
|
+
export { imdctStep3Iter0Loop, imdctStep3InnerRLoop, imdctStep3InnerSLoop, imdctStep3InnerSLoopLd654 };
|
|
9
|
+
//# sourceMappingURL=imdct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imdct.d.ts","sourceRoot":"","sources":["../src/imdct.ts"],"names":[],"mappings":"AAIA,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAYxG;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAYnE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAMnE;AAyBD,iBAAS,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,IAAI,CAoBxH;AAGD,iBAAS,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAmBxI;AAGD,iBAAS,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CA2BlK;AAGD,iBAAS,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA8D/H;AAED,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,CAAC"}
|
package/dist/imdct.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Ported from stb_vorbis.c — inverse MDCT (the fast bit-reverse variant)
|
|
3
|
+
// plus twiddle/window/bitreverse setup.
|
|
4
|
+
export function computeTwiddleFactors(n, A, B, C) {
|
|
5
|
+
const n4 = n >> 2, n8 = n >> 3;
|
|
6
|
+
for (let k = 0, k2 = 0; k < n4; ++k, k2 += 2) {
|
|
7
|
+
A[k2] = Math.cos((4 * k * Math.PI) / n);
|
|
8
|
+
A[k2 + 1] = -Math.sin((4 * k * Math.PI) / n);
|
|
9
|
+
B[k2] = Math.cos((((k2 + 1) * Math.PI) / n / 2)) * 0.5;
|
|
10
|
+
B[k2 + 1] = Math.sin((((k2 + 1) * Math.PI) / n / 2)) * 0.5;
|
|
11
|
+
}
|
|
12
|
+
for (let k = 0, k2 = 0; k < n8; ++k, k2 += 2) {
|
|
13
|
+
C[k2] = Math.cos((2 * (k2 + 1) * Math.PI) / n);
|
|
14
|
+
C[k2 + 1] = -Math.sin((2 * (k2 + 1) * Math.PI) / n);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function computeWindow(n, window) {
|
|
18
|
+
const n2 = n >> 1;
|
|
19
|
+
// stb_vorbis.c:1336-1341 — window[i] = (float) sin(0.5*M_PI *
|
|
20
|
+
// square((float) sin((i+0.5)/n2 * 0.5*M_PI))). The two sin() calls and
|
|
21
|
+
// the 0.5*M_PI multiply are double math with float32 casts at the
|
|
22
|
+
// boundaries; square() is a float32 multiply. Math.fround at exactly
|
|
23
|
+
// those points reproduces the C bits.
|
|
24
|
+
for (let i = 0; i < n2; ++i) {
|
|
25
|
+
const s = Math.fround(Math.sin(((i + 0.5) / n2) * 0.5 * Math.PI));
|
|
26
|
+
const sq = Math.fround(s * s);
|
|
27
|
+
window[i] = Math.fround(Math.sin(0.5 * Math.PI * sq));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function computeBitReverse(n, rev) {
|
|
31
|
+
const ld = ilog(n) - 1;
|
|
32
|
+
const n8 = n >> 3;
|
|
33
|
+
for (let i = 0; i < n8; ++i) {
|
|
34
|
+
rev[i] = ((bitReverseLocal(i) >>> (32 - ld + 3)) << 2) & 0xffff;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function bitReverseLocal(n) {
|
|
38
|
+
n = ((n & 0xaaaaaaaa) >>> 1) | ((n & 0x55555555) << 1);
|
|
39
|
+
n = ((n & 0xcccccccc) >>> 2) | ((n & 0x33333333) << 2);
|
|
40
|
+
n = ((n & 0xf0f0f0f0) >>> 4) | ((n & 0x0f0f0f0f) << 4);
|
|
41
|
+
n = ((n & 0xff00ff00) >>> 8) | ((n & 0x00ff00ff) << 8);
|
|
42
|
+
return (n >>> 16 | n << 16) >>> 0;
|
|
43
|
+
}
|
|
44
|
+
function ilog(n) {
|
|
45
|
+
const log2_4 = [0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4];
|
|
46
|
+
if (n < 0)
|
|
47
|
+
return 0;
|
|
48
|
+
if (n < (1 << 14)) {
|
|
49
|
+
if (n < (1 << 4))
|
|
50
|
+
return log2_4[n];
|
|
51
|
+
else if (n < (1 << 9))
|
|
52
|
+
return 5 + log2_4[n >> 5];
|
|
53
|
+
else
|
|
54
|
+
return 10 + log2_4[n >> 10];
|
|
55
|
+
}
|
|
56
|
+
else if (n < (1 << 24)) {
|
|
57
|
+
if (n < (1 << 19))
|
|
58
|
+
return 15 + log2_4[n >> 15];
|
|
59
|
+
else
|
|
60
|
+
return 20 + log2_4[n >> 20];
|
|
61
|
+
}
|
|
62
|
+
else if (n < (1 << 29))
|
|
63
|
+
return 25 + log2_4[n >> 25];
|
|
64
|
+
else
|
|
65
|
+
return 30 + log2_4[n >>> 30];
|
|
66
|
+
}
|
|
67
|
+
// imdct_step3_iter0_loop (stb_vorbis.c:2417-2460)
|
|
68
|
+
function imdctStep3Iter0Loop(n, e, base, iOff, kOff, A) {
|
|
69
|
+
let aOff = 0;
|
|
70
|
+
let eOff = base + iOff;
|
|
71
|
+
let e2Off = eOff + kOff;
|
|
72
|
+
for (let i = n >> 2; i > 0; --i) {
|
|
73
|
+
// 4 unrolled pairs
|
|
74
|
+
for (let q = 0; q < 4; ++q) {
|
|
75
|
+
const d0 = eOff - 2 * q;
|
|
76
|
+
const d2 = e2Off - 2 * q;
|
|
77
|
+
const k00e = e[d0] - e[d2];
|
|
78
|
+
const k01e = e[d0 - 1] - e[d2 - 1];
|
|
79
|
+
e[d0] = e[d0] + e[d2];
|
|
80
|
+
e[d0 - 1] = e[d0 - 1] + e[d2 - 1];
|
|
81
|
+
e[d2] = k00e * A[aOff] - k01e * A[aOff + 1];
|
|
82
|
+
e[d2 - 1] = k01e * A[aOff] + k00e * A[aOff + 1];
|
|
83
|
+
aOff += 8;
|
|
84
|
+
}
|
|
85
|
+
eOff -= 8;
|
|
86
|
+
e2Off -= 8;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// imdct_step3_inner_r_loop (stb_vorbis.c:2462-2510)
|
|
90
|
+
function imdctStep3InnerRLoop(lim, e, base, d0Off, kOff, A, k1) {
|
|
91
|
+
let aOff = 0;
|
|
92
|
+
let e0Off = base + d0Off;
|
|
93
|
+
let e2Off = e0Off + kOff;
|
|
94
|
+
for (let i = lim >> 2; i > 0; --i) {
|
|
95
|
+
for (let q = 0; q < 4; ++q) {
|
|
96
|
+
const d0 = e0Off - 2 * q;
|
|
97
|
+
const d2 = e2Off - 2 * q;
|
|
98
|
+
const k00e = e[d0] - e[d2];
|
|
99
|
+
const k01e = e[d0 - 1] - e[d2 - 1];
|
|
100
|
+
e[d0] = e[d0] + e[d2];
|
|
101
|
+
e[d0 - 1] = e[d0 - 1] + e[d2 - 1];
|
|
102
|
+
e[d2] = k00e * A[aOff] - k01e * A[aOff + 1];
|
|
103
|
+
e[d2 - 1] = k01e * A[aOff] + k00e * A[aOff + 1];
|
|
104
|
+
aOff += k1;
|
|
105
|
+
}
|
|
106
|
+
e0Off -= 8;
|
|
107
|
+
e2Off -= 8;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// imdct_step3_inner_s_loop (stb_vorbis.c:2512-2594)
|
|
111
|
+
function imdctStep3InnerSLoop(n, e, base, iOff, kOff, A, aOff0, aOff, k0) {
|
|
112
|
+
// C (stb_vorbis.c:2512-2520 + caller :2770-2777) passes an ADVANCED base
|
|
113
|
+
// pointer A0 (= A + k1*4*r) plus a_off = k1 and reads A0[0], A0[1],
|
|
114
|
+
// A0[a_off], A0[a_off*2], A0[a_off*3]; the outer loop strides by k0.
|
|
115
|
+
const b = aOff0;
|
|
116
|
+
const A0 = A[b], A1 = A[b + 1];
|
|
117
|
+
const A2 = A[b + aOff], A3 = A[b + aOff + 1];
|
|
118
|
+
const A4 = A[b + aOff * 2], A5 = A[b + aOff * 2 + 1];
|
|
119
|
+
const A6 = A[b + aOff * 3], A7 = A[b + aOff * 3 + 1];
|
|
120
|
+
let e0Off = base + iOff;
|
|
121
|
+
let e2Off = e0Off + kOff;
|
|
122
|
+
for (let i = n; i > 0; --i) {
|
|
123
|
+
for (let q = 0; q < 4; ++q) {
|
|
124
|
+
const d0 = e0Off - 2 * q;
|
|
125
|
+
const d2 = e2Off - 2 * q;
|
|
126
|
+
const k00 = e[d0] - e[d2];
|
|
127
|
+
const k11 = e[d0 - 1] - e[d2 - 1];
|
|
128
|
+
e[d0] = e[d0] + e[d2];
|
|
129
|
+
e[d0 - 1] = e[d0 - 1] + e[d2 - 1];
|
|
130
|
+
e[d2] = k00 * [A0, A2, A4, A6][q] - k11 * [A1, A3, A5, A7][q];
|
|
131
|
+
e[d2 - 1] = k11 * [A0, A2, A4, A6][q] + k00 * [A1, A3, A5, A7][q];
|
|
132
|
+
}
|
|
133
|
+
// C strides by k0 per outer iteration (stb_vorbis.c:2558-2559:
|
|
134
|
+
// `ee0 -= k0; ee2 -= k0;`), NOT by 8.
|
|
135
|
+
e0Off -= k0;
|
|
136
|
+
e2Off -= k0;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// imdct_step3_inner_s_loop_ld654 (stb_vorbis.c:2595-2637)
|
|
140
|
+
function imdctStep3InnerSLoopLd654(n, e, base, iOff, A, baseN) {
|
|
141
|
+
const aOff = baseN >> 3;
|
|
142
|
+
const A2 = A[aOff];
|
|
143
|
+
let z = base + iOff;
|
|
144
|
+
const baseZ = z - 16 * n;
|
|
145
|
+
const iter54 = (z) => {
|
|
146
|
+
// C iter_54(float *z): z[0..-7] are e[zo], e[zo-1], ..., e[zo-7]
|
|
147
|
+
const k00 = e[z - 0] - e[z - 4];
|
|
148
|
+
const y0 = e[z - 0] + e[z - 4];
|
|
149
|
+
const y2 = e[z - 2] + e[z - 6];
|
|
150
|
+
const k22 = e[z - 2] - e[z - 6];
|
|
151
|
+
e[z - 0] = y0 + y2;
|
|
152
|
+
e[z - 2] = y0 - y2;
|
|
153
|
+
const k33 = e[z - 3] - e[z - 7];
|
|
154
|
+
e[z - 4] = k00 + k33;
|
|
155
|
+
e[z - 6] = k00 - k33;
|
|
156
|
+
const k11 = e[z - 1] - e[z - 5];
|
|
157
|
+
const y1 = e[z - 1] + e[z - 5];
|
|
158
|
+
const y3 = e[z - 3] + e[z - 7];
|
|
159
|
+
e[z - 1] = y1 + y3;
|
|
160
|
+
e[z - 3] = y1 - y3;
|
|
161
|
+
e[z - 5] = k11 - k22;
|
|
162
|
+
e[z - 7] = k11 + k22;
|
|
163
|
+
};
|
|
164
|
+
while (z > baseZ) {
|
|
165
|
+
const zo = z - base;
|
|
166
|
+
let k00 = e[zo - 0] - e[zo - 8];
|
|
167
|
+
let k11 = e[zo - 1] - e[zo - 9];
|
|
168
|
+
let l00 = e[zo - 2] - e[zo - 10];
|
|
169
|
+
let l11 = e[zo - 3] - e[zo - 11];
|
|
170
|
+
e[zo - 0] = e[zo - 0] + e[zo - 8];
|
|
171
|
+
e[zo - 1] = e[zo - 1] + e[zo - 9];
|
|
172
|
+
e[zo - 2] = e[zo - 2] + e[zo - 10];
|
|
173
|
+
e[zo - 3] = e[zo - 3] + e[zo - 11];
|
|
174
|
+
e[zo - 8] = k00;
|
|
175
|
+
e[zo - 9] = k11;
|
|
176
|
+
e[zo - 10] = (l00 + l11) * A2;
|
|
177
|
+
e[zo - 11] = (l11 - l00) * A2;
|
|
178
|
+
k00 = e[zo - 4] - e[zo - 12];
|
|
179
|
+
k11 = e[zo - 5] - e[zo - 13];
|
|
180
|
+
l00 = e[zo - 6] - e[zo - 14];
|
|
181
|
+
l11 = e[zo - 7] - e[zo - 15];
|
|
182
|
+
e[zo - 4] = e[zo - 4] + e[zo - 12];
|
|
183
|
+
e[zo - 5] = e[zo - 5] + e[zo - 13];
|
|
184
|
+
e[zo - 6] = e[zo - 6] + e[zo - 14];
|
|
185
|
+
e[zo - 7] = e[zo - 7] + e[zo - 15];
|
|
186
|
+
e[zo - 12] = k11;
|
|
187
|
+
e[zo - 13] = -k00;
|
|
188
|
+
e[zo - 14] = (l11 - l00) * A2;
|
|
189
|
+
e[zo - 15] = (l00 + l11) * -A2;
|
|
190
|
+
// iter_54(z); iter_54(z-8);
|
|
191
|
+
iter54(zo);
|
|
192
|
+
iter54(zo - 8);
|
|
193
|
+
z -= 16;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export { imdctStep3Iter0Loop, imdctStep3InnerRLoop, imdctStep3InnerSLoop, imdctStep3InnerSLoopLd654 };
|
|
197
|
+
//# sourceMappingURL=imdct.js.map
|