spectrogram-js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -0
- package/.prettierrc +15 -0
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/core/DataChunk.d.ts +19 -0
- package/dist/core/SpectrogramModel.d.ts +25 -0
- package/dist/dsp/fft.d.ts +12 -0
- package/dist/dsp/window.d.ts +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/render/AxisRenderer.d.ts +11 -0
- package/dist/render/CanvasRenderer.d.ts +31 -0
- package/dist/render/ColorMap.d.ts +11 -0
- package/dist/spectrogram-js.cjs.js +2 -0
- package/dist/spectrogram-js.cjs.js.map +1 -0
- package/dist/spectrogram-js.es.js +2341 -0
- package/dist/spectrogram-js.es.js.map +1 -0
- package/dist/spectrogram-js.umd.js +2 -0
- package/dist/spectrogram-js.umd.js.map +1 -0
- package/dist/spectrogram.d.ts +18 -0
- package/package.json +49 -0
|
@@ -0,0 +1,2341 @@
|
|
|
1
|
+
var pA = (() => {
|
|
2
|
+
var o = import.meta.url;
|
|
3
|
+
return (function(I = {}) {
|
|
4
|
+
var A = I, r, E;
|
|
5
|
+
A.ready = new Promise((g, i) => {
|
|
6
|
+
r = g, E = i;
|
|
7
|
+
});
|
|
8
|
+
var B = Object.assign({}, A), Q = "";
|
|
9
|
+
function e(g) {
|
|
10
|
+
return A.locateFile ? A.locateFile(g, Q) : Q + g;
|
|
11
|
+
}
|
|
12
|
+
typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
|
|
13
|
+
var a = A.printErr || console.error.bind(console);
|
|
14
|
+
Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
|
|
15
|
+
var t;
|
|
16
|
+
A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
|
|
17
|
+
var w, F, h = !1, D, s;
|
|
18
|
+
function c() {
|
|
19
|
+
var g = w.buffer;
|
|
20
|
+
A.HEAP8 = D = new Int8Array(g), A.HEAP16 = new Int16Array(g), A.HEAP32 = new Int32Array(g), A.HEAPU8 = s = new Uint8Array(g), A.HEAPU16 = new Uint16Array(g), A.HEAPU32 = new Uint32Array(g), A.HEAPF32 = new Float32Array(g), A.HEAPF64 = new Float64Array(g);
|
|
21
|
+
}
|
|
22
|
+
var l = [], R = [], f = [];
|
|
23
|
+
function y() {
|
|
24
|
+
if (A.preRun)
|
|
25
|
+
for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
|
|
26
|
+
J(A.preRun.shift());
|
|
27
|
+
O(l);
|
|
28
|
+
}
|
|
29
|
+
function G() {
|
|
30
|
+
O(R);
|
|
31
|
+
}
|
|
32
|
+
function H() {
|
|
33
|
+
if (A.postRun)
|
|
34
|
+
for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
|
|
35
|
+
P(A.postRun.shift());
|
|
36
|
+
O(f);
|
|
37
|
+
}
|
|
38
|
+
function J(g) {
|
|
39
|
+
l.unshift(g);
|
|
40
|
+
}
|
|
41
|
+
function p(g) {
|
|
42
|
+
R.unshift(g);
|
|
43
|
+
}
|
|
44
|
+
function P(g) {
|
|
45
|
+
f.unshift(g);
|
|
46
|
+
}
|
|
47
|
+
var k = 0, S = null;
|
|
48
|
+
function T(g) {
|
|
49
|
+
k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
|
|
50
|
+
}
|
|
51
|
+
function K(g) {
|
|
52
|
+
if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
|
|
53
|
+
var i = S;
|
|
54
|
+
S = null, i();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function L(g) {
|
|
58
|
+
A.onAbort && A.onAbort(g), g = "Aborted(" + g + ")", a(g), h = !0, g += ". Build with -sASSERTIONS for more info.";
|
|
59
|
+
var i = new WebAssembly.RuntimeError(g);
|
|
60
|
+
throw E(i), i;
|
|
61
|
+
}
|
|
62
|
+
var u = "data:application/octet-stream;base64,";
|
|
63
|
+
function m(g) {
|
|
64
|
+
return g.startsWith(u);
|
|
65
|
+
}
|
|
66
|
+
var U;
|
|
67
|
+
U = "data:application/octet-stream;base64,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GCAZkzgCBCAHIBcgHpM4AgAgBUEIaiEFIAdBCGohByAEQQhqIQQgAUEIaiEBIABBCGohACAJQQFqIgkgBkcNAAsMAQsgBSgCACELIAlBA3QQByEIAkAgCUECSA0AIAZBAEwNACAFQYgCaiENIAlBfHEhDiAJQQNxIQogCUEBa0EDSSEPQQAhBwNAIAchAUEAIQRBACEDIA9FBEADQCAIIARBA3QiBWogACABQQN0aikCADcCACAIIAVBCHJqIAAgASAGaiIBQQN0aikCADcCACAIIAVBEHJqIAAgASAGaiIBQQN0aikCADcCACAIIAVBGHJqIAAgASAGaiIBQQN0aikCADcCACAEQQRqIQQgASAGaiEBIANBBGoiAyAORw0ACwtBACEFIAoEQANAIAggBEEDdGogACABQQN0aikCADcCACAEQQFqIQQgASAGaiEBIAVBAWoiBSAKRw0ACwsgCCkCACIvp74hFUEAIQwgByEDA0AgACADQQN0aiIFIC83AgAgAiADbCEQIAUqAgQhFEEBIQEgFSETQQAhBANAIAUgEyAIIAFBA3RqIhEqAgAiFiANIAQgEGoiBCALQQAgBCALThtrIgRBA3RqIhIqAgAiF5QgEioCBCIYIBEqAgQiGZSTkiITOAIAIAUgFCAWIBiUIBcgGZSSkiIUOAIEIAFBAWoiASAJRw0ACyADIAZqIQMgDEEBaiIMIAlHDQALIAdBAWoiByAGRw0ACwsgCBAGCwsDAAELwQEBAn8jAEEQayIBJAACfCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEBEAAAAAAAA8D8gAkGewZryA0kNARogAEQAAAAAAAAAABAEDAELIAAgAKEgAkGAgMD/B08NABoCQAJAAkACQCAAIAEQC0EDcQ4DAAECAwsgASsDACABKwMIEAQMAwsgASsDACABKwMIQQEQA5oMAgsgASsDACABKwMIEASaDAELIAErAwAgASsDCEEBEAMLIQAgAUEQaiQAIAALuBgDFH8EfAF+IwBBMGsiCCQAAkACQAJAIAC9IhpCIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIBpCAFkEQCABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIhY5AwAgASAAIBahRDFjYhphtNC9oDkDCEEB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IAIgC0chCiACQQFqIQIgCg0ACwsgBUGgAWogBkEDdGogADkDACAEQQBKIQIgBEEBayEEIAINAAsLRAAAAAAAAAAAIQAgA0EATgRAIAMhAgNAIAIiBEEBayECIAAgBUGgAWogBEEDdGorAwCgIQAgBA0ACwsgCCAAmiAAIAwbOQMAIAUrA6ABIAChIQBBASECIANBAEoEQANAIAAgBUGgAWogAkEDdGorAwCgIQAgAiADRyEEIAJBAWohAiAEDQALCyAIIACaIAAgDBs5AwggBUGwBGokACAHQQdxIQMgCCsDACEAIBpCAFMEQCABIACaOQMAIAEgCCsDCJo5AwhBACADayEDDAELIAEgADkDACABIAgrAwg5AwgLIAhBMGokACADC8UBAQJ/IwBBEGsiASQAAkAgAL1CIIinQf////8HcSICQfvDpP8DTQRAIAJBgIDA8gNJDQEgAEQAAAAAAAAAAEEAEAMhAAwBCyACQYCAwP8HTwRAIAAgAKEhAAwBCwJAAkACQAJAIAAgARALQQNxDgMAAQIDCyABKwMAIAErAwhBARADIQAMAwsgASsDACABKwMIEAQhAAwCCyABKwMAIAErAwhBARADmiEADAELIAErAwAgASsDCBAEmiEACyABQRBqJAAgAAuhBAEDfyABIAJGBEAgACgCAEEDdBAHIgQgAUEBQQEgAEEIaiAAEAggBCECAkAgACgCAEEDdCIDQYAETwRAIAEgAiADEAEMAQsgASADaiEAAkAgASACc0EDcUUEQAJAIAFBA3FFDQAgA0UNAANAIAEgAi0AADoAACACQQFqIQIgAUEBaiIBQQNxRQ0BIAAgAUsNAAsLAkAgAEF8cSIDQcAASQ0AIAEgA0FAaiIFSw0AA0AgASACKAIANgIAIAEgAigCBDYCBCABIAIoAgg2AgggASACKAIMNgIMIAEgAigCEDYCECABIAIoAhQ2AhQgASACKAIYNgIYIAEgAigCHDYCHCABIAIoAiA2AiAgASACKAIkNgIkIAEgAigCKDYCKCABIAIoAiw2AiwgASACKAIwNgIwIAEgAigCNDYCNCABIAIoAjg2AjggASACKAI8NgI8IAJBQGshAiABQUBrIgEgBU0NAAsLIAEgA08NAQNAIAEgAigCADYCACACQQRqIQIgAUEEaiIBIANJDQALDAELIABBBEkNACAB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", m(U) || (U = e(U));
|
|
68
|
+
function x(g) {
|
|
69
|
+
if (g == U && t)
|
|
70
|
+
return new Uint8Array(t);
|
|
71
|
+
var i = aA(g);
|
|
72
|
+
if (i)
|
|
73
|
+
return i;
|
|
74
|
+
throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
|
|
75
|
+
}
|
|
76
|
+
function Z(g, i) {
|
|
77
|
+
var n, d = x(g);
|
|
78
|
+
n = new WebAssembly.Module(d);
|
|
79
|
+
var Y = new WebAssembly.Instance(n, i);
|
|
80
|
+
return [Y, n];
|
|
81
|
+
}
|
|
82
|
+
function W() {
|
|
83
|
+
var g = { a: q };
|
|
84
|
+
function i(d, Y) {
|
|
85
|
+
var M = d.exports;
|
|
86
|
+
return F = M, w = F.c, c(), F.j, p(F.d), K(), M;
|
|
87
|
+
}
|
|
88
|
+
if (T(), A.instantiateWasm)
|
|
89
|
+
try {
|
|
90
|
+
return A.instantiateWasm(g, i);
|
|
91
|
+
} catch (d) {
|
|
92
|
+
a("Module.instantiateWasm callback failed with error: " + d), E(d);
|
|
93
|
+
}
|
|
94
|
+
var n = Z(U, g);
|
|
95
|
+
return i(n[0]);
|
|
96
|
+
}
|
|
97
|
+
var O = (g) => {
|
|
98
|
+
for (; g.length > 0; )
|
|
99
|
+
g.shift()(A);
|
|
100
|
+
}, _ = (g, i, n) => s.copyWithin(g, i, i + n), AA = (g) => {
|
|
101
|
+
L("OOM");
|
|
102
|
+
}, $ = (g) => {
|
|
103
|
+
s.length, AA();
|
|
104
|
+
};
|
|
105
|
+
function CA(g) {
|
|
106
|
+
var i = A["_" + g];
|
|
107
|
+
return i;
|
|
108
|
+
}
|
|
109
|
+
var EA = (g, i) => {
|
|
110
|
+
D.set(g, i);
|
|
111
|
+
}, iA = (g) => {
|
|
112
|
+
for (var i = 0, n = 0; n < g.length; ++n) {
|
|
113
|
+
var d = g.charCodeAt(n);
|
|
114
|
+
d <= 127 ? i++ : d <= 2047 ? i += 2 : d >= 55296 && d <= 57343 ? (i += 4, ++n) : i += 3;
|
|
115
|
+
}
|
|
116
|
+
return i;
|
|
117
|
+
}, IA = (g, i, n, d) => {
|
|
118
|
+
if (!(d > 0)) return 0;
|
|
119
|
+
for (var Y = n, M = n + d - 1, N = 0; N < g.length; ++N) {
|
|
120
|
+
var v = g.charCodeAt(N);
|
|
121
|
+
if (v >= 55296 && v <= 57343) {
|
|
122
|
+
var V = g.charCodeAt(++N);
|
|
123
|
+
v = 65536 + ((v & 1023) << 10) | V & 1023;
|
|
124
|
+
}
|
|
125
|
+
if (v <= 127) {
|
|
126
|
+
if (n >= M) break;
|
|
127
|
+
i[n++] = v;
|
|
128
|
+
} else if (v <= 2047) {
|
|
129
|
+
if (n + 1 >= M) break;
|
|
130
|
+
i[n++] = 192 | v >> 6, i[n++] = 128 | v & 63;
|
|
131
|
+
} else if (v <= 65535) {
|
|
132
|
+
if (n + 2 >= M) break;
|
|
133
|
+
i[n++] = 224 | v >> 12, i[n++] = 128 | v >> 6 & 63, i[n++] = 128 | v & 63;
|
|
134
|
+
} else {
|
|
135
|
+
if (n + 3 >= M) break;
|
|
136
|
+
i[n++] = 240 | v >> 18, i[n++] = 128 | v >> 12 & 63, i[n++] = 128 | v >> 6 & 63, i[n++] = 128 | v & 63;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return i[n] = 0, n - Y;
|
|
140
|
+
}, BA = (g, i, n) => IA(g, s, i, n), gA = (g) => {
|
|
141
|
+
var i = iA(g) + 1, n = DA(i);
|
|
142
|
+
return BA(g, n, i), n;
|
|
143
|
+
}, oA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, eA = (g, i, n) => {
|
|
144
|
+
for (var d = i + n, Y = i; g[Y] && !(Y >= d); ) ++Y;
|
|
145
|
+
if (Y - i > 16 && g.buffer && oA)
|
|
146
|
+
return oA.decode(g.subarray(i, Y));
|
|
147
|
+
for (var M = ""; i < Y; ) {
|
|
148
|
+
var N = g[i++];
|
|
149
|
+
if (!(N & 128)) {
|
|
150
|
+
M += String.fromCharCode(N);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
var v = g[i++] & 63;
|
|
154
|
+
if ((N & 224) == 192) {
|
|
155
|
+
M += String.fromCharCode((N & 31) << 6 | v);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
var V = g[i++] & 63;
|
|
159
|
+
if ((N & 240) == 224 ? N = (N & 15) << 12 | v << 6 | V : N = (N & 7) << 18 | v << 12 | V << 6 | g[i++] & 63, N < 65536)
|
|
160
|
+
M += String.fromCharCode(N);
|
|
161
|
+
else {
|
|
162
|
+
var j = N - 65536;
|
|
163
|
+
M += String.fromCharCode(55296 | j >> 10, 56320 | j & 1023);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return M;
|
|
167
|
+
}, rA = (g, i) => g ? eA(s, g, i) : "", sA = function(g, i, n, d, Y) {
|
|
168
|
+
var M = { string: (z) => {
|
|
169
|
+
var YA = 0;
|
|
170
|
+
return z != null && z !== 0 && (YA = gA(z)), YA;
|
|
171
|
+
}, array: (z) => {
|
|
172
|
+
var YA = DA(z.length);
|
|
173
|
+
return EA(z, YA), YA;
|
|
174
|
+
} };
|
|
175
|
+
function N(z) {
|
|
176
|
+
return i === "string" ? rA(z) : i === "boolean" ? !!z : z;
|
|
177
|
+
}
|
|
178
|
+
var v = CA(g), V = [], j = 0;
|
|
179
|
+
if (d)
|
|
180
|
+
for (var tA = 0; tA < d.length; tA++) {
|
|
181
|
+
var wA = M[n[tA]];
|
|
182
|
+
wA ? (j === 0 && (j = RA()), V[tA] = wA(d[tA])) : V[tA] = d[tA];
|
|
183
|
+
}
|
|
184
|
+
var yA = v.apply(null, V);
|
|
185
|
+
function b(z) {
|
|
186
|
+
return j !== 0 && nA(j), N(z);
|
|
187
|
+
}
|
|
188
|
+
return yA = b(yA), yA;
|
|
189
|
+
}, FA = function(g, i, n, d) {
|
|
190
|
+
var Y = !n || n.every((N) => N === "number" || N === "boolean"), M = i !== "string";
|
|
191
|
+
return M && Y && !d ? CA(g) : function() {
|
|
192
|
+
return sA(g, i, n, arguments);
|
|
193
|
+
};
|
|
194
|
+
}, q = { b: _, a: $ }, QA = W();
|
|
195
|
+
QA.d, A._kiss_fft_free = QA.e, A._free = QA.f, A._kiss_fft_alloc = QA.g, A._malloc = QA.h, A._kiss_fft = QA.i, QA.__errno_location;
|
|
196
|
+
var RA = QA.k, nA = QA.l, DA = QA.m;
|
|
197
|
+
function cA(g) {
|
|
198
|
+
try {
|
|
199
|
+
for (var i = atob(g), n = new Uint8Array(i.length), d = 0; d < i.length; ++d)
|
|
200
|
+
n[d] = i.charCodeAt(d);
|
|
201
|
+
return n;
|
|
202
|
+
} catch {
|
|
203
|
+
throw new Error("Converting base64 string to bytes failed.");
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function aA(g) {
|
|
207
|
+
if (m(g))
|
|
208
|
+
return cA(g.slice(u.length));
|
|
209
|
+
}
|
|
210
|
+
A.ccall = sA, A.cwrap = FA;
|
|
211
|
+
var hA;
|
|
212
|
+
S = function g() {
|
|
213
|
+
hA || C(), hA || (S = g);
|
|
214
|
+
};
|
|
215
|
+
function C() {
|
|
216
|
+
if (k > 0 || (y(), k > 0))
|
|
217
|
+
return;
|
|
218
|
+
function g() {
|
|
219
|
+
hA || (hA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
|
|
220
|
+
}
|
|
221
|
+
A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
|
|
222
|
+
setTimeout(function() {
|
|
223
|
+
A.setStatus("");
|
|
224
|
+
}, 1), g();
|
|
225
|
+
}, 1)) : g();
|
|
226
|
+
}
|
|
227
|
+
if (A.preInit)
|
|
228
|
+
for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
|
|
229
|
+
A.preInit.pop()();
|
|
230
|
+
return C(), I;
|
|
231
|
+
});
|
|
232
|
+
})(), MA = pA({}), uA = MA.cwrap("kiss_fft_alloc", "number", [
|
|
233
|
+
"number",
|
|
234
|
+
"number",
|
|
235
|
+
"number",
|
|
236
|
+
"number"
|
|
237
|
+
]), PA = MA.cwrap("kiss_fft", "void", [
|
|
238
|
+
"number",
|
|
239
|
+
"number",
|
|
240
|
+
"number"
|
|
241
|
+
]), JA = MA.cwrap("kiss_fft_free", "void", ["number"]);
|
|
242
|
+
class xA {
|
|
243
|
+
constructor(I) {
|
|
244
|
+
this.size = I, this.fcfg = uA(this.size, !1), this.icfg = uA(this.size, !0), this.inptr = MA._malloc(this.size * 8), this.cin = new Float32Array(
|
|
245
|
+
MA.HEAPU8.buffer,
|
|
246
|
+
this.inptr,
|
|
247
|
+
this.size * 2
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
fft = function(I) {
|
|
251
|
+
const A = MA._malloc(this.size * 8), r = new Float32Array(
|
|
252
|
+
MA.HEAPU8.buffer,
|
|
253
|
+
A,
|
|
254
|
+
this.size * 2
|
|
255
|
+
);
|
|
256
|
+
this.cin.set(I), PA(this.fcfg, this.inptr, A);
|
|
257
|
+
let E = new Float32Array(this.size * 2);
|
|
258
|
+
return E.set(r), MA._free(A), E;
|
|
259
|
+
};
|
|
260
|
+
dispose() {
|
|
261
|
+
JA(this.fcfg), JA(this.icfg), MA._free(this.inptr);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function fA(o) {
|
|
265
|
+
if (this.size = o | 0, this.size <= 1 || (this.size & this.size - 1) !== 0)
|
|
266
|
+
throw new Error("FFT size must be a power of two and bigger than 1");
|
|
267
|
+
this._csize = o << 1;
|
|
268
|
+
for (var I = new Array(this.size * 2), A = 0; A < I.length; A += 2) {
|
|
269
|
+
const a = Math.PI * A / this.size;
|
|
270
|
+
I[A] = Math.cos(a), I[A + 1] = -Math.sin(a);
|
|
271
|
+
}
|
|
272
|
+
this.table = I;
|
|
273
|
+
for (var r = 0, E = 1; this.size > E; E <<= 1) r++;
|
|
274
|
+
this._width = r % 2 === 0 ? r - 1 : r, this._bitrev = new Array(1 << this._width);
|
|
275
|
+
for (var B = 0; B < this._bitrev.length; B++) {
|
|
276
|
+
this._bitrev[B] = 0;
|
|
277
|
+
for (var Q = 0; Q < this._width; Q += 2) {
|
|
278
|
+
var e = this._width - Q - 2;
|
|
279
|
+
this._bitrev[B] |= (B >>> Q & 3) << e;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
this._out = null, this._data = null, this._inv = 0;
|
|
283
|
+
}
|
|
284
|
+
fA.prototype.fromComplexArray = function(I, A) {
|
|
285
|
+
for (var r = A || new Array(I.length >>> 1), E = 0; E < I.length; E += 2) r[E >>> 1] = I[E];
|
|
286
|
+
return r;
|
|
287
|
+
};
|
|
288
|
+
fA.prototype.createComplexArray = function() {
|
|
289
|
+
const I = new Array(this._csize);
|
|
290
|
+
for (var A = 0; A < I.length; A++) I[A] = 0;
|
|
291
|
+
return I;
|
|
292
|
+
};
|
|
293
|
+
fA.prototype.toComplexArray = function(I, A) {
|
|
294
|
+
for (var r = A || this.createComplexArray(), E = 0; E < r.length; E += 2)
|
|
295
|
+
r[E] = I[E >>> 1], r[E + 1] = 0;
|
|
296
|
+
return r;
|
|
297
|
+
};
|
|
298
|
+
fA.prototype.completeSpectrum = function(I) {
|
|
299
|
+
for (var A = this._csize, r = A >>> 1, E = 2; E < r; E += 2)
|
|
300
|
+
I[A - E] = I[E], I[A - E + 1] = -I[E + 1];
|
|
301
|
+
};
|
|
302
|
+
fA.prototype.transform = function(I, A) {
|
|
303
|
+
if (I === A) throw new Error("Input and output buffers must be different");
|
|
304
|
+
this._out = I, this._data = A, this._inv = 0, this._transform4(), this._out = null, this._data = null;
|
|
305
|
+
};
|
|
306
|
+
fA.prototype.realTransform = function(I, A) {
|
|
307
|
+
if (I === A) throw new Error("Input and output buffers must be different");
|
|
308
|
+
this._out = I, this._data = A, this._inv = 0, this._realTransform4(), this._out = null, this._data = null;
|
|
309
|
+
};
|
|
310
|
+
fA.prototype.inverseTransform = function(I, A) {
|
|
311
|
+
if (I === A) throw new Error("Input and output buffers must be different");
|
|
312
|
+
this._out = I, this._data = A, this._inv = 1, this._transform4();
|
|
313
|
+
for (var r = 0; r < I.length; r++) I[r] /= this.size;
|
|
314
|
+
this._out = null, this._data = null;
|
|
315
|
+
};
|
|
316
|
+
fA.prototype._transform4 = function() {
|
|
317
|
+
var I = this._out, A = this._csize, r = this._width, E = 1 << r, B = A / E << 1, Q, e, a = this._bitrev;
|
|
318
|
+
if (B === 4)
|
|
319
|
+
for (Q = 0, e = 0; Q < A; Q += B, e++) {
|
|
320
|
+
const c = a[e];
|
|
321
|
+
this._singleTransform2(Q, c, E);
|
|
322
|
+
}
|
|
323
|
+
else
|
|
324
|
+
for (Q = 0, e = 0; Q < A; Q += B, e++) {
|
|
325
|
+
const c = a[e];
|
|
326
|
+
this._singleTransform4(Q, c, E);
|
|
327
|
+
}
|
|
328
|
+
var t = this._inv ? -1 : 1, w = this.table;
|
|
329
|
+
for (E >>= 2; E >= 2; E >>= 2) {
|
|
330
|
+
B = A / E << 1;
|
|
331
|
+
var F = B >>> 2;
|
|
332
|
+
for (Q = 0; Q < A; Q += B)
|
|
333
|
+
for (var h = Q + F, D = Q, s = 0; D < h; D += 2, s += E) {
|
|
334
|
+
const c = D, l = c + F, R = l + F, f = R + F, y = I[c], G = I[c + 1], H = I[l], J = I[l + 1], p = I[R], P = I[R + 1], k = I[f], S = I[f + 1], T = y, K = G, L = w[s], u = t * w[s + 1], m = H * L - J * u, U = H * u + J * L, x = w[2 * s], Z = t * w[2 * s + 1], W = p * x - P * Z, O = p * Z + P * x, _ = w[3 * s], AA = t * w[3 * s + 1], $ = k * _ - S * AA, CA = k * AA + S * _, EA = T + W, iA = K + O, IA = T - W, BA = K - O, gA = m + $, oA = U + CA, eA = t * (m - $), rA = t * (U - CA), sA = EA + gA, FA = iA + oA, q = EA - gA, QA = iA - oA, RA = IA + rA, nA = BA - eA, DA = IA - rA, cA = BA + eA;
|
|
335
|
+
I[c] = sA, I[c + 1] = FA, I[l] = RA, I[l + 1] = nA, I[R] = q, I[R + 1] = QA, I[f] = DA, I[f + 1] = cA;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
fA.prototype._singleTransform2 = function(I, A, r) {
|
|
340
|
+
const E = this._out, B = this._data, Q = B[A], e = B[A + 1], a = B[A + r], t = B[A + r + 1], w = Q + a, F = e + t, h = Q - a, D = e - t;
|
|
341
|
+
E[I] = w, E[I + 1] = F, E[I + 2] = h, E[I + 3] = D;
|
|
342
|
+
};
|
|
343
|
+
fA.prototype._singleTransform4 = function(I, A, r) {
|
|
344
|
+
const E = this._out, B = this._data, Q = this._inv ? -1 : 1, e = r * 2, a = r * 3, t = B[A], w = B[A + 1], F = B[A + r], h = B[A + r + 1], D = B[A + e], s = B[A + e + 1], c = B[A + a], l = B[A + a + 1], R = t + D, f = w + s, y = t - D, G = w - s, H = F + c, J = h + l, p = Q * (F - c), P = Q * (h - l), k = R + H, S = f + J, T = y + P, K = G - p, L = R - H, u = f - J, m = y - P, U = G + p;
|
|
345
|
+
E[I] = k, E[I + 1] = S, E[I + 2] = T, E[I + 3] = K, E[I + 4] = L, E[I + 5] = u, E[I + 6] = m, E[I + 7] = U;
|
|
346
|
+
};
|
|
347
|
+
fA.prototype._realTransform4 = function() {
|
|
348
|
+
var I = this._out, A = this._csize, r = this._width, E = 1 << r, B = A / E << 1, Q, e, a = this._bitrev;
|
|
349
|
+
if (B === 4)
|
|
350
|
+
for (Q = 0, e = 0; Q < A; Q += B, e++) {
|
|
351
|
+
const tA = a[e];
|
|
352
|
+
this._singleRealTransform2(Q, tA >>> 1, E >>> 1);
|
|
353
|
+
}
|
|
354
|
+
else
|
|
355
|
+
for (Q = 0, e = 0; Q < A; Q += B, e++) {
|
|
356
|
+
const tA = a[e];
|
|
357
|
+
this._singleRealTransform4(Q, tA >>> 1, E >>> 1);
|
|
358
|
+
}
|
|
359
|
+
var t = this._inv ? -1 : 1, w = this.table;
|
|
360
|
+
for (E >>= 2; E >= 2; E >>= 2) {
|
|
361
|
+
B = A / E << 1;
|
|
362
|
+
var F = B >>> 1, h = F >>> 1, D = h >>> 1;
|
|
363
|
+
for (Q = 0; Q < A; Q += B)
|
|
364
|
+
for (var s = 0, c = 0; s <= D; s += 2, c += E) {
|
|
365
|
+
var l = Q + s, R = l + h, f = R + h, y = f + h, G = I[l], H = I[l + 1], J = I[R], p = I[R + 1], P = I[f], k = I[f + 1], S = I[y], T = I[y + 1], K = G, L = H, u = w[c], m = t * w[c + 1], U = J * u - p * m, x = J * m + p * u, Z = w[2 * c], W = t * w[2 * c + 1], O = P * Z - k * W, _ = P * W + k * Z, AA = w[3 * c], $ = t * w[3 * c + 1], CA = S * AA - T * $, EA = S * $ + T * AA, iA = K + O, IA = L + _, BA = K - O, gA = L - _, oA = U + CA, eA = x + EA, rA = t * (U - CA), sA = t * (x - EA), FA = iA + oA, q = IA + eA, QA = BA + sA, RA = gA - rA;
|
|
366
|
+
if (I[l] = FA, I[l + 1] = q, I[R] = QA, I[R + 1] = RA, s === 0) {
|
|
367
|
+
var nA = iA - oA, DA = IA - eA;
|
|
368
|
+
I[f] = nA, I[f + 1] = DA;
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
if (s !== D) {
|
|
372
|
+
var cA = BA, aA = -gA, hA = iA, C = -IA, g = -t * sA, i = -t * rA, n = -t * eA, d = -t * oA, Y = cA + g, M = aA + i, N = hA + d, v = C - n, V = Q + h - s, j = Q + F - s;
|
|
373
|
+
I[V] = Y, I[V + 1] = M, I[j] = N, I[j + 1] = v;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
fA.prototype._singleRealTransform2 = function(I, A, r) {
|
|
379
|
+
const E = this._out, B = this._data, Q = B[A], e = B[A + r], a = Q + e, t = Q - e;
|
|
380
|
+
E[I] = a, E[I + 1] = 0, E[I + 2] = t, E[I + 3] = 0;
|
|
381
|
+
};
|
|
382
|
+
fA.prototype._singleRealTransform4 = function(I, A, r) {
|
|
383
|
+
const E = this._out, B = this._data, Q = this._inv ? -1 : 1, e = r * 2, a = r * 3, t = B[A], w = B[A + r], F = B[A + e], h = B[A + a], D = t + F, s = t - F, c = w + h, l = Q * (w - h), R = D + c, f = s, y = -l, G = D - c, H = s, J = l;
|
|
384
|
+
E[I] = R, E[I + 1] = 0, E[I + 2] = f, E[I + 3] = y, E[I + 4] = G, E[I + 5] = 0, E[I + 6] = H, E[I + 7] = J;
|
|
385
|
+
};
|
|
386
|
+
class LA {
|
|
387
|
+
constructor(I) {
|
|
388
|
+
this.size = I, this.indutnyFft = new fA(I);
|
|
389
|
+
}
|
|
390
|
+
fft(I) {
|
|
391
|
+
const A = new Float32Array(2 * this.size);
|
|
392
|
+
return this.indutnyFft.transform(A, I), A;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
var WA = (() => {
|
|
396
|
+
var o = import.meta.url;
|
|
397
|
+
return (function(I = {}) {
|
|
398
|
+
var A = I, r, E;
|
|
399
|
+
A.ready = new Promise((C, g) => {
|
|
400
|
+
r = C, E = g;
|
|
401
|
+
});
|
|
402
|
+
var B = Object.assign({}, A), Q = "";
|
|
403
|
+
function e(C) {
|
|
404
|
+
return A.locateFile ? A.locateFile(C, Q) : Q + C;
|
|
405
|
+
}
|
|
406
|
+
typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
|
|
407
|
+
var a = A.printErr || console.error.bind(console);
|
|
408
|
+
Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
|
|
409
|
+
var t;
|
|
410
|
+
A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
|
|
411
|
+
var w, F, h = !1, D, s;
|
|
412
|
+
function c() {
|
|
413
|
+
var C = w.buffer;
|
|
414
|
+
A.HEAP8 = D = new Int8Array(C), A.HEAP16 = new Int16Array(C), A.HEAP32 = new Int32Array(C), A.HEAPU8 = s = new Uint8Array(C), A.HEAPU16 = new Uint16Array(C), A.HEAPU32 = new Uint32Array(C), A.HEAPF32 = new Float32Array(C), A.HEAPF64 = new Float64Array(C);
|
|
415
|
+
}
|
|
416
|
+
var l = [], R = [], f = [];
|
|
417
|
+
function y() {
|
|
418
|
+
if (A.preRun)
|
|
419
|
+
for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
|
|
420
|
+
J(A.preRun.shift());
|
|
421
|
+
O(l);
|
|
422
|
+
}
|
|
423
|
+
function G() {
|
|
424
|
+
O(R);
|
|
425
|
+
}
|
|
426
|
+
function H() {
|
|
427
|
+
if (A.postRun)
|
|
428
|
+
for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
|
|
429
|
+
P(A.postRun.shift());
|
|
430
|
+
O(f);
|
|
431
|
+
}
|
|
432
|
+
function J(C) {
|
|
433
|
+
l.unshift(C);
|
|
434
|
+
}
|
|
435
|
+
function p(C) {
|
|
436
|
+
R.unshift(C);
|
|
437
|
+
}
|
|
438
|
+
function P(C) {
|
|
439
|
+
f.unshift(C);
|
|
440
|
+
}
|
|
441
|
+
var k = 0, S = null;
|
|
442
|
+
function T(C) {
|
|
443
|
+
k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
|
|
444
|
+
}
|
|
445
|
+
function K(C) {
|
|
446
|
+
if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
|
|
447
|
+
var g = S;
|
|
448
|
+
S = null, g();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
function L(C) {
|
|
452
|
+
A.onAbort && A.onAbort(C), C = "Aborted(" + C + ")", a(C), h = !0, C += ". Build with -sASSERTIONS for more info.";
|
|
453
|
+
var g = new WebAssembly.RuntimeError(C);
|
|
454
|
+
throw E(g), g;
|
|
455
|
+
}
|
|
456
|
+
var u = "data:application/octet-stream;base64,";
|
|
457
|
+
function m(C) {
|
|
458
|
+
return C.startsWith(u);
|
|
459
|
+
}
|
|
460
|
+
var U;
|
|
461
|
+
U = "data:application/octet-stream;base64,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ACACSwRAQbgeIAI2AgALIAIgBmohAUHoISEAAkACQAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAALQAMQQhxRQ0BC0HoISEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxaiIHIAVBA3I2AgQgAUF4IAFrQQdxaiIGIAUgB2oiBWshACADIAZGBEBBwB4gBTYCAEG0HkG0HigCACAAaiIANgIAIAUgAEEBcjYCBAwIC0G8HigCACAGRgRAQbweIAU2AgBBsB5BsB4oAgAgAGoiADYCACAFIABBAXI2AgQgACAFaiAANgIADAgLIAYoAgQiA0EDcUEBRw0GIANBeHEhCSADQf8BTQRAIAYoAgwiASAGKAIIIgJGBEBBqB5BqB4oAgBBfiADQQN2d3E2AgAMBwsgAiABNgIMIAEgAjYCCAwGCyAGKAIYIQggBiAGKAIMIgJHBEAgBigCCCIBIAI2AgwgAiABNgIIDAULIAZBFGoiASgCACIDRQRAIAYoAhAiA0UNBCAGQRBqIQELA0AgASEEIAMiAkEUaiIBKAIAIgMNACACQRBqIQEgAigCECIDDQALIARBADYCAAwEC0G0HiAGQShrIgBBeCACa0EHcSIBayIINgIAQcAeIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQcQeQZAiKAIANgIAIAMgBEEnIARrQQdxakEvayIAIAAgA0EQakkbIgFBGzYCBCABQfAhKQIANwIQIAFB6CEpAgA3AghB8CEgAUEIajYCAEHsISAGNgIAQeghIAI2AgBB9CFBADYCACABQRhqIQADQCAAQQc2AgQgAEEIaiECIABBBGohACACIARJDQALIAEgA0YNACABIAEoAgRBfnE2AgQgAyABIANrIgJBAXI2AgQgASACNgIAIAJB/wFNBEAgAkF4cUHQHmohAAJ/QageKAIAIgFBASACQQN2dCICcUUEQEGoHiABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMIAMgADYCDCADIAE2AggMAQtBHyEAIAJB////B00EQCACQSYgAkEIdmciAGt2QQFxIABBAXRrQT5qIQALIAMgADYCHCADQgA3AhAgAEECdEHY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", m(U) || (U = e(U));
|
|
462
|
+
function x(C) {
|
|
463
|
+
if (C == U && t)
|
|
464
|
+
return new Uint8Array(t);
|
|
465
|
+
var g = cA(C);
|
|
466
|
+
if (g)
|
|
467
|
+
return g;
|
|
468
|
+
throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
|
|
469
|
+
}
|
|
470
|
+
function Z(C, g) {
|
|
471
|
+
var i, n = x(C);
|
|
472
|
+
i = new WebAssembly.Module(n);
|
|
473
|
+
var d = new WebAssembly.Instance(i, g);
|
|
474
|
+
return [d, i];
|
|
475
|
+
}
|
|
476
|
+
function W() {
|
|
477
|
+
var C = { a: FA };
|
|
478
|
+
function g(n, d) {
|
|
479
|
+
var Y = n.exports;
|
|
480
|
+
return F = Y, w = F.b, c(), F.e, p(F.c), K(), Y;
|
|
481
|
+
}
|
|
482
|
+
if (T(), A.instantiateWasm)
|
|
483
|
+
try {
|
|
484
|
+
return A.instantiateWasm(C, g);
|
|
485
|
+
} catch (n) {
|
|
486
|
+
a("Module.instantiateWasm callback failed with error: " + n), E(n);
|
|
487
|
+
}
|
|
488
|
+
var i = Z(U, C);
|
|
489
|
+
return g(i[0]);
|
|
490
|
+
}
|
|
491
|
+
var O = (C) => {
|
|
492
|
+
for (; C.length > 0; )
|
|
493
|
+
C.shift()(A);
|
|
494
|
+
}, _ = (C) => {
|
|
495
|
+
L("OOM");
|
|
496
|
+
}, AA = (C) => {
|
|
497
|
+
s.length, _();
|
|
498
|
+
};
|
|
499
|
+
function $(C) {
|
|
500
|
+
var g = A["_" + C];
|
|
501
|
+
return g;
|
|
502
|
+
}
|
|
503
|
+
var CA = (C, g) => {
|
|
504
|
+
D.set(C, g);
|
|
505
|
+
}, EA = (C) => {
|
|
506
|
+
for (var g = 0, i = 0; i < C.length; ++i) {
|
|
507
|
+
var n = C.charCodeAt(i);
|
|
508
|
+
n <= 127 ? g++ : n <= 2047 ? g += 2 : n >= 55296 && n <= 57343 ? (g += 4, ++i) : g += 3;
|
|
509
|
+
}
|
|
510
|
+
return g;
|
|
511
|
+
}, iA = (C, g, i, n) => {
|
|
512
|
+
if (!(n > 0)) return 0;
|
|
513
|
+
for (var d = i, Y = i + n - 1, M = 0; M < C.length; ++M) {
|
|
514
|
+
var N = C.charCodeAt(M);
|
|
515
|
+
if (N >= 55296 && N <= 57343) {
|
|
516
|
+
var v = C.charCodeAt(++M);
|
|
517
|
+
N = 65536 + ((N & 1023) << 10) | v & 1023;
|
|
518
|
+
}
|
|
519
|
+
if (N <= 127) {
|
|
520
|
+
if (i >= Y) break;
|
|
521
|
+
g[i++] = N;
|
|
522
|
+
} else if (N <= 2047) {
|
|
523
|
+
if (i + 1 >= Y) break;
|
|
524
|
+
g[i++] = 192 | N >> 6, g[i++] = 128 | N & 63;
|
|
525
|
+
} else if (N <= 65535) {
|
|
526
|
+
if (i + 2 >= Y) break;
|
|
527
|
+
g[i++] = 224 | N >> 12, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
|
|
528
|
+
} else {
|
|
529
|
+
if (i + 3 >= Y) break;
|
|
530
|
+
g[i++] = 240 | N >> 18, g[i++] = 128 | N >> 12 & 63, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return g[i] = 0, i - d;
|
|
534
|
+
}, IA = (C, g, i) => iA(C, s, g, i), BA = (C) => {
|
|
535
|
+
var g = EA(C) + 1, i = nA(g);
|
|
536
|
+
return IA(C, i, g), i;
|
|
537
|
+
}, gA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, oA = (C, g, i) => {
|
|
538
|
+
for (var n = g + i, d = g; C[d] && !(d >= n); ) ++d;
|
|
539
|
+
if (d - g > 16 && C.buffer && gA)
|
|
540
|
+
return gA.decode(C.subarray(g, d));
|
|
541
|
+
for (var Y = ""; g < d; ) {
|
|
542
|
+
var M = C[g++];
|
|
543
|
+
if (!(M & 128)) {
|
|
544
|
+
Y += String.fromCharCode(M);
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
var N = C[g++] & 63;
|
|
548
|
+
if ((M & 224) == 192) {
|
|
549
|
+
Y += String.fromCharCode((M & 31) << 6 | N);
|
|
550
|
+
continue;
|
|
551
|
+
}
|
|
552
|
+
var v = C[g++] & 63;
|
|
553
|
+
if ((M & 240) == 224 ? M = (M & 15) << 12 | N << 6 | v : M = (M & 7) << 18 | N << 12 | v << 6 | C[g++] & 63, M < 65536)
|
|
554
|
+
Y += String.fromCharCode(M);
|
|
555
|
+
else {
|
|
556
|
+
var V = M - 65536;
|
|
557
|
+
Y += String.fromCharCode(55296 | V >> 10, 56320 | V & 1023);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return Y;
|
|
561
|
+
}, eA = (C, g) => C ? oA(s, C, g) : "", rA = function(C, g, i, n, d) {
|
|
562
|
+
var Y = { string: (b) => {
|
|
563
|
+
var z = 0;
|
|
564
|
+
return b != null && b !== 0 && (z = BA(b)), z;
|
|
565
|
+
}, array: (b) => {
|
|
566
|
+
var z = nA(b.length);
|
|
567
|
+
return CA(b, z), z;
|
|
568
|
+
} };
|
|
569
|
+
function M(b) {
|
|
570
|
+
return g === "string" ? eA(b) : g === "boolean" ? !!b : b;
|
|
571
|
+
}
|
|
572
|
+
var N = $(C), v = [], V = 0;
|
|
573
|
+
if (n)
|
|
574
|
+
for (var j = 0; j < n.length; j++) {
|
|
575
|
+
var tA = Y[i[j]];
|
|
576
|
+
tA ? (V === 0 && (V = QA()), v[j] = tA(n[j])) : v[j] = n[j];
|
|
577
|
+
}
|
|
578
|
+
var wA = N.apply(null, v);
|
|
579
|
+
function yA(b) {
|
|
580
|
+
return V !== 0 && RA(V), M(b);
|
|
581
|
+
}
|
|
582
|
+
return wA = yA(wA), wA;
|
|
583
|
+
}, sA = function(C, g, i, n) {
|
|
584
|
+
var d = !i || i.every((M) => M === "number" || M === "boolean"), Y = g !== "string";
|
|
585
|
+
return Y && d && !n ? $(C) : function() {
|
|
586
|
+
return rA(C, g, i, arguments);
|
|
587
|
+
};
|
|
588
|
+
}, FA = { a: AA }, q = W();
|
|
589
|
+
q.c, A._fftCross = q.d, q.__errno_location, A._malloc = q.f, A._free = q.g;
|
|
590
|
+
var QA = q.h, RA = q.i, nA = q.j;
|
|
591
|
+
function DA(C) {
|
|
592
|
+
try {
|
|
593
|
+
for (var g = atob(C), i = new Uint8Array(g.length), n = 0; n < g.length; ++n)
|
|
594
|
+
i[n] = g.charCodeAt(n);
|
|
595
|
+
return i;
|
|
596
|
+
} catch {
|
|
597
|
+
throw new Error("Converting base64 string to bytes failed.");
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
function cA(C) {
|
|
601
|
+
if (m(C))
|
|
602
|
+
return DA(C.slice(u.length));
|
|
603
|
+
}
|
|
604
|
+
A.ccall = rA, A.cwrap = sA;
|
|
605
|
+
var aA;
|
|
606
|
+
S = function C() {
|
|
607
|
+
aA || hA(), aA || (S = C);
|
|
608
|
+
};
|
|
609
|
+
function hA() {
|
|
610
|
+
if (k > 0 || (y(), k > 0))
|
|
611
|
+
return;
|
|
612
|
+
function C() {
|
|
613
|
+
aA || (aA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
|
|
614
|
+
}
|
|
615
|
+
A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
|
|
616
|
+
setTimeout(function() {
|
|
617
|
+
A.setStatus("");
|
|
618
|
+
}, 1), C();
|
|
619
|
+
}, 1)) : C();
|
|
620
|
+
}
|
|
621
|
+
if (A.preInit)
|
|
622
|
+
for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
|
|
623
|
+
A.preInit.pop()();
|
|
624
|
+
return hA(), I;
|
|
625
|
+
});
|
|
626
|
+
})(), dA = WA({}), VA = dA.cwrap("fftCross", "void", [
|
|
627
|
+
"number",
|
|
628
|
+
"number",
|
|
629
|
+
"number",
|
|
630
|
+
"number",
|
|
631
|
+
"number",
|
|
632
|
+
"number"
|
|
633
|
+
]);
|
|
634
|
+
function jA(o) {
|
|
635
|
+
this.size = o, this.n = o * 8, this.ptr = dA._malloc(this.n * 4), this.ri = new Uint8Array(dA.HEAPU8.buffer, this.ptr, this.n), this.ii = new Uint8Array(
|
|
636
|
+
dA.HEAPU8.buffer,
|
|
637
|
+
this.ptr + this.n,
|
|
638
|
+
this.n
|
|
639
|
+
), this.transform = function(I, A, r) {
|
|
640
|
+
var E = this.ptr, B = this.n;
|
|
641
|
+
this.ri.set(new Uint8Array(I.buffer)), this.ii.set(new Uint8Array(A.buffer)), VA(this.size, r, E, E + B, E + B * 2, E + B * 3);
|
|
642
|
+
var Q = new Float64Array(
|
|
643
|
+
dA.HEAPU8.buffer,
|
|
644
|
+
E + B * 2,
|
|
645
|
+
this.size
|
|
646
|
+
), e = new Float64Array(
|
|
647
|
+
dA.HEAPU8.buffer,
|
|
648
|
+
E + B * 3,
|
|
649
|
+
this.size
|
|
650
|
+
);
|
|
651
|
+
return { real: Q, imag: e };
|
|
652
|
+
}, this.dispose = function() {
|
|
653
|
+
dA._free(this.ptr);
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
class XA {
|
|
657
|
+
constructor(I) {
|
|
658
|
+
this.size = I, this.fftcross = new jA(I), this.real = new Float64Array(this.size), this.imag = new Float64Array(this.size);
|
|
659
|
+
}
|
|
660
|
+
fft(I) {
|
|
661
|
+
for (var A = 0; A < this.size; A++)
|
|
662
|
+
this.real[A] = I[2 * A], this.imag[A] = I[2 * A + 1];
|
|
663
|
+
const r = this.fftcross.transform(this.real, this.imag, !1), E = new Float32Array(2 * this.size);
|
|
664
|
+
for (var A = 0; A < this.size; A++)
|
|
665
|
+
E[2 * A] = r.real[A], E[2 * A + 1] = r.imag[A];
|
|
666
|
+
return E;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
function ZA(o) {
|
|
670
|
+
this.n = o, this.levels = -1;
|
|
671
|
+
for (var I = 0; I < 32; I++)
|
|
672
|
+
1 << I == o && (this.levels = I);
|
|
673
|
+
if (this.levels == -1)
|
|
674
|
+
throw "Length is not a power of 2";
|
|
675
|
+
this.cosTable = new Array(o / 2), this.sinTable = new Array(o / 2);
|
|
676
|
+
for (var I = 0; I < o / 2; I++)
|
|
677
|
+
this.cosTable[I] = Math.cos(2 * Math.PI * I / o), this.sinTable[I] = Math.sin(2 * Math.PI * I / o);
|
|
678
|
+
this.forward = function(A, r) {
|
|
679
|
+
for (var E = this.n, B = 0; B < E; B++) {
|
|
680
|
+
var Q = s(B, this.levels);
|
|
681
|
+
if (Q > B) {
|
|
682
|
+
var e = A[B];
|
|
683
|
+
A[B] = A[Q], A[Q] = e, e = r[B], r[B] = r[Q], r[Q] = e;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
for (var a = 2; a <= E; a *= 2)
|
|
687
|
+
for (var t = a / 2, w = E / a, B = 0; B < E; B += a)
|
|
688
|
+
for (var Q = B, F = 0; Q < B + t; Q++, F += w) {
|
|
689
|
+
var h = A[Q + t] * this.cosTable[F] + r[Q + t] * this.sinTable[F], D = -A[Q + t] * this.sinTable[F] + r[Q + t] * this.cosTable[F];
|
|
690
|
+
A[Q + t] = A[Q] - h, r[Q + t] = r[Q] - D, A[Q] += h, r[Q] += D;
|
|
691
|
+
}
|
|
692
|
+
function s(c, l) {
|
|
693
|
+
for (var R = 0, f = 0; f < l; f++)
|
|
694
|
+
R = R << 1 | c & 1, c >>>= 1;
|
|
695
|
+
return R;
|
|
696
|
+
}
|
|
697
|
+
}, this.inverse = function(A, r) {
|
|
698
|
+
forward(r, A);
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
class OA {
|
|
702
|
+
constructor(I) {
|
|
703
|
+
this.size = I, this.fftNayuki = new ZA(I);
|
|
704
|
+
}
|
|
705
|
+
fft(I) {
|
|
706
|
+
const A = new Float32Array(this.size), r = new Float32Array(this.size), E = new Float32Array(this.size * 2);
|
|
707
|
+
for (var B = 0; B < this.size; ++B)
|
|
708
|
+
A[B] = I[B * 2], r[B] = I[B * 2 + 1];
|
|
709
|
+
this.fftNayuki.forward(A, r);
|
|
710
|
+
for (var B = 0; B < this.size; ++B)
|
|
711
|
+
E[B * 2] = A[B], E[B * 2 + 1] = r[B];
|
|
712
|
+
return E;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
var zA = (() => {
|
|
716
|
+
var o = import.meta.url;
|
|
717
|
+
return (function(I = {}) {
|
|
718
|
+
var A = I, r, E;
|
|
719
|
+
A.ready = new Promise((C, g) => {
|
|
720
|
+
r = C, E = g;
|
|
721
|
+
});
|
|
722
|
+
var B = Object.assign({}, A), Q = "";
|
|
723
|
+
function e(C) {
|
|
724
|
+
return A.locateFile ? A.locateFile(C, Q) : Q + C;
|
|
725
|
+
}
|
|
726
|
+
typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
|
|
727
|
+
var a = A.printErr || console.error.bind(console);
|
|
728
|
+
Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
|
|
729
|
+
var t;
|
|
730
|
+
A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
|
|
731
|
+
var w, F, h = !1, D, s;
|
|
732
|
+
function c() {
|
|
733
|
+
var C = w.buffer;
|
|
734
|
+
A.HEAP8 = D = new Int8Array(C), A.HEAP16 = new Int16Array(C), A.HEAP32 = new Int32Array(C), A.HEAPU8 = s = new Uint8Array(C), A.HEAPU16 = new Uint16Array(C), A.HEAPU32 = new Uint32Array(C), A.HEAPF32 = new Float32Array(C), A.HEAPF64 = new Float64Array(C);
|
|
735
|
+
}
|
|
736
|
+
var l = [], R = [], f = [];
|
|
737
|
+
function y() {
|
|
738
|
+
if (A.preRun)
|
|
739
|
+
for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
|
|
740
|
+
J(A.preRun.shift());
|
|
741
|
+
O(l);
|
|
742
|
+
}
|
|
743
|
+
function G() {
|
|
744
|
+
O(R);
|
|
745
|
+
}
|
|
746
|
+
function H() {
|
|
747
|
+
if (A.postRun)
|
|
748
|
+
for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
|
|
749
|
+
P(A.postRun.shift());
|
|
750
|
+
O(f);
|
|
751
|
+
}
|
|
752
|
+
function J(C) {
|
|
753
|
+
l.unshift(C);
|
|
754
|
+
}
|
|
755
|
+
function p(C) {
|
|
756
|
+
R.unshift(C);
|
|
757
|
+
}
|
|
758
|
+
function P(C) {
|
|
759
|
+
f.unshift(C);
|
|
760
|
+
}
|
|
761
|
+
var k = 0, S = null;
|
|
762
|
+
function T(C) {
|
|
763
|
+
k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
|
|
764
|
+
}
|
|
765
|
+
function K(C) {
|
|
766
|
+
if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
|
|
767
|
+
var g = S;
|
|
768
|
+
S = null, g();
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
function L(C) {
|
|
772
|
+
A.onAbort && A.onAbort(C), C = "Aborted(" + C + ")", a(C), h = !0, C += ". Build with -sASSERTIONS for more info.";
|
|
773
|
+
var g = new WebAssembly.RuntimeError(C);
|
|
774
|
+
throw E(g), g;
|
|
775
|
+
}
|
|
776
|
+
var u = "data:application/octet-stream;base64,";
|
|
777
|
+
function m(C) {
|
|
778
|
+
return C.startsWith(u);
|
|
779
|
+
}
|
|
780
|
+
var U;
|
|
781
|
+
U = "data:application/octet-stream;base64,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IgMNACACQRBqIQEgAigCECIDDQALIARBADYCAAwEC0G0HiAGQShrIgBBeCACa0EHcSIBayIINgIAQcAeIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQcQeQZAiKAIANgIAIAMgBEEnIARrQQdxakEvayIAIAAgA0EQakkbIgFBGzYCBCABQfAhKQIANwIQIAFB6CEpAgA3AghB8CEgAUEIajYCAEHsISAGNgIAQeghIAI2AgBB9CFBADYCACABQRhqIQADQCAAQQc2AgQgAEEIaiECIABBBGohACACIARJDQALIAEgA0YNACABIAEoAgRBfnE2AgQgAyABIANrIgJBAXI2AgQgASACNgIAIAJB/wFNBEAgAkF4cUHQHmohAAJ/QageKAIAIgFBASACQQN2dCICcUUEQEGoHiABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMIAMgADYCDCADIAE2AggMAQtBHyEAIAJB////B00EQCACQSYgAkEIdmciAGt2QQFxIABBAXRrQT5qIQALIAMgADYCHCADQgA3AhAgAEECdEHYIGohAQJAAkBBrB4oAgAiBEEBIAB0IgZxRQRAQaweIAQgBnI2AgAgASADNgIADAELIAJBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhBANAIAQiASgCBEF4cSACRg0CIABBHXYhBCAAQQF0IQAgASAEQQRxaiIGKAIQIgQNAAsgBiADNgIQCyADIAE2AhggAyADNgIMIAMgAzYCCAwBCyABKAIIIgAgAzYCDCABIAM2AgggA0EANgIYIAMgATYCDCADIAA2AggLQbQeKAIAIgAgBU0NAEG0HiAAIAVrIgE2AgBBwB5BwB4oAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAgLQaQeQTA2AgBBACEADAcLQQAhAgsgCEUNAAJAIAYoAhwiAUECdEHYIGoiBCgCACAGRgRAIAQgAjYCACACDQFBrB5BrB4oAgBBfiABd3E2AgAMAgsgCEEQQRQgCCgCECAGRhtqIAI2AgAgAkUNAQsgAiAINgIYIAYoAhAiAQRAIAIgATYCECABIAI2AhgLIAYoAhQiAUUNACACIAE2AhQgASACNgIYCyAAIAlqIQAgBiAJaiIGKAIEIQMLIAYgA0F+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", m(U) || (U = e(U));
|
|
782
|
+
function x(C) {
|
|
783
|
+
if (C == U && t)
|
|
784
|
+
return new Uint8Array(t);
|
|
785
|
+
var g = cA(C);
|
|
786
|
+
if (g)
|
|
787
|
+
return g;
|
|
788
|
+
throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
|
|
789
|
+
}
|
|
790
|
+
function Z(C, g) {
|
|
791
|
+
var i, n = x(C);
|
|
792
|
+
i = new WebAssembly.Module(n);
|
|
793
|
+
var d = new WebAssembly.Instance(i, g);
|
|
794
|
+
return [d, i];
|
|
795
|
+
}
|
|
796
|
+
function W() {
|
|
797
|
+
var C = { a: FA };
|
|
798
|
+
function g(n, d) {
|
|
799
|
+
var Y = n.exports;
|
|
800
|
+
return F = Y, w = F.b, c(), F.l, p(F.c), K(), Y;
|
|
801
|
+
}
|
|
802
|
+
if (T(), A.instantiateWasm)
|
|
803
|
+
try {
|
|
804
|
+
return A.instantiateWasm(C, g);
|
|
805
|
+
} catch (n) {
|
|
806
|
+
a("Module.instantiateWasm callback failed with error: " + n), E(n);
|
|
807
|
+
}
|
|
808
|
+
var i = Z(U, C);
|
|
809
|
+
return g(i[0]);
|
|
810
|
+
}
|
|
811
|
+
var O = (C) => {
|
|
812
|
+
for (; C.length > 0; )
|
|
813
|
+
C.shift()(A);
|
|
814
|
+
}, _ = (C) => {
|
|
815
|
+
L("OOM");
|
|
816
|
+
}, AA = (C) => {
|
|
817
|
+
s.length, _();
|
|
818
|
+
};
|
|
819
|
+
function $(C) {
|
|
820
|
+
var g = A["_" + C];
|
|
821
|
+
return g;
|
|
822
|
+
}
|
|
823
|
+
var CA = (C, g) => {
|
|
824
|
+
D.set(C, g);
|
|
825
|
+
}, EA = (C) => {
|
|
826
|
+
for (var g = 0, i = 0; i < C.length; ++i) {
|
|
827
|
+
var n = C.charCodeAt(i);
|
|
828
|
+
n <= 127 ? g++ : n <= 2047 ? g += 2 : n >= 55296 && n <= 57343 ? (g += 4, ++i) : g += 3;
|
|
829
|
+
}
|
|
830
|
+
return g;
|
|
831
|
+
}, iA = (C, g, i, n) => {
|
|
832
|
+
if (!(n > 0)) return 0;
|
|
833
|
+
for (var d = i, Y = i + n - 1, M = 0; M < C.length; ++M) {
|
|
834
|
+
var N = C.charCodeAt(M);
|
|
835
|
+
if (N >= 55296 && N <= 57343) {
|
|
836
|
+
var v = C.charCodeAt(++M);
|
|
837
|
+
N = 65536 + ((N & 1023) << 10) | v & 1023;
|
|
838
|
+
}
|
|
839
|
+
if (N <= 127) {
|
|
840
|
+
if (i >= Y) break;
|
|
841
|
+
g[i++] = N;
|
|
842
|
+
} else if (N <= 2047) {
|
|
843
|
+
if (i + 1 >= Y) break;
|
|
844
|
+
g[i++] = 192 | N >> 6, g[i++] = 128 | N & 63;
|
|
845
|
+
} else if (N <= 65535) {
|
|
846
|
+
if (i + 2 >= Y) break;
|
|
847
|
+
g[i++] = 224 | N >> 12, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
|
|
848
|
+
} else {
|
|
849
|
+
if (i + 3 >= Y) break;
|
|
850
|
+
g[i++] = 240 | N >> 18, g[i++] = 128 | N >> 12 & 63, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
return g[i] = 0, i - d;
|
|
854
|
+
}, IA = (C, g, i) => iA(C, s, g, i), BA = (C) => {
|
|
855
|
+
var g = EA(C) + 1, i = nA(g);
|
|
856
|
+
return IA(C, i, g), i;
|
|
857
|
+
}, gA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, oA = (C, g, i) => {
|
|
858
|
+
for (var n = g + i, d = g; C[d] && !(d >= n); ) ++d;
|
|
859
|
+
if (d - g > 16 && C.buffer && gA)
|
|
860
|
+
return gA.decode(C.subarray(g, d));
|
|
861
|
+
for (var Y = ""; g < d; ) {
|
|
862
|
+
var M = C[g++];
|
|
863
|
+
if (!(M & 128)) {
|
|
864
|
+
Y += String.fromCharCode(M);
|
|
865
|
+
continue;
|
|
866
|
+
}
|
|
867
|
+
var N = C[g++] & 63;
|
|
868
|
+
if ((M & 224) == 192) {
|
|
869
|
+
Y += String.fromCharCode((M & 31) << 6 | N);
|
|
870
|
+
continue;
|
|
871
|
+
}
|
|
872
|
+
var v = C[g++] & 63;
|
|
873
|
+
if ((M & 240) == 224 ? M = (M & 15) << 12 | N << 6 | v : M = (M & 7) << 18 | N << 12 | v << 6 | C[g++] & 63, M < 65536)
|
|
874
|
+
Y += String.fromCharCode(M);
|
|
875
|
+
else {
|
|
876
|
+
var V = M - 65536;
|
|
877
|
+
Y += String.fromCharCode(55296 | V >> 10, 56320 | V & 1023);
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
return Y;
|
|
881
|
+
}, eA = (C, g) => C ? oA(s, C, g) : "", rA = function(C, g, i, n, d) {
|
|
882
|
+
var Y = { string: (b) => {
|
|
883
|
+
var z = 0;
|
|
884
|
+
return b != null && b !== 0 && (z = BA(b)), z;
|
|
885
|
+
}, array: (b) => {
|
|
886
|
+
var z = nA(b.length);
|
|
887
|
+
return CA(b, z), z;
|
|
888
|
+
} };
|
|
889
|
+
function M(b) {
|
|
890
|
+
return g === "string" ? eA(b) : g === "boolean" ? !!b : b;
|
|
891
|
+
}
|
|
892
|
+
var N = $(C), v = [], V = 0;
|
|
893
|
+
if (n)
|
|
894
|
+
for (var j = 0; j < n.length; j++) {
|
|
895
|
+
var tA = Y[i[j]];
|
|
896
|
+
tA ? (V === 0 && (V = QA()), v[j] = tA(n[j])) : v[j] = n[j];
|
|
897
|
+
}
|
|
898
|
+
var wA = N.apply(null, v);
|
|
899
|
+
function yA(b) {
|
|
900
|
+
return V !== 0 && RA(V), M(b);
|
|
901
|
+
}
|
|
902
|
+
return wA = yA(wA), wA;
|
|
903
|
+
}, sA = function(C, g, i, n) {
|
|
904
|
+
var d = !i || i.every((M) => M === "number" || M === "boolean"), Y = g !== "string";
|
|
905
|
+
return Y && d && !n ? $(C) : function() {
|
|
906
|
+
return rA(C, g, i, arguments);
|
|
907
|
+
};
|
|
908
|
+
}, FA = { a: AA }, q = W();
|
|
909
|
+
q.c, A._malloc = q.d, A._free = q.e, A._precalc = q.f, A._precalc_f = q.g, A._dispose = q.h, A._dispose_f = q.i, A._transform_radix2_precalc = q.j, A._transform_radix2_precalc_f = q.k, q.__errno_location;
|
|
910
|
+
var QA = q.m, RA = q.n, nA = q.o;
|
|
911
|
+
function DA(C) {
|
|
912
|
+
try {
|
|
913
|
+
for (var g = atob(C), i = new Uint8Array(g.length), n = 0; n < g.length; ++n)
|
|
914
|
+
i[n] = g.charCodeAt(n);
|
|
915
|
+
return i;
|
|
916
|
+
} catch {
|
|
917
|
+
throw new Error("Converting base64 string to bytes failed.");
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
function cA(C) {
|
|
921
|
+
if (m(C))
|
|
922
|
+
return DA(C.slice(u.length));
|
|
923
|
+
}
|
|
924
|
+
A.ccall = rA, A.cwrap = sA;
|
|
925
|
+
var aA;
|
|
926
|
+
S = function C() {
|
|
927
|
+
aA || hA(), aA || (S = C);
|
|
928
|
+
};
|
|
929
|
+
function hA() {
|
|
930
|
+
if (k > 0 || (y(), k > 0))
|
|
931
|
+
return;
|
|
932
|
+
function C() {
|
|
933
|
+
aA || (aA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
|
|
934
|
+
}
|
|
935
|
+
A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
|
|
936
|
+
setTimeout(function() {
|
|
937
|
+
A.setStatus("");
|
|
938
|
+
}, 1), C();
|
|
939
|
+
}, 1)) : C();
|
|
940
|
+
}
|
|
941
|
+
if (A.preInit)
|
|
942
|
+
for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
|
|
943
|
+
A.preInit.pop()();
|
|
944
|
+
return hA(), I;
|
|
945
|
+
});
|
|
946
|
+
})(), NA = zA({});
|
|
947
|
+
NA.cwrap("precalc", "number", ["number"]);
|
|
948
|
+
NA.cwrap("dispose", "void", ["number"]);
|
|
949
|
+
NA.cwrap(
|
|
950
|
+
"transform_radix2_precalc",
|
|
951
|
+
"void",
|
|
952
|
+
["number", "number", "number", "number"]
|
|
953
|
+
);
|
|
954
|
+
var _A = NA.cwrap("precalc_f", "number", ["number"]), $A = NA.cwrap("dispose_f", "void", ["number"]), AI = NA.cwrap(
|
|
955
|
+
"transform_radix2_precalc_f",
|
|
956
|
+
"void",
|
|
957
|
+
["number", "number", "number", "number"]
|
|
958
|
+
);
|
|
959
|
+
function II(o) {
|
|
960
|
+
this.n = o, this.rptr = NA._malloc(o * 4 + o * 4), this.iptr = this.rptr + o * 4, this.rarr = new Float32Array(NA.HEAPU8.buffer, this.rptr, o), this.iarr = new Float32Array(NA.HEAPU8.buffer, this.iptr, o), this.tables = _A(o), this.forward = function(I, A) {
|
|
961
|
+
this.rarr.set(I), this.iarr.set(A), AI(this.rptr, this.iptr, this.n, this.tables), I.set(this.rarr), A.set(this.iarr);
|
|
962
|
+
}, this.dispose = function() {
|
|
963
|
+
NA._free(this.rptr), $A(this.tables);
|
|
964
|
+
};
|
|
965
|
+
}
|
|
966
|
+
class gI {
|
|
967
|
+
constructor(I) {
|
|
968
|
+
this.size = I, this.fftNayuki = new II(I);
|
|
969
|
+
}
|
|
970
|
+
fft(I) {
|
|
971
|
+
const A = new Float32Array(this.size), r = new Float32Array(this.size), E = new Float32Array(this.size * 2);
|
|
972
|
+
for (var B = 0; B < this.size; ++B)
|
|
973
|
+
A[B] = I[B * 2], r[B] = I[B * 2 + 1];
|
|
974
|
+
this.fftNayuki.forward(A, r);
|
|
975
|
+
for (var B = 0; B < this.size; ++B)
|
|
976
|
+
E[B * 2] = A[B], E[B * 2 + 1] = r[B];
|
|
977
|
+
return E;
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
if (!mA)
|
|
981
|
+
var mA = {};
|
|
982
|
+
(function(o) {
|
|
983
|
+
function I(e, a, t, w, F, h) {
|
|
984
|
+
for (var D = F.twiddle, s = 0; s < h; s++) {
|
|
985
|
+
var c = e[2 * (a + t * s)], l = e[2 * (a + t * s) + 1], R = e[2 * (a + t * (s + h))], f = e[2 * (a + t * (s + h)) + 1], y = D[2 * (0 + w * s)], G = D[2 * (0 + w * s) + 1], H = R * y - f * G, J = R * G + f * y, p = c + H, P = l + J, k = c - H, S = l - J;
|
|
986
|
+
e[2 * (a + t * s)] = p, e[2 * (a + t * s) + 1] = P, e[2 * (a + t * (s + h))] = k, e[2 * (a + t * (s + h)) + 1] = S;
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
function A(e, a, t, w, F, h) {
|
|
990
|
+
for (var D = F.twiddle, s = h, c = 2 * h, l = w, R = 2 * w, f = D[2 * (0 + w * h) + 1], y = 0; y < h; y++) {
|
|
991
|
+
var G = e[2 * (a + t * y)], H = e[2 * (a + t * y) + 1], J = e[2 * (a + t * (y + s))], p = e[2 * (a + t * (y + s)) + 1], P = D[2 * (0 + l * y)], k = D[2 * (0 + l * y) + 1], S = J * P - p * k, T = J * k + p * P, K = e[2 * (a + t * (y + c))], L = e[2 * (a + t * (y + c)) + 1], u = D[2 * (0 + R * y)], m = D[2 * (0 + R * y) + 1], U = K * u - L * m, x = K * m + L * u, Z = S + U, W = T + x, O = G + Z, _ = H + W;
|
|
992
|
+
e[2 * (a + t * y)] = O, e[2 * (a + t * y) + 1] = _;
|
|
993
|
+
var AA = G - Z * 0.5, $ = H - W * 0.5, CA = (S - U) * f, EA = (T - x) * f, iA = AA - EA, IA = $ + CA;
|
|
994
|
+
e[2 * (a + t * (y + s))] = iA, e[2 * (a + t * (y + s)) + 1] = IA;
|
|
995
|
+
var BA = AA + EA, gA = $ - CA;
|
|
996
|
+
e[2 * (a + t * (y + c))] = BA, e[2 * (a + t * (y + c)) + 1] = gA;
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
function r(e, a, t, w, F, h) {
|
|
1000
|
+
for (var D = F.twiddle, s = h, c = 2 * h, l = 3 * h, R = w, f = 2 * w, y = 3 * w, G = 0; G < h; G++) {
|
|
1001
|
+
var H = e[2 * (a + t * G)], J = e[2 * (a + t * G) + 1], p = e[2 * (a + t * (G + s))], P = e[2 * (a + t * (G + s)) + 1], k = D[2 * (0 + R * G)], S = D[2 * (0 + R * G) + 1], T = p * k - P * S, K = p * S + P * k, L = e[2 * (a + t * (G + c))], u = e[2 * (a + t * (G + c)) + 1], m = D[2 * (0 + f * G)], U = D[2 * (0 + f * G) + 1], x = L * m - u * U, Z = L * U + u * m, W = e[2 * (a + t * (G + l))], O = e[2 * (a + t * (G + l)) + 1], _ = D[2 * (0 + y * G)], AA = D[2 * (0 + y * G) + 1], $ = W * _ - O * AA, CA = W * AA + O * _, EA = H + x, iA = J + Z, IA = H - x, BA = J - Z, gA = T + $, oA = K + CA, eA = T - $, rA = K - CA, sA = EA + gA, FA = iA + oA;
|
|
1002
|
+
if (F.inverse)
|
|
1003
|
+
var q = IA - rA, QA = BA + eA;
|
|
1004
|
+
else
|
|
1005
|
+
var q = IA + rA, QA = BA - eA;
|
|
1006
|
+
var RA = EA - gA, nA = iA - oA;
|
|
1007
|
+
if (F.inverse)
|
|
1008
|
+
var DA = IA + rA, cA = BA - eA;
|
|
1009
|
+
else
|
|
1010
|
+
var DA = IA - rA, cA = BA + eA;
|
|
1011
|
+
e[2 * (a + t * G)] = sA, e[2 * (a + t * G) + 1] = FA, e[2 * (a + t * (G + s))] = q, e[2 * (a + t * (G + s)) + 1] = QA, e[2 * (a + t * (G + c))] = RA, e[2 * (a + t * (G + c)) + 1] = nA, e[2 * (a + t * (G + l))] = DA, e[2 * (a + t * (G + l)) + 1] = cA;
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
function E(e, a, t, w, F, h, D) {
|
|
1015
|
+
for (var s = F.twiddle, c = F.n, l = new Float64Array(2 * D), R = 0; R < h; R++) {
|
|
1016
|
+
for (var f = 0, y = R; f < D; f++, y += h) {
|
|
1017
|
+
var G = e[2 * (a + t * y)], H = e[2 * (a + t * y) + 1];
|
|
1018
|
+
l[2 * f] = G, l[2 * f + 1] = H;
|
|
1019
|
+
}
|
|
1020
|
+
for (var f = 0, y = R; f < D; f++, y += h) {
|
|
1021
|
+
var J = 0, G = l[0], H = l[1];
|
|
1022
|
+
e[2 * (a + t * y)] = G, e[2 * (a + t * y) + 1] = H;
|
|
1023
|
+
for (var p = 1; p < D; p++) {
|
|
1024
|
+
J = (J + w * y) % c;
|
|
1025
|
+
var P = e[2 * (a + t * y)], k = e[2 * (a + t * y) + 1], S = l[2 * p], T = l[2 * p + 1], K = s[2 * J], L = s[2 * J + 1], u = S * K - T * L, m = S * L + T * K, U = P + u, x = k + m;
|
|
1026
|
+
e[2 * (a + t * y)] = U, e[2 * (a + t * y) + 1] = x;
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
function B(e, a, t, w, F, h, D, s, c) {
|
|
1032
|
+
var l = s.shift(), R = s.shift();
|
|
1033
|
+
if (R == 1)
|
|
1034
|
+
for (var f = 0; f < l * R; f++) {
|
|
1035
|
+
var y = w[2 * (F + h * D * f)], G = w[2 * (F + h * D * f) + 1];
|
|
1036
|
+
e[2 * (a + t * f)] = y, e[2 * (a + t * f) + 1] = G;
|
|
1037
|
+
}
|
|
1038
|
+
else
|
|
1039
|
+
for (var f = 0; f < l; f++)
|
|
1040
|
+
B(
|
|
1041
|
+
e,
|
|
1042
|
+
a + t * f * R,
|
|
1043
|
+
t,
|
|
1044
|
+
w,
|
|
1045
|
+
F + f * h * D,
|
|
1046
|
+
h * l,
|
|
1047
|
+
D,
|
|
1048
|
+
s.slice(),
|
|
1049
|
+
c
|
|
1050
|
+
);
|
|
1051
|
+
switch (l) {
|
|
1052
|
+
case 2:
|
|
1053
|
+
I(e, a, t, h, c, R);
|
|
1054
|
+
break;
|
|
1055
|
+
case 3:
|
|
1056
|
+
A(e, a, t, h, c, R);
|
|
1057
|
+
break;
|
|
1058
|
+
case 4:
|
|
1059
|
+
r(e, a, t, h, c, R);
|
|
1060
|
+
break;
|
|
1061
|
+
default:
|
|
1062
|
+
E(e, a, t, h, c, R, l);
|
|
1063
|
+
break;
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
var Q = function(t, w) {
|
|
1067
|
+
if (arguments.length < 2)
|
|
1068
|
+
throw new RangeError("You didn't pass enough arguments, passed `" + arguments.length + "'");
|
|
1069
|
+
var t = ~~t, w = !!w;
|
|
1070
|
+
if (t < 1)
|
|
1071
|
+
throw new RangeError("n is outside range, should be positive integer, was `" + t + "'");
|
|
1072
|
+
for (var F = {
|
|
1073
|
+
n: t,
|
|
1074
|
+
inverse: w,
|
|
1075
|
+
factors: [],
|
|
1076
|
+
twiddle: new Float64Array(2 * t),
|
|
1077
|
+
scratch: new Float64Array(2 * t)
|
|
1078
|
+
}, h = F.twiddle, D = 2 * Math.PI / t, s = 0; s < t; s++) {
|
|
1079
|
+
if (w)
|
|
1080
|
+
var c = D * s;
|
|
1081
|
+
else
|
|
1082
|
+
var c = -D * s;
|
|
1083
|
+
h[2 * s] = Math.cos(c), h[2 * s + 1] = Math.sin(c);
|
|
1084
|
+
}
|
|
1085
|
+
for (var l = 4, R = Math.floor(Math.sqrt(t)); t > 1; ) {
|
|
1086
|
+
for (; t % l; ) {
|
|
1087
|
+
switch (l) {
|
|
1088
|
+
case 4:
|
|
1089
|
+
l = 2;
|
|
1090
|
+
break;
|
|
1091
|
+
case 2:
|
|
1092
|
+
l = 3;
|
|
1093
|
+
break;
|
|
1094
|
+
default:
|
|
1095
|
+
l += 2;
|
|
1096
|
+
break;
|
|
1097
|
+
}
|
|
1098
|
+
l > R && (l = t);
|
|
1099
|
+
}
|
|
1100
|
+
t /= l, F.factors.push(l), F.factors.push(t);
|
|
1101
|
+
}
|
|
1102
|
+
this.state = F;
|
|
1103
|
+
};
|
|
1104
|
+
Q.prototype.simple = function(e, a, t) {
|
|
1105
|
+
this.process(e, 0, 1, a, 0, 1, t);
|
|
1106
|
+
}, Q.prototype.process = function(e, a, s, w, F, c, D) {
|
|
1107
|
+
var s = ~~s, c = ~~c, l = D == "real" ? D : "complex";
|
|
1108
|
+
if (s < 1)
|
|
1109
|
+
throw new RangeError("outputStride is outside range, should be positive integer, was `" + s + "'");
|
|
1110
|
+
if (c < 1)
|
|
1111
|
+
throw new RangeError("inputStride is outside range, should be positive integer, was `" + c + "'");
|
|
1112
|
+
if (l == "real") {
|
|
1113
|
+
for (var R = 0; R < this.state.n; R++) {
|
|
1114
|
+
var f = w[F + c * R], y = 0;
|
|
1115
|
+
this.state.scratch[2 * R] = f, this.state.scratch[2 * R + 1] = y;
|
|
1116
|
+
}
|
|
1117
|
+
B(e, a, s, this.state.scratch, 0, 1, 1, this.state.factors.slice(), this.state);
|
|
1118
|
+
} else if (w == e) {
|
|
1119
|
+
B(this.state.scratch, 0, 1, w, F, 1, c, this.state.factors.slice(), this.state);
|
|
1120
|
+
for (var R = 0; R < this.state.n; R++) {
|
|
1121
|
+
var f = this.state.scratch[2 * R], y = this.state.scratch[2 * R + 1];
|
|
1122
|
+
e[2 * (a + s * R)] = f, e[2 * (a + s * R) + 1] = y;
|
|
1123
|
+
}
|
|
1124
|
+
} else
|
|
1125
|
+
B(
|
|
1126
|
+
e,
|
|
1127
|
+
a,
|
|
1128
|
+
s,
|
|
1129
|
+
w,
|
|
1130
|
+
F,
|
|
1131
|
+
1,
|
|
1132
|
+
c,
|
|
1133
|
+
this.state.factors.slice(),
|
|
1134
|
+
this.state
|
|
1135
|
+
);
|
|
1136
|
+
}, o.complex = Q;
|
|
1137
|
+
})(mA);
|
|
1138
|
+
const CI = mA;
|
|
1139
|
+
class BI {
|
|
1140
|
+
constructor(I) {
|
|
1141
|
+
this.size = I, this.nockertfft = new CI.complex(I, !1);
|
|
1142
|
+
}
|
|
1143
|
+
fft(I) {
|
|
1144
|
+
const A = new Float32Array(2 * this.size);
|
|
1145
|
+
return this.nockertfft.simple(A, I, "complex"), A;
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
let X = 0, kA = null, lA = null;
|
|
1149
|
+
function QI(o) {
|
|
1150
|
+
if (o !== 0 && (o & o - 1) === 0)
|
|
1151
|
+
X = o, tI(), eI(), oI();
|
|
1152
|
+
else
|
|
1153
|
+
throw new Error("init: radix-2 required");
|
|
1154
|
+
}
|
|
1155
|
+
function SA(o, I) {
|
|
1156
|
+
vA(o, I, 1);
|
|
1157
|
+
}
|
|
1158
|
+
function UA(o, I) {
|
|
1159
|
+
let A = 1 / X;
|
|
1160
|
+
vA(o, I, -1);
|
|
1161
|
+
for (let r = 0; r < X; r++)
|
|
1162
|
+
o[r] *= A, I[r] *= A;
|
|
1163
|
+
}
|
|
1164
|
+
function EI(o, I) {
|
|
1165
|
+
vA(o, I, -1);
|
|
1166
|
+
}
|
|
1167
|
+
function iI(o, I) {
|
|
1168
|
+
let A = [], r = [], E = 0;
|
|
1169
|
+
for (let B = 0; B < X; B++) {
|
|
1170
|
+
E = B * X;
|
|
1171
|
+
for (let Q = 0; Q < X; Q++)
|
|
1172
|
+
A[Q] = o[Q + E], r[Q] = I[Q + E];
|
|
1173
|
+
SA(A, r);
|
|
1174
|
+
for (let Q = 0; Q < X; Q++)
|
|
1175
|
+
o[Q + E] = A[Q], I[Q + E] = r[Q];
|
|
1176
|
+
}
|
|
1177
|
+
for (let B = 0; B < X; B++) {
|
|
1178
|
+
for (let Q = 0; Q < X; Q++)
|
|
1179
|
+
E = B + Q * X, A[Q] = o[E], r[Q] = I[E];
|
|
1180
|
+
SA(A, r);
|
|
1181
|
+
for (let Q = 0; Q < X; Q++)
|
|
1182
|
+
E = B + Q * X, o[E] = A[Q], I[E] = r[Q];
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
function rI(o, I) {
|
|
1186
|
+
let A = [], r = [], E = 0;
|
|
1187
|
+
for (let B = 0; B < X; B++) {
|
|
1188
|
+
E = B * X;
|
|
1189
|
+
for (let Q = 0; Q < X; Q++)
|
|
1190
|
+
A[Q] = o[Q + E], r[Q] = I[Q + E];
|
|
1191
|
+
UA(A, r);
|
|
1192
|
+
for (let Q = 0; Q < X; Q++)
|
|
1193
|
+
o[Q + E] = A[Q], I[Q + E] = r[Q];
|
|
1194
|
+
}
|
|
1195
|
+
for (let B = 0; B < X; B++) {
|
|
1196
|
+
for (let Q = 0; Q < X; Q++)
|
|
1197
|
+
E = B + Q * X, A[Q] = o[E], r[Q] = I[E];
|
|
1198
|
+
UA(A, r);
|
|
1199
|
+
for (let Q = 0; Q < X; Q++)
|
|
1200
|
+
E = B + Q * X, o[E] = A[Q], I[E] = r[Q];
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
function vA(o, I, A) {
|
|
1204
|
+
let r, E, B, Q, e, a, t, w, F, h = X >> 2;
|
|
1205
|
+
for (let D = 0; D < X; D++)
|
|
1206
|
+
Q = kA[D], D < Q && (e = o[D], o[D] = o[Q], o[Q] = e, e = I[D], I[D] = I[Q], I[Q] = e);
|
|
1207
|
+
for (let D = 1; D < X; D <<= 1) {
|
|
1208
|
+
E = 0, r = X / (D << 1);
|
|
1209
|
+
for (let s = 0; s < D; s++) {
|
|
1210
|
+
a = lA[E + h], t = A * lA[E];
|
|
1211
|
+
for (let c = s; c < X; c += D << 1)
|
|
1212
|
+
B = c + D, w = a * o[B] + t * I[B], F = a * I[B] - t * o[B], o[B] = o[c] - w, o[c] += w, I[B] = I[c] - F, I[c] += F;
|
|
1213
|
+
E += r;
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
function tI() {
|
|
1218
|
+
typeof Uint32Array < "u" ? kA = new Uint32Array(X) : kA = [], typeof Float64Array < "u" ? lA = new Float64Array(X * 1.25) : lA = [];
|
|
1219
|
+
}
|
|
1220
|
+
function eI() {
|
|
1221
|
+
let o = 0, I = 0, A = 0;
|
|
1222
|
+
for (kA[0] = 0; ++o < X; ) {
|
|
1223
|
+
for (A = X >> 1; A <= I; )
|
|
1224
|
+
I -= A, A >>= 1;
|
|
1225
|
+
I += A, kA[o] = I;
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
function oI() {
|
|
1229
|
+
let o = X >> 1, I = X >> 2, A = X >> 3, r = o + I, E = Math.sin(Math.PI / X), B = 2 * E * E, Q = Math.sqrt(B * (2 - B)), e = lA[I] = 1, a = lA[0] = 0;
|
|
1230
|
+
E = 2 * B;
|
|
1231
|
+
for (let t = 1; t < A; t++)
|
|
1232
|
+
e -= B, B += E * e, a += Q, Q -= E * a, lA[t] = a, lA[I - t] = e;
|
|
1233
|
+
A !== 0 && (lA[A] = Math.sqrt(0.5));
|
|
1234
|
+
for (let t = 0; t < I; t++)
|
|
1235
|
+
lA[o - t] = lA[t];
|
|
1236
|
+
for (let t = 0; t < r; t++)
|
|
1237
|
+
lA[t + o] = -lA[t];
|
|
1238
|
+
}
|
|
1239
|
+
const aI = {
|
|
1240
|
+
init: QI,
|
|
1241
|
+
fft1d: SA,
|
|
1242
|
+
ifft1d: UA,
|
|
1243
|
+
fft2d: iI,
|
|
1244
|
+
ifft2d: rI,
|
|
1245
|
+
fft: SA,
|
|
1246
|
+
ifft: UA,
|
|
1247
|
+
bt: EI
|
|
1248
|
+
};
|
|
1249
|
+
class nI {
|
|
1250
|
+
constructor(I) {
|
|
1251
|
+
this.size = I, this.FFT_mljs = aI, this.FFT_mljs.init(I);
|
|
1252
|
+
}
|
|
1253
|
+
fft(I) {
|
|
1254
|
+
const A = new Float32Array(this.size), r = new Float32Array(this.size), E = new Float32Array(2 * this.size);
|
|
1255
|
+
for (var B = 0; B < this.size; ++B)
|
|
1256
|
+
A[B] = I[B * 2], r[B] = I[B * 2 + 1];
|
|
1257
|
+
this.FFT_mljs.fft(A, r);
|
|
1258
|
+
for (var B = 0; B < this.size; ++B)
|
|
1259
|
+
E[B * 2] = A[B], E[B * 2 + 1] = r[B];
|
|
1260
|
+
return E;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
async function sI() {
|
|
1264
|
+
return await WebAssembly.validate(
|
|
1265
|
+
new Uint8Array([
|
|
1266
|
+
0,
|
|
1267
|
+
97,
|
|
1268
|
+
115,
|
|
1269
|
+
109,
|
|
1270
|
+
1,
|
|
1271
|
+
0,
|
|
1272
|
+
0,
|
|
1273
|
+
0,
|
|
1274
|
+
1,
|
|
1275
|
+
5,
|
|
1276
|
+
1,
|
|
1277
|
+
96,
|
|
1278
|
+
0,
|
|
1279
|
+
1,
|
|
1280
|
+
123,
|
|
1281
|
+
3,
|
|
1282
|
+
2,
|
|
1283
|
+
1,
|
|
1284
|
+
0,
|
|
1285
|
+
10,
|
|
1286
|
+
15,
|
|
1287
|
+
1,
|
|
1288
|
+
13,
|
|
1289
|
+
0,
|
|
1290
|
+
65,
|
|
1291
|
+
1,
|
|
1292
|
+
253,
|
|
1293
|
+
15,
|
|
1294
|
+
65,
|
|
1295
|
+
2,
|
|
1296
|
+
253,
|
|
1297
|
+
15,
|
|
1298
|
+
253,
|
|
1299
|
+
128,
|
|
1300
|
+
2,
|
|
1301
|
+
11
|
|
1302
|
+
])
|
|
1303
|
+
);
|
|
1304
|
+
}
|
|
1305
|
+
async function DI() {
|
|
1306
|
+
return await WebAssembly.validate(
|
|
1307
|
+
new Uint8Array([
|
|
1308
|
+
0,
|
|
1309
|
+
97,
|
|
1310
|
+
115,
|
|
1311
|
+
109,
|
|
1312
|
+
1,
|
|
1313
|
+
0,
|
|
1314
|
+
0,
|
|
1315
|
+
0,
|
|
1316
|
+
1,
|
|
1317
|
+
5,
|
|
1318
|
+
1,
|
|
1319
|
+
96,
|
|
1320
|
+
0,
|
|
1321
|
+
1,
|
|
1322
|
+
123,
|
|
1323
|
+
3,
|
|
1324
|
+
2,
|
|
1325
|
+
1,
|
|
1326
|
+
0,
|
|
1327
|
+
10,
|
|
1328
|
+
10,
|
|
1329
|
+
1,
|
|
1330
|
+
8,
|
|
1331
|
+
0,
|
|
1332
|
+
65,
|
|
1333
|
+
0,
|
|
1334
|
+
253,
|
|
1335
|
+
15,
|
|
1336
|
+
253,
|
|
1337
|
+
98,
|
|
1338
|
+
11
|
|
1339
|
+
])
|
|
1340
|
+
);
|
|
1341
|
+
}
|
|
1342
|
+
async function hI() {
|
|
1343
|
+
let o = "Other", I = "Unknown", A = "Other", r = "Unknown", E = navigator.userAgentData, B = navigator.userAgent;
|
|
1344
|
+
try {
|
|
1345
|
+
if (E) {
|
|
1346
|
+
const Q = await E.getHighEntropyValues([
|
|
1347
|
+
"architecture",
|
|
1348
|
+
"model",
|
|
1349
|
+
"platform",
|
|
1350
|
+
"platformVersion",
|
|
1351
|
+
"uaFullVersion"
|
|
1352
|
+
]), e = E.brands.find(
|
|
1353
|
+
(a) => ["Microsoft Edge", "Google Chrome", "Opera"].includes(a.brand)
|
|
1354
|
+
);
|
|
1355
|
+
o = e ? e.brand : "Other", I = e ? `v${e.version}` : "Unknown", A = Q.platform ? Q.platform : "Other", r = Q.platformVersion ? `v${Q.platformVersion}` : "Unknown";
|
|
1356
|
+
}
|
|
1357
|
+
if (o === "Other" || A === "Other") {
|
|
1358
|
+
const Q = B.split(" "), e = Q[Q.length - 1], a = /Firefox/.test(e), t = /Safari/.test(e) && !/CriOS/.test(e) && !/Chrome/.test(e), w = /CriOS/.test(e) || /Chrome/.test(e), F = /Edg/.test(e), h = /OPR/.test(e), D = [
|
|
1359
|
+
{
|
|
1360
|
+
name: "Mozilla Firefox",
|
|
1361
|
+
regex: /Firefox\/(\d+\.\d+)/,
|
|
1362
|
+
flag: a
|
|
1363
|
+
},
|
|
1364
|
+
{ name: "Safari", regex: /Version\/(\d+\.\d+)/, flag: t },
|
|
1365
|
+
{
|
|
1366
|
+
name: "Google Chrome",
|
|
1367
|
+
regex: /CriOS|Chrome\/(\d+\.\d+)/,
|
|
1368
|
+
flag: w
|
|
1369
|
+
},
|
|
1370
|
+
{ name: "Microsoft Edge", regex: /Edg\/(\d+\.\d+)/, flag: F },
|
|
1371
|
+
{ name: "Opera", regex: /OPR\/(\d+\.\d+)/, flag: h }
|
|
1372
|
+
];
|
|
1373
|
+
for (const f of D)
|
|
1374
|
+
if (f.flag) {
|
|
1375
|
+
o = f.name;
|
|
1376
|
+
const y = e.match(f.regex);
|
|
1377
|
+
I = y ? y[1] : "Unknown";
|
|
1378
|
+
break;
|
|
1379
|
+
}
|
|
1380
|
+
const s = B.match(/\(([^)]+)\)/), c = s ? s[1].split("; ") : [];
|
|
1381
|
+
console.log(s), console.log(c);
|
|
1382
|
+
const l = {
|
|
1383
|
+
"10.0": "10",
|
|
1384
|
+
"6.3": "8.1",
|
|
1385
|
+
"6.2": "8",
|
|
1386
|
+
"6.1": "7",
|
|
1387
|
+
"6.0": "Vista",
|
|
1388
|
+
"5.2": "XP 64-bit",
|
|
1389
|
+
"5.1": "XP",
|
|
1390
|
+
"5.0": "2000"
|
|
1391
|
+
}, R = [
|
|
1392
|
+
{
|
|
1393
|
+
name: "Windows",
|
|
1394
|
+
regex: /Windows NT/,
|
|
1395
|
+
transform: (f) => l[f.split(" ")[2]],
|
|
1396
|
+
index: 0
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
name: "Mac OS X",
|
|
1400
|
+
regex: /Mac OS X/,
|
|
1401
|
+
transform: (f) => f.replace("_", ".").split(" ")[3],
|
|
1402
|
+
index: 0
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
name: "Linux",
|
|
1406
|
+
regex: /Linux/,
|
|
1407
|
+
transform: () => "Unknown",
|
|
1408
|
+
// Precise Linux version can be difficult to determine
|
|
1409
|
+
index: 0
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
name: "Android",
|
|
1413
|
+
regex: /Android/,
|
|
1414
|
+
transform: (f) => f.split(" ")[1],
|
|
1415
|
+
index: 0
|
|
1416
|
+
},
|
|
1417
|
+
{
|
|
1418
|
+
name: "iOS",
|
|
1419
|
+
regex: /iPhone/,
|
|
1420
|
+
transform: (f) => f.split(" ")[1].replace("_", "."),
|
|
1421
|
+
index: 0
|
|
1422
|
+
}
|
|
1423
|
+
];
|
|
1424
|
+
for (const f of R)
|
|
1425
|
+
if (f.regex.test(c[0])) {
|
|
1426
|
+
A = f.name, console.log(`osDetails: ${c}`), r = f.transform ? f.transform(c[1]) : f.versionMap[c[1].split(" ")[f.index]];
|
|
1427
|
+
break;
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
} catch (Q) {
|
|
1431
|
+
console.error("Could not retrieve user agent data", Q);
|
|
1432
|
+
}
|
|
1433
|
+
return {
|
|
1434
|
+
browserName: o,
|
|
1435
|
+
browserVersion: I,
|
|
1436
|
+
osName: A,
|
|
1437
|
+
osVersion: r,
|
|
1438
|
+
wasm: typeof WebAssembly == "object",
|
|
1439
|
+
relaxedSimd: await sI(),
|
|
1440
|
+
simd: await DI()
|
|
1441
|
+
};
|
|
1442
|
+
}
|
|
1443
|
+
var cI = (() => {
|
|
1444
|
+
var o = import.meta.url;
|
|
1445
|
+
return (function(I = {}) {
|
|
1446
|
+
var A = I, r, E;
|
|
1447
|
+
A.ready = new Promise((C, g) => {
|
|
1448
|
+
r = C, E = g;
|
|
1449
|
+
});
|
|
1450
|
+
var B = Object.assign({}, A), Q = "";
|
|
1451
|
+
function e(C) {
|
|
1452
|
+
return A.locateFile ? A.locateFile(C, Q) : Q + C;
|
|
1453
|
+
}
|
|
1454
|
+
typeof document < "u" && document.currentScript && (Q = document.currentScript.src), o && (Q = o), Q.indexOf("blob:") !== 0 ? Q = Q.substr(0, Q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : Q = "", A.print || console.log.bind(console);
|
|
1455
|
+
var a = A.printErr || console.error.bind(console);
|
|
1456
|
+
Object.assign(A, B), B = null, A.arguments && A.arguments, A.thisProgram && A.thisProgram, A.quit && A.quit;
|
|
1457
|
+
var t;
|
|
1458
|
+
A.wasmBinary && (t = A.wasmBinary), A.noExitRuntime, typeof WebAssembly != "object" && L("no native wasm support detected");
|
|
1459
|
+
var w, F, h = !1, D, s;
|
|
1460
|
+
function c() {
|
|
1461
|
+
var C = w.buffer;
|
|
1462
|
+
A.HEAP8 = D = new Int8Array(C), A.HEAP16 = new Int16Array(C), A.HEAP32 = new Int32Array(C), A.HEAPU8 = s = new Uint8Array(C), A.HEAPU16 = new Uint16Array(C), A.HEAPU32 = new Uint32Array(C), A.HEAPF32 = new Float32Array(C), A.HEAPF64 = new Float64Array(C);
|
|
1463
|
+
}
|
|
1464
|
+
var l = [], R = [], f = [];
|
|
1465
|
+
function y() {
|
|
1466
|
+
if (A.preRun)
|
|
1467
|
+
for (typeof A.preRun == "function" && (A.preRun = [A.preRun]); A.preRun.length; )
|
|
1468
|
+
J(A.preRun.shift());
|
|
1469
|
+
O(l);
|
|
1470
|
+
}
|
|
1471
|
+
function G() {
|
|
1472
|
+
O(R);
|
|
1473
|
+
}
|
|
1474
|
+
function H() {
|
|
1475
|
+
if (A.postRun)
|
|
1476
|
+
for (typeof A.postRun == "function" && (A.postRun = [A.postRun]); A.postRun.length; )
|
|
1477
|
+
P(A.postRun.shift());
|
|
1478
|
+
O(f);
|
|
1479
|
+
}
|
|
1480
|
+
function J(C) {
|
|
1481
|
+
l.unshift(C);
|
|
1482
|
+
}
|
|
1483
|
+
function p(C) {
|
|
1484
|
+
R.unshift(C);
|
|
1485
|
+
}
|
|
1486
|
+
function P(C) {
|
|
1487
|
+
f.unshift(C);
|
|
1488
|
+
}
|
|
1489
|
+
var k = 0, S = null;
|
|
1490
|
+
function T(C) {
|
|
1491
|
+
k++, A.monitorRunDependencies && A.monitorRunDependencies(k);
|
|
1492
|
+
}
|
|
1493
|
+
function K(C) {
|
|
1494
|
+
if (k--, A.monitorRunDependencies && A.monitorRunDependencies(k), k == 0 && S) {
|
|
1495
|
+
var g = S;
|
|
1496
|
+
S = null, g();
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
function L(C) {
|
|
1500
|
+
A.onAbort && A.onAbort(C), C = "Aborted(" + C + ")", a(C), h = !0, C += ". Build with -sASSERTIONS for more info.";
|
|
1501
|
+
var g = new WebAssembly.RuntimeError(C);
|
|
1502
|
+
throw E(g), g;
|
|
1503
|
+
}
|
|
1504
|
+
var u = "data:application/octet-stream;base64,";
|
|
1505
|
+
function m(C) {
|
|
1506
|
+
return C.startsWith(u);
|
|
1507
|
+
}
|
|
1508
|
+
var U;
|
|
1509
|
+
U = "data:application/octet-stream;base64,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", m(U) || (U = e(U));
|
|
1510
|
+
function x(C) {
|
|
1511
|
+
if (C == U && t)
|
|
1512
|
+
return new Uint8Array(t);
|
|
1513
|
+
var g = cA(C);
|
|
1514
|
+
if (g)
|
|
1515
|
+
return g;
|
|
1516
|
+
throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
|
|
1517
|
+
}
|
|
1518
|
+
function Z(C, g) {
|
|
1519
|
+
var i, n = x(C);
|
|
1520
|
+
i = new WebAssembly.Module(n);
|
|
1521
|
+
var d = new WebAssembly.Instance(i, g);
|
|
1522
|
+
return [d, i];
|
|
1523
|
+
}
|
|
1524
|
+
function W() {
|
|
1525
|
+
var C = { a: FA };
|
|
1526
|
+
function g(n, d) {
|
|
1527
|
+
var Y = n.exports;
|
|
1528
|
+
return F = Y, w = F.b, c(), F.i, p(F.c), K(), Y;
|
|
1529
|
+
}
|
|
1530
|
+
if (T(), A.instantiateWasm)
|
|
1531
|
+
try {
|
|
1532
|
+
return A.instantiateWasm(C, g);
|
|
1533
|
+
} catch (n) {
|
|
1534
|
+
a("Module.instantiateWasm callback failed with error: " + n), E(n);
|
|
1535
|
+
}
|
|
1536
|
+
var i = Z(U, C);
|
|
1537
|
+
return g(i[0]);
|
|
1538
|
+
}
|
|
1539
|
+
var O = (C) => {
|
|
1540
|
+
for (; C.length > 0; )
|
|
1541
|
+
C.shift()(A);
|
|
1542
|
+
}, _ = (C) => {
|
|
1543
|
+
L("OOM");
|
|
1544
|
+
}, AA = (C) => {
|
|
1545
|
+
s.length, _();
|
|
1546
|
+
};
|
|
1547
|
+
function $(C) {
|
|
1548
|
+
var g = A["_" + C];
|
|
1549
|
+
return g;
|
|
1550
|
+
}
|
|
1551
|
+
var CA = (C, g) => {
|
|
1552
|
+
D.set(C, g);
|
|
1553
|
+
}, EA = (C) => {
|
|
1554
|
+
for (var g = 0, i = 0; i < C.length; ++i) {
|
|
1555
|
+
var n = C.charCodeAt(i);
|
|
1556
|
+
n <= 127 ? g++ : n <= 2047 ? g += 2 : n >= 55296 && n <= 57343 ? (g += 4, ++i) : g += 3;
|
|
1557
|
+
}
|
|
1558
|
+
return g;
|
|
1559
|
+
}, iA = (C, g, i, n) => {
|
|
1560
|
+
if (!(n > 0)) return 0;
|
|
1561
|
+
for (var d = i, Y = i + n - 1, M = 0; M < C.length; ++M) {
|
|
1562
|
+
var N = C.charCodeAt(M);
|
|
1563
|
+
if (N >= 55296 && N <= 57343) {
|
|
1564
|
+
var v = C.charCodeAt(++M);
|
|
1565
|
+
N = 65536 + ((N & 1023) << 10) | v & 1023;
|
|
1566
|
+
}
|
|
1567
|
+
if (N <= 127) {
|
|
1568
|
+
if (i >= Y) break;
|
|
1569
|
+
g[i++] = N;
|
|
1570
|
+
} else if (N <= 2047) {
|
|
1571
|
+
if (i + 1 >= Y) break;
|
|
1572
|
+
g[i++] = 192 | N >> 6, g[i++] = 128 | N & 63;
|
|
1573
|
+
} else if (N <= 65535) {
|
|
1574
|
+
if (i + 2 >= Y) break;
|
|
1575
|
+
g[i++] = 224 | N >> 12, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
|
|
1576
|
+
} else {
|
|
1577
|
+
if (i + 3 >= Y) break;
|
|
1578
|
+
g[i++] = 240 | N >> 18, g[i++] = 128 | N >> 12 & 63, g[i++] = 128 | N >> 6 & 63, g[i++] = 128 | N & 63;
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
return g[i] = 0, i - d;
|
|
1582
|
+
}, IA = (C, g, i) => iA(C, s, g, i), BA = (C) => {
|
|
1583
|
+
var g = EA(C) + 1, i = nA(g);
|
|
1584
|
+
return IA(C, i, g), i;
|
|
1585
|
+
}, gA = typeof TextDecoder < "u" ? new TextDecoder("utf8") : void 0, oA = (C, g, i) => {
|
|
1586
|
+
for (var n = g + i, d = g; C[d] && !(d >= n); ) ++d;
|
|
1587
|
+
if (d - g > 16 && C.buffer && gA)
|
|
1588
|
+
return gA.decode(C.subarray(g, d));
|
|
1589
|
+
for (var Y = ""; g < d; ) {
|
|
1590
|
+
var M = C[g++];
|
|
1591
|
+
if (!(M & 128)) {
|
|
1592
|
+
Y += String.fromCharCode(M);
|
|
1593
|
+
continue;
|
|
1594
|
+
}
|
|
1595
|
+
var N = C[g++] & 63;
|
|
1596
|
+
if ((M & 224) == 192) {
|
|
1597
|
+
Y += String.fromCharCode((M & 31) << 6 | N);
|
|
1598
|
+
continue;
|
|
1599
|
+
}
|
|
1600
|
+
var v = C[g++] & 63;
|
|
1601
|
+
if ((M & 240) == 224 ? M = (M & 15) << 12 | N << 6 | v : M = (M & 7) << 18 | N << 12 | v << 6 | C[g++] & 63, M < 65536)
|
|
1602
|
+
Y += String.fromCharCode(M);
|
|
1603
|
+
else {
|
|
1604
|
+
var V = M - 65536;
|
|
1605
|
+
Y += String.fromCharCode(55296 | V >> 10, 56320 | V & 1023);
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
return Y;
|
|
1609
|
+
}, eA = (C, g) => C ? oA(s, C, g) : "", rA = function(C, g, i, n, d) {
|
|
1610
|
+
var Y = { string: (b) => {
|
|
1611
|
+
var z = 0;
|
|
1612
|
+
return b != null && b !== 0 && (z = BA(b)), z;
|
|
1613
|
+
}, array: (b) => {
|
|
1614
|
+
var z = nA(b.length);
|
|
1615
|
+
return CA(b, z), z;
|
|
1616
|
+
} };
|
|
1617
|
+
function M(b) {
|
|
1618
|
+
return g === "string" ? eA(b) : g === "boolean" ? !!b : b;
|
|
1619
|
+
}
|
|
1620
|
+
var N = $(C), v = [], V = 0;
|
|
1621
|
+
if (n)
|
|
1622
|
+
for (var j = 0; j < n.length; j++) {
|
|
1623
|
+
var tA = Y[i[j]];
|
|
1624
|
+
tA ? (V === 0 && (V = QA()), v[j] = tA(n[j])) : v[j] = n[j];
|
|
1625
|
+
}
|
|
1626
|
+
var wA = N.apply(null, v);
|
|
1627
|
+
function yA(b) {
|
|
1628
|
+
return V !== 0 && RA(V), M(b);
|
|
1629
|
+
}
|
|
1630
|
+
return wA = yA(wA), wA;
|
|
1631
|
+
}, sA = function(C, g, i, n) {
|
|
1632
|
+
var d = !i || i.every((M) => M === "number" || M === "boolean"), Y = g !== "string";
|
|
1633
|
+
return Y && d && !n ? $(C) : function() {
|
|
1634
|
+
return rA(C, g, i, arguments);
|
|
1635
|
+
};
|
|
1636
|
+
}, FA = { a: AA }, q = W();
|
|
1637
|
+
q.c, A._kiss_fft_free = q.d, A._free = q.e, A._kiss_fft_alloc = q.f, A._malloc = q.g, A._kiss_fft = q.h, q.__errno_location;
|
|
1638
|
+
var QA = q.j, RA = q.k, nA = q.l;
|
|
1639
|
+
function DA(C) {
|
|
1640
|
+
try {
|
|
1641
|
+
for (var g = atob(C), i = new Uint8Array(g.length), n = 0; n < g.length; ++n)
|
|
1642
|
+
i[n] = g.charCodeAt(n);
|
|
1643
|
+
return i;
|
|
1644
|
+
} catch {
|
|
1645
|
+
throw new Error("Converting base64 string to bytes failed.");
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
function cA(C) {
|
|
1649
|
+
if (m(C))
|
|
1650
|
+
return DA(C.slice(u.length));
|
|
1651
|
+
}
|
|
1652
|
+
A.ccall = rA, A.cwrap = sA;
|
|
1653
|
+
var aA;
|
|
1654
|
+
S = function C() {
|
|
1655
|
+
aA || hA(), aA || (S = C);
|
|
1656
|
+
};
|
|
1657
|
+
function hA() {
|
|
1658
|
+
if (k > 0 || (y(), k > 0))
|
|
1659
|
+
return;
|
|
1660
|
+
function C() {
|
|
1661
|
+
aA || (aA = !0, A.calledRun = !0, !h && (G(), r(A), A.onRuntimeInitialized && A.onRuntimeInitialized(), H()));
|
|
1662
|
+
}
|
|
1663
|
+
A.setStatus ? (A.setStatus("Running..."), setTimeout(function() {
|
|
1664
|
+
setTimeout(function() {
|
|
1665
|
+
A.setStatus("");
|
|
1666
|
+
}, 1), C();
|
|
1667
|
+
}, 1)) : C();
|
|
1668
|
+
}
|
|
1669
|
+
if (A.preInit)
|
|
1670
|
+
for (typeof A.preInit == "function" && (A.preInit = [A.preInit]); A.preInit.length > 0; )
|
|
1671
|
+
A.preInit.pop()();
|
|
1672
|
+
return hA(), I;
|
|
1673
|
+
});
|
|
1674
|
+
})(), GA = cI({}), KA = GA.cwrap("kiss_fft_alloc", "number", [
|
|
1675
|
+
"number",
|
|
1676
|
+
"number",
|
|
1677
|
+
"number",
|
|
1678
|
+
"number"
|
|
1679
|
+
]), wI = GA.cwrap("kiss_fft", "void", [
|
|
1680
|
+
"number",
|
|
1681
|
+
"number",
|
|
1682
|
+
"number"
|
|
1683
|
+
]), bA = GA.cwrap("kiss_fft_free", "void", ["number"]);
|
|
1684
|
+
class fI {
|
|
1685
|
+
constructor(I) {
|
|
1686
|
+
this.size = I, this.fcfg = KA(I, !1), this.icfg = KA(I, !0), this.inptr = GA._malloc(I * 8 + I * 8), this.cin = new Float32Array(
|
|
1687
|
+
GA.HEAPU8.buffer,
|
|
1688
|
+
this.inptr,
|
|
1689
|
+
I * 2
|
|
1690
|
+
);
|
|
1691
|
+
}
|
|
1692
|
+
fft = function(I) {
|
|
1693
|
+
const A = GA._malloc(this.size * 8), r = new Float32Array(
|
|
1694
|
+
GA.HEAPU8.buffer,
|
|
1695
|
+
A,
|
|
1696
|
+
this.size * 2
|
|
1697
|
+
);
|
|
1698
|
+
this.cin.set(I), wI(this.fcfg, this.inptr, A);
|
|
1699
|
+
let E = new Float32Array(this.size * 2);
|
|
1700
|
+
return E.set(r), GA._free(A), E;
|
|
1701
|
+
};
|
|
1702
|
+
dispose() {
|
|
1703
|
+
bA(this.fcfg), bA(this.icfg), GA._free(this.inptr);
|
|
1704
|
+
}
|
|
1705
|
+
}
|
|
1706
|
+
function HA(o) {
|
|
1707
|
+
this.size = o, this._csize = o << 1;
|
|
1708
|
+
for (var I = new Array(this.size * 2), A = 0; A < I.length; A += 2) {
|
|
1709
|
+
const a = Math.PI * A / this.size;
|
|
1710
|
+
I[A] = Math.cos(a), I[A + 1] = -Math.sin(a);
|
|
1711
|
+
}
|
|
1712
|
+
this.table = I;
|
|
1713
|
+
for (var r = 0, E = 1; this.size > E; E <<= 1) r++;
|
|
1714
|
+
this._width = r % 2 === 0 ? r - 1 : r, this._bitrev = new Array(1 << this._width);
|
|
1715
|
+
for (var B = 0; B < this._bitrev.length; B++) {
|
|
1716
|
+
this._bitrev[B] = 0;
|
|
1717
|
+
for (var Q = 0; Q < this._width; Q += 2) {
|
|
1718
|
+
var e = this._width - Q - 2;
|
|
1719
|
+
this._bitrev[B] |= (B >>> Q & 3) << e;
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
this._data = null;
|
|
1723
|
+
}
|
|
1724
|
+
HA.prototype.fft = function(I) {
|
|
1725
|
+
this._data = I, this._out = new Float32Array(2 * this.size);
|
|
1726
|
+
var A = this._csize, r = 1 << this._width, E = A / r << 1, B, Q, e = this._bitrev;
|
|
1727
|
+
if (E === 4)
|
|
1728
|
+
for (B = 0, Q = 0; B < A; B += E, Q++) {
|
|
1729
|
+
const h = e[Q];
|
|
1730
|
+
this._singleTransform2(B, h, r);
|
|
1731
|
+
}
|
|
1732
|
+
else
|
|
1733
|
+
for (B = 0, Q = 0; B < A; B += E, Q++) {
|
|
1734
|
+
const h = e[Q];
|
|
1735
|
+
this._singleTransform4(B, h, r);
|
|
1736
|
+
}
|
|
1737
|
+
for (r >>= 2; r >= 2; r >>= 2) {
|
|
1738
|
+
E = A / r << 1;
|
|
1739
|
+
var a = E >>> 2;
|
|
1740
|
+
for (B = 0; B < A; B += E)
|
|
1741
|
+
for (var t = B + a, w = B, F = 0; w < t; w += 2, F += r) {
|
|
1742
|
+
const h = w, D = h + a, s = D + a, c = s + a, l = this._out[h], R = this._out[h + 1], f = this._out[D], y = this._out[D + 1], G = this._out[s], H = this._out[s + 1], J = this._out[c], p = this._out[c + 1], P = l, k = R, S = this.table[F], T = this.table[F + 1], K = f * S - y * T, L = f * T + y * S, u = this.table[2 * F], m = this.table[2 * F + 1], U = G * u - H * m, x = G * m + H * u, Z = this.table[3 * F], W = this.table[3 * F + 1], O = J * Z - p * W, _ = J * W + p * Z, AA = P + U, $ = k + x, CA = P - U, EA = k - x, iA = K + O, IA = L + _, BA = K - O, gA = L - _;
|
|
1743
|
+
this._out[h] = AA + iA, this._out[h + 1] = $ + IA, this._out[D] = CA + gA, this._out[D + 1] = EA - BA, this._out[s] = AA - iA, this._out[s + 1] = $ - IA, this._out[c] = CA - gA, this._out[c + 1] = EA + BA;
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
return this._out;
|
|
1747
|
+
};
|
|
1748
|
+
HA.prototype._singleTransform2 = function(I, A, r) {
|
|
1749
|
+
const E = this._data[A], B = this._data[A + 1], Q = this._data[A + r], e = this._data[A + r + 1];
|
|
1750
|
+
this._out[I] = E + Q, this._out[I + 1] = B + e, this._out[I + 2] = E - Q, this._out[I + 3] = B - e;
|
|
1751
|
+
};
|
|
1752
|
+
HA.prototype._singleTransform4 = function(I, A, r) {
|
|
1753
|
+
const E = r * 2, B = r * 3, Q = this._data[A], e = this._data[A + 1], a = this._data[A + r], t = this._data[A + r + 1], w = this._data[A + E], F = this._data[A + E + 1], h = this._data[A + B], D = this._data[A + B + 1], s = Q + w, c = e + F, l = Q - w, R = e - F, f = a + h, y = t + D, G = a - h, H = t - D;
|
|
1754
|
+
this._out[I] = s + f, this._out[I + 1] = c + y, this._out[I + 2] = l + H, this._out[I + 3] = R - G, this._out[I + 4] = s - f, this._out[I + 5] = c - y, this._out[I + 6] = l - H, this._out[I + 7] = R + G;
|
|
1755
|
+
};
|
|
1756
|
+
const qA = [
|
|
1757
|
+
4,
|
|
1758
|
+
8,
|
|
1759
|
+
16,
|
|
1760
|
+
32,
|
|
1761
|
+
64,
|
|
1762
|
+
128,
|
|
1763
|
+
256,
|
|
1764
|
+
512,
|
|
1765
|
+
1024,
|
|
1766
|
+
2048,
|
|
1767
|
+
4096,
|
|
1768
|
+
8192,
|
|
1769
|
+
16384,
|
|
1770
|
+
32768,
|
|
1771
|
+
16384,
|
|
1772
|
+
32768,
|
|
1773
|
+
65536,
|
|
1774
|
+
131072
|
|
1775
|
+
];
|
|
1776
|
+
class FI {
|
|
1777
|
+
constructor(I = 128, A = "indutnyJavascript", r = !0) {
|
|
1778
|
+
if (!qA.includes(I))
|
|
1779
|
+
throw new Error("Size must be a power of 2 between 4 and 131072");
|
|
1780
|
+
this.size = I, this.outputArr = new Float32Array(2 * I), this.subLibrary = A, this.fftLibrary = void 0;
|
|
1781
|
+
const E = this.getCurrentProfile();
|
|
1782
|
+
E && r ? this.setSubLibrary(E.fastestSubLibrary) : this.setSubLibrary(A);
|
|
1783
|
+
}
|
|
1784
|
+
availableSubLibraries() {
|
|
1785
|
+
return [
|
|
1786
|
+
"kissWasm",
|
|
1787
|
+
"indutnyModifiedJavascript",
|
|
1788
|
+
"indutnyJavascript",
|
|
1789
|
+
"crossWasm",
|
|
1790
|
+
"mljsJavascript",
|
|
1791
|
+
"nockertJavascript",
|
|
1792
|
+
"nayuki3Wasm",
|
|
1793
|
+
"nayukiJavascript",
|
|
1794
|
+
//"dntjJavascript", // need to figure out the precise scale factor before we can use this one, mainly due to unit tests
|
|
1795
|
+
"kissfftmodifiedWasm"
|
|
1796
|
+
// currently doesnt perform any better
|
|
1797
|
+
//"viljaWasm"
|
|
1798
|
+
];
|
|
1799
|
+
}
|
|
1800
|
+
// A subset of the libraries known to be quickest, and removing ones that are too similar to others
|
|
1801
|
+
availableSubLibrariesQuick() {
|
|
1802
|
+
return ["kissWasm", "indutnyModifiedJavascript"];
|
|
1803
|
+
}
|
|
1804
|
+
getCurrentProfile() {
|
|
1805
|
+
if (!(typeof localStorage > "u") && localStorage.getItem("webfftProfile"))
|
|
1806
|
+
return JSON.parse(localStorage.getItem("webfftProfile"));
|
|
1807
|
+
}
|
|
1808
|
+
setSubLibrary(I) {
|
|
1809
|
+
switch (I) {
|
|
1810
|
+
case "nayukiJavascript":
|
|
1811
|
+
this.fftLibrary = new OA(this.size);
|
|
1812
|
+
break;
|
|
1813
|
+
case "nayuki3Wasm":
|
|
1814
|
+
this.fftLibrary = new gI(this.size);
|
|
1815
|
+
break;
|
|
1816
|
+
case "kissWasm":
|
|
1817
|
+
this.fftLibrary = new xA(this.size);
|
|
1818
|
+
break;
|
|
1819
|
+
case "crossWasm":
|
|
1820
|
+
this.fftLibrary = new XA(this.size), this.size > 16384 && (this.fftLibrary = new LA(this.size));
|
|
1821
|
+
break;
|
|
1822
|
+
case "nockertJavascript":
|
|
1823
|
+
this.fftLibrary = new BI(this.size);
|
|
1824
|
+
break;
|
|
1825
|
+
//case "dntjJavascript":
|
|
1826
|
+
// this.fftLibrary = new DntjWebFftWrapperJavascript(this.size);
|
|
1827
|
+
// break;
|
|
1828
|
+
case "indutnyJavascript":
|
|
1829
|
+
this.fftLibrary = new LA(this.size);
|
|
1830
|
+
break;
|
|
1831
|
+
case "mljsJavascript":
|
|
1832
|
+
this.fftLibrary = new nI(this.size);
|
|
1833
|
+
break;
|
|
1834
|
+
case "kissfftmodifiedWasm":
|
|
1835
|
+
this.fftLibrary = new fI(this.size);
|
|
1836
|
+
break;
|
|
1837
|
+
//case "viljaWasm":
|
|
1838
|
+
// this.fftLibrary = new ViljaFftWrapperWasm(this.size);
|
|
1839
|
+
case "indutnyModifiedJavascript":
|
|
1840
|
+
this.fftLibrary = new HA(this.size);
|
|
1841
|
+
break;
|
|
1842
|
+
default:
|
|
1843
|
+
throw new Error("Invalid sublibrary");
|
|
1844
|
+
}
|
|
1845
|
+
}
|
|
1846
|
+
fft(I) {
|
|
1847
|
+
if (I.length !== 2 * this.size)
|
|
1848
|
+
throw new Error("Input array length must be == 2 * size");
|
|
1849
|
+
return this.outputArr = this.fftLibrary.fft(I), this.outputArr;
|
|
1850
|
+
}
|
|
1851
|
+
// convinience function for people who want to use real-valued input.
|
|
1852
|
+
// note that you still have to give it a size that is 2x your real-valued input length!!
|
|
1853
|
+
// it doesn't actually speed it up by 2x
|
|
1854
|
+
// output is complex but the lenght of inputArr because the negative freqs are removed
|
|
1855
|
+
fftr(I) {
|
|
1856
|
+
var { outputArr: A, fftLibrary: r, size: E } = this;
|
|
1857
|
+
if (I.length !== E)
|
|
1858
|
+
throw new Error("Input array length must be == size");
|
|
1859
|
+
const B = new Float32Array(2 * E);
|
|
1860
|
+
B.fill(0);
|
|
1861
|
+
for (let Q = 0; Q < E; Q++)
|
|
1862
|
+
B[2 * Q] = I[Q];
|
|
1863
|
+
return A = r.fft(B), A.slice(E, E * 2);
|
|
1864
|
+
}
|
|
1865
|
+
// takes in an array of arrays each of length 2*size. the outter array length must also be a power of two. only supports complex
|
|
1866
|
+
fft2d(I) {
|
|
1867
|
+
const A = I[0].length / 2, r = I.length;
|
|
1868
|
+
if (A !== this.size)
|
|
1869
|
+
throw new Error("Inner array length must be == 2 * size");
|
|
1870
|
+
if (!qA.includes(r))
|
|
1871
|
+
throw new Error(
|
|
1872
|
+
"Outter array length must be a power of 2 between 4 and 131072"
|
|
1873
|
+
);
|
|
1874
|
+
let E = [];
|
|
1875
|
+
for (let e = 0; e < r; e++)
|
|
1876
|
+
this.outputArr = this.fft(I[e]), E.push(this.outputArr);
|
|
1877
|
+
this.dispose(), this.size = r, this.setSubLibrary(this.subLibrary);
|
|
1878
|
+
let B = [];
|
|
1879
|
+
for (let e = 0; e < A; e++) {
|
|
1880
|
+
const a = new Float32Array(2 * r);
|
|
1881
|
+
a.fill(0);
|
|
1882
|
+
for (let w = 0; w < r; w++)
|
|
1883
|
+
a[2 * w] = E[w][2 * e], a[2 * w + 1] = E[w][2 * e + 1];
|
|
1884
|
+
let t = new Float32Array(2 * r);
|
|
1885
|
+
t = this.fft(a), B.push(t);
|
|
1886
|
+
}
|
|
1887
|
+
let Q = [];
|
|
1888
|
+
for (let e = 0; e < r; e++) {
|
|
1889
|
+
let a = new Float32Array(2 * A);
|
|
1890
|
+
for (let t = 0; t < A; t++)
|
|
1891
|
+
a[2 * t] = B[t][2 * e], a[2 * t + 1] = B[t][2 * e + 1];
|
|
1892
|
+
Q.push(a);
|
|
1893
|
+
}
|
|
1894
|
+
return this.dispose(), this.size = A, this.setSubLibrary(this.subLibrary), Q;
|
|
1895
|
+
}
|
|
1896
|
+
profile(I = 1, A = !0, r = !1) {
|
|
1897
|
+
if (!A && this.getCurrentProfile())
|
|
1898
|
+
return this.getCurrentProfile();
|
|
1899
|
+
const E = performance.now();
|
|
1900
|
+
let B;
|
|
1901
|
+
r ? B = this.availableSubLibrariesQuick() : B = this.availableSubLibraries();
|
|
1902
|
+
let Q = [];
|
|
1903
|
+
const e = I / B.length / 2;
|
|
1904
|
+
for (let F = 0; F < B.length; F++) {
|
|
1905
|
+
this.setSubLibrary(B[F]);
|
|
1906
|
+
const h = new Float32Array(2 * this.size);
|
|
1907
|
+
for (let c = 0; c < this.size; c++)
|
|
1908
|
+
h[2 * c] = Math.random() - 0.5, h[2 * c + 1] = Math.random() - 0.5;
|
|
1909
|
+
let D = performance.now();
|
|
1910
|
+
for (; (performance.now() - D) / 1e3 < e; )
|
|
1911
|
+
this.fft(h);
|
|
1912
|
+
D = performance.now();
|
|
1913
|
+
let s = 0;
|
|
1914
|
+
for (; (performance.now() - D) / 1e3 < e; )
|
|
1915
|
+
this.fft(h), s++;
|
|
1916
|
+
Q.push(1e3 * s / (performance.now() - D)), this.dispose();
|
|
1917
|
+
}
|
|
1918
|
+
const a = (performance.now() - E) / 1e3;
|
|
1919
|
+
let t = Q.indexOf(Math.max(...Q));
|
|
1920
|
+
const w = {
|
|
1921
|
+
fftsPerSecond: Q,
|
|
1922
|
+
subLibraries: B,
|
|
1923
|
+
totalElapsed: a,
|
|
1924
|
+
fastestSubLibrary: B[t]
|
|
1925
|
+
};
|
|
1926
|
+
return console.log("Setting sublibrary to", w.fastestSubLibrary), this.setSubLibrary(w.fastestSubLibrary), typeof localStorage < "u" && localStorage.setItem("webfftProfile", JSON.stringify(w)), w;
|
|
1927
|
+
}
|
|
1928
|
+
async checkBrowserCapabilities() {
|
|
1929
|
+
return await hI();
|
|
1930
|
+
}
|
|
1931
|
+
dispose() {
|
|
1932
|
+
this.fftLibrary && this.fftLibrary.dispose !== void 0 && this.fftLibrary.dispose();
|
|
1933
|
+
}
|
|
1934
|
+
}
|
|
1935
|
+
class RI {
|
|
1936
|
+
constructor(I) {
|
|
1937
|
+
if (this.EPS = 1e-20, this.INV_LN10 = 1 / Math.LN10, (I & I - 1) !== 0)
|
|
1938
|
+
throw new Error("FFT size must be power of two");
|
|
1939
|
+
this.fftSize = I, this.fft = new FI(I);
|
|
1940
|
+
const r = this.fft.profile(0.5).fastestSubLibrary;
|
|
1941
|
+
this.fft.setSubLibrary(r), this.complexIn = new Float32Array(I * 2), this.spectrum = new Float32Array(I / 2 + 1);
|
|
1942
|
+
}
|
|
1943
|
+
size() {
|
|
1944
|
+
return this.fftSize;
|
|
1945
|
+
}
|
|
1946
|
+
compute(I, A, r) {
|
|
1947
|
+
const E = this.fftSize, B = this.complexIn;
|
|
1948
|
+
for (let h = 0; h < E; h++) {
|
|
1949
|
+
const D = h << 1;
|
|
1950
|
+
B[D] = I[h], B[D + 1] = 0;
|
|
1951
|
+
}
|
|
1952
|
+
const Q = this.fft.fft(B), e = this.spectrum, a = e.length, t = 1 / (r - A), w = this.EPS, F = this.INV_LN10;
|
|
1953
|
+
for (let h = 0; h < a; h++) {
|
|
1954
|
+
const D = h << 1, s = Q[D], c = Q[D + 1], l = s * s + c * c + w, R = (10 * Math.log(l) * F - A) * t;
|
|
1955
|
+
e[h] = R < 0 ? 0 : R > 1 ? 1 : R;
|
|
1956
|
+
}
|
|
1957
|
+
return e;
|
|
1958
|
+
}
|
|
1959
|
+
dispose() {
|
|
1960
|
+
}
|
|
1961
|
+
}
|
|
1962
|
+
class lI {
|
|
1963
|
+
constructor(I) {
|
|
1964
|
+
this.data = null, this.showRealTimeScale = !1, this.startTime = 0, this.config = I;
|
|
1965
|
+
}
|
|
1966
|
+
setData(I) {
|
|
1967
|
+
const A = this.isTimestamped(I);
|
|
1968
|
+
if (this.showRealTimeScale = A, A) {
|
|
1969
|
+
if (I.length === 0) {
|
|
1970
|
+
this.data = new Float32Array(0);
|
|
1971
|
+
return;
|
|
1972
|
+
}
|
|
1973
|
+
this.startTime = I[0][0];
|
|
1974
|
+
const r = new Float32Array(I.length);
|
|
1975
|
+
for (let E = 0; E < I.length; E++)
|
|
1976
|
+
r[E] = I[E][1];
|
|
1977
|
+
this.data = r;
|
|
1978
|
+
} else
|
|
1979
|
+
this.data = I, this.startTime = 0;
|
|
1980
|
+
}
|
|
1981
|
+
isTimestamped(I) {
|
|
1982
|
+
return Array.isArray(I) && I.length > 0 && Array.isArray(I[0]);
|
|
1983
|
+
}
|
|
1984
|
+
updateConfig(I) {
|
|
1985
|
+
this.config = { ...this.config, ...I };
|
|
1986
|
+
}
|
|
1987
|
+
getDuration() {
|
|
1988
|
+
return this.data ? this.data.length / this.config.sampleRate : 0;
|
|
1989
|
+
}
|
|
1990
|
+
}
|
|
1991
|
+
const NI = (o, I) => {
|
|
1992
|
+
const A = new Float32Array(o);
|
|
1993
|
+
if (I === "rectangular")
|
|
1994
|
+
return A.fill(1);
|
|
1995
|
+
const r = 2 * Math.PI, E = o - 1;
|
|
1996
|
+
switch (I) {
|
|
1997
|
+
case "hann":
|
|
1998
|
+
for (let B = 0; B < o; B++)
|
|
1999
|
+
A[B] = 0.5 * (1 - Math.cos(r * B / E));
|
|
2000
|
+
break;
|
|
2001
|
+
case "hamming":
|
|
2002
|
+
for (let B = 0; B < o; B++)
|
|
2003
|
+
A[B] = 0.54 - 0.46 * Math.cos(r * B / E);
|
|
2004
|
+
break;
|
|
2005
|
+
case "blackman":
|
|
2006
|
+
for (let B = 0; B < o; B++) {
|
|
2007
|
+
const Q = r * B / E;
|
|
2008
|
+
A[B] = 0.42 - 0.5 * Math.cos(Q) + 0.08 * Math.cos(2 * Q);
|
|
2009
|
+
}
|
|
2010
|
+
break;
|
|
2011
|
+
}
|
|
2012
|
+
return A;
|
|
2013
|
+
};
|
|
2014
|
+
class yI {
|
|
2015
|
+
constructor(I, A, r, E) {
|
|
2016
|
+
this.image = null, this.isProcessing = !1, this.id = I, this.startIndex = A, this.endIndex = r, this.startTime = A / E, this.endTime = r / E;
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
class MI {
|
|
2020
|
+
constructor(I) {
|
|
2021
|
+
let A;
|
|
2022
|
+
I.fftExecutor ? (A = I.fftExecutor.size(), this.fft = I.fftExecutor) : (A = I.fftSize ?? 1024, this.fft = new RI(A)), this.windowBuffer = NI(I.windowSize, I.windowType), this.inputBuf = new Float32Array(A);
|
|
2023
|
+
}
|
|
2024
|
+
process(I, A, r, E, B) {
|
|
2025
|
+
const { windowSize: Q, minDb: e, maxDb: a, overlap: t } = E, w = Math.max(1, Q - t), F = this.fft.size(), D = Math.ceil((r - A) / w), s = (F >> 1) + 1;
|
|
2026
|
+
if (D <= 0)
|
|
2027
|
+
return new ImageData(1, 1);
|
|
2028
|
+
const c = new ImageData(D, s), l = c.data, R = this.inputBuf, f = this.windowBuffer;
|
|
2029
|
+
let y = 0, G = 0;
|
|
2030
|
+
for (let H = 0; H < Q; H++) {
|
|
2031
|
+
const J = A + H;
|
|
2032
|
+
J < I.length && (y += I[J], G++);
|
|
2033
|
+
}
|
|
2034
|
+
for (let H = 0; H < D; H++) {
|
|
2035
|
+
const J = A + H * w, p = G > 0 ? y / G : 0, P = Math.min(Q, I.length - J);
|
|
2036
|
+
let k = 0;
|
|
2037
|
+
for (; k < P; k++)
|
|
2038
|
+
R[k] = (I[J + k] - p) * f[k];
|
|
2039
|
+
for (; k < F; k++)
|
|
2040
|
+
R[k] = 0;
|
|
2041
|
+
const S = this.fft.compute(R, e, a);
|
|
2042
|
+
for (let T = 0; T < s; T++) {
|
|
2043
|
+
const K = S[T], L = B(K), m = ((s - 1 - T) * D + H) * 4;
|
|
2044
|
+
l[m] = L[0], l[m + 1] = L[1], l[m + 2] = L[2], l[m + 3] = 255;
|
|
2045
|
+
}
|
|
2046
|
+
if (H + 1 < D) {
|
|
2047
|
+
for (let K = 0; K < w; K++) {
|
|
2048
|
+
const L = J + K;
|
|
2049
|
+
L < I.length && (y -= I[L], G--);
|
|
2050
|
+
}
|
|
2051
|
+
const T = J + Q;
|
|
2052
|
+
for (let K = 0; K < w; K++) {
|
|
2053
|
+
const L = T + K;
|
|
2054
|
+
L < I.length && (y += I[L], G++);
|
|
2055
|
+
}
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
2058
|
+
return c;
|
|
2059
|
+
}
|
|
2060
|
+
dispose() {
|
|
2061
|
+
this.fft.dispose();
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
class GI {
|
|
2065
|
+
constructor(I) {
|
|
2066
|
+
this.model = I;
|
|
2067
|
+
}
|
|
2068
|
+
draw(I, A, r, E, B, Q) {
|
|
2069
|
+
I.save(), I.strokeStyle = "#464646", I.fillStyle = "#252525", I.font = "11px monospace", I.textBaseline = "top", I.lineWidth = 1;
|
|
2070
|
+
const [e, a] = E, [t, w] = B, F = a - e, { left: h, bottom: D, top: s, right: c } = Q, l = h, R = s, f = A - h - c, y = r - D - s;
|
|
2071
|
+
if (F <= 0) {
|
|
2072
|
+
I.restore();
|
|
2073
|
+
return;
|
|
2074
|
+
}
|
|
2075
|
+
I.beginPath();
|
|
2076
|
+
const G = R + y;
|
|
2077
|
+
I.moveTo(h, G), I.lineTo(h + f, G), I.stroke(), I.beginPath(), I.moveTo(h, R), I.lineTo(h, G), I.stroke();
|
|
2078
|
+
const H = Math.max(3, Math.floor(f / 100)), J = F / H, p = this.model.startTime;
|
|
2079
|
+
for (let u = 0; u <= H; u++) {
|
|
2080
|
+
const m = e + u * J, U = l + (m - e) / F * f;
|
|
2081
|
+
if (U < l || U > l + f)
|
|
2082
|
+
continue;
|
|
2083
|
+
I.beginPath(), I.moveTo(U, G), I.lineTo(U, G + 5), I.stroke();
|
|
2084
|
+
const x = p + m * 1e3;
|
|
2085
|
+
let Z = "";
|
|
2086
|
+
if (this.model.showRealTimeScale) {
|
|
2087
|
+
const W = new Date(x), O = W.getHours().toString().padStart(2, "0"), _ = W.getMinutes().toString().padStart(2, "0"), AA = W.getSeconds().toString().padStart(2, "0");
|
|
2088
|
+
Z = `${O}:${_}:${AA}`;
|
|
2089
|
+
} else x >= 0 && (Z = `${Math.floor(a - x / 1e3)}s`);
|
|
2090
|
+
I.textAlign = "center", I.fillText(Z, U, G + 8);
|
|
2091
|
+
}
|
|
2092
|
+
const P = w - t, k = Math.max(3, Math.floor(y / 40));
|
|
2093
|
+
let S = 1;
|
|
2094
|
+
if (P > 0 && k > 0) {
|
|
2095
|
+
const u = P / k, m = Math.pow(10, Math.floor(Math.log10(u))), U = u / m;
|
|
2096
|
+
U > 5 ? S = 10 * m : U > 2 ? S = 5 * m : U > 1 ? S = 2 * m : S = 1 * m;
|
|
2097
|
+
}
|
|
2098
|
+
const T = Math.floor(w / S) * S, K = Math.floor(t / S) * S;
|
|
2099
|
+
I.textAlign = "right", I.textBaseline = "middle";
|
|
2100
|
+
const L = S || 1;
|
|
2101
|
+
for (let u = T; u >= K; u -= L) {
|
|
2102
|
+
const m = L / 1e3;
|
|
2103
|
+
if (u > w + m || u < t - m)
|
|
2104
|
+
continue;
|
|
2105
|
+
const U = (w - u) / P, x = R + U * y;
|
|
2106
|
+
if (x < R - 1 || x > R + y + 1)
|
|
2107
|
+
continue;
|
|
2108
|
+
I.beginPath(), I.moveTo(h, x), I.lineTo(h - 5, x), I.stroke();
|
|
2109
|
+
let Z = u.toString();
|
|
2110
|
+
u % 1 !== 0 && (Z = u.toFixed(1).replace(/\.0$/, "")), I.fillText(Z, h - 8, x);
|
|
2111
|
+
}
|
|
2112
|
+
I.save(), I.translate(10, y / 2.8), I.rotate(-Math.PI / 2), I.textAlign = "right", I.fillText("Frequency (Hz)", 0, 0), I.restore();
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
function TA(o, I) {
|
|
2116
|
+
if (o <= 0)
|
|
2117
|
+
return I[0];
|
|
2118
|
+
if (o >= 1)
|
|
2119
|
+
return I[I.length - 1];
|
|
2120
|
+
const A = 1 / (I.length - 1), r = o / A | 0, E = (o - r * A) / A, B = I[r], Q = I[r + 1];
|
|
2121
|
+
return [
|
|
2122
|
+
B[0] + (Q[0] - B[0]) * E | 0,
|
|
2123
|
+
B[1] + (Q[1] - B[1]) * E | 0,
|
|
2124
|
+
B[2] + (Q[2] - B[2]) * E | 0
|
|
2125
|
+
];
|
|
2126
|
+
}
|
|
2127
|
+
const dI = [
|
|
2128
|
+
[68, 1, 84],
|
|
2129
|
+
[59, 82, 139],
|
|
2130
|
+
[33, 145, 140],
|
|
2131
|
+
[94, 201, 98],
|
|
2132
|
+
[253, 231, 37]
|
|
2133
|
+
], YI = [
|
|
2134
|
+
[0, 0, 4],
|
|
2135
|
+
[87, 16, 110],
|
|
2136
|
+
[187, 55, 84],
|
|
2137
|
+
[249, 142, 9],
|
|
2138
|
+
[252, 255, 164]
|
|
2139
|
+
];
|
|
2140
|
+
function kI(o) {
|
|
2141
|
+
return TA(o, dI);
|
|
2142
|
+
}
|
|
2143
|
+
function SI(o) {
|
|
2144
|
+
return TA(o, YI);
|
|
2145
|
+
}
|
|
2146
|
+
function UI(o) {
|
|
2147
|
+
const I = Math.floor(o * 255);
|
|
2148
|
+
return [I, I, I];
|
|
2149
|
+
}
|
|
2150
|
+
function HI(o) {
|
|
2151
|
+
const I = Math.max(0, Math.min(1, o)), A = Math.min(4 * I - 1.5, -4 * I + 4.5), r = Math.min(4 * I - 0.5, -4 * I + 3.5), E = Math.min(4 * I + 0.5, -4 * I + 2.5);
|
|
2152
|
+
return [
|
|
2153
|
+
Math.floor(Math.max(0, Math.min(1, A)) * 255),
|
|
2154
|
+
Math.floor(Math.max(0, Math.min(1, r)) * 255),
|
|
2155
|
+
Math.floor(Math.max(0, Math.min(1, E)) * 255)
|
|
2156
|
+
];
|
|
2157
|
+
}
|
|
2158
|
+
function mI(o) {
|
|
2159
|
+
let I = 0, A = 0, r = 0;
|
|
2160
|
+
return o < 0.33 ? I = o / 0.33 : o < 0.66 ? (I = 1, A = (o - 0.33) / 0.33) : (I = 1, A = 1, r = (o - 0.66) / 0.34), [Math.floor(I * 255), Math.floor(A * 255), Math.floor(r * 255)];
|
|
2161
|
+
}
|
|
2162
|
+
function vI(o) {
|
|
2163
|
+
const I = o, A = 1 - o;
|
|
2164
|
+
return [Math.floor(I * 255), Math.floor(A * 255), Math.floor(1 * 255)];
|
|
2165
|
+
}
|
|
2166
|
+
function uI(o) {
|
|
2167
|
+
return [255, Math.floor(o * 255), Math.floor((1 - o) * 255)];
|
|
2168
|
+
}
|
|
2169
|
+
function JI(o) {
|
|
2170
|
+
return [Math.floor(o * 255), Math.floor((0.5 + 0.5 * o) * 255), Math.floor(0.4 * 255)];
|
|
2171
|
+
}
|
|
2172
|
+
function LI(o) {
|
|
2173
|
+
return [255, Math.floor(o * 255), 0];
|
|
2174
|
+
}
|
|
2175
|
+
function KI(o) {
|
|
2176
|
+
return [0, Math.floor(o * 255), Math.floor((1 - 0.5 * o) * 255)];
|
|
2177
|
+
}
|
|
2178
|
+
function bI(o) {
|
|
2179
|
+
const I = o, A = 0.1 * Math.sin(o * Math.PI * 2), r = o < 0.5 ? o + A : o, E = o < 0.75 ? o + A : o;
|
|
2180
|
+
return [
|
|
2181
|
+
Math.floor(Math.min(1, I) * 255),
|
|
2182
|
+
Math.floor(Math.min(1, r) * 255),
|
|
2183
|
+
Math.floor(Math.min(1, E) * 255)
|
|
2184
|
+
];
|
|
2185
|
+
}
|
|
2186
|
+
const qI = {
|
|
2187
|
+
viridis: kI,
|
|
2188
|
+
inferno: SI,
|
|
2189
|
+
grayscale: UI,
|
|
2190
|
+
jet: HI,
|
|
2191
|
+
hot: mI,
|
|
2192
|
+
cool: vI,
|
|
2193
|
+
spring: uI,
|
|
2194
|
+
summer: JI,
|
|
2195
|
+
autumn: LI,
|
|
2196
|
+
winter: KI,
|
|
2197
|
+
bone: bI
|
|
2198
|
+
};
|
|
2199
|
+
class TI {
|
|
2200
|
+
// [R, G, B, R, G, B...] for 0..255
|
|
2201
|
+
constructor(I = "jet") {
|
|
2202
|
+
this.type = I, this.lut = new Uint8Array(256 * 3), this.generateLut();
|
|
2203
|
+
}
|
|
2204
|
+
generateLut() {
|
|
2205
|
+
const I = qI[this.type];
|
|
2206
|
+
for (let A = 0; A < 256; A++) {
|
|
2207
|
+
const r = I(A / 255), E = A * 3;
|
|
2208
|
+
this.lut[E] = r[0], this.lut[E + 1] = r[1], this.lut[E + 2] = r[2];
|
|
2209
|
+
}
|
|
2210
|
+
}
|
|
2211
|
+
getRGB(I) {
|
|
2212
|
+
const A = (I <= 0 ? 0 : I >= 1 ? 255 : I * 255 | 0) * 3;
|
|
2213
|
+
return [this.lut[A], this.lut[A + 1], this.lut[A + 2]];
|
|
2214
|
+
}
|
|
2215
|
+
setMap(I) {
|
|
2216
|
+
this.type = I, this.generateLut();
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
class pI {
|
|
2220
|
+
constructor(I) {
|
|
2221
|
+
this.chunks = /* @__PURE__ */ new Map(), this.offscreenCanvas = null, this.offscreenCtx = null, this.offscreenHelpers = /* @__PURE__ */ new Map(), this.ctx = null, this.lastW = 0, this.lastH = 0, this.lastDPR = 0, this.model = I, this.processor = new MI(I.config), this.colormap = new TI(), this.axisRenderer = new GI(I);
|
|
2222
|
+
}
|
|
2223
|
+
setColormap(I) {
|
|
2224
|
+
this.colormap.setMap(I), this.clearCache();
|
|
2225
|
+
}
|
|
2226
|
+
clearCache() {
|
|
2227
|
+
this.chunks.clear(), this.offscreenHelpers.clear();
|
|
2228
|
+
}
|
|
2229
|
+
dispose() {
|
|
2230
|
+
this.clearCache(), this.offscreenCanvas = null, this.offscreenCtx = null, this.ctx = null, this.processor.dispose();
|
|
2231
|
+
}
|
|
2232
|
+
setupHiDPICanvas(I, A, r) {
|
|
2233
|
+
const E = window.devicePixelRatio || 1;
|
|
2234
|
+
I.style.width = `${A}px`, I.style.height = `${r}px`, I.width = Math.round(A * E), I.height = Math.round(r * E);
|
|
2235
|
+
const B = I.getContext("2d", { alpha: !0 });
|
|
2236
|
+
return B.resetTransform(), B.scale(E, E), B.imageSmoothingEnabled = !1, this.offscreenCanvas || (this.offscreenCanvas = document.createElement("canvas")), this.offscreenCanvas.width = I.width, this.offscreenCanvas.height = I.height, this.offscreenCtx = this.offscreenCanvas.getContext("2d", { alpha: !0 }), this.offscreenCtx.resetTransform(), this.offscreenCtx.scale(E, E), this.offscreenCtx.imageSmoothingEnabled = !1, B;
|
|
2237
|
+
}
|
|
2238
|
+
calibrateCanvas(I, A, r) {
|
|
2239
|
+
const E = window.devicePixelRatio || 1;
|
|
2240
|
+
return this.ctx && this.lastW === A && this.lastH === r && this.lastDPR === E ? this.ctx : (this.lastW = A, this.lastH = r, this.lastDPR = E, this.ctx = this.setupHiDPICanvas(I, A, r), this.ctx);
|
|
2241
|
+
}
|
|
2242
|
+
render(I) {
|
|
2243
|
+
const { canvas: A, timeRange: r, freqRange: E } = I, B = this.calibrateCanvas(A, I.width, I.height), Q = A.width / (window.devicePixelRatio || 1), e = A.height / (window.devicePixelRatio || 1), [a, t] = r, [w, F] = E, h = 50, D = 30, s = 12, c = 32, l = h, R = s, f = Q - h - c, y = e - D - s;
|
|
2244
|
+
if (B.clearRect(0, 0, Q, e), !this.model.data)
|
|
2245
|
+
return;
|
|
2246
|
+
const G = this.model.config.sampleRate, H = this.model.config, J = Math.max(1, H.windowSize - H.overlap), P = 10 * G, S = Math.ceil(P / J) * J, T = Math.floor(Math.max(0, a * G)), K = Math.floor(Math.min(this.model.data.length, t * G));
|
|
2247
|
+
if (K <= T)
|
|
2248
|
+
return;
|
|
2249
|
+
const L = Math.floor(T / S), u = Math.floor(K / S);
|
|
2250
|
+
for (let m = L; m <= u; m++) {
|
|
2251
|
+
const U = m * S, x = Math.min((m + 1) * S, this.model.data.length), Z = `chunk_${m}`;
|
|
2252
|
+
let W = this.chunks.get(Z);
|
|
2253
|
+
if (!W) {
|
|
2254
|
+
W = new yI(Z, U, x, G), this.chunks.set(Z, W);
|
|
2255
|
+
const O = this.processor.process(
|
|
2256
|
+
this.model.data,
|
|
2257
|
+
U,
|
|
2258
|
+
x,
|
|
2259
|
+
H,
|
|
2260
|
+
(_) => this.colormap.getRGB(_)
|
|
2261
|
+
);
|
|
2262
|
+
createImageBitmap(O).then((_) => {
|
|
2263
|
+
W && (W.image = _, this.offscreenCtx.save(), this.offscreenCtx.beginPath(), this.offscreenCtx.rect(l, R, f, y), this.offscreenCtx.clip(), this.drawChunk(
|
|
2264
|
+
this.offscreenCtx,
|
|
2265
|
+
W,
|
|
2266
|
+
a,
|
|
2267
|
+
t,
|
|
2268
|
+
w,
|
|
2269
|
+
F,
|
|
2270
|
+
l,
|
|
2271
|
+
R,
|
|
2272
|
+
f,
|
|
2273
|
+
y
|
|
2274
|
+
), this.offscreenCtx.restore());
|
|
2275
|
+
});
|
|
2276
|
+
}
|
|
2277
|
+
W.image && (this.offscreenCtx.save(), this.offscreenCtx.beginPath(), this.offscreenCtx.rect(l, R, f, y), this.offscreenCtx.clip(), this.drawChunk(
|
|
2278
|
+
this.offscreenCtx,
|
|
2279
|
+
W,
|
|
2280
|
+
a,
|
|
2281
|
+
t,
|
|
2282
|
+
w,
|
|
2283
|
+
F,
|
|
2284
|
+
l,
|
|
2285
|
+
R,
|
|
2286
|
+
f,
|
|
2287
|
+
y
|
|
2288
|
+
), this.offscreenCtx.restore());
|
|
2289
|
+
}
|
|
2290
|
+
B.drawImage(this.offscreenCanvas, 0, 0, Q, e), this.axisRenderer.draw(B, Q, e, r, E, {
|
|
2291
|
+
left: h,
|
|
2292
|
+
bottom: D,
|
|
2293
|
+
top: s,
|
|
2294
|
+
right: c
|
|
2295
|
+
});
|
|
2296
|
+
}
|
|
2297
|
+
drawChunk(I, A, r, E, B, Q, e, a, t, w) {
|
|
2298
|
+
if (!A.image)
|
|
2299
|
+
return;
|
|
2300
|
+
const F = E - r, h = this.model.config.sampleRate, D = h / 2, s = A.startIndex / h, c = A.endIndex / h, l = e + (s - r) / F * t, R = e + (c - r) / F * t;
|
|
2301
|
+
if (R <= e || l >= e + t)
|
|
2302
|
+
return;
|
|
2303
|
+
const f = Math.max(e, l), y = Math.min(e + t, R) - f, G = A.image.width, H = (f - l) / (R - l) * G, J = y / (R - l) * G, p = Math.min(Q, D), P = Math.max(B, 0), k = A.image.height, S = (1 - p / D) * k, K = (1 - P / D) * k - S;
|
|
2304
|
+
if (K > 0) {
|
|
2305
|
+
const L = a, u = w;
|
|
2306
|
+
I.drawImage(A.image, H, S, J, K, f, L, y, u);
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
class PI {
|
|
2311
|
+
constructor(I) {
|
|
2312
|
+
this.model = new lI(I), this.renderer = new pI(this.model);
|
|
2313
|
+
}
|
|
2314
|
+
setData(I) {
|
|
2315
|
+
this.model.setData(I), this.renderer.clearCache();
|
|
2316
|
+
}
|
|
2317
|
+
destroy() {
|
|
2318
|
+
this.renderer.dispose();
|
|
2319
|
+
}
|
|
2320
|
+
render(I) {
|
|
2321
|
+
const A = this.model.config.sampleRate / 2, r = I.freqRange || [0, A];
|
|
2322
|
+
this.renderer.render({
|
|
2323
|
+
...I,
|
|
2324
|
+
freqRange: r
|
|
2325
|
+
});
|
|
2326
|
+
}
|
|
2327
|
+
updateConfig(I) {
|
|
2328
|
+
this.model.updateConfig(I), (I.windowSize || I.windowType || I.minDb || I.maxDb || I.fftSize || I.overlap) && this.renderer.clearCache();
|
|
2329
|
+
}
|
|
2330
|
+
setColormap(I) {
|
|
2331
|
+
this.renderer.setColormap(I);
|
|
2332
|
+
}
|
|
2333
|
+
getDuration() {
|
|
2334
|
+
return this.model.getDuration();
|
|
2335
|
+
}
|
|
2336
|
+
}
|
|
2337
|
+
export {
|
|
2338
|
+
RI as FFTExecutor,
|
|
2339
|
+
PI as Spectrogram
|
|
2340
|
+
};
|
|
2341
|
+
//# sourceMappingURL=spectrogram-js.es.js.map
|