temp_la :: Memo

https://twitter.com/temp_la

Linux から VTuber として動画投稿したいメモ 1

背景

今年YouTubeばかり見てる私

私もYouTubeに動画投稿したい

やるならVTuberになりたい

目的

VTuberとしてゲーム実況動画を投稿する

制約とか前提
  • Linux (Fedora) 環境で完結すること(これは個人的な趣向によるもの)
  • ゲームの種類はブラウザゲー

手法

調べた結果、既に有力な情報がありました。

この中から良さそうなものをチョイスします。

note.com

個人的に顔トラッキングとかは不要で、どちらかというとマウスカーソルを追ったり、プログラマブルで視線を操作できた方がよい思いがあります。

(トラッキングあった方が没入感が良さそうだけどそんな表情豊かにできないし)

難易度的に一番が簡単そうなVTuberKitチャートを選択しました。

VTuberKit に従って進める

これまた敷かれたレールを走るだけでVtuberになることができる非常に優良な記事。

というか目的を実現する方法が全部書かれてる。神

qiita.com

 

結論から言うと記事通りに進めていくことでやりたいことが実現できました。

なので、ところどころLinux環境固有の問題やアレンジした部分をメモしときます。

 
メモ1. Unity Editorのバージョン

Unity Hubから最新のEditor(?)のバージョンでプロジェクト作成すると

失敗しPCがフリーズする事象が発生しました。結局原因が分かりませんでしたが、2020.3.48f1を選択したら正常に起動し動作も安定しています。

これ以外はバージョン関連の問題は多分無く、最新版を入れて問題なかったです。

Cubism EditorはWineで起動可。

メモ2. xmonadの設定

ウィンドウマネージャとしてxmonadを使用しているのですが、

OBSでウィンドウタイトルが出てこないのでewmhをかます必要があります。

main = do
  -- xmonad myConfig
  xmonad $ ewmh myConfig

メモ3. マウスによる視線誘導

記事の視線誘導はUnity外にいったり他のウィンドウが重なっていたりすると誘導できません。こちらはデスクトップの絶対座標から視線を誘導したいわけです。

実現するために以下の記事の情報で解決できました。「Unityへ情報を送る」のところです。記事ではUDPで顔認識した際の情報を送ってますが、デスクトップ上のカーソル位置を送ればよいので簡単です。受け取り側のプログラムは全く同じです。

kotatu99.hateblo.jp

カーソル位置を送信するやつは以下のスクリプトを作成しました。

get-mouse-pos.sh (マウス座標を取得しjson形式にする)

eval $(xdotool getmouselocation -shell)

echo "{\"x\": $X, \"y\": $Y}"

send-mouse-pos.sh (定期的にUPDで送信する)

while true; do get-mouse-pos.sh; sleep 0.1s; done | nc -4 -u localhost 22223

メモ4. AniLipSync-live2dが使えない

内部でOVRLipSyncというライブラリを使用していて、多分Linuxに対応してなくてDLLImportエラーみたいなので動きませんでした。未解決ですが一旦諦めました。

メモ5. デスクトップ音声をマイクから入力する

記事ではマイクから入力された音声による口パクを実装してます。これは普通に肉声を使う分には十分なのですが、ソフトベースのボイスチェンジャーの使用やゲーム側の音声に合わせて口パクさせることを考えており、デスクトップの音声をそのまま入力としたかったです。

そこで仮想的なマイクを作成してそこにデスクトップ音声を流し込むことをしました。

やり方は以下の動画(のコメントのやりとり)から解決できました。

www.youtube.com

最初No such entityのようなエラーでできなかったのですが、コメントにある通り以下の一連のコマンドで実現することができました。

#!/usr/bin/env bash

# Create a virtual sink that can be set as a monitor in OBS
pactl load-module module-null-sink sink_name=VirtualSpeaker sink_properties=device.description=VirtualSpeaker

# Link it with a virtual source that is visible in pulseaudio apps like Zoom
pactl load-module module-null-sink media.class=Audio/Source/Virtual sink_name=VirtualMic channel_map=front-left,front-right
pw-link VirtualSpeaker:monitor_FL VirtualMic:input_FL
pw-link VirtualSpeaker:monitor_FR VirtualMic:input_FR

また、VTuberKitの方法は入力した音声はそのまま音声出力してしまうので、ハウリングしないようにGnomeの音声ミキサーで音を消す必要があります。

今後の予定

ボイスチェンジャーで音声を当てたいです。

以下のリアルタイムボイスチェンジャーが良さそうなのですが、今回と同じかそれ以上のボリュームがありそうなので時間のあるときにやろうと思います。

github.com