如何将 Blob 转换为 Int16Array

Ale*_*hov 5 javascript mp3

我在 Blob 中有一个 WAV 文件,为了将其转换为 MP3,我需要首先将其转换为 Int16Array(按照此处的示例进行操作: https: //github.com/zhuker/lamejs)。

例如

var mp3encoder = new lamejs.Mp3Encoder(2, 44100, 128);
// instead of `var samples = new Int16Array(44100);` I want something like `var samples = new Int16Array(blob);`
var mp3Tmp = mp3encoder.encodeBuffer(samples);
Run Code Online (Sandbox Code Playgroud)

这可能吗?

T.J*_*der 3

如果您知道数据实际上是 16 位 blob int,那么是的,这是可能的:

  1. 通过其方法将其读Blob入 an (原始答案必须使用,但现在有一个方法;如果由于某种原因您必须在没有它的情况下支持旧环境,请参阅编辑历史记录)ArrayBufferarrayBufferFileReaderBlobarrayBuffer

    samples.arrayBuffer()
    .then(buffer => {
        // ...
    })
    .catch(error => {
        // ...handle/report error...
    });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过构造ArrayBuffer函数查看:Int16ArrayInt16Array

    const data = new Int16Array(buffer);
    
    Run Code Online (Sandbox Code Playgroud)

现在data,来自 blob 的数组缓冲区被视为Int16Array.

沿着这些思路:

samples.arrayBuffer()
.then(buffer => {
    const data = new Int16Array(buffer);
    // ...use `data` here...
})
.catch(error => {
    // ...handle/report error...
});
Run Code Online (Sandbox Code Playgroud)