WindowsPCとPMA-60でopenhomeレンダラーを実現する

PMA-60のUSB-DACと手持ちのノートPCを組み合わせて、openhome対応プレイヤーを作ってみました。

1. 用意するもの

openhome対応プレイヤーを自作する場合はラズパイ3+対応ディストリビューションの組み合わせが定番のようですが、手持ちの機器だけで使い勝手を試してみたくなり、まず以下のものを用意しました。

このうちOpenHome PlayerはOpenHome純正のデモプレイヤー。ただし常駐や利用オーディオデバイス、ドライバなどの詳細設定ができないため、常用するためには一工夫が必要です。その一工夫の一つがASIOやWASAPI排他モードを利用できない状況でもなるべく音質低下を防ぐためのカーネルパッチ「Disable Peak Limiter」の利用です。

2. Windows10にPMA-60のUSBドライバをインストール & 設定

PMA-60はWindows10標準の「USB AUDIO CLASS 2.0」では動作しないため、DENONが用意している「共通USB-DACドライバー v3.0.0 for Windows10」を利用します。

ただしこのドライバを導入してもデフォルトではハイレゾ設定になっていません。変更するには「Winキー+Rキー」で「ファイルを指定して実行」を開き、mmsys.cplを入力して「サウンド」を開きます。

再生デバイスのPMA-60を選択し、右クリックメニューの「プロパティ」を選択。

「詳細」タブでサンプルレートとビットの深さを設定します。デフォルトは「2チャネル、16ビット、48000Hz」とDVD音質。
今回はハイレゾFLACにあわせて「2チャネル、24ビット、192000Hz」に変更しますが、ハイレゾ音源がない場合は「2チャネル、24ビット、44100Hz」が良いでしょう。

変更後の「OK」または「適用」を忘れないこと。

設定確認は「DENON USBオーディオコントロールパネル」から行えます。まずはタスクトレイの青いアイコンをクリック。

最初に表示される「ステータス」タブでサンプルレートを確認できます。

「フォーマット」タブでは、Windowsの設定で選択可能な最大bit数を選べます。

「バッファの設定」はASIOドライバの設定なのでパス。「情報」タブではPMA-60のファームウェアバージョンを確認することもできます。

3. OpenHome Player for your PCを導入

次にOpenHome Player for PCのリンクからインストーラ「winplayer.exe」をダウンロードし、インストールします。完了するとデスクトップに「OpenHomePlayer」アイコンが表示されるので、ダブルクリックで実行しましょう。

「OpenHomePlayer」が起動するとタスクトレイに「O」のアイコンが表示されます。ただしこのアプリ、あくまでデモプレイヤーとのことで最低限の機能しかついていません。せめてサウンドドライバを選択できればよかったのですが・・・残念です。

4. Disable Peak Limiter in Windows Audio Engineを導入

ないもの(機能)は仕方ないので出来ることをしましょう。
Windowsの音が悪い原因を解決する「Disable Peak Limiter in Windows Audio Engine」を導入します。このツールの説明と効果についてはAVWatchの記事が詳しく解説しています。

このツールはインストーラではなくただのZIPファイルなので、自分で解凍して任意のフォルダに保存する必要があります。今回試すPCは64bit版Windows10なので、「amd64」フォルダを「Program Files」配下にコピーします。

このフォルダ内の「dpeaklim.exe」を実行することで起動中のOS(Windows Audio Engine)にパッチが当たり音質低下が最低限になるとのこと。

パッチ適用中は以下のような画面が表示されます。

これでPCのOpenHomeレンダラー化の準備は整いましたが、現状ではOpenPlayer/dpeaklim.exeを手動実行しなくてはいけません。結構な手間なのでPC起動時に自動起動するように仕込みます。

5. Disable Peak LimiterとOpenHome Playerの自動起動設定

PC起動時に任意のユーザで自動ログオン/自動サインインし、スタートアップ機能でBATファイルを実行する方法を取ります。

まずは「Winキー+Rキー」で「ファイルを指定して実行」を開き、netplwizを入力して「ユーザ アカウント」を開きます。

「ユーザー」タブの「ユーザーがこのコンピューターを使うには・・・」のチェックを外し「OK」または「適用」をクリックします。

このユーザに設定しているパスワードを要求されるので2回入力し「OK」をクリックします。

また「dpeaklim.exe」を実行するには管理者権限が必要でUACが動作してしまうため、これを無効化します。
「Winキー+Rキー」で「ファイルを指定して実行」を開き、useraccountcontrolsettingsを入力して「ユーザーアカウント制御の設定」を開きます。

通知レベルをデフォルトから「通知しない」に変更します。

自動起動の準備が整ったので任意のフォルダにBATファイルを作成します。dpeaklimは保存先フォルダを設定してください。OpenHomePlayerは以下のパスにインストールされています。

openhome.batrem dpeaklim.exeを実行する
rem callで呼び出すことで処理が終了するまで次の処理に進まない
call "C:\Program Files\dpealim\dpeaklim.exe"

rem startはアプリを呼び出して次の処理に進む。callだといつまでもコマンドプロンプトが消えない。
rem 最初の""はstartの表題。これを抜くと、実行コマンドが表題として認識されてしまう。
start "" "C:\Program Files (x86)\OpenHomePlayer\OpenHomePlayer.exe"

exit /b

最後にこのBATをスタートアップフォルダに保存します。「ファイルを指定して実行」に「shell:startup」と入力すると・・・

「C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup」が開きます。この中にopenhome.batのショートカットを保存します。

6. サウンドデバイスが切り替わるとOpenHome Playerがスタックする問題を解決する

以上の設定でOpenHomeを利用してみたところ、一度PMA-60の電源を落とすとOpenHomeレンダラーが反応しなくなることが分かりました。どうやらOpenHomePlayer起動中にサウンドデバイスが切り替わるとスタックしてしまうようです。

幸いにもopenhomeplayerを強制終了後に再度起動すると、OpenHomeレンダラーとして問題なく動作することが分かりました。それならPMA-60が接続されたことを認識してopenhomeplayerを再起動するBATファイルを作れば解決できるはず!

ということでイベントログを調べてみると、オーディオデバイスに変更が発生するとMicrosoft-Windows-Audio/Operationalログにソース「Audio」ID「65」が記録されることが分かりました。

そこでまずopenhomeplayerを強制再起動するBATファイルを作成します。

openhomereload.batrem 「OpenHomePlayer.exe」プロセスを強制終了(/f)するコマンド
taskkill /f /fi "imagename eq OpenHomePlayer.exe"

rem startはアプリを呼び出して次の処理に進む
rem 最初の""はstartの表題として認識させるためのもの
start "" "C:\Program Files (x86)\OpenHomePlayer\OpenHomePlayer.exe"

exit /b

そしてAudio ID:65ログが記録された瞬間にこのBATファイルを実行するために、ファイルを指定して実行に「taskschd.msc」を入力して「タスクスケジューラ」を起動します。

「タスクスケジューラライブラリ」の右クリックメニューで「基本タスクの作成(B)」を選択。

「特定イベントログへの記録時」を選択。

ログ、ソース、イベントIDを選択します。

これでPMA-60のON/OFFを検知してOpenHomePlayerが再起動するようになり、スタックすることがなくなりました。仮にOpenHomePlayerがフリーズや強制終了してしまった場合でもPMA-60のOFF/ONだけで復帰できるはずです。

7. OpenHome Playerの使い勝手

そもそもOpenHomeとは何か?という方は、先人の詳しい記事をぜひ参照ください。

ネットワークオーディオと「OpenHome」 | 言の葉の穴
http://kotonohanoana.com/archives/6447

この中で一番便利そうなのがOn-Device Playlist。コントローラが停止しても保存されたプレイリストにそって「順次再生」されるはずなのですが、なぜかうまくいきません。コントローラはBubbleUPnPを利用しているので問題なく利用できるはずなのですが・・・

また対応フォーマットにAACが入っていますがAACフォーマットのm4aファイルは未対応でした。カーオーディオでも聴きたい曲はm4a、高音質で聴きたい曲はflacというポリシーで音楽ファイルを管理しているのでこれは痛い。劣化無しでAACファイルに変換することも可能ですがファイル数が多すぎて面倒です。

・・・ということでOpenHomePlayerの利用は止めました。OpenHomeが悪いのではなく、あくまでOpenHomePlayerの機能と私の音源管理の相性問題が原因です。

8. 更なる応用編(計画のみ)

実はノートPCでの実験が成功した場合、スティックPCを購入して本格的にOpenHomeレンダラーとして利用する予定でした。ファンレスなのでファンノイズがなく、余計な機能がなく消費電力も少ないのでおもしろそうだったのですが。OpenHomePlayer自体は軽いアプリなのでスペック的には問題ないはずです。