我有一个带有音频文件值的 Float32Array。我想将其保存为 .wav 文件,因此我需要将该值转换为 Uint8array。
要从 uint8 转换为 float,我首先转换为 int16 数组,然后转换为 Float32Array(将 int16 数组转换为 float)如何在另一个方向进行转换?
我有一个带有音频文件值的 Float32Array。我想将其保存为 .wav 文件,因此我需要将该值转换为 Uint8array。
要从 uint8 转换为 float,我首先转换为 int16 数组,然后转换为 Float32Array(将 int16 数组转换为 float)如何在另一个方向进行转换?
您可以转换为ArrayBuffer
,将数据复制到,然后创建此缓冲区的字节视图:
var data = new Float32Array([0.1, 0.2, 0.3]);
var buffer = new ArrayBuffer(data.byteLength);
var floatView = new Float32Array(buffer).set(data);
var byteView = new Uint8Array(buffer);
此函数可以将任何 TypedArray 转换为任何其他类型的 TypedArray :
function convertTypedArray(src, type) {
var buffer = new ArrayBuffer(src.byteLength);
var baseView = new src.constructor(buffer).set(src);
return new type(buffer);
}
例子 :
convertTypedArray(new Float32Array([0.5, 0.3, -0.1]), Uint8Array);
正如 Ian 在评论部分指出的那样,您可以访问ArrayBuffer
with TypedArray.buffer
,因此您可以简单地执行以下操作:
var byteArray = new Uint8Array(floatArray.buffer);
byteArray
请注意,这样做floatArray
会共享同一个缓冲区,因此修改byteArray
将修改floatArray
,反之亦然。