压缩osu重放lzma字节串
项目描述
WTC
WTC是lzma压缩格式的扩展,专门设计用于在存储之前使osu!std重放文件更小。它减少了原始.osr格式中某些数据类型的大小,实现了约40%的损失性压缩比率。
部分 | 原始lzma数据类型 | WTC数据类型 |
---|---|---|
w(自上一帧以来的毫秒数) | 长(8字节) | 24位整数(3字节) |
x(x坐标) | 浮点数(4字节) | 短(2字节) |
y(y坐标) | 浮点数(4字节) | 短(2字节) |
z(按键组合的位组合) | 整数(4字节) | 字符(1字节) |
这压缩了原始20字节的帧到8字节的帧,但不是没有损失。w、x和y的精度丢失,但z没有,因为osu!标准中按键位组合永远不会超过4位。虽然对于其他游戏模式(如7k狂热)可能更大,但这种压缩器专门用于osu!标准。
WTC压缩实现了平均40% ±5的压缩(不是一个正式计算出的数字 - 只是基于经验)。
安装
$ pip install git+git://github.com/osu-anticheat/wtc-lzma-compressor
用法
import wtc
# to compress an lzma bytestring
wtc_bytestring = wtc.compress(lzma_bytestring)
# to decompress a wtc bytestring into an lzma bytestring
lzma_bytestring = wtc.decompress(wtc_bytestring)
# compress and decompress are (almost) inverse operations, so lzma_bytestring ≈ wtc.decompress(wtc.compress(lzma_bytestring)).
# some precision is lost, so the strings are not identical.