Я пытаюсь создать WebApp с vue-cli, который использует AudioWorklets, но я получаю кучу ошибок при попытке получить доступ к любому свойству моего AudioWorkletNode, например, port или channelCount и т. Д .:
TypeError: Illegal invocation at MyWorkletNode.invokeGetter
После нескольких часов поиска в Google и отладки, я думаю, что это как-то связано с классами, кажется, что AudioWorklet работает только с классами ES6, но один из vue-cli / babel / webpack делает свое волшебство (чего я не понимаю, где и что он делает) и переносит классы в обычные функции конструктора или что-то в этом роде.Или, может быть, это загрузчик worklet, который делает транспиляцию?Я не знаю, я в полном неведении и понятия не имею, где искать.
Если я пишу код без каких-либо упаковщиков, просто ванильный JS, он работает, я не получаю никаких ошибок,Но мне нужно использовать AudioWorklets в моем проекте vue, так какие у меня варианты?Что-нибудь лучше, чем отключение классовой транспортировки?Если нет, то где и как я могу его отключить?
// main.js
import worklet from 'worklet-loader!./processor.js'
class MyWorkletNode extends AudioWorkletNode {
constructor(context) {
super(context, 'my-worklet-processor');
// Throws TypeError: Illegal invocation
console.log(this.channelCount);
}
}
this.audioCtx.audioWorklet.addModule(worklet).then(() => {
let node = new MyWorkletNode(this.audioCtx);
console.log("Loaded!");
// Throws TypeError: Illegal invocation
node.port.onmessage = event => {
console.log(event.data);
};
}).catch(e => console.log(`${e.name}: ${e.message}`));
// processor.js
class MyWorkletProcessor extends AudioWorkletProcessor {
constructor() {
super();
this.port.postMessage('hello!');
}
process(inputs, outputs, parameters) {
// audio processing code here.
}
}
registerProcessor('my-worklet-processor', MyWorkletProcessor);