1
0
hugo/content/blog/2024-09-01-voice.md
2024-12-21 21:03:10 +09:00

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のものも含めて使用できるレベルのものは現状少ないと感じています。