如何将ArrayBuffer转换为AudioBuffer?

15

我正在流式传输一个arrayBuffer,以将其转换为audioBuffer,从而能够听取它。

我通过websocket事件接收流。

retrieveAudioStream(){
  this.socket.on('stream', (buffer) => {
    console.log('buffer', buffer)
  })
}
< p>缓冲区是一个arrayBuffer,我需要将其转换为audioBuffer,以便在我的应用程序上听取它。

我该怎么做?


2
看一下这个链接:https://developer.mozilla.org/zh-CN/docs/Web/API/BaseAudioContext/decodeAudioData - Get Off My Lawn
1
根据这篇SO帖子 https://dev59.com/2Znga4cB1Zd3GeqPWESm "AudioContext.decodeAudioData并不适用于解码部分文件"。由于我的流是arrayBuffer块,我无法使用此方法进行解码。还有其他建议吗? - Stretch0
1
有一个非常好的例子使用MediaSource(对于音频流也是一样),我用它来从206响应中以块的方式流式传输音频,效果非常好。请参考此链接:https://github.com/nickdesaulniers/netfix/blob/gh-pages/demo/bufferWhenNeeded.html - Jankapunkt
这也许会有所帮助。它使用decodeAudioData来解码AudioBuffer中的ArrayBuffer,并将块附加在一起。 https://dev59.com/rGYq5IYBdhLWcg3w2UIU#14148125 - Bart Van Remortele
2个回答

7

1
AudioBuffer 对象需要 Float32Array,而不是 OP 拥有的 ArrayBuffer(表示数据块的缓冲区数组)。是否有一种方法可以将数据块的 ArrayBuffer 转换为 AudioBuffer - AbyxDev
1
我相信你可以从ArrayBuffer创建任何类型的数组。因此,你一定能够将ArrayBuffer转换为Float32Array - Orkhan Huseynli

1

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