aboutsummaryrefslogtreecommitdiff
path: root/client-web/source/rnnoise.ts
blob: a55631b2c34a17496eb43ba8227fc5c1b926ba99 (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
/*
    This file is part of keks-meet (https://codeberg.org/metamuffin/keks-meet)
    which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
    Copyright (C) 2023 metamuffin <metamuffin@disroot.org>
*/
/// <reference lib="dom" />

import { log } from "./logger.ts"

declare global {
    class RNNoiseNode extends AudioWorkletNode {
        static register(context: AudioContext): Promise<void>
        constructor(context: AudioContext)
        // deno-lint-ignore no-explicit-any
        onstatus: (data: any) => void
        update(something: boolean): void
    }
}


// TODO fix leak
export async function get_rnnoise_node(context: AudioContext): Promise<RNNoiseNode> {
    log("rnnoise", "enabled")
    //@ts-ignore asfdasfd
    let RNNoiseNode: typeof RNNoiseNode = window.RNNoiseNode;

    let script: HTMLScriptElement;
    if (!RNNoiseNode) {
        log("rnnoise", "loading wasm...")
        script = document.createElement("script")
        script.src = "/assets/rnnoise/rnnoise-runtime.js"
        script.defer = true
        document.head.appendChild(script)
        //@ts-ignore asdfsfad
        while (!window.RNNoiseNode) await new Promise<void>(r => setTimeout(() => r(), 100))
        //@ts-ignore asfdsadfsafd
        RNNoiseNode = window.RNNoiseNode;
        log("rnnoise", "loaded")
    }

    await RNNoiseNode.register(context)
    return new RNNoiseNode(context)
}