ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

配信の仕組みの話
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

配信の仕組みの話

2020-05-27 00:39

    どうもおじさんです。
    姪っ子の配信の仕組みついてのお話です。

    配信をしていると「これどういう仕組なの?」と聞かれることもあるので備忘録も兼ねて書きます。

    姪っ子の配信に使用しているソフトウェアとハードウェアは以下の通りです。
    ソフトウェア
    • OBS(配信を実行する)
    • VMagicMirror(VRMモデルを表示して姪の動きをキャプチャーする)
    • VOICEROID+ 東北きりたんEX(姪っ子の声のライブラリ及び再生する)
    • ゆかりねっと(音声入力から生成された文字データをVOICEROIDに橋渡し及び字幕生成)
    • 棒読みちゃん(コメントやおじさんの声を再生する)
    ハードウェア
    • DUALSHOCK 4(コントローラー)
    • elgato game capture 4k60 pro mk.2(ゲーム画面のキャプチャに使用)
    • AstroAI HDMI SPLITTER(HDMI出力の分配及びHDCP解除)
    • RME fireface800(オーディオ I/O)
    • iPhoneXS
    • 色々なゲームハード
    上記それぞれのソフトウェア・ハードウェアの運用

    上記に羅列された各ソフトウェアやハードウェアのデータがそれぞれを転々としながら最終的にOBSでまとめられる形になっています。

    OBSはこちら↓
    https://obsproject.com/ja

    姪っ子

    姪ちゃんの3DモデルはVRoidで作成されたVRMモデルです。
    姪ちゃんは当然ながらおじさんが作ったわけではなくてお父さんが作っています。
    おじさんは衣装を作ったり新しい髪型を作ったりしています。
    姪っ子の基本はVMagicMirrorというソフトに依存しており、VRMモデルをこのソフトで使用することによって配信画面にいるいつもの姪ちゃんが存在することが出来ます。

    ▼動き
    ウェブカメラから入力された映像を基にしてVMagicMirrorで姪っ子の動き(主に顔の向いている方向)をキャプチャさせています。
    基本的なフェイシャルトラッキング(顔認識)は行っておらず、目を閉じる動きや口の動きは顔の動きをキャプチャしていません。

    iPhoneXSのカメラを使用してVMagicMirrorで姪っ子のフェイシャルトラッキングをしています。
    最新のVMagicMirrorはiOSアプリのiFacialMocapを使用できるようになっており、非常に高度なトラッキングが可能になっています。
    ただし口の動きは音声連動によるリップシンクの都合上トラッキングはさせずに主に頭の動きや目を閉じたり開いたり目玉の動きなど顔の上半分の領域のみをキャプチャーさせています。
    リップシンク(口パク)はGoogle音声入力をゆかりネットを経由してVOICEROIDから出力された東北きりたんの音声データが同じくVMagicMirrorに入力されておりその音声データをVMagicMirrorが解析して口の形のモーションを反映させています。
    ※但しこのリップシンクには音声データ入力から反映までのタイムラグがありおおよそ250ms~300msほどの遅延が発生します(遅延に対する解決方法は後述)。

    ▼コントローラーの入力
    コントローラーのボタンをカチカチする動きはPCに接続されたDUALSHOCK4への入力情報をVMagicMirrorがキャプチャしています。
    DUALSHOCK4はBluetooth接続とUSB接続を同時に行うことが可能な稀有なコントローラーで実機配信を行う場合にゲーム機本体にはBluetoothで接続、PCにはUSBで接続(もしくは逆にゲーム機にはUSBで有線接続、PCにはBluetooth接続)という形を取ることによって入力情報をゲーム機とPCに分配出来ることが大きな特徴になっており姪っ子の配信の肝になっています。

    ・PS4の場合…PCにUSBで有線接続・ゲーム機本体にはBluetooth接続
    ・PS3の場合…PCにBluetooth接続・ゲーム機本体にはUSBで有線接続
    ・レトロフリークの場合…PCにBluetooth接続・ゲーム機本体にはUSBで有線接続
    ・Nintendo Switchの場合…マジックNSというUSB機器を使用してDUALSHOCK4を無線接続

    *Switchに接続する場合は要マジックNS
    ゲーム機本体PC
    PS3USBBluetooth
    PS4BluetoothUSB
    RetrofreakUSBBluetooth
    SwitchBluetooth*USB

    上記の方法で接続された場合DUALSHOCK4からPCとゲーム機本体へ同時に入力情報を伝えることが可能になります。
    ちなみにここで書かれているPCとはWindows10を搭載したパソコンのことを指しています。
    Xbox360に関しては無線がBluetoothではなくまた無線の360コントローラーをUSBでPCに接続しても充電にしか使用されない仕様になっている為、コントローラーからの入力を実機とPCにそれぞれ送信することが出来ずコントローラーの動作をキャプチャさせることが出来ません。360にはそこにしかないレトロゲータイトルとかが売っていたりするので残念ですね。

    このようにしてVMagicMirrorが生成した姪ちゃんの映像がOBSでキャプチャされます。

    VRoidはこちら↓
    https://vroid.com/
    VMagicMirrorはこちら↓
    https://booth.pm/ja/items/1272298
    iFacialMocapはこちら↓
    https://www.ifacialmocap.com/home/japanese/

    音声(入力)及び字幕

    姪っ子の声はVOICEROIDの東北きりたんのパラメータをデフォルトから少し調整したものを使用しています。
    ゆかりネットを使用して姪の音声入力をVOICEROIDに橋渡しすることによって姪っ子の発声を可能にしています。

    ▼音声入力
    音声入力部分に関してはゆかりネットの機能に依存しています。
    基本的にはゆかりネット起動時に立ち上がるGoogle音声入力をそのまま使用することが多いです。
    初期の頃の配信では音声入力にUDトークを使用していた時期もありますが、精度は高いのですがゆかりネットでプラグインを使用すると音声入力がテキストデータに反映されるまで時間がかなりかかってしまう為現在は使用していません。

    ▼字幕
    字幕はゆかりネットで生成される字幕ウィンドウをOBSでキャプチャしクロマキを使って表示させています。

    東北きりたんはこちら↓
    https://www.ah-soft.com/voiceroid/kiritan/
    ゆかりネットはこちら↓
    http://www.okayulu.moe/

    コメントやおじさん

    コメントやおじさんの音声による読上げは棒読みちゃん(WebSocketプラグインを追加)が実行しています。

    ▼コメント
    コメントはNode.jsを使用したサーバからニコ生の放送データの取得を行っています。
    そのデータをjavascriptで書いたプログラムからソケット通信で棒読みちゃんに送信する仕組みになっています。

    ▼おじさん
    おじさんは専用の配信コントロール画面を作成していてそこからチャットのような感覚で入力されたテキストを棒読みちゃんに送信できる作る仕組みを作っています。

    棒読みちゃんはこちら↓
    https://chi.usamimi.info/Program/Application/BouyomiChan/
    棒読みちゃんのWebSocketプラグインはこちら↓
    https://github.com/chocoa/BouyomiChan-WebSocket-Plugin

    サーバ・クライアントの機能やレイアウト

    基本的な配信のシステムはサーバと2つのクライアント(配信画面・おじさん専用コントロール画面)で構成されています。
    配信画面に配置されているテレビ枠やコメントログやおじさん枠はブラウザソースによるHTML5によるものです。
    基本的な画面構成のレイアウトやアニメーションはHTML5のCSS3で作成されています。
    これはNode.jsサーバを介しておじさん専用コントロール画面からの配信画面への介入などを実現するクライアント機能も有してたりしてそれらの機能はjavascriptで書かれています。
    ざっくりとサーバとクライアントがどのような動作をしているかというと…

    ▼サーバ
    ・ニコ生のコメントの取得
    ・コメントをしたユーザーのアイコンの取得
    ・おじさん専用コントロール画面から配信画面への介入橋渡し

    ▼クライアント(配信画面)
    ・サーバから受信したコメントの受け取り及び出力
    ・そのコメントを棒読みちゃんへ送信
    ・そのコメントが広告だった場合のTOASTYの発生処理
    ・おじさんのメッセージ出力及び棒読みちゃんへの送信
    ・おじさんから送信されたURLの画像の出力

    ▼クライアント(おじさん専用コントロール)
    ・おじさんメッセージ送信(任意)
    ・配信画面への出力したい画像のURL送信(任意)
    ・専用コメントビューア
    ・任意のスコアを下回る184コメントを出力しない為のスコア設定(任意)
    ・BAN設定リスト生成(任意)

    などの動作を行っています。
    クライアント(おじさん専用コントロール)には緊急で棒読みちゃんを停止させたり184コメントだけを表示させなくする機能などもありますがこれらはあくまで配信画面への影響だけでありニコ生自体のコメントが出力しなくなる訳ではありません。
    姪はおじさんが設定したスコアを下回る184コメントを出力しない機能を使用した専用コメントビューアを使用している為匿名のNGスコアが極端に高いユーザーのコメントは一切判らない仕様になっています。
    クライアント(配信画面)はニコ生の他にYoutubeのコメントを取得・出力する機能も実装されていますがYoutubeでの姪ちゃん配信は全く人が来ないので普段は使用されていません。
    クライアント(配信画面)はコメントを拾って特殊な動作をさせるとかそういう事が出来るのでなにか面白いアイデアを思いついたら色々実装していきたいなあとか考えています。
    多分気づいている人は全くいないとは思いますが、実は姪ちゃんがコントローラーのボタンを押した時にカチカチという音が出力されていたりします。これもクライアント(配信画面)に実装されています(音量が非常に小さいのでゲーム音声とかにかき消されているので恐らく誰も気づいていないと推測されます)。

    Node.jsはこちら↓
    https://nodejs.org/ja/

    その他

    AstroAI HDMI SPLITTERはHDMI入力を分配するための装置です。
    OBSにキャプチャされたゲーム画面には遅延が発生する為、ゲーム機からの出力を一方はキャプチャへもう一方は別の液晶画面に出力させています。
    おじさんが使用しているスプリッターはHDCP解除が可能なのでPS3のキャプチャも可能です(これのおかげでヴァルキリープロファイルがなんとかなりました)。

    これらをまとめてOBSへ

    上記の要素に少しソースを追加してOBSで配置しています。

    ▼映像
    ・VMagicMirror(姪っ子)
    ・ゆかりネット(字幕のキャプチャウィンドウをフィルタでクロマキ処理をする)
    ・ブラウザソース(配信画面)
    ・I/O DATA GV-USB3/HD(実際のゲーム画面のキャプチャ)
    ・背景で動くループ動画

    ▼音声
    ・I/O DATA GV-USB3/HD(実際のゲーム音声のキャプチャ)
    ・VOICEROID(東北きりたん)
    ・棒読みちゃん(コメントやおじさん)
    ・OPやEDのBGM

    配信画面をHTML5でほぼ構成しているので配置するソースはアプリ単位で区切られている事になり把握しやすいです。
    先述している通りVMagicMirrorのリップシンクには遅延がある為VOICEROIDからの音声のほうが先に出力されてしまうことになります。
    これを解消する為にVOICEROIDの入力チャンネルの音声フィルタにVSTエフェクトのディレイを使って300msほど出力を遅延させるように設定しています。
    音声周りはフィルタ(エフェクト)やルーティングやモニタリングの問題等解説しようとするとそれだけで結構な量になるのでそれはまた改めて書こうかなと思っています。

    …みたいな仕組みで姪っ子の配信は作られています。
    ちなみに姪ちゃんはこの内容を一文字も理解していません。かわいいですね。

    今後とも配信の方をお楽しみ頂けるよう色々と考えてみたりしたいと思っています。
    よろしくお願い致します。甘えます。


    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。