本記事はVTuber Tech #1 Advent Calendar 2019の25日目の記事です。
普段は、珠響そうきという名前でVtuber活動をしています。
チャットを取得して、グリーンバックで表示して遊んだ
右から左へ、チャットが流れていくアプリを作った。
文字色の変更や、音声を再生するコマンド、雨を降らせるコマンドなども実装した。
機能テスト
実際に使っている様子 (直近の配信)
↓好きに使ってください。
ソースコード
pyinstallerでexe化したやつ
使い方(READMEのコピペ)
起動して出てくるウィンドウのIDと書かれた横に、配信のID(URLの中にあるやつ)を入力して、okボタンを押してください。
何もなければ、緑色の画面にコメントが流れます。
-
setting.json
- "chat_id" ここに配信のIDを入力します。(起動時にソフト上で入力できます)
- "win_size" の [縦の解像度, 横の解像度] でウィンドウの解像度を変更できます。
- "back_color" の [R, G, B] で背景色を指定出来ます。
-
chat_setting.json
-
"plain_font_path" でデフォルトで使用するフォントファイルを指定できます。
-
"sound_commands" で音声系のコマンドの設定が出来ます。
新規に増やすことも出来ます。
※pygame(使用しているライブラリ)の仕様上、wavとoggのみロード出来ます。 -
"speed_commands" で文字の速度を変更するコマンドを設定できます。
"speed" でマイナスを指定すると、逆から流れます。 -
"color_commands" で文字色を変更するコマンドを設定できます。
[R,G,B]で指定してください。
"outline_color" は1ドットだけついてる縁色の設定です。 -
"rain_commands" で文字がランダムに降ってくるコマンドを設定できます。
"time" の秒数だけ、ランダムに"drops" 内のいずれかの文字が上から降ります。
初速と加速度を設定できます。
-
やったこと
- pychat を使ってYouTubeLiveのチャットを取得
- pygame で愚直に描画
はじめはSeleniumで無理やりチャットを取得してた
チャットを取得
pychatを使えば余裕でできた(感謝)。
配信URLの中にあるIDを渡してやるだけで動いた。
from pytchat import LiveChat
import time
def main()
chat = LiveChat("ここにidを入れる", callback = func)
while chat.is_alive():
time.sleep(3)
# 好きな処理を書く
# callback 引数に関数を渡すと、定期的にチャットを受け取ってくれる。
def func(data):
for c in data.items:
print(f"{c.datetime} [{c.author.name}]-{c.message} {c.amountString}")
data.tick()
ただ、アプリに組み込んだときに、python が終了しないバグ発生。
chat.terminate()
を呼び出してやると、正常終了した。
pygame で描画
日本語訳されたリファレンスがあるので、それを見つつやった。
- pygame は文字列も画像も
Surface
オブジェクトに乗っける - インストールされているフォントの指定でつまづいたので、直接
.ttf
をロードした - emoji が入ってくるとやられるので、emojiを駆逐
- 文字の縁取りが標準で実装されていないので、ここのを使った
他の機能
-
コマンド機能
- 単純に
/red
等の文字列が含まれているコメント用の処理を用意 - json を書き換えれば、文字色や音声を鳴らすコマンドは好きに増やせる
- 単純に
-
音声を再生
- もちろん pygame でできる
- 効果音用の
mixer.Sound
クラスを使った
-
ID入力
- pygame には、お馴染みの入力フォームやボタンが無い
- 起動時に、tkinter で IDを入力するウィンドウを表示
最後に
- チャット流れるの楽しい
- いくらでもコマンドを増やせて楽しい
- 配信画面が賑やかで楽しい