PMDRC.DLL インターフェース

Last update 22,Nov,2004


#include "pmdrcif.h"

T_OPIF *pmdrc_dllmain( T_OPIF *TP_INDATA );
T_OPIF *pmdrc_dllfreem( T_OPIF *TP_INDATA );


機能

 pmdrc_dllmain関数は、与えられたPMDデータをもとにMMLを生成する関数である。この関数はインターフェース構造体の設定値通りに処理を行い、バッファを動的に確保してMML等出力文字列を格納し、それぞれのバッファアドレスをインターフェース構造体に格納し処理を返す。

 pmdrc_dllfreem関数は、pmdrc_dllmain関数にて確保したバッファを一括して開放する。同一アプリケーションから複数回pmdrc_dllmain関数をコールする場合に使用する。

引数 TP_INDATA

 各関数へ渡すインターフェース構造体のアドレス。

戻り値

 pmdrc_dllmain関数は、正常に処理が行われたとき、引数で指定されたアドレスが戻る。ここでいう「正常」には、「データエラーを正常に処理した」場合も含まれる。実行結果そのものは、構造体内部の変数 i_result を参照すること。
 処理が異常に終わったとき、NULLポインタが戻る。

 pmdrc_dllfreem関数は、常に引数と同じアドレスが返される。
 以下に、引数で与えるべき構造体の型「T_OPIF」の内容を示す。

変数名 方向 内容
i_iv 入力 int インターフェースバージョンを記述する。アプリケーション側で指定したインターフェースバージョンがライブラリ側と一致しない場合、エラーとなる。
i_av 入力 int アプリケーションバージョンを記述する。アプリケーション側で指定したアプリケーションバージョンがライブラリ側で対応していない場合、エラーとなる。
i_at 入力 int アプリケーションタイプを記述する。現時点ではアプリケーションタイプに応じた処理を行っていないため、DO_APTYPE_UKを指定すること。
i_lv 出力 int 実行時にライブラリによりライブラリバージョンが記述される。
i_mmllevel 入力 int 2,3,4,5 MML出力レベルを指定する。出力されるMMLに影響を与える。設定値は以下のとおり。
2 : DN_OL_DETAIL 音色のループアドレスを含め表示し得る全MMLを出力する。
3 : DN_OL_NORMAL 音長・音程に影響を与えるMMLと音色番号を出力する。
4 : DN_OL_FRAME 音長・音程に影響を与えるMMLのみ出力する。
5 : DN_OL_THROUGH 何も出力しない。
i_dumpmode 入力 int 0,1,2,3 ダンプ出力レベルを指定する。出力されるダンプリストに影響を与える。設定値は以下のとおり。
0 : DN_DL_NODUMP ダンプを出力しない。
1 : DN_DL_FRAMEDUMP フレームダンプを出力する。
2 : DN_DL_SUPERDUMP スーパーダンプを出力する。
3 : DN_DL_BOTHDUMP フレームダンプ・スーパーダンプを出力する。
i_voicemode 入力 int 0,1,2 FM音色データ出力レベルを指定する。出力される音色データリストに影響を与える。設定値は以下のとおり。
0 : DA_OFF 出力しない。
1 : DA_ON 出力する。
2 : DA_TX81ZVOICE YAMAHA製FM音源モジュール
  「V2」「V50」「TX81Z」向けに変換・編集して出力する。
i_definemode 入力 int 0,1,2,255 PMD定義データ出力レベルを指定する。出力されるPMD定義リストに影響を与える。設定値は以下のとおり。
0 : DA_OFF 出力しない。
255 : DA_ALL すべて出力する。
1 : DA_DEFL_NORMAL 一般情報(下記のものを除いたもの)のみ出力する。
2 : DA_DEFL_PARTEXTEND パート増設関連(#PPZ/FM3Extend)のみ出力する。
i_zenlen 入力 int 〜255 クロックで表されている音長を音楽的表現に変換する際に基準となる、全音符の長さ。PMD標準は96で、FMP標準は128である。ゼロを指定した場合、DLLデフォルト値(バージョンごとに不定)または自動算出された値が採用される。
i_lendef 入力 int 〜255 標準的な音長をクロック単位で指定する。PMD・FMPMMLの「l」コマンドで指定する値。i_zenlenよりも小さい値を設定する必要がある。ゼロを指定した場合、 DLLデフォルト値(バージョンごとに不定)または自動算出された値が採用される PMD・FMPMMLの「l」コマンドを使用せず、ずべての音符に音長数字を付加する。
i_lenmin 入力 int 〜255 音長を音楽的に表現する最短のクロック数。i_zenlenの約数を設定する必要がある。ゼロを指定した場合、DLLデフォルト値(バージョンごとに不定)または自動算出された値が採用される。
i_len3min 入力 int 〜255 3連符における音長を音楽的に表現する最短のクロック数。i_zenlenの約数を設定する必要がある。ゼロを指定した場合、DLLデフォルト値(バージョンごとに不定)または自動算出された値が採用される。
i_barlevel 入力 int 0,1,2 小節線処理レベルを指定する。小節の長さにはi_zenlenが使用される。出力されるMML(音長)に影響を与える。設定値は以下のとおり。
0 : DA_OFF 小節線分割処理を行わない。
1 : DA_AUTO 小節線分割処理する/しないを自動で判断し、行う。
2 : DA_FORCED 小節線分割処理を強制的に行う。
小節の長さにはi_zenlenが使用されているが、これは変更する可能性がある。
i_autothresh 小節線処理自動レベルを指定する。小節線処理における起点の設定を、自動判断するか、データ先頭に設定するかを選択できる。設定値は以下のとおり。
0 : DN_BARSTART_AUTO 小節線処理の起点を自動で設定する(1の場合と同じ)。
1 : DN_BARSTART_MARKL 小節線処理の起点を自動で設定する。
2 : DN_BARSTART_TOP 小節線処理の起点をデータ先頭に設定する。
i_autodelay 未使用
i_mandelay 未使用
i_barlen 未使用
i_manoffset 入力 int 0〜 小節線処理を行う際、小節の起点に対するオフセットを指定する。小節線処理を行う最初のポイントを演奏開始からのクロック数にて指定する。
cp_indata 入力 char * アドレス 解析を行うPMDデータのアドレスを指定する。PMDデータはメモリ上に展開されたもので、終端は設けない(ライブラリはデータの終端をPMDデータ内部情報から特定する)。データフォーマットが壊れている場合及びDLLが未対応のデータをここに指定した場合、アプリケーションは異常終了する(DLLで保護はしていない)。
i_result 出力 int ライブラリが実行結果を記述する。結果の内容は以下の通り。
0 DR_NORMAL 正常終了。
-1 DR_E_FATALERROR 致命的なロジックエラー。
-2 DR_E_NEIFVERSION インターフェースバージョンが一致しない。
-3 DR_E_NSAPVERSION アプリケーションバージョンがサポート外。
-4 DR_E_NGIF インターフェース内容が正しくない。
-5 DR_E_BADDATA PMDデータ内にエラーが存在する。
-6 DR_E_NSDTVERSION PMDデータバージョンがサポート外。
-7 DR_E_SHORTBUF バッファが不足している内部エラー。
1 DR_W_BADMML 出力MMLが正しくない(正しく解析できなかった)。
i_directmes 入力 int 0,1 DLL内部での制御メッセージを、標準エラー出力にリアルタイム出力するかしないかを指定する。呼び出し元のアプリケーションがコマンドラインプログラムである場合に使う。設定値は以下の通り。
0:DA_OFF:出力しない
1:DA_ON:出力する
ただし、どちらの設定でも、メッセージ出力バッファ(cps_out[0])には書き込まれる。
cps_out[0] 出力 char * 文字列 ライブラリにより、実行時メッセージ出力バッファアドレスが設定される。NULLの場合は、当該バッファにデータが出力されていないことを示す(通常、一部のインターフェースエラー発生時等を除き、処理の正常・異常を問わず、必ず出力される)。
使用後、このアドレスは pmdrc_dllfreem( ) にて解放する必要がある。
cps_out[1] 出力 char * 文字列 ライブラリにより、MML出力バッファアドレスが設定される。NULLの場合は、当該バッファにデータが出力されていないことを示す。
使用後、このアドレスは pmdrc_dllfreem( ) にて解放する必要がある。
cps_out[2] 出力 char * 文字列 ライブラリにより、フレームダンプ出力バッファアドレスが設定される。NULLの場合は、当該バッファにデータが出力されていないことを示す。フレームダンプとは、「各演奏チャンクの命令コードのみを表示する」ダンプである。
使用後、このアドレスは pmdrc_dllfreem( ) にて解放する必要がある。
cps_out[3] 出力 char * 文字列 ライブラリにより、スーパーダンプ出力バッファアドレスが設定される。NULLの場合は、当該バッファにデータが出力されていないことを示す。スーパーダンプとは、「全チャンクにおける詳細情報とステップカウンタを表示する」ダンプである。
使用後、このアドレスは pmdrc_dllfreem( ) にて解放する必要がある。
cps_out[4] 出力 char * 文字列 ライブラリにより、FM音色定義出力バッファアドレスが設定される。NULLの場合は、当該バッファにデータが出力されていないことを示す。
使用後、このアドレスは pmdrc_dllfreem( ) にて解放する必要がある。
cps_out[5] 出力 char * 文字列 ライブラリにより、PMD定義出力バッファアドレスが設定される。NULLの場合は、当該バッファにデータが出力されていないことを示す。
使用後、このアドレスは pmdrc_dllfreem( ) にて解放する必要がある。