Music Player Daemon(MPD)とMPC

メディアサーバとしてよく知られているものにEmbyとPlexがあります。これらのメディアサーバは動画はもちろん音楽再生もできますが、普段音楽を聴くならもっとお手軽に使えたほうがいいのでMPDをインストールしてみます。MPDは初期のLinuxの時代から馴染みのある古いアプリケーションです。ほかのミュージックプレーヤーとの違いはMPDはデーモン、すなわちサーバーとして使います。サーバーということは当然、クライアント用アプリケーションも必要になります。mpdのインストールが済んだら/etc/mpd.confを編集します。

今回、mpdがサーバー機能があるということでネットワークでも使えように設定を進めていきます。

musicディレクトリの設定

music_directory         "/var/lib/mpd/music"

playlistのディレクトリの設定

playlist_directory      "/var/lib/mpd/playlists"

db(データベース)ディレクトリの設定

db_file                 "/var/lib/mpd/tag_cache"

logディレクトリの設定

log_file                "/var/log/mpd/mpd.log"

pidファイルのディレクトリ

pid_file                "/run/mpd/pid"

stateファイルのディレクトリ

state_file              "/var/lib/mpd/state"

user(ユーザ)の設定

user                    "mpd"

上記で設定したディレクトリを作成してはuserが読み書きできるようにパーミッションを変更します。

chown -R mpd: /var/lib/mpd/* /var/log/mpd /var/run/mpd

Ubuntuなどではmpdのgroupがないのでつぎのようになります。ディストリビューションにより設定が微妙に異なります。

chown -R mpd:users /var/lib/mpd/* /var/log/mpd /var/run/mpd

ネットワークの設定はすべてのIPからアクセスできるように設定します。IPアドレスを指定しても良いです。

bind_to_address                 "0.0.0.0"

ネットワークからサーバ検索出来るようにします。

zeroconf_enabled                "yes"
zeroconf_name                   "Music Player"

パスワードを設定します。パスワードを設定しないと第三者から簡単にアクセスされます。

password                       "*pass*@read,add,control,admin"

オーディオ出力の設定はpulseaudioにします。今はalsaは廃れているので選択肢から外しています。

audio_output {
        type            "pulse"
        name            "My Pulse Output"
        server          "127.0.0.1"             # optional
#       server          "remote_server"         # optional
#       sink            "remote_server_sink"    # optional
}

pulseaudio側でも設定が必要になります。
/etc/pulse/default.pa

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

pulseaudioを再起動します(私の環境では音がならなかったのでリブートしました)

$ pulseaudio --kill
$ pulseaudio --start # または start-pulseaudio-x11 /kde

httpストリーム用に設定します。

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
#       quality         "5.0"                   # do not define if bitrate is defined
        bitrate         "128"                   # do not define if quality is defined
        format          "44100:16:1"
        max_clients     "0"                     # optional 0=no limit
        always_on       "yes" # prevent MPD from disconnecting all listeners when playback is stopped.
        tags            "yes" # httpd supports sending tags to listening streams.
}

ビジュアル化するためとコントロールで使用する設定です。

audio_output {
    type                    "fifo"
    name                    "my_fifo"
    path                    "/tmp/mpd.fifo"
    format                  "44100:16:2"
}

デーモンを起動にちょっと難があり、ネットワークソケットがうまく扱えなくて再起動のときにエラーが起きるときがあります。

systemctl stop mpd.service
systemctl stop mpd.socket
systemctl disable mpd.socket

としてmpdのソケットを外します。

firewallの設定は80、6600、8000ポートを開けます。ufwの設定例では次のようにルールを追加します。
/etc/ufw/user.rules

-A ufw-user-input -p tcp --dport 80 -j ACCEPT
-A ufw-user-input -p udp --dport 80 -j ACCEPT
-A ufw-user-input -p tcp --dport 6600 -j ACCEPT
-A ufw-user-input -p tcp --dport 8000 -j ACCEPT
-A ufw-user-input -p udp --dport 8000 -j ACCEPT

CoreELEC(LibreELEC)の場合

アドオンでmpdをインストールします。一度起動すると設定ファイルが作成されます。

ディレクトリリスト:

/storage/.kodi/userdata/addon_data/service.multimedia.mpd/config/mpd.conf
/storage/.config/system.d/service.multimedia.mpd.service
/storage/.kodi/userdata/addon_data/service.multimedia.mpd/log/mpd.log

Kodiがalsaデバイスを使っているのでhttpストリーミングのみにしています。

以上でmpdデーモンの設定は完了です。

クライアントはコマンドライン、ターミナル用、GUI用の3タイプが選べます。コマンドラインはmpcを使います。ターミナル、GUIのアプリケーションはいろいろありますが、よく使われるのは、ターミナル用にncmpcpp、GUI用はcantataです。

音楽ファイルを所定の場所にインストールしたらクライアントアプリを立ち上げます。操作方法はプロジェクトのサイトにドキュメントがあるのでそれを見て操作します。音楽データベースの作成、プレイリストの追加をします。これでクライアントの設定は完了です。

ncmpcppではちょっとしたビジュアルモードあり、’8’を押すとビジュアルモードに切り替わります。

つぎにリモートPCからアクセスしてリモートPCに音楽を流してみます。
コマンドラインから

mpc add http://{mpd server}:8000
mpc play

ブラウザからもアクセスできます。VLCプレーヤーなどからはつぎのようにします。

http://{mpd server}:8000/mpd.ogg

逆にリモートPCからサーバーにアクセスする場合、ncmpcppを使います。

ncmpcpp -h {mpd server}

GUIクライアント、cantataの例です。

ympdはWebインターフェースのクライアントです。entwareのパッケージから員インストールします。 mpc add <host>:8000でリモートPCに鳴らすことができます。このうぇbインターフェースのデフォルトポートは8080ですがKodiのポートと重ならないようにずらしています。

CoreELEC2:~/.config/system.d # ympd -h0.0.0.0 --webport 80 --user nobody -w0.0.0.0:8001
MPD Connecting to 0.0.0.0:6600
MPD connected.

トラブルシュート:

$ pulseaudio --kill
$ pulseaudio --start # または start-pulseaudio-x11 /kde

追記:
pulseaudioとの兼ね合いでClient側はユーザ権限でmpdを起動したほうが安定します。
もし音がでなくなったらClient側のmpdを再起動します。


参考: