torum

主に開発中のアプリにまつわる技術系の事。

MPD (Music Player Daemon) のススメ

MPD (Music Player Daemon) とは何か、って話しなんですが一言で言うと、音楽再生するミュージックプレーヤーです。MPDが他と何が違うかというと、それ単体では何もしないで、サーバーとして機能します。

つまり、他のクライアントから操作する事が出来る、という事です。いやゆるメディア・サーバーの一種です。具体的にはリビングのパソコンに入れたMPDを携帯のアプリやノートパソコンからコントロールする事が出来る・・・ソファに寝転んだままで、ってやつです。

それiTunesでもリモートってアプリで出来るじゃん、という声が聞こえてきそうですが、MPDはもっと本格的で、プレイリストの編集や検索などフルコントロールができます。他にもストリーミングとか諸々。しかもWindowsMacだけでなく、Linuxでも動きます。

自分の場合は、貯めこんだ大量の映画やドラマなどの動画メディアを大画面テレビで再生したり、風呂場や寝室でiPhoneで観たり、とか諸々する為にLinuxのファイルサーバーを常時起動しています。家のどこにいても携帯で数テラバイトに及ぶファイルの中から好きなメディアをVLCで再生したり、ファイル共有にも便利ですからね。

さらに、そのLinuxでMPDを稼働させ、スピーカーをつないで音楽も再生できるようにしています。もちろん普通のWindowsデスクトップにも入れて、PCで作業しながらの音楽再生にも利用しています。MP3ファイルの管理はiTunesにまかせちゃってますけれどね(iPhoneとの同期があるし、アルバムカバーの追加とか楽だから)。

もともとMPDは、Linuxのメディア・サーバーとして非常に人気があり、ヨーロッパや米国で良く使われています。日本では残念ながらまだ(日本語情報の量から判断する限り)あまり知られていない模様です。そもそも、Linuxで一般的なコマンドライン操作やパーミッションだの、IPアドレスの話しが出てきたり、テキストファイルでの設定など少々敷居が高い上に、英語でしか情報が無いのが原因かと思われます。とはいえ、テック界隈でもあまり認知度がなさそうなのは何故なんだろうと思ったりします。

(アプリのインストールやアクセス履歴を見ても、多いのは北米とヨーロッパ、その次にインドや南米、そして東南アジア、最後に日本、という感じで、異様に日本が少ない)

そんな訳で、ここでWindowsでのMPDの設定方法と使い方を、簡単に紹介したいと思います。

MPDのインストール

インストールと言っても、Windows版は単にExeをダウンロードして適当な場所に保存するだけです。

オフィシャルのMPDのサイトのダウンロードのページで、"mpd.exe for Windows x64"をクリックすると、mpd.exeというファイルが降ってきますので、それを保存します。基本どこでも構わないのですが、コマンドラインで操作する可能性を考えて、シンプルな場所が良いでしょう。ここでは以下の場所に保存します。

C:/mpd/mpd.exe

MPDの設定

mpd.exeと同じフォルダに

mpd.conf

というテキストファイルを作成します。このファイルでMPDの設定を記述します。

私の環境ではこんな感じです。

# MP3ファイルが存在する音楽フォルダの指定。

music_directory "C:/Users/hoge/Music/iTunes/iTunes Media/Music"

# プレイリストを保存するフォルダ(作成)

playlist_directory "C:/mpd/playlists"

# MPDのデータベースのファイルを保存するフォルダ(作成)

db_file "C:/mpd/data/mpd.db"

# MPDのログが書きだされるフォルダ(作成)

log_file "C:/mpd/data/mpd.log"

# MPDの状態が保存されるファイルの場所同じフォルダ指定。

state_file ".\\state"

# 接続ポート(デフォルト6600なので変更する必要はなし)

port "6600"

# 必要であればパスワード(権限と共に)の指定。変更する場合は、先頭一文字目を削除して@前を変更。

#password "hoge@read,add,control"

# インプット、コマンドラインでの操作の方法指定。

input {
  plugin "curl"
}

# オーディオのデバイス設定。基本デフォルトを使うようですが、使用デバイスを指定出来たりします。デバイス名で指定する模様。音が出ない場合はここが問題かと。

audio_output { 
  type "winmm"
  name "Speakers"

#device "Degital Audio (HDMI) (2- High Definition Audio Device)"
#device "Speaker/Headphone (Realtek Audio)"
}

 

フルの設定ファイルの例と説明は以下などを参照すると良いと思います。英語ですが・・・

mpd.conf · GitHub

MPDの起動とWindowsサービス化

この段階で、コマンドラインで(設定ファイルを指定してMPDを起動)

C:\mpd\>mpd mpd.conf

とやるとMPDを起動できるはずです(何やら書き出される場合もありますがエラーでなければ問題なし)。

テストで使うぶんにはこのままで良いのですが、コマンドライン(cmd.exe)の画面が表示されたままとなり不便なので、WindowsサービスとしてMPDを稼働させることが出来ます。Linuxでいうデーモンですね。

コマンドラインで(たしか管理者権限を利用してcmd.exeを起動する必要があったはず)以下のように打てば、サービス化できます。

sc create mpd binpath="C:\mpd\mpd.exe C:\mpd\mpd.conf" displayname="Music Player Daemon"

Windowsのシステム管理ツールの「サービス」ってアプリで確認できます。「遅延開始」が良いみたいです。

再生前の注意点

まず、MPDを使う上で必ず念頭に入れておきたいのは、音楽フォルダを変更したりした場合、MPDのデータベースのアップデート(更新)が必要となる、という事です。MPDは、先の設定ファイルに指定したフォルダ内の音楽ファイルを列挙してデータベース化します。MPDにデータベースを更新せよ、と指定しないと音楽ファイルを認識してくれません。

じゃ、どうやってそれをやるのか、というと、クライアントソフトが必要となります。公式で出ているクライアントはMPCといって、コマンドラインで使うものがあります。とはいえ、普段からコマンドラインのクライアントを利用する人は稀で、GUIタイプのクライアントを使います。

MPDのクライアント

2003年にMPDが公開されて以来、携帯アプリを含め様々なクライアントソフトが開発・公開されていますが、やはりLinux向けが多く、Windows向けはあまり多くはありませんでした。

・・・という事で作ってみました。

MPDCtrl, a MPD client for windows

MPDCtrl

いわゆる国際化済みですので、日本語環境では日本語の表示になります。

 

ソース諸々はGitHubで公開していて、オープンソースとして開発しています。

github.com

 

インストールというか実行するには、マイクロストのアプリストアで公開していますので、よろしければインストールして試してみてください。

www.microsoft.com

 

MPDへのアクセス

同じパソコンに入れた場合は、IPアドレス127.0.0.1」ポート番号はデフォルトでは「6600」で接続できるはずです。

 

技術的な余談

MPDCtrlの技術的詳細は、C#で開発し、出たばかりの.Net5をターゲットにして、UIは最高の表現力を持つWPFXAMLでデザイン、コードはMVVMパターンにしています。余計なライブラリは一切使っていません。

MPDとはTCPコネクションを張ってコマンドをやり取りします。アイドリング状態にしておくと、変更通知がつらつらと流れてくる、という感じです。

さらに余談

元々は携帯のアプリで簡単に操作できるシンプルなMPDクライアントアプリが欲しかったんです。しかし、iOS向けには良いアプリが無く・・・(今も無いですが)。以前はiPhone向けにとても良いアプリがあったそうなのですが、Appleには諸々古い開発プラットフォームを切り捨てるクセがあるため、ことごとく以前のアプリが動かなくなっているという状況でした。(しかもAppleのアプリストアは公開するが有料で、毎年お金がかかりますからね、無料のアプリでも)

しょうがない、じゃ自分で作るか、という気軽なノリで始めました。といってもiPhoneアプリの為に一からマックで開発ってのはやる気がせず、Windowsの環境で開発できるXamarinというプラットフォームを利用するつもりでした。これで開発すればiPhone向けとAndroid向けが一発で作れる、という事で。

ただ、2018年当時、Xamarineはまだこなれていなく、未成熟というか、開発途上の段階で、不安定というかまだこれから、という感じを受けたので、とりあえず動く段階まで作って断念、というか放置していました。

Windows環境で普段使っているの言語(C#)で携帯アプリを開発出来るのは凄いのですが、色々面倒で、マックを起動してそこでエミュレーターを動かしておいてWindowsから使う、という開発環境で、重たいというか遅い・・・。普通のデスクトップアプリだったら一瞬の起動が、エミュレーター立ち上げたりしていると何分も延々と待っていなければならなかったりするのです。だるかった。

そんなかんなで放置していたんですが、2020年になって、マイクロソフトから「.Net5」がアナウンスされて、WPFやXamarinなどのプラットフォームの統一がされる事になり、マイクロソフトがモバイル開発と共にネイティブのデスクトップアプリ開発へ回帰する、という方向性が見えてきたので、ヨシやったるか、と。開発者は利用するプラットフォームや技術の将来性に確信が持てなければ、膨大な時間と労力を投資というかコミットする気にはなれませんからね。

そこでまず、携帯アプリにする前に、まずはデスクトップアプリで完全版というかフルフィーチャーのMPDクライアントを作ってから、それをXamarinへ移植すれば良いじゃん、と。コアの部分はそのまんま100%再利用できますからね。

そんなかんなで始めたデスクトップ版ですが、かなり本格的になってしまい、いつの間にかバージョンが3.xとかになってしまいました。自分がヘビー使っているので、気になる点があればその場で改良・修正しているのに加え、他人様に使ってもらっているというのがちゃんと作る動機付けになっています。

モバイル版の方は、一応、現段階でXamarinでとりあえず動くのはあるのですが、やっぱりエミュレーターでUIデザインを確認しながら開発するのは面倒くさい・・・。しかも、Xamarinが統合されるのが2021年後半の.Net6になってしまう、というニュースが出て来て、まぁ本格的に手を出すのは来年かな、と思っています。というか、Xamarin.Formsよりも、Uno Platformを利用するかもしれない・・・

 *しかし携帯アプリの開発って、原始的というか、PCと比べて非力な上に小さな画面で機能も制約が多く、PCに慣れているとヘビーに使うのも開発するのもあまり楽しくないですね。携帯アプリはどこにでも持ち歩けるっていうのが利点なだけで、あとは携帯固有のカメラやGPSなどをメインの機能に組み合わせたアプリでないと、あまり存在意義が無い気もします。殆どのアプリがアプリである必要性すらなかったり・・・。別にそれブラウザで良くない?みたいな・・・。