2 回答
TA贡献1853条经验 获得超9个赞
你已经在正确的轨道上。要更改您内部的值,您AudioWorkletProcessor可以使用自定义AudioParam或通过MessagePort.
您的代码不起作用的原因是从技术上讲,您最终会得到同一个模块的两个实例。AudioWorkletProcessor 在不同的线程上运行,并且无法访问在主线程上加载的模块。因此/src/functions.js被加载两次。一个实例存在于主线程上,另一个实例存在于音频线程上。他们每个人都不知道另一个人的存在。
TA贡献1784条经验 获得超7个赞
您还可以使用一个 SharedArrayBuffer
在一个模块中创建共享内存对象。
const length = 100;
const size = Int32Array.BYTES_PER_ELEMENT * length;
this.sab = new SharedArrayBuffer(size);
this.sharedArray = new Int32Array(this.sab);
发送至AudioWorkletProcessor
this.worker.port.postMessage({
sab: this.sab
});
在里面AudioWorkletProcessor
this.port.onmessage = event => {
this.sharedArray = new Int32Array(event.data.sab);
}
现在两个模块共享同一个数组 ( this.sharedArray)。
添加回答
举报
