WavPack

自由且開放原始碼的無損音訊壓縮軟體

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

WavPack
開發者David Bryant
目前版本5.5.0(2022年7月9日,​2年前​(2022-07-09
原始碼庫 編輯維基數據連結
作業系統跨平台
類型音頻格式編解碼器
特許條款BSD特許條款
網站www.wavpack.com

特點

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]頁面存檔備份,存於互聯網檔案館

支援

軟件

硬件

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

參見

外部連結