WavPack

特点

WavPack允许用户压缩、恢复8、16、24、32位整型以及32位浮点表示的WAV格式音频文件，另外它还支持多声道数据流以及非常高的采样率。与其它无损压缩机制一样，这种算法的压缩比例也随源数据的不同而改变。但对于普通的流行音乐，通常介于30%到70%之间；对于古典音乐以及其它音域较宽的音乐，通常能得到更高的比例。
另外WavPack引入了一种独特的“混合”模式，它使用一个附加的文件从而也具有了有损压缩的优点。与其它方法只生成一个文件不同，这种模式生成两个文件，其中一个是相对较小、可以单独使用的高质量有损压缩文件，另外一个是与有损文件一起使用实现无损数据恢复的“修正”文件。对于一些用户来说，这就意味着他们不必再考虑使用有损还是无损压缩这样一个问题。

历史

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版本包括的功能有针对单声道或者接近单声道的音频数据的改进处理、以及重新设计的压缩质量系统，这种改进可以以大幅增强的效率实现类似的压缩。

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系统上编译，如Linux、Mac OS X、Solaris、FreeBSD、OpenBSD、康柏Tru64、HP-UX等等，另外它也可以在Microsoft Windows、DOS、Palm OS以及OpenVMS上编译。它可以在许多平台上工作，如x86、ARM架构、PowerPC、AMD64、IA-64、SPARC、DEC Alpha、PA-RISC、MIPS以及Motorola 68k。