在javascript中将浮点值转换为uint8数组

时间:2017-09-13 12:00:12

标签: javascript arrays uint16 uint8array

我有一个Float32Array,其中包含来自音频文件的值。我想将其保存为.wav文件,因此我需要将这些值转换为Uint8array。

要从uint8转换为float,我首先转换为int16数组,然后转换为Float32Array(Convert int16 array to float) 如何在另一个方向进行转换?

1 个答案:

答案 0 :(得分:1)

您可以转换为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访问TypedArray.buffer,因此您可以执行以下操作:

var byteArray = new Uint8Array(floatArray.buffer);

请注意,执行此操作时,byteArrayfloatArray将共享相同的缓冲区,因此修改byteArray将修改floatArray,反之亦然。