gpt4 book ai didi

javascript - 将 Float32Array 转换为 Uint8Array 同时保留 IEEE 754 表示形式

转载 作者:行者123 更新时间:2023-12-03 02:16:28 25 4
gpt4 key购买 nike

我有一个来自decodeAudioData方法的float32Array,我想将其转换为Uint8Array,同时保留float32 IEEE 754音频数据

到目前为止我已经尝试过,

var length = float32Array.length;

var emptyBuffer = new ArrayBuffer(length * 4);
var view = new DataView(emptyBuffer);

for (var i = 0; i < length; i++) {
view.setFloat32(i * 4, float32Array[i], true);
}

var outputArray = new Uint8Array(length);

for (var j = 0; j < length; j++) {
outputArray[j] = view.getUint8(j * 4);
}

return outputArray;

编辑:

我只需要保留二进制表示形式,就像 answer. 中那样

最佳答案

var output = new Uint8Array(float32Array.length);

for (var i = 0; i < float32Array.length; i++) {
var tmp = Math.max(-1, Math.min(1, float32Array[i]));
tmp = tmp < 0 ? (tmp * 0x8000) : (tmp * 0x7FFF);
tmp = tmp / 256;
output[i] = tmp + 128;
}

return output;

任何有疑问的人都可以使用 Audacity 轻松测试这一点的导入原始数据功能。

  1. 下载 sample raw data我使用Web Audio Api 的decodeAudioData 方法从视频文件中解码它。
  2. 使用上述方法将样本原始数据填充的Float32Array转换为Uint8Array(或使用您自己的方法,例如new Uint8Array(float32Array.buffer) 听到损坏的嘶嘶声)并下载 uint8 pcm 文件。

    forceDownload(new Blob([输出], {
    类型:“应用程序/八位字节二进制”
    }));

  3. 使用文件->导入->原始数据...在 Audacity 中对下载的数据进行编码编码应设置为无符号 8 位 PCM 和示例速率应为 16000 Hz,因为原始解码的音频文件为 16000 Hz。

关于javascript - 将 Float32Array 转换为 Uint8Array 同时保留 IEEE 754 表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49348743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com