Raspberry PiとMediaPlayerを使ってOpenHomeレンダラを作る (前編)

June 16, 2022
オーディオ
Raspberry Pi, OpenHome, MediaPlayer, MPD

音楽再生環境を何とかしたい!

ここ数日、家での音楽再生環境の再構築をやってました。結果として良い環境が仕上がったと思います。せっかくなのでその経緯をここに記します。

今までの構成 #

  • iMac
    • MinimServer (音楽配信DLNAサーバ)
  • Raspberry Pi 4 model B
    • HiFiBerry DAC2 PRO (D/A)
      • ここからライン出力してアンプに渡す
    • moOde audio
      • mpdをWeb UIから良い感じに使えるディストリビューション
      • upmpdcli
        • mpdをDLNA/OpenHomeレンダラとしても使えるようにする(moOdeからはオプションとして有効にできる)
  • MacBook/iOSデバイス/Androidデバイス
    • Lumin AppやBubbleUPnPなどをOpenHomeコントローラとして使う

というような構成でした。基本的にはMPDクライアントを用いる使い方はせず、WebUIも使わず、単にOpenHomeレンダラとして使っていました。

なんか微妙な感じがするます #

そもそも音楽再生用ディストリビューションって #

結局のところVolumioやmoOde audioといったものはmpdの各機能をWebUIから簡単に設定できるようにしているだけのものです。初心者でも難しいことをせずに、SDカードにイメージ焼いて、WebUIから設定すれば簡単に高機能なプレイヤーを構築できて良い感じです。

他に機能面で言うと、mpdの他に様々なソフトウェアを組み合わせることでupmpdcliでDLNA/OpenHomeレンダラとして使ったり、shairport-syncを使ってAirPlayレシーバにしたりできます。

あくまでそのディストリが用意したものだけで完結させることを想定している感じです。 それ故にいくつか辛いことがあります。

何が辛いのか #

たとえば、

  • WebUIの項目にないmpdの設定を変更しようと思って/etc/mpd.confを編集しても、起動時にmoOde側のテンプレートを基に動的生成された設定ファイルによって上書きされる。
    • 編集したい場合は/etc/mpd.confではなくmoOde側が用意したテンプレートを編集する必要がある。
  • moOde側の設定ファイルのテンプレートなどを変更しても、moOdeの更新により上書きされる。
  • moOdeのシステムとの連携の都合があるので、moOdeのソフトウェアアップデート機能ではなくapt-get upgradeして各ソフトウェアを更新するなどしてソフトウェアを変更したような場合、起動しなくなることがある。
  • 同様の理由で一部のソフトウェアを自分で改変してビルドして使うようにすることも困難。

といった辛いポイントがある。辛い。

このようにmoOde側が用意した項目以外に変更を加えるような使い方には向いていないことがわかります。

さらに、VolumioやmoOdeはDLNA/OpenHomeレンダラやAirPlayレシーバとして使うよりも、「Raspberry Pi自体をmpdによって音楽プレイヤーにしよう」という考え方で作られたディストリビューションであるので、mpdはバックエンドにあればよくて、いい感じの選曲用WebUIとか必要なく、「OpenHomeレンダラとして使いたいだけなんだ!」という僕みたいな人には向いてません。

そしてOpenHome/DLNAレンダラ化する際にはupmpdcliにお世話になるので、ここに不満点があると辛いことになります。もちろんmpd自体に不満点があっても辛いことになります。

辛いことになった

ここからはVolumioやmoOdeの問題というより、僕にどのような事情があってmoOdeに手を入れたくなり、辛いことになったかという個人的な問題の話題になります。読み飛ばしてもらっても問題ありません。
個人的に辛かったこと

mpdをOpenHomeレンダラ(DMR)として動作させるため、upmpdcliはLumin Appなどのコントローラ(DMC)とmpdの間をmpdのクライアントとなって中継して、再生する曲のURLや再生制御をmpdに指示したり、再生位置や音量などの情報をDMCに渡したりします。 そうして受けた再生指示で、URLから曲を再生します。

ここで辛いことになった。

このように渡されたURLから音楽を再生すると、mpdではアーティスト名が奇妙なことになります。

再生中の曲情報を表示してみると

$ mpc -f "%artist%"
北宇治高校吹奏楽部, 松田彬人(composer), kensuke ushio
[paused]  #1/1   0:01/6:25 (0%)
volume: 50%   repeat: off   random: off   single: off   consume: on 

のように、artist, composer, album_artistがまとめてartistとして扱われてしまいました。単に音楽を再生するだけであれば大して問題にもなりません。 しかし、僕はmpdで再生している曲の情報を取得してlast.fmにscrobbleするmpdasというソフトウェアを使おうと考えていました。つまりこのままmpdasを使うとアーティスト名に余計な情報を含めたままlast.fmにscrobbleしてしまうのです。(mpdasはmpd向けのソフトウェア)

ここで、これをなんとか解決しようと考えました。まず、Lumin Appから再生中の曲のアーティスト名がどのように表示されているのかを確認しました。ここでは問題はありませんでした。つまり、OpenHomeのレイヤーでは問題はないということです。upmpdcliとmpdのどちらかかその両方に問題があるということになります。そして、その原因を調べて修正しようと考えました。

しかし、ここで力尽きました。先に述べたようにmoOdeの環境で各ソフトウェアを改変するのは辛いです。

結局、OpenHomeでしか使わないのにmpdのレイヤーで色々と試行錯誤するのは微妙な感じがした(正直upmpdcliがよくわからんかった)ので、もういっそのことmoOdeを使うことをやめ、OpenHomeレンダラとして使うことに重きを置いた環境を構築しようと考えました。

良さげなMediaPlayerの発見 #

そして色々と漁っていたところMediaPlayerというソフトウェアを発見しました。これは"MediaPlayer - Java Based Open Home UPnP Media Renderer"ということでどうやらこれが求めていたものに近そうです。ディストリビューションではないので、Raspberry Pi OS(旧raspbian)などの上に追加でインストールしていきます。

このMediaPlayerは音楽の再生部にmpdかmplayerのどちらかを選んでOpenHomeレンダラとして扱えるようにするようです。さらにプラグインにも対応しており、OpenHomeのレイヤーで情報を取得することができそうです。(この中にはlast.fmのscrobblerもありました。)

せっかくmplayerというmpd以外の選択肢もあるのですが、mpdの方が細かい設定が出来そう(今までの知見が活かせる)ので結局mpdをバックエンドに使うことになりました。(mpd使うならあんまり変わってないじゃないか!とは思いますが)
ただ、moOdeやVolumioというように単独の音楽プレイヤー化を目指したものではなく、余計なもの(OpenHomeレンダラに必要ないもの)が含まれていないので扱いやすそうです。これまでダラダラと書いてきましたが、結局mpdのフロントエンドをOpenHomeレンダラとして使うことに特化したものに置き換えるというだけの話になります。

という訳で、MediaPlayerを採用することにしました。ここからの環境構築のお話は後編に続きます。