146 lines
5.4 KiB
Markdown
146 lines
5.4 KiB
Markdown
|
+++
|
||
|
date = "2024-09-01"
|
||
|
tags = ["mac","ue", "obs"]
|
||
|
title = "obs+discord+beatriceを使う"
|
||
|
+++
|
||
|
|
||
|
obsは配信のためのアプリですが、windowsで使えるマイクがないので、iphoneかmacを使って音声変換してdiscordから取ってみた。このやり方がすごく良かった。あと後述する[ちやは神社](https://chihaya369.booth.pm/)が配布しているrvc modelがすごかった。
|
||
|
|
||
|
- https://github.com/w-okada/voice-changer
|
||
|
- https://huggingface.co/wok000/vcclient000/tree/main
|
||
|
|
||
|
```sh
|
||
|
./start_http.command
|
||
|
```
|
||
|
|
||
|
- https://booth.pm/ja/items/4701666
|
||
|
|
||
|
まずマイクに近づかないと音を取れないのがきつい。なので離れていても音を取るのがいい。最初はiphone(discord)からwindowsに繋いだらかなり離れててもしっかりと音を取れてよかった。
|
||
|
|
||
|
ただ、音声変換があまりうまくいかなくて、obsのVST Pluginだったかを使うのは厳しいと感じた。なので、方向を変えてmac(discord)から接続することにした。
|
||
|
|
||
|
macのgaragebandによる音声変換も使えるけど、beatriceがいいらしいのでw-okada/voice-changerから使うことにした。
|
||
|
|
||
|
## webcam motion capture
|
||
|
|
||
|
- https://webcammotioncapture.info/ja/
|
||
|
|
||
|
まずvrm4u(vmc)ではwebcam motion captureが動きません。ue5.4.4のvrm4u(202408)の環境ですが動かない。しかし、一旦、vseefaceなどを挟むと使用できます。ただし、`webcam motion capture`と`w-okada/voice-changer`を同時に使用するとアプリが落ちます。時間経過でwebcamのcaptureが動かなくなります。
|
||
|
|
||
|
## discordを使う理由
|
||
|
|
||
|
discordからでないと音量が大きくなりません。小さい声でもちゃんと拾って変換してくれるやり方として、discordを使うとうまくいきました。ただし、高価なマイクがある場合はそちらの方が良いでしょう。
|
||
|
|
||
|
## 配信環境
|
||
|
|
||
|
[mac]
|
||
|
1. VB-Cableで仮想オーディオデバイス(output)を起動
|
||
|
2. discordのinputに指定
|
||
|
3. w-okada/voice-changerを起動してoutputにいれる
|
||
|
|
||
|
[windows]
|
||
|
|
||
|
4. discordでボイスチャットに入る(別アカウント)、ここで音声が聴こえるはず
|
||
|
5. obsでdiscordの音声キャプチャ
|
||
|
6. webcam motion capture -> vseefaceでカメラからvrmを動かせるようにする
|
||
|
7. ue5を起動して、obsでウィンドウキャプチャ。youtubeアカウントに接続し、配信管理から予約、開始する。開始したあとは準備できるまで音声キャプチャをミュート。ゲームを調整できれば開始してミュートを切る
|
||
|
|
||
|
配信中にやること。操作がちょっと大変です。カメラ操作や移動操作など。
|
||
|
|
||
|
また、英語音声に変換しながら配信する予定。自動音声変換は精度が悪かったので文字列にしました。文字を打ち込むかあらかじめ用意しておいた文字を変換します。これをmacで流すとdiscordを通じてかなりはっきり英語を喋ってくれます。たまってきたら音声ファイルをpecoとかfzfで検索できるようにしておくと良さそう。
|
||
|
|
||
|
```sh:voice.zsh
|
||
|
#!/bin/zsh
|
||
|
|
||
|
d=${0:a:h}
|
||
|
f=$d/voice.json
|
||
|
vdir=$d/voice_dir
|
||
|
cfg=~/.config/ai/voice.json
|
||
|
|
||
|
if [ ! -d $vdir ];then
|
||
|
mkdir -p $vdir
|
||
|
fi
|
||
|
|
||
|
if [ -z "$1" ];then
|
||
|
ep=`cat $f|jq length`
|
||
|
ep=$((ep - 1))
|
||
|
else
|
||
|
ep=$1
|
||
|
fi
|
||
|
|
||
|
j=`cat $f|jq ".[$ep].body"`
|
||
|
n=`echo $j|jq length`
|
||
|
n=$((n - 1))
|
||
|
|
||
|
fnction voice_chat() {
|
||
|
#echo chat : https://openai.com
|
||
|
#echo voice : https://elevenlabs.io
|
||
|
|
||
|
vfile=$vdir/${ep}_${i}.mp3
|
||
|
if [ -f $vfile ];then
|
||
|
mpv $vfile
|
||
|
echo voice ok
|
||
|
read
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
echo "[$i]"
|
||
|
t=`echo $j|jq -r ".[$i].text"`
|
||
|
echo $t
|
||
|
echo ---
|
||
|
read chat_text
|
||
|
if [ -z "$chat_text" ] && [ -n "$t" ];then
|
||
|
chat_text=$t
|
||
|
fi
|
||
|
echo $chat_text
|
||
|
echo ---
|
||
|
|
||
|
chat_api=`cat $cfg|jq -r .chat_api`
|
||
|
voice_text=`curl -sL https://api.openai.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $chat_api" -d "{ \"model\": \"gpt-4o-mini\", \"messages\": [{\"role\": \"user\", \"content\": \"次の文章を英語に訳して\n\n$chat_text\"}], \"temperature\": 0.7 }"|jq ".choices.[].message.content"`
|
||
|
|
||
|
echo $voice_text
|
||
|
# like-model
|
||
|
voice_id=zrHiDhphv9ZnVXBqCLjz
|
||
|
# alice-model
|
||
|
voice_id=Xb7hH8MSUJpSbSDYk0k2
|
||
|
voice_api=`cat $cfg|jq -r .voice_api`
|
||
|
curl -sL --request POST \
|
||
|
--url https://api.elevenlabs.io/v1/text-to-speech/$voice_id \
|
||
|
--header "xi-api-key: $voice_api" \
|
||
|
--header 'Content-Type: application/json' \
|
||
|
--data "{
|
||
|
\"text\": $voice_text,
|
||
|
\"model_id\": \"eleven_multilingual_v2\",
|
||
|
\"voice_settings\": {
|
||
|
\"stability\": 0.5,
|
||
|
\"similarity_boost\": 0.5
|
||
|
}
|
||
|
}" --output $vfile && mpv $vfile
|
||
|
}
|
||
|
|
||
|
for ((i=0;i<=$n;i++))
|
||
|
do
|
||
|
voice_chat
|
||
|
done
|
||
|
```
|
||
|
|
||
|
```sh:voice.json
|
||
|
[
|
||
|
{
|
||
|
"id":1,
|
||
|
"body" :[
|
||
|
{ "text":"こんにちは、みんな"},
|
||
|
{ "text":"配信を見てくれてありがとう。またね。"}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
```
|
||
|
|
||
|
### なぜue5(editor)で起動するのか?
|
||
|
|
||
|
editorは相当重いので本来はbuildしたpackageで実行する方が良いです。しかし、buildするとvrm4u(vmc)の表情が動かなくなります。またstandaloneはもっと重くなりますので選択しません。PIEでwindowを作りません。windowを作ると新しい問題が発生しますし、動作も重くなります。
|
||
|
|
||
|
## rvc model
|
||
|
|
||
|
boothでいくつかrvc modelを販売しているけどおすすめしません。freeのものも含めて使用できるレベルのものは現状少ないと感じています。
|