我正在使用Web 音頻 API使用 JS 進行一些音頻處理 所以我創建了一個自定義音頻作業集處理器,我在其中處理一些音頻。
這是一個小例子。
class MyProcessor extends AudioWorkletProcessor {
process (inputs, outputs, parameters) {
const someProcessedNumber = cppApiProcessor.process(inputs,outputs,parameters);
return true; // to keep the processor alive
}
}
您會看到變數someProcessedNumber來自 acppApi并且我不知道如何讓外部 JS 世界知道這一點,作為Processor回傳boolean(無論是否保持節點活動),并且我無法觸摸outputs. (我不想改變輸出的音頻,只是處理并給出一個數字)我該怎么做?有一個更好的方法嗎?
uj5u.com熱心網友回復:
您可以使用port的AudioWorkletProcessor將資料發送回主執行緒(或任何其他執行緒)。
this.port.postMessage(someProcessedNumber);
每一個AudioWorkletNode也有一個port可以用來接收訊息的。
使用MessagePort會在音頻執行緒上產生一些垃圾,這使得垃圾收集不時運行。它也不是傳輸資料的最高效方式。
如果這是一個問題,您可以使用 aSharedArrayBuffer而不是AudioWorkletProcessor用于寫入資料和AudioWorkletNode用于讀取資料的用途。
ringbuf.js是一個旨在使此程序盡可能簡單的庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/408442.html
標籤:
