
前回見つけたHQPlayer。難解な設定画面、情報は海外のフォーラムのみ、価格それなり…と敷居の高いアプリですが面白い使い方ができるので紹介します。
やりたかったのは「ラズパイで簡単にDSP!」だったのに、結果的にはかなり複雑なシステムになってしまいました…パフォーマンスは納得できるものです。
HQPlayerとは
HQPlayerは信号処理特化型のPC用再生アプリで、CPUもGPUもブン回してリッチなアルゴリズムの演算をゴリゴリ実行するマニア向け兵器?です。
その本質はアップサンプリングのフィルター処理にあり、
全てのソースを超高レートのDSDに変換することによりDAC内部のフィルター処理を回避、高精度なソフトウェア演算で置換して高音質を目指す
どうですか、「カクカクな波形を細かくする」みたいな子供騙しの説明よりご利益があるように聞こえません?マニアは勝手に曲解して納得してくれるので却って御しやすい、とはかの長岡鉄男先生のお言葉。曲解かどうかはご自身で判断をw
多くの高音質再生アプリがビットパーフェクトにこだわり、ノイズを減らすために処理を省く方向で工夫しているのとは対照的なコンセプトのアプリです。これのためにGeForceを買う人がいるという…知らない世界があった。
GUI付きのDesktop版と、ヘッドレスで使うEmbedded版があります。Windows・MacOS・Linuxに対応。単体利用の他、AudirvānaやRoonの再生エンジンにしたり、UPnP対応アプリ(mconnect Player・BubbleUPnPなど)から音源を流し込むことも可能です。
ラズパイでも(一応)動作可能なEmbedded版はDesktop版よりCPUの負荷が軽く、安定性や音質で期待できます。
ライセンス制で、未購入の場合はお試しモードとして連続30分だけ使用できます。
でもDSPのあるカーオーディオではDSDを受けられずDACの動作周波数もAKだろうがESSだろうが192kHzあたりで頭打ち。HQPlayerの魅力は半分も活かされないような気もします…
今回のテーマ
HQPlayerの公式サイトを眺めていると、こんな説明が。
そう、HQPlayerはローカルファイルやストリーミングの再生だけではないんです。
最初の2つはオーディオインターフェースの機種名で、これにアナログやS/PDIF信号を入力、接続したPC上のHQPlayerで信号処理を施すというもの。
注目は3つ目で、USBのデバイス(ここではDAC)をエミュレートすることによりUSBオーディオ信号を「入力」できることを意味しています。つまり、USB in/USB outのDSPとしてアップコンバートや音響補正をかけることができると。
これは楽しい、超楽しい。
「デバイスモードのUSBポート」があるハードウェアはラズパイでは4以上およびZEROシリーズで、HQPlayerが動くスペックとなると4か5に限られます。インテルCPUではAAEONのUPシリーズに対応機がありますがディスコン。使いでのある機能なのでもう少し流行っても良いのでは。
いずれのCPUでも非同期のUSBオーディオを入出力2本同時処理するのは難しいようで、入力と出力のハードウェアを分ける分散構成が推奨されています。

公式サイトにある説明図。これは出力部を分離した構成です。
演算能力の要求されるHQPlayerにPC、USB出力を行うNAA(ネットワークオーディオアダプター)には低消費電力のSBCを使いローノイズ動作させるという、オーディオ的にそそられるシステムです。NAAのアプリはHQPlayerの公式サイトで無償配布されています。
このNAAを入力アダプターとして使うのが今回の構成。2台のラズパイを入力専用(NAA)と演算・出力用(HQPlayer)に割り当てます。究極は入力/演算/出力の3台構成か。

モニターやキーボードは初期設定が終われば取り外せます。
HQPlayerの真骨頂である高レートDSDへの変換を行うならラズパイでは力不足で、浮動小数点演算の性能が高いインテル系CPUとかCUDA対応GPUを使いたいところ。自分の車載DSPにはPCM96kHzで十分なのでラズパイで組んでみます。
使用ハードウェア
Raspberry Pi 5 4GB
Raspberry Pi 4 Model B 4GB
HQPlayerにはラズパイ5、NAAにはラズパイ4を使いました。デバイスモードの動作は5より4の方が安定しているらしい。
ラズパイ5は「5V/5A」という最大消費電流が気になりますが実際に使ってみるとそこまで大食いでもなく、ケースを選べばファンレス運用も可能です。
HQPlayer OSのRAMは4GB以上推奨で、OSを自分で設定して他の再生アプリと同居させたりするなら更に必要です。一方NAAは2GBで良いそうです。
電源分岐アダプター
ラズパイでデバイスモードになるUSBポートは普段ACアダプターを接続するUSB-Cです。ここにスマホやPCをつなぐと電流が足りず起動できないため対策が必要です。電流容量の大きなUSBハブを挟んだり、自分が入手したのは
Type-C Power And Signal Splitter(Waveshare)
NAAとして使うラズパイ4のUSB-Cポートにこれを挟みます。他にもケーブルタイプなどありお好みで。
(電流を吸わないはずの「PC」ポートにカメラアダプター経由でiPhoneを接続するとなぜか電力不足のエラーが出てしまい、さらにUSBハブを挟む必要がありました。)
モバイルルーターまたはイーサネットコンバーター
車載ではスマホとラズパイのネットワーク接続をどうするかが課題となります。HQPlayer OSではWi-Fiは公式サポート外のため、

モバイルルーター(クレードルにLAN端子のあるもの)などを使用します。ただ車載で使える2.4GHz帯でハイレゾを安定再生するのは難易度が高く、ラズパイ同士は有線LANで接続します。
LAN-GIGAC302BK(サンワサプライ)
WI-UG-AC866(バッファロー)
自分はCarPlayと併用させたいので、ルーターの代わりにイーサネットコンバーターを使いました。
スマホのUSB端子はオーディオ出力用
→ディスプレイオーディオとはワイヤレス接続
→ワイヤレスCarPlayはDAがアクセスポイントとなりルーターが使えない
→スマホのテザリングを使用
→イーサネットコンバーターでラズパイと接続
という理屈。コンバーターのLAN端子からハブ経由で2台のラズパイに接続します。ただしこの場合Wi-Fi側にMACアドレスを透過させられないためスマホからのUPnPは通りません。
ワイヤレスCarPlay使用時にWi-Fiを利用できるかどうかは環境(DAとスマホ)依存で、自分のDA7ZとiPnoneでは2.4GHz帯でテザリングできました。5.2GHz帯のテザリングは屋外(車内も屋外扱い)では法令違反となり、合法的にこの使い方ができるDAはアルパインだけかも。
CarPlayでUSBオーディオ
NAAのインストール
NAAから作成してゆきます。OS込みのイメージと、好みのOSにインストールするためのパッケージがあります。今回は簡単に使えることを示したいのでイメージの方をインストールし、設定もSSHコンソールとかLinuxのコマンド操作は極力避けてやってみます。

PCのブラウザで
HQPlayerの公式サイトを開き、イメージをダウンロード。
ダウンロードした拡張子7zのファイルからimgファイルを取り出し、microSDカードに書き込んで起動用ディスクを作成します。imgファイルのサイズは3GBほどだったので、microSDカードは4GBあれば十分。といっても今どき4GBなんて産業用の高耐久性モデルでも見かけなくなりました。大き過ぎても問題がありSDHC規格の32GB以下が無難です。

書き込みアプリはRaspberry Pi Imagerが簡単です。
USBデバイスモードの有効化
NAAとして使うラズパイ4のUSB-Cポートをデバイスモードに設定します。この作業はキーボードとモニターを接続した「ローカルコンソール」で行います。

書き込んだカードをラズパイにセット、ケーブル類を接続します。ラズパイ4と5の電源はUSB-C、HDMIはmicroタイプで同じです。
ここではモニターの代わりに、PCにUSB接続するHDMIキャプチャーボード(右上、2,000円くらいで購入可能)を使いました。

管理者rootでログイン(初期パスワード無し)。表示されるアダプター名を覚えておきます。
テキストエディタnanoで設定ファイルconfig.txtを編集します。
# nano /boot/config.txt
USB-Cポートがホストモードに設定されているのを
dtoverlay=dwc2,dr_mode=host
#dtoverlay=dwc2,dr_mode=peripheral
1行目の頭に#を付けてコメントアウト、2行目の#を削除して有効化するとデバイスモードになります。
#dtoverlay=dwc2,dr_mode=host
dtoverlay=dwc2,dr_mode=peripheral

Ctrl-O、ENTERで上書き保存、Ctrl-Xで終了
再起動
# reboot
以上。NAAにはHQPlayerのようなWebブラウザによる設定はなく、全てHQPlayer側からコントロールできます。優れた設計です。
HQPlayer OSのインストール
続いてHQPlayer。こちらもイメージ版とパッケージ版がありイメージの方をインストールします。OSの設定はもちろん電源ブチ切りでファイルシステムが破損しないような対策も含まれており楽ちんです。
HQPlayerの公式サイトからイメージをダウンロード。展開してimgファイルを取り出します。

Raspberry Pi Imagerで4GB以上のmicroSDカードに書き込みます。完了したらカードをラズパイに挿して起動。ネットワークにも接続しておきます。
初期設定
ここから先はネットワーク経由での操作になります。
最初にラズパイ(HQPlayerをインストールした5の方)に割り当てられたIPアドレスを確認します。FingやWiFimanのようなアプリが便利です。

Fingはこんな風に情報量が多く探しやすいのですが有料。WiFimanは無料の代わりにIPアドレス位しか表示されないので、ラズパイ起動前後のアドレスを見比べて増えたものを探します。

ネットワーク上のPCでWebブラウザを開き、ラズパイのIPアドレス:8088にアクセスすると設定画面が現れます。

最初にログを確認。HQPlayerとNAAが正しくネットワーク接続されていれば、NAAを発見したことが記録されているはずです。

キーボードとモニターをHQPlayerのラズパイ5につなぎ変えてローカルコンソールを開きます。表示されなかったらWebUIから再起動。
rootでログイン。設定ファイル hqplayerd.xml を編集します。
# nano /etc/hqplayer/hqplayled.xml
確認したNAAの名前でエントリーを1行追加します。
<input address="naa-xxxxxxxx" device="USB Audio (RPi4)" name="NAA-USB-In" type="network"/>
(<>は半角に変えてください)

Ctrl-O、ENTERで上書き保存、Ctrl-Xで終了
再起動
# reboot

ブラウザでの設定に戻ります。
信号処理で必須の設定は「Configuration」画面にまとめられています。出力フォーマットをPCM、サンプリング周波数の上限を96kHzとします。それでもラズパイでは全てのアルゴリズムを動作させることはできず、負荷の軽いものを選ぶ必要があります。再生画面に表示される処理レートが2倍を下回るようだと不安定になります。
アルゴリズムについては
こことか
こことか
ここが詳しく参考にさせてもらっています。ありがとうございます!

「Speakers」画面。タイムアライメントを設定可能。
前回のブログの通り、HQPlayerはFIR演算による音響補正に対応しています。インパルス応答ファイルを指定する画面は2つあり、

「Convolution」画面と

「Matrix」画面。
通常は「Convolution」、チャンネルマッピングを変更する場合は「Matrix」のどちらか一方を使用せよとなっていますが、Convolutionは出力ステージ、Matrixは入力ステージでの処理となり動作周波数に違いがあります。以前作成した位相補正用のIRファイルを設定しました。
DSPの位相回転をFIRフィルターで補正してみる
USB再生設定
このシステム最大の難点かも。USB入力の開始を起動時に毎回操作する必要があります。このためだけにネットワーク接続とブラウザ…

「Input」画面で、追加したエントリー名を選択

「Select」するとメイン画面に戻り再生中状態となります。この状態で上流の機器で再生開始すると音が出ます。
USBホスト側にLinuxマシンを接続しUSBオーディオデバイスとしての仕様を確認しました。

32bit/384kHzまで対応しており入力側としては十分なスペックです。DoP形式によるDSD入力にも対応。
スマホ側の設定
設定らしいことは特になくUSBオーディオを出力できるアプリなら何でも、普通にDACやポタアンを使う手順で使えます。
ライセンス購入
一通り動作を確認できたら、公式サイトでライセンスを購入して30分の利用制限を解除します。
購入にはインストールしたHQPlayerのID情報が必要です。「About」画面にある「Fingerprint」の文字列をコピー、購入ページに入力して支払います。後日メールで送られてくるキーファイルを「Key」画面でアップロードすると登録完了。
ハードウェア変更を行うとフィンガープリントが変わるため、メールでのライセンス更新手続きが必要です(同一メジャーバージョンなら無料)。
都度手続きするのが面倒なら、キーファイルとフィンガープリントのセットを物理的なUSBドングルとして購入することもできます。この場合はハードウェアが変わってもドングルを挿し替えれば利用可能となります。
車載!
電源部分は以前のまま。
タイマーリレーによる遅延起動回路を使用し、イグニッションが終了してから電源ONとなるようにしています。そういえば今どきの電動車やハイブリッド車ならこんな工夫は不要になったのでしょうか。

シガーソケットからの12Vをタイマーリレーに接続、DC/DCコンバータで約6Vに落としリニア電源に入力。クリーンな5Vをラズパイに供給しています。
ひとまず完成。USB入力を備えたことでラズパイがDSPらしく使えるようになりました。
HQPlayerの特徴として、処理は音源のサンプリング周波数で行われます。音質的にはメリットとなる一方、初期化に時間がかかるのか周波数が変わると直後の出だしの音が途切れます。入力レートを固定すれば防ぐことはできるもののそれはもったいない…とりあえずプレーヤー側で曲間のディレイを設定して対応。
HQPlayerの価格は現在のレートで6万円ほど。それだけあれば普通にDSP買えるやん!となりますが、スマホやプレーヤーのUSB出力にラズパイをちょこんと挟むだけ(だけ?)でハイエンドクラスのDSPに匹敵する演算性能を追加できます。しかも「可変レートDSP」は、少なくとも車載製品には存在しないと思います。
個人的には位相補償を導入したためにプレーヤーとしてAudirvānaしか使えなくなったのが面白くなかったので、アプリを選ばず音響補正をかけられるのが気に入りました。