距離の離れたDJとオンラインB2Bをしよう!

12/21 記事の内容を大幅に修正しました.
01/13 音声伝送周りを修正しました
01/23 未検証だった部分と文章がおかしい部分を一部修正しました

第二弾です

当記事で紹介した方法がAniCloverさんの記事と同じような構成になっていました.
AniCloverさんの記事のほうがより詳細に書かれているのでそちらも是非…
https://github.com/aniclover/remote-dj-b2b

前回は,MIDI信号をホストPCに転送するだけだったので,MIDIの再アサインが必要でした.
単純に面倒くさいのでこの方法は現実的ではありません,他の方法を使うしかない.

USBに刺さったデバイスをそのまま転送することができれば便利だと思い,色々探したところ,

ありました

じゃあ,やろう

イメージ図

2020-12-23追記 クライアント側の図が間違っていました.そのうち修正します

DEMO

ホスト側:Haru(香川県)
クライアント側:Napp(大阪府)

上の場合,だいたいこんな感じです.距離によって遅延が大きくなるのかもしれないですが,未検証なのでよくわかりません.
VIrtualDJだといきなり数値が変わることがないので良い

必要なもの

ハードウェアとか

  • そこそこの性能を持ったPC(ホスト側)
  • そこそこの速度と安定性のある回線
  • DJコントローラ
  • オーディオインターフェース(クライアント側のみ必須)

ホスト側で入れるソフトウェアとか

クライアント側で入れるソフトウェアとか

その他必須なもの

  • VDSL以上のインターネット回線(スループット50Mbps以上必須)
  • 有線LANでの接続(できるだけレイテンシを抑えたい)

入れるソフトの役割など

VB-Audio VoiceMeeter Banana

DJ間の音声伝達で使います.
DJソフトの出力をこれに渡して,それを遠隔地のDJが聞けるようにできるものです

VirtualHere

USBの通信をネットワーク経由で転送するツールです.
ServerはそのPCのデバイスをネットワーク内に配信,ClientはサーバのUSBデバイスを一覧から選ぶ事ができます.

ZeroTier

P2PのVPNです.
プライベートネットワークで通信するVB-Audio VoiceMeeter BananaやVirtualHereが使用します.

Parsecなどの画面共有ツール

DJが選曲するときに使います.
その他のリモートデスクトップツールなど,遅延が少ないものなら何でもOKですが,マウスやキーボードの誤操作に注意

インストール

割愛.ガイドに従ってやってください
VirtualHereはDLしたものが本体です.

ホスト側の人がやること

  1. DJソフトの音声出力先変更
  2. ZeroTierのアカウント作成→ネットワーク作成
  3. Voicemeeter Bananaの設定
  4. VirtualHere Clientでクライアントのコントローラと接続

1.DJソフトの音声出力先変更(VirtualDJの場合)

画面右上のSETTINGSから設定画面を開く

オーディオ設定に入り,マスターの出力をVoiceMeeter Virtual ASIOの1,2chに
ヘッドホンをVoiceMeeter Virtual ASIOの3,4chに設定

そして,ヘッドホンをVoiceMeeter AUX VAIOの1,2chに設定
配信に載せるなどのその他の設定はそちらの環境に合わせてお願いします.

2. ZeroTierのアカウント作成→ネットワーク作成

https://my.zerotier.com/login

ここにとりあえずGoogleアカウントでログインすればOKです

Create A Networkをクリックし,ネットワークを作成

作成したら下にIDと名前が出てくるのでそのIDをクリック
下の画面に変わる

とくになにも設定しなくてOKだったはずです
プライベートに設定した場合,
未認証のPCを接続した際にWeb画面からAuthのチェックを入れないとIPアドレスが振られません.
MembersをクリックしてAuthにチェックを入れてください
DLしたクライアントにIDを入力し接続すると,

この画面が出てくることがあるので,はいを選択

これで接続完了

3. Voicemeeter Bananaの設定変更

入力側は特にいじらなくてOK
DJソフトで音声を再生したときにメータが振れていたら,それの出力をとりあえずA1とB1に出すようにする

デスクトップ音声に流す場合,WDMを選ぶとVoiceMeeterが専有し,他のアプリケーションの音声が流れなくなります.MMEを選択すると,遅延は増えるものの,この問題は解消します.
DJコントローラに流すなら,WDM: DJコントローラとなっている物を選ぶと,そこにマスターとCUEの音が流れます.

そして,Voicemeeter AUXの音声をB2に出力します

VBANをクリックし,下の画面を出す.
Vbanをオンにして,Outgoing StreamのどれかをONにする.
ここで,CH数は4CHにしておくこと

VBANをクリックし,以下の画面を出す.

Outgoing StreamとIncoming StreamのStream Nameは対応しています.ここでは,Stream1にマスターを流し,Stream2にCUE音声を流します.

IP Address To:には受信側のIPを入れる.(ZeroTierに接続してから実行すること)

最終的にこうするとOK

送信されているのにクライアント側でストリームが来ない場合

送信側のStream Nameと受信側のStream Nameは同一である必要があります.
確認してください

4. VirtualHere Clientでクライアントのコントローラと接続

VirtualHere Clientの初回起動時はドライバのインストールが走ります.
待たされることもあるので気長に待ちましょう

ウィンドウが消えてしまうこともありますが,通知領域に常駐しているので,そこから開いてやってください

サーバ機に接続できたら,そこにつながっている機器が出てきます.
たぶん自動的に接続してくれます
DJコントローラを右クリック→Use this DeviceでクライアントPCに接続されます.

DJソフトにも認識されます.接続できないエラーが出た場合,サーバ側のPCでそのデバイスを抜き差ししてみてください
それでも改善しないようなら,VirtualHereが多重起動している可能性があります.taskmgrあたりで両方キルしてください

ホスト側の準備作業は以上です

クライアント側の人がやること

  1. ZeroTierでVPNに接続
  2. Voicemeeter Bananaの設定
  3. VirtualHere ServerでDJコントローラをネットワークで参照できるようにする

1. ZeroTierでVPNに接続

とくになにも設定しなくてOKだったはずです
DLしたクライアントにIDを入力し接続

この画面が出てくることがあるので,はいを選択

これで接続完了

2.Voicemeeter Bananaの設定

画面右上のVBANをクリックし,以下のウィンドウを出します

Incoming Streamsの設定をいじります
サーバ側のVPN内でのIPを教えてもらい,そこに入力.
また,どのストリームがマスターなのかCUEなのかを確認してください
入力先は重複していなければどこでも構いません
Onにする→左上のボタンからVBANをオンにする

IPの右が緑に光ればOK

入力先に指定したチャンネル(Virtual input1ならVirtual Inの左側)のメータが振れているか確認

それを任意の出力先に指定する

オーディオインターフェースなど,出力先が複数あると,マスターとCUEを別デバイスに流すことができます.

なお,DJコントローラはホスト側に専有されているため,使用できません

WDMはそのデバイスを専有します.同時にボイスチャットなどする場合,MMEデバイスを洗濯してください.

infoのランプが光らない場合

ファイアーウォールで破棄されている可能性があります.一時的に無効にしてください

ストリームが検知されているのに来ない場合

Stream Nameは一致していますか?

3. VirtualHere ServerでDJコントローラをネットワークで参照できるようにする

VirtualHere Serverを落とし開きます.
ファイアウォールからの警告が出ることがあるので,プライベートネットワークにチェックを入れ,アクセスを許可するようにしてください

このような表示になっていればOK

クライアントの準備は以上です

音源について

基本ホスト側の音源しか使えません.
VirtualHereの無料版ではUSBメモリなどを転送することは出来ないようなので,ライセンスを別途買う必要があります.
ZeroTierでVPN接続しているのでSMBで共有するのもアリ

レイテンシと曲のロードまでにかかる時間の関係について

曲のロードまでにかかる時間が異常に長い場合,接続しているPCとの応答が遅い可能性が高いです.

172.25.xxx.xxx からの応答: バイト数 =32 時間 =27ms TTL=128
172.25.xxx.xxx からの応答: バイト数 =32 時間 =30ms TTL=128
172.25.xxx.xxx からの応答: バイト数 =32 時間 =29ms TTL=128
172.25.xxx.xxx からの応答: バイト数 =32 時間 =27ms TTL=128

応答にかかる時間が約30msのとき,曲のロードまでにかかる時間は約6,000msでした.
VirtualDJをマウス・キーボードで制御することはできません.

172.25.xxx.xxx からの応答: バイト数 =32 時間 =95ms TTL=128
172.25.xxx.xxx からの応答: バイト数 =32 時間 =104ms TTL=128
172.25.xxx.xxx からの応答: バイト数 =32 時間 =95ms TTL=128
172.25.xxx.xxx からの応答: バイト数 =32 時間 =70ms TTL=128

応答にかかる時間が約100msのとき,曲のロードまでにかかる時間は約20,000msでした.
VirtualDJをマウス・キーボードで制御することはできません.

10.128.xxx.xxx からの応答: バイト数 =32 時間 <1ms TTL=128
10.128.xxx.xxx からの応答: バイト数 =32 時間 =1ms TTL=128
10.128.xxx.xxx からの応答: バイト数 =32 時間 <1ms TTL=128
10.128.xxx.xxx からの応答: バイト数 =32 時間 <1ms TTL=128

応答にかかる時間が1ms以下のとき,曲のロードまでにかかる時間はほぼありませんでした.
VirtualDJをマウス・キーボードで制御することができます.

これにより,応答時間と曲のロードにかかる時間の関係がわかります.

ロードにかかる時間[ms] / 応答時間[ms] = 倍率

6,000[ms] / 30[ms] = 200
20,000[ms] / 100[ms] = 200

応答時間[ms]に200をかけると曲のロードにかかる時間が大まかに分かります.

応答なし状態を配信に載せないようにしたい場合,以下のリンクを参考に設定してみてください.

時間がかかる処理での「応答なし」回避方法 http://www.trycut.com/timeout.htm

ただし,以下の内容を実施しても,応答なしが表示されるまでの時間が変わるだけであり,常時マウス操作が効くようになるわけではありません.
遅延が2ms以内でないと,マウス操作はまともにできないと考えたほうがいいでしょう.

この問題を解決する方法

MIDIマッピングのインスタントダブルスに関する記述を削除してください.

注意事項

VirtualDJが応答しなくなる

VirtualHere+ZeroTierを使ってMIDIコンを接続した場合,VirtualDJは応答しなくなります.
応答なしのときはマウス操作を基本的に受け付けてくれません.

遠隔で接続している側のMIDIコンが切断されると,MIDIコンの操作は受け付けますが,
応答なし状態から復帰しなくなります.その場合はMIDIコンを再接続するか,VirtualDJを強制終了してください.

VirtualDJのBPM情報が吹き飛ぶ.

応答なし状態から強制終了した場合,このような状況になることがあります.
まず,タスクマネージャからプロセス virtualdj.exe を全て終了させてください.

次に,VirtualDJを起動します.
すると,DBに格納されたBPM情報が表示されるようになり,BPMの解析が走らなくなります.

ホスト側で使用したPC

マザーボードASRock Z390 Pro4
CPUIntel Core i7 8086k(OC)
RAM8GB
グラフィックIntel UHD Graphics 630

B2Bと配信を同時にするなら上の構成は少し厳しいです.
リソースにゆとりをもたせて配信をするならGPUを積むと良くなりそう

おわりに

この双方の準備が終わったらB2Bができます.

オンラインB2B配信をする上でWebカメラをネットワークで共有する必要がありますが,そのへんはまた別の記事で.

Related Posts:

「距離の離れたDJとオンラインB2Bをしよう!」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください