Friday, June 20, 2008

音訊編碼簡介: Musepack

零. 前言

破壞性音訊格式的市場經過多年來各家的爭奪,版圖大致已定,MP3早是最大贏家,成為消費性電子產品與個人電腦上的主流,其繼承者AAC也隨著iPod的流行發熱,成為各類媒體播放器與手機通訊設備的重要應用,WMA在微軟大力發展推行之下逐漸追趕,ATRAC隨著MD淡出市場早就被大家遺忘,Vorbis繼續在自由軟體界裡頭消遙著。在此要介紹的,則是同為出身自自由軟體社群,但相對冷門的編碼:Musepack

一. 什麼是Musepack

Musepack出現於1997年左右,是針對音樂壓縮而開發的破壞性編碼,以MPEG-1 Audio Layer 2(MP2)為基礎,但擴增了更多的壓縮演算法,與MP3系出同門,當初更以MP3為競爭對象。由於MP2與MP3一樣,實為受專利權控制的編碼,故Musepack一度受到有侵權可能的質疑,因此Musepack在開發過程中完全剔除了與MP2有關的程式碼,一切從零開始。

Musepack的壓縮模型所針對的,是中高資料流率的表現。在平均值為170kpbs左右的預設Standard模式之下,可以達到在人類聽覺感知上,近乎與原始未壓縮音樂沒有差異的表現,也就是所謂的「Transparent」。資料流率依序增高的ExtremeInsaneBraindead模式更能大幅減少壓縮噪聲,除非你有超人般的聽力與高傳真的音響設備,從Insane模式開始,大概就很難挑出雜訊了。

礙於本身針對中高流率的設計目標,Musepack並沒有對低流率的使用做最佳化,因此在低到32/64kpbs這種流率時,就不是Vorbis與AAC,甚至WMA的對手了。這類編碼為了網路串流(Streaming)的應用,有針對低流率的情況做特別調校,但這就不是Musepack的強項。 

身為改良的MP2,Musepack是純粹的變換性流率編碼(Variable Bit-Rate),也就是說,所謂的128kpbs、160kpbs等音質分類法,對Musepack來說是沒有意義的,Musepack編碼器會依照指定的壓縮品質,針對音樂各部所需,給予不同的資料量,以維持檔案大小和音質的平衡,這種壓縮方針與AAC、Vobis等一類較先進的破壞性編碼無異。此外,Musepack最初名為MPEGplus,有時更簡稱為MPEG+與MP+,但為了強調其發展於自由軟體界,與受專利控制的MPEG格式不同,而後才改名為Musepack,並以MPC為檔案的副檔名,不過這和具有相同簡稱的Media Player Classic可是一點關係都沒有喔。

二. 使用注意事項

2.1 如何解碼播放?

於Windows上,最方便且直接的播放方式,是使用foobar2000,它原生支援Musepack,不需要安裝任何外掛軟體。若想用Windows Media Player或Media Player Classic一類的DirectShow播放器,也可以從Musepack的官方下載頁安裝RadLight MPC DirectShow Filter,該頁面上同時也有Winamp用的外掛解碼器。

2.2 如何編碼壓縮?

死硬派的指令列使用者可能會喜歡Musepack官方提供的mppenc編碼器,懶一點的人可以搭配郵第三方編寫,非官方的MPC Batch Encoder圖形介面,跟mppenc一起使用,這些東西同樣可在官方下載頁找到。但實際上這兩種方法都不太方便,MPC Batch Encoder好一陣子沒跟新了,對於包含中文的檔案路徑支援度非常差。較好的方式,是直接將mppenc扔到foobar2000的程式根目錄中,就可以直接使用它的Converter做Musepack轉碼。

  • foobar2000內部早就提供了Musepack的壓縮設定,你只要把mppenc編碼器裝好就行了。其實foobar2000提供了更多其他的編碼壓縮,就等著你用。

  • 這是壓縮時的音質設定,foobar2000提供了Q3到Q10的音質,平均資料率為90kbps至350kbps不等,但依照Musepack的變動資料率天性,此數值僅供參考。從最差的Q3往上數,分別是ThumbRadioStandardExtremeInsane,而Q8至Q10則為Braindead,基本上Thumb與Radio設定你不會想理它。
2.3 Musepack的優點?

冷門歸冷門,Musepack還是有長處:
  1. 開放原始碼,沒有專利問題。
  2. 編碼與解碼速度很快,與MP3、AAC與Vorbis比起來,省時省力。
  3. 壓縮架構良好,在低流率時Musepack的音樂雖然難逃頻寬衰減的現象,但很少出現MP3與Vorbis中「嘶嘶聲」一類的壓縮失真,在古典音樂中特別明顯,這對走中高流率路線的Musepack來說基本上不構成問題。
2.4 Musepack的缺點?

其實我能發現的缺點比優點還多:
  1. 取樣率最高只能到達48KHz。雖然CD唱片的取樣率是44.1KHz,Musepack的規格已經足以合乎備份音樂的需求,但跟別的編碼比起來,Musepack在這方面的規格硬是矮一截。
  2. 檔案本身不支援隨選解碼,也就是Fast seeking。當你在foobar2000中調動音樂的進度軸時,foobar2000無法直接跳到該定點播放,而必須將原播放處與指定播放處之間所有的資料全數解碼後,才能繼續播放,這是非常暴力的解決方式,與Musepack的解碼速度快慢無關。雖然現在的CPU能力很好,這當中的延遲可說短到微乎其微,但這實際上是Musepack檔案結構的重大缺失。
  3. 目前的Musepack無法用於網路傳流,這點敗給了MP3、Vorbis等對手。
  4. 最高僅支援雙聲道。雖說常見的音樂仍是以雙聲道方式編製,但站在最高聲道數可達48的AAC面前,Musepack似乎是黯然失色。過多的聲道數確實是不實用,但這方面的規格,Musepack理當也做得到才對。
  5. 官方發展極度緩慢。Musepack的音質好得沒話說,但以上的缺失從Musepack誕生以來就讓人詬病已久,發展團隊雖承諾這些問題在之後的版本中會一倂改善,但目前的進度依舊是以龜速前進。這與更新速度快的LAME MP3 Encoder,和擁有數個做最佳化調校第三方開發者的Vorbis比起來,真是差得可以。
三. 其他雜談

撇開前述的缺點不談,Musepack優異的音質表現,依舊值得一試,而且我們鼓勵你這麼做,十全十美的編碼當然不存在,但至少你多了一個選擇。不過喜歡帶著隨身聽或音樂手機到處跑的人可要失望了,除了在電腦上播放以外,Musepack在其他硬體上的支援度少得可憐,也不如MP3和Vorbis那般跨足較多的平台。

由於Musepack極低的佔有率,許多論壇上早已出現「Is Musepack dead or not?」這類的爭論,想當然這問題是戰得無解,畢竟Musepack依舊有死忠派支持,還是有很多人對它抱持期待。其他的破壞性編碼這幾年來發展快速,早就有急起直追之勢,希望Musepack團隊可以再加把勁,別讓這麼優秀的編碼被埋沒了。

四. 音樂樣本

最後提供三首Musepack樣本音樂以供參考,皆由Exact Audio Copy抓音軌後,再由foobar2000的Q7 Insane設定壓製,分別是:
  1. Polynasia,日本DJ石野卓球的作品,出自1998年的BERLIN TRAX專輯。
  2. Little Light of Love,Eric Serra替電影第五元素自編自唱的主題曲。
  3. 貝多芬第五號命運交響曲第一樂章,由已故指揮家卡拉揚指揮柏林愛樂演奏,1984年錄音。
請由此處下載服用。

2009.3.19更新:

今天突然發現Musepack已經在今年的二月底有重大的官方更新了,詳情請參考官方連結:
http://forum.musepack.net/showthread.php?t=578

Saturday, June 7, 2008

CD唱片備份: WavPack編碼搭配EAC與foobar2000

零. 前言

你有很多的唱片收藏嗎?擔心唱片在播放、拿取的過程中,會刮磨、染塵?或著,當你將音樂備份到電腦中後,卻受夠了MP3或WMA這類破壞音質的
格式?本教學展示如何使用Exact Audio Copy(EAC)與foobar2000,搭配無損編碼WavPack,將CD唱片備份為:儲存整張唱片音訊資料的單一WavPack檔案,以及儲存唱片標題、曲目、音軌分段等資料的Cue Sheet,以利往後原音重現。

在正式開始之前,先釐清以下幾個問題:

0.1 為何要用EAC?CDex或foobar2000不就能抓音軌了嗎?

是的,有太多軟體可以抓音軌了,但是CD唱片普遍存在一個問題:讀取錯誤。雖然CD上的資訊不是0就是1,但依照CD光碟的標準規格,一般的資料(Data)光碟採用了具備錯誤修正碼(Error-Correcting Code,ECC)的Mode 1儲存資料,因為資料是不容許產生任何錯誤的,就算在讀取過程中發生了錯誤,也可以藉由錯誤修正碼,將正確資訊還原;而CD唱片與Video CD這一類媒體,則是採用沒有錯誤修正碼的Mode 2。因此,從壓片工廠出生的唱片,雖然可以確保其內容與原始的母片一模一樣,但在光碟機的讀取過程中,不能保證沒有任何錯誤產生,且不同的光碟機產生的錯誤,也不盡相同。這也是為何獨立的CD座機售價可以從數千元到數十萬元不等,錯誤率越低的機子,越能原音重現。

因此,EAC之所以被發展的重要目的,就是以最謹慎、最保險的方式抓取音軌資料。在讀取過程中,EAC會將任一區段的音訊重複讀取,確保每次所得的資訊皆為相同後,再繼續讀取下一個區段,且針對不同光碟機所具備的讀取偏移(reading offset),EAC亦能做出對應的修正。由讀取錯誤而產生的爆音、扭曲,基本上在EAC中是看不到的。

0.2 好吧,那為何又要動用foobar2000?

理論上只要經過適當的設定,EAC可以一次完成抓取音軌、轉檔的作業,但在此將WavPack轉檔的工作交給foobar2000,有以下理由:

  1. 我懶得設定EAC了。
  2. 搭配foobar2000可以讓我同時教更多的東西。(這不是兩者牴觸嗎XD)
  3. foobar2000的轉檔作業可以舉一反三,學了一個WavPack等於學了其他的。
0.3 那WavPack又是什麼?為何不用Cation234Pack或是YufaPack? (咦)

WavPack與FLACMonkey's Audio(APE)、True Audio(TTA)一樣,皆為無損(lossless)音樂壓縮格式,相對於破壞性(lossy)的MP3或WMA,在壓縮時不會丟掉任何原有的音頻資訊,如同zip檔案在解壓縮後可以得到與原始檔案完全相同的內容,故不會產生在破壞性格式中出現的扭曲、爆音,或音域縮減等怪異現象。唯一的缺點是,所得的成品檔案會比破壞性編碼來得大。若輸入未壓縮的Wave檔案,所得到的WavPack檔案大小約為原始的40%~70%左右,但換取來的,是更好的音質,與具備百分百還原成原始Wave檔案的能力。

至於為何選擇WavPack?這是由於:
  1. WavPack在各方面的表現相當平均,壓縮率雖然比APE略小,但編碼、解碼速度與FLAC不相上下,更比APE快上許多。
  2. APE並非免費、開放式的編碼,依舊受到專利權的牽制,WavPack與FLAC沒有這方面的限制。
  3. foobar2000需要安裝額外的解碼器才能播放APE與TTA,對於WavPack與FLAC則是原生支援。
  4. FLAC已經有很多人在用了,既然你來到本站,就學個新東西吧。
0.4 為何要備份成單一的WavPack檔案,而非按照各音軌切割成立檔案?

在硬碟中存放上千首的MP3當然很壯觀,但在一張唱片中,所有的音軌實際上是以頭尾相接的方式儲存的,由於我們的主要目的,是為了將整張唱片作封存,所以理論上,將所有的音軌一次抓取,是較為合理的,也較為準確。對於電腦硬碟來說,儲存一個大檔案,亦比儲存數個零碎的小檔案要來得健康。這麼做當然也有缺點,因為你無法將曲子獨立出來,且整個檔案必須跟著儲存音軌分段資訊的Cue Sheet檔案走,但對於以封存音樂為目的來說,這應該不成問題。

0.5 那麼,我的音樂在電腦上播放時,會比用座機播放來得好/差嗎?

這是個已經戰得天荒地老的問題了,座機派與電腦訊源派各有各的論述,況且音訊的傳遞不論以何者當音源,皆會產生無法避免的劣化,本文僅針對唱片備份為主,請各位不要再吵架了>///<

一. 準備工作


首先介紹本次教學的主角,是由已故指揮卡拉揚(Herbert von Karajan)指揮維也納愛樂,演奏德弗札克(Antonín Leopold Dvořák)的第九號「新世界」交響曲,副曲為史麥塔納(Bedřich Smetana)的莫爾道河:


1.1 foobar2000與WavPack編碼器

我假設你已經裝好foobar2000了,它的安裝沒什麼特別的,至於WavPack,請到官方下載頁,找尋WavPack Win32下載點,目前最新版本為4.41。WavPack的壓縮檔中,只有wavpack.exe用得著,把它放到foobar2000的程式根目錄下即可。

1.2 Exact Audio Copy

EAC目前最新版為0.99 prebeta 4,別抓到德文版的,那我就很糗啦。EAC的安裝過程稍嫌複雜,需要做些說明。首先是元件選擇:


  • 只要安裝EAC核心與AccurateRip就好,AccurateRip可以將你截取的音軌與網路上的資料做比對,CDRDAO是增強EAC的燒錄機支援度用的,FLAC編碼我們不用,eBay Icon則是EAC的贊助廣告,可有可無。
安裝完成並啟動後,設定精靈會自動跳出來,首先為光碟機選擇:


  • 雖然BenQ DW1670的揪錯能力比1640好得多,不過還是兩台都選了,BenQ BenQ國貨好。後面三台是我的虛擬光碟,不用理它。
EAC會帶著你設定所選的光碟機,並詢問你要求的是準確度還是速度:


  • 當然要求準確度,不然用EAC做什麼。
這時突然發現DW1670的規格資料已經在EAC的資料庫裡頭了,基本上如果你的光碟機是大廠的主流機種,那麼EAC可以直接辯視它的機會非常非常高。不過為求謹慎,我們還是選擇不要採用預設設定,而用手動的方式偵測光碟機的規格:


  • 在此暫時不對光碟機的功能特性做詳細說明,不過簡單來說,有Accurate stream功能的光碟機可以較準確的抓音軌,Audio cache沒有反而比較好,因為EAC會反覆讀取同一區段的音軌,光碟機若有音源快取的功能,那EAC在每次讀取時,還得命令光碟機清空緩衝區,以免每次讀取的資料都是上次的舊資料。
這時請放入一張沒有刮痕與灰塵的唱片到光碟機中,協助EAC偵測光碟機的特性。在偵測的期間內,請不要亂動電腦,讓EAC專心一點。幾分鐘後,結果就出來了:


  • 雖然測試結果與EAC的內部資料庫相同,不過親自確認還是比較安心些。
有兩台以上光碟機者,就依照以上步驟,繼續設定餘下的光碟機。接著會碰到編碼器的選擇,但我們不打算讓EAC做轉檔工作,所以選擇現在不要設定編碼器。

再來是freedb.org的設定,此功能可以讓EAC上網抓取光碟的曲目資料,省去手動輸入的麻煩,務必啟動,但必須提供你的eMail位址,才能正常登入freedb.org。

接著的Filename Configuration請自行決定,挑一個自己順眼的檔案命名方式即可。最後我們選擇beginner的設定,讓EAC替我們打點大部分的組態。往後有必要的話,可以自行將expert專家及設定打開。

此外有一個非常重要的設定必須手動開啟,在EAC的主視窗選擇你要設定的光碟機後,再選擇EAC->Drive Options,由Gap Detection頁面,將Detection Accuracy調整至Secure


  • 這麼重要的東西,真不明白為何預設為Inaccurate?
以上就是所有的準備工作,若覺得哪邊的設定不滿意,可以於EAC清單選擇EAC->Configuration Wizard,將整個設定過程再跑一次。

二. 音軌擷取

EAC在多次改版後,擷取音軌的流程已經變得很平易近人了,在放入唱片後,首先選擇Database->Get CD Information From->Remote freedb,以取得唱片資訊:

接著選擇Action->Test & Copy Image & Create CUE Sheet->Uncompressed,讓EAC先行測試,再抓取音軌:

在抓音軌的過程中請耐心等候,你會發現EAC的運作速度比其他同類型的軟體還要慢,且光碟機的讀取速度雖然不快,但運轉音量應該比平時要大得多,不過等待是值得的。擷取完畢後,若你發現EAC回報唱片的Quality非100%,也不用擔心,那表示EAC在抓音軌的過程中,很可能因為唱片上有些指紋、灰塵,或是光碟機自身的問題,讓EAC於某個區段多費力讀取了幾次,並不代表你的唱片本身有問題。若EAC回報你的唱片在AccurateRip中沒有相符的資料,也不必緊張,因為很多唱片不只發行了一個版次,且AccurateRip上的資料僅代表別人回報的結果。只要EAC回報「No errors reported」,那大可放心。

三. WavPack轉檔與成品

轉檔方式很容易,只要將EAC抓取的WAV檔案扔到foobar2000裡頭,在其上按滑鼠右鍵,選Convert->Convert to,再選擇WavPack,就可開始轉檔。
若想提高壓縮率,可按上圖的箭頭處,自行設定:
  • Compression Mode對於檔案大小的影響度比較大,Additional Processing雖然可以讓檔案再小一點點,可是會大幅增加壓縮檔案的時間,請自行斟酌。Hybrid Lossy Mode是WavPack最獨特的地方,不過既然我們要求的是音質,破壞性的壓縮功能就不理它了。
轉檔時間依照個人電腦配備而定,在我的雙核Opteron 165與2G Ram的環境下,平均花費時間可達到音樂長度的1/50左右,也就是50x。


  • 壓縮好的WavPack檔案,容量約為原始WAVE檔案的40%左右,對於無損格式來說,已經是很高的壓縮率了。
最後一個步驟,請用NotePad,或任何一個文字編輯器,打開由EAC產生的CUE Sheet,將「檔案名稱」的副檔名,由wav改成wv


  • 要改的是wav,不是後頭那個WAVE,別改錯了。
最後就可以把EAC擷取的WAV檔案刪掉了,留下的CUE Sheet與WavPack檔案是最後成品,這兩者務必放在同一個檔案夾/目錄下,才能播放。播放時只要將CUE Sheet扔到foobar2000中就行了。


  • 成品CUE+WavPack於foobar2000中播放,你可以發現WavPack檔案本身還提供了檔案指紋MD5碼,以利檔案整合度的檢查與偵錯。
四. 參考資料

沒有任何一種編碼格式是完美的,各類無損格式的比較,請參考Hydrogenaudio論壇的整理文件。關於EAC的說明,Hydrogenaudio當然也提供了詳細解說,想要更漂亮的使用EAC搭配WavPack編碼器一步完成抓音軌、轉檔者,亦可參考本文件

Play by FoxSaver®