因此,我已將通道數據從AudioBuffer
中取出,並通過可傳輸對象將其發送給網絡工作人員以對其進行一些處理,現在我要將其重新放入。真的要拷貝它回來了嗎?手動將pcm數據放入AudioBuffer
var myData = new Float32Array(audioBuf.length);
var chanData = audioBuf.getChannelData(0);
for (var n = 0; n < chanData.length; n++) {
chanData[n] = myData[n];
}
我真的希望有一些辦法只是改變了ArrayBuffer
每個AudioBuffer
渠道參考。像...
audioBuf.channel[0].buffer = myData.buffer;
...會非常簡單而有效,但看似不存在。有沒有像這樣改變參考並避免複製數據的方法?
編輯:經過一些進一步的調查,我發現使用帶有可傳輸對象的web音頻API的問題更令人討厭。當您將陣列緩衝區傳輸給工作人員時,AudioBuffer
的基礎陣列緩衝區被清除,我相信甚至通過getChannelData
返回的Float32Array
不可能進行復制操作。我現在唯一能看到完成我想要的東西的方法是放棄原始的AudioBuffer
,創建一個全新的AudioBuffer
,然後將我的數據複製到其中。真??
這在現代瀏覽器中得到了相當廣泛的支持。值得注意的是,'copyFromChannel'方法在主線程上不需要額外的數組分配,並且比'getChannelData'快兩倍(儘管它不能直接用於可傳送數據,通道數據將被放入數組中,需要再次通過'getChannelData'完成相同的額外分配)。 –