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)。
添加回答
舉報