FriendlyでVOICEROID2を制御する(内部APIを攻める編)

まえがき

前回はFriendlyを利用してGUI部品を制御することでVOICEROID2をプログラムから制御しました。
しかしこの方法では音声が再生デバイスから流れ出てしまうのでデータとして取得するために一工夫が必要ですし、アクセントの調整には事前の辞書登録が必要になります。
さて、VOICEROID2のエディタはC#で書かれているため内部構造の解析が比較的容易です。
今回はFriendlyを用いてVOICEROID2エディタ内のText-To-Speech関連APIを呼び出し、音声データを取り出します。
※VOICEROIDのライブラリ自体には触りません。
※使用にはライセンスが必要なことには変わりありません。
※AHSさん、外部インターフェース付けてください。本当はこんなことしたくないんです。

環境

前回と同様にVisual Studio 2017のC#とFriendly、そして今回は音声再生のためにNAudioを用います。
使用するソフトウェアは以下の通りです。
  • Visual Studio 2017 + 「.NETデスクトップ開発」オプション
  • Friendly.Windows
  • NAudio
  • VOICEROID2

プログラム

Visual Studio 2017でC#のコンソールアプリのプロジェクトを作成します。
続いてNuGetで必要なパッケージをインストールします。
インストールするためのコマンドは以下の通りです。
Install-Package Codeer.Friendly.Windows
Install-Package NAudio
制御のためにVOICEROID2のアセンブリを参照しますので、インストールディレクトリを参照パスに追加します。(C:\Program Files (x86)\AHS\VOICEROID2)
そうしたら参照にAITalk Libraryを追加します。
今回はメッセージボックスを出すのでSystem.Windows.Formsも追加します。

以下にソースコードを示します。


VOICEROID2の音声合成エンジンの本体はaitalked.dllの中にネイティブコードの形で存在します。
このDLLをC#クラスから呼び出すクラスがAI.Talk.Core.AITalkAPIです。
VOICEROIDエディタを起動してライセンス認証を行ってもらい、Friendlyを用いてエディタのプロセス上でAITalkAPIを呼び出し、音声合成を行います。

VOICEROID2の音声合成には2段階あります。
1段階目では漢字混じりの文章を読み仮名と発音記号混じりの文字列に変換し、2段階目でそれを音声に変換します。
これを受け持つメソッドがそれぞれTextToKana()とTextToSpeech()となっています。
それぞれの使い方はソースコードをご覧ください。
正確な仕様は把握していません。
なお、音声データをGetData()で受け取る際のバッファサイズの事前計算の方法も不明です。

0 件のコメント :

コメントを投稿