JavaScript 中的浮点数组压缩

Lap*_*sio 1 javascript compression arrays string performance

我看到了很多js的压缩方法,但大多数情况下压缩数据都是字符串,并且包含文本。我需要压缩 0-1 范围内少于 10^7 个浮点数的数组。

由于精度并不重要,最终我可以将其保存为仅包含数字 0-9 的字符串(仅包含每个浮点数小数点后的前 2 位数字)。什么方法最适合这样的数据?我想要尽可能小的输出,但压缩这个字符串的时间不应超过 10 秒,每个浮点数保存 2 位数字时,大约最多 10 000 000 个符号。我看到了很多 js 的压缩方法,但在大多数情况下,压缩数据是字符串形式,并且包含文本。我需要压缩 0-1 范围内少于 10^7 个浮点数的数组。

由于精度并不重要,最终我可以将其保存为仅包含数字 0-9 的字符串(仅包含每个浮点数小数点后的前 2 位数字)。什么方法最适合这样的数据?我希望输出尽可能小,但解压缩该字符串的时间不应超过 10 秒,每个浮点数保存 2 位数字时,大约最多 10 000 000 个符号。

数据包含声音波形记录,以便在不支持 Web Audio API 的老式浏览器上进行可视化。波形在 Chrome 用户客户端上以 20 fps 录制,压缩并存储在服务器数据库中。然后在请求绘制可视化后发送回 IE 或 ff - 所以我需要有损压缩 - 达到能够与歌曲元数据请求一起发送的大小可能确实是有损的。我希望可以对 wav -> mp3 64k 级别进行压缩(例如 200:1 或其他),没有人会认识到波形在可视化上并不完美,我想也许可以将这些浮点数保存为 0-9a-Z,它给出 36 而不是100步,但将一个频率的记录减少到1个符号。但接下来要对这个带有 0-Z 符号的字符串使用什么压缩才能实现最佳压缩?lzma适合这样的字符串吗?压缩/解压缩将在 Web Worker 上运行,因此不需要真正即时 - 解压缩需要 10 秒,压缩并不重要 - 而不是一首歌曲,所以大约 2 分钟

Cor*_*ica 6

在黑暗中试一试,如果你确实只能依赖小数点后的前两位数字(即数组中没有 0.00045),并且你需要两位数字,那么最简单的方法就是乘以 256 并将整数部分作为一个字节

encoded = Math.floor(floatValue * 256)
decoded = encoded / 256.0
Run Code Online (Sandbox Code Playgroud)

但是,如果您对数据了解更多,则可以从值中挤出更多熵。压缩比为 4:1。