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