Как проверить, был ли указанный модуль c добавлен в Worklet? - PullRequest
1 голос
/ 29 апреля 2020

Я работаю с AudioWorkletNode, и для его использования требуется сначала загрузить модуль процессора на audio_context.audioWorklet.

DOMException: Failed to construct 'AudioWorkletNode': AudioWorkletNode cannot be created: AudioWorklet does not have a valid AudioWorkletGlobalScope. Load a script via audioWorklet.addModule() first.

Из-за модульной природы мой код, мне нужен надежный способ предотвратить ненужную многократную загрузку процессорного модуля; не до .addModule, если уже сделано с данным AudioContext. Есть ли такой способ, кроме try - catch ing и маркировки на объекте AudioContext?

1 Ответ

1 голос
/ 29 апреля 2020

Допустим, вы назвали свой процессор my-processor, а определение вашего AudioWorkletProcessor выглядит примерно так:

class MyProcessor extends AudioWorkletProcessor {

    process () {
        return true;
    }

}

registerProcessor('my-processor', MyProcessor);

Чтобы проверить, загружен ли уже этот процессор, вы можете сделать что-то подобное из в основном потоке:

// somewhere inside of an async function ...

let audioWorkletNode;

try {
    audioWorkletNode = new AudioWorkletNode(audioContext, 'my-processor');
} catch (err) {
    await audioContext.audioWorklet.addModule('./worklet.js');

    audioWorkletNode = new AudioWorkletNode(audioContext, 'my-processor');
}

Код использует блок try / catch, но он по крайней мере не загружает файл JS, если он уже был загружен ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...