マロングラッセ Mk.II

赤西真論のブログらしきもの

VOICEVOXを使ってエロゲを完全フルボイスにしてみる?

やってる人はすでにいると思うけど、今更ながらやってみたので記事にします。

これが出来るのは基本的にワムソフトが提供している吉里吉里Zを利用した作品のみです。
他のエンジンでも出来ないことも無いようですが、多分めんどくさいです。
ワムソフトが提供している吉里吉里Zを使っているかどうかの判定についても記載します。

では、やってみましょう。

0. 下準備

まず、エンジンの判定方法から。
ゲームの実行ファイルのプロパティから吉里吉里Zか判定は出来ますが、それだけでは分かりません。あと、ソフト電池でプロテクトがかかってるとそもそもプロパティに吉里吉里Zかどうかすらも出ません。
なので、非常に簡単な判定方法を記載します。

  • ディスクの直下もしくはDL版のファイルの直下に以下の3つのファイルがある
    • setup.exe
    • startup.exe
    • SupportTools.exe
  • ゲームを起動すると細かい設定が出来るメニューバーが表示される

これだけです。3つのファイルがあるタイプはほぼ確実にワムソフトが提供しています。
メニューバーについては、違っていても出る場合があるのですが、かなり細かい設定が出来るのはワムソフトのやつぐらいだと思います。
吉里吉里2の場合もあるのですが、基本的に2015年以降の作品であれば大丈夫だと思います。
なぜ2015年かというと、ゆずソフトが(おそらく)最初に読み上げ機能を実装したゲームを出したのですが、それが「サノバウィッチ」で発売が2015年だからです。

割とゆずソフトが使っているエンジンは新機能が先行して入っていることが多い気がします。フルHD作品に採用したのもゆずソフトが初めてじゃないかな。

次にVOICEVOXのダウンロードを行っておきます。
Windows版でCPU/GPUインストーラー形式のものでOKです。

voicevox.hiroshiba.jp

VOICEVOXは知らないうちにDirectMLに対応して、どんなGPUでも基本的に処理出来るようになったようです。

1. VOICEVOXの設定

VOICEVOXのインストールをしたら、起動して初期設定を行っておきます。
ウィザードに従って、テキスト入力が出来る画面にまで進めばOKです。

入力画面まで進めたら、メニューバーの 設定 > オプション を開いて、エンジンモードを「GPU」に切り替えておきます。
GPUを使ったほうが確実に音声合成の処理速度が速いです。

設定が出来たら、念のためVOICEVOXを再起動しておきましょう。

再起動したら、ブラウザでhttp://127.0.0.1:50021/docsを開いて、ページが開けるか確認してください。
開いたページはVOICEVOXに内蔵されているエンジンをREST API経由で使うための仕様が書かれた画面です。OpenAPIとかSwaggerとか呼ばれる仕様書なのですが、今はどうでもいいです。

確認が出来たら、VOICEVOXは起動させたままにしておきます。基本的に読み上げをさせるときはゲームと一緒にVOICEVOXを立ち上げておく必要があります。

2. 読み上げに必要なバッチファイルを作成する

次に吉里吉里ZとVOICEVOXを連携させるためのバッチファイルを作成します。作成するのは適当な場所でいいのですが、どのゲームでも共通して利用するものなので、ユーザーディレクトリ直下とかがいいかもしれません。

作成したら、以下の内容を記載します。ファイルを作成せずにダウンロードして、配置してもらうだけでも大丈夫です。

gist.github.com

中身の説明を少しします。まず、このバッチファイルには3つの引数を指定する必要があります。

  • %1(1つ目の引数):話者スタイルID(これは後で探し方を説明します)
  • %2(2つ目の引数):読み上げを行うテキスト
  • %3(3つ目の引数):生成された音声のファイル名

1行目はバッチファイルを作るときのおまじない(コマンドをプロンプトに出さないようにする設定)です。

2行目と3行目ですが、これは文字コードの設定をUTF-8に切り替えて、読み上げを行うテキストをテキストファイルとして一旦書き出しています。
%~2になっているのは、吉里吉里側で指定する際に付ける"を外すためです。
この作業は本当だったら行いたくないのですが、Windowscurl--data-urlencodeオプションにそのまま文字列を指定するとShift-JISとしてエンコードされて、VOICEVOX側が正しく認識しなくなります。そのため、一旦UTF-8形式のファイルに書き出して、curlにそのファイルを読み込ませることで回避を行っています。ちなみにここでめちゃくちゃハマりました。curlが標準搭載されたのはいいのですが、こういうところはWindowsだなって感じです。

4行目はVOICEVOXのAPI音声合成用のクエリを出力させる処理です。ドキュメントとしては、http://127.0.0.1:50021/docs#/%E3%82%AF%E3%82%A8%E3%83%AA%E4%BD%9C%E6%88%90/audio_query_audio_query_postになります。
ここでも一旦内容をjsonファイルとして出力しています。

5行目が4行目で取得したクエリを利用して、VOICEVOX側に実際に音声合成を依頼している部分になります。ドキュメントとしては、http://127.0.0.1:50021/docs#/%E9%9F%B3%E5%A3%B0%E5%90%88%E6%88%90/synthesis_synthesis_postになります。
作成された音声は%3で指定したファイルとして書き出されます。

これがバッチファイルの処理内容となります。curlAPIを呼び出しているだけですね。

3. 吉里吉里側の設定を行う

では、実際にゲームで使えるように設定を行っていきます。とりあえずゲームを起動します。今回は「天神乱漫 Happy Go Lucky!!」を使います。(全年齢対象版なので、正確にはエロゲではない)

ここで注意なのですが、2で作成したバッチファイルはテキストファイルやjsonファイルを外に書き出します。
その際、吉里吉里からバッチファイルを呼び出すと作業ディレクトリがゲームの実行ファイルがある場所になります。
Program Filesなど書き込みに管理者権限が必要な場所にインストールしている場合は注意してください。基本的にCドライブ直下にメーカーのディレクトリが作成されて、そこにインストールされるので大丈夫だとは思います。

起動したら、メニューバーから 文字表示 > テキスト読み上げ を開きます。この項目が無ければ、そのゲームでは読み上げを行えません。

開くと画像のようなウィンドウが出てきます。

実はWindows標準の読み上げ機能を使っても同じことが出来ます。ただ、このエンジンは声が1パターンしか無く、昔ながらの読み上げといった感じなのであまりオススメ出来ません。なので、今回はVOICEVOXを利用しているわけです。

では、設定を行っていきます。ちなみに左下にある ヘルプ をクリックすると、細かい説明を読むことが出来ます。

最初に「テキスト読み上げ機能を有効にする」にチェックを入れ、「外部アプリケーション呼び出し」を選択します。

次に選択ボタンを押して、2で作成したバッチファイルを指定します。このとき、初期状態では実行ファイルしか選択出来ない状態になっているので、ファイルの種類を「すべてのファイル」に変更します。変更するとバッチファイルを選択出来るようになるので、選択して「開く」をクリックします。

選択出来たら、音声パラメータの設定を行います。「声なし発言」と「地の文章」でそれぞれ設定が出来ます。
「共通設定」は一番下の共通設定を利用するモードです。「専用設定」は指定したタイプの文章にのみ設定を適用するモードです。「無効」は読み上げ自体を行いません。

今回はそれぞれ別の設定をしてみます。「声なし発言」と「地の文章」をどちらも「専用設定」に切り替えます。すると右側の「設定」がクリック出来るようになります。
(実際は共通にしたほうが文章的には良いかもしれません)

バッチファイルには引数が必要でしたからその設定を行います。右側の「設定」をクリックすると、次のようなウィンドウが開きます。

ここで引数の設定をします。補足説明に記載されている通り、%tが読み上げを行うテキスト、%fが音声ファイル名としてそれぞれ置換されます。

%2と%3の引数にはこの2つの項目を利用します。では、話者スタイルIDをどうするかの説明となります。

話者スタイルIDはAPIから取得します。http://127.0.0.1:50021/docs#/%E3%81%9D%E3%81%AE%E4%BB%96/speakers_speakers_getがそのAPIとなります。

Swagger UIにはAPIを呼び出す機能が付いています。APIの説明の右上にある「Try it out」をクリックし、出てきた「Execute」をクリックします。

すると「Responses」の中の「Server response」にスタイルの一覧が表示されます。jsonファイルを読み慣れている人ならすぐに読めると思います。簡単な説明をするとnameが話者名、stylesがスタイル名になります。今回必要なのは、stylesの中にあるidになります。
VOICEVOXのメニューバーにある 設定 > キャラクター並び替え・試聴 から試聴が出来ますので、まずこの画面で話者を探します。決まったら、その名前をjsonファイルから探して、名前の直下にあるstylesからスタイルを探して、IDを見つけるとよいです。
ちなみに画面上でスタイルを選べないものはすべて「ノーマル」となります。

今回は「声なし発言」を「玄野武宏(ノーマル)」、「地の文章」を「ずんだもん(ノーマル)」にしてみます。それぞれIDは113になります。

これらの内容を吉里吉里側に設定します。コマンドラインオプションと書かれている場所にそれぞれ以下の内容を記載します。(スクショはIDを間違えています)

  • 声なし発言:11 "%t" "%f"
  • 地の文章:3 "%t" "%f"

記載出来たら、試しに左下の「発声テスト」をクリックしてみましょう。「こんにちは」と声が出れば、正しく設定出来ています。

設定が出来たら、「OK」でこのウィンドウは閉じて問題ありません。

ちなみに「設定を保存」をクリックするとユーザー環境変数に設定内容が記録されます。これによって、対応している別のゲームでも同じ設定を呼び出すことが出来ます。

また、右側の音量設定や読み上げ辞書設定も適宜活用してください。ゆずソフトの場合は読み上げ辞書に最初からキャラ名の読み方が入っています。
(他のメーカーで入っているところを見たことがないので使われてない説あります)

4. Let's Play

設定が出来たら、ゲームをプレイしてみましょう。こんな感じになります。(BGMが若干大きいね)

読み間違いは当たり前のようにしますので、気にしてはいけません。気になるなら辞書登録しましょう。
作業中に流しておくとかならいいかもしれません。僕はこういうストーリーのあるものを流してしまうとそっちに集中してしまうので、やりません。
ドラマチックモードを有効にすれば、テキストが全く表示されない状態で進めることもできます。


ということで、エロゲのフルボイス化チャレンジでした。まあ、僕は使わないです。この機能をどれだけの人が使っているのか気になるところです。
スクリプトエンジン自体や吉里吉里プラグインとしてVOICEVOXが搭載されるようになると面白いかも?

ちなみに吉里吉里以外でやるなら、このページが参考になると思います。

migo0110.blog.jp