diff options
author | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 14:08:51 +0200 |
---|---|---|
committer | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 14:08:51 +0200 |
commit | 20c1b014fe502370edc733a6d8a756c9c1602f85 (patch) | |
tree | 0660f3ed287c1149fb93a0dac68c8f7b7c550a68 /source/client/rnnoise.ts | |
parent | 208f4f17fe3189ded2110baf166dc2e1ac60e619 (diff) | |
download | keks-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.ts | 45 |
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 |