summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/rnnoise/rnnoise-processor.js43
-rw-r--r--public/rnnoise/rnnoise-runtime.js79
-rw-r--r--source/client/rnnoise.ts5
3 files changed, 119 insertions, 8 deletions
diff --git a/public/rnnoise/rnnoise-processor.js b/public/rnnoise/rnnoise-processor.js
index 1008e87..5b594a4 100644
--- a/public/rnnoise/rnnoise-processor.js
+++ b/public/rnnoise/rnnoise-processor.js
@@ -1,2 +1,41 @@
-'use strict';{let b,d;registerProcessor("rnnoise",class extends AudioWorkletProcessor{constructor(a){super({...a,numberOfInputs:1,numberOfOutputs:1,outputChannelCount:[1]});b||(d=new Float32Array((b=(new WebAssembly.Instance(a.processorOptions.module)).exports).memory.buffer));this.state=b.newState();this.alive=!0;this.port.onmessage=({data:a})=>{this.alive&&(a?this.port.postMessage({vadProb:b.getVadProb(this.state)}):(this.alive=!1,b.deleteState(this.state)))}}process(a,c,e){if(this.alive)return d.set(a[0][0],
-b.getInput(this.state)/4),a=c[0][0],(c=b.pipe(this.state,a.length)/4)&&a.set(d.subarray(c,c+a.length)),!0}})};
+"use strict";
+{
+ let b, d;
+ registerProcessor(
+ "rnnoise",
+ class extends AudioWorkletProcessor {
+ constructor(a) {
+ super({
+ ...a,
+ numberOfInputs: 1,
+ numberOfOutputs: 1,
+ outputChannelCount: [1],
+ });
+ b ||
+ (d = new Float32Array(
+ (b = new WebAssembly.Instance(a.processorOptions.module)
+ .exports).memory.buffer
+ ));
+ this.state = b.newState();
+ this.alive = !0;
+ this.port.onmessage = ({ data: a }) => {
+ this.alive &&
+ (a
+ ? this.port.postMessage({ vadProb: b.getVadProb(this.state) })
+ : ((this.alive = !1), b.deleteState(this.state)));
+ };
+ }
+ process(a, c, e) {
+ if (!a[0][0]) return 1
+ if (this.alive)
+ return (
+ d.set(a[0][0], b.getInput(this.state) / 4),
+ (a = c[0][0]),
+ (c = b.pipe(this.state, a.length) / 4) &&
+ a.set(d.subarray(c, c + a.length)),
+ !0
+ );
+ }
+ }
+ );
+}
diff --git a/public/rnnoise/rnnoise-runtime.js b/public/rnnoise/rnnoise-runtime.js
index c621d84..f69c568 100644
--- a/public/rnnoise/rnnoise-runtime.js
+++ b/public/rnnoise/rnnoise-runtime.js
@@ -1,3 +1,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))}})};
+"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
+ ));
+ },
+ }
+ ));
+}
diff --git a/source/client/rnnoise.ts b/source/client/rnnoise.ts
index 6bd632e..6017288 100644
--- a/source/client/rnnoise.ts
+++ b/source/client/rnnoise.ts
@@ -10,9 +10,10 @@ declare global {
}
+// TODO fix leak
export async function rnnoise_track(track: MediaStreamTrack): Promise<MediaStreamTrack> {
log("misc", "rnnoise enabled")
- const context = new AudioContext({ sampleRate: 48000 })
+ const context = new AudioContext()
//@ts-ignore
let RNNoiseNode: typeof RNNoiseNode = window.RNNoiseNode;
@@ -38,8 +39,6 @@ export async function rnnoise_track(track: MediaStreamTrack): Promise<MediaStrea
const rnnoise = new RNNoiseNode(context)
source.connect(rnnoise)
rnnoise.connect(destination)
- // rnnoise.onstatus = console.log
- // rnnoise.update(true)
return destination.stream.getAudioTracks()[0]
} \ No newline at end of file