祭日が多く時間があったので,以前から興味を持っていた MPD(Music Player Daemon) を Raspberry pi に導入してみました.その備忘録です.
MPD(Music Player Daemon) とは?
元サイトによると
Music Player Daemon (MPD) is a flexible, powerful, server-side application for playing music. Through plugins and libraries it can play a variety of sound files while being controlled by its network protocol.
なので,まぁ要するにサーバーサイド音楽プレーヤーですね.
実は入れる前は,音楽専用ストリーミングサーバーだと思い込んでいましたし,確かにストリーミングサーバーとしても使えるのですが,本来は,ネットワーク対応の音楽プレーヤーとして使うものなんですね.製品としては,
に近いものです.要するに,PCやスマホからコントロールできるオーディオプレーヤーとして使うのが正しい使い方なんだと思います.
じゃあ,何で注目されているのかと言うと,Raspberry Pi + 安価な DAC で安価(市販のものとは1桁は違う)だけど自由度の高い高音質なネットワークオーディオが作れる,しかも DAC を選択でき,専門家でなくても工作できたりするので楽しい,ということのようです.
まぁ音楽ストリーミング専用サーバーとしても使えるのですが,正直ストリーミングサーバーとしては,DLNA サーバーの方が対応機器が多い分便利な気がします.
MPD(Music Player Daemon) の設定
色々なところで紹介されているので,今更なのですが,MPD を使うために Raspberry pi にどんなパッケージが追加されるのかの記録として残しておきます.
必要な作業は以下の通り.
- mpd と lame or vorbis のインストールと設定
- mpd のクライアントアプリケーションのインストール
- CoverArt を表示させるための Web Server の設定
まず,mpd と lame,もしくは vorbis を入れます.mpd はストリーミングの為に lame か vorbis を利用するからです.今回は lame を入れています.Raspbian jessie だと mpd も lame も特になにも設定しなくても apt-get で導入できます.
$ sudo apt-get install lame .... $ sudo apt-get install mpd パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の追加パッケージがインストールされます: freepats libadplug-2.2.1-0 libao-common libao4 libasyncns0 libaudiofile1 libavcodec56 libavformat56 libavresample2 libavutil54 libbinio1ldbl libcaca0 libcdio-cdda1 libcdio-paranoia1 libcdio13 libcurl3-gnutls libdirectfb-1.2-9 libdnet libfaad2 libflac8 libfluidsynth1 libgme0 libgsm1 libid3tag0 libiso9660-8 libldb1 libmad0 libmikmod3 libmms0 libmodplug1 libmp3lame0 libmpcdec6 libmpdclient2 libmpg123-0 libnfs4 libntdb1 libogg0 libopenal-data libopenal1 liborc-0.4-0 libpulse0 libresid-builder0c2a libroar2 libschroedinger-1.0-0 libsdl1.2debian libshout3 libsidplay2 libsidutils0 libslp1 libsmbclient libsndfile1 libsoxr0 libspeex1 libspeexdsp1 libtdb1 libtevent0 libtheora0 libupnp6 libva1 libvdpau1 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx1 libwavpack1 libwildmidi-config libwildmidi1 libx264-142 libxvidcore4 libyajl2 python-talloc samba-libs va-driver-all vdpau-va-driver 提案パッケージ: adplug-utils libesd0 libesd-alsa0 dnet-common pulseaudio libroar-plugins-universal roaraudio-server pinentry libmuroar0 slpd socat openslp-doc speex vdpau-driver icecast2 mpd-client 以下のパッケージが新たにインストールされます: freepats libadplug-2.2.1-0 libao-common libao4 libasyncns0 libaudiofile1 libavcodec56 libavformat56 libavresample2 libavutil54 libbinio1ldbl libcaca0 libcdio-cdda1 libcdio-paranoia1 libcdio13 libcurl3-gnutls libdirectfb-1.2-9 libdnet libfaad2 libflac8 libfluidsynth1 libgme0 libgsm1 libid3tag0 libiso9660-8 libldb1 libmad0 libmikmod3 libmms0 libmodplug1 libmp3lame0 libmpcdec6 libmpdclient2 libmpg123-0 libnfs4 libntdb1 libogg0 libopenal-data libopenal1 liborc-0.4-0 libpulse0 libresid-builder0c2a libroar2 libschroedinger-1.0-0 libsdl1.2debian libshout3 libsidplay2 libsidutils0 libslp1 libsmbclient libsndfile1 libsoxr0 libspeex1 libspeexdsp1 libtdb1 libtevent0 libtheora0 libupnp6 libva1 libvdpau1 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx1 libwavpack1 libwildmidi-config libwildmidi1 libx264-142 libxvidcore4 libyajl2 mpd python-talloc samba-libs va-driver-all vdpau-va-driver アップグレード: 0 個、新規インストール: 75 個、削除: 0 個、保留: 0 個。 47.7 MB のアーカイブを取得する必要があります。 この操作後に追加で 91.7 MB のディスク容量が消費されます。 続行しますか? [Y/n] Y ....
なんか山のように依存するパッケージが入ってきます.
設定は /etc/mpd.conf を編集することで行います.今回はローカルネット内で配信用として使うのが目的ですので,以下のように設定しました..
$ sudo diff mpd.conf.orig mpd.conf 83c83 < bind_to_address "localhost" --- > bind_to_address "0.0.0.0" 126c126 < #auto_update "yes" --- > auto_update "yes" 141c141 < #follow_outside_symlinks "yes" --- > follow_outside_symlinks "yes" 146c146 < #follow_inside_symlinks "yes" --- > follow_inside_symlinks "yes" 156c156 < #zeroconf_enabled "yes" --- > zeroconf_enabled "yes" 161c161 < #zeroconf_name "Music Player" --- > zeroconf_name "RBP MPD" 211,213c211,213 < audio_output { < type "alsa" < name "My ALSA Device" --- > #audio_output { > # type "alsa" > # name "My ALSA Device" 219c219 < } --- > #} 269,274c269,274 < #audio_output { < # type "httpd" < # name "My HTTP Stream" < # encoder "vorbis" # optional, vorbis or lame < # port "8000" < # bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 --- > audio_output { > type "httpd" > name "RBP httpd Stream" > encoder "lame" # optional, vorbis or lame > port "8000" > bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 276c276 < # bitrate "128" # do not define if quality is defined --- > bitrate "256" # do not define if quality is defined 278,279c278,279 < # max_clients "0" # optional 0=no limit < #} --- > max_clients "0" # optional 0=no limit > }
今回はストリーミングサーバーとしての利用ですので,標準で有効になっている alsa は無効化しています.なお,この設定だと,
- 6600 port /tcp: mpd 操作用.要するにリモコンアプリが通信するポート.
- 8000 port /tcp: streaming port
です.また,音源を配置するフォルダの標準は /var/lib/mpd/music です.このフォルダに音源となるファイルをどうにかして転送すればよい訳です.
少ないファイル数なら ssh(scp) で転送しても良いのですが,さまざまなフォルダに分けて保存されたある程度たくさんのファイルを転送するのはこれだと大変です.smb server 等を入れて /var/lib/mpd/music を共有フォルダとして設定しても良いのですが,面倒だったので,それらのファイルが保存されている Windows の共有フォルダを
$ sudo mount -t cifs -o user=********,password="*******" //****.****.*****/ServerFolders /mnt
のようにマウントしてそこからコピーしました.
これで mpd の設定が出来ましたので,Raspberry pi が起動と同時に mpd も起動するよう,
$ sudo systemctl start mpd.service $ sudo systemctl enable mpd.service
として,mpd の設定は終了となります.
MPD クライアントのインストール
MPD は音楽プレイヤーサーバーなので,コントロールするには専用のクライアントが必要になります.要するにリモコンソフトですね.mpd と 6600 port/tcp で通信することでコントロールします.
従って,別に Raspberry pi にインストールしなければならない訳では無く,ios, android, MacOS, Windows, Linux 用のさまざまなクライアントソフトが公開されているようです.
最も基本的なものは,コマンドラインから使える mpc の様ですが,ターミナルから使えるもう少し使い易い高機能な mpd クライアントとしては ncmcpp が有名なようで,両方とも Raspbian jessie だと apt-get でインストールできます.
$ sudo apt-get install mpc $ mpc volume: n/a repeat: off random: off single: off consume: off
$ sudo apt-get install ncmpcpp $ ncmpcpp
使い方は起動後に F1 を押せば分かりますし,特に何も設定しなくてもローカルの mpd と通信しますので,動作確認には向いていると思います.なお,Raspbian から入る ncmpcpp は 0.5.10 で,現時点の最新は 0.7.5 と比べてかなり古いです.
iOS, Android, MacOS, Windows 用のクライアントは数多くあるようですが,
iOS | MPod (iPhone), MPad (iPad) |
Android | MPDroid |
等が有名どころのようで,使ってみると確かに安定しており使い易いです.なお,当然,使うときには,どの MPD を使うのか,つまり,参照する MPD をインストールした Raspberry pi の IP アドレスとポート(6600 port/tcp)を設定してやる必要があります.
また,多くのクライアントは MPD のコントロールのみに対応しています.ターミナルアプリケーションである mpc と ncmpcpp もコントロールのみに対応します.つまり,http ストリーミングには対応していません(MPod, Mpad, MPDroid は対応している)し,これも当然ですが,対応している場合もきちんとアドレスとポート(今回の設定だと 8000 port)を設定しなければなりません.
mpd クライアントが http ストリーミングに対応しない場合,別にストリーミングを再生できるソフトウェアを用意しなければなりませんが,面倒ならば chrome 等のブラウザで,
- http://192.168.***.***:8000
にアクセスすれば OK です(192.168.***.*** は MPD をインストールした Raspberry pi の IP アドレス).最近のブラウザは http ストリーミングに対応しているものが多く,遅延はしますが,単に音楽を聴くだけならこれでも十分だと思います.
さて,このままでも使えることは使えるのですが,MPod, MPad, MPDroid 等は CoverArt にも対応しています.やっぱり CoverArt が無いと寂しいので,次はこれに対応させるための設定を行います.
CoverArt のために web server を立てる
MPod, MPad, MPDroid は Rasbian jessie の標準設定だと,
- /var/lib/mpd/music/A/B (/var/lib/mpd/music は音源用フォルダ)
というフォルダに音源ファイル music.mp3 と Folder.jpg があり,ブラウザで,
- http://192.168.***.***/A/B/Folder.jpg
のようにそれらファイルにアクセス可能な場合(192.168.***.*** は mpd をインストールした Raspberry pi のアドレス),この Folder.jpg を music.mp3 のカバーアートとして表示します.だから,これが実現できるように Web サーバーを設定してやれば良いだけです.このために Apache などを入れるのも面倒なので,/etc/rc.local の最終行に
$ sudo vi /etc/rc.local .... cd /var/lib/mpd/music /usr/bin/python -m SimpleHTTPServer 80 2> /dev/null
のように追加して再起動すれば良いです.
結論
最初にも書きましたが,正直ストリーミングサーバーとしては,DLNA サーバーの方が対応機器が多い分便利な気がします.さらに MPD の Web クライアントを Raspberry pi にインストールして,Web ブラウザからコントロールできるようにした方が絶対に便利です.例えば,
とかですね.
しかし,ここまでするのならば初めから Raspberry pi をもう1台買って,音楽専用ディストリビューションの Volumio などを使った方が手間と出来の良さから絶対に良い.
と言うことで,入れて試しては見ましたが,結果は微妙な感じです.Volumio の専用サーバーとして1台 Raspberry pi を追加しようかどうか現在考え中.