aboutsummaryrefslogtreecommitdiff
path: root/source/client/rnnoise.ts
diff options
context:
space:
mode:
authorMetaMuffin <metamuffin@yandex.com>2021-08-06 14:08:51 +0200
committerMetaMuffin <metamuffin@yandex.com>2021-08-06 14:08:51 +0200
commit20c1b014fe502370edc733a6d8a756c9c1602f85 (patch)
tree0660f3ed287c1149fb93a0dac68c8f7b7c550a68 /source/client/rnnoise.ts
parent208f4f17fe3189ded2110baf166dc2e1ac60e619 (diff)
downloadkeks-meet-20c1b014fe502370edc733a6d8a756c9c1602f85.tar
keks-meet-20c1b014fe502370edc733a6d8a756c9c1602f85.tar.bz2
keks-meet-20c1b014fe502370edc733a6d8a756c9c1602f85.tar.zst
updated readme, implemented rnnoise, added parameters
Diffstat (limited to 'source/client/rnnoise.ts')
-rw-r--r--source/client/rnnoise.ts45
1 files changed, 45 insertions, 0 deletions
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<void>
+ constructor(context: AudioContext)
+ onstatus: (data: any) => void
+ update(something: boolean): void
+ }
+}
+
+
+export async function rnnoise_track(track: MediaStreamTrack): Promise<MediaStreamTrack> {
+ 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<void>(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