coding, photo, plant and demo

*PogoPlug+MPDで音楽サーバ構築

audio mpd tech 20120415 191028

前回までのあらすじ。

SH7262とか使ってちっちゃな音楽サーバでも作ろうかと思ったけど、SheevaPlug系+MPDが最強と気づいてしまった私。

SheevaPlug/PogoPlug

SheevaPlug とは何か。
小さくて消費電力が小さくLinuxが動く、EtherとUSBの口がついているだけのコンピュータだ。待機時2.3Wだから、1ヶ月動かしても50円くらいか?
玄人志向から玄芝として以前発売されたりしていたらしいが、現在は発売されていない。手軽に手に入るものはないかなー、と思ったら、PogoplugがSheevaPlugベースだと知る。

というわけで、POGO-E02(\5,500)を購入。






デュアルコアになったが、クロックが落ちてメモリが半減したPOGO-P25(\6,500)と迷ったけど、安さ優先にした。ただ、こっちのほうが改造すればSATAが繋がるので、NASとして使うならこっち。

DDC

DDCとしてFiiO D5 USB Digital Audio Decoder(\2,850)も購入。

Music Player Daemon

僕が以前から求めていたサウンドサーバ的なものが実はMusic Player Daemonという、そのものスバリな名前で既にあった。

起動するとTCPのポートが開くので、そこに色々命令を送り込める。これを演奏しろとか、これをプレイリストに追加とか、クロスフェードしろとか、シャッフルしろとか、そういった命令を送り込める。
既にクライアントが山ほど開発されていて、Web用UIもあればiPhone用アプリ(MPoD)もある。

しかも対応フォーマットがアツイ。mp3やFLAC,AACは当たり前として、libmodplugに対応、さらにMikModにも対応!って両方対応するとは開発者は相当なmod狂だ。さらに、libgmeにも対応。gymとかnsfとかspcが標準で対応とは!残念ながらmdxには対応してないので、これは後で勝手に改造しようと思う。

セットアップ記録

まずはPogoPlugを普通に設定して、SSH接続できるようにする。
適当なUSBメモリ(4Gは欲しい)を用意する。

その後は、
http://archlinuxarm.org/platforms/armv5/pogoplug-v2-pinkgray
をそのまま実行してarchlinuxをinstall。
archlinuxってのはコンパクトなlinuxのディストロ。Ubuntu入れても良いけど、メモリも少ないしarchlinuxが無難と思われる。

再起動後、sshでroot:rootでログインできれば、archlinuxが入ってる。
パッケージを最新にして音楽サーバから引っ張ってくるためのNFSと肝心のMPDを入れよう。

その前に、自分の環境ではmirrorサーバにうまく繋がらなかったので、
/etc/pacman.d/mirrorlist/mirrorlist

Server = http://mirror.archlinuxarm.org/arm/$repo
をコメントアウトして、
Server = http://us.mirror.archlinuxarm.org/arm/$repo
を有効にした。

pacman -Syu
pacman -S rpcbind nfs-utils nfs-common ntp mpd mpc
modprobe nfs

/etc/rc.conf
にインストールしたデーモンを追加。
MODULES=(... nfs)
DAEMONS=(... rpcbind nfs-common ntpd mpd)
/etc/fstabにマウントしたいファイルサーバのパスを追加。
ファイルサーバ側の/etc/exports等は別途編集しておく。

/etc/mpd.confを作る。
cp /usr/share/mpd/mpd.conf.example /etc/mpd.conf
mpd.confのmusic_directoryをマウントした音楽置き場とする。
sync && /sbin/reboot

これで再起動したらmpdが起動してるはず。
コマンドラインで
mpc update
としてDBを更新する。これは裏でしばらく動き続ける。
mpc status
とするとDBを更新中か分かる。曲数が多いとしばらくかかる。

mpc ls
とするとDBに登録した曲が見える。
mpdが扱うファイルは、OSのファイルシステムではなく、mpd.confで指定したmusic_directoryが基準となる点に注意。後は、
mpc add ukrock/oasis/1st/liveforever.flac
等とやれば音が鳴る。

ノイズ発生

これでまずは一件落着のはずが、自分の場合はノイズ混じりで聴くに耐えないことになってしまった。

topと叩くとmpdが異常にCPUを使っている。
試しにalsaplayerで再生したら、全く問題なし。5%くらいしかCPU使わん。そりゃそうだよな。

調べたらresamplerが遅いとのこと。下記を参考に設定を変更した。
http://mpd.wikia.com/wiki/Tuning#Samplerate_converting_-_or_why_does_ALSA_consume_much_more_CPU_than_OSS_does.3F

これでほぼ解消したけど、sshでアクセスしてファイル編集などでdisk ioが発生すると
ときたまプチプチ言うので、
audio_buffer_size               "2048"

audio_buffer_size               "8192"
とした。

以上でほぼ問題なくなった。

これで、iPhoneならMPoD等のアプリを入れれば、
遠隔で操作できるようになる。

けど、アンプのON/OFFやボリューム調整はこれではできないから、クライアントは後で自作する。

libgmeを有効にする

標準だとlibgmeが有効になっていなかったので、自分でmpdをビルドしてみた。
pacman -S base-devel
pacman -S libgme
wget 'http://downloads.sourceforge.net/project/musicpd/mpd/0.16.8/mpd-0.16.8.tar.bz2'
tar jxf mpd-0.16.8.tar.bz2
cd mpd-0.16.8
./configure --enable-gme
make
make install