2013/09/15

BeagleBoard-xM 上で MPD を動かし、ミュージックサーバを構築する

我が家では NAS を設置して、その中に音楽ファイルを入れています。
PC間で音楽をシェアして便利に使っているのですが、一つ問題が。

私の持っているノートPCは音がひどいのです。
音楽を聴くのにはとても使えません。
リビングなどで作業する時には、小さなスピーカーも一緒に持って行くのですが、これがとても面倒臭い。

そこで、リビングに MPD (Music Player Daemon) サーバを設置してみることにしました。
MPD はリモートで音楽を再生するためのサーバで、スマホなどから遠隔操作で音楽再生を行うことが出来ます。

しかし、リビングに新しいPCを設置するなんて本末転倒ですリビングで作業するときにはそのPCを使えば良い訳ですから
そんな時こそ、BeagleBoard-xM の出番以前、購入したもの。
新規購入の場合は BeagleBone BlackRaspberry PiCubox 等も候補に上がりそうです。

小さいし、低消費電力なので、MPDサーバにはぴったりと言えます。
5W 以下のようなので、電気代は100円/月以下で抑えられそう。

というわけで、実際にやってみました。
構成の簡略図は以下のような感じ。

NAS に入っている音楽ファイルを、BeagleBoard-xM にネットワークマウントし、それをスピーカーから鳴らすわけです。
音楽の再生・停止や音量のコントロールはスマホ等、同一ネットワーク内にある MPD クライアントから行います。

以降は、BeagleBoard-xM に Ubuntu 13.04 がインストールされていて、 ディスプレイ、キーボード、スピーカーが接続されている状態を前提としています。

IP アドレスを固定

宅内にDNSサーバを持っている場合は別ですが、BeagleBoard-xM のIPアドレスは固定しておいた方が後々楽でしょう。
interfaces ファイルを以下のように編集します。

/etc/network/interfaces
auto eth0
# iface eht0 dhcp  # コメントアウト

# 以下を追加(値はネットワークによる)
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
dns-nameservers 192.168.0.1
gateway 192.168.0.1

設定を反映させるため、ネットワークを再起動。
$ sudo /sbin/ifdown eth0
$ sudo /sbin/ifup eth0

日本語ロケールの設定

一応、日本語ロケールの設定をしておきます。
$ sudo apt-get install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ less /etc/default/locale
LANG=ja_JP.UTF-8


オーディオの有効化

今回導入した、Ubuntu 13.04 for BeagleBoard-xM はデフォルトでは音量0に設定されています。
以下のようにして、音を出力するようにしてやります。
また、ALSA から直接音を出すより、PulseAudio を経由したほうが便利ですので、pulseaudio も合わせてインストールします。
$ sudo apt-get --purge --reinstall install pulseaudio
$ sudo apt-get install alsa

alsamixer を起動します。
$ sudo alsamixer

左右キーで項目を選択し、以下の要領で音量を上げます。
  • DAC2 Digital Fine を選択し、カーソルキーの上で 100 にする
  • Headset を選択し、カーソルキーの上で 100 にする
  • HeadsetL Mixer AudioL1 を選択し、m キーでミュート解除
  • HeadsetR Mixer AudioR1 を選択し、m キーでミュート解除
ECS を押して終了し、以下のように設定を保存します。
$ sudo alsactl store


MPD のインストール

MPDをインストールします。
$ sudo apt-get install mpd

インストールが完了したら、設定を行います。

/etc/mpd.conf
# 以下をコメントアウト
# bind_to_address         "localhost"
# 以下で、同一ネットワーク内からのアクセスを許可
bind_to_address         "0.0.0.0"

# ALSA 出力をコメントアウト
#audio_output {
#       type            "alsa"
#       name            "My ALSA Device"
#       device          "hw:0,0"        # optional
#       format          "44100:16:2"    # optional
#       mixer_device    "default"       # optional
#       mixer_control   "PCM"           # optional
#       mixer_index     "0"             # optional
#}

# pulse 出力のコメントアウトを解除
audio_output {
        type            "pulse"
        name            "My Pulse Output"
#       server          "remote_server"         # optional
#       sink            "remote_server_sink"    # optional
}

設定を反映させるため、MPD を再起動します。
$ sudo /etc/init.d/mpd restart

この状態で、/var/lib/mpd/music 以下に音楽ファイルを配置すれば、設定完了です。

ネットワーク経由でミュージックフォルダをマウント

我が家の NAS は CIFS(旧 Samba)でアクセス可能ですので、CIFS でミュージックフォルダをマウントします。
また、NAS に対して NetBIOS 名でアクセス可能にするため、winbind も合わせてインストールしておきます。
$ sudo apt-get install cifs-utils winbind

nsswitch.conf を以下のように修正。
hosts 項目に wins を追加します

/etc/nsswitch.conf
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 wins

起動時にマウントするように fstab に以下の行を追加します。

/etc/fstab
# nas という NetBIOS 名のマシンの /Music というフォルダを /var/lib/mpd/music にマウント
//nas/Music  /var/lib/mpd/music  cifs  username=****,password=****,uid=mpd,gid=audio,iocharset=utf8,defaults 0 0

強制的に fstab を反映させてマウント。
$ sudo mount -a
$ ls /var/lib/mpd/music
ADELE
AI
ASIAN KUNG-FU GENERATION
・・・等々ファイルが表示されればOK

もし、ここでマウント失敗した場合は、成功するまで修正を繰り返します。
そのまま放置してしまうと、次のブート時に起動しなくなってしまい、面倒なことになりますので。

MPDroid で接続

MPD クライアントは何でも良いのですが、今回は Android 用アプリ MPDroid を使用しました。
詳しい使い方は後ほど書きますが、注意したいのは、一番最初にアクセスする際、MPD のデータベースを更新しないと曲の一覧が出てこないということ。
(デフォルトでは、クライアントから手動で更新依頼を出さないと、データベース更新が始まりません)
また、曲の数が多いと、一覧表示されるまでに時間がかかります。
これはデータベースの更新が完了するまで反映されないためです。

更新の進捗を知りたい場合はログを監視するとよいでしょう。
$ tail -f /var/log/mpd/mpd.log

その他の理由で、うまく行かない場合もログを監視すると原因がわかりやすいかと思います。
2013/9/16 追記
MPDroid の簡単な使い方について書きました
穀風: MPDroid の使い方



0 件のコメント: