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

先伸ばされる世界

去年の振り返り

色々やったし色々あった。疲れた。

できなかった事もあるんで今は反省会してる。1月は反省の月。

個人的先延ばし対策

なぜできなかったのか、できるようになった気がしてたんですけど。

自分の中で意識できている部分を整理する。

サイクルの中に居る(在る)こと意識する

行動や感情には意識・無意識のうちに繰り返される周期がある。良い時期もあるし悪い時期もある。

すべき事への着手は読書から始まることが多い。

読書を(能動的に)できているならば、他の事もできるという意識が生まれる。

また、他者からの影響を受ける点でも読書は良い。孤独な者にとって周囲の環境から受ける影響というのは少ないか偏っている。

先延ばしによる先延ばしの消化

色々なタスクをやってると、色々先延ばしが起きる。

それでも後少しで終わりそうなタスクも出てくる。こういうタスクは結構やる気が出やすい。

怒り駆動、悲しみ駆動

色々溜まってくると、生命の危機とかストレスとか出てくる。感情こそパワー。

あとは、感情を抉る作品を観ると良い。

これから

もう先人の知恵に頼るしかないので本を読んだ。

ヒトはなぜ先延ばしをしてしまうのか

先延ばしについての本は色々あるようだが、以下の本に大体まとまっていた。

個人的には色々回り道をして再発見した結果として実績できている部分が多いため、 もっと前にこの本を読んでいてもどうにもならなかった気がするが、 自分の足りない部分が補われる感じがした。

www.amazon.co.jp

先延ばしは人類最後の敵。

行動の記録

一日の行動を記録しているんだけど、フォーマットをデフォルト30分単位にしていたので15分単位に変更した。

タスクを15分単位に分割しやすいし、先延ばしも15分で収まる可能性が出てくる。

今やれ、とりあえず 15分やれ。明日でもできることは明後日でもできる。

もはや予定を立ててはいけない。

エネルギーの意識

疲れてたら何もできんですわ。

最小会話法

はじめに

 近年、他人との会話を最小限に留める手法が無意識の中で盛んに研究されており、社会に対して少なからず影響を与える程度の域に達したと言える。また、ここ数年の世情も相乗効果をもたらし、その影響たるや言わずもがなである。

目的

 本稿では日頃から実践されている手法を明示することにより、何らかの影響を無意識に働きかけることを目的とする。なお、これらの手法を最小会話法と呼ぶことにする。以下が最小会話法の第三原理である。

最小会話法の第三原理

 (i) お礼を言う

 (ii) 笑顔で受け流す

 (iii) 話しかけない

(i) お礼を言う

 「お礼を言う」は社会に対して円滑なコミュニケーションを行うために用いられる。一般的に感謝の意を伝える言葉であるが、最小会話法における役割として重要な効果を備えている。以下に例を挙げる。

Case.1

 A「これ、もらってください」

 B「いえ、とんでもない」

 A「いえ、大丈夫ですから」

 B「すみません、ありがとうございます」

Case.2

 A「これ、もらってください」

 B「ありがとうございます」

 Case.1ではCase.2に比べ会話数が多く最小で一往復で済む会話を二往復している。最小会話法においては常にCase.2のように一言目にお礼を言う。そこで会話終了である。ここで重要な点は如何なる文脈においても実施することである。あらゆる場面において社会的立場や社会的不利益の可能性は考慮せず実施する。

(ii) 笑顔で受け流す

 笑顔、広く言えば表情はコミュニケーションを円滑に進める上で発言内容よりも時として重要である。ここでは表情による効果を示す。

Case.1

 A「髪切りました?」

 B「そうなんですよ」

 A「良いですね」

Case.2

 A「髪切りました?」

 B「😊」

 Case.1では会話が進展する可能性がある。「どこで切ったんですか」や「あなたも切りましたか」のような会話である。後述する第三原理の(iii)に関連するが、最小会話法では基本的に相手から二の手を出させてはならない。ある種の最適な応答は有機的に会話の連鎖を誘発する。Case.2では言葉で応答しないことにより、相手の応答の可能性を無限に拡げる。あるいは複雑にする。人は選択肢を拡げると何もできないものである(※1)。重要な点は、無反応ではないがこれ以上の会話を要求させない凄みを出すことである。

(iii) 話しかけない

 ある意味自明である。話しかけなければ会話は発生しない。ここでは、会話を続けさせないという意味も含め広義の意味での「話しかけない」を示す。

Case.1

 A「その時計かっこいいですね」

 B「あなたの時計もお洒落に見えますが、どこのブランドですか」

 A「これは〇〇の〜」

Case.2

 A「その時計かっこいいですね」

 B「はい」

 上記のCase.1は所謂「How are you?」「I'm fine. And you?」「I'm fine too.」といった中学英語の教本の最初に出てくるような会話である。我々はこのような会話をAnd you テンプレートと呼んでいる。最小会話法では最も基本的な流れの一つであるこのテンプレートを回避する。応答内容は「はい」もしくは「いいえ」あるいは前述の第三原理の(ii)「😊」である。なお、「いいえ」で返す場合は相手から二の手が来る可能性が比較的高く、使いこなすためには高度な技術と経験が必要である。

考察

 最小会話法が行いやすい心理的な背景として、会話という観点で見なければ良心が傷まない点がある。感謝や笑顔は相手に対して基本的に失礼にならない。また、考え方によっては最小の会話は相手の時間を奪わないという点で有意義ですらある。このように、心理的な負担がかからず比較的容易に実践できることが、この手法を生み出し、繰り返し行われることの一つの要因なのではないかと考える。

関連研究

 Web上で「会話を続けない方法」で検索すると「会話を長く続ける方法」や「会話が途切れる人と途切れない人の違い」といった記事が見受けられる。また、人工知能分野では会話(雑談)生成の手法が研究されている。したがって、会話を続かせるための技術の逆を実施すれば本稿と同じ手法に辿り着く可能性はある。例えば第三原理の(iii)について、「相手が聞いてきた事は相手自身が聞かれたがっている事」のようなフレーズを何度か目にした記憶がある。

 本稿で述べた手法は無意識化で生成された点に意味がある。実践を試みたのではなく、周囲から微量の影響を受け続けた結果として導出され実践されたものである。

 また、雑談に限らなければ、最小限の会話で如何に要件を聞き出すかのような手法は、多種多様な既存研究が存在する。しかしながら、本稿では必要な情報すら不必要という立場であり、独自性や優位性を見出すことができる。

おわりに

 他人との会話を最小限に留める手法を最小会話法と呼び明示した。ここ数年の世情に後押しされ、会話は最小限とされる傾向にある。どうか無意識に何かしらの影響を与えることを願う。

脚注

(※1)この考え方は、羽生マジック(将棋)や最近では無量空処(呪術廻戦)を想起させる。

追記

Q. 第三原理って第一と第二はどこにあるのかね?

A. 素で三大原理と間違えました。きっと脳内にプロトタイプとしてありました。含みを持たせたほうが格好良いのでそのままにしておきます。

続・すべてを管理する

下の記事の続き。「すべて」というか「時間」管理の話。

結論から言うと全然管理できてなくてクソみたいな時間を過ごしてました。

理由ははっきりしていて予定を組んだけど実績を記録していなかったということ。

(どう記録すれば良いかも分からなかった)

tempxla.hatenablog.com

 

それでなんとかしたいなと思ったので以下の本を読みました。

曰く、一日の初めにその日の予定を書き出すというもの。もちろん優先度とか色々書いてあるけど端的にいうとそんな感じ。

www.amazon.co.jp

これを実践して思ったことは、

・記録するという作業は案外自分に合っているとういこと

・カテゴリに分けてグラフ化(可視化)すると発見があること

1つ目は、何かを収集することに価値を見出す自分の性質に由来する。案外継続して記録を続けられている。2つ目は、自分自身の精神や行動原理を分析するのに役立つ。例えば何を一日何時間に押さえれば心が満たされるとかがきっと分かるようになる多分。

参考のグラフ(カテゴリ名は個人的趣向を含むので隠してます)

f:id:temp_la:20210207193432j:plain

問題点というか少し気になる点は、

・並行した作業を記録できない

・集中して1つのことをやり続けることが難しくなった

1つ目は、アニメ観ながらニュースサイトを読むとか、移動しながら勉強をするとかそういうの。まあ別にそこまで気にしなくてもいいかもしれない。2つ目は、個人的に何かを成すにはガッと集中して取り組みたいという気持ちがあり、管理しているとどうしても他の作業を入れざるを得ないということ。これは理性的に計画を立てられるという点で利点なので仕方ないけど今後の計画の立て方も考えていく必要がある。(何かするためには何かの時間を削らないといけないということが客観的に分かってしまったのです。)

 

この記事は空いた時間に書いてます。

Fedora 32にLightDMを入れる

年末にFedoraにLigthDMを入れたときのメモ。

何を思ったかノリでdnf install lightdmコマンドを実行しインストールしたら

LigthDMは起動したがログインすると真っ暗になり、その後GDMも起動しなくなり、startxからxmonadを起動しなければならない事態になったので、

基幹部分のインストールをするときは十分準備して時間に余裕のあるときにしましょうという話。

解決方法としては以下の方法を参考にして解決できた。

(Memo: Ctrl+Alt+F1〜F6でttyを切り替えられるのでコンソールから作業する)

Fedora 29 getting stuck at “Started GNOME Display Manager”

sudo systemctl disable gdm
sudo systemctl stop gdm
sudo dnf remove gdm
sudo dnf install lightdm-gtk
sudo dnf remove nvidia-*
sudo dnf -y install akmod-nvidia xorg-x11-drv-nvidia-cuda xorg-x11-drv-nvidia-libs
sudo systemctl enable lightdm

正直Xorgのログとかを見てもよく分からず、gdmが起動したままだったのか(?)

なにやらNvidiaとLightDMの相性がどうのこうの(?)という情報をたよりに

なんとなく試したらうまくいったので

ちゃんとしてない。ちゃんとしたい。

Fedora 32でハイバネート

Fedora 32でハイバネートの設定メモ。 基本的には以下のブログの方法でできる。

How to enable hibernation on Fedora

と思ったのだができなかった。

/etc/systemd/sleep.confに下記も含めたらできた。

HibernateState=disk

urxvt (rxvt-unicode) で記号が豆腐になる

先日Fedoraをインストールした際のメモ。

urxvt (rxvt-unicode) をインストールしたが、矢印(→)記号が正常に表示されなかった。(俗に言う豆腐になってた)

調べた結果、urxvt側の問題ではなくlocaleの設定の問題ということが分かった。

urxvtの作者もurxvt側で修正することではないとのこと(という事を誰かのブログで見た)

解決方法としては以下にあるUTF-8-EAW-FULLWIDTH.gzをダウンロードしてlocale-genする。

github.com

Fedoraにはlocale-genが無かったが、単なるlocaledefのラッパーなので以下のコマンドで生成する

> sudo localedef -i ja_JP -f UTF-8-EAW-FULLWIDTH -A /usr/share/locale/locale.alias ja_JP.UTF-8

 

今ちょっと調べたけど思いっきり解決方法の書いてあるブログを見つけた・・・

個人的Linux: rxvt-unicodeの全角記号文字化けを解消させる