UnityからVOICEROIDを呼び出すテスト。
きっかけ
Unityから外部プログラム(プロセス)を実行する - Neareal
http://neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FExternalProgram
上記記事を読んで、それなら「民安Talk」などのVOICEROIDを操作するツールを呼び出す事で、UnityからVOICEROID音声をリアルタイムに喋らせる事ができるんじゃね?というネタが降りてきた。
やってみる
民安Talkは以下のサイトからダウンロード。
publish
http://publish-tool.blogspot.jp/
セットアップ手順は割愛するが、VOICEROIDが正常に起動・再生することを確認しておくこと。
Unityで新規プロジェクトを作成し、空のGameObjectを作成。新規スクリプト「CallVoiceroid.cs」を以下の内容で作成。GameObjectにアタッチする。
using UnityEngine;
using System.Collections;
using System.Diagnostics;
public class CallVoiceroid : MonoBehaviour
{
//読み上げテキスト
public string Message = "こんにちは";
//実行可能間隔(秒)
public float WaitTime = 1.00F;
//実行EXEのフルパス
private string exepath = "C:\\(実行ファイルへのパス)\\vrx.exe";
private Process exProcess;
private float exedtime = 0.00F;
void Update ()
{
//キー入力チェック
if (Input.GetButton("Fire1")) {
//短時間での連続実行を回避
//※TIme.timeはtimescaleの影響をうける
if(Time.time - exedtime > WaitTime) {
//プロセス作成
exProcess = new Process ();
exProcess.StartInfo.FileName = exepath;
exProcess.StartInfo.Arguments = Message;
//実行
exProcess.Start ();
//実行時間を記録
exedtime = Time.time;
}
}
}
}
「(実行ファイルへのパス)」は環境に合わせて任意に変更すること。また、見ていただくとわかるが安全のため短時間での連続実行が出来ないように細工してある。デフォルト間隔は1秒。
これで実行すれば、クリックするごとに民安Talkに登録された任意のVOICEROID(結月ゆかりや弦巻マキ)が「こんにちは」としゃべる。とりあえず当初の野望は達成した。
なおこのプログラムはエディタ上のほかWindows用形式でビルド・実行可能。WebPlayer上ではビルドできない(セキュリティ上の問題)。MacやLinux用でも当然実行できない(VOICEROIDと民安Talk自体が動かないため)。なおVOICEROIDではないがMacのsayコマンドを利用して喋らせる方法はこちらの記事が詳しい。
Unity 上に日本語のテキスト読み上げ機能を簡単に実装する(Mac限定) - 強火で進め
http://d.hatena.ne.jp/nakamura001/20140414/1397481439
可能性
まあUnity上でMMDAgentのようなことが出来るかも、という思惑が多少あったのだが、そのためにはUnity上での音声認識や、あるいは外部アプリからのUnityアプリの遠隔操作などの手段を探る必要がありそうだ。前者はそういったライブラリがあれば組み込む、後者はおそらくソケット通信を利用する形になるだろうという想像はしている。
他の用途では、リアルタイムで生成したテキストを音声化というと、Unityでギャルゲーを作った時に入力したプレイヤーの名前を呼んでくれる、くらいかな…。
