
タイトル画像はAIで生成したApple Computer新社屋。確かこんな感じだったよね。宇宙船って言ってたし。
初めて買ったコンピュータはMacでした。
PCといえばMS-DOSの当時、Appleの演出する「エクスペリエンス」は、それはそれは圧倒的で。同期の皆がクルマやらバイクやら手に入れる中、それと同じくらいのローン組みました。その頃のマックは高嶺の花で、まだPCでは扱えなかった日本語アウトラインフォントをHDDに内蔵(!)したレーザープリンタが3桁まんえんでしたから。
でも、ひととおり使ううちに
「お客様は機械のことなど気にしなくて結構ですよ(シロートさんはこっち来ないでね)」
な雰囲気を感じるようになり。
製品全体で統一された思想、それを支える高い技術には魅了される一方で、コンピュータそのものが目的のオタクにとっては手の内を明かさない感じが気に入らなかったんですね。以来インテルPCに改宗しました。
それからン10年。Roon ARCはAppleの製品ではなくAndroidでも普通に使えるのですが、細かい部分ではiOS版の方が完成度が高いのがあちこちに伺えます。仕方なく入手したiPhoneを触っているとAirPlayは使い勝手が良いけど謎な部分も多く、Apple変わってないなぁと思ったのでした。
あ、Roon Labs.もちょっと似たとこありますよね。願わくばAppleのように長寿と繁栄を(Lifetimeユーザーなので)。
オープンソースなShairport Syncの助けを借りてAirPlayを高音質に使えるようにしたのが
前回。

こんな構成で車載運用を始めています。
ラズパイZeroは低消費電力なので定格出力5V/1.1Aのリニア電源で動作しました。USBオーディオを使う場合でも、アイソレータを入れてもなお電源のクリーン化は音質に効きます。
車載ネットワークオーディオの時から目指していた(けど見つからなかった)、
「サンプルレート変換やDSD/PCM変換はソフトウェア演算で高精度に」
「USBホストは省電力PCをリニア電源で駆動」
のシステムが思っていたのとは違う形で実現しました。
が、ビットパーフェクトは実現できたのか?確かめたくなり

こんな検証系を用意して実験してみました。
オーディオインターフェースを使い、DDCのデジタル出力をPCで録音して元のファイルと比較します。これで一致すれば文句ないでしょ。
ラズパイはクルマに持って行ってしまったのでもう一個買おうにも、Zero2Wあたりは需給状況未だ改善されず、家に転がっていた
NanoPi R4S
にインストールし問題なく動作しました。(ただしoverlayrootは手順が異なるようで未使用)
この機種の場合、
・Wi-Fiは無く有線接続となります。2つあるLANポートのうちWAN側をルーターにつなぎます。
・HDMIも無く最初からリモートコンソールでの操作が必要です。IPアドレスはスマホアプリのFingなどで調べ、SSHを開いた後は同じ手順でいけます。
OSはDietPi(公式サイトにR4S用があります)、Shairport Syncのインストール方法も前回と同じ。設定ファイルは以下のようにしました。
general =
{
name = "Shairport Sync(NanoPi)";
interpolation = "basic";
output_backend = "alsa";
alac_decoder = "apple";
ignore_volume_control = "yes";
};
alsa =
{
output_device = "hw:1,0";
output_rate = 44100;
output_format = "S24_3LE";
disable_synchronization = "yes";
disable_standby_mode = "auto";
};
ボリューム、サンプリングレート変換、同期(とそれに伴うリサンプル)といったデータ変更につながる動作を全て無効化しています。
レートを44.1kHzに固定しているのはAirPlay(AirPlay 1)の仕様からです。ビットパーフェクトが期待できるのはCDフォーマットのみで、ハイレゾはiPhoneからの出力の時点でダウンコンバートされているのでShairport Syncで高レートにしても元通りにはなりません。
わからなかったのがビット深度で、とりあえず24bitで来ても対応できるようにしました。結果は後ほど。なおこの設定はデバイス依存のため前回のブログをご覧ください。
追加でRoon Bridgeもインストールし、RoonのネイティブプロトコルであるRAATと比較します。Linux用の手順は
こちら。ハードウェアに合わせて「The Easy Installer」にあるコマンド3行だけ入力すれば完了です。
Roon BridgeとShairport Syncは競合することもなく、アプリで使い分けできます。Roonリモートで再生すればコアからRAATで、Roon ARCならiPhoneからAirPlayにより伝送されます。この組み合わせはRoonもそれ以外も同じUSBオーディオで音が出せホーム用におススメです。
まずは検証系のチェックを兼ねてRAATで再生してみます。

Roonリモートの再生画面。シグナルパス表示ではこの通りロスレスとなっています。
Sound Forgeで録音したwavファイルと、元のflacをデコードしたwavファイルを比較します。
比較アプリには
DeltaWaveを使いました。ファイル間で異なる先頭の無音時間などは自動補正した上で、様々な手法で比較してくれます。

一番下、ビットパーフェクトと表示されています。さすがというか当然ながら、同軸や光デジタル信号にまでなってからの比較一致には「おおっ」となりますね。
続いてRoon ARC。

ARCのシグナルパス表示ではロスレスから一段階落ちたHigh Qualityとなりますが、実際はどうでしょうか。

無事ビットパーフェクト、精神の安寧が得られました。
調子に乗って24bit/44.1kHzのファイルも試してみました。

Roon ARCからAirPlayに対しては24bitのまま渡しているようです。

こちらは一致しませんでした。残念。なおRAATでは一致を確認しています。
24bit比較では一致率ほぼゼロ、16bit比較で50%一致、ということはAirPlay内で24→16の丸め処理が行われていると見ればよいのでしょうか。
AirPlayの対応が16bitなら、Shairport Syncの出力フォーマットも16bitで良かったですね。CPUの負荷も減りますし。
ということで、最終設定はこうなりました。
general =
{
name = "Shairport Sync(NanoPi)";
interpolation = "basic";
output_backend = "alsa";
alac_decoder = "apple";
ignore_volume_control = "yes";
};
alsa =
{
output_device = "hw:1,0";
output_rate = 44100;
output_format = "S16";
disable_synchronization = "yes";
disable_standby_mode = "auto";
};
以上で実験終了です。Shairport Syncを適切に設定すれば、AirPlayでもCDクオリティのビットパーフェクト再生が可能であることが確認できました。
DLNAやRAATがハイレゾまで無劣化伝送できるのに比べたらまだまだですし、Direttaなどはビットパーフェクトなんて当たり前、その上でデータの送り方を工夫することで伝送によるアナログ的な電源変動を減らすといった(一般の人にはワケワカラン?)次元で勝負しているわけですが、AirPlayもピュアなオーディオの末席に加えられるだけのポテンシャルはあると思います。それで使い勝手は言わずもがなですから、これは強い。
ただし下手すればビットパーフェクトどころかロスレスでもないAAC伝送になってしまうのは注意です。そーゆーとこやぞAppleさん!