1

我有一个带有音频文件值的 Float32Array。我想将其保存为 .wav 文件,因此我需要将该值转换为 Uint8array。

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

4

1 回答 1

3

您可以转换为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 在评论部分指出的那样,您可以访问ArrayBufferwith TypedArray.buffer,因此您可以简单地执行以下操作:

var byteArray = new Uint8Array(floatArray.buffer);

byteArray请注意,这样做floatArray会共享同一个缓冲区,因此修改byteArray将修改floatArray,反之亦然。

于 2017-09-13T12:22:37.520 回答