@swf2es/native 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +313 -0
  3. package/README.md +489 -2
  4. package/dist/atf/binary.d.ts +2 -0
  5. package/dist/atf/binary.d.ts.map +1 -0
  6. package/dist/atf/binary.js +4 -0
  7. package/dist/atf/binary.js.map +1 -0
  8. package/dist/atf/index.d.ts +27 -0
  9. package/dist/atf/index.d.ts.map +1 -0
  10. package/dist/atf/index.js +158 -0
  11. package/dist/atf/index.js.map +1 -0
  12. package/dist/atf/jxr.d.ts +22 -0
  13. package/dist/atf/jxr.d.ts.map +1 -0
  14. package/dist/atf/jxr.js +60 -0
  15. package/dist/atf/jxr.js.map +1 -0
  16. package/dist/atf/parse.d.ts +65 -0
  17. package/dist/atf/parse.d.ts.map +1 -0
  18. package/dist/atf/parse.js +204 -0
  19. package/dist/atf/parse.js.map +1 -0
  20. package/dist/audio/binary.d.ts +2 -0
  21. package/dist/audio/binary.d.ts.map +1 -0
  22. package/dist/audio/binary.js +4 -0
  23. package/dist/audio/binary.js.map +1 -0
  24. package/dist/audio/index.d.ts +21 -0
  25. package/dist/audio/index.d.ts.map +1 -0
  26. package/dist/audio/index.js +73 -0
  27. package/dist/audio/index.js.map +1 -0
  28. package/dist/base64.d.ts +3 -0
  29. package/dist/base64.d.ts.map +1 -0
  30. package/dist/base64.js +10 -0
  31. package/dist/base64.js.map +1 -0
  32. package/dist/compress/binary.d.ts +2 -0
  33. package/dist/compress/binary.d.ts.map +1 -0
  34. package/dist/compress/binary.js +4 -0
  35. package/dist/compress/binary.js.map +1 -0
  36. package/dist/compress/index.d.ts +59 -0
  37. package/dist/compress/index.d.ts.map +1 -0
  38. package/dist/compress/index.js +146 -0
  39. package/dist/compress/index.js.map +1 -0
  40. package/dist/instance.d.ts +25 -0
  41. package/dist/instance.d.ts.map +1 -0
  42. package/dist/instance.js +50 -0
  43. package/dist/instance.js.map +1 -0
  44. package/dist/mp3/binary.d.ts +2 -0
  45. package/dist/mp3/binary.d.ts.map +1 -0
  46. package/dist/mp3/binary.js +4 -0
  47. package/dist/mp3/binary.js.map +1 -0
  48. package/dist/mp3/index.d.ts +20 -0
  49. package/dist/mp3/index.d.ts.map +1 -0
  50. package/dist/mp3/index.js +49 -0
  51. package/dist/mp3/index.js.map +1 -0
  52. package/dist/render/binary.d.ts +2 -0
  53. package/dist/render/binary.d.ts.map +1 -0
  54. package/dist/render/binary.js +4 -0
  55. package/dist/render/binary.js.map +1 -0
  56. package/dist/render/bitmap-kernel.d.ts +118 -0
  57. package/dist/render/bitmap-kernel.d.ts.map +1 -0
  58. package/dist/render/bitmap-kernel.js +592 -0
  59. package/dist/render/bitmap-kernel.js.map +1 -0
  60. package/dist/render/draw-kernel.d.ts +79 -0
  61. package/dist/render/draw-kernel.d.ts.map +1 -0
  62. package/dist/render/draw-kernel.js +205 -0
  63. package/dist/render/draw-kernel.js.map +1 -0
  64. package/dist/render/dxt-encoder.d.ts +19 -0
  65. package/dist/render/dxt-encoder.d.ts.map +1 -0
  66. package/dist/render/dxt-encoder.js +95 -0
  67. package/dist/render/dxt-encoder.js.map +1 -0
  68. package/dist/render/index.d.ts +6 -0
  69. package/dist/render/index.d.ts.map +1 -0
  70. package/dist/render/index.js +11 -0
  71. package/dist/render/index.js.map +1 -0
  72. package/dist/render/lines.d.ts +55 -0
  73. package/dist/render/lines.d.ts.map +1 -0
  74. package/dist/render/lines.js +123 -0
  75. package/dist/render/lines.js.map +1 -0
  76. package/dist/render/module.d.ts +11 -0
  77. package/dist/render/module.d.ts.map +1 -0
  78. package/dist/render/module.js +27 -0
  79. package/dist/render/module.js.map +1 -0
  80. package/dist/render/pixel-ops.d.ts +77 -0
  81. package/dist/render/pixel-ops.d.ts.map +1 -0
  82. package/dist/render/pixel-ops.js +236 -0
  83. package/dist/render/pixel-ops.js.map +1 -0
  84. package/dist/render/tessellator.d.ts +90 -0
  85. package/dist/render/tessellator.d.ts.map +1 -0
  86. package/dist/render/tessellator.js +251 -0
  87. package/dist/render/tessellator.js.map +1 -0
  88. package/package.json +53 -3
  89. package/src/atf/index.ts +212 -0
  90. package/src/atf/jxr.ts +83 -0
  91. package/src/atf/parse.ts +263 -0
  92. package/src/audio/index.ts +93 -0
  93. package/src/base64.ts +10 -0
  94. package/src/compress/index.ts +225 -0
  95. package/src/instance.ts +53 -0
  96. package/src/mp3/index.ts +71 -0
  97. package/src/render/bitmap-kernel.ts +856 -0
  98. package/src/render/draw-kernel.ts +268 -0
  99. package/src/render/dxt-encoder.ts +121 -0
  100. package/src/render/index.ts +37 -0
  101. package/src/render/lines.ts +161 -0
  102. package/src/render/module.ts +30 -0
  103. package/src/render/pixel-ops.ts +356 -0
  104. package/src/render/tessellator.ts +367 -0
  105. package/src/webassembly.d.ts +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jxr.js","sourceRoot":"","sources":["../../src/atf/jxr.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,sEAAsE;AACtE,0EAA0E;AAC1E,wEAAwE;AACxE,+CAA+C;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAYrC,+HAA+H;AAC/H,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAS3B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAU,MAAM,CAAC,CAAC;AAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB,EAAE,MAAc,EAAE,KAAa;IACvE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,CAAC,CAAC,KAAK,EAAE,CAAC;YACV,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACb,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,OAAO;gBACL,KAAK;gBACL,MAAM;gBACN,MAAM,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE;aACtE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,sFAAsF;QACtF,KAAK,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Why AIR refuses an ATF: `size` is Error #3669 (Bad input size), `decode`
3
+ * #3677 (Texture decoding failed) and `format` #3675 (Texture format
4
+ * mismatch).
5
+ */
6
+ export type AtfFailure = "size" | "decode" | "format";
7
+ export declare class AtfError extends Error {
8
+ readonly reason: AtfFailure;
9
+ constructor(reason: AtfFailure, message: string);
10
+ }
11
+ /** The Context3DTextureFormat whose textures take an ATF format. */
12
+ export type AtfKind = "bgra" | "compressed" | "compressedAlpha";
13
+ export declare const ATF_RGB888 = 0;
14
+ export declare const ATF_RGBA8888 = 1;
15
+ export declare const ATF_COMPRESSED = 2;
16
+ export declare const ATF_RAW_COMPRESSED = 3;
17
+ export declare const ATF_COMPRESSED_ALPHA = 4;
18
+ export declare const ATF_RAW_COMPRESSED_ALPHA = 5;
19
+ export declare const ATF_COMPRESSED_LOSSY = 12;
20
+ export declare const ATF_COMPRESSED_LOSSY_ALPHA = 13;
21
+ export interface AtfHeader {
22
+ /** Whether it is the old header, which AIR reads alone for content before SWF 17. */
23
+ old: boolean;
24
+ /** 0 for the old header. */
25
+ version: number;
26
+ format: number;
27
+ cube: boolean;
28
+ log2Width: number;
29
+ log2Height: number;
30
+ width: number;
31
+ height: number;
32
+ /** Levels each face holds, the first the full size. */
33
+ count: number;
34
+ /** Where the first face's first block starts, in the data. */
35
+ start: number;
36
+ /** Where the length field says the texture ends: AIR refuses less data (#3669), and reads on past it. */
37
+ end: number;
38
+ }
39
+ /** A level's blocks, in the order its format lists them: views of the data. */
40
+ export type AtfBlocks = Uint8Array[];
41
+ /**
42
+ * The texture format that takes ATF's `format`: null for the formats 6 to
43
+ * 11, which AIR calls a mismatch whatever the texture (#3675), and
44
+ * undefined for any later one, which it calls corrupt (#3677).
45
+ */
46
+ export declare function atfKind(format: number): AtfKind | null | undefined;
47
+ /**
48
+ * The ATF at `offset` of `data`, checked as AIR checks it before it looks
49
+ * further, even for an asynchronous upload: its signature (#3677), and that
50
+ * the data holds the header and what its length says (#3669).
51
+ */
52
+ export declare function readAtfHeader(data: Uint8Array, offset: number): AtfHeader;
53
+ /**
54
+ * Each face's levels, each its blocks, as views of `data`; a format AIR
55
+ * knows, a size up to 4096 and a level count from 1 to the size's own, or
56
+ * #3677, and a format no texture takes, #3675. AIR reads the blocks as far
57
+ * as the data goes, whatever the length says, and streams what it finds: a
58
+ * level that starts where too little is left for a block's length is
59
+ * absent, as are those after it; one whose blocks for the desktop are whole
60
+ * stands though a later block of its is cut short, and the levels after it
61
+ * are absent; but a block the desktop reads that is cut short is corrupt
62
+ * (#3677).
63
+ */
64
+ export declare function readAtfBlocks(data: Uint8Array, header: AtfHeader): (AtfBlocks | null)[][];
65
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/atf/parse.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,YAAY,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAG9C;CACF;AAED,oEAAoE;AACpE,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAEhE,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAC1C,eAAO,MAAM,oBAAoB,KAAO,CAAC;AACzC,eAAO,MAAM,0BAA0B,KAAO,CAAC;AAK/C,MAAM,WAAW,SAAS;IACxB,qFAAqF;IACrF,GAAG,EAAE,OAAO,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,GAAG,EAAE,MAAM,CAAC;CACb;AAED,+EAA+E;AAC/E,MAAM,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;AAErC;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAgBlE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAgDzE;AA+CD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CA6DzF"}
@@ -0,0 +1,204 @@
1
+ // ATF, Adobe's texture container: its header and the blocks of each face
2
+ // and level, read as AIR reads them. The layout is Adobe's "ATF file
3
+ // format" (version 3, 2015), and the old header, which has no version,
4
+ // as Adobe's dds2atf writes it:
5
+ //
6
+ // old: "ATF", length U24, cube UB[1] format UB[7], log2 width U8,
7
+ // log2 height U8, count U8; each block's length U24
8
+ // new: "ATF", reserved U8[3], 0xff, version U8, length U32, then as
9
+ // the old; each block's length U32 (U24 at version 0)
10
+ //
11
+ // The length counts what follows its own field. Each face, then each level
12
+ // of it, holds the blocks of every GPU's encoding in a fixed order; from
13
+ // version 3 those include ETC2's.
14
+ export class AtfError extends Error {
15
+ reason;
16
+ constructor(reason, message) {
17
+ super(message);
18
+ this.reason = reason;
19
+ }
20
+ }
21
+ export const ATF_RGB888 = 0;
22
+ export const ATF_RGBA8888 = 1;
23
+ export const ATF_COMPRESSED = 2;
24
+ export const ATF_RAW_COMPRESSED = 3;
25
+ export const ATF_COMPRESSED_ALPHA = 4;
26
+ export const ATF_RAW_COMPRESSED_ALPHA = 5;
27
+ export const ATF_COMPRESSED_LOSSY = 0x0c;
28
+ export const ATF_COMPRESSED_LOSSY_ALPHA = 0x0d;
29
+ /** The largest texture ATF describes, 4096 pixels a side. */
30
+ const MAX_LOG2 = 12;
31
+ /**
32
+ * The texture format that takes ATF's `format`: null for the formats 6 to
33
+ * 11, which AIR calls a mismatch whatever the texture (#3675), and
34
+ * undefined for any later one, which it calls corrupt (#3677).
35
+ */
36
+ export function atfKind(format) {
37
+ switch (format) {
38
+ case ATF_RGB888:
39
+ case ATF_RGBA8888:
40
+ return "bgra";
41
+ case ATF_COMPRESSED:
42
+ case ATF_RAW_COMPRESSED:
43
+ case ATF_COMPRESSED_LOSSY:
44
+ return "compressed";
45
+ case ATF_COMPRESSED_ALPHA:
46
+ case ATF_RAW_COMPRESSED_ALPHA:
47
+ case ATF_COMPRESSED_LOSSY_ALPHA:
48
+ return "compressedAlpha";
49
+ default:
50
+ return format <= 11 ? null : undefined;
51
+ }
52
+ }
53
+ /**
54
+ * The ATF at `offset` of `data`, checked as AIR checks it before it looks
55
+ * further, even for an asynchronous upload: its signature (#3677), and that
56
+ * the data holds the header and what its length says (#3669).
57
+ */
58
+ export function readAtfHeader(data, offset) {
59
+ // An offset past the data, or not one at all, is as short as none.
60
+ const available = Number.isInteger(offset) && offset >= 0 && offset <= data.length ? data.length - offset : -1;
61
+ if (available < 3) {
62
+ throw new AtfError("size", "no ATF signature");
63
+ }
64
+ if (data[offset] !== 0x41 || data[offset + 1] !== 0x54 || data[offset + 2] !== 0x46) {
65
+ throw new AtfError("decode", "not an ATF");
66
+ }
67
+ // The new header marks itself where the old one has its format.
68
+ const old = available < 7 || data[offset + 6] !== 0xff;
69
+ if (available < (old ? 10 : 16)) {
70
+ throw new AtfError("size", "ATF header truncated");
71
+ }
72
+ const at = offset + (old ? 6 : 12);
73
+ const length = old
74
+ ? (data[offset + 3] << 16) | (data[offset + 4] << 8) | data[offset + 5]
75
+ : ((data[offset + 8] << 24) |
76
+ (data[offset + 9] << 16) |
77
+ (data[offset + 10] << 8) |
78
+ data[offset + 11]) >>>
79
+ 0;
80
+ // Past this, AIR reads as far as the data goes, the length aside.
81
+ const end = at + length;
82
+ if (end > data.length) {
83
+ throw new AtfError("size", "ATF longer than its data");
84
+ }
85
+ const log2Width = data[at + 1];
86
+ const log2Height = data[at + 2];
87
+ return {
88
+ old,
89
+ version: old ? 0 : data[offset + 7],
90
+ format: data[at] & 0x7f,
91
+ cube: (data[at] & 0x80) !== 0,
92
+ log2Width,
93
+ log2Height,
94
+ width: 2 ** Math.min(log2Width, 31),
95
+ height: 2 ** Math.min(log2Height, 31),
96
+ count: data[at + 3],
97
+ start: at + 4,
98
+ end,
99
+ };
100
+ }
101
+ /** The lossy formats, which came with version 3 and AIR reads in no other. */
102
+ function lossy(format) {
103
+ return format === ATF_COMPRESSED_LOSSY || format === ATF_COMPRESSED_LOSSY_ALPHA;
104
+ }
105
+ /** Blocks a level holds, every GPU's encoding: ETC2's from version 3. */
106
+ function blocksPerLevel(format, version) {
107
+ const etc2 = version >= 3;
108
+ switch (format) {
109
+ case ATF_RGB888:
110
+ case ATF_RGBA8888:
111
+ return 1;
112
+ case ATF_COMPRESSED:
113
+ // DXT1 2, PVRTC 3, ETC1 3, ETC2 3.
114
+ return etc2 ? 11 : 8;
115
+ case ATF_RAW_COMPRESSED:
116
+ case ATF_RAW_COMPRESSED_ALPHA:
117
+ // DXT, PVRTC, ETC1 and ETC2 one each.
118
+ return etc2 ? 4 : 3;
119
+ case ATF_COMPRESSED_ALPHA:
120
+ // DXT5 4, PVRTC 3, ETC1 3, ETC2 6.
121
+ return etc2 ? 16 : 10;
122
+ case ATF_COMPRESSED_LOSSY:
123
+ // As compressed, with a block of ETC2's modes; version 3 alone.
124
+ return 12;
125
+ default:
126
+ // As compressed with alpha, with a block of ETC2's modes; version 3 alone.
127
+ return 17;
128
+ }
129
+ }
130
+ /** How many of a level's blocks the desktop reads: its BGRA image, or its DXT's. */
131
+ function desktopBlocks(format) {
132
+ switch (format) {
133
+ case ATF_COMPRESSED:
134
+ case ATF_COMPRESSED_LOSSY:
135
+ return 2;
136
+ case ATF_COMPRESSED_ALPHA:
137
+ case ATF_COMPRESSED_LOSSY_ALPHA:
138
+ return 4;
139
+ default:
140
+ return 1;
141
+ }
142
+ }
143
+ /**
144
+ * Each face's levels, each its blocks, as views of `data`; a format AIR
145
+ * knows, a size up to 4096 and a level count from 1 to the size's own, or
146
+ * #3677, and a format no texture takes, #3675. AIR reads the blocks as far
147
+ * as the data goes, whatever the length says, and streams what it finds: a
148
+ * level that starts where too little is left for a block's length is
149
+ * absent, as are those after it; one whose blocks for the desktop are whole
150
+ * stands though a later block of its is cut short, and the levels after it
151
+ * are absent; but a block the desktop reads that is cut short is corrupt
152
+ * (#3677).
153
+ */
154
+ export function readAtfBlocks(data, header) {
155
+ const kind = atfKind(header.format);
156
+ if (kind === null) {
157
+ throw new AtfError("format", `ATF format ${header.format} is no texture's`);
158
+ }
159
+ const levels = 1 + Math.max(header.log2Width, header.log2Height);
160
+ if (kind === undefined ||
161
+ header.log2Width > MAX_LOG2 ||
162
+ header.log2Height > MAX_LOG2 ||
163
+ header.count === 0 ||
164
+ header.count > levels ||
165
+ (lossy(header.format) && header.version < 3)) {
166
+ throw new AtfError("decode", "ATF format, size or level count out of range");
167
+ }
168
+ const blocks = blocksPerLevel(header.format, header.version);
169
+ const needed = desktopBlocks(header.format);
170
+ const field = header.version === 0 ? 3 : 4;
171
+ const faces = [];
172
+ let at = header.start;
173
+ let streamed = false;
174
+ for (let face = 0; face < (header.cube ? 6 : 1); face++) {
175
+ const found = [];
176
+ for (let level = 0; level < header.count; level++) {
177
+ const read = [];
178
+ for (let block = 0; block < blocks && !streamed; block++) {
179
+ if (field > data.length - at) {
180
+ streamed = true;
181
+ break;
182
+ }
183
+ let length = (data[at] << 16) | (data[at + 1] << 8) | data[at + 2];
184
+ if (field === 4) {
185
+ length = length * 256 + data[at + 3];
186
+ }
187
+ at += field;
188
+ if (length > data.length - at) {
189
+ if (block < needed) {
190
+ throw new AtfError("decode", "ATF block past the data");
191
+ }
192
+ streamed = true;
193
+ break;
194
+ }
195
+ read.push(data.subarray(at, at + length));
196
+ at += length;
197
+ }
198
+ found.push(read.length >= needed ? read : null);
199
+ }
200
+ faces.push(found);
201
+ }
202
+ return faces;
203
+ }
204
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/atf/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const binary = "AGFzbQEAAAABIwdgA39/fwF/YAF/AX9gAABgAX8AYAABf2ACfH8BfGABfAF8AwoJAAECAwQABAUGBAUBcAEBAQUDAQACBggBfwFBgIAECwdzCAZtZW1vcnkCABBkZWNvZGVOZWxseW1vc2VyAAAFYWxsb2MAAQVyZXNldAACD25lbGx5bW9zZXJTdGFydAADE25lbGx5bW9zZXJTdGF0ZVNpemUABAtkZWNvZGVBZHBjbQAFDXJlc3VsdFBvaW50ZXIABgr3SgmuNQgDfwN+C38DfAF/An0IfwV8I4CAgIAAQeAbayIDJICAgIAAQX8hBAJAIAFBv+D//wBLDQAgAUEGdiIFrUIKhiEGAkACQEEAKAKQn4SAAEUNAEEAKAKUn4SAACEBDAELQQA/AEEQdCIBNgKUn4SAAEEAIAE2ApCfhIAAQQBBADYCmJ+EgAALAkAgAa1CD3xC8P///x+DIgcgBnwiBj8ArUIQhiIIWA0AIAZCgID8/w9WDQFBfyEEIAYgCH1C//8DfEIQiKdAAEF/TA0BC0EAIAY+ApSfhIAAQX8hBCAHQgBRDQBBACAHpyIJNgKYn4SAAAJAIAVFDQAgAkGAAmohCiADQeAXakGAAmohCyADQeATakGAAmohDCADQeALakHwA2ohDUEAIQ4DQCAAIA5BBnRqIg8tAABBP3FBAnQoAoCAhIAAIRBBACERQQAhEkEGIRMDQAJAIBJFDQAgE0EDdiEEQQAhAQJAIBNB9wNLDQAgDyAEai0AAUEIdCEBCyABIA8gBGotAAByIBNBB3F2QR9xQQJ0KAKAgoSAACAQaiEQIBNBBWohEwsCQAJAIBC3RAAAAAAAAEA/oiIURAAAAAAAAAAAYg0ARAAAAAAAAPA/IRUMAQsCQCAURAAAAAAAAPA/Yg0ARAAAAAAAAABAIRUMAQsCQCAUmSIVRAAAAAAAAPB/Yg0ARAAAAAAAAAAARAAAAAAAAPB/IBREAAAAAAAA8H9iGyEVDAELAkAgFEQAAAAAAADgP2INAETNO39mnqD2PyEVDAELAkAgFEQAAAAAAADgv2INAETMO39mnqDmPyEVDAELAkAgFZ0iFkQAAAAAAADgQ2ZFDQAgFETvOfr+Qi7mP6IQiICAgAAhFQwBCwJAAkAgFSAWoSIVRAAAAAAAAAAAYg0ARAAAAAAAAPA/IRUMAQsgFkQAAAAAAADwP6AgFiAVRAAAAAAAAOA/ZCIEGyEWIBVEAAAAAAAA8L+gIBUgBBtE7zn6/kIu5j+iEIiAgIAAIRULAkACQCAW/AYiBlBFDQBBACEEDAELIBUgFUQAAAAAAADgP6IgBkIBg1AiBBshFUEAQQIgBBshBCAGQgFRDQAgFSAVRAAAAAAAAOA/oiAGQgKDUCIBGyEVQQBBAyABGyAEaiEEIAZCBFQNACAVIBVEAAAAAAAA4D+iIAZCBINQIgEbIRUgBEEAQQUgARtqIQQgBkIIVA0AIBUgFUQAAAAAAADgP6IgBkIIg1AiARshFSAEQQBBCSABG2ohBCAGQhBUDQAgFSAVRAAAAAAAAOA/oiAGQhCDUCIBGyEVIARBAEERIAEbaiEEIAZCIFQNACAVIBVEAAAAAAAA4D+iIAZCIINQIgEbIRUgBEEAQSEgARtqIQQgBkLAAFQNACAVIBVEAAAAAAAA4D+iIAZCwACDUCIBGyEVIARBAEHBACABG2ohBCAGQoABVA0AIBUgFUQAAAAAAADgP6IgBkKAAYNQIgEbIRUgBEEAQYEBIAEbaiEEIAZCgAJUDQAgFSAVRAAAAAAAAOA/oiAGQoACg1AiARshFSAEQQBBgQIgARtqIQQgBkKABFQNACAVIBVEAAAAAAAA4D+iIAZCgASDUCIBGyEVIARBAEGBBCABG2ohBCAGQoAIVA0AIBUgFUQAAAAAAADgP6IgBkKACINQIgEbIRUgBEEAQYEIIAEbaiEEIAZCgBBUDQAgBEEAQYEQIAZCgBCDUCIBG2oiBCAEQYEgaiAGQoAgVBshBCAVIBVEAAAAAAAA4D+iIAEbIRULAkAgFEQAAAAAAAAAAGNFDQBBACAEayEERAAAAAAAAPA/IBWjIRULIBUgFWINACAVvSIGQv///////////wCDQv/////////3/wBWDQAgBkKAgICAgICAgIB/gyEIQQsgBkIBhiIHeadrIAdCNYgiB6cgB1AbIQECQAJAAkAgBEEASA0AAkAgBEH+DyABa0wNAEQAAAAAAADwfyAVpiEVDAQLAkAgASAEaiIXQQBKDQAgBiAErYYgCIS/IRUMBAsgAUEASg0BIAZBASABa62GQv////////8HgyAXrUI0hoQgCIS/IRUMAwtBACAEayEXIARBACABa0oNAQJAIARBTCABa04NACAIvyEVDAMLQoCAgICAgIAIQgAgAUEAShsgBkL/////////B4OEIBdBASAEIAFqayIEIBcgBEgbQX9qIgStiEIBfEIBiCAGeiAEQT9xrVGtQn+Fg78gFaYhFQwCCyAErUI0hiAGfL8hFQwBCyAGIBetQjSGfb8hFQsgEi0AgIOEgAAiBEEBIARBAUsbIgRBA3EhFyAVRAAAAAAAANC+orYhGCAQsiEZAkACQCASQQtJDQAgEUECdCEaIBEgBEH8AXEiG2ohESADQfADaiEcIAMhHQNAIBwgGmoiBCAYOAIAIB0gGmoiASAZOAIAIAFBBGogGTgCACAEQQRqIBg4AgAgAUEIaiAZOAIAIARBCGogGDgCACABQQxqIBk4AgAgBEEMaiAYOAIAIB1BEGohHSAcQRBqIRwgG0F8aiIbDQALIBdFDQELIBEgF2ohHCADIBFBAnQiAWohBCADQfADaiABaiEBA0AgASAYOAIAIAQgGTgCACAEQQRqIQQgAUEEaiEBIBdBf2oiFw0ACyAcIRELIBJBAWoiEkEXRw0AC0EAIRdBACEBA0AgASADIBdqIgQqAgD8ACIcIAEgHEobIgEgBEEEaioCAPwAIhwgASAcShsiASAEQQhqKgIA/AAiHCABIBxKGyIBIARBDGoqAgD8ACIEIAEgBEobIQEgF0EQaiIXQfADRw0ACwJAAkAgAQ0AQQ8hHQwBC0GAgDggASABQR91IgRzIARrZ0EQdEGAgPwAc2tBEHUhHQsgHUEfcSEaQQAhBEEAIB1rQR9xIRsgAyEBQQAhFwNAIANB4BdqIARqIAEqAgD8ACIcIBp0IBwgG3UgHUEAShvBQQNsQQJ2Ihw7AQAgHMEgF2ohFyABQQRqIQEgBEECaiIEQfgBRw0ACwJAAkACQAJAIBdBun4gHUEQdEGAgCxqQRB1IhF0aiIEDQBBk4AEIQFBACEEDAELIAQgBCAEQR91IgFzIAFrZyIBQX9qdEEQdUGEIWxBD3UhBEGNgHwgAWsiF8FBAU4NASABQfP/A2ohAQsgBCABdSESDAELIAQgF3QhEgsgEUF/akEfcSEEIBLBIRxBACEXQQAhAQNAIANB4BdqIAFqIh1BAmouAQAgHGsgBHVBAWpBAXUiGkEAIBpBAEobIhpBBiAaQQZIGyAdLgEAIBxrIAR1QQFqQQF1Ih1BACAdQQBKGyIdQQYgHUEGSBsgF2pqIRcgAUEEaiIBQfgBRw0AC0EAIRsCQAJAIBdBxgFHDQBBACEdDAELQQAhAQJAIBdBun5qrCIGIAZCP4ciB4UgB31C//8AVg0AQQAhAQNAIAFBf2ohASAGQgGGIgYgBkI/hyIHhSAHfUKAgAFUDQALCyAGp0GEIWxBD3UhHAJAAkAgESABakF8aiIBwUEBSA0AIBwgAXQhHgwBCyAcQQAgAWt1IR4LIB5BE2wgEmohHyAeQRJsIBJqISBBASETA0AgFyERIBIgHmoiIcEhHEEAIRdBACEBA0AgA0HgF2ogAWoiHUECai4BACAcayAEdUEBakEBdSIaQQAgGkEAShsiGkEGIBpBBkgbIB0uAQAgHGsgBHVBAWpBAXUiHUEAIB1BAEobIh1BBiAdQQZIGyAXamohFyABQQRqIgFB+AFHDQALAkACQCAXQbp+aiARQbp+amxBAU4NACASISAgISEfIBMhEAwBC0EUIRAgISESIBNBAWoiE0EURw0BCwsgESAXIBdBxgFLIgEbISEgFyARIAEbIR4gICAfIAEbIRIgHyAgIAEbIRECQCAXQcYBRg0AIBBBE0sNAANAIBEgEnEgESASc0EBdWoiE8EhHEEAIQFBACEXA0AgA0HgF2ogAWoiHUECai4BACAcayAEdUEBakEBdSIaQQAgGkEAShsiGkEGIBpBBkgbIB0uAQAgHGsgBHVBAWpBAXUiHUEAIB1BAEobIh1BBiAdQQZIGyAXamohFyABQQRqIgFB+AFHDQALICEgFyAXQcYBSyIBGyEhIBcgHiABGyEeIBIgEyABGyESIBMgESABGyERIBdBxgFGDQEgEEETSSEBIBBBAWohECABDQALCyARIBIgHkG6fmoiASABQR91IgFzIAFrICFBun5qIgEgAUEfdSIBcyABa0kiARshEiAeICEgARtBxgFKIR0LIANB4AdqIQEDQCABIANB4BdqIBtqIhcuAQAgEmsgBHVBAWpBAXUiHEEAIBxBAEobIhxBBiAcQQZIGzYCACABQQRqIBdBAmouAQAgEmsgBHVBAWpBAXUiF0EAIBdBAEobIhdBBiAXQQZIGzYCACABQQhqIQEgG0EEaiIbQfgBRw0ACwJAIB1FDQBBACEEQX8hAUEAIRcDQCABQQFqIQEgA0HgB2ogBGohHCAEQQRqIh0hBCAcKAIAIBciHGoiF0HGAUgNAAsgA0HgB2ogHWoiBEF8akHGASAcazYCACABQfoASw0AQfADIB1rIgFFDQAgBEEAIAH8CwALQQAhEkEBIREDQCASQcYBbEH0AGohAUEAIQQDQAJAAkAgA0HgB2ogBGooAgAiF0EBTg0AIANB4AtqIARqIhwgA0HwA2ogBGoqAgC7RM07f2aeoOY/orYiGDgCACACIAIoAoAEIhdBDXQgF3MiF0ERdiAXcyIXQQV0IBdzNgKABCAXQQFxRQ0BIBwgGIw4AgAMAQsgAUEDdiEcQQAhHQJAIAFB9wNLDQAgDyAcai0AAUEIdCEdCyADQeALaiAEaiAdIA8gHGotAAByIAFBB3F2QX8gF3RBf3MiHHFBAnQgHEECdGpBmIOEgABqKgIAIANB8ANqIARqKgIAlDgCACAXIAFqIQELIARBBGoiBEHwA0cNAAsgDUIANwIIIA1CADcCAEH8AyEBQQAhBEGUi4SAACEXA0AgA0HgE2ogFy0AAEEDdCIcaiAEQdiLhIAAaisDACIVIANB4AtqIAFqKgIAuyIUoiAEQdiPhIAAaisDACIWIANB4AtqIARqKgIAuyIioqE5AwAgA0HgF2ogHGogFSAioiAWIBSioDkDACAXQQFqIRcgBEEIaiEEIAFBeGoiAUF8Rw0AC0F+IRcgA0HgF2ohBCADQeATaiEBA0AgAUEIaiIcIAErAwAiFSAcKwMAIhQgBEEIaiIcKwMAIhZEAAAAAAAAAACioSIioTkDACAEIBYgFEQAAAAAAAAAAKKgIhQgBCsDACIWoDkDACAcIBYgFKE5AwAgASAVICKgOQMAIAFBEGohASAEQRBqIQQgF0ECaiIXQT5JDQALQXwhHEEAIRcDQCADQeATaiAXaiIEQRBqIgEgBCsDACIVIAErAwAiFCADQeAXaiAXaiIBQRBqIh0rAwAiFkQAAAAAAAAAAKKhIiKhOQMAIAEgFiAURAAAAAAAAAAAoqAiFCABKwMAIhagOQMAIB0gFiAUoTkDACAEIBUgIqA5AwAgBEEYaiIdIARBCGoiBCsDACIVIB0rAwAiFEQHXBQzJqaRPKIgAUEYaiIdKwMAIhahIiKhOQMAIB0gAUEIaiIBKwMAIiMgFCAWRAdcFDMmppE8oqAiFKE5AwAgBCAVICKgOQMAIAEgFCAjoDkDACAXQSBqIRcgHEEEaiIcQTxJDQALQXghHEEAIRcDQCADQeATaiAXaiIEQSBqIgEgBCsDACIVIAErAwAiFCADQeAXaiAXaiIBQSBqIh0rAwAiFkQAAAAAAAAAAKKhIiKhOQMAIAEgFiAURAAAAAAAAAAAoqAiFCABKwMAIhagOQMAIB0gFiAUoTkDACAEIBUgIqA5AwAgBEEoaiIdIARBCGoiGisDACIVIB0rAwAiFETNO39mnqDmP6IgAUEoaiIdKwMAIhZEzDt/Zp6g5r+ioCIioTkDACAdIAFBCGoiGysDACIjIBREzDt/Zp6g5j+iIBZEzTt/Zp6g5j+ioCIUoTkDACAaIBUgIqA5AwAgGyAUICOgOQMAIARBMGoiHSAEQRBqIhorAwAiFSAdKwMAIhREB1wUMyamkTyiIAFBMGoiHSsDACIWoSIioTkDACAdIAFBEGoiGysDACIjIBQgFkQHXBQzJqaRPKKgIhShOQMAIBsgFCAjoDkDACAaIBUgIqA5AwAgBEE4aiIdIARBGGoiBCsDACIVIB0rAwAiFETMO39mnqDmv6IgAUE4aiIdKwMAIhZEzTt/Zp6g5j+ioSIioTkDACAdIAFBGGoiASsDACIjIBREzTt/Zp6g5j+iIBZEzDt/Zp6g5r+ioCIUoTkDACABIBQgI6A5AwAgBCAVICKgOQMAIBdBwABqIRcgHEEIaiIcQThJDQALQXAhHEEAIRcDQCADQeATaiAXaiIEQcAAaiIBIAQrAwAiFSABKwMAIhQgA0HgF2ogF2oiAUHAAGoiHSsDACIWRAAAAAAAAAAAoqEiIqE5AwAgASAWIBREAAAAAAAAAACioCIUIAErAwAiFqA5AwAgHSAWIBShOQMAIAQgFSAioDkDACAEQcgAaiIdIARBCGoiGisDACIVIB0rAwAiFERGjTLPa5DtP6IgAUHIAGoiHSsDACIWRGOprqbifdg/oqEiIqE5AwAgHSABQQhqIhsrAwAiIyAURGOprqbifdg/oiAWREaNMs9rkO0/oqAiFKE5AwAgGiAVICKgOQMAIBsgFCAjoDkDACAEQdAAaiIdIARBEGoiGisDACIVIB0rAwAiFETNO39mnqDmP6IgAUHQAGoiHSsDACIWRMw7f2aeoOa/oqAiIqE5AwAgHSABQRBqIhsrAwAiIyAURMw7f2aeoOY/oiAWRM07f2aeoOY/oqAiFKE5AwAgGyAUICOgOQMAIBogFSAioDkDACAEQdgAaiIdIARBGGoiGisDACIVIB0rAwAiFERkqa6m4n3YP6IgAUHYAGoiHSsDACIWREaNMs9rkO2/oqAiIqE5AwAgHSABQRhqIhsrAwAiIyAUREaNMs9rkO0/oiAWRGSprqbifdg/oqAiFKE5AwAgGyAUICOgOQMAIBogFSAioDkDACAEQeAAaiIdIARBIGoiGisDACIVIB0rAwAiFEQHXBQzJqaRPKIgAUHgAGoiHSsDACIWoSIioTkDACAdIAFBIGoiGysDACIjIBQgFkQHXBQzJqaRPKKgIhShOQMAIBsgFCAjoDkDACAaIBUgIqA5AwAgBEHoAGoiHSAEQShqIhorAwAiFSAdKwMAIhREYqmupuJ92L+iIAFB6ABqIh0rAwAiFkRGjTLPa5Dtv6KgIiKhOQMAIB0gAUEoaiIbKwMAIiMgFERGjTLPa5DtP6IgFkRiqa6m4n3Yv6KgIhShOQMAIBsgFCAjoDkDACAaIBUgIqA5AwAgBEHwAGoiHSAEQTBqIhorAwAiFSAdKwMAIhREzDt/Zp6g5r+iIAFB8ABqIh0rAwAiFkTNO39mnqDmP6KhIiKhOQMAIB0gAUEwaiIbKwMAIiMgFETNO39mnqDmP6IgFkTMO39mnqDmv6KgIhShOQMAIBsgFCAjoDkDACAaIBUgIqA5AwAgBEH4AGoiHSAEQThqIgQrAwAiFSAdKwMAIhRERo0yz2uQ7b+iIAFB+ABqIh0rAwAiFkRlqa6m4n3YP6KhIiKhOQMAIB0gAUE4aiIBKwMAIiMgFERlqa6m4n3YP6IgFkRGjTLPa5Dtv6KgIhShOQMAIAEgFCAjoDkDACAEIBUgIqA5AwAgF0GAAWohFyAcQRBqIhxBMEkNAAtBgH4hFyADQeAXaiEEIANB4BNqIQEDQCABQYABaiIcIAErAwAiFSAXQdiVhIAAaisDACIUIBwrAwAiFqIgF0HYl4SAAGorAwAiIiAEQYABaiIcKwMAIiOioSIkoTkDACAEICIgFqIgFCAjoqAiFCAEKwMAIhagOQMAIBwgFiAUoTkDACABIBUgJKA5AwAgAUEIaiEBIARBCGohBCAXQRBqIhcNAAtBACEEQQAhAQNAIANB4BNqIAFqIhdBgANqIhwgF0GAAmoiFysDACIVIARB2JOEgABqKwMAIhQgHCsDACIWoiAEQdiVhIAAaisDACIiIANB4BdqIAFqIhxBgANqIh0rAwAiI6KhIiShOQMAIBxBgAJqIhwgIiAWoiAUICOioCIUIBwrAwAiFqA5AwAgHSAWIBShOQMAIBcgFSAkoDkDACAEQRBqIQQgAUEIaiIBQYABRw0AC0EAIQQDQCADQeATaiAEaiIBQYACaiIXIAErAwAiFSAEQdiThIAAaisDACIUIBcrAwAiFqIgBEHYlYSAAGorAwAiIiADQeAXaiAEaiIXQYACaiIcKwMAIiOioSIkoTkDACAXICIgFqIgFCAjoqAiFCAXKwMAIhagOQMAIBwgFiAUoTkDACABIBUgJKA5AwAgBEEIaiIEQYACRw0AC0EAIQRBACEBA0AgA0HgD2ogBGoiF0H8AWogCyABaisDACIVIAFB2I2EgABqKwMAIhSiIAwgAWorAwAiFiABQdiRhIAAaisDACIioqC2OAIAIBdB+AFqIANB4BdqIARqQfgBaisDACIjIARB0JGEgABqKwMAIiSiIANB4BNqIARqQfgBaisDACIlIARB0I2EgABqKwMAIiaiobY4AgAgA0HgD2ogAWoiF0GAAmogFSAioiAUIBaiobY4AgAgF0GEAmogJCAloiAjICaioLY4AgAgBEF4aiEEIAFBCGoiAUGAAkcNAAsgCSASQQl0aiEXQQAhBEH8AyEBA0AgFyAEaiAKIARqKgIAuyIVIAFBlIeEgABqKgIAuyIUoiADQeAPaiABakGAfmoqAgC7IhYgBEGUh4SAAGoqAgC7IiKiobY4AgAgFyABaiAVICKiIBYgFKKgtjgCACABQXxqIQEgBEEEaiIEQYACRw0ACyACIANB4A9qQYAE/AoAAEEBIRIgEUEBcSEEQQAhESAEDQALIAlBgAhqIQkgDkEBaiIOIAVHDQALCyAFQQh0IQQLIANB4BtqJICAgIAAIAQLpwECAX8DfgJAAkBBACgCkJ+EgABFDQBBACgClJ+EgAAhAQwBC0EAPwBBEHQiATYClJ+EgABBACABNgKQn4SAAEEAQQA2ApifhIAACwJAAkAgAa1CD3xC8P///x+DIgIgAK18IgM/AK1CEIYiBFgNAEEAIQEgA0KAgPz/D1YNASADIAR9Qv//A3xCEIinQABBf0wNAQtBACADPgKUn4SAACACpyEBCyABCzoBAX8CQEEAKAKQn4SAACIADQBBAD8AQRB0IgA2ApCfhIAAC0EAIAA2ApSfhIAAQQBBADYCmJ+EgAALEQAgAEHYl4SAAEGEBPwKAAALBQBBhAQLyw0FAX8BfgF/An4Yf0F/IQMCQCABrUIChiACrXwiBEKAgP7/B1YNACAEQgGGIQQCQAJAQQAoApCfhIAARQ0AQQAoApSfhIAAIQUMAQtBAD8AQRB0IgU2ApSfhIAAQQAgBTYCkJ+EgABBAEEANgKYn4SAAAsCQCAFrUIPfELw////H4MiBiAEfCIEPwCtQhCGIgdYDQAgBEKAgPz/D1YNAUF/IQMgBCAHfUL//wN8QhCIp0AAQX9MDQELQQAgBD4ClJ+EgABBfyEDIAZCAFENAEEAIAanIgg2ApifhIAAAkAgAQ0AQQAhAwwBC0EAIQMgAkF9akF+SQ0AIAFBA3QhCSACQRZsIQogAC0AAEEGdiILQX5qIQwgC0F/aiENIAtBAWohDkECIQVBAiALdCIPQX9qIRBBfCALdEF/cyERIAtBAmoiEiACbCETIAtBA3QoAvybhIAAIRRBACEVAkACQAJAQQANAEEAIQNBACEWQQAhFwwBC0EAIQNBACEYQQAhFkEAIRlBACEXQQEhGgwBC0EAIRoLA0ACQAJAAkACQAJAAkACQAJAAkAgGg4CAAEBCyAFIApqIAlLDQlBACEYIAVBA3YiGSABSQ0BDAILIAUgE2ogCUsNCEEAIRogBUEDdiIbIAFJDQIMAwsgACAZai0AAEEIdCEYCwJAIBlBAWoiGiABTw0AIBggACAaai0AAHIhGAtBACEaQQAhGwJAIBlBAmoiGSABTw0AIAAgGWotAAAhGwsgGyAYQQh0ckEIIAVBB3EiHGt2Ih3BIRggBUEQakEDdiIZIAFJDQIMAwsgACAbai0AAEEIdCEaCwJAIBtBAWoiHCABTw0AIBogACAcai0AAHIhGgtBACEcAkAgG0ECaiIbIAFPDQAgACAbai0AACEcCyAcIBpBCHRyQRYgBUEHcSALamt2IhwgEXEiHiAQcSEdQQAgHEEBcWsgGUECdCgCnJyEgAAiGyALdXEgGyAOdWohGgJAIAtFDQAgHEEedEEfdSAbIA11cSAaaiEaIAtBAUYNACAdQR10QR91IBsgDHVxIBpqIRogC0ECRg0AIB1BHHRBH3UgG3EgGmohGgsgBSASaiEFAkACQCAeIA9xRQ0AIBggGmsiGEGAgH4gGEGAgH5KGyEYDAELIBggGmoiGEH//wEgGEH//wFIGyEYCyAUIB1qLAAAIRsgCCADQQF0aiAYOwEAQQAhGiAZIBtqIhlBACAZQQBKGyIZQdgAIBlB2ABIGyEZIANBAWohGwJAIAJBAUcNACAbIQMMAwsCQCAFQQN2IhwgAU8NACAAIBxqLQAAQQh0IRoLAkAgHEEBaiIdIAFPDQAgGiAAIB1qLQAAciEaC0EAIR0CQCAcQQJqIhwgAU8NACAAIBxqLQAAIR0LIB0gGkEIdHJBFiAFQQdxIAtqa3YiHSARcSIfIBBxIR5BACAdQQFxayAXQQJ0KAKcnISAACIcIAt1cSAcIA51aiEaAkAgC0UNACAdQR50QR91IBwgDXVxIBpqIRogC0EBRg0AIB5BHXRBH3UgHCAMdXEgGmohGiALQQJGDQAgHkEcdEEfdSAccSAaaiEaCyAFIBJqIQUCQAJAIB8gD3FFDQAgFiAaayIaQYCAfiAaQYCAfkobIRYMAQsgFiAaaiIaQf//ASAaQf//AUgbIRYLIBQgHmosAAAhGiAIIBtBAXRqIBY7AQAgFyAaaiIaQQAgGkEAShsiGkHYACAaQdgASBshFyADQQJqIQMMAgsgACAZai0AAEEIdCEaCwJAIBlBAWoiGyABTw0AIBogACAbai0AAHIhGgtBACEbAkAgGUECaiIZIAFPDQAgACAZai0AACEbCyAIIANBAXRqIB07AQAgGyAaQQh0ckESIBxrdkE/cSEZIANBAWohGyAFQRZqIRoCQCACQQFHDQAgGiEFIBshAwwBC0EAIRwCQCAaQQN2Ih0gAU8NACAAIB1qLQAAQQh0IRwLAkAgHUEBaiIWIAFPDQAgHCAAIBZqLQAAciEcC0EAIRdBACEWAkAgHUECaiIdIAFPDQAgACAdai0AACEWCyAWIBxBCHRyQQggGkEHcSIda3YiHsEhFgJAIAVBJmpBA3YiGiABTw0AIAAgGmotAABBCHQhFwsCQCAaQQFqIhwgAU8NACAXIAAgHGotAAByIRcLQQAhHAJAIBpBAmoiGiABTw0AIAAgGmotAAAhHAsgCCAbQQF0aiAeOwEAIBwgF0EIdHJBEiAda3ZBP3EhFyADQQJqIQMgBUEsaiEFCwJAIBVBAWpB/x9xIhUNAEEAIRoMAQtBASEaDAALCyADCwsAQQAoApifhIAAC9ACAgN+An8CQAJAIAAgAGINACAAvSICQv///////////wCDQoCAgICAgID4/wBaDQAgAkKAgICAgICAgIB/gyEDQQsgAkIBhiIEeadrIARCNYgiBKcgBFAbIQUCQCABQQBIDQACQCABQf4PIAVrTA0ARAAAAAAAAPB/IACmDwsCQCAFIAFqIgZBAEoNACACIAGthiADhL8PCwJAIAVBAEoNACACQQEgBWuthkL/////////B4MgBq1CNIaEIAOEvw8LIAGtQjSGIAJ8vw8LQQAgAWshBiABQQAgBWtKDQECQCABQUwgBWtODQAgA78PC0KAgICAgICACEIAIAVBAEobIAJC/////////weDhCAGQQEgASAFamsiASAGIAFIG0F/aiIBrYhCAXxCAYggAnogAUE/ca1RrUJ/hYO/IACmIQALIAAPCyACIAatQjSGfb8LnQMDAX4BfwN8AkAgACAAYg0AIAC9IgFCP4inIQICQAJAAkACQAJAAkACQCABQiCIQv////8HgyIBQqrGmIQEVg0AIAFCwtzY/gNYDQEgAUKyxcL/A1gNAgwECyABQoCAwP8HVg0GAkAgAETvOfr+Qi6GQGRFDQBEAAAAAAAA8H8PCyAARFEwLdUQSYfAY0UNA0QAAAAAAAAAAA8LIAFCgIDA8QNYDQFBACECRAAAAAAAAAAAIQMgACEEDAQLIAJBAXMgAmshAgwCCyAARAAAAAAAAPA/oCEADAMLIABE/oIrZUcV9z+iIAJBA3QrA4CfhIAAoPwCIQILIAAgArciBEQAAOD+Qi7mv6KgIgAgBER2PHk17znqPaIiA6EhBAsgACAEIAQgBCAEoiIFIAUgBSAFIAVE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgWiRAAAAAAAAABAIAWhoyADoaBEAAAAAAAA8D+gIQAgAkUNACAAIAIQh4CAgAAPCyAACwuZHwEAQYCABAuQHz4MAADeFAAA1hoAAHAeAAB5IQAA4SMAABAmAADPJwAAhykAADUrAACqLAAA+i0AAFQvAADhMAAAfTIAAPQzAABqNQAAyzYAABA4AAB8OQAADTsAAHU8AADQPQAAHT8AAIFAAACkQQAAwkIAAPlDAAAPRQAAHEYAAD5HAABYSAAATEkAAIZKAAC1SwAAuEwAANFNAADtTgAAFFAAAE1RAACqUgAA2VMAACJVAAB5VgAAtVcAAORYAAAbWgAANlsAAFRcAAB2XQAAo14AAMlfAADzYAAAE2IAAEZjAACCZAAACGYAAIFnAAAPaQAA0GoAAOVsAAAvbwAA8nIAAHt6AAAz0v//NNv//xrh//9v5f//xOj//4/r//8J7v//OfD//03y//8q9P//3PX//4b3//8S+f//mfr//wj8//9s/f//t/7///////9RAQAAuAIAAD0EAADoBQAAqgcAAIEJAACYCwAA8Q0AANoQAACfFAAA3hkAANofAABcJwAArzIAAAICAgICAgICAgMDBAQFBgYHCAkKDA4PAAAAAADF5Vi/3PM4P/Eqw78EA+i+US/APp1jvD+huv2/MbKYv1w7Fb8OFo69hCvIPukraD86Pr4/ui0OQOPhGMC3Q+e/pIy0v/fmib8ZrEy/oUkOv6uzqr62oAe+N6loPT1/gj7gZ/Q+dho9P9KrhT/5nbI//KnnP38UGUCn6xjAH4b+vwIu4L9gO8i/CTSyvyC1m791Aoa/d/hjvxO6Q7+8PCW/OKMGv1XZz74lH5u++rhWvuXs/b3oSkS95iHTPA4TzT0i4zE+MWGEPltftD5V+uk+h6cTP+lHMz99sVc/oDOBPzNQlz8MPq0/QxvEP4fb3T8ycvw/yXUZQCPXJMBUqwPAyQHzv33q4r8CSNW/+n/Jvxzqv7/EQLe/y7+uv6Vppr8nMp2/dVWUv8HKi7/LvIG/zJdrvwMmVL8UzDy/ChAlv8kgD7+Br/i+yXLSvvsisb65+pG+KshvviKMP75GthO+mL/ivYl8l739wBW9HCjwux3Mpjz8NkQ94gCaPafoyD2V7/k9z2YVPl6ALT5txkk+GqZmPmjpgj768pI+B7GjPsKFtD7RHsc+qvLdPkQy9D5PPgU//n8QP2e5HD/pKCs/PfI7P5CfTT8W32A/HeV0Px4VhT9tj5A/h02cP3Ztpz93hLM/MLrAPwe3zz8m4eI/HLf4P82VEkCID8k7tsmWPLpJ+zwH4C89aRRiPQogij2MMKM9wzq8Pbk91T12OO49ApUDPrcIED7edhw+/N4oPphANT43m0E+YO5NPpc5Wj5mfGY+UbZyPuHmfj7OhoU+B5WLPt2dkT4XoZc+eJ6dPsWVoz7Ehqk+OnGvPuxUtT6gMbs+HgfBPinVxj6Lm8w+CVrSPmsQ2D55vt0++mPjPrcA6T55lO4+Bx/0Pi2g+T6yF/8+sUICP4T0BD82oQc/rUgKP9DqDD+Ehw8/sB4SPzmwFD8HPBc/AMIZPwxCHD8SvB4/+S8hP6mdIz8KBSY/BWYoP4LAKj9pFC0/pWEvPx2oMT+85zM/bCA2PxZSOD+kfDo/A6A8Pxu8Pj/a0EA/Kd5CP/XjRD8q4kY/s9hIP3/HSj95rkw/kI1OP69kUD/GM1I/w/pTP5O5VT8mcFc/ah5ZP1DEWj/HYVw/vvZdPyeDXz/yBmE/EIJiP3P0Yz8LXmU/zL5mP6gWaD+RZWk/e6tqP1joaz8dHG0/vkZuPzBobz9mgHA/V49xP/iUcj8/kXM/IoR0P5dtdT+XTXY/FyR3PxDxdz97tHg/Tm55P4Qeej8WxXo//GF7PzH1ez+wfnw/c/58P3R0fT+x4H0/I0N+P8mbfj+d6n4/nS9/P8dqfz8YnH8/j8N/Pynhfz/m9H8/xP5/PwAgEDAIKBg4BCQUNAwsHDwCIhIyCioaOgYmFjYOLh4+ASERMQkpGTkFJRU1DS0dPQMjEzMLKxs7BycXNw8vHz8AAAAAAh1iIfb/7795puKc4Pzvv9O+sVTc9O+/YC1Ihern77+eXKctDdbvv4iNCg9Hv++/kRd6rJuj778MxkBKD4Pvv11oQ+2mXe+/8K46Wmgz77+Mc88UWgTvvwmQmV6D0O6/MGsBNuyX7r/TZwRVnVruv9lm3C+gGO6/WpGK8/7R7b9QpEWExIbtv9z7y3v8Nu2/YKCZJ7Pi7L8TnAKH9Ynsv/HjMUnRLOy/JyMNy1TL679HvP0Uj2Xrv7ZXn9iP++q/0lpUbmeN6r9ep8DSJhvqv7IGK6TfpOm/FajFH6Qq6b+IHd4eh6zov/9F9ROcKui/0pe/B/ek57+/QQ6WrBvnv3KcoerRjua/EGrlvXz+5b+eZJdRw2rlv4CfWG280+S/gEMqW3855L8pMNbjI5zjvxUQREvC++K/EXG7THNY4r+/cxMXULLhv1ep0EhyCeG/uLgx7PNd4L+izVbm3l/fv95BqWb//t2/i1OGw3+Z3L9yGbMdly/bv/T5DUR9wdm/PpDzqmpP2L+2DIpjmNnWv7Zn9BJAYNW/ccJu6Zvj07+7VFWZ5mPSv9BJF05b4dC/SOMtRmu4zr+wXfE0Y6nLvwMYxCcXlsi/4MtUhgB/xb8ONP1NmWTCvz6q5P23jr6/pTDBEodPuL9XRO10lgyyv4hGh6W6jae/QrL6IU39lb+6pMy++CFpvxw75UxPRZy/F4NfvQGxqr+ZosUSn52zv1yoJOu237m/W7hvregOwL+nFkX5eyvDvw2DHYMaRca/+Sq26Ulbyb/cdF1TkG3MvwE4vYB0e8+/eJPG7z5C0b8gRZVOGsTSv/A2idwQQ9S/trOdi+e+1b+SECbJYzfXv0Tt1YZLrNi/wAq1Q2Ud2r+TVv0UeIrbvyHN4a5L89y/JNg8bahX3r/e0iRcV7ffv4ywMiARieC/TiXuz+kz4b9ySNxkG9zhv7o8Te+LgeK/IKZJ7CEk478XxYFJxMPjv6IyK2laYOS/hqTMJcz55L/fI/fVAZDlv/8i7E/kIua/nOIv7Vyy5r9CmQeOVT7nvzPT4py4xue/+YOvEXFL6L9URhh1aszov2xKrOOQSem/w3XwENHC6b/FO1lKGDjqv465LHpUqeq/9aJMKnQW67/pkueGZn/rv8FUEWEb5Ou/BMBBMYNE7L9IxLkZj6Dsv3tGzugw+Oy/JHUYG1tL7b9GPYvdAJrtv4GNbQ8W5O2/ehk5RI8p7r+nU13FYWruvwBY5pODpu6/UIYHauvd7r9fj4m8kBDvv2W8G7xrPu+/7jyIVnVn7793S8s3p4vvv9v9DMv7qu+/9pp9O27F77+MUxR1+trvvw9BMCWd6++/ZJEbu1P37793y3BoHP7vvwAAAAAAAPA/JiXRo43Y7z+wXPfPl2LvP9otxlZBn+4/Ro0yz2uQ7T+xvYDxsjjsP6OhDilmm+o/QRcVa4C86D/NO39mnqDmP9YdCSXzTOQ/yWiuOTvH4T8+9gY4XSveP2Sprqbifdg/BZ/VLgaU0j8Npmk8uPjIPzi0KbymF7k/B1wUMyamkTwvtCm8phe5vwimaTy4+Mi/Ap/VLgaU0r9iqa6m4n3Yvzz2BjhdK96/xmiuOTvH4b/VHQkl80zkv8w7f2aeoOa/QRcVa4C86L+koQ4pZpvqv7C9gPGyOOy/Ro0yz2uQ7b/aLcZWQZ/uv7Bc98+XYu+/JSXRo43Y778AAAAAAAAAACy0KbymF7k/CqZpPLj4yD8Fn9UuBpTSP2Oprqbifdg/O/YGOF0r3j/IaK45O8fhP9YdCSXzTOQ/zDt/Zp6g5j9AFxVrgLzoP6OhDilmm+o/sL2A8bI47D9GjTLPa5DtP9stxlZBn+4/sFz3z5di7z8lJdGjjdjvPwAAAAAAAPA/JiXRo43Y7z+wXPfPl2LvP9stxlZBn+4/Ro0yz2uQ7T+xvYDxsjjsP6ShDilmm+o/QhcVa4C86D/NO39mnqDmP9YdCSXzTOQ/yGiuOTvH4T8/9gY4XSveP2Wprqbifdg/Bp/VLgaU0j8Xpmk8uPjIPzy0KbymF7k/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA/wL//wIE/////wIEBgj//////////wECBAYICg0QAADcDQEAAgAAAN4NAQAEAAAA4g0BAAgAAADqDQEAEAAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAAEAAAABEAAAATAAAAFQAAABcAAAAZAAAAHAAAAB8AAAAiAAAAJQAAACkAAAAtAAAAMgAAADcAAAA8AAAAQgAAAEkAAABQAAAAWAAAAGEAAABrAAAAdgAAAIIAAACPAAAAnQAAAK0AAAC+AAAA0QAAAOYAAAD9AAAAFwEAADMBAABRAQAAcwEAAJgBAADBAQAA7gEAACACAABWAgAAkgIAANQCAAAcAwAAbAMAAMMDAAAkBAAAjgQAAAIFAACDBQAAEAYAAKsGAABWBwAAEggAAOAIAADDCQAAvQoAANALAAD/DAAATA4AALoPAABMEQAABxMAAO4UAAAGFwAAVBkAANwbAAClHgAAtiEAABUlAADKKAAA3ywAAFsxAABLNgAAuTsAALJBAABESAAAfk8AAHFXAAAvYAAAzmkAAGJ0AAD/fwAAAAAAAAAA4D8AAAAAAADgvw==";
2
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../src/audio/binary.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,q9jBACi8jB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Generated by packages/native/build.ts; its Nellymoser decoder is translated from FFmpeg's, under the MIT licence.
2
+ // inputs: 8b384e6410cd54c8e5b379d9035b9b6625f62d7e346430c88b06732ab35d1d09
3
+ export const binary = "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";
4
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/audio/binary.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,MAAM,GACjB,k9jBAAk9jB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SWF's ADPCM as 16-bit samples, channels interleaved: a code size, then
3
+ * packets of a header per channel (a 16-bit sample and a 6-bit step index)
4
+ * and 4095 codes, the header's sample the packet's first, as adl gives it
5
+ * (Ruffle's decoder leaves it out). It ends where the bits do; none where
6
+ * the module cannot have the memory.
7
+ */
8
+ export declare function decodeAdpcm(data: Uint8Array, channels: 1 | 2): Int16Array;
9
+ /** The samples a Nellymoser block decodes to. */
10
+ export declare const NELLYMOSER_SAMPLES = 256;
11
+ /** Nellymoser's blocks into samples, the overlap carried from one call to the next, as a stream's blocks need. */
12
+ export declare class NellymoserDecoder {
13
+ #private;
14
+ /**
15
+ * `data`'s whole 64-byte blocks as samples from -1 to 1, 256 a block;
16
+ * none where the module cannot have the memory, the stream's state then
17
+ * as it was.
18
+ */
19
+ decode(data: Uint8Array): Float32Array;
20
+ }
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAgCA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,UAAU,CAQzE;AAED,iDAAiD;AACjD,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,kHAAkH;AAClH,qBAAa,iBAAiB;;IAI5B;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CA6BrC;CACF"}
@@ -0,0 +1,73 @@
1
+ // SWF's ADPCM and Nellymoser sound, decoded synchronously in one module
2
+ // that imports nothing (src/audio/root.zig), kept as compress's is: each
3
+ // call copies its input into the module's memory, decodes there in an
4
+ // arena reset first, and copies the samples out. A Nellymoser stream's
5
+ // state stays here between its calls, copied in and out with each.
6
+ import { KeptInstance } from "../instance.js";
7
+ import { binary } from "./binary.js";
8
+ const kept = new KeptInstance(binary);
9
+ /** `data` in the module's memory, after a reset; 0 if it does not fit. */
10
+ function input(x, data) {
11
+ x.reset();
12
+ const at = x.alloc(data.length);
13
+ if (at !== 0) {
14
+ new Uint8Array(x.memory.buffer, at, data.length).set(data);
15
+ }
16
+ return at;
17
+ }
18
+ /**
19
+ * SWF's ADPCM as 16-bit samples, channels interleaved: a code size, then
20
+ * packets of a header per channel (a 16-bit sample and a 6-bit step index)
21
+ * and 4095 codes, the header's sample the packet's first, as adl gives it
22
+ * (Ruffle's decoder leaves it out). It ends where the bits do; none where
23
+ * the module cannot have the memory.
24
+ */
25
+ export function decodeAdpcm(data, channels) {
26
+ return kept.call((x) => {
27
+ const at = input(x, data);
28
+ const n = at === 0 ? -1 : x.decodeAdpcm(at, data.length, channels);
29
+ return n <= 0
30
+ ? new Int16Array(0)
31
+ : new Int16Array(x.memory.buffer, x.resultPointer(), n).slice();
32
+ });
33
+ }
34
+ /** The samples a Nellymoser block decodes to. */
35
+ export const NELLYMOSER_SAMPLES = 256;
36
+ /** Nellymoser's blocks into samples, the overlap carried from one call to the next, as a stream's blocks need. */
37
+ export class NellymoserDecoder {
38
+ /** The stream's state as the module keeps it, made at the first call. */
39
+ #state = null;
40
+ /**
41
+ * `data`'s whole 64-byte blocks as samples from -1 to 1, 256 a block;
42
+ * none where the module cannot have the memory, the stream's state then
43
+ * as it was.
44
+ */
45
+ decode(data) {
46
+ return kept.call((x) => {
47
+ x.reset();
48
+ const size = x.nellymoserStateSize();
49
+ const state = x.alloc(size);
50
+ if (state === 0) {
51
+ return new Float32Array(0);
52
+ }
53
+ if (this.#state) {
54
+ new Uint8Array(x.memory.buffer, state, size).set(this.#state);
55
+ }
56
+ else {
57
+ x.nellymoserStart(state);
58
+ }
59
+ const at = x.alloc(data.length);
60
+ if (at === 0) {
61
+ return new Float32Array(0);
62
+ }
63
+ new Uint8Array(x.memory.buffer, at, data.length).set(data);
64
+ const n = x.decodeNellymoser(at, data.length, state);
65
+ if (n < 0) {
66
+ return new Float32Array(0);
67
+ }
68
+ this.#state = new Uint8Array(x.memory.buffer, state, size).slice();
69
+ return new Float32Array(x.memory.buffer, x.resultPointer(), n).slice();
70
+ });
71
+ }
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Base64 to bytes with a plain loop: Uint8Array.from with a callback takes some 8 times as long. */
2
+ export declare function decodeBase64(text: string): Uint8Array;
3
+ //# sourceMappingURL=base64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQrD"}
package/dist/base64.js ADDED
@@ -0,0 +1,10 @@
1
+ /** Base64 to bytes with a plain loop: Uint8Array.from with a callback takes some 8 times as long. */
2
+ export function decodeBase64(text) {
3
+ const raw = atob(text);
4
+ const bytes = new Uint8Array(raw.length);
5
+ for (let i = 0; i < raw.length; i++) {
6
+ bytes[i] = raw.charCodeAt(i);
7
+ }
8
+ return bytes;
9
+ }
10
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}