うしこlog
公開: 2016/01/04

MPDでラズパイ2を音楽プレーヤサーバにする

今回の内容

 MPD(MusicPlayerDaemon)を使用してラズベリーパイ2を音楽プレーヤサーバとして利用する方法について説明します。音楽プレーヤデーモンMPDと、MPDをnode.jsで使用できるクライアントmpdjsを使用することで、スマートフォン等のブラウザからラズパイに保存された音楽を再生/停止することができます。

MPDとmpdjsを用いた音楽再生サーバ
MPDとmpdjsを用いた音楽プレーヤサーバ

前回までの内容は?

 前回までで、ラズパイを使うための設定(OSのインストール,SSH等)をして、エアコンの操作や、Juliusによる音声認識、Apacheやnode.jsでのサーバの構築、iPhoneからのvpn接続をラズパイ上で行ってきました。
前回までの内容が気になる方や、ラズベリーパイをもっと活用したい方 は、ぜひ以下の記事をご確認ください。

MPDとmpdjs

 MPD(MusicPlayerDaemon)はLinux上で音楽再生やプレイリスト管理をするためのソフトウェアです。MPDを使用して音楽再生やプレイリスト管理をするにはMPDクライアントが必要となります。今回はMPDクライアントとして「mpdjs」というnode.jsサーバからMPDを使用することができるMPDクライアントを使用します。しかしmpdjsでは、MPDのプレイリスト作成等の操作ができないので、MPDクライアントのMPCも使用します。

[追記]mpdjsでプレイリスト等の操作ができましたので、MPCをインストールする必要はありません!!

※node.jsについては、ラズパイを使用の方はNode.jsでラズパイをWebサーバにするの記事を、ラズパイ2を使用の方はNode.jsでラズパイ2をWebサーバにするの記事をご覧ください。

MPDのインストール

 以下のコマンドを実行しラズパイにMPDをインストールします。

sudo apt-get install mpd
MPDのインストール
MPDのインストール

 インストール後、MPDの設定ファイルを編集します。設定ファイルの場所は「/etc/mpd.conf」にあります。ここではvimを使用して設定ファイルを書き換えます。

sudo vim /etc/mpd.conf

「bind_to_address "localhost"」と書かれた行の最初に「#」を入れてコメントアウトし、次の行に「bind_to_address "0.0.0.0"」を追記します。 MPDではIPv6でIPアドレスを解釈するため、IPv4であることを明示します。

# For network
#bind_to_address    "localhost"
bind_to_address     "0.0.0.0"

bind_to_addressの近くに「#port "6600"」と書かれた行があるので、「#」を外してこの行を有効にします。これによりMPDで使用するポートは「6600」となります。

port    "6600"
IPv4の明示とポート指定
IPv4の明示とポート指定

「#auto_update "yes"」と書かれた行があるので、「#」を外してこの行を有効にします。これにより、音楽ディレクトリ内(/var/lib/mpd/music)のファイルが変わったときにMPDデータベースが自動的に更新されます。

auto_update "yes"
自動更新の有効化
自動更新の有効化

167行目あたりにある「#password "password@read,..."」と書かれた行があるので、「#」を外してこの行を有効にします。これでパスワード要求が有効になります。

password "password@read,add,control,admin"
パスワードの有効化
パスワードの有効化

329行目あたりにある「#mixer_type "software"」と書かれた行があるので、「#」を外してこの行を有効にします。これによりソフトウェア(MPDクライアント)による音量調節ができるようになります。

mixer_type "software"
ソフトウェアによる音量調節の有効化
ソフトウェアによる音量調節の有効化

 mpd.confの編集が終わったら、MPDの音楽ディレクトリ(ここでは/var/lib/mpd/music)内の所有者をmpdに変更します。

sudo chown mpd -R /var/lib/mpd/music

 以下のコマンドよりMPDを再起動させます。

sudo /etc/init.d/mpd restart

MPCのインストール

 以下のコマンドを実行しラズパイに、MPDのクライアントであるMPCをインストールします。MPCは、音楽データベースの更新やプレイリスト作成等のために使用します。曲の再生や停止等については後述のmpdjsを使用します。

[追記]mpdjsでプレイリスト作成等の操作ができましたので、MPCをインストールする必要はありません!そのため、MPCの使い方に興味がない方はこの説明は読み飛ばしてください。

 以下のコマンドよりMPCをインストールします。インストールはこれだけです。

sudo apt-get install mpc

 MPCでは以下の事ができますが、ここでは紹介だけしておきます。

mpc update          // 音楽データベースの更新
mpc listall         // すべてのファイルを確認
mpc ls              // プレイリストの一覧を確認
mpc add             // プレイリストへの追加
mpc ls | mpc add    // すべてのファイルをプレイリストに追加
mpc play            // プレイリストを再生する
mpc stop            // 再生の停止
mpc next            // 次の曲を再生する
mpc current         // 現在再生している曲を表示する

 今回はMPDのパスワードを有効にしたので、mpcコマンドの後には「--host password@localhost」を加えて実行する必要があります。 以下の例は、データベースの更新をする場合のコマンドです。

例) データベースの更新
mpc --host password@localhost update

ラズパイのオーディオ等の設定

 MPDで音楽を再生するに当たってのラズパイでのオーディオやポートの設定をします。

オーディオ使用時のログ出力の停止

 オーディオを使用しているときに/var/log/syslogにログが大量に出力されて、音がブツッブツッと途切れるらしいのでログを停止します。

以下の設定ファイルを開いてファイルを編集します。

sudo vim /etc/modprobe.d/alsa-base.conf

以下を追記することでログを停止します。ファイルの最後に追記しましょう。

options snd-usb-audio nrpacks=1

アナログ出力を優先

 ラズパイのヘッドフォン端子から音が出なかったので、amixerコマンドでアナログ出力を優先にします。

numid=3の後の右の数字は、優先にするオーディオ出力の種類を表しており「0:自動判別、1:ヘッドフォン、2:HDMI」となります。
ここでは、ヘッドフォン端子からの出力を優先にするため"1"を指定します。

amixer cset numid=3 1

アナログ出力の歪み対策

 ラズパイ2のヘッドフォン端子のから出力される音がなぜか歪んでしまう(旧ラズパイでは検証していない)。調べてみると、同じような症状で悩んでいる人がいるようです。blog.mouten.infoさんでは、amixerで音量を下げれば下げる程、ヘッドフォン出力の音が歪む問題と、その対処法を挙げていたので参考にさせて頂きます。

音の歪み問題は音量を最大にすると直ります。そのためamixerで音量を最大にします。

amixer set PCM 100%

この解決法によってラズパイでは音量調節はできなくなりましたがMPDのクライアントで音量を調節できますので、これで問題ありませんね(なお音の検証はしていない)。 一番いいのは、ヘッドフォンの出力をアンプの入力に繋いで、アンプ側で音量調節をするのがいいと思います。

6600ポートの解放

 MPDでは、先ほどのMPDのインストールで設定したTCPポート(ここでは6600)を使用するため、このポートを開けておきます。

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 6600 -j ACCEPT

上記設定の終わりに

 設定が終わったらラズパイを再起動させます。

sudo reboot

mpdjsのインストール

 MPDのクライアントの1つであるmpdjsをインストールしていきます。mpdjsはnode.jsで使用するMPDクライアントなので、node.jsが必要となります。 node.jsはサーバ側のプログラム言語です。node.jsのインストールや使用方法についてはNode.jsでラズパイ2をWebサーバにするをご覧ください。10分くらいあればサーバを構築できると思います。

 ではmpdjsをインストールします。まず、格納するためのディレクトリを作成します。ここではAudioServerとします。その後、ディレクトリ内に移動します。  

mkdir AudioServer
cd AudioServer

 以下のコマンドを実行して、mpdjsをインストールします。  

npm install mpdjs

使用方法

  1. MPDで再生したい曲を"/var/lib/mpd/music/"に配置します。
  2. mpdjsを起動させます。

    先ほどのmpdjsのインストールで作成したディレクトリ(ここではAudioServer)に移動後、mpdjsを起動させます。 実行コマンドのフォーマットと、実行例は以下の通りです。"MPD hostname"には、ラズパイのIPアドレスを指定します。

    フォーマット:
    node node_modules/mpdjs [http port] [MPD hostname] [MPD port] [javascript compression] [MPD password]
    
    実行例:
    node node_modules/mpdjs 8081 192.168.11.2 6600 false password
    
    mpdjsの実行
    mpdjsの実行
  3. PCやtablet、スマホ等のブラウザから以下のようにアクセスします。
    フォーマット:
    http://[host]:[http port]/mpd.html
    
    アクセス例:
    http://192.168.11.2:8081/mpd.html
    
    mpdjsのホーム画面
    mpdjsのホーム画面
  4. 左上のメニューマークを押して、中央に出てくる「Artists」を選択します。
    メニュを開いてArtistsを選択
    メニュを開いてArtistsを選択
  5. アーティスト一覧からアーティストを選択します。
    ききたいアーティストを選択
    ききたいアーティストを選択
  6. アルバム一覧からアルバムを選択します。
    ききたいアルバムを選択
    ききたいアルバムを選択
  7. 「Add All」ボタンを押して、プレイリストに追加します。
    プレイリストに追加
    プレイリストに追加
  8. 左下から音楽を操作できますので、Playを選択して再生します。
    mpdjsでの音楽操作
    mpdjsでの音楽操作
  9. あとは、好きな音楽をブラウザで操作してラズパイが奏でる音楽を楽しみましょう。

<< VPNでiPhoneからラズパイに接続する ラズパイから操作できる照明を自作しようへ >>

参考にしたサイトさん

大変参考になりました。ありがとうございます。