mpd (Music Player Daemon) で自宅サーバをジュークボックスにする

mpdはデーモンとして動作し、各種クライアントプログラムからネットワーク経由で操作することができる音楽プレイヤーである。

今回は自宅サーバ(ノートPC)にスピーカーを繋げて、HDDにある音楽ファイルをスピーカーから流せるようにしてみる。 MPDroidなどのAndroidアプリを利用すれば、無線LANに繋いだAndroid端末をリモコンとして使うこともでき、とても便利。

環境

$ cat /etc/redhat-release
CentOS release 6.4 (Final)

alsaの動作を確認

まず、スピーカーからきちんと音が流れることを確認するために、alsa-utilsをインストールする。

$ sudo yum install alsa-utils

alsaを扱うために、必要に応じてユーザをaudioグループに追加する。

$ sudo usermod -G audio -a john

alsamixerでミュート解除・音量調整を行い、speaker-testでスピーカーからホワイトノイズが流れることを確認する。

$ alsamixer
$ speaker-test -c 2

rpmforgeリポジトリの追加

CentOSの場合、公式リポジトリにmpdは含まれていない。

ここでは、RepoForge (RPMForge) を利用してmpdをインストールすることにする。 CentOSがEnterprise Linuxの何系に対応するかと、CPUが32bitか64bitかを確認し、対応するrpmを公式サイトからダウンロード・インストールする。 ここでは、Enterprise Linux 6系かつx86_64 (64bit)である。

$ cat /etc/redhat-release
CentOS release 6.4 (Final)

$ uname -a
Linux myserver 2.6.32-358.11.1.el6.x86_64 #1 SMP Wed Jun 12 03:34:52 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

$ rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

repoファイルを編集し、普段はRepoForgeリポジトリを使わないようにする。

$ sudo vi /etc/yum.repos.d/rpmforge.repo
[rpmforge]
enabled = 0

ちなみに、Ubuntuの場合は普通に公式リポジトリからインストールすればよい。

mpdをインストールする

RepoForgeリポジトリを有効にし、mpdをインストールする。

$ yum install --enablerepo=rpmforge mpd

mpdの設定を行う

mpdは一般ユーザの権限でも動作させることができるが、ここでは専用のユーザmpdを新規作成し、サービスとして動作させることにする。

システムユーザmpdを新規作成し、audioグループに加える。

$ sudo useradd -r -d / -s /sbin/nologin mpd
$ sudo usermod -G audio -a mpd

設定ファイル /etc/mpd.conf を作成する。 デフォルトだと先にIPv6をbindしてしまい、その結果IPv4で接続できなくなってしまうため、bind_to_addressで明示的にIPv4アドレスを指定する (参考)。

$ sudo vi /etc/mpd.conf
music_directory       "/var/lib/mpd/music"
playlist_directory    "/var/lib/mpd/playlists"
db_file               "/var/lib/mpd/mpd.db"
log_file              "/var/lib/mpd/mpd.log"
pid_file              "/var/run/mpd/mpd.pid"
state_file            "/var/lib/mpd/mpdstate"
user                  "mpd"
bind_to_address       "0.0.0.0"

上で設定したフォルダ群を新規作成する。

$ sudo mkdir /var/lib/mpd
$ sudo mkdir /var/lib/mpd/playlists
$ sudo mkdir /var/run/mpd

さらに、music_directoryで指定したディレクトリを、実際にmp3ファイルが保存されているディレクトリへのシンボリックリンクとする。

$ sudo ln -s /path/to/actual/music /var/lib/mpd/music

最後に、各フォルダの所有権をmpdユーザ・mpdグループに設定する。

$ sudo chown -R mpd:mpd /var/lib/mpd
$ sudo chown -R mpd:mpd /var/run/mpd

mpdを起動する

$ sudo mpd

mpdユーザでデーモンとして動作していることを確認する。

$ ps aux | grep mpd
mpd       2204  3.1  0.6 578616 11940 ?        SLsl 16:44   2:02 sudo mpd

RepoForgeからインストールした場合、init scriptがついてこないためserviceコマンドやchkconfigコマンドが使えない。 そこで、ここでは /etc/rc.local に追記することで、サーバ起動時に自動起動するようにする。

$ sudo sh -c 'which mpd >> /etc/rc.local'

CLIクライアントmpcをインストールして、mpdを操作する

mpdはデーモンプログラムのため、操作するにはクライアントプログラムが必要である。 クライアントプログラムにはさまざまなものがあるが、まずはもっとも一般的なCLIクライアント mpc をインストールする。

mpcはRepoForgeからインストールできる。

$ sudo yum install --enablerepo=rpmforge mpc

すべての音楽をプレイリストに追加し、ランダム・リピート再生してみる。

$ mpc listall         # すべてのファイルを確認
$ mpc ls | mpc add    # すべてのファイルをプレイリストに追加
$ mpc random          # ランダム再生の有効・無効を切り替え
$ mpc repeat          # リピート再生の有効・無効を切り替え
$ mpc play            # プレイリストを再生する
$ mpc current         # 現在再生している曲を表示する
$ mpc next            # 次の曲を再生する

音楽ファイルを追加・削除などした場合は、下記のようにしてデータベースを更新する。

$ mpc update

コマンドの詳細については、man pageを見ればよい。

$ man mpc

他のマシンからも操作できるようにする

mpdは標準でTCPの6600番ポートを利用する。他のマシン上のクライアントからも操作したい場合は、iptablesでこのポートを開けておく。

$ sudo netstat -anp | grep mpd
tcp        0      0 0.0.0.0:6600                0.0.0.0:*                   LISTEN      4586/mpd

$ sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6600 -j ACCEPT

他のマシンのmpcからmpdを操作する場合は、下記のようにすればよい。

$ mpc --host=192.168.10.10 current

おすすめmpdクライアント

参考リンク