手动将pcm数据放入AudioBuffer

2023-12-26

所以我把频道数据从AudioBuffer并通过可传输对象将其发送给网络工作人员以对其进行一些处理,现在我想将其放回原处。我真的必须这样做吗copy就这样回来了?

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;

...将非常简单和有效,但似乎不存在。有没有像这样的方法来更改引用并避免复制数据?

EDIT:经过进一步调查,我发现将网络音频 API 与可传输对象一起使用的问题更加烦人。当您将数组缓冲区传输到工作程序时,底层数组缓冲区AudioBuffer被清除,我相信甚至可以通过复制操作Float32Array由返回getChannelData不可能的。我现在能看到实现我想要的唯一方法就是放弃原来的AudioBuffer,创建一个全新的AudioBuffer然后将我的数据复制到其中。真的吗??


我们最近在 AudioBuffer 上添加了两个新方法,其中使用从频道复制 http://webaudio.github.io/web-audio-api/#widl-AudioBuffer-copyFromChannel-void-Float32Array-destination-long-channelNumber-unsigned-long-startInChannel可能对你有用。它按照罐子上的说明执行操作(将 ArrayBuffer 放入 AudioBuffer 的通道中),也许会在过程中保存一个副本(解释了避免复制的原因和条件)here http://webaudio.github.io/web-audio-api/#audio-buffer-copying).

我相信目前它只在 Firefox 中实现,但我还没有检查过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手动将pcm数据放入AudioBuffer 的相关文章