プログラミングガイド¶
AITalk®5 SDK 製品を利用して音声合成を行う方法を説明します。 以降「AITalk®5 SDK 製品」は「SDK」と記します。
ここでは機能ごとの説明ではなく、SDK を利用するプログラムの開発を始めるためのガイドを提供します。 機能の細かな説明については ライブラリリファレンス を参照してください。 実装例は同梱のサンプルプログラムを参照してください。
C 言語インターフェース¶
SDK は、C 言語インターフェースで機能を提供します。 名前の衝突を避けるため、以下の規則でシンボル名 (関数名や型名など) を決定しています。
すべてのシンボルは接頭辞
AITalk_
を持ちます。AITalk_
接頭辞の次にライブラリ接頭辞を追加します。例えば、「音声合成ライブラリ」に属するシンボルは接頭辞
AITalk_Core_
を持ちます。クラスのメンバー関数として提供している機能は、さらにクラス名を接頭辞に追加します。
例えば、音声合成には
Tts
クラスを用いますが、メンバー関数は接頭辞AITalk_Core_Tts_
を持ちます。コンストラクタは
new()
・リソースの破棄関数はdelete()
の名前で提供します。 コンストラクタ・リソース破棄関数は最終的にAITalk_Core_Tts_new()
・AITalk_Core_Tts_delete()
となります。
外部ライブラリ (TensorFlow など) のシンボルはこの限りではありません。
このドキュメントでは、クラスのメンバー関数を C++ 形式で表記します。
例えば、Tts
クラスの putKeyValue()
関数は AITalk_Core_Tts_putKeyValue()
として提供しますが、ここでは Tts::putKeyValue()
と表記することがあります。
注釈
列挙型・共用体は型ですが、シンボルがライブラリに埋め込まれないため、上記規則に準拠しません。
音声合成を行う最低限の流れ¶
SDK を用いて音声合成を行う最低限の流れです。
SDK の利用には初期化・ライセンス認証が必要です。 ライセンスファイルとライセンスコードを指定して、ライセンス認証を行ってください。
音声合成を行うには Tts
クラスを利用します。
Tts
クラスのインスタンス (以下 Tts
インスタンス) を作成してください。
作成した Tts
インスタンスに言語辞書・音声辞書を読み込むと、音声合成を行うことができます。
音声辞書の読み込みには、対応した音声辞書ライセンスファイルを事前に Tts
インスタンスに読み込む必要があります。
音声合成を開始する際に、テキストとコールバック関数を Tts
インスタンスに渡します。
テキストから音声合成された合成結果が、コールバック関数で渡されます。
ライブラリは音声合成中にいくつかのイベントをコールバック関数から通知します。
音声合成によって結果を得るには、バッファ要求イベント (BufReq
) とバッファ終了イベント (BufDone
) を適切に実装する必要があります。
BufReq
は、ライブラリが音声合成結果を返すためのバッファを求めていることを通知するイベントです。
ユーザープログラムはコールバック関数の引数に適切に受け取り用のバッファを指定する必要があります。
BufDone
は、ライブラリが音声合成処理 1 単位を終えて結果を渡すために通知するイベントです。
BufReq
で指定した受け取り用バッファに音声データが格納されています。
(コールバック関数の引数として、バッファと音声データの長さも返します。)
BufDone
のあとにライブラリがそのバッファを参照することはありません。
音声合成した結果の音声データがすべてユーザーに通知されるまで、 BufReq
と BufDone
が繰り返し通知されます。
メンバー変数の操作について補足¶
Tts
インスタンスのメンバー変数を操作するには、列挙値といくつかの関数群を利用します。
例えば、言語辞書を読み込むには Tts::putKeyValue()
に以下を指定します。
列挙値
キー
言語辞書のパス
Tts
インスタンスのメンバー変数には、キーを持つものと持たないものがあります。
キー持つメンバー変数は、キーごとに値を区別することで複数の値を設定できます。
具体的には、言語辞書・音声辞書などはキーを持ち、文字エンコーディング設定などはキーを持ちません。
キーを持たないメンバー変数の操作で、キーを指定しても無視されます。
Tts::hasKey()
などの Key で終わる関数は、キーなしのメンバー変数をサポートしていません。
キーなしのメンバー変数を指定するとエラーを返します。
TtsParameter
クラスも同様の操作関数を用いて扱います。
関数・メンバー変数の詳細は ライブラリリファレンス を参照してください。
マーカー種別¶
マーカーは以下の 4 種類です。
マーカー通知モード¶
マーカーの通知モードは以下の 3 種類です。
- 無効
通知しません。
- バッファ出力
BufDone
の際に、音声データとともに通知します。 音声データの出力と同様、BufDone
のあとにライブラリがそのバッファを参照することはありません。- バッファ出力とマーカー通知イベント
マーカーを通知できるようになったらすぐマーカー通知イベントで通知します。 ライブラリは
BufDone
の後にバッファが無効になったと判断するため、BufDone
にもマーカー情報は含まれます。
並列処理¶
SDK は並列処理をサポートしています。
並列にテキスト処理・音声合成処理を行うには、複数の Tts
インスタンスを作成してください。
1 つの Tts
インスタンスでは並列処理を行うことはできません。
複数の Tts
インスタンスを扱うため、ライブラリに同一の状態 (言語辞書・音声辞書・設定) のインスタンスを複製する機能・状態をコピーする機能を用意しています。
Tts
インスタンスはデータ競合が発生しないよう内部で適切に排他制御を行います。
複数の Tts
インスタンスに同一の言語辞書・音声辞書を読み込む際には注意が必要です。
前提として Tts
インスタンスには、キーとファイルパスを指定して言語辞書・音声辞書を読み込みます。
キーに対してそれぞれの辞書のパスが紐付きます。 1
複数の Tts
インスタンスでは、異なる Tts
インスタンス間でキーが同一の場合、ライブラリ内部で同じメモリ領域を参照します。
キーが異なる場合は同一のパスでも異なるメモリ領域に言語辞書・音声辞書が読み込まれます。
インスタンスの複製機能・コピー機能を使うと、新しい Tts
インスタンスでも同一のキー・同一のパスで言語辞書・音声辞書を読み込むことができます。
警告
キーで言語辞書・音声辞書が共有されるため、異なる Tts
インスタンスであっても、同名のキーに異なるパスを指定して読み込むとエラーになります。
- 1
辞書の種類が異なる場合は同名のキーが利用できます。
注釈
AITalk 4.1 では、並列にテキスト処理を行えませんでした。 AITalk 5 はテキスト処理・音声合成処理をマルチスレッドで並列処理できます。