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

參見

外部連結