Tengo el siguiente ejemplo. Intento pasar el parámetro de options llamando a super(...) . Cuando hago esto, no obtengo 2 canales de salida como especifiqué, sino que solo obtengo 1 canal de salida.
class Processor extends AudioWorkletProcessor { constructor() { super({outputChannelCount: [2]}); } process(inputs, outputs, parameters) { console.log("output channels: ", outputs[0].length); return true; } } registerProcessor('processor', Processor); Cuando intento lo mismo pasando las options a AudioWorkletNode , como en el siguiente ejemplo, funciona como se esperaba.
let audioContext = new AudioContext(); (async () => { await audioContext.audioWorklet.addModule('processor.js'); audioWorkletNode = new AudioWorkletNode(audioContext, 'processor', {outputChannelCount: [2]}); audioWorkletNode.connect(audioContext.destination); })();Esto no funciona en ningún navegador que probé.
¿Estoy haciendo algo mal? ¿Es esto un error? ¿Hay algo en la especificación de Web Audio API que me falta aquí?
Creo que lo que describes es lo esperado. El constructor de un AudioWorkletProcessor no toma ningún argumento tal como lo define la definición de IDL aquí:
https://webaudio.github.io/web-audio-api/#AudioWorkletProcessor
Las opciones que pasa al constructor AudioWorkletNode en el subproceso principal se almacenan como algo llamado pending processor construction data . Se aplican automáticamente y no hay forma de cambiarlos desde dentro del procesador.
Supongo que esto es para asegurarse de que AudioWorkletNode y su AudioWorkletProcessor correspondiente siempre tengan la misma configuración. Si pudiera cambiar la configuración dentro del procesador, AudioWorkletNode no estaría sincronizado hasta que la información volviera a viajar.