WavPack

**WavPack** 是由 David Bryant 開發的一個自由、開放原始碼的無失真音訊壓縮格式，其檔案的字尾名為.wv。

## 特點

WavPack 允許使用者壓縮、恢復 8、16、24、32 位元整型以及 32 位元浮點表示的 WAV 格式音訊檔，另外它還支援多聲道資料流以及非常高的取樣率。與其它無失真壓縮機制一樣，這種演算法的壓縮比例也隨源資料的不同而改變。但對於普通的流行音樂，通常介於 30% 到 70% 之間；對於古典音樂以及其它音域較寬的音樂，通常能得到更高的比例。

另外 WavPack 引入了一種獨特的「混合」模式，它使用一個附加的檔案從而也具有了失真壓縮的優點。與其它方法只生成一個檔案不同，這種模式生成兩個檔案，其中一個是相對較小、可以單獨使用的高品質失真壓縮檔案，另外一個是與有損檔案一起使用實現無失真資料恢復的「修正」檔案。對於一些使用者來說，這就意味著他們不必再考慮使用有損還是無失真壓縮這樣一個問題。

### 概要

* 快速高效壓縮與解壓
* 開放原始碼，按照類似於 BSD 授權條款的方式釋出
* 多平台
* 出錯時的健壯性
* 支援串流媒體
* 支援多聲道以及高解析度
* 混合／有損模式
* 硬體支援
* 支援標籤（ID3v1、APEv2 標籤）
* 支援 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]

## 支援

### 軟體

* 由 Speek 開發的自訂 Windows 前端
* NullSoft Winamp（外掛程式 w/ ReplayGain & Media Library 支援）
* foobar2000 - Advanced Audio Player（官方外掛程式，w/ ReplayGain & Cuesheets 支援）
* Windows Media Player（帶有 CoreWavPack directshow 濾波器）
* XMMS（帶有 Kuniklo 的外掛程式，原始碼）
* LAMIP（官方外掛程式）- 用於 Linux 及相關系統的模組化音訊播放器 - 首頁
* Adobe Audition (and CoolEdit) (filter w/ 32-bit floats & extra info save support)
* mp3Tag Pro - 通用標籤編輯器
* dBpowerAMP - Music Converter / Audio Player / CD Writer（官方外掛程式）
* Apollo Audio Player（外掛程式支援 w/ ReplayGain）
* FonePaw Video Converter Ultimate - 支援多種格式的影片播放器
* MusikCube - 自由音訊播放器（w/ WavPack 外掛程式）
* Ahead Nero Burning ROM（w/ 外掛程式）
* MrQuestionMan - Audio Identifier
* TuneFab Audible Converter - 自由的音訊播放器
* Burrrn - 直接從不同的格式燒制音訊 CD
* Mp3tag - 通用標籤編輯器
* Exact Audio Copy - CD Ripper（w/wavpack.exe 是外部壓縮程式）
* TuneFab Music Converter - 自由的多種格式音訊轉換器與播放器
* VideoSolo Blu-ray Player - 支援藍光影片的播放器
* VUPlayer - 自由的多種格式音訊播放器與轉換器
* TuneFab M4V Converter - 自由的影片播放器
* mp3Tag Pro - 通用標籤編輯器
* Xist (beta) - 支援 WavPack 的 OS X 播放器（原始碼）
* 帶有官方外掛程式的 XMPlay， - 用於 Windows 的自由小播放器
* Cog - 支援 WavPack 的用於 OS X 的新播放器
* MPXPlay - 支援 WavPack 的基於 DOS（MS-DOS、FreeDOS、DR-DOS）的播放器
* 1by1 與 Coolplayer，帶有 Winamp WavPack 外掛程式
* 不同平台的 WavPack 編譯版本
* The GodFather - 標籤與音樂管理器
* Wavpack4Wavelab - 第一款商用／專業波形編輯的第三方檔案輸入輸出外掛程式 Steinberg Wavelab 5/6
* Easy CD-DA Extractor - 商業 CD 音軌抓取、編碼及轉換工具
* OggdropXPd - 直接從包括 WavPack 在內的各種無失真格式轉換成有損開放原始碼 Ogg Vorbis 格式
* Quintessential Player 帶有外掛程式
* KSP Sound Player 中預設支援

### 硬體

* 執行開放原始碼 Rockbox 韌體的播放器，如 iriver ihp100、ihp120、ihp140、H320、H340 以及 iPod Video/Color/Photo/Nano（Rockbox 首頁）
* Roku PhotoBridge HD（w/ 外掛程式）

### 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。

## 參見

* DVD+Audio
* FLAC
* TTA
* Monkey's Audio
* Meridian Lossless Packing
* TAK

## 外部連結

* 官方網站
* Hydrogenaudio Forums 上的 WavPack 論壇
* ReallyRareWares 上的歷史版本
* Hydrogenaudio Wiki 上的幾種無失真音訊編碼器比較