━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   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 に
        なる。

────────────────────────────────────────