MPD(Music Player Daemon) 備忘録

Gadget
Photo by deliyum.

祭日が多く時間があったので,以前から興味を持っていた 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.

なので,まぁ要するにサーバーサイド音楽プレーヤーですね.

実は入れる前は,音楽専用ストリーミングサーバーだと思い込んでいましたし,確かにストリーミングサーバーとしても使えるのですが,本来は,ネットワーク対応の音楽プレーヤーとして使うものなんですね.製品としては,

HAP-Z1ES | コンポーネントオーディオ | ソニー
ソニー コンポーネントオーディオ 公式ウェブサイト。コンポーネントオーディオHAP-Z1ESの商品ページです。

に近いものです.要するに,PCやスマホからコントロールできるオーディオプレーヤーとして使うのが正しい使い方なんだと思います.

じゃあ,何で注目されているのかと言うと,Raspberry Pi + 安価な DAC で安価(市販のものとは1桁は違う)だけど自由度の高い高音質なネットワークオーディオが作れる,しかも DAC を選択でき,専門家でなくても工作できたりするので楽しい,ということのようです.

まぁ音楽ストリーミング専用サーバーとしても使えるのですが,正直ストリーミングサーバーとしては,DLNA サーバーの方が対応機器が多い分便利な気がします.

MPD(Music Player Daemon) の設定

色々なところで紹介されているので,今更なのですが,MPD を使うために Raspberry pi にどんなパッケージが追加されるのかの記録として残しておきます.

必要な作業は以下の通り.

  1. mpd と lame or vorbis のインストールと設定
  2. mpd のクライアントアプリケーションのインストール
  3. 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
mpc - Music Player Daemon
$ sudo apt-get install ncmpcpp
$ ncmpcpp
NCurses Music Player Client (Plus Plus) | rybczak.net

使い方は起動後に 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 ブラウザからコントロールできるようにした方が絶対に便利です.例えば,

Home - O!MPD
O!MPD is a responsive MPD web client based on PHP and mySQL. It supports Tidal and HighResAudio and can be installed on ...

とかですね.

しかし,ここまでするのならば初めから Raspberry pi をもう1台買って,音楽専用ディストリビューションの Volumio などを使った方が手間と出来の良さから絶対に良い.

Home - Volumio
Volumio is the music player designed to deliver a unified and high quality experience.

と言うことで,入れて試しては見ましたが,結果は微妙な感じです.Volumio の専用サーバーとして1台 Raspberry pi を追加しようかどうか現在考え中.

 

 

GadgetServer
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました