Open8

VOICEVOXをSAPI5から操作できるようにする

しごぶしごぶ

作成意義

VOICEVOXをSAPI5から操作できるようになれば、棒読みちゃんの声質として見える。
棒読みちゃんの辞書が使える。ニコ生等のコメント読み上げソフトで標準で棒読みちゃんに対応している場合、コメント読み上げソフトの機能(辞書等)をフル活用できる。
個別に読み上げソフトのプラグインを開発する必要が無い。

しごぶしごぶ

実装方法・開発環境

Visual Studio 2019
基本「C#」
一部「C++」(ヘッダーファイルに記述の無い定数取得用)

しごぶしごぶ

参照設定

comインターフェースを実装する必要がある。
ソリューションエクスプローラーの参照を右クリックし、参照の追加を押し、参照マネージャーを表示する。
左からCOMを選択し、右上の検索欄に「TTS」と入力する。
「Microsoft TTS Engine 10.0 Type Library」が2つ出てくる。
ファイルバージョンを確認し、新しめのものにチェックを入れる。

しごぶしごぶ

SAPIイベント

エンジンの情報を呼び出し元へ通知する仕組み。

SPEI_WORD_BOUNDARYとSPEI_SENTENCE_BOUNDARYしか試していないが、
wParamとlParamのリファレンスマニュアルの説明が逆だった。

リファレンスマニュアル

変数名 内容(マニュアル)
wParam 合成される単語の先頭の文字オフセット
lParam 合成されている現在の入力ストリーム内の単語の文字長

正解

変数名 内容(正解)
wParam 合成されている現在の入力ストリーム内の単語の文字長
lParam 合成される単語の先頭の文字オフセット
しごぶしごぶ

SAPIイベントを実装したら、ニコニコ生放送用の配信アプリであるN Airで読み上げができなくなった。
読み上げを行うとN Airが落ちてしまう。

試しに、SAPIのイベントに関する部分をコメント化しテストを行ったら、

pOutputSite.AddEvents(ref sPEVENTArr[0], (uint)sPEVENTArr.Length);

の記述がダメらしいことがわかった。

しごぶしごぶ

N Airから読み上げを行った場合、XMLタグが含まれることがわかった。
SAPIの仕様として、抑揚の制御等でXMLタグが使われる。XMLタグは自動で解析され、数値として受け取ることができるが、これはそのまま読み上げ文字列へも渡されるらしい。
適切に無視する必要が有る。