From 20c1b014fe502370edc733a6d8a756c9c1602f85 Mon Sep 17 00:00:00 2001 From: MetaMuffin Date: Fri, 6 Aug 2021 14:08:51 +0200 Subject: updated readme, implemented rnnoise, added parameters --- source/client/rnnoise.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 source/client/rnnoise.ts (limited to 'source/client/rnnoise.ts') diff --git a/source/client/rnnoise.ts b/source/client/rnnoise.ts new file mode 100644 index 0000000..6bd632e --- /dev/null +++ b/source/client/rnnoise.ts @@ -0,0 +1,45 @@ +import { log } from "./logger" + +declare global { + class RNNoiseNode extends AudioWorkletNode { + static register(context: AudioContext): Promise + constructor(context: AudioContext) + onstatus: (data: any) => void + update(something: boolean): void + } +} + + +export async function rnnoise_track(track: MediaStreamTrack): Promise { + log("misc", "rnnoise enabled") + const context = new AudioContext({ sampleRate: 48000 }) + //@ts-ignore + let RNNoiseNode: typeof RNNoiseNode = window.RNNoiseNode; + + let script: HTMLScriptElement; + if (!RNNoiseNode) { + log("misc", "loading rnnoise...") + script = document.createElement("script") + script.src = "/static/rnnoise/rnnoise-runtime.js" + script.defer = true + document.head.appendChild(script) + //@ts-ignore + while (!window.RNNoiseNode) await new Promise(r => setTimeout(() => r(), 100)) + //@ts-ignore + RNNoiseNode = window.RNNoiseNode; + log("misc", "rnnoise loaded") + } + + await RNNoiseNode.register(context) + const source_stream = new MediaStream() + source_stream.addTrack(track) + const source = context.createMediaStreamSource(source_stream) + const destination = context.createMediaStreamDestination() + 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 -- cgit v1.2.3-70-g09d2