Moode Audio Playerを使ってみる

Raspberry pi3でデジタルミュージックプレーヤー その9

これまで「ラズベリーパイでプレーヤー」計画において、MPDパッケージはLightMPDVolumio2を使ってきましたが、これ以外にも メジャーどころとして、Rune AudioとかMoode Audioというのもあります。

RuneはArchLinuxベースというところに興味がありますが、Ver.1手前でここしばらく更新停滞気味なようなので、Ver3.1まで進んでいるMoodeを試してみましょう。

しかし、ハードをやればソフトが、ソフトをやればハードが。。と、ラズパイプレーヤーはやることの範囲が広く、いつになったら終わるのかさっぱりわかりませんね。。(苦笑)

MoodeAudio3.1は、LightMPD、Volumio2と同じくRaspbianベースです。

ベースは一緒でも内容はずいぶん違い、
LightMPD:
WebUIなし、カスタムカーネルと最小限のプロセスで徹底軽量化して、音楽ファイルの再生に特化
Volumio2:
WebUIあり(JavaScriptベース)、専用Appあり、設定項目を絞って使いやすさを追求
Moode3.1:
WebUIあり(phpベース)、カスタムカーネル同梱、UIで設定変更可能な項目が多く、出来ることは何でもやるタイプ

と言った感じです。

ラズパイの動作環境としてはphpまで動いているMoodeが一番「重い」イメージがありますが、どうでしょうか。

早速起動ディスクを作り、起動して設定します。

設定にあたり、私の作ったラズパイプレーヤーの構成をおさらいすると、
RaspberryPi3BをHiFiBerryDAC+ProのPCM5122で外部マスタークロックを使ったスレーブモード動作にしてI2Sを出力、
I2SはPCM1794aでデコードし、I/V変換(MUSES8920)、差動バッファ/LPF(LME49724)を経由してバランス出力としています。
更にI2Sを分配してES9023にも供給してアンバランス出力しており、PCM5122の出力も生かしてあるので、都合、バランス1系統、アンバランス2系統の出力があります。(作っといてナンですが、相当な変態仕様。。)

設定上の留意点としては、PCM5122を使ったスレーブモード(外部マスタークロックモード)とすることと、PCM1794を使うのでBCKを64fsにすることです。

MoodeAudioでラズパイをPCM5122利用のスレーブモードにするには、出力デバイスをHiFiBerryCAC+Proに指定してあげればいいですね。
その他、当面使わない機能は外して(OFFにして)おきます。

PCM5122のドライバでBCKを64fsにするにはMPDの出力を24bitか32bitにすればいい(細かいことを言うと17bit以上でいい)ので、リサンプリング設定で24bit/*kHzにしておきましょう。

なお、MPDのサンプリングレートコンバート機能でビット深度を変えることに疑問を持たれる方もいらっしゃるかと思いますが、ここでの設定は、
/etc/mpd.confにaudio_output_format “*:24:*”と記述しているだけで、VolumioやLightMPDでやったことと一緒です。

確かに、audio_output_format ”*:24:*”(サンプリング周波数引き継ぎ、24bit、チャンネル数引き継ぎ)となっているのがわかります。

システム設定では、タイムゾーンを東京にして、ホスト名をデフォルトから少し変えて、スケジューラをFIFOにしています。
ホスト名を変えているのは、複数の起動環境を同じホスト名で作るとSSH接続時にキーが違うと怒られるので、それ防止です。
スケジューラはPi3ならFIFOで十分動くだろうという期待です。
WiFi/BTはノイズの元になるのでOFFにします。
こちらもとりあえず余計な機能は外しておきます。

てな感じで設定して動作チェックしたら、一発で音が出ました。
(ラズパイの扱い慣れてきた?)

続いてアドバンスドカーネルを試してみましょう。
このカスタムカーネルの目玉機能は384kHzサンプリング出力ですが、PCM1794aが192kHzまでなのでアドバンスドカーネルにする必然性はありませんが、ローレイテンシでコンパイルされているとか、fixed 64fs BCLKとか書いてあるので確認してみます。

カーネルをインストールして再起動します。
まずは「fixed bclk 64fs」を確認すべくMPD設定でリサンプリングを設定なしにして16bitファイル(CDリッピングデータ)を再生したんですが、PCM1794aからは音が出ません。
ES9023側は出ていますのでBCKは32fsのままのようです。。
もともとRPi-DAC設定なら64fsでBCKが出ているので、カーネル側というよりドライバ側の問題な気もします。
まあ、MPD設定でどうにでもなりますので、PCM5122(HiFiBerryDAC+Pro)ドライバではこうなるもの。と深追いしないことにして、32bitか24bit出力で使うことにします。

前にも触れましたが、PCM1794aは24bitDACなのに、32bit指定にする理由ですが、いってしまえば気分的なものです。
と言いますか、改めてMPDのドキュメントを読み直したら、まさしく気分的なものでした。(苦笑)

The following values are valid for bits: 8 (signed 8 bit integer samples), 16, 24 (signed 24 bit integer samples padded to 32 bit), 32 (signed 32 bit integer samples), f (32 bit floating point, -1.0 to 1.0), “dsd” means DSD (Direct Stream Digital). For DSD, there are special cases such as “dsd64”, which allows you to omit the sample rate (e.g. dsd512:2 for stereo DSD512, i.e. 22.5792 MHz).

というように、「24bit整数サンプルは32bitにパディングされる」って、「しっかり」但し書きされておりました。
つまり、明示的に32bitにしなくても(24bit指定でも)MPDからは32bitで出力される模様(ドライバで24bitから32bitにパディングされるわけではなさそう)です。

ちなみに、PCM1794aがBCK=64fs固定なため32bitx2chのデータ入力となる(32bitのうち下位8bitは読み飛ばされる)ことと、ラズパイのI2S出力は16bitまでがbck=32fs、17bit~32bitがbck=64fsになることから、MPDの出力が24bitでも32bitでもI2Sの出力データは32bitx2chになるため、24bit/32bitどちらを指定しても24bit以下のファイルでは結果は一緒です。
MPDでソフトウエアボリューム使ったりDSP機能でデータを弄ったりしなければ、下位bitが0埋めされるだけです。

あと、PCM1794aとES9023は24bitDACですがPCM5122は32bitDACなので、何かの手違いで32bitファイルを再生したり、16bitや24bitファイルでソフトウエアボリュームを使った際のビット落ちを防ぐ意味では32bit指定にしておく意味はそれなりにあります。
まあ、16bitファイルをパディング(下位8bitの0埋め)して24bitに拡張しても-48dB(-8bit、1/256)まではビット落ちしないんですけどね。

そうそう。
PCM1794aというDSD非対応なDACを今更喜んで使っているのは、私が「DSDなんざアウトオブ眼中」なためです。44.1kHz/16bitでもまだまだやれることは多いです。
というのは半分カッコツケ。
要はDSDファイル持ってねーし、あんな馬鹿でかいファイルをライブラリ化するのヤダ。ってだけです。(笑)

で、サウンドの方ですが、
スタンダードカーネルでは音量小さ目で聞いていたせいもあり、なんだかパッとしません。
LightMPDのような突き抜ける爽快感はなく、至って「普通」な感じです。
「普通」って「変な部分がない」という事でもあり、これはこれですごく大事なことではありますが。。
アドバンスドカーネルにするとスッキリしてVolumioより私好みに近い感じで、これならUSBメモリーにファイル入れて持ち出し運用も行けそうです。

ちなみに、ラズパイのD-PLLを止めたり、外部クロックを使ったり、クロックを貼り替えたときの音の違いとは異なり、MPD、OSによる音の感じ方の違いを説明できる技術的根拠は持ち合わせていません。(苦笑)
いずれもマスタークロックモジュール、BCK、LRCKを作っているPCM5122は同じモノですし、ラズパイは外部クロックに従ってデータを出力しているだけであり、前回問題となった無線LANも止めてあり、ハード的に見てI2Sの信号内容、品質に違いは起きえないからです。
違うのはデータ出力の前段の処理を行うソフトウエアだけです。

測定では違いが出ない抵抗の違いによる音の違いに近い話で、測定で違いが出ないならどこまで行っても「好き嫌い」レベルの話です。
という事で、話半分でご了承ください。

それはそれとして、今回は別の方向で少し遊んでみます。

上の方で書いたとおり、アドバンスドカーネルはALSAの限界を超える384kHzサンプリングが扱えます。
PCM5122は384kHz対応ですし、ES9023は192kHzまでといいつつ384kHzでも動作するという話もあります。

んじゃPCM1794aは384kHzで動くんだろうか?

リサンプリング設定で32bit/384kHzを指定。

再生してAudioInfoを見ると、確かに32bit/384kHzで出力していると表示されています。(スタンダードカーネルだと384kHz指定してもこの出力表示は192kHzになります。)

この状態で、こともなげに(ノイズや音飛びもなく)PCM1794aから音が出ています。(笑)

この時BCKは384kHzサンプリングで64fsなので24.576MHzになりますが、これHiFiBerryに載っているクロック(MCK)周波数そのものですので、MCK=BCKで動いてるって事ですね。
PCM1794の裏技に、MCKがないときBCKを入れる。というのがあるんですが、スペックの倍のサンプリング周波数でも使えるって、このDACチップはどんなマージン持ってるんでしょう?(笑)
あ。
もちろん384kHzサンプリングもMCK=BCKもPCM1794aの動作保証外ですので、まかり間違って試される方は自己責任でお願いします。
(私も実験以外ではこの値は使っていません。)