2016年8月10日 星期三

CD唱盤/音樂播放軟硬體做了哪些事?

音響迷說到CD/數位音樂怎麼唱才好總有一大堆觀點,那個對那個錯?又是為何?或許該先問問,CD唱盤/音樂播放軟硬體到底做了哪些事?

音樂播放軟硬體嘛,當然是將錄音資訊轉成人耳聽得到的音波,最後是喇叭/耳機,其前面是擴大機,最前面是各種儲存錄音資訊的載體,在此單純談數位音樂。

數位音樂最初錄音時多半是PCM碼,也就是記錄音波轉成的電壓振幅,音樂播放軟硬體要做的也就是將這PCM碼再轉回電壓振幅交給擴大機推動喇叭/耳機;
極少數錄音是DSD,類似。


錄音經過混音製作成最後的音樂CD、檔案、internet上的stream,無論何種形式/載體,都是數位資料,只是以各種格式儲存/傳遞;
CD上儲存的就是PCM碼,若是儲存在PC或手機等各種形式的"電腦"的檔案裡,常見的格式WAV、AIFF裡面也是PCM碼,只是加了些頭尾打包起來(曲名、演出者、封面照片之類的...);

為了省儲存空間,音樂資料可以壓縮成大約1/4大,卻無損其內容,這主要格式是ALAC、FLAC,還原後當然還是與原本的PCM碼完全相同,不信你可以自己比對看看~
寫程式的人當然自己都先驗證過了...你去抓ZIP檔解開時,會不會怕出錯?
若是你怕會錯,那,千萬別用ATM領錢、轉帳喔~請當個摩登原始人...
十幾年前internet初起時,頻寬不夠,那時為了能在internet傳送音樂便搞出了MP3這種壓縮手法,這個會先砍掉高頻再壓縮,資料量剩下1/10,當然,這就不可能還原成原本的PCM碼,像是加了馬賽克的影片回不去了...後來的AAC也類似;
這些有損失的壓縮格式,聲音當然很差,吵亂刺平面乾澀...
音樂播放軟硬體做的事,首先就是由CD、檔案、internet、LAN、WiFi、Bluetooth...任何來源,取得數位資料,若有壓縮的就先解開還原成PCM碼,將PCM碼送到DAC(數位類比轉換器),轉成電壓振幅,再交給擴大機推動喇叭/耳機,就這樣。
這過程會出錯嗎?
數位這部份,幾乎不會錯,數位的作用就在於誤差容忍度很高,抗雜訊能力很高,資訊正確度很高;
倘若真的出錯,這當年用CD唱盤的人應該會有經驗,有時CD片髒了、刮傷了,就會"跳針",音樂斷斷續續;
如今的各種形式的檔案極難得出錯,你灌OS好幾GB有碰過出錯嗎?別再做夢說音樂資料有錯好嗎?
認真討論細節,CD唱盤唱的時候若碰到一、二個資料讀不到,可以用插補算平均的方式填進去,不過這是因為CD唱盤是一倍速度唱,必須即時得到資料,而CD片轉成檔案進電腦都是N倍,讀不到再重讀就行,極難得出錯;
這種事請自己實驗看看,很簡單啦,就同一片CD讀十次,比較檔案,換一隻CD drive、軟體、電腦再讀比較看看不就知道了?
他人說一萬次,不如自己做一次實驗;
不過,記得檔案頭尾的空白得去除對齊之。
既然數位部分都相同,那唱來都不同的原因是在?當然是類比部分啊~
正如換隻DAC唱來不同,難道是其中一隻DAC的數位出錯嗎?這種爛DAC你會買嗎?別鬧了...
那,為何我用電腦不同的檔案格式聽來不同呢?
這就得要談DAC細部了,這是貓窩工坊DAC2( http://miaofoundry.url.tw/products-and-services/DAC2/ )用的DAC IC的原廠建議電路圖,
絕大多數CD唱盤、DAC、手機、電腦、pad...這式各樣的音樂播放軟硬體最後都有這樣一個DAC IC,有些則是將這個也包進了主IC,數位訊號就是由這個IC轉成類比訊號;
先看左邊5, 6, 7腳,這三個構成名為I2S的數位音樂訊號介面,數位音樂PCM碼就是由這三隻腳送過來;另外還有第3腳 master clock,這是IC內部的工作頻率時鐘。

正常工作的DAC,這數位介面四隻腳訊號都能讓聲音很正常的唱出來,也就是很穩定不間斷連續的轉換成類比電壓訊號輸出;
但,這只是表面上哪...
就像你唱歌,有時候,換氣不順會抖~
I2S和master clock這數位介面共二個clock時鐘訊號,這clock若是抖,就像你唱歌時抖一般,唱出來的音樂當然也會抖囉~
clock用來驅動DAC工作,就像是賽跑時鳴槍!起跑!
clock就是那槍聲,數位資料就是那跑者;
人耳挺多能明確辨認一秒抖個幾次這種,幾十次以上就無法明確知道有在抖了,何況一秒幾千次的抖法哪...這clock頻率至少是44100Hz。
但是,不同抖法之間,人耳其實能明確辨認出不同!
抖的越少,聽來越是乾淨清晰自然。
早期CD唱盤剛出現時人人訝異其清晰,漸漸的發現有些不對勁,就是這麼一回事。
這clock抖,就稱為jitter,主要影響是極高頻、音像、音場、微微的吵刺。

有時候,你邊唱歌邊跳舞,上氣不接下氣...
DAC工作時,電源若是不乾淨,也是這般現象;
電源有數位電源、類比電源,數位電源不乾淨,也會造成jitter;像是你在起跑線準備好等槍聲,嘿,偏偏這時飛機呼嘯而過,聽不清楚...
因為數位的判定是高於某個電壓算是1,低於某個電壓算是0,而這某個電壓與電源電壓有關;clock由低往高衝時,就算clock再準波形再漂亮,電源電壓抖,每次判定槍聲響的電壓電壓都不同,結果當然也是抖,也就冒出jitter來囉~

類比電源不乾淨,就像是你站在個抖動的台上唱歌,台下的人聽來也是抖啊~
台怎麼抖,發出來的聲音就會有這抖法與音樂的inter-modulation,jitter的抖法也是類似效應,只是頻率高很多。

綜合以上,要讓DAC唱的好,就是給它精準的clock與乾淨的電源,如此而已。

那,前面提到說為何用電腦唱AIFF和ALAC檔聽來會不同呢?
我們可以想想,這二者到底差在哪?
ALAC會被轉成PCM碼,AIFF裡面也是PCM碼,最後送到DAC都是相同的資料;
資料沒差異,那差異就在就是clock與電源了;
讀AIFF vs 讀ALAC差在哪?差在ALAC還得解壓縮,CPU比較忙,就像你邊跳舞邊唱歌氣會喘啊~
CPU一忙,就吃掉大量電,電源波動就大,雜訊就多,不乾淨,DAC唱出來不就有差異?
不信你將ALAC先轉成AIFF,二個AIFF檔案分別存在二隻剛format的同款隨身碟裡,插在同一個USB port唱看看有沒有差?

人客啊~沒那麼玄啦~數位就是數位,出錯機率極低,重點都在類比啦~
那,實際上該怎樣做最好呢?
由以上的討論,重點在,盡可能讓DAC的clock準、電源乾淨;
目前認真的樂迷該都是以電腦儲存音樂(容量才夠啊~),再送給DAC唱出來;
因此,該盡量讓DAC不受電腦干擾

DAC最好的形式,該是用Ethernet或WiFi介面,與電腦完全隔絕無直接接觸,不過這類型產品不多,個別機種品質又是另一回事;
最普遍的該是USB介面,這當然得挑跑asynchronous非同步的,最好還加上貓窩工坊UI1或UF1隔離/濾除地線雜訊。 ( http://miaofoundry.url.tw/products-and-services/UI1/ 

至於擺在電腦裡面的呢...你想,電腦的電源模組才賣那麼點價格,怎麼會乾淨呢?
就算再貴,單是CPU忽忙忽發呆,幾十W功率這樣變來變去,電源會乾淨嗎?
老話一句,電腦不是專用來唱音樂的,別要求它電源乾淨,該利用其超低價超大容量這優點,另外用好DAC搞定音響的事。
http://www.atxpowersupplies.com/550-watt-power-supply-Linkworld-LinkPower-ATX-550.php

那,CD唱盤這種形式呢?啥?你還在用?好吧,原諒你年紀大了...
CD唱盤裡面也有個轉動的轉盤吧?你有沒有看過這轉盤轉的時候?抖抖抖...超嚴重...
當年高倍數的CD ROM轉起來時,那真是...連桌子都會跟著抖啊...
你想,吃電很重的馬達這樣抖,會不會影響電源?
你可以試試看,聽CD片第一曲和最後一曲有啥差別?
更精準點,燒一張CD片,裡面全都是同一首歌,再聽第一曲和最後一曲的差別...

有人問到電腦上的不同軟體對聲音的影響,
首先,該先問,這軟體是否會動到資料?
如果設定都正確,Mac上的軟體很容易做到不更動資料,頂多是interger 16 bits轉成floating point 32 bits(Mac OS API標準聲音資料傳遞格式)這類的;
有些軟體如Aramara會加料,加些dither之類的,這種就不談了,單是談不動資料的,如iTunes、JRiver、Quicktime;
至於PC上嘛,那就有點麻煩,如果這軟體call DirectShow API就會經過K mixer,任何資料都會被轉成48KHz sampling rate,這資料就動過了,得用WASAPI之類的避免,
反正還是有招數,用對軟體還是能搞定確保資料不會被動到。

那,怎麼驗證這點?
挺簡單,就輸出再輸出,與原始檔比較就搞定啦~數位就是這樣很容易驗證;
去抓個virtual sound device來灌,讓播放軟體輸出到那個virtual device,存檔,與原始檔對照就知;
幾年前我的作法是用光纖輸出loopback拉回來;
當然這還是得先對齊二個檔案,還有一點可能的誤差就是那個interger轉floating point的解析度差,因此比較好的驗證法是二個檔案都抓進聲音編輯軟體,其一反向,再二者mix,結果的振幅若都低於1bit就沒錯。

以上很容易確認使用的二個軟體都沒動過資料,
既然如此,問題就又回到影響DAC的三個變因之二,clock與電源,這都是純硬體,不是電腦的應用軟體該管的,也不能讓應用軟體管這種事;
也就是說,寫軟體的人哪會知道他怎麼寫會影響clock與電源啊?當然更不知道怎麼寫clock與電源會比較乾淨囉~每個硬體都不同啊...

不過,實際上軟體要影響這二點倒還不難,buffer size就是其中一項,以44.1KHz的音樂來說,每秒必須送44100筆sample給DAC,
如果buffer size是256 vs 512,這送的頻率就是二倍之差,產生的雜訊頻率就是二倍差,而電腦的設計就是盡量壓低成本,藉數位抗雜訊能力能過關只要雜訊不要大到讓資料出錯就好,因此這雜訊很容易就傳到DAC去,
除非隔離,透過Ethernet、WiFi或貓窩的UI1這種方式。

至於哪個buffer size好?這沒啥絕對,因為每個硬體濾除雜訊的能力都與頻率相關;
而且buffer size影響了電源雜訊,也會因此影響clock的jitter,而jitter與最後輸出的類比訊號之間的關係非常複雜,每個DAC IC都不同。

還有個buffer size是硬碟的buffer size,這通常是OS內設定的,應用軟體動不了;
這也延伸到為何音樂檔案擺在不同的儲存裝置聽來不同,buffer size會影響,使用的電路(SATA、USB、Ethernet、PCI Express)不同,產生的雜訊對DAC的影響不同,
當然DAC輸出的類比訊號也不同,
但,老樣子,正確設定下,DAC收到的資料沒都錯。

搞清楚這些,要盡量搞好DAC的聲音不會太難,
也就是,無需耗費時間去弄電腦上的東西,專心搞好DAC的clock、電源與隔離電腦雜訊。

至於clock對聲音的影響,我有直接證據,看這裡
http://www.miaofoundry.url.tw/phpbb/viewtopic.php?f=4&t=3488&start=210#p16504
貓窩的DAC2加上re-clocking後聲音大進展,這re-clocking不可能改善資料,其輸出資料只會完全相同或是錯誤,一旦錯,那可是亂七八糟沒啥一定的,這我還真的碰過幾次,做第三隻DAC2加上這re-clocking時,沒焊好,聲音就是噪音啊~另一次則是沒蓋頂蓋,碰上大雷雨,雷電電磁雜訊一轟,沙沙沙沙~~嚇死我啦~
加上re-clocking聲音會改善,就證明問題不在資料正確與否,而是clock與電源。

妙的是,DAC2的re-clocking用的clock就是DAC2上唯一的clock來源,被重鎖重送的資料也是由此clock導出的clock傳來的,二者完全同步;
那,為何會改善?
同步只表示頻率相同,可沒說波形一樣漂亮,

以最靠近clock源,受干擾最低的clock來重鎖重送jitter最低,聲音當然最漂亮啊~

這也驗證了clock的品質(也就是jitter),經過一串電路複製後確實會劣化,其因素包含電源、阻抗、電磁干擾,越是源頭越準,應該盡可能讓DAC接近clock源。