2014/03/18

Raspberry Piで作るミュージック(MPD)サーバ

Raspberry Piでスマホ(Android)から操作できるミュージックサーバを作りましたので、手順をまとめます。


なお、Raspberry Piの設定はさまざまなサイトやブログで紹介されているので端折ります。
ちなみにRaspberry PiはTypeBで、OSはNOOBSからRaspbianをインストールしています。

今回構築したシステムの構成図はこんな感じです。


ポイント
・Windows用のNAS I-O DATA NAS HDL-A2.0/EをMP3ファイル置き場とする
・有線ルータにELECOMのホテル用無線LANルータ WRH-300BKを繋げて一部無線LAN可
・AndroidからRaspberry PiにアクセスしてMPDを操作
・Raspberry Piからの出力はONKYO USBデジタルワイヤレスシステム UWL-1(S)を使い、そこからアンプ&スピーカーに接続




■構築手順

MPDのインストールと設定

1.インストール
 sudo apt-get install mpd mpc


2.MPDの起動
 sudo service mpd start


3.設定ファイルの編集
 sudo vi /etc/mpd.conf

    auto_update   "yes"  # プレイリストの自動更新(#を外す)
    mixer_type   "software"  # クライアントからの音量調整機能(#を外す)

 ※MPD起動時に下記のようなエラーが出た場合は、
[....] Starting Music Player Daemon: mpdlisten: bind to '[::1]:6600' failed: Failed to create socket:  Address family not supported by protocol (continuing anyway, because binding to '12

 bind_to_addressの行をコメントアウトすれば解決します。
 sudo vi /etc/mpd.conf

    #bind_to_address  "localhost"  # コメントアウト


4.MPD再起動
 sudo /etc/init.d/mpd restart



NASのマウント

今回はNFSに対応していないWindows用のNASにMP3ファイルを置きます。
なので、CIFSでマウントします。

1.cifs-utilsのインストール
 sudo apt-get install cifs-utils


2.マウント用ディレクトリ作成
 sudo mkdir /mnt/mp3
 sudo chmod 777 /mnt/mp3


3.自動マウント設定

 NASのIPが192.168.0.3で、contentsディレクトリに共有設定をしてます。
 id

 ⇒uidとgidを確認(今回は共に"1000")

 sudo vi /etc/fstab

  # 最後の行に以下を追記(1行で)
//192.168.0.3/contents /mnt/mp3 cifs username=****,password=****,iocharset=utf8,rw,uid=1000,gid=1000,defaults 0 0

 再起動
 sudo reboot

 マウントされているか確認
 df

Filesystem              1K-blocks      Used  Available Use% Mounted on
//192.168.0.3/contents 1949058076 188937176 1760120900  10% /mnt/mp3

 実際にディレクトリに移動してファイルがあるか確認
 今回はNASの/contents/MUSICに音楽ファイルがあります。
 cd /mnt/mp3
 ls -l

drwxrwxrwx 552 pi pi 0 Mar 16 23:34 MUSIC


4.mpdのmusic_directoryにシンボリックリンクを作成

 mpdが音楽ファイルを読み込むディレクトリはデフォルトで"/var/lib/mpd/music"です。
 /etc/mpd.confで変更可能ですが、今回は変更せずNASをマウントしたディレクトリにシンボリックリンクを貼ります。
 cd /var/lib/mpd/music
 sudo ln -s /mnt/mp3/music/

 ※パーミッションエラーが起こったらchmod 755しましょう。


出力の設定

今回はUSBデジタルワイヤレスシステムを使っているので、出力をUSBデバイスに設定します。

1.出力設定の確認
 cat /proc/asound/cards

 0 [ALSA    ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
                   bcm2835 ALSA

 1 [Set       ]: USB-Audio - C-Media USB Headphone Set
                   C-Media USB Headphone Set at usb-bcm2708_usb-1.3.1, full speed
これだとUSBデバイスが2番目に設定されているので、音が出ません。


2.出力設定の変更
 sudo vi /etc/modprobe.d/alsa-base.conf

 options snd-usb-audio index=-2
 ↓
 options snd-usb-audio index=0    # 0に変更

 再起動
 sudo reboot

 順番が入れ替わっていることを確認
 cat /proc/asound/cards

 0 [Set       ]: USB-Audio - C-Media USB Headphone Set
                   C-Media USB Headphone Set at usb-bcm2708_usb-1.3.1, full speed

 1 [ALSA    ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
                   bcm2835 ALSA

 では音が出るか確認しましょう。


3.音量設定

 alsamixerコマンドで音量設定
 ※CardがUSBデバイスになっているか確認


4.再生

 まずmpc ls [マウント先ディレクトリ] で音楽ファイルが表示されることを確認
 もし表示されなかったらmpc updateを実行
 mpc ls MUSIC

 次にプレイリストに追加
 mpc ls MUSIC | mpc add

 プレイリストを確認
 mpc playlist

 再生
 mpc play

 先頭の曲が再生されます

 ※この時 /var/log/syslog を tail -f で監視してください。
  再生中に大量のログが出ていたら、以下の対応をして再起動します。
 sudo vi /etc/modprobe.d/alsa-base.conf

 options snd-usb-audio nrpacks=1  # 追記


これでサーバ側の設定は終わりです。


Androidから制御
 
 今回はMPDroidという無料アプリを使いました。
 また、前提としてAndroidはRaspberry Piと同じLAN内に接続してください。

1.接続設定

 インストール後起動すると、Settings画面になります。
 Connection settings ⇒ Default connection settings ⇒ Host でRaspberry PiのIPを指定します。
 



2.操作

 これでもう操作できるはずです。







以上です。



☆実際使い始めた感想☆

家のどこにいても操作できるので便利です。
音質も悪くないですし、音飛びも滅多にしません。

ただしスマホが手元にない時は、わざわざ取りに行くか、
いちいちPCからSSHで接続して操作しなければいけないので、
ちょろっと操作したいときは若干面倒です。

というわけで、次は物理スイッチを接続して、
スイッチからも操作できるようにしようと思います。


今回の構築で参考にした本、サイト、ブログ
Raspberry Piで遊ぼう! 改訂第2版
Raspberry PiをMPD(Music Player Daemon)サーバにする
Music Player Daemon (MPD) を使ってみる
Raspberry Pi で格安ミュージックサーバを作る~その2~

0 件のコメント:

コメントを投稿