2013年9月22日 星期日

用 Raspberry Pi 聽音樂

之前灌的  RaspBMC 當然也能播放音樂,但是每次要聽音樂都要打開電視實在不太方便,加上電視的音質其實不如我那便宜的 UCA-202 好,總希望聲音能從  USB 音效卡出來。

之前嚐試使用 RaspBMC 仍在測試中的 AudioEngine,能順利地用 USB DAC 播放音樂,但是有兩個問題。第一是播放外接硬碟裏面的影片時,影音會不同步,而且每次都要重新設定聲音的 offset,並不會被記憶住。第二個問題比較嚴重,即時播放線上影片的時候,會造成整個沒有進度!第三個小困擾是沒有任何 EQ ,無法修正我家小客廳的聲音。

偶然之間遇到了 RaspyFi,這是一個以輕量化 Debian 運行 Music Player Daemon (MPD) 的 distribution,主打是支援大多數的 USB DAC,甚至是非同步和 24bit/192kHz 的 DAC。使用方法很簡單,先把 image 抓下來後,用 Win32DiskImager 燒進去一張 4G 以上的 SD 卡就行了。現在的 v1.0 也比之前的 1.0 beta 好用很多,不用任何設定就會抓到你整個外接硬碟上面的音樂,讓你可以用各種方式選取樂曲編成 Play List,輕鬆的播放。

不過, MPD 需要其他的 mpd client 來控制,Windows 的機器上我是用 gnome music player client , Android 手機上我是用 MPDroid,後者無法讀取 cue 的曲目資料,我都是用前者先設定好 play list,已經加到 play list 裡面的 cue 曲目後者還是可以撥放的。RaspyFi v1.0 更是加上了網頁介面,讓很多東西都變得非常容易。

唯一要注意的是 RaspyFi 只接受 ssh 進去關機,務必記得下面指令:


於是我快樂的過著換 SD 卡的生活,要看影片或是下載 torrent 就換到 RaspBMC 那張 SD 卡,要聽音樂就換到 RaspyFi 的 SD 卡。


使用一陣子之後就開始手癢想加上 EQ,最早只是想加上一個全域的 ALSAEQ,但是沒搞定。後來按照 Richard's Staff 上面 software cross over 的方式,用 ecasound 加上 PEQ,也算是替 DIY 喇叭的目標 Linkwitz Pluto 做準備。

第一步是安裝 ecasound 還有相關的 LADSPA plugin


然後我安裝了 Richard 撰寫的 RT-plugins,下載之後我用 filezilla 的 sftp 功能把檔案上傳到 RaspyFi 上面,安裝 gcc 後,編譯並安裝 RT-plugins (檔案以 0.0.3 為例)


要測試到目前為止正確安裝,可以上傳一段聲音檔到 RaspyFi 上面之後執行


第一行是把 mpd 關掉避免兩者搶音效卡,後者單純的就是用 ecasound 播放聲音。
聲音如果有正確出來的話,我們就可以來試試看 RT-plugins 的效果


這是把原先的聲音加上一個 Linkwitz-Riley 四階低通濾波器,設定在 1500Hz。這樣的聲音聽起來應該是大提琴、低音鼓、Bass 之類的樂器都不見了,人聲也會變的很薄。如果你有聽到這樣的效果的話,那 ecasound 和這些 plugin 都沒問題了!

接下來我們要把 mpd 輸出的聲音都透過 ecasound 加上我們想要的 plugin,但是不幸的 RaspyFi 預設的 mpd 並不提供這樣的功能,按照 RaspyFi 早期公佈的資料,我們可以自己重新編譯 mpd。首先要補上的是 git 和 g++,下載 mpd 之後先自動偵測目前系統的設定,再加上我們需要的 --enable-pipe-output。


這時候我的系統上跑出來的資訊是


確定你想要的功能都有了之後就可以編譯並安裝了,但這次的編譯會很花時間歐。


我的作法是把舊有的 mpd 執行檔改名為 mpd.old,這樣要是什麼你需要的功能不見了,還有機會比較並調整上面編譯的參數。

最後,就是用老朋友 nano 調整 /etc/mpd.conf 了!先把原先的 alsa output 全部用 # 註解掉,並加上下面這樣的設定,我這裡摹仿 Richard 的作法把 PEQ 寫在另外一個叫作 pre.ecp 的檔案裡,並把這個檔案放到 /etc/ 裏面去。

用 \ 分開的那兩行必須是同一行,最後的 -f:16,2,44100,表示我用雙聲道 16bit/44.1kHz 輸出,這部份請根據你自己的 DAC 調整。

Richard 網頁上 pre.ecp 的範例是做一個簡單的 PEQ cut 來消除某個特定的房間共振,內容是


這是一個 -8.5dB, Q=2.6,頻率在 82Hz 的 PEQ, 如果有多個房間共振,就會使用多個 PEQ 來消除他們 (有時候則是強化被消掉的頻率,這時候 dB 那欄就會是正的)。

至於房間共振要怎找?一個最簡單的辦法就是自己用聽的,我嚐試用 Expression Tone Generator 自己聽過一次,實在很不容易。相對有效的辦法就是用一個頻率響應相對平坦的麥克風,加上免費軟體 REW 用量的。這個軟體量測好之後會有圖形幫手來幫你找到每個 PEQ 的設定。

如果用的是無指向性又有校正檔的專用量測麥克風,效果當然更好,像是 MiniDSP UMIK-1,這是一支有個別量測檔的 USB 麥克風。