理解AudioBuffer转ArrayBuffer的转换

4
我有一个客户端的AudioBuffer,想要通过AJAX发送到express服务器。这个链接展示了XMLHttpRequest如何发送/接收二进制数据-ArrayBuffer。
ArrayBuffer与AudioBuffer不同(或者我是这样认为的),因为我首先解码ArrayBuffer以创建AudioBuffer。这是使用Web音频API的decodeAudioData()完成的decodeAudioData()
所以我的问题是,我能否将AudioBuffer转换回ArrayBuffer?
如果可以的话,我想将ArrayBuffer发送到我的express服务器,然后像这个例子中那样将其转发到S3存储桶中。
在这个例子中,代码使用fs.readFileSync()将缓冲区放入S3存储桶中。我认为Buffer和ArrayBuffer之间的差异不会成为S3的问题:S
1个回答

4
使用 copyFromChannel 方法,然后将 Float32Array 转换为 ArrayBuffer
var myArrayBuffer = audioCtx.createBuffer(2, frameCount, audioCtx.sampleRate);  
var anotherArray = new Float32Array();
myArrayBuffer.copyFromChannel(anotherArray,1,0);

谢谢您的回答。还有一件事,我认为在示例代码中,copyFromChannel会创建一个仅包含单声道而不是2声道立体声ArrayBuffer,我的理解正确吗? - Ricardinho
没错。你需要从两个渠道检索数据,并找出如何“合并”它们。 - Axel Isouard
1
我刚发现了关于createChannelMerger的一些内容,希望这能有所帮助:https://developer.mozilla.org/en/docs/Web/API/AudioContext/createChannelMerger - Axel Isouard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接