sophontalk-services 0.0.4 → 0.0.5

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.
@@ -1,460 +1,108 @@
1
- const g = 16e3, y = 25, _ = 10, M = 80, E = 4, b = 0.97, R = 1e-10, k = 20, I = !0, v = !0, L = 25, x = 40, F = (a) => {
2
- if (a === 128) return 4;
3
- if (a === 96) return 3;
4
- throw new Error(`Unsupported crop size: ${a}. Only nano (96) and tiny (128) are supported.`);
5
- }, C = (a, n, e) => {
6
- if (n <= 1) return { nextIndex: 0, nextDirection: 1 };
7
- let t = a + e, r = e;
8
- return t >= n ? (t = n - 2, r = -1) : t < 0 && (t = 1, r = 1), { nextIndex: t, nextDirection: r };
1
+ import { env as l } from "onnxruntime-web";
2
+ const m = 16e3, k = 25, u = 10, f = 80, p = 4, g = 0.97, _ = 1e-10, M = 20, R = !0, F = !0, w = 25, L = 1e3 / w, y = (s) => {
3
+ if (s === 128) return 4;
4
+ if (s === 96) return 3;
5
+ throw new Error(`Unsupported crop size: ${s}. Only nano (96) and tiny (128) are supported.`);
6
+ }, P = (s, e, t) => {
7
+ if (e <= 1) return { nextIndex: 0, nextDirection: 1 };
8
+ let r = s + t, a = t;
9
+ return r >= e ? (r = e - 2, a = -1) : r < 0 && (r = 1, a = 1), { nextIndex: r, nextDirection: a };
9
10
  };
10
- async function U(a = {}) {
11
+ async function b(s = {}) {
11
12
  const {
12
- jsonUrl: n = "/complete_dataset.json",
13
- zipUrl: e = "/processed_images.zip"
14
- } = a, [t, r] = await Promise.all([
15
- fetch(n),
16
- fetch(e)
13
+ jsonUrl: e = "/complete_dataset.json",
14
+ zipUrl: t = "/processed_images.zip"
15
+ } = s, [r, a] = await Promise.all([
16
+ fetch(e),
17
+ fetch(t)
17
18
  ]);
18
- if (!t.ok) throw new Error(`无法加载 ${n}`);
19
19
  if (!r.ok) throw new Error(`无法加载 ${e}`);
20
- const o = await t.json(), c = await r.arrayBuffer();
20
+ if (!a.ok) throw new Error(`无法加载 ${t}`);
21
+ const o = await r.json(), c = await a.arrayBuffer();
21
22
  return { dataset: o, zipBuffer: c };
22
23
  }
23
- const h = `import x from "fft.js";
24
- import { create as O, ConverterType as H } from "@alexanderolsen/libsamplerate-js";
25
- const y = 16e3, U = 25, D = 10, u = 80, S = 4, W = 0.97, L = 1e-10, b = 20, h = Math.round(U * y / 1e3), C = Math.round(D * y / 1e3), k = (e) => {
26
- if (e <= 0) return 1;
27
- let t = 1;
28
- for (; t < e; ) t *= 2;
29
- return t;
30
- }, P = k(h), N = new x(P), v = new Float32Array(h), G = () => {
31
- if (h <= 1) return;
32
- const e = 2 * Math.PI / (h - 1);
33
- for (let t = 0; t < h; t++)
34
- v[t] = 0.5 - 0.5 * Math.cos(t * e);
35
- };
36
- G();
37
- function Q(e, t, o, a = 20, s) {
38
- s = s || o / 2;
39
- const i = (n) => 700 * (Math.exp(n / 1127) - 1), r = (n) => 1127 * Math.log(1 + n / 700), l = r(a), A = r(s), w = new Float32Array(e + 2);
40
- for (let n = 0; n < e + 2; n++)
41
- w[n] = l + (A - l) * n / (e + 1);
42
- const _ = w.map(i).map((n) => n * t / o), f = Math.floor(t / 2) + 1, m = [];
43
- for (let n = 1; n <= e; n++) {
44
- const c = _[n - 1], F = _[n], M = _[n + 1], I = Math.ceil(c), T = Math.floor(M), E = Math.max(0, I), p = Math.min(f - 1, T), B = p - E + 1;
45
- if (B <= 0) {
46
- m.push({ startBin: 0, values: new Float32Array(0) });
47
- continue;
48
- }
49
- const R = new Float32Array(B);
50
- for (let d = E; d <= p; d++) {
51
- let g = 0;
52
- d <= F ? g = (d - c) / (F - c) : g = (M - d) / (M - F), R[d - E] = g;
53
- }
54
- m.push({ startBin: E, values: R });
55
- }
56
- return m;
57
- }
58
- const q = Q(
59
- u,
60
- P,
61
- y,
62
- b
63
- );
64
- function K(e) {
65
- for (let t = 0; t < e.length; t++)
66
- e[t] *= v[t];
67
- }
68
- function Y(e, t) {
69
- for (let o = e.length - 1; o > 0; o--)
70
- e[o] -= t * e[o - 1];
71
- e[0] -= t * e[0];
72
- }
73
- function V(e) {
74
- const t = e.length;
75
- if (t === 0) return;
76
- let o = 0;
77
- for (let s = 0; s < t; s++) o += e[s];
78
- const a = o / t;
79
- for (let s = 0; s < t; s++) e[s] -= a;
80
- }
81
- function Z(e, t) {
82
- const o = e.length;
83
- for (let a = 0; a < o; a++) {
84
- const s = t[a * 2], i = t[a * 2 + 1];
85
- e[a] = s * s + i * i;
86
- }
87
- }
88
- function j(e) {
89
- const t = e.length;
90
- if (t < 2) return;
91
- let o = 0;
92
- for (let r = 0; r < t; r++) o += e[r];
93
- const a = o / t;
94
- let s = 0;
95
- for (let r = 0; r < t; r++) {
96
- const l = e[r] - a;
97
- s += l * l;
98
- }
99
- const i = Math.sqrt(s / (t - 1));
100
- if (i > 1e-8) {
101
- const r = 1 / i;
102
- for (let l = 0; l < t; l++)
103
- e[l] = (e[l] - a) * r;
104
- } else
105
- for (let r = 0; r < t; r++)
106
- e[r] -= a;
107
- }
108
- async function z(e) {
109
- let t = e.leftChannel;
110
- if (e.rightChannel) {
111
- const f = e.rightChannel, m = new Float32Array(t.length);
112
- for (let n = 0; n < t.length; n++)
113
- m[n] = (t[n] + f[n]) * 0.5;
114
- t = m;
115
- }
116
- if (e.sampleRate !== y) {
117
- const f = await O(1, e.sampleRate, y, {
118
- converterType: H.SRC_SINC_MEDIUM_QUALITY
119
- });
120
- t = f.simple(t), f.destroy();
121
- }
122
- const o = Math.floor((t.length - h) / C) + 1;
123
- if (o <= 0)
124
- throw new Error("特征提取失败:音频时长过短。");
125
- const a = Math.ceil(o / S) * S, s = a * u, i = new Float32Array(s), r = new Float32Array(h), l = N.createComplexArray(), A = N.createComplexArray(), w = new Float32Array(Math.floor(P / 2) + 1);
126
- for (let f = 0; f < o; f++) {
127
- const m = f * C;
128
- r.set(t.subarray(m, m + h)), V(r), Y(r, W), K(r), l.fill(0);
129
- for (let c = 0; c < h; c++)
130
- l[c * 2] = r[c];
131
- N.transform(A, l), Z(w, A);
132
- const n = f * u;
133
- for (let c = 0; c < u; c++) {
134
- const F = q[c];
135
- let M = 0;
136
- const I = F.values, T = F.startBin, E = I.length;
137
- for (let p = 0; p < E; p++)
138
- M += w[T + p] * I[p];
139
- M = M < L ? L : M, i[n + c] = Math.log(M);
140
- }
141
- }
142
- if (a > o) {
143
- const f = (o - 1) * u, m = f + u, n = i.subarray(f, m);
144
- for (let c = o; c < a; c++)
145
- i.set(n, c * u);
146
- }
147
- j(i);
148
- const _ = a / S;
149
- return {
150
- features: i,
151
- dimensions: [_, S, u]
152
- };
153
- }
154
- self.addEventListener(
155
- "message",
156
- async (e) => {
157
- try {
158
- const t = e.data, o = await z(t);
159
- self.postMessage(
160
- { status: "success", payload: o },
161
- { transfer: [o.features.buffer] }
162
- );
163
- } catch (t) {
164
- self.postMessage({ status: "error", error: t.message });
165
- }
166
- }
167
- );
168
- `, u = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", h], { type: "text/javascript;charset=utf-8" });
169
- function p(a) {
170
- let n;
171
- try {
172
- if (n = u && (self.URL || self.webkitURL).createObjectURL(u), !n) throw "";
173
- const e = new Worker(n, {
174
- type: "module",
175
- name: a?.name
176
- });
177
- return e.addEventListener("error", () => {
178
- (self.URL || self.webkitURL).revokeObjectURL(n);
179
- }), e;
180
- } catch {
181
- return new Worker(
182
- "data:text/javascript;charset=utf-8," + encodeURIComponent(h),
183
- {
184
- type: "module",
185
- name: a?.name
186
- }
187
- );
188
- }
189
- }
190
- class A {
191
- worker = new p();
192
- async process(n) {
193
- const e = n.getChannelData(0), t = n.numberOfChannels > 1 ? n.getChannelData(1) : void 0, r = {
194
- leftChannel: e,
195
- rightChannel: t,
196
- sampleRate: n.sampleRate
197
- }, o = [e.buffer];
198
- return t && o.push(t.buffer), new Promise((c, f) => {
199
- const l = (s) => {
200
- s.data?.status === "success" ? (this.worker.removeEventListener("message", l), this.worker.removeEventListener("error", i), c(s.data.payload)) : s.data?.status === "error" && (this.worker.removeEventListener("message", l), this.worker.removeEventListener("error", i), f(new Error(s.data.error || "特征提取失败")));
201
- }, i = (s) => {
202
- this.worker.removeEventListener("message", l), this.worker.removeEventListener("error", i), f(s);
24
+ class v {
25
+ worker = new Worker(
26
+ new URL(
27
+ /* @vite-ignore */
28
+ "./workers/feature.worker.js",
29
+ import.meta.url
30
+ ),
31
+ { type: "module" }
32
+ );
33
+ async process(e) {
34
+ const t = e.getChannelData(0), r = e.numberOfChannels > 1 ? e.getChannelData(1) : void 0, a = {
35
+ leftChannel: t,
36
+ rightChannel: r,
37
+ sampleRate: e.sampleRate
38
+ }, o = [t.buffer];
39
+ return r && o.push(r.buffer), new Promise((c, d) => {
40
+ const i = (n) => {
41
+ n.data?.status === "success" ? (this.worker.removeEventListener("message", i), this.worker.removeEventListener("error", h), c(n.data.payload)) : n.data?.status === "error" && (this.worker.removeEventListener("message", i), this.worker.removeEventListener("error", h), d(new Error(n.data.error || "特征提取失败")));
42
+ }, h = (n) => {
43
+ this.worker.removeEventListener("message", i), this.worker.removeEventListener("error", h), d(n);
203
44
  };
204
- this.worker.addEventListener("message", l), this.worker.addEventListener("error", i), this.worker.postMessage(r, o);
45
+ this.worker.addEventListener("message", i), this.worker.addEventListener("error", h), this.worker.postMessage(a, o);
205
46
  });
206
47
  }
207
48
  dispose() {
208
49
  this.worker.terminate();
209
50
  }
210
51
  }
211
- const d = `import { env as k, InferenceSession as $, Tensor as W } from "onnxruntime-web";
212
- import q from "jszip";
213
- const V = 80, G = 4, H = 25, j = 1e3 / H, J = (t) => {
214
- if (t === 128) return 4;
215
- if (t === 96) return 3;
216
- throw new Error(\`Unsupported crop size: \${t}. Only nano (96) and tiny (128) are supported.\`);
217
- }, Q = (t, e, n) => {
218
- if (e <= 1) return { nextIndex: 0, nextDirection: 1 };
219
- let a = t + n, s = n;
220
- return a >= e ? (a = e - 2, s = -1) : a < 0 && (a = 1, s = 1), { nextIndex: a, nextDirection: s };
221
- };
222
- k.wasm.numThreads = 1;
223
- const Z = () => typeof navigator < "u" && !!navigator.gpu, F = 32;
224
- let _ = null, R = null, x = null, L = null;
225
- const w = {
226
- tensors: /* @__PURE__ */ new Map(),
227
- faceImages: /* @__PURE__ */ new Map(),
228
- fullImages: /* @__PURE__ */ new Map()
229
- };
230
- let S = 3, b = 96, O = 0, z = 0, C = null, A = null, y = null, E = null, g = null, I = null, D = null, M = null, P = !1, v = "", p = null;
231
- const T = (t) => {
232
- self.postMessage({ type: "error", payload: t });
233
- }, K = (t) => {
234
- const e = w.tensors.get(t);
235
- if (!e) throw new Error(\`Cache miss: \${t}\`);
236
- const n = b - 2 * S;
237
- return new W("float32", e, [1, 6, n, n]);
238
- }, X = (t) => {
239
- const e = w.faceImages.get(t);
240
- if (!e) throw new Error(\`Cache miss: \${t}\`);
241
- return e;
242
- }, Y = async (t) => {
243
- const e = w.fullImages.get(t);
244
- if (!e) throw new Error(\`Cache miss: \${t}\`);
245
- return await createImageBitmap(e);
246
- }, ee = (t) => {
247
- const [e, n, a, s] = t.dims, u = t.data;
248
- (!y || y.width !== s || y.height !== a) && (C.width = s, C.height = a, y = A.createImageData(s, a));
249
- const d = a * s, l = new Uint32Array(y.data.buffer), o = d, i = d * 2, c = n === 3;
250
- for (let r = 0; r < d; r++) {
251
- let m = (c ? u[r + i] : u[r]) * 255, f = (c ? u[r + o] : u[r]) * 255, h = u[r] * 255;
252
- m = m < 0 ? 0 : m > 255 ? 255 : m, f = f < 0 ? 0 : f > 255 ? 255 : f, h = h < 0 ? 0 : h > 255 ? 255 : h, l[r] = 255 << 24 | (h & 255) << 16 | (f & 255) << 8 | m & 255;
253
- }
254
- A.putImageData(y, 0, 0);
255
- }, te = async (t, e, n) => {
256
- ee(t);
257
- const a = X(e.face_image);
258
- g.globalCompositeOperation = "source-over", g.drawImage(a, 0, 0), g.drawImage(C, S, S), g.globalCompositeOperation = "destination-in", g.drawImage(L, 0, 0, b, b), g.globalCompositeOperation = "destination-over", g.drawImage(a, 0, 0), g.globalCompositeOperation = "source-over", D.drawImage(n, 0, 0);
259
- const s = e.crop_info.ymax - e.crop_info.ymin;
260
- return D.drawImage(
261
- E,
262
- e.crop_info.xmin,
263
- e.crop_info.ymin,
264
- e.crop_info.width,
265
- s
266
- ), await createImageBitmap(I);
267
- }, ae = (t, e, n) => {
268
- const [a, s, u] = e, d = s * u, l = F * d;
269
- (!M || M.length !== l) && (M = new Float32Array(l));
270
- for (let o = 0; o < F; o++) {
271
- const c = Math.min(
272
- Math.max(n - F / 2 + o, 0),
273
- a - 1
274
- ) * d, r = o * d;
275
- M.set(
276
- t.subarray(c, c + d),
277
- r
278
- );
279
- }
280
- return M;
281
- }, ne = (t, e, n) => {
282
- C || (C = new OffscreenCanvas(1, 1), A = C.getContext("2d", {
283
- willReadFrequently: !0
284
- })), (!E || E.width !== n) && (E = new OffscreenCanvas(n, n), g = E.getContext("2d", {
285
- willReadFrequently: !0
286
- })), (!I || I.width !== t || I.height !== e) && (I = new OffscreenCanvas(t, e), D = I.getContext("2d", {
287
- willReadFrequently: !0
288
- }));
289
- }, se = async (t) => {
290
- try {
291
- if (t.wasmPaths && (k.wasm.wasmPaths = t.wasmPaths), !t.dataset) throw new Error("Missing dataset");
292
- const e = t.dataset;
293
- R = e, b = e.dataset_info.config.crop_size, S = J(b), O = e.dataset_info.source_image_dimensions?.width || 0, z = e.dataset_info.source_image_dimensions?.height || 0, ne(O, z, b), x = await q.loadAsync(t.zipBuffer), t.zipBuffer = null, L = t.blendingMask;
294
- const n = e.images.map(async (l) => {
295
- if (!w.tensors.has(l.tensor_file)) {
296
- const o = x.file(l.tensor_file);
297
- if (o) {
298
- const i = await o.async("arraybuffer");
299
- w.tensors.set(l.tensor_file, new Float32Array(i));
300
- }
301
- }
302
- if (!w.faceImages.has(l.face_image)) {
303
- const o = x.file(l.face_image);
304
- if (o) {
305
- const i = await o.async("blob"), c = await createImageBitmap(i);
306
- w.faceImages.set(l.face_image, c);
307
- }
308
- }
309
- if (!w.fullImages.has(l.full_image)) {
310
- const o = x.file(l.full_image);
311
- if (o) {
312
- const i = await o.async("blob");
313
- w.fullImages.set(l.full_image, i);
314
- }
315
- }
316
- });
317
- await Promise.all(n), x = null;
318
- const a = [];
319
- Z() && a.push("webgpu"), a.push("wasm");
320
- const s = new URL(t.modelPath, self.location.href).toString(), u = new URL(s).pathname.split("/").pop() || "model.onnx", d = new URL(\`\${u}.data\`, s).toString();
321
- _ = await $.create(s, {
322
- executionProviders: a,
323
- graphOptimizationLevel: "all",
324
- enableMemPattern: !0,
325
- enableCpuMemArena: !0,
326
- externalData: [{ data: d, path: \`\${u}.data\` }]
327
- }), self.postMessage({ type: "ready" });
328
- } catch (e) {
329
- T(e?.message || "Init Error");
330
- }
331
- }, oe = async (t) => {
332
- if (!_ || !R) {
333
- T("Not initialized");
334
- return;
335
- }
336
- P = !1;
337
- const e = t.audioDimensions[0];
338
- self.postMessage({
339
- type: "start",
340
- payload: { totalFrames: e, frameInterval: j }
341
- });
342
- let n = 0, a = 1;
343
- const s = {}, u = _.inputNames[0], d = _.inputNames[1], l = _.outputNames[0];
344
- v = "", p && (p.close(), p = null);
345
- for (let o = 0; o < e && !P; o++) {
346
- let i = null, c = null, r = null, m = null;
347
- try {
348
- const f = R.images[n];
349
- i = K(f.tensor_file), f.full_image !== v && (p && p.close(), p = await Y(f.full_image), v = f.full_image);
350
- const h = ae(
351
- t.audioFeatures,
352
- t.audioDimensions,
353
- o
354
- );
355
- c = new W("float32", h, [
356
- 1,
357
- F,
358
- G,
359
- V
360
- ]), s[u] = i, s[d] = c, r = await _.run(s);
361
- const N = r[l];
362
- if (!N)
363
- throw new Error("Missing inference output tensor");
364
- m = N;
365
- const B = await te(N, f, p);
366
- self.postMessage(
367
- { type: "frame", payload: { frame: B, index: o } },
368
- [B]
369
- );
370
- const U = Q(
371
- n,
372
- R.images.length,
373
- a
374
- );
375
- n = U.nextIndex, a = U.nextDirection;
376
- } catch (f) {
377
- T(f?.message || "Run Error");
378
- break;
379
- } finally {
380
- i && i.dispose(), c && c.dispose(), m && m.dispose(), i = null, c = null, m = null, r = null;
381
- }
382
- }
383
- p && (p.close(), p = null), v = "", self.postMessage({ type: "done" });
384
- };
385
- self.onmessage = (t) => {
386
- const e = t.data;
387
- e.type === "init" ? se(e) : e.type === "run" ? oe(e) : e.type === "stop" && (P = !0);
388
- };
389
- `, m = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", d], { type: "text/javascript;charset=utf-8" });
390
- function w(a) {
391
- let n;
392
- try {
393
- if (n = m && (self.URL || self.webkitURL).createObjectURL(m), !n) throw "";
394
- const e = new Worker(n, {
395
- type: "module",
396
- name: a?.name
397
- });
398
- return e.addEventListener("error", () => {
399
- (self.URL || self.webkitURL).revokeObjectURL(n);
400
- }), e;
401
- } catch {
402
- return new Worker(
403
- "data:text/javascript;charset=utf-8," + encodeURIComponent(d),
404
- {
405
- type: "module",
406
- name: a?.name
407
- }
408
- );
409
- }
410
- }
411
52
  class O {
412
53
  worker;
413
54
  handlers = {};
414
- constructor(n = {}) {
415
- this.handlers = n, this.worker = new w(), this.worker.onmessage = this.handleMessage.bind(this);
416
- }
417
- handleMessage(n) {
418
- const { type: e, payload: t } = n.data;
419
- switch (e) {
55
+ constructor(e = {}) {
56
+ this.handlers = e, this.worker = new Worker(
57
+ new URL(
58
+ /* @vite-ignore */
59
+ "./workers/inference.worker.js",
60
+ import.meta.url
61
+ ),
62
+ { type: "module" }
63
+ ), this.worker.onmessage = this.handleMessage.bind(this);
64
+ }
65
+ handleMessage(e) {
66
+ const { type: t, payload: r } = e.data;
67
+ switch (t) {
420
68
  case "ready":
421
69
  this.handlers.onReady?.();
422
70
  break;
423
71
  case "start":
424
- this.handlers.onStart?.(t.totalFrames);
72
+ this.handlers.onStart?.(r.totalFrames);
425
73
  break;
426
74
  case "frame":
427
- this.handlers.onFrame?.(t.frame, t.index);
75
+ this.handlers.onFrame?.(r.frame, r.index);
428
76
  break;
429
77
  case "done":
430
78
  this.handlers.onDone?.();
431
79
  break;
432
80
  case "error":
433
- this.handlers.onError?.(t);
81
+ this.handlers.onError?.(r);
434
82
  break;
435
83
  }
436
84
  }
437
- init(n) {
85
+ init(e) {
438
86
  this.worker.postMessage(
439
87
  {
440
88
  type: "init",
441
- modelPath: n.modelPath,
442
- dataset: n.dataset,
443
- zipBuffer: n.zipBuffer,
444
- blendingMask: n.blendingMask,
445
- wasmPaths: n.wasmPaths
89
+ modelPath: e.modelPath,
90
+ dataset: e.dataset,
91
+ zipBuffer: e.zipBuffer,
92
+ blendingMask: e.blendingMask,
93
+ wasmPaths: e.wasmPaths || l.wasm.wasmPaths
446
94
  },
447
- [n.zipBuffer, n.blendingMask]
95
+ [e.zipBuffer, e.blendingMask]
448
96
  );
449
97
  }
450
- run(n) {
98
+ run(e) {
451
99
  this.worker.postMessage(
452
100
  {
453
101
  type: "run",
454
- audioFeatures: n.audioFeatures,
455
- audioDimensions: n.audioDimensions
102
+ audioFeatures: e.audioFeatures,
103
+ audioDimensions: e.audioDimensions
456
104
  },
457
- [n.audioFeatures.buffer]
105
+ [e.audioFeatures.buffer]
458
106
  );
459
107
  }
460
108
  stop() {
@@ -465,21 +113,21 @@ class O {
465
113
  }
466
114
  }
467
115
  export {
468
- k as DEFAULT_LOW_FREQ,
469
- R as ENERGY_FLOOR,
470
- x as FRAME_INTERVAL_MS,
471
- y as FRAME_LENGTH_MS,
472
- _ as FRAME_SHIFT_MS,
473
- A as FeatureExtractor,
116
+ M as DEFAULT_LOW_FREQ,
117
+ _ as ENERGY_FLOOR,
118
+ L as FRAME_INTERVAL_MS,
119
+ k as FRAME_LENGTH_MS,
120
+ u as FRAME_SHIFT_MS,
121
+ v as FeatureExtractor,
474
122
  O as InferenceEngine,
475
- M as NUM_MEL_BINS,
476
- E as NUM_SEQUENCE_FRAMES,
477
- b as PREEMPH_COEFF,
478
- I as REMOVE_DC_OFFSET,
479
- v as ROUND_TO_POWER_OF_TWO,
480
- g as SAMPLE_RATE,
481
- L as TARGET_FPS,
482
- C as calculatePingPongState,
483
- F as getBorder,
484
- U as loadDataset
123
+ f as NUM_MEL_BINS,
124
+ p as NUM_SEQUENCE_FRAMES,
125
+ g as PREEMPH_COEFF,
126
+ R as REMOVE_DC_OFFSET,
127
+ F as ROUND_TO_POWER_OF_TWO,
128
+ m as SAMPLE_RATE,
129
+ w as TARGET_FPS,
130
+ P as calculatePingPongState,
131
+ y as getBorder,
132
+ b as loadDataset
485
133
  };