2013年1月9日 星期三

讀萬卷書,不如自己 DIY

1.
Rip CD 聲音會有差異?

2.
USB DAC 非同步傳輸模式下聲音仍會受線材影響?

有好多文章真的讓我覺得世界上是不是還有別的量產電腦跟我用的不一樣(現今的量產電腦架構都是 Turing Machine,Quantum Turing Machine 還在實驗室)?像下面這段話:

我們發燒友的重點是在『讀取』:讀取到 0.000 然後判讀成 0,與讀取到 0.1234 然後判讀成 0,當然一定是不同的演算與電氣過程。只要多了幾道判斷,就是會造成資料 JITTER,這是我所謂:讀取 0101010 即使最後資料完全一樣,JITTER 還是會相差甚大的原因。

啊?!

每個 BIT 都是 0 到 1 的連續變化,可以說以 0.5 為界,0 當然判讀成 0,0.1 還是判讀成 0,0.3 還是判讀成 0;同理,1 當然判讀成 1,0.9 還是判讀成 1,0.7 還是判讀成 1。

啊?!啊?!

一個 BIT 原先是 0,改寫成 1 之後,它絕對不會是 1,往往是在 1 與 0.5 之間;因此使用精密儀器,去判讀現在的 1 倒底是 1.000 還是 0.9,就可以推算『被覆蓋掉的是 1 還是 0』。

啊?!啊?!啊?!啊?!啊?!

另外,如何 Rip 有類比味的 CD?WAV 比 M4A 格式好聽?拿電蚊拍電過的 CD 比較好聽?…

以上這些討論真的讓我非常驚奇,到底怎麼回事?可真讓我這個學資訊的人一頭霧水,我的電腦知識怎麼碰到數位音樂播放就像革命一樣?於是抽空自己做了一次實驗。

我挑了一部 HP Z600 繪圖工作站與一部 ASUS M6B00V 筆記型電腦(以及另外兩部就不秀了)來做 Rip CD 的工作。音樂 CD 則隨機抽了以下二張並分別選了兩首歌:

Enya The Memory of Trees:01 The Memory of Trees、03 Pax Deorum
百代巨星經典系列 II 黃鶯鶯:03 呢喃、04 呼喚我


然後用 Windows Media Player 與 iTunes 分別 Rip 出 WAV、M4A、AIFF、MP3、WMA 等檔案格式,並於 Rip 過程中隨機給予不同的 CPU Bound 與 I/O Bound 工作,或是在歌曲間重新退片再入片讓 CD 重定位,最後以 MD5 雜湊演算法 (http://www.blisstonia.com/software/WinMD5) 進行檔案一致性檢驗。另外也以 Media Convert 2.20 (http://holas.myweb.hinet.net/MediaConvert.7z) 進行 M4A to WAV 與 AIFF to WAV 格式轉換。結果圖示如下(MP3 與 WMA 就不秀了):

HP Z600 Media Player WAV


HP Z600 iTunes WAV


HP Z600 iTunes M4A


HP Z600 iTunes AIFF


HP Z600 iTunes M4A to WAV


HP Z600 iTunes AIFF to WAV (aif rename to aac)


ASUS M6B00V Media Player WAV


ASUS M6B00V iTunes WAV


ASUS M6B00V iTunes M4A


ASUS M6B00V iTunes AIFF


ASUS M6B00V iTunes M4A to WAV


ASUS M6B00V iTunes AIFF to WAV (aif rename to aac)


從結果可以看出,在不同的硬體與系統下,Media Player Rip 出來的 WAV 檔都一樣;同樣的,iTunes Rip 出來的 WAV 檔也都一樣。但 Media Player 與 iTunes Rip 出來的 WAV 不一樣。另外,雖然 iTunes Rip 出來的 M4A 檔都不一樣,可是利用 Media Convert 2.20 進行 M4A to WAV 格式轉換後,可以看到最後所有的 WAV 檔都一樣。

因此可以判定 Media Player 與 iTunes 在 Rip CD 時,對於 WAV 的檔案資訊部分(檔頭)可能不同,但在 WAV 本體是一致的。而 M4A 用的 ALAC (Apple Lossless Audio Codec) 應該也是一種 Adaptive Coding (Apple 已經開放原始碼有興趣的人可以參考https://macosforge.github.io/alac,我只想聽音樂),所以才會每次都產生不一樣的 M4A 檔,但經格式轉換成 WAV 檔卻又完全一致,也就是說,事實上,WAV 與 M4A 只有在以檔案存在時編碼格式不一樣,但一經解碼播放是完全同等於 WAV。

其中可以看到在 ASUS M6B00V 上 The Memory of Trees 這首曲子 Rip 出一次不一樣的 WAV 檔(取消 iTunes 的「當讀取音樂光碟時使用錯誤更正功能」並多試幾次)。我寫了一隻程式把這 WAV 檔 Dump 出來檢視,其實與其他兩個一致的檔案僅有三處幾個位元組的差異,實際播放時,我不認為聽得出來。

那不同檔案格式會有不同聽感是怎麼回事?這裡我就沒再進一步測試了,因為我不見得聽得出來,而且要考慮到這地步,聽音樂真的太辛苦了,但大家可以自行試試。至於是不是真的有差?我認為是有,只是程度問題。但造成差異的原因絕對不是在 Rip CD 時的檔案差異,而是這些檔案解碼時(而且是在 Digital to Analog 時)的差異,解碼 M4A 所需的系統資源一定高於 WAV,這就可能使得系統內部 CPU 負載增加、記憶體使用量增加、風扇轉速提高、耗電量增加…而引起一連串的連鎖反應,接著就回到一開始提到的「泛音」與「Jitter」的問題。

啟動 工作管理員 中的 資源監視器


以 iTunes 播放 Enya 03 Pax Deorum WAV 檔前 50 秒時的系統資源使用情形


以 iTunes 播放 Enya 03 Pax Deorum M4A 檔前 50 秒時的系統資源使用情形


電腦有極佳的容錯與錯誤處理機制,在處理數位資料時,一有錯誤就可以重新傳送、重新讀取;而在音樂播放時,也就是在 Digital to Analog 時,才可能存在變因。

電腦的 CD Drive 與一般 CDP 的 CD Drive 的設計理念並不一樣,電腦的 CD Drive 是要很快很正確的讀取「數位資料」,所以以高轉速讀取,一旦讀取失敗,可立即重新讀取;可是一般 CDP 的 CD Drive 是必須在 1:1 的時間裡正確讀取「音樂資料」,一旦讀取錯誤是沒有重來的機會。

至於 HP Z600 這部繪圖工作站規格大致如下:
  • Intel Xeon E5504 Quad-core 2.0GHz CPU x2
  • 12GB DDR3-1333 ECC Unbuffered-DIMM
  • NVIDIA Quadro FX4800 1.5GB PCI-E 繪圖卡
  • Fujitsu MBA3147RC 147G SAS 15000RPM x2
  • Microsoft Windows 7 64位元專業版 Service Pack 1 (無安裝防毒軟體)

我想這規格已經是很好的了,可是照樣爆音給你看!

那甚麼樣的音樂檔案格式最好?我想無損格式、方便就好吧 ^_^

沒有留言:

張貼留言