- 方法一:使用內建的 Secret Rabbit Code
使用方法很簡單,只要在 /etc/mpd.conf 加上下面這行就可以了。
這是一個頗有名氣的 resampler,那個數字的設定可以參考 MPD 說明書,但是寬頻的 0 和 1 這兩個設定在 Pi 上都跑不動,會發生音樂格放的現象。使用頻寬只有 80% 的演算法,我認為不如不要用,放棄。
- 方法二:透過我之前自己 compile 好支援 pipe 的 MPD,外掛 sox 在我的《用 Raspberry Pi 聽音樂》紀錄了我如何設定並編譯支援 pipe 的 MPD,現在只要安裝上 sox (sudo apt-get install sox),就能使用這個威力強大的效果器!最主要的優點是可以加上 dithering 來讓 quantization noise 變得聽起來比較不明顯,這在只支援 16bit 輸出的音效卡上,理論上是個重要的設定,不過我還沒有仔細的試聽比較就是了。
我在 /etc/mpd.conf 加上如下的設定:
主要的內容都是在指定輸出輸出的格式,注意 raw 後面有一個 "-" 不要漏掉了,後面的 sample rate 和 bit 數就根據使用的 ADC 設定。 在我的 Raspberry Pi 上,這樣的設定勉強跑的動,CPU rate 會上到 80%,這時候只要用網頁開 RaspyFi 就會讓他掛點,不過用 gnome music player client 或是 Android/iPhone App 影響都比較小。這部份也許可以透過超頻改善,不過我沒有繼續往這方面嚐試就是了。
- 嚴格講,這樣的 dithering 還是不能在 16bit 音效卡上使用軟體調整音量的。RaspyFi 的軟體音量調整是交給 ALSA 負責,一旦用軟體把音量調小,好不容易加上去的 dithering 都會被砍掉。理想上應該要使用 hardware mixer,並在 sox 指令中加上 "gain -20" 來降低音量 (以 20dB 為例) ,這樣的另外一個好處是 dither 和 resampling 都需要 digital headroom,這樣的調整方式也可以避免這些音效處理反而造成失真。
- 方法三:指定 MPD 使用 soxr 在 MPD 說明書 裏面我注意到其實有個 soxr 的選項,不過 RaspyFi 預設並沒有安裝這個 library,因此我們要自己手動編譯安裝。首先下載原始碼並丟上去 Pi,執行以下指令:
- 之後則需要把 MPD 整個重新 compile,請參考舊文《用 Raspberry Pi 聽音樂》。
- 最後的 /etc/mpd.conf 的修改則如下:
在我的系統上第三個方法的 CPU 使用量大約在 30% 左右,我很滿意這樣的結果。至於同樣的 DAC 跑在 44.1KHz 和 96kHz 的差異,我這樣的木耳就直接放棄用耳朵比較了,學理上只要 headroom 夠,這些處理可以讓不夠完美的類比輸出濾波器,也能產生優秀的聲音。MPD 內部是用 32bit 運算,只要最後輸出的時候處理正確,應該不會有 clipping 的問題,這部份有待進一步的資料收集。
仔細閱讀這份文件之後,確定 software mixer 是由 MPD 直接控制音量,和 ALSA mixer 是分開的。這樣表示用 pipe 輸出到 sox 的方式可以獲得正確的 dither!同樣的 MPD 內部 32bit 完整傳遞到 sox,沒有 headroom 的問題!
回覆刪除http://mpd.wikia.com/wiki/Alsa