aboutsummaryrefslogtreecommitdiff
path: root/public/rnnoise/rnnoise-runtime.js
blob: f69c568e4da5e166e718722197f7cb8bad6f56b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"use strict";
{
  const g = document.currentScript.src.match(/(.*\/)?/)[0],
    h = (
      WebAssembly.compileStreaming ||
      (async (a) => await WebAssembly.compile(await (await a).arrayBuffer()))
    )(fetch(g + "rnnoise-processor.wasm"));
  let k, c, e;
  window.RNNoiseNode =
    ((window.AudioWorkletNode ||
      (window.AudioWorkletNode = window.webkitAudioWorkletNode)) &&
      class extends AudioWorkletNode {
        static async register(a) {
          k = await h;
          await a.audioWorklet.addModule(g + "rnnoise-processor.js");
        }
        constructor(a) {
          super(a, "rnnoise", {
            channelCountMode: "explicit",
            channelCount: 1,
            channelInterpretation: "speakers",
            numberOfInputs: 1,
            numberOfOutputs: 1,
            outputChannelCount: [1],
            processorOptions: { module: k },
          });
          this.port.onmessage = ({ data: b }) => {
            b = Object.assign(new Event("status"), b);
            this.dispatchEvent(b);
            if (this.onstatus) this.onstatus(b);
          };
        }
        update(a) {
          this.port.postMessage(a);
        }
      }) ||
    ((window.ScriptProcessorNode ||
      (window.ScriptProcessorNode = window.webkitScriptProcessorNode)) &&
      Object.assign(
        function (a) {
          const b = a.createScriptProcessor(512, 1, 1),
            d = c.newState();
          let f = !0;
          b.onaudioprocess = ({ inputBuffer: b, outputBuffer: a }) => {
            f &&
              (e.set(b.getChannelData(0), c.getInput(d) / 4),
              (b = a.getChannelData(0)),
              (a = c.pipe(d, b.length) / 4) &&
                b.set(e.subarray(a, a + b.length)));
          };
          b.update = (a) => {
            if (f)
              if (a) {
                if (
                  ((a = Object.assign(new Event("status"), {
                    vadProb: c.getVadProb(d),
                  })),
                  b.dispatchEvent(a),
                  b.onstatus)
                )
                  b.onstatus(a);
              } else (f = !1), c.deleteState(d);
          };
          return b;
        },
        {
          register: async () => {
            c ||
              (e = new Float32Array(
                (c = (await WebAssembly.instantiate(await h))
                  .exports).memory.buffer
              ));
          },
        }
      ));
}