Music Player Daemon
MPD (music player daemon) はサーバー・クライアントアーキテクチャを持った音声プレイヤーです。ほとんど資源を消費しないで音声ファイルを再生したり、プレイリスト・音楽データベースを管理することができます。インターフェイスで接続するには、クライアントが必要になります。
インストール
実験版を動作したい場合は、AUR に複数のパッケージが存在します。例えば、mpd-gitAUR。
設定
MPD はローカル (ユーザーの設定ごと) とグローバル (設定を全てのユーザーに適用) で、かつ複数のインスタンスで動かすことができます。mpd の設定方法はどう使うかによります: 例えば、デスクトップならばおそらくローカル設定が便利でしょう。
MPD で音声を再生するためには ALSA か OSS のどちらか (PulseAudio は任意) を動作するように設定する必要があります。
MPD は mpd.conf
で設定します。このファイルの場所は MPD を実行する方法によります (下のセクションを見て下さい)。以下は一般的に使われている設定オプションです:
pid_file
- mpd がプロセス ID を保存するファイルdb_file
- 音楽データベースstate_file
- MPD の現在の状態playlist_directory
- プレイリストが保存されるフォルダmusic_directory
- MPD が音楽を探すフォルダsticker_file
- sticker データベース
グローバル設定
デフォルトの /etc/mpd.conf
では /var/lib/mpd
に設定が保存され mpd をデフォルトグループとして使います。
Music ディレクトリ
/etc/mpd.conf
ファイルを編集して music_directory
パラメータで音楽を入れているディレクトリのパスを設定してください:
music_directory /path/to/music
MPD は音楽コレクションの全ての親ディレクトリに +x
パーミッションが設定されていることを必要としますが、これは多くのユーザーが音楽を保存しているユーザーディレクトリのデフォルト設定と衝突します。
この問題を解決する方法はいくつかありますが、以下のどれかの方法が最も実用的です:
- ユーザーで MPD を実行
- ログイングループに mpd ユーザーを追加してユーザーディレクトリにグループパーミッションを付与:
# gpasswd -a mpd <your login group> $ chmod 710 /home/<your home dir>
- 音楽コレクションを別のパスに配置。(a) 全てを移動する (b) バインドマウントを使う (c) Btrfs のサブボリュームを使う (
/etc/fstab
にエントリを追加して変更を永続的にする必要があります) のどれかの方法を使用。ディレクトリのパーティションはアクセス制御リストで設定できます。
MPD の設定では音楽ディレクトリを一つしか含めることができません。音楽コレクションが複数のディレクトリにある場合は、/var/lib/mpd
のメインの音楽ディレクトリにシンボリックリンクを作成してください。リンクしたディレクトリにパーティションを設定することを忘れないで下さい。
MPD の起動
MPD は mpd デーモンを使うことで操作できます。最初の起動では MPD があなたの音楽ディレクトリをスキャンするので多少時間がかかります。
クライアントアプリケーション (ncmpc は軽量で使いやすいクライアントです) を起動していろいろなことをテストして、音楽を再生してください!
ソケットアクティベーション
(mpd に入っている) mpd.socket
ファイルを有効にすることで mpd.service
が無効になっているとき、systemd は mpd をすぐには起動しないで、適当なソケットで待機します。mpd クライアントがそのソケットのどれかに接続しようとしたら、systemd は mpd.service
を起動して透過的にポートのコントロールを mpd プロセスに引き渡します。
他の UNIX ソケットやネットワークポートを使いたい場合や、ネットワークポートで全く待機して欲しくない場合は、mpd.socket
の [Socket]
セクションにある適切な "ListenStream="
行を追加・編集・削除して、/etc/mpd.conf
の適切な行を修正してください (詳しくは man 5 mpd.conf
を参照)。
音声の設定
ALSA ユーザーは以下のデバイス定義を使うことで、MPD クライアントで他のアプリケーションとは独立してボリュームを操作することができます:
/etc/mpd.conf
audio_output { type "alsa" name "My Sound Card" mixer_type "software" # optional }
My Sound Card
はサウンドカードや pcm の名前に置き換えてください (aplay --list-pcms
で確認できます)。
PulseAudio ユーザーは以下の修正をする必要があるかもしれません:
/etc/mpd.conf
audio_output { type "pulse" name "pulse audio" }
PulseAudio は複数の高度な操作 (例: 音声を他のマシンへ転送する) をサポートしています。MPD で高度な設定を使うには Music Player Daemon Community Wiki を見て下さい。
ユーザーの変更
MPD を動かすグループを変更すると次のようなエラーが起こります: output: Failed to open "My ALSA Device"
, [alsa]: Failed to open ALSA device "default": No such file or directory
, player_thread: problems opening audio device while playing "Song Name.mp3"
。
これは MPD ユーザーが /dev/snd/
下のサウンドデバイスにアクセスできる audio グループに含まれていることを必要とするのが原因です。問題を解決するには、MPD ユーザーを audio グループに追加してください:
# gpasswd -a mpd audio
MPD の起動タイムライン
MPD がいつスーパーユーザー特権を落とし設定されたユーザーを使うのか説明するために、通常の MPD の起動順序をここに記載します:
- MPD が systemd によって root で起動されると、まず
/etc/mpd.conf
ファイルを読みに行きます。 - MPD は
/etc/mpd.conf
ファイル内の user 変数を読んで、root からこのユーザーに変更します。 - 次に MPD は
/etc/mpd.conf
ファイルの中身を読み、それに従って設定を行います。
MPD は実行ユーザーを root から /etc/mpd.conf
ファイルに記されたユーザーに変更することに注意してください。
このため、設定ファイルで ~
を使うと、root のディレクトリではなくユーザーのホームディレクトリを示すことになります。
~
を全て /home/username
に置き換えることで MPD の挙動に対して混乱することを避けることができます。
ローカル設定 (ユーザーごと)
MPD はユーザーごとに設定することが可能です (基本的に MPD はグローバルに設定します)。通常ユーザーとして MPD を実行するメリットは:
- ひとつのディレクトリ
~/.config/mpd/
(もしくは$HOME
下の他のディレクトリ) に MPD の設定ファイル全てが入ります。 - 予期できない読み書きのパーミッションエラーを避けやすくなります。
必要なファイルとプレイリストを集めた一つのディレクトリを作成すると良いでしょう。読み書きができるディレクトリならどれでも結構です (例: ~/.config/mpd/
もしくは ~/.mpd/
)。このセクションでは ~/.config/mpd/
を使うことを前提にしています。これは $XDG_CONFIG_HOME
のデフォルトの値に一致しています (XDG Base Directory Specification)。
MPD は $XDG_CONFIG_HOME/mpd/mpd.conf
や ~/.mpdconf
で設定ファイルを検索します。他のパスをコマンドラインの引数で指定することも可能です。
設定ファイルのサンプルを好きな場所にコピーしてください、例えば:
$ mkdir -p ~/.config/mpd $ cp /usr/share/doc/mpd/mpdconf.example ~/.config/mpd/mpd.conf
~/.config/mpd/mpd.conf
を編集して必要なファイルを指定してください:
~/.config/mpd/mpd.conf
# Required files db_file "~/.config/mpd/database" log_file "~/.config/mpd/log" # Optional music_directory "~/Music" playlist_directory "~/.config/mpd/playlists" pid_file "~/.config/mpd/pid" state_file "~/.config/mpd/state" sticker_file "~/.config/mpd/sticker.sql"
上で設定したプレイリストディレクトリを作成してください:
$ mkdir ~/.config/mpd/playlists
必要なファイルのパスを設定したら、MPD を起動できます。設定ファイルの場所を指定するには:
$ mpd config_file
tty ログイン時に自動起動
ログイン時に MPD を起動するには ~/.profile
(もしくは他の Autostart ファイル) に以下を追加してください:
# MPD daemon start (if no other user instance exists) [ ! -s ~/.config/mpd/pid ] && mpd
X で自動起動
デスクトップ環境を使っている場合は、以下のファイルを ~/.config/autostart/
に配置してください:
~/.config/autostart/mpd.desktop
[Desktop Entry] Encoding=UTF-8 Type=Application Name=Music Player Daemon Comment=Server for playing audio files Exec=mpd StartupNotify=false Terminal=false Hidden=false X-GNOME-Autostart-enabled=false
DE を使っていない場合は、#tty ログイン時に自動起動 の行を autostart ファイルに追加してください。
systemd による自動起動
mpd パッケージはユーザーサービスファイルが付属しており /usr/lib/systemd/user/mpd.service
にインストールします。設定ファイルは ~/.mpdconf
か ~/.config/mpd/mpd.conf
のどちらかにあるとして想定されています。他のパスを使う場合は systemd#ユニットファイルの編集を見てください。プロセスは root で実行されないため、MPD の設定ファイルで user
と group
変数は使ってはいけません。ユーザー権限は既にプロセスに付与されており、変更する必要がありません。
必要なことは mpd
のユーザーサービスを有効にして起動するだけです。
スクリプトによる設定
こちら に正しいディレクトリ構造・設定ファイルを作成してユーザーの音楽ディレクトリをたずねるスクリプトが存在します。
バイナリ一致再生のスクリプト設定
bash スクリプト を使うことでビットパーフェクト再生 (バイナリ一致再生) に重点を置いた mpd 設定ファイルを作成することができます。ビットパーフェクトとはリサンプリングやフォーマット変換を全く発生させない再生です。音声出力パラメータを設定して直接 ALSA のハードウェアアドレス (hw:0,0
など) を使うことでビットパーフェクト再生が可能になります。スクリプトは ALSA がサポートしている再生インターフェイスを自動で検出し、ひとつしかない場合は自動的に設定し、複数ある場合はユーザーにどれを使用するか質問します。コマンドラインに何も指定しなかった場合、music_directory
や mpd のホームディレクトリなどは freedesktop.org の XDG にあわせて自動で設定されます。
mpd のマルチ設定
icecast サーバーを実行
二番目の MPD (例: ネットワークを介して音楽を共有するための icecast 出力) で上で示しているのと同じ音楽・プレイリストを使うには、上記の設定ファイルをコピーして新しいファイルを作って下さい (例: /home/username/.mpd/config-icecast
) そして log_file, error_file, pid_file, state_file パラメータを変更してください (例: mpd-icecast.log
, mpd-icecast.error
など); 音楽やプレイリストのディレクトリに同じディレクトリのパスを使うことで二番目の mpd も一番目の mpd と同じ音楽コレクションを使うようになります。例えば、一番目のデーモンがでプレイリストを作成・編集すれば二番目のデーモンにも同じく影響を与えます。ユーザーは二番目のデーモンのために同じプレイリストを作る必要はありません。二番目のデーモンは ~/.xinitrc
から同じ方法で呼び出して下さい (ポート番号は変えておく必要があります、そうしないと一番目の mpd デーモンと衝突がおこります)。
Satellite セットアップ
上記の方法でも動作しますが、理論的に、両方の mpd インスタンスが同じデータベースファイルに書き込みを行おうとしたときに、データベースに問題が発生する可能性があります。MPD には satellite モード があり、動作中の mpd インスタンスから他のインスタンスにデータベースを受け渡すことができます。
config-icecast に以下を追加してください、host と port はプライマリの mpd サーバーに合わせて置き換えてください:
database { plugin "proxy" host "localhost" port "6600" }
クライアント
mpd を操作するには別にクライアントが必要です。mpd wiki にあるクライアントのリストを見て下さい。人気のあるクライアントは以下の通りです:
コンソール
- mpc — MPD サーバーのコマンドラインインターフェイス。
- ncmpc — mpd の ncurses クライアント。
- ncmpcpp — 新しい機能が加わった C++ で書かれている ncmpc の正確なクローン (タグエディタ、検索エンジン)。
- pms — 細かく設定・アクセスができる ncurses クライアント。
- vimpc — ncurses ベースの MPD クライアント、vi ライクなキーバインド。
- vimus — Haskell で書かれた vim ライクなキーバインドを備えた MPD クライアント。
- https://github.com/vimus/vimus || vimus-gitAUR[リンク切れ: パッケージが存在しません]
グラフィカル
- Ario — Rhythmbox にインスパイアされた、mpd 用の機能豊富な GTK2 の GUI クライアント。
- QmpdClient — Qt 4.x で書かれた GUI クライアント。
- Sonata — エレガントな Python GTK+ クライアント。
- gmpc — Music Player Daemon の GTK2 フロントエンド。軽量で使いやすいように設計されており、MPD の機能全てに完全にアクセスすることが可能。ユーザーは複数の方法で音楽をブラウズできるようになっています。多数のプラグインで拡張もできます。
- Cantata — 多数の機能があり、インターフェイスが細かく設定できる MPD の Qt4/Qt5/KDE クライアント。
- Xfmpc — リソースの消費力が少ないグラフィカルな GTK+ の MPD クライアント。
- pymp'd — MPD の GTK+ フロントエンドクライアント。
- Quimup — C++ と Qt3 で書かれた MPD のクライアント。
- SkyMPC — Qt5 ベースのシンプルな MPD クライアント。