繁体   English   中英

如何将Blob转换为Int16Array

[英]How to convert Blob to Int16Array

我在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);

这可能吗?

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

  1. 通过FileReaderreadAsArrayBufferspecMDN )将Blob读取到ArrayBuffer

     const fr = new FileReader(); fr.readAsArrayBuffer(samples); 

    ArrayBufferFileReaderresult属性或onload回调参数的event.target.result属性上可用(请参见下文)。

  2. 查看ArrayBuffer作为Int16Array通过Int16Array构造函数:

     const data = new Int16Array(fr.result); 

现在, data是Blob中的数组缓冲区,被视为Int16Array

遵循以下原则:

const fr = new FileReader();
fr.onload = () => {
    // It worked
    const array = new Int16Array(fr.result);
    // ...use the array here...
};
fr.onerror = () => {
    // The read failed, handle/report it
};
fr.readAsArrayBuffer(samples);

如果要在请求之间重用负载完成处理程序,则可以接受event参数并使用event.target.result而不是fr.result

function loaded(event) {
    const array = new Int16Array(event.target.result);
    // ...use the array here...
}

// ...

fr.onload = loaded;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM