我在 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)
这可能吗?
如果您知道数据实际上是 16 位 blob int,那么是的,这是可能的:
通过其方法将其读Blob入 an (原始答案必须使用,但现在有一个方法;如果由于某种原因您必须在没有它的情况下支持旧环境,请参阅编辑历史记录):ArrayBufferarrayBufferFileReaderBlobarrayBuffer
samples.arrayBuffer()
.then(buffer => {
// ...
})
.catch(error => {
// ...handle/report error...
});
Run Code Online (Sandbox Code Playgroud)
通过构造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)