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 中!
我可以从 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 中!