我有一个 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);
注意这样做,byteArray
和floatArray
将共享相同的缓冲区,因此修改byteArray
将修改floatArray
反之亦然。
关于javascript - 在javascript中将浮点值转换为uint8数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46196990/