WavPack

维基百科,自由的百科全书
跳转至: 导航搜索
WavPack
開發者 David Bryant
穩定版本 4.60.1 / 2009年11月29日
操作系统 跨平台
类型 音频格式編解碼器
许可协议 BSD授權條款
網站 www.wavpack.com

WavPack是由 David Bryant 开发的一个自由、开放源代码的无损音频压缩格式,其文件的后缀名为.wv。

特点[编辑]

WavPack 允许用户压缩、恢复 8、16、24、32 位整型 以及 32 位浮点表示的 WAV 格式音频文件,另外它还支持多声道数据流以及非常高的采样率。与其它无损压缩机制一样,这种算法的压缩比例也随源数据的不同而改变。但对于普通的流行音乐,通常介于 30% 到 70% 之间;对于古典音乐以及其它音域较宽的音乐,通常能得到更高的比例。

另外 WavPack 引入了一种独特的“混合”模式,它使用一个附加的文件从而也具有了有损压缩的优点。与其它方法只生成一个文件不同,这种模式生成两个文件,其中一个是相对较小、可以单独使用的高质量有损压缩文件,另外一个是与有损文件一起使用实现无损数据恢复的“修正”文件。对于一些用户来说,这就意味着他们不必再考虑使用有损还是无损压缩这样一个问题。

概要[编辑]

  • 快速高效压缩与解压
  • 开放源代码,按照类似于BSD许可证的方式发布
  • 多平台
  • 出错时的健壮性
  • 支持流媒体
  • 支持多声道以及高分辨率
  • 混合/有损模式
  • 硬件支持
  • 支持标签(ID3v1APEv2标签
  • 支持 RIFF 格式的大块数据
  • 兼容回放增益
  • 良好的软件支持
  • 能够生成 Win32 平台下的自解压文件
  • 支持 32 位浮点数据流
  • 支持嵌入式节目单
  • 包含用于完整性检查的 MD5 散列函数
  • 可以按照对称或者不对称模式进行编码(降低编码速度可以提高解码速度)。

历史[编辑]

David Bryant 在 1998 年年中开始了 WavPack 的开发并发布了 1.0 版,这第一个版本只有无损压缩解压音频这项功能,但是当时它就已经跻身效率与速度比最好的编码器之列了。

在 1.0 版之后,很快 Bryant 就发布了 2.0 版,这个版本的特点是使用了有损编码,它直接对预测残余进行了量化以减少数据量,而没有使用心理声学 masking 模型

1999 年,他发布了 3.0 版,新颖的功能成为这个版本的特点,例如通过减小压缩比实现的快速模式、压缩无头原始PCM音频文件以及使用 32 位循环冗余校验的错误检测功能。

WavPack 的开发仍在继续,在 后面的 3.x 版本中添加的一个主要特点就是混合模式,在这种模式下编码器生成一个有损文件以及一个纠正文件,这样它们就可以经过解压还原出原始的 PCM 数据流。

WavPack 4包括许多重要的改进,如快速搜索、多声道支持、高分辨率音频支持等等,这些特性使它成为功能最全的时髦无损音频压缩器之一。4.31版本针对 Linux/OSX 的错误修正之后得到用于这些系统的 4.32 版,但是它没有与质量相关的更改。 WavPack 4.4 版本包括的功能有针对单声道或者接近单声道的音频数据的改进处理、以及重新设计的压缩质量系统,这种改进可以以大幅增强的效率实现类似的压缩。 [1]

2009年11月29日發布了4.60.1版本。

支持[编辑]

软件[编辑]

硬件[编辑]

DVD+Audio[编辑]

自从 2005 年起,WavePack 就开始用于 DVD+Audio 上的音频压缩取代 DVD-Audio 上昂贵的 Meridian Lossless Packing

技术[编辑]

为了保证高速运算,WavPack 完全使用整数算术这样一种简单的预测,在“最快”模式下,预测值是前面两个采样的简单数学外推。例如,如果前面两个采样是 -10 与 20,那么预测值就是 50。在缺省模式下,使用一个简单的自适应因子衡量前面采样对于预测影响的权重。在我们的这个例子中预测值可能从 20 到 50 之间变化,也就是前面的采样从没有影响到影响最大这样一个范围变化。这个权重因子随着音频数据频谱特性的变化而不断更新,所以它是“自适应”的。

然后从待编码的实际采样中减去生成的预测值得到误差,在单声道模式下这个值直接送到编码器去,但是立体声信号通常在两个声道之间有一些能在后面使用的相关性,所以左右声道分别计算出各自的误差值。在“快速”运算模式下这两个新生成的值直接送到编码器而不管它是左声道还是右声道。在缺省模式下,这个误差值总是随着平均、左或者右三者之一发送到编码器。自适应算法根据声道不断变化的平衡性确定发送三者中最有效的一个。

David Bryant 为 WavPack 开发了一个独特的数据编码器,他认为这个编码器有两个方面要比 Rice编码优秀。由于对于这种类型的数据来说 Rice 编码代表了最优的位编码(有时也称作哈夫曼编码)。WavPack 编码要比它稍稍逊色一点,大约差距是 0.15 位/采样,也就是说 16 位数据大约差 1%。WavPack 编码器的第一个优点是在编码前数据无需缓存,它将每个采样直接转换成位码。这从计算的角度来讲效率更高,在一些延迟控制很关键的应用中表现更好。它的第二个优点是很容易适应有损编码,这是因为除了隐含的一个最高位之外所有重要的数据位都直接进行发送。按照这种方法,就可以只传送每个采样中带有符号的最高 3 位。实际上,可以只传送符号位以及用平均 3.65 位/采样 表示的使用隐含最高位的采样值。

这个编码机制用于实现 WavPack 的“有损”模式。在“快速”模式下,非自适应去相关的输出只是简单地四舍五入到最近的特定位数的编码值。在缺省模式下,使用自适应的去相关,它可以将噪声平均减小 1 dB,并且当前以及下一个采样在选择两个可用的编码值时都参与衡量,这又将噪声减小 1 dB。

由于开发者认为整数运算受不同芯片的影响较小,而芯片的不同可能带来无损压缩特性的变化,如 Pentium 浮点运算的缺陷就是一个明显的例子,所以他决定在 WavPack 算法的数据处理中不使用浮点运算。使用浮点运算的无损压缩工具如果运行在有缺陷的 Pentium 芯片上可能就会生成不同的结果。即使我们不考虑这些已经存在的缺陷,浮点运算也很复杂,在不同的“正确”实现之间也可能有微小差别,对于这类应用可能会带来麻烦。为了进一步加强 WavPack 压缩数据的完整性,编码器在生成的数据流后包括有一个 32 位的错误检测码。

WavPack 的源代码非常易于移植到其它平台,它已经可以在几种不同的 Unix 系统上编译,如 LinuxMac OS XSolarisFreeBSDOpenBSD、康柏 Tru64HP-UX等等,另外它也可以在Microsoft WindowsDOSPalm OS 以及 OpenVMS 上编译。它可以在许多平台上工作,如x86ARM架构PowerPCAMD64IA-64SPARCDEC AlphaPA-RISCMIPS以及Motorola 68k

参见[编辑]

外部链接[编辑]