附加压缩方法规范
注意: WinZip? 用户不需要阅读或了解这个网页中的内容。这是为 Zip 文件应用程序开发人准备的。
这个文件描述的文件格式,WinZip 用于创建 PPMd 压缩和 WavPack 压缩的 Zip 文件。PPMd 压缩格式于 2005 年 11 月被引入到 WinZip 10.0 中。 WAVPACK 压缩格式是在 WinZip 11.0 中引入的,具体时间是 2006 年 11 月。
我们每次的更新信息都提供在这里,例如任何文件格式更改的说明,或者增加的附加注释和执行提示。如果您愿意接收我们对这个文件所作任何实质修改的电子邮件公告,您可以登录下面我们的开发者信息邮件列表。
没有涉及基础的 Zip 文件格式,WinZip Computing 已经扩展了格式规范以支持 PPMd 和 WavPack 压缩,而且这个文件完整描述了格式的扩展。另外,我们提供相关的执行 PPMd 和 WavPack 压缩的非付费的第三方源代码信息--WinZip 使用的也是相同的代码。 我们认为,使用免费的压缩代码和它的详细说明将可以使它更方便的被所有开发者为他们的 Zip 文件应用程序添加兼容的压缩方式。
这些文件不是一个压缩方式或 Zip 文件结构的指南。虽然我们已经尝试提供必要的 Zip 文件格式中 PPMd 和 WavPack 压缩规格的详细资料,开发人员和其他感兴趣的第三方人员将需要持有或获得一份可以理解的基础压缩概念,Zip 文件格式,等等。
WinZip Computing 对于在本文件中提供的信息不作任何担保。特别需要指出的是,WinZip Computing 不专声明或保证在些提供的信息是没有错误的或者适用任何特殊的用途,或者在些描述的文件格式将在未来的 WinZip 版本中得到支持。 您应该在与好的设计实际相一致的环境中进行测试与验证所有的代码和技术。
WavPack - 压缩方式 97
WavPack 是由 David Bryant 开发的一个开源的无损音频压缩格式。WavPack 4.32 的信息和源代码,向前和向前兼容在 WinZip 11.0 及更新版本中的 WavPack ,具体请访问 http://www.wavpack.com。
WinZip 存储了每一个 WavPack 压缩的 .WAV 文件作为在 Zip 文件中结尾本地文件头后直接的 WavPack 常规输出。在本地和中央文件头中它设置压缩方式到 97 。WinZip 也在本地文件头和中央文件头中通过字段来设置解压缩必需的版本号和制作的版本号,如果文件已经用压缩运算进行了压缩,它将使用相同的数值。
注意: 它必需压缩全部的字节序列来用于存储一个采样,而不仅仅是用比特来描述采样自身。例如,12-比特采样在 .WAV 文件格式中需要 2 字节(16-比特)。如果您告诉 WavPack ,采样大小只有 12-比特,那么在压缩期间,它将忽略不使用的 4 比特,并在解压缩时将它们设置为 0 ,而不原它们在原始文件中的情况。因此,为了保证解压缩出来的比特数和原始文件的相同险,告诉 WavPack 采样大小用完整的 16-比特代替实际的 12-比特是必需的。
PPMd - 压缩方式 98
PPMd 是由 Dmitry Shkarin 开发的一个开源的数据压缩运算法则。WinZip 使用版本号 I,修正号 1 的运算法则。适用于 PPMd I rev. 的信息和源代码可以在 http://www.compression.ru/ds/ 上找到。
WinZip 开始对 Zip 文件中包含的下述三个领域的单一的双字节“文字”数据启用 PPMd 压缩:
- 方法模块恢复内存不足:
MRM_RESTART - 重新启动模块 (0 - 默认)
MRM_CUT_OFF - 切断模块 (1)
MRM_FREEZE - 冻结关联树 (2)
- SubAlloc 大小(MB): 默认为 50MB 。
不管从 1MB 到 256MB,WinZip 将使用一个 SubAlloc 大小来解压缩文件(假设电脑运行 WinZip 时有足够内存)。
- 最大模块命令: 默认为 8 。
不管从 2 到 16 ,WinZip 将使用最大模块命令来解压缩文件(同样,假设电脑运行 WinZip 时有足够内存)。
用下面的 C++ 代码段可以获知在压缩文件的开始部分是否充满了双字节“文字”(存储在 Intel low-byte/high-byte order):
- WORD wInfo = static_cast<WORD>(MaxModelOrder - 1)
| static_cast<WORD>((SubAllocatorSize - 1) << 4)
| static_cast<WORD>>(ModelRestorationMethod) << 12;
用于文件压缩使用的 PPMd WinZip 设置的版本号是解压缩所必需的,而且,如果文件已经用压缩运算进行了压缩,那么版本号在本地和中央文件头字段的值是相同的。
在此我们要感谢:
- Dmitry Shkarin 将 PPMd 共享给了世界
- Dmitry Subbotin 将“carryless rangecoder”出售给了共用领域
- David Bryant 开源了 WavPack 源代码
加入到开发者信息邮件列表
我们计划使用这个邮件列表来向订阅用户通报在 WinZip 网站的开发信息页中的任何真实的更改。
文件版本号: 2.0
最新修正: 2005,11,15
版权所有? 2003-2006 WinZip International LLC
保留所有权利
