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

标签 javascript arrays uint16 uint8array

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

为了从 uint8 转换为 float,我首先转换为 int16 数组,然后转换为 Float32Array ( Convert int16 array to float ) 我怎样才能在另一个方向进行转换?

最佳答案

您可以转换为ArrayBuffer,将数据复制到其中,然后创建此缓冲区的字节 View :

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

var byteArray = new Uint8Array(floatArray.buffer);

注意这样做,byteArrayfloatArray 将共享相同的缓冲区,因此修改byteArray 将修改floatArray 反之亦然。

关于javascript - 在javascript中将浮点值转换为uint8数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46196990/

相关文章:

javascript - 数组上的过滤方法无法正常工作

javascript - 使用 jQuery 对数组中的元素进行动画处理

swift - 如何在 Swift 3 中将 UInt16 转换为 UInt8?

将无符号整数 (uint16_t) 转换为字符串。标准 itoa base 10 给出负值

javascript - 将 int16 数组转换为 float

javascript - 使用多个异步/等待调用构建对象

javascript - 在 React 类组件中使用 ResizeObserver

javascript - "Access is denied"通过在 Windows XP x64 上使用 JScript 执行 .hta 文件

javascript - 纯javascript自动滚动到页面底部然后备份

java - 调用方法和其他有趣的东西