長いオーディオケーブルの代わりにNDIを使ってLANで音声を送ろう

オーディオ信号が出てくる場所とアンプが、同じ部屋の中でもちょっと離れているとき、長いアナログオーディオケーブルを使うのが素直なやり方かと思います。 この方法だと、アナログ信号を長距離飛ばすことになるため、ケーブルの品質に応じて誰でもわかるほど音が劣化していきます。 ちょっと窓を迂回するだけで5 mの距離が必要になるなど、同じ部屋の中でもアナログ信号には厳しい環境です。 信号の劣化を防ぐために差動信号を使うこともあるのですが、普通の家庭にある送信側・受信側のデバイスによっては対応していないほか、ケーブルのコストが高いことから、オーディオ機器自体に特別な感情を持っていない場合には今ひとつな解決作です。

ここでは、NewTekのNDI Core Suiteという、本来、放送・映像業界用のビデオ信号の取り回し用のソフトウェアで、無償使用できるものを活用することで、部屋中に這っているLANを用いて低遅延高品質に音声信号をアンプのそばまで持ってくる方法を紹介します。

解決したい問題と解決方法

私はそこそこの数のコンピュータを持っているため、物理的な制約から、部屋のいたるところにコンピュータが並んでいることになります。 それぞれのコンピュータは1990 年代のものなども多く、しばしばサウンドカードが載っていて、オーディオ信号が出てきますが、自身でネットワーク経由で音声を送るような仕組みを動かすには非力なものが少なくありません。 アンプとスピーカーは気に入っているのは1セットしか持っていなくて (Lepy LP-2024A+ とFostex BK40H です)、部屋中のどのコンピュータの出力もこのスピーカーを鳴らしたい、というのがここでのやりたいことです。

先述の理由で長いアナログオーディオケーブルは使いたくない一方、パソコンはたくさんあり、全体構成としては図1のように実現することになりました。

Block diagram
図1: 構成図

NewTek は、Video ToasterというAmigaを活用したビデオスイッチャーやモデリングソフトLightwave 3Dで非常に有名な会社で、NDIは放送業界用の、ビデオ信号をネットワーク経由で送受信できるソリューションの名前のようです。 同じように業務用の映像伝送方式でSDIという名前のものがありますが、それと似せた名前にしているのかなと思いました。 ここで伝えたかったのは、NewTekはある程度信用して良いのかなと私が判断したのは上記のような根拠/実績からです、ということです。

私の利用方法の場合、ビデオは直接モニタを見ていて、オーディオのみネットワークを介してちょっと遠くのスピーカーから鳴らす利用方法です。 NDI は本来ビデオ信号を送信するのが主な使われ方ですが、ここではオーディオのために使って、ビデオ信号は送りはするものの特に使わないという贅沢な活用をしています。 放送で使うようなソフトウェアはある程度低遅延を意識して作られていることが多く、ゲームの効果音など、ビデオと比較して音声が50–60 msを超えて遅れるとかなり気になるような場合でも使える範囲なのではないかという期待から選択しました。

セットアップのコツ

特に工夫とかはそこまで必要ないのですが、ここでは送信側・受信側それぞれMicrosoft Windows 10, 11の機材をセットアップする手順を紹介します。 NDI Tools 自体はWindows またはMacOS に対応しているので、必要なオーディオ入力端子がある機材があるならどちらでも活用できます。

共通部分

NDI Core Suiteのインストーラは[ndi.tv]からダウンロードできます。 これを手動でダウンロードしてインストールしてもよいのですが、 私のおすすめの方法は、Windows に標準搭載されているパッケージマネージャのwingetを使ってインストールする方法で、PowerShell のアイコンを右クリックして管理者として実行してから、以下赤字部分を入力してエンターを押すだけでダウンロードとインストールが完了します。

PS C:\Users\user> winget install NewTek.NDI5Tools
見つかりました NDI 5 Tools [NewTek.NDI5Tools] バージョン 5.6.0.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://downloads.ndi.tv/Tools/NDI%205%20Tools.exe
  ██████████████████████████████   347 MB /  347 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

インストール後、初回起動時に名前と会社名、メールアドレスが聞かれるので入力します。 入力したメールアドレスには一通だけメールが届いてました。 NewTekはそこそこ信頼して大丈夫な会社と思われるので、覚悟を決めて入力しましょう。

送信側設定

NDI のランチャーからNDI Screen Captureを起動します。 起動すると右下の通知領域 (豆知識 タスクトレイと呼ぶのは正しくないらしい [microsoft.com]) にアイコンが表示されます。 ここを右クリックすることで各種設定ができます (図2)。

NDI Screen Captureのスクリーンショット
図2: 送信側NDI Screen Captureのスクリーンショット

Audio Source でどの音声入力を使うか選択します。 Line In とかExternal Mic とかの項目を環境に合わせて選ぶことになります。 Audio Sourceを選んだ直後に、Exit を選択して、NDI Screeen Captureを再起動しないと選択が反映されない場合がありました。

Capture Settings では、ROI (region of interest)を設定することで画面全体ではなく一部を送る設定ができます。 今回映像は使わないので、適当に小さめのROI を設定してネットワークの通信量を減らしておきました。

音声入力のゲイン調整はアプリ内からはできないので、コントロールパネルのサウンドから調整するなどする必要があります。

受信側設定

受信側はNDI Studio Monitorを使用します。 NDI Studio Monitorを起動後、左上のハンバーガーメニューから映像ソースを選択してください。 基本的にはこれだけで音声と映像が見えるはずです。 音声の入力レベルが画面左端にレベルメータで表示されるので、映像が動かなくて音声だけを利用している場合でも接続が途切れていないかは簡単に判断がつきます。 ほか、設定メニューから出力先の音声デバイスを選択したり、音声出力のレベルを調整したりすることができます。

NDI Studio Monitorのスクリーンショット
図3: NDI Studio Monitorのスクリーンショット

ここまでの操作で、送信側の音声入力が受信側の音声出力として聞こえているはずです。 ゲームを動かすなどして遅延を確認してみましょう。 たとえばBluetoothイヤホンだとあからさまに遅延に気づくのですが、今回の構成ですと私は特に遅延は気になりませんでした。

他にやるとしたら

Linux でしばしば使われるPipewire にはRTP送受信の機能があります。 設定をファイルに書いておくスタイルなので、今回のようにタイミングによって部屋の中のどの送信機をソースとするか変えたい場合は少々煩雑な上、積極的に開発が進んでいるプロダクトであることからドキュメントの整備が追いついていない箇所もあり、設定自体が難しいという問題があります。

Audio over Ethernet にはいくつか規格があり、AES67 をベースとしたDante に対応したスピーカーはしばしば市場でも見かけます。 Danteは実装にライセンスが必要で、NDIのように手元に余っているPCを活用するという使い方は難しそうでした。

インターネットを経由して音声を送受信する方式としてはWebRTCがあります。 今回はLANの中だけで閉じた送受信を低遅延で行いたいことから、自分で何らコードを実装する必要がなく、複雑なブラウザ起因のジッタや圧縮遅延がより少ない(と期待される)NDI Core Suiteを使っています。

結論

部屋の中で長いオーディオケーブルを使うことなく、NDI を使うことで余っているPCと敷設済みのEthernet を活用し低遅延にオーディオ信号を取り回しすることができました。 これで部屋の中のどこからでもお気に入りのアンプとスピーカーを鳴らせるようになり非常に便利になりました。 新しいスピーカーを買わなくて済みそうです。