lightMPD - lightweight Music Player Daemon (MPD)

お知らせ

lightMPDはNAS上の音楽ファイルを再生します。USBメモリやHDDなどのローカルなデバイス上の音楽ファイルを再生する事はできません。

    • 2019.05.05
    • lightMPD v1.2.0(評価版)を公開しました。

現在下記の機種をサポートしています。


概要

lightMPDMPD(Music Player Daemon)を動作させることに特化したLinuxのディストリビューションです。

ネットワークで接続されたストレージ内の音楽ファイルをUSB接続のDAC経由で再生するネットワークプレーヤとして動作します。

特徴

  • ルートファイルシステムは約24M バイトとコンパクトですべてメモリ上で動作します。
  • ルートファイルシステムのファイルシステムはromfsでカーネルの動作も軽量です。
  • インストールが簡単でネットワーク、NASマウントおよびMPDの設定はWindows環境で行えます。
  • 動作するハードウェア

MPD(Music Player Daemon)について

MPD(Music Player Daemon)はLinuxを始めWindowsやMacでも動作するミュージックサーバーです。

MPDは音楽ファイルやプレイリストの管理の他に音楽ファイルを直接再生するという機能を持っています。これはDLNAサーバー等のそれまでのミュージックサーバーが音楽ファイルの管理に特化しているのに比べてMPDの大きな特徴になってます。

MPDの基本機能はローカルのストレージに記録されている音楽ファイルの管理および再生ですが、ネットワークで接続される外部ストレージをマウントする事によって外部ストレージ上の音楽ファイルの管理、再生も行えます。

lightMPDでは、ローカルのストレージを持たず、ネットワーク上のストレージの音楽ファイルを管理・再生する事に特化しました。使用形態としてはネットワークプレヤーな使い方を想定しています。

MPDのその他の機能として

  • インターネットラジオ
    • ミュージックファイルのストリームサーバー

等多数あり、これらはMPDのbuild時に取捨選択できます。

MPDの操作はPCやモバイルデバイス上で動作するMPDクライアントにより行います。

特にiOS上で動作するmpod,mpadは非常に優れたクライアントです。mpod,mpadがなければMPDもこれほど普及してなかったかもしれません。

MPDクライアントについてはMusic Player Daemon Community Wikiにまとめられてます。



設定

lightMPDディレクトリ内にあるファイルでシステムの設定を行います。

    1. lightMPD/lightmpd.conf
    2. ネットワーク、NASの設定を行います。。
    3. lightMPD/mpd.conf
    4. mpdの設定を行います。
    5. mpd
    6. mpdの実行モジュールです。mpdがバージョンアップされた場合にこのファイルを置き換えます。

lightmpd.conf

lightmpd.conf でlightMPDが所属するネットワークや音楽ファイルが格納されているNASの諸元を指定します。

このファイルを編集する為には以下の情報が必要になります。(lightMPDではDHCPによるネットワークの設定は使用出来ません)

前準備として以下のネットワーク属性を調べて下さい。

    1. ネットワークアドレス
    2. サブネットマスク
    3. デフォルトゲートウェイのIPアドレス
    4. DNS サーバーのIPアドレス
    5. DNS Suffix
    6. NASのIPアドレス,またはホスト名

上記の1.から5.までの情報はlightMPDが所属するネットワークにWindows環境がある場合はWindowsのipconfigコマンドで調べることが出来ます。

Mac の場合はネットワーク環境で調べる事が出来ます。

前準備として上記のネットワーク属性を調べて下さい。その上で、lightMPDのIPアドレスを決定します。

IPアドレスの割り振り方

以下、簡単にするためサブネットマスクが255.255.255.0の場合について説明します。サブネットマスクがこれ以外の場合はネットワーク管理者に尋ねて下さい。ネットワーク管理者がいない場合は、掲示板で問い合わせて下さい。(まじめに説明しようつすると2進数から説明しなければならなくなります。)

IPアドレスはネットワークアドレス+ホストアドレスになります。今、ネットワークアドレスは決まってますからホストアドレスを決めます。ホストアドレスはサブネットマスクが0の部分です。サブネットマスクが255の部分がネットワークアドレスになります。

例えば サブネットマスクが255.255.255.0の場合、IP アドレス 192.168.10.10は

ネットワークアドレス 192.168.10.0

ホストアドレス 10

になります。

サブネットマスクが255.255.255.0の場合、ホストドレスは0 から255までの範囲で割り当てることが出来ます。但し、0はネットワークアドレスと区別がつかなくなるため、また、255はブロードキャストアドレスという特別なアドレスとして使われるので、この2つは除きます。また、240も避けた方がいいでしょう。

さらにホストアドレスの条件としては同一ネットワーク内にホストアドレスの重複は許されないというのがあります。ネットワーク内に同一のホストアドレスを持つ機械が2台以上あると不可解な動作をします。

以上を踏まえて

    1. ネットワーク内のホストアドレスが静的に割り当てれている場合(DHCPを使っていない)
    2. ルータ、NAS、PCなどに割り振られているアドレス以外から選ぶ
    3. ネットワーク内のホストアドレスがDHCPによって管理されている場合
    4. DHCPサーバーの設定で割り当てを除外するアドレスの範囲などの設定があるので、
    5. その範囲から未使用のホストアドレスを選ぶ

lightmpd.confの設定例

#

#

#

[network]

interface=eth0

address=192.168.0.0

netmask=255.255.255.0

gateway=192.168.0.0

nameserver=192.168.0.0

domain=mydomain.jp

[ntp]

server=192.168.0.0

ntpd=no

timezone=Asia/Tokyo

[nasNASID1]

type=nfs

host=nashost

remotedir=audio_data

proto=tcp

rsize=65536

wsize=65536

[nas:NASID2]

type=cifs

host=nashost

remotedir=audio_data

remoteuser=usrid

remotepass=passwd

iocharset=utf8

file_mode=0644

dir_mode=0755

rsize=61440

wsize=65536

[mpd]

load_module=mpd-0.17.6dsdrt

music_directory=NASID1/Music,NASID2/Music

playlist_directory=NASID1/mpd/playlists

db_file=NASID1/mpd/tag_cache

sticker_file=NASID1/mpd/sticker.sql

log_file=/dev/null

[httpd]

enable=yes

[debug]

interfaces=yes

resolvconf=yes

ntpd=yes

ntpconf=yes

ifconfig=yes

cards=yes

mounts=yes

ps=yes

mpdversion=yes

date=yes

ntpq=yes

music=yes

messages=yes

lightmpd.confは通常のテキストファイルで、行末コードはCR+LFまたはLFです。また、漢字コードは含めないで下さい。

先頭が'#'の行はコメントとして無視されます。

lightmpd.confは複数のセクションからなり、[]で囲まれた行がセクションの開始になります。[]の中の文字列がセクション名になります。各セクション毎に属性を指定します。属性は属性名=属性値の形式で指定します。

ネットワークの設定 - [network]

ネットワークの設定はnetworkセクションで行います。設定する値がわからない場合は、ネットワークに接続されているWindows,Mac を使って調べる事が出来ます。

Windowsの場合はDOS窓から ipconfig /allコマンドを実行するとそのネットワークの属性が表示されます。

Macの場合はシステム環境設定->ネットワークでネットワークの属性が表示されます。

    • interface
    • networkの指定を行うインターフェイスを指定します。eth0を指定して下さい。
    • address
    • lightMPDに割り当てたIPアドレスを指定します。
    • netmask
    • ネットマスクを指定します。下記の値を設定します。。
    • Windowsの場合はipconfigコマンドのSubnet Mask
    • Mac の場合はネットワークのサブネットマスク
    • gateway
    • デフォルトゲートウェイのIPアドレスを指定します。下記の値を設定します。
      • Windowsの場合はipconfigコマンドのDefault Gateway
      • Macの場合はネットワークのルータ
    • nameserver
    • ネームサーバーのIPアドレスを指定します。下記の値を設定します。
      • Windowsの場合はipconfigコマンドのDNS Server
      • Macの場合はネットワークのDNS サーバー
    • domain
    • ドメイン名を指定します。下記の値を設定します。
      • Windowsの場合ははipconfigコマンドのConnection-specific DNS Suffix
      • Macの場合はネットワークの検索ドメイン

時刻の設定 - [ntp]

beagleboneのクロックはバッテリーでバックアップされていないので、電源をONするたびに時刻を設定する必要があります。

設定しないと時刻は2000年1月1日 9時0分0秒(日本時間)から計時されます。

CUBOXのクロックはバッテリーでバックアップされてます。

クロックの設定が必要ない場合はserve に"none"を指定して下さい。

lightMPDではntpという仕組みを利用して外部のサーバーから時刻を取得することにしました。

ntpセクションではntpの設定を行います。

serverにIPアドレスがセットされている場合以下の動作を行います。

  • 起動時にntpdateプログラムによりサーバーの時刻をクロックにセットする。
  • 稼働中はntpサーバーによりサーバーの時刻をクロックを同期します。

以下のプロパティがあります。

    • server
    • ntpサーバーのサーバー名またはIPアドレスを指定します。サーバー名を指定する場合は、networkセクションのnameserverが正しく設定されている必要があります。
    • 設定値は以下のようにして調べます。
      • ネットワーク内でntpサーバーを運用している場合はそのアドレス
      • お使いのISPでntpサーバーを運用している場合はそのアドレス
      • NASにntpサーバーの指定があり、設定している場合はその設定値
      • インターネット上の適当なサーバーのホスト名またはアドレス
      • 推奨公開サーバから選ぶ
    • ntpd
    • ntpサーバーを起動する場合はyesを指定します。起動しない場合はnoを指定します。デフォルトはyesです。
    • こまめに電源をON/OFFする場合はntpサーバーは必要ありません。
    • 電源を常時ONにしておく場合はntpサーバーを起動したほうがいいです。
    • timezone
    • タイムゾーンを指定します。日本の場合は"Asia/Tokyo"を指定します。

lightMPDが所属するネットワークがインターネットにつながっていなくて、そのネットワーク内でntpサーバーを運用していない場合はserverに"none"を指定して下さい。時間の設定を行わないでシステムを続行します。(これはあまりおすすめしません)

NASの設定 - [nas:NASID]

本来なら、ネットワークドライブのマウントはautomount + nfs が基本と考えているのですが、autofsを用意できなかったのでシステム起動時に直接マウントする事にしました。

システム起動時にNASがReadyになってないとマウントに失敗し、mpdも起動しません。電源の起動順序には十分気をつけて下さい。

v0.02から複数台のnasをマウント出来るようになりました。nasを識別する為にNASIDを使用します。

NASIDはアルファベット、数字からなる任意の文字列で指定しますが、重複は出来ません。

NASIDにはnasが区別出来るように設定します。

    • nasのホスト名
    • nasの用途
    • 例]
    • music , avdata, wave 等
    • nasの機種またはメーカー名

以下の説明にNASIDが現れたら、ご自身で決定された物に置き換えて下さい。

複数台のnasを使う設定例

例]

[nas:pcm]

type=nfs

host=host1

remotedir=music

....

.....

[nas:dsd]

type=nfs

host=host2

remotedir=music

....

....

nas毎に下記の項目を指定します。下記の項目の内host,remotedirは重要なのでその調べ方を説明します。

nasを使っている場合は、nasに音楽データを保存するためのPCがnasと同じネットワーク上にあると思います。

そのPC(Windowsの場合)を使ってnasのhost,remotedirを調べます。(手元にWindows xp しかないのでWindows xpを例に説明します)

マイネットワークを開くとそのPCが使えるネットワークドライブの一覧が表示されます。

表示形式を詳細にすると以下の項目が表示されます。

  • 名前
  • コメント
  • コンピュータ
  • ネットワークの場所

コメント欄は¥¥Host¥remotedirの形式になっています。

¥¥Host¥remotedirでnasのマウント可能なディレクトリを示しています。これを共有ディレクトリと呼びます。

共有ディレクトリはnasの設定で複数もうける事が可能です。

lightMPDでマウントしたいnasの共有ディレクトリをしらべて、host,remotedirを知ることができます。

Windowsでは共有ディレクトリ名のhostの先頭文字は必ず大文字になるようです。実際のホスト名は全部小文字の場合もあるので注意して下さい。

ネットワーク内でdnsを運用していない場合はlightMPDからはホスト名でnasをアクセスする事はできません。

この場合は、ホスト名をnasのIPアドレスに置き換えて下さい。

例]

\\192.168.0.10\audio

(家庭内のネットワークの管理にdnsを使用している家庭はほとんどないと思います。)

次に、lightMPDでマウントした共有ディレクトリの扱いについて説明します。

lightMPDでは各nasのhost,remotedirで指定された共有ディレクトリを/var/lightMPD/nas/NASID にマウントします。

以下は同じディレクトリを指定しています。

Windows共有ディレクトリ名

¥¥host¥remotedir

lightMPDのディレクトリ

/var/lightMPD/nas/NASID

lightmpd.confではnas上のファイルやディレクトリを指定する場合、/var/lightMPD/nas の部分は省略します。

これがあると正しく動作しません。

例]

/var/lightMPD/nas/NASID/audio/flac は lightmpd.confでは NASID/audio/flac と指定します。

nas毎に以下の項目を設定します。

    • type
    • ファイルシステムのタイプを指定します。以下の値を指定します。
      • nfs
      • nfsでマウントします。
      • nfs4
      • nfsのプロトコルバージョン4でマウントします。(これは未テストです)
      • cifs(nfs以外)
      • cifsでマウントします。
    • host
    • NASのホスト名またはIPアドレスを指定します。lightMPDの属するネットワークがdnsで管理されている場合はホスト名が使えます。それ以外の場合はIPアドレスを指定して下さい。(ネットワークがdnsで管理されていない場合、Windowsからホスト名で参照できてもlightMPDからはホスト名でNASを参照する事は出来ません。)
    • remotedir
    • NASの共有ディレクトリを指定します。先頭の¥や/は含まないで下さい。
    • remoteuser
    • cifsでマウントする時にNASにログインする際のユーザ名を指定します。
    • remotepass
    • cifsでマウントする時にNASにログインする際のパスワードを指定します。
    • iocharset
    • cifsでマウントする時にNASのローカルパス名の文字コードを指定します。よくわからない場合はutf8を指定して下さい。これでファイル名が文字化けする場合はutf8以外のコードが採用されているのでシステムに併せて設定して下さい。(詳しい人に尋ねて下さい)
  • proto
  • nfsでマウントするときのプロトコルを指定します。以下の値を設定します。デフォルト値はtcpです。
    • tcp
    • udp
    • wsize
    • ファイル書き込み時のバッファーサイズを指定します。
    • 1024の倍数を指定します。この値の上限はサーバーによって異なります。
    • lightMPDではnasに書き込む事はほとんどないのでデフォルト値でいいと思います。
    • デフォルト値は
      • nfs(tcp) - 65536
      • nfs(udp) - 8192
      • cifs - 65536
    • rsize
    • ファイル読み込み時のバッファーサイズを指定します。
    • 1024の倍数を指定します。この値の上限はサーバーによって異なります。
    • この値の最適値はサーバーやサーバーとlightMPDに介在するネットワーク機器(スイッチングハブ、ルータ等)によって異なります。
    • 介在するネットワーク機器の性能によっては少なめの値のほうが転送速度が向上する場合があります。
    • デフォルト値は
      • nfs(tcp) - 65536
      • nfs(udp) - 8192
      • cifs - 61440

mpd関連ファイル - [mpd]

mpdで使用するファイルを指定します。

  • music_directory
  • mpdが管理する音楽ファイルの格納されているディレクトリを指定します。複数のディレクトリを","で区切って指定する事が出来ます。以下にmusic_directoryの記述の仕方を説明します。
          • music_directoryの設定方法
                  • muisic_directory は
                  • music_directory=dir1[,dir2,...]
                  • のように設定します。
                  • ここでdir1,dir2はmpdで再生したい音楽ファイルが格納されているnas上のディレクトリです。
                  • nas上のディレクトリの指定方法について説明します。
                  • nasは/var/lightMPD/nas/NASIDにマウントされます。
                  • 例えば
                  • [nas:music]
                  • host=nashost1
                  • remotedir=public
                  • で定義されたnasは/var/lightMPD/nas/music にマウントされます。
                  • また、このnasをWindowsのマイネットワークで見ると ¥¥Nashost1¥public となります。
                  • このディレクトリの配下が
                  • のようになっている場合、
                  • 各ディレクトリの正式ディレクトリ名は
                  • になります。(linuxではディレクトリの区切りが'/'になります)
                  • いま、mpdの音楽ファイルが格納されているディレクトリとして
                  • ¥¥Nashost1¥public¥pcm
                  • ¥¥Nashost1¥public¥dsd
                  • を指定したいのですから、music_directoryの指定は
                  • music_directory=/var/lightMPD/nas/music/pcm,/var/lightMPD/nas/music/dsd
                  • となります。
                  • /var/lightMPD/nas は冗長なので省略します。(/var/lightMPD/nas があるとエラーになります)
                  • 従って、music_directoryの指定は
                  • music_directory=music/pcm,music/dsd
                  • になります。
                  • さらに
                  • [nas:audio]
                  • host=avserver
                  • remotedir=avdata
                  • で指定された共有ディレクトリ \\Avserver\avdata\Music もmpd に管理させたいなら music_directoryは
                  • music_directory=music/pcm,music/dsd,audio/Music
                  • になります。
    • playlist_directory
    • mpd.confのplaylist_directoryです。nas上のディレクトリを指定します。
    • 例]
    • playlist_directory=NASID/mpd/playlists
    • db_file
    • mpd.confのdb_fileです。nas上のファイルを指定します。ファイル名は"tag_cache"にして下さい。
    • 例]
    • db_file=NASID/mpd/tag_cache
    • sticker_file
    • mpd.confのsticker_fileです。nas上のファイルを指定します。ファイル名はsticker.sqlにして下さい。
    • 例]
    • sticker_file=NASID/mpd/sticker.sql
    • log_file
    • mpd.confのlog_fileです。nas上のファイルを指定します。
    • logが必要ない場合は/dev/nullを指定します。

httpサーバー - [httpd]

httpサーバーの起動を指定します。

    • enable
    • yesを指定するとhttpサーバーが起動します。それ以外の値を指定した場合はhttpの起動は行われません。

障害時の対応 - [debug]

beagleboneにはIOがないので、エラーがあった場合にその原因を表示する手段がありません。(シリアルコンソールを使えばそれが可能になります。)

lightMPDではシステム初期化後に各種設定ファイルや設定状況を把握するためのコマンドの結果をSDメモリ(lightMPD/status.txt)に記録することで、エラーの原因を突き止める方法をとりました。

通常は[debug]セクションの指定は行いませんが、思うように動作しない時に[debug]セクションを利用して下さい。他人に相談する時にも必要になる情報です。掲示板で問題を報告した場合、この情報の提供を求められる場合があります。

属性値にyesを指定した項目が記録されます。

  • interfaces=yes
  • /etc/network/interfacesを記録します。
    • resolvconf=yes
    • /etc/resolv.confを記録します。
    • ntpd=yes
    • /etc/default/ntpdを記録します。
    • ntpconf=yes
    • /etc/ntp.confを記録します。
    • ifconfig=yes
    • ifconfig -a の実行結果を記録します。
    • cards=yes
    • /proc/asound/cardsを記録します。
    • mounts=yes
    • /proc/mountsを記録します。
    • ps=yes
    • ps コマンドの実行結果を記録します。
    • mpdversion=yes
    • mpd -V の実行結果を記録します。
    • date=yes
    • dateコマンドの実行結果を記録します。
    • ntpq=yes
    • ntpq -p の実行結果を記録します。
    • music=yes
    • ls -lt /var/lib/mpd/Music の結果を表示します。
    • messages=yes
    • 起動直後の/var/log/messagesを記録します。

配布パッケージに入っているlightmpd.confではデバッグ出力がすべてyesになってますが、ちゃんと動作することが確認できたら

デバッグセクションは削除して下さい。デバッグセクションがあると起動時にSDメモリへの書き込み動作が発生あまり気持ちよくありません。(SDメモリの書き込み回数には上限があります)

mpd.confの設定

mpdの設定を行います。mpd.confは行末がCR+LFまたはLFのテキストファイルです。

lightMPDではrootファイルシステムがリードオンリーで外部記憶としてNASしか持たないので、

tag_cache,sticker.sql,playlist 等のデータはNAS 上に置くことを前提としてます。

下記の例はNAS上にmpdというディレクトリを作成しこれらのデータをこのディレクトリに置くように設定してあります。

また、DoPによるDSDの再生に対応しています。

mpd.confの例

realtime_option {

memlock "yes"

stack_reserve "2048"

heap_reserve "10240"

main_priority "OTHER:0"

player_priority "FIFO:53"

decoder_priority "OTHER:0"

update_priority "OTHER:0"

}

audio_output {

type "alsa"

name "uda"

device "hw:0,0" # optional

priority "FIFO:54" # optional

mixer_type "disabled"

dsd_usb "yes"

# use_mmap "yes"

buffer_time "150000"

period_time "37500"

}

###### dsd #######

decoder {

plugin "dsdiff"

enabled "yes"

}

###### decoder selector

decoder_selector {

suffix "mp3"

plugin "mad"

}

decoder_selector {

suffix "m4a"

plugin "ffmpeg"

}

decoder_selector {

suffix "wav"

plugin "audiofile"

scan_plugin "ffmpeg"

}

decoder_selector {

suffix "flac"

plugin "flac"

}

#

music_directory "/var/lib/mpd/Music"

playlist_directory "/var/lib/mpd/playlists"

db_file "/var/lib/mpd/tag_cache"

#sticker_file "/var/lib/mpd/sticker.sql"

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

pid_file "/var/run/mpd.pid"

state_file "/var/lib/mpd/state"

user "root"

group "root"

bind_to_address "any"

port "6600"

#

#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"

metadata_to_use "artist,album,title,track,genre,date,disc"

samplerate_converter "Linear Interpolator"

#samplerate_converter "ZOH Interpolator"

follow_outside_symlinks "yes"

follow_inside_symlinks "yes"

default_permissions "read,add,control,admin"

mixer_type "disabled"

#

audio_buffer_size "8192"

buffer_before_play "50%"

#

filesystem_charset "UTF-8"

id3v1_encoding "UTF-8"

mpd.confの詳細はmpdのドキュメントを参照して下さい。

lightmpd.confの[mpd]セクションで設定を行うためmpd.confは配布パッケージのものを使って下さい。

とくに下記の値は変更しないで下さい。

    • music_directory
    • playlist_directory
    • db_file
    • sticker_file

metadata_to_useはすでにあるtag_cacheを使う場合はそれに併せて設定します。