━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MikoVoice API ( Application Programming Interface ) 仕様 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MikoVoice の API は、次の関数を提供しています。 ・MikoVoiceOutSync 音声記号文字列から音声を合成して発声(同期型) ・MikoVoiceOutAsync 音声記号文字列から音声を合成して発声(非同期型) ・MikoVoiceOutToBuf 音声記号文字列から合成した音声の波形データを渡す ・MikoVoiceOutPause 発声を休止 ・MikoVoiceOutRestart 発声を再開 ・MikoVoiceOutStop 発声を停止 ・MikoVoiceOutGetStat 発声状態を取得 ・MikoVoiceOutGetVers MikoVoice の現バージョンを取得 これらの関数に関しては、後程、詳しく説明しますが、その前に、基本事項を説明して おきます。 MikoVoice 関連のインクルードファイル、ライブラリーファイル、実行型式ファイルに 関しては、「プログラミング」で説明しています。また、ここでは、プログラム例を 示しています。 MikoVoice には、特定の「音声記号」で発声の仕方を指定しますが、この「音声記号」 に関しては、「音声記号の説明」で説明しています。 MikoVoice の API には、「音声記号」の文字列から音声を合成する関数がありますが、 この文字列の文字コードは、ユニコードの UTF16LE にする必要があります。Shift-JIS ではないので、ご注意ください。 MikoVoice は、同時に8音声まで重ねて出力できるようになっています。その各音声の 出力先を、「音声出力ポート」と呼んでいます。各「音声出力ポート」には、0 〜 7 の 識別番号が振られています。 1つの音声出力ポートには、8トラックまで指定できるので、原理的には最大64音声 まで同時に発声できます。音声出力ポートでの重ね合せは、主にOSが担っています。 一方、トラックでの重ね合せは、MikoVoice 自身が処理しています。 本ライブラリーは、マルチスレッドで使用しても安全なように設計されています。 以下、本ライブラリー関数の詳細を説明します。ここでは、Windows プログラミング用 に定義されているデータ型( LPCWSTR, ULONG 等 )も使用しています。 ──────────────────────────────────────── MikoVoiceOutSync 関数 機能: 音声記号文字列から音声を合成して発声する(同期型) 構文: LONG MikoVoiceOutSync( LPCWSTR text ); 引数: text 音声記号文字列( UTF16LE, 0終端 )へのポインタ 返値: 本音声を出力したポートの番号(正常時) or -1(異常時) 説明: 本関数は、発声の完了を待って戻って来る。発声の完了と同期する。 用例: MikoVoiceOutSync( L"こ[んにちわ]" ); ──────────────────────────────────────── MikoVoiceOutAsync 関数 機能: 音声記号文字列から音声を合成して発声する(非同期型) 構文: LONG MikoVoiceOutAsync( LPCWSTR text, HWND hWnd, UINT Msg, LPARAM lParam ); 引数: text 音声記号文字列( UTF16LE, 0終端 )へのポインタ hWnd 発声完了メッセージの送信先ウィンドウのハンドル。 この値を NULL にすれば、当メッセージは送信されない。 Msg 発声完了メッセージの識別値。 この値は、プライベート範囲内で、ユーザーが任意に決めて良い。 lParam 発声完了メッセージの第2パラメータの値。 この値は、ユーザーが任意に決めて良い。 返値: 本音声が出力されるポートの番号(正常時) or -1(異常時) 説明: 本関数は、発声の手続きをした後すぐに戻って来る。発声の完了を待たない。 発声の完了と同期しない。そのため、発声中でも、他の処理を実行できる。 発声完了は、ウィンドウへのメッセージで通知される。そのウィンドウは、 引数の hWnd で指定する。このメッセージの識別値と第2パラメータは、 それぞれ、引数の Msg と lParam の値になり、第1パラメータ wParam は、 本関数の返値と同じになる。 本関数で発声してそれが終わるまでに、再度、本関数で発声すると、最初の 音声に次の音声が重なる。この重なりは、最大8音声まで可能。 本関数の返値は、音声が出力されたポート番号を示す。 用例: MikoVoiceOutAsync( L"は[じめま]して、よ[ろしく]、お[ねがいしま]す。", hWnd, WM_APP + 0x801, 1234 ); ──────────────────────────────────────── MikoVoiceOutToBuf 関数 機能: 音声記号文字列から合成した音声の波形データを指定関数に渡す 構文: LONG MikoVoiceOutToBuf( LPCWSTR text, WAVRECFNC lpWavRecFnc ); 引数: text 音声記号文字列( UTF16LE, 0終端 )へのポインタ lpWavRecFnc 音声合成された波形データを受け取る関数へのポインタ 返値: 音声合成された波形データの総バイト数(正常時) or -1(異常時) 説明: 本関数は、音声合成された波形データを適当なサイズごとに分けて、 lpWavRecFnc のポイント先の関数に渡していく。 引数 lpWavRecFnc の型 WAVRECFNC は、次の定義になっている。 typedef BOOL (CALLBACK *WAVRECFNC)( LPCVOID, LONG ); このポイント先の関数は、下記の「 WavRecFnc 関数(形式)」参照。 補説: 合成される波形データのサイズは、音声記号文字列に依存するが、場合に よっては膨大になるため、適当なサイズに分割して渡す形態になっている。 用例: MVoiceTest2.c 参照。ここでは、音声合成された波形データを、Windows 標準の wav 形式でファイルに書き込む例を示す。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WavRecFnc 関数(形式) 説明: 本関数は、MikoVoiceOutToBuf 関数から呼ばれるコールバック関数(形式)で、 音声合成された波形データを受け取る。 構文: BOOL CALLBACK WavRecFnc( LPCVOID bp, LONG bn ); 引数: bp 波形データのアドレス bn 波形データのバイト数 返値: TRUE(正常受取時)or FALSE(異常時) 補説: この返値が FALSE の時、MikoVoiceOutToBuf 関数は、以降の処理を中断し、 異常終了を示す -1 を返す。 注意: この関数は、ユーザーが定義する。MikoVoice API が提供する関数ではない。 用例: MVoiceTest2.c 参照。ここでは、受け取った波形データをファイルに書き込む 例を示す。 ──────────────────────────────────────── MikoVoiceOutPause 関数 機能: 指定された音声出力ポート(複数可)の発声を一時休止する 構文: ULONG MikoVoiceOutPause( ULONG PortBits ); 引数: PortBits 発声を休止する音声出力ポートを示すビット値。 このビット 0 〜 7 が、それぞれ、音声出力ポート 0 〜 7 に対応し、 そのビット値が 1 の時、そのポートが休止対象になる。 この引数のビット 0 〜 7 以外のビットは、無視される。 返値: 指定されたポートのうち休止状態に変わったポートを示すビット。 ビットとポートの対応は、引数の場合と同じ。 補説: 停止中や休止中のポートに対しては、特に何もしない。 休止中の音声出力ポートは、MikoVoiceOutRestart 関数で再開可能。 用例: MikoVoiceOutPause( 1 ); // 音声出力ポート 0 の発声を休止する MikoVoiceOutPause( 0x03 ); // 音声出力ポート 0 と 1 の発声を休止する MikoVoiceOutPause( -1 ); // 全音声出力ポートの発声を休止する ──────────────────────────────────────── MikoVoiceOutRestart 関数 機能: 指定された音声出力ポート(複数可)の発声を再開する 構文: ULONG MikoVoiceOutRestart( ULONG PortBits ); 引数: PortBits 発声を再開する音声出力ポートを示すビット値。 このビット 0 〜 7 が、それぞれ、音声出力ポート 0 〜 7 に対応し、 そのビット値が 1 の時、そのポートが再開対象になる。 この引数のビット 0 〜 7 以外のビットは、無視される。 返値: 指定されたポートのうち再開したポートを示すビット。 ビットとポートの対応は、引数の場合と同じ。 補説: 再開は、休止したところの続きからになる。 停止中や発声中のポートに対しては、特に何もしない。 用例: MikoVoiceOutRestart( 1 ); // 音声出力ポート 0 の発声を再開する MikoVoiceOutRestart( 0x05 ); // 音声出力ポート 0 と 2 の発声を再開する MikoVoiceOutRestart( -1 ); // 全音声出力ポートの発声を再開する ──────────────────────────────────────── MikoVoiceOutStop 関数 機能: 指定された音声出力ポート(複数可)の発声を停止する 構文: ULONG MikoVoiceOutStop( ULONG PortBits ); 引数: PortBits 発声を停止する音声出力ポートを示すビット値。 このビット 0 〜 7 が、それぞれ、音声出力ポート 0 〜 7 に対応し、 そのビット値が 1 の時、そのポートが停止対象になる。 この引数のビット 0 〜 7 以外のビットは、無視される。 返値: 指定されたポートのうち停止状態のポートを示すビット。 ビットとポートの対応は、引数の場合と同じ。 補説: 発声中や休止中のポートを一旦停止させると再開はできない。 既に停止中のポートが対象の場合、特に何もしないが、返値のビットには 反映される。 用例: MikoVoiceOutStop( 1 ); // 音声出力ポート 0 の発声を停止する MikoVoiceOutStop( 0x06 ); // 音声出力ポート 1 と 2 の発声を停止する MikoVoiceOutStop( -1 ); // 全音声出力ポートの発声を停止する ──────────────────────────────────────── MikoVoiceOutGetStat 関数 機能: 指定された音声出力ポートの発声状態を取得する 構文: LONG MikoVoiceOutGetStat( LONG PortId ); 引数: PortId 発声状態を取得する音声出力ポートの番号( 有効範囲: 0 〜 7 ) 返値: 発声状態を示す値。この値は、MikoVoice.h で、次のように定義されている。 #define MVO_STAT_STOPPED 0 // 停止中 #define MVO_STAT_OPENING 1 // 準備中 #define MVO_STAT_PLAYING 2 // 発声中 #define MVO_STAT_PAUSING 3 // 休止中 #define MVO_STAT_ERROR (-1) // エラー 用例: MikoVoiceOutGetStat( 0 ); // 音声出力ポート 0 の発声状態を取得 ──────────────────────────────────────── MikoVoiceOutGetVers 関数 機能: MikoVoice の現在のバージョンを取得する 構文: LONG MikoVoiceOutGetVers(); 引数: 無し 返値: (主バージョン)× 100 +(副バージョン) 補説: 例えば、主バージョンが 1 で、副バージョンが 20 の場合、返値は、120 に なる。 ────────────────────────────────────────