JavaScript 将音频字节数组转换为 wav 文件或有效的 AudioBuffer

JavaScript converting audio byte array to wav file or valid AudioBuffer

我可以从 URL 访问字节数组文件(float32,big endian),我正在尝试将其转换为 WaveSurfer 可处理的内容,这需要有效的 ArrayBuffer、AudioBuffer 或a URL 到 wav 文件。

我最接近的是使用 fetch 来获取文件,并尝试将其转换为 ArrayBuffer,但是 WaveSurfer 无法识别它,它表示无法解码数据。

这是我的 JavaScript 代码:

let blob = await fetch(url);
let buffer = await blob.arrayBuffer();
this.wavesurfer.loadArrayBuffer(buffer);

我知道我要解码的文件是有效的音频文件,因为我可以使用以下 python 脚本将其转换为 wav 文件:

import numpy as np
from scipy.io.wavfile import write

def main():
    a = np.fromfile(filePath, '>f4')
    write(outputPath, 16000, a)

对我可以做什么有什么建议吗?

天哪,我终于想通了。我的解决方案最终使用了 this 包。

从我需要以大端 Float32 格式读取的二进制文件开始:

import createBuffer from "audio-buffer-from"

var res = await fetch(response.url);
var buffer = await res.arrayBuffer();
var dataview = new DataView(buffer);
var mFloatArray = new Float32Array(buffer.byteLength / 4);

for (let i = 0; i < mFloatArray.length; i++) {
    mFloatArray[i] = dataview.getFloat32(i*4);
}

audioBuffer = createBuffer(mFloatArray, { sampleRate: 16000 });
this.wavesurfer.loadDecodedBuffer(audioBuffer);

这已成功加载到 wavesurfer 中!