必要なもの
- xTranslatorの翻訳辞書
- Style-Bert-VITS2
- PHP
- PHPスクリプト
- Yakitori Audio Converter
- SSE CreationKit Fixes
- LazyVoiceFinder
学習素材を作る
LazyVoiceFinderでSkyrim.esmを開き、Voice Typeで絞り込んでファイルをエクスポートします。
街の衛兵ならMaleGuard、山賊ならMaleNordやMaleOrcあたりになるようです。農民や宿屋の主人にもMaleNordやMaleOrcあたりが使われています。
掛け声などは学習に適さないので避けた方がいいでしょう。
エクスポートしたfuzファイルから、Yakitori Audio Converterを用いてwavファイルを取り出します。
学習させる
取り出したwavファイルを使ってStyle-Bert-VITS2に学習させます。
学習手順の詳細はこちらで解説しています。
セリフのテキストデータを用意する
BaboInteractiveDia.espを翻訳しておきます。
LazyVoiceFinderでBaboInteractiveDia.espを開きます。
列にQuest Edidを追加しておきます。
衛兵のセリフならguard、道で遭遇する山賊ならencount、地域で発生するイベントならlocationといったキーワードを使って絞り込みます。
csvファイルをエクスポートします。
Quest Edidの列が必要な理由
どうやら、TopicのConditionにVoiceTypeによる絞り込みがある場合にのみ、LazyVoiceFinderはFilenameを生成して作れるようです。
BaboDialogueはFactionで絞り込んでいるようなので、Filenameが一切ありません。よって、Quest Edid、Topic Edid、FormIDからFilenameを生成する必要があります。
ちなみに、Filenameの生成ルールは以下のようになっているようです。
[Quest Edid]_[Topic Edid]_[FormID]_[Counter].fuz
対象 | 説明 | 例 |
---|---|---|
Quest Edid | 最大10文字まで。 ただし、Topic Edidが存在しない場合はそのまま? | BaboDialog |
Topic Edid | 最大15文字まで。存在しない場合は空欄。 LazyVoiceFinderはTopicのFormIDを出力するので注意。 | BaboDialogueGen |
FormID | 8文字で固定。上2桁は00で固定。 | 00D80D5F |
Counter | セリフの行番号。1から始まる。 セリフが複数行存在する場合は1ずつ増えていく。 | 1 |
最終的にこうなります。
BaboDialog_BaboDialogueGen_00D80D5F_1.fuz
一番の問題は、どのセリフにどのVoiceTypeが存在するのかわからないため、すべてのセリフにすべてのVoiceTypeで音声を作る必要があり、ファイルサイズが無駄に大きくなってしまうことです。
セリフの音声データを作る
Style-Bert-VITS2のServerを起動して音声合成させます。
>php create_dialogue_wav.php -m SkyrimMaleNord Encounter.csv
lipファイルを作る
>php create_lip.php Encounter_SkyrimMaleNord
fuzファイルを作る
Yakitori Audio Converterを用いてwavファイルとlipファイルからfuzファイルを作ります。