Yggdrasil Seeds : Software Works : DualMusik : DUMPLAY.DLL
PV[1031884]

DUMPLAY.DLL


DUM2MID/DUM2MIDWの本体で、DUMを解析してMIDIメッセージなどを取り出すものです。
他のアプリケーションからでも使えるように作ってありますが、ここでは Borland C + Windows API で使用することを想定しています。これ以外については面倒みきれないので、適当に解釈しといてください。

組み込み

DUMPLAY.DLL を利用するソースファイルに DUMPLAY.H をインクルードします。また、インポートライブラリを利用する場合は DUMPLAY.LIB をリンクします。

使用手順

DUMPLAY.DLL からインポートできる関数名は "dp_const" "dp_version" のみです。インポートライブラリを利用する場合は、この関数を直接呼び出せます。
そうでない場合は、自前で関数のポインタを取得する必要があります。

HANDLE dllh; DPCONST dp_const; DPVER dp_version; /*説明のためエラー処理は省略してるけど、実際は省略するべからず*/ dllh=LoadLibrary("DUMPLAY.DLL"); dp_const=(DPCONST)GetProcAddress(dllh,"dp_const"); dp_version=(DPVER)GetProcAddress(dllh,"dp_version");
DUMPLAY.DLL での処理するにあたり、様々なコールバック関数が呼び出される機会があります。これらは必要に応じて任意に用意し、不要ならNULLにしておきます。
なお、コールバック関数のターゲットは途中で変更することができません。処理の切り替えが必要な場合は、コールバック関数の内部で分岐させてください。
(コールバック関数の詳細は後述)
(V0.40以降)
cballoc,cbfreeをNULLにしても有効となった。ただし、どちらかがNULLの場合は両方ともNULLと同様に扱われる。

DUMPLAY.DLL を使うには、まずインスタンスを取得する必要があります。
(インスタンス関数の詳細も後述)


void *data; /*DUMデータ先頭位置*/ unsigned long size; /*DUMデータサイズ*/ void *usr; /*ユーザポインタ(コールバックに渡される任意値)*/ PDPIF dp; DPHOOKTBL ht; DPERRCODE err; memset(&ht,0,sizeof(DPHOOKTBL)); /*必要なコールバック関数をここで設定*/ dp=dp_const(16,data,size,&ht,sizeof(DPHOOKTBL),usr,&err); if(!dp){ /*返値がNULLの場合はエラー発生: errにエラーコード格納*/ }
再生部は以下のような感じ。

PDPIF dp; /*インスタンス*/ int t,nt,lt; nt=lt=GetTickCount(); while(1){ Sleep(10); /*1/100秒毎にループを回すときのウェイト*/ nt=GetTickCount(); t=nt-lt; lt=nt; dp->time(dp,t,65536); }
ここで得たインスタンスは、使用が済んだら必ず解放しなければなりません。

PDPIF dp; /*インスタンス*/ volatile PDPIF p; /*安全に解放するため、解放前に変数の内容は消しておく*/ p=dp; dp=NULL; p->purge(p);

コールバック関数

C++ のクラス関数みたいな書き方してるけど、実際は関数へのポインタを構造体に格納したものです。(後述のインスタンス関数についても同じ。)
なお、コールバック関数は基本的に即時性が要求されます。ここで時間のかかる処理を実行するとシーケンス再生における時間軸が不安定になります。PCMロードなど止むを得ない場合はタイマーを止めるなどの配慮が必要となります。
DPERRCODE DUMCALLTYPE DPHOOKTBL::cberror(PDUMVOID usr,DUMU4B pos,DPERRCODE code)

引数
usrユーザポインタ
dp_constの引数がそのまま
posエラーが起きた位置(byte, DUM先頭からのオフセット)
codeエラーコード

処理内容
インスタンス関数の処理中にエラーが発生したときに呼ばれる。
エラー処理をユーザ側で行う場合に設定しておく。

返値
DPERR_NONEエラーを無視して処理を続行する場合に返す。
ただ、続行してもまともな動作は期待できないので、普通は使わない。
otherエラーコードを返す。通常、codeの内容をそのまま返す。


PDUMVOID DUMCALLTYPE DPHOOKTBL::cballoc(PDUMVOID usr,DUMU4B size)

引数
usrユーザポインタ
dp_constの引数がそのまま
size確保すべきメモリサイズ(byte)

処理内容
インスタンス関数の処理中にメモリを確保する必要がでてきたときに呼ばれる。
通常、return malloc(size); だけでよい。
なお、このコールバックは、必ず設定しなければならない。
(V0.40以降)
NULLにするとディフォルトのメモリ管理関数を使う。また、cbfreeの設定が無効となり、これもNULLと同様に扱われる。

返値
NULLメモリが確保できなかったときに返す。
other確保したメモリの先頭アドレスを返す。


void DUMCALLTYPE DPHOOKTBL::cbfree(PDUMVOID usr,PDUMVOID mem)

引数
usrユーザポインタ
dp_constの引数がそのまま
mem解放すべきメモリの先頭アドレス

処理内容
インスタンス関数の処理中に確保したメモリを解放する必要がでてきたときに呼ばれる。
通常、free(mem); だけでよい。
なお、このコールバックは、必ず設定しなければならない。
(V0.40以降)
NULLにするとディフォルトのメモリ管理関数を使う。また、cballocの設定が無効となり、これもNULLと同様に扱われる。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbtime(PDUMVOID usr,DUMU4B time)

引数
usrユーザポインタ
dp_constの引数がそのまま
timeタイムカウンタの現在値

処理内容
DPIF::time または DPIF::step 処理において、タイムカウンタがインクリメントされる度に呼ばれる。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbstep(PDUMVOID usr,DUMU4B step)

引数
usrユーザポインタ
dp_constの引数がそのまま
stepステップカウンタの現在値

処理内容
DPIF::time または DPIF::step 処理において、ステップカウンタがインクリメントされる度に呼ばれる。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbnoteoff(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMU4B note,DUMU4B vel)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
noteノート番号(0~127)
velヴェロシティ(1~127)

処理内容
インスタンス関数の処理中にノートオフをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0x80|mch|(note<<8)|(vel<<16) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbnoteon(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMU4B note,DUMU4B vel)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
noteノート番号(0~127)
velヴェロシティ(1~127)

処理内容
インスタンス関数の処理中にノートオンをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0x90|mch|(note<<8)|(vel<<16) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbkeypress(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMU4B note,DUMU4B val)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
noteノート番号(0~127)
val設定値(0~127)

処理内容
インスタンス関数の処理中にキープレッシャをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0xa0|mch|(note<<8)|(val<<16) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbctrlchg(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMU4B code,DUMU4B val)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
codeコントロール番号(0~127)
val設定値(0~127)

処理内容
インスタンス関数の処理中にコントロールチェンジをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0xb0|mch|(code<<8)|(val<<16) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbprogchg(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMU4B val)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
val設定値(0~127)

処理内容
インスタンス関数の処理中にプログラムチェンジをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0xc0|mch|(val<<8) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbchpress(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMU4B val)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
val設定値(0~127)

処理内容
インスタンス関数の処理中にチャネルプレッシャをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0xd0|mch|(val<<8) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbpitbend(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B mch,DUMS4B val)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
mchMIDIチャネル番号(0~15)
val設定値(-8192~+8191)

処理内容
インスタンス関数の処理中にプログラムチェンジをMIDIに送信する必要がでてきたときに呼ばれる。
Windows APIを使う場合、midiOutShortMsg() の第2引数に 0xe0|mch|(((val+8192)&127)<<8)|((((val+8192)>>7)&127)<<16) を指定すればよい。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


PDUMVOID DUMCALLTYPE DPHOOKTBL::cbgetsysx(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B len)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
len必要な長さ(1~255byte)

処理内容
インスタンス関数の処理中にシステムエクスクルーシヴ用送信バッファを確保する必要がでてきたときに呼ばれる。
Windows APIを使う場合、このバッファは第1引数を GMEM_MOVEABLE|GMEM_SHARE にした GlobalAlloc() で確保し、且つ GlobalLock() でアドレスを得たものでなければならない。
因みに、MIDIへ一度に送信できるサイズは127バイトまでと決まっている。DUMにおいては他の処理にも使えるため最大255バイトとなっているが、MIDIへの送信を目的とする場合は128バイト以上のデータを一度に送ってはならない。len>127 のときはNULLを返すのが無難。

返値
NULLバッファが確保できなかったとき、またはシステムエクスクルーシヴの送信を阻止したいときに返す。
other確保したバッファの先頭アドレスを返す。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbputsysx(PDUMVOID usr,DUMU4B dev,DUMU4B trk,DUMU4B len)

引数
usrユーザポインタ
dp_constの引数がそのまま
devMIDIディヴァイス番号(0~15)
trkDUMトラック番号(0~255)
len必要な長さ(1~255byte)

処理内容
DPHOOKTBL::cbgetsysx() で NULL 以外を返したとき、バッファにデータをセットした後に呼ばれる。
Windows APIを使う場合、処理手順は以下のような感じ。


HMIDIOUT hmidi; /*midiOutOpen()の返値*/ /*下2つはGlobalAlloc,GMEM_MOVEABLE|GMEM_SHARE,GlobalLockで確保しておく*/ MIDIHDR *hp; /*SysX送信用作業領域()*/ void *dp; /*SysX送信バッファ*/ int perr,merr; memset(hp,0,sizeof(MIDIHDR)); hp->lpData=dp; hp->dwBufferLength=len; perr=midiOutPrepareHeader(hmidi,hp,sizeof(MIDIHDR)); if(!perr){ merr=midiOutLongMsg(hmidi,hp,sizeof(MIDIHDR)); if(!merr)midiOutUnprepareHeader(hmidi,hp,sizeof(MIDIHDR)); }

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbmemo(PDUMVOID usr,DUMU4B trk,PDUMVOID str,DUMU4B len)

引数
usrユーザポインタ
dp_constの引数がそのまま
trkDUMトラック番号(0~255)
str文字列の先頭アドレス
len文字列の長さ(0~4095byte)

処理内容
シーケンスの解析中、;コマンドで埋め込まれた文字列が見つかったときに呼ばれる。
この文字列をユーザ側で利用する場合に設定しておく。

(注)
DUMCMAIN.DLLは ; コマンドで埋め込んだ文字列の後に0を付加するが、それ以外の手段で埋め込まれた文字列については感知しない。このため、任意のDUMデータを再生するプログラムにおいては、文字列の終端が0であることを前提として文字列を処理してはならない。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbtempo(PDUMVOID usr,DUMU4B trk,DUMU4B val)

引数
usrユーザポインタ
dp_constの引数がそのまま
trkDUMトラック番号(0~255)
val設定値(1~16777215)
(V0.25 rel.2以降)
SMFの仕様に合わせ、trkには強制的に0が設定される。

処理内容
インスタンス関数の処理中にテンポが変更されたときに呼ばれる。
変更処理自体は既に完了しているためユーザ側で操作することはできないが、変更後の値を知りたい場合に設定しておく。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DPERRCODE DUMCALLTYPE DPHOOKTBL::cbextcmd(PDUMVOID usr,DUMU4B trk,DUMU4B code,PDUMVOID data,DUMU4B len)

引数
usrユーザポインタ
dp_constの引数がそのまま
trkDUMトラック番号(0~255)
codeコマンドコード(0~255)
data設定データ先頭アドレス
len設定データの長さ(0~255byte)
(V0.25 rel.2以降)
SMFの仕様に合わせ、codeが81,88,89のときに限りtrkには強制的に0が設定される。

処理内容
シーケンスの解析中、一部を除いた拡張コマンドが見つかったときに呼ばれる。
これらをユーザ側で処理する場合に設定しておく。
拡張コマンドの詳細については別表を参照。

返値
DPERR_NONE処理を続行する場合に返す。
other任意のエラーコードを返す。処理は中断される。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbloop(PDUMVOID usr,DUMU4B trk,DUMU4B lpcnt)

引数
usrユーザポインタ
dp_constの引数がそのまま
trkDUMトラック番号(0~255)
lpcnt現在のループ回数

処理内容
シーケンスの解析中、無限ループの終端に達したときに呼ばれる。
ループ回数を知りたいときや、ループの可否をユーザ側で制禦する場合に設定しておく。

返値
0ループを許可する場合に返す。
1ループを抑制する場合に返す。


PDUMVOID DUMCALLTYPE DPHOOKTBL::cbpcmload(PDUMVOID usr,DUMU4B prog,PDUMVOID file,DUMU4B ch,DUMU4B sw)(V0.40以降)
PDUMVOID DUMCALLTYPE DPHOOKTBL::cbloadpcm(PDUMVOID usr,DUMU4B prog,PDUMVOID file)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
progバンク番号(0~127)*128+プログラム番号(0~127)
fileファイル名
chPCM番号
swPCM制禦スウィッチ

処理内容
拡張コマンド#128でPCMのロードが必要なときに呼ばれる。
ファイル名は基本的にシーケンスデータファイルからの相対パス指定となる。

返値
NULLロードに失敗した(以後、このPCMに対する処理は全て無視するようになる)
otherロードしたPCMの識別タグ


PDUMVOID DUMCALLTYPE DPHOOKTBL::cbpcmdup(PDUMVOID usr,PDUMVOID unit)(V0.40以降)
PDUMVOID DUMCALLTYPE DPHOOKTBL::cbduppcm(PDUMVOID usr,PDUMVOID unit)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)

処理内容
拡張コマンド#129でPCMの複製が必要なときに呼ばれる。

返値
NULL複製に失敗した(以後、このPCMに対する処理は全て無視するようになる)
other複製したPCMの識別タグ


void DUMCALLTYPE DPHOOKTBL::cbpcmfree(PDUMVOID usr,PDUMVOID unit)(V0.40以降)
void DUMCALLTYPE DPHOOKTBL::cbfreepcm(PDUMVOID usr,PDUMVOID unit)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)

処理内容
cbloadpcm,cbduppcmで確保したPCMを破棄する必要があるときに呼ばれる。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpcmplay(PDUMVOID usr,PDUMVOID unit,DUMU4B flg)(V0.40以降)
DUMBOOL DUMCALLTYPE DPHOOKTBL::cbplaypcm(PDUMVOID usr,PDUMVOID unit,DUMU4B flg)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)
flgフラグ(0=ワンショット,1=ループ)
処理内容
cbpcmload,cbpcmdupで確保したPCMを再生する必要があるときに呼ばれる。
返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


void DUMCALLTYPE DPHOOKTBL::cbpcmstop(PDUMVOID usr,PDUMVOID unit)(V0.40以降)
void DUMCALLTYPE DPHOOKTBL::cbstoppcm(PDUMVOID usr,PDUMVOID unit)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)

処理内容
cbplaypcmで再生したPCMを停止する必要があるときに呼ばれる。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpcmvol(PDUMVOID usr,PDUMVOID unit,DUMS4B vol)(V0.40以降)
DUMBOOL DUMCALLTYPE DPHOOKTBL::cbvolpcm(PDUMVOID usr,PDUMVOID unit,DUMS4B vol)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)
vol音量(0=ミュート ~ 16384=最大)

処理内容
cbpcmload,cbpcmdupで確保したPCMの音量を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpcmpan(PDUMVOID usr,PDUMVOID unit,DUMS4B pan)(V0.40以降)
DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpanpcm(PDUMVOID usr,PDUMVOID unit,DUMS4B pan)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)
pan定位(-16384=左 ~ 0=中央 ~ +16384=右)

処理内容
cbpcmload,cbpcmdupで確保したPCMの定位を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpcmpit(PDUMVOID usr,PDUMVOID unit,DUMS4B pit)(V0.40以降)
DUMBOOL DUMCALLTYPE DPHOOKTBL::cbfreqpcm(PDUMVOID usr,PDUMVOID unit,DUMS4B freq)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)
pit音程(-32768 ~ -256= 半音下 ~ 0=原音 ~ +256=半音上 ~ +32767)

処理内容
cbpcmload,cbpcmdupで確保したPCMの音程を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpcmpos(PDUMVOID usr,PDUMVOID unit,DUMU4B pos)(V0.40以降)
DUMBOOL DUMCALLTYPE DPHOOKTBL::cbpospcm(PDUMVOID usr,PDUMVOID unit,DUMU4B pos)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)
pos再生位置(0=先頭 ~ 16384=最後尾)

処理内容
cbpcmload,cbpcmdupで確保したPCMの再生位置を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMU4B DUMCALLTYPE DPHOOKTBL::cbpcmgetsta(PDUMVOID usr,PDUMVOID unit)(V0.40以降)
DUMU4B DUMCALLTYPE DPHOOKTBL::cbgetpcmsta(PDUMVOID usr,PDUMVOID unit)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
unitPCM識別タグ(cbpcmloadの返値)

処理内容
cbpcmload,cbpcmdupで確保したPCMの状態を取得する必要があるときに呼ばれる。

返値
以下のフラグの論理和を返す。
DP_PCMSTA_PLAY再生中
DP_PCMSTA_LOOPループ再生中
DP_PCMSTA_TERM(謎; DSBSTATUS_TERMINATEDと同内容)
DP_PCMSTA_LOSTバッファ消失
DP_PCMSTA_INVALID関数呼び出しエラー


void DUMCALLTYPE DPHOOKTBL::cbstropen(PDUMVOID usr,DUMU4B ctxt,PDUMVOID file,DUMU4B ch,DUMU4B sw)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号
fileファイル名
chPCM番号
swPCM制禦スウィッチ

処理内容
PCMのストリーム再生準備が必要なときに呼ばれる。
ファイル名は基本的にシーケンスデータファイルからの相対パス指定となる。


void DUMCALLTYPE DPHOOKTBL::cbstrclose(PDUMVOID usr,DUMU4B ctxt)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号

処理内容
cbstropenで準備したストリームを破棄する必要があるときに呼ばれる。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbstrplay(PDUMVOID usr,DUMU4B ctxt)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号

処理内容
cbstropenで準備したストリームの再生が必要なときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


void DUMCALLTYPE DPHOOKTBL::cbstrstop(PDUMVOID usr,DUMU4B ctxt)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号

処理内容
cbstrplayで再生たストリームの停止が必要なときに呼ばれる。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbstrvol(PDUMVOID usr,DUMU4B ctxt,DUMS4B vol)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号
vol音量(0=ミュート ~ 16384=最大)

処理内容
cbstropenで準備したストリームの音量を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbstrpan(PDUMVOID usr,DUMU4B ctxt,DUMS4B pan)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号
pan定位(-16384=左 ~ 0=中央 ~ +16384=右)

処理内容
cbstropenで準備したストリームの定位を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbstrpit(PDUMVOID usr,DUMU4B ctxt,DUMS4B pit)(V0.40以降)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号
pit音程(-32768 ~ -256= 半音下 ~ 0=原音 ~ +256=半音上 ~ +32767)

処理内容
cbstropenで準備したストリームの音程を変更する必要があるときに呼ばれる。

返値
0処理が成功した場合に返す。
1処理が失敗した場合に返す。


DUMBOOL DUMCALLTYPE DPHOOKTBL::cbstrsync(PDUMVOID usr,DUMU4B ctxt,DUMS4B desc)(V0.40以降)
DUMBOOL DUMCALLTYPE DPHOOKTBL::cbsync(PDUMVOID usr,DUMS4B desc)(V0.30)

引数
usrユーザポインタ
dp_constの引数がそのまま
ctxtストリームコンテクスト番号
desc種別識別用の値(拡張コマンド#137が渡す値)

処理内容
トラックが同期を必要としているときに呼ばれる。
この関数が0以外を返し続けている間、トラックの進行が止まる。

返値
0同期が完了している場合に返す。
1未完了の場合に返す。


インスタンス関数


DPERRCODE DUMCALLTYPE DPIF::purge(PDPIF dp)

引数
dpdp_const() の返値

処理内容
インスタンスを破棄する。
インスタンスが不要になったら必ず破棄すること。

返値
DPERR_NONE正常に処理完了
DPERR_REENT他のインスタンス関数がまだ処理中


DPERRCODE DUMCALLTYPE DPIF::reset(PDPIF dp)

引数
dpdp_const() の返値

処理内容
シーケンスを初期状態に戻す。

返値
DPERR_NONE正常に処理完了
DPERR_REENT他のインスタンス関数がまだ処理中


DPERRCODE DUMCALLTYPE DPIF::time(PDPIF dp,DUMU4B count,DUMU4B tempo)

引数
dpdp_const() の返値
count進ませるカウント数
tempoテンポ係数(65536=1倍速)

処理内容
タイムカウンタがcount回インクリメントされるまでシーケンスを進める。
タイムカウンタは1回が1/1000秒に相当し、通常は1/1000秒毎に1つ進めるようにユーザ側でタイミングを計っていく。

返値
DPERR_NONE正常に処理完了
DPERR_FETCHデータの読み出し位置が不正
DPERR_ILLEGALパラメータの値が不正
DPERR_LOOPOFループ用スタックがオーヴァーフローした
DPERR_LOOPUFループ用スタックがアンダーフローした
DPERR_REENT他のインスタンス関数がまだ処理中
DPERR_SHORTパラメータの個数が足りない
DPERR_UNDEFコマンドが未定義
DPERR_ZTEMPOテンポが0になった
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::step(PDPIF dp,DUMU4B count,DUMU4B tempo)

引数
dpdp_const() の返値
count進ませるカウント数
tempoテンポ係数(65536=1倍速)

処理内容
ステップカウンタがcount回インクリメントされるまでシーケンスを進める。
ステップカウンタは1回が1分音符を分解能で除算した長さ。
SMF出力などでステップ単位の処理がしたいときに使う。

返値
DPERR_NONE正常に処理完了
DPERR_FETCHデータの読み出し位置が不正
DPERR_ILLEGALパラメータの値が不正
DPERR_LOOPOFループ用スタックがオーヴァーフローした
DPERR_LOOPUFループ用スタックがアンダーフローした
DPERR_REENT他のインスタンス関数がまだ処理中
DPERR_SHORTパラメータの個数が足りない
DPERR_UNDEFコマンドが未定義
DPERR_ZTEMPOテンポが0になった
0未満ユーザ定義のエラー


DUMU4B DUMCALLTYPE DPIF::getright(PDPIF dp,PDUMVOID buf,DUMU4B len)

引数
dpdp_const() の返値
buf文字列を格納するバッファの先頭位置
lenバッファサイズ

処理内容
シーケンスの著作権情報を得る。
バッファサイズが足りないときは、後ろが切られる。
メタイヴェントの最長サイズは255バイトなので、確実に得たい場合はlenを256以上にする。

返値
本来の文字列の長さをバイト数で返す。
文字列を完全に得るためには、この数よりも大きい数(同数では不足)をlenに指定する。


DUMU4B DUMCALLTYPE DPIF::gettitle(PDPIF dp,PDUMVOID buf,DUMU4B len)

引数
dpdp_const() の返値
buf文字列を格納するバッファの先頭位置
lenバッファサイズ

処理内容
シーケンスのタイトル名を得る。
バッファサイズが足りないときは、後ろが切られる。
メタイヴェントの最長サイズは255バイトなので、確実に得たい場合はlenを256以上にする。

返値
本来の文字列の長さをバイト数で返す。
文字列を完全に得るためには、この数よりも大きい数(同数では不足)をlenに指定する。


DUMU4B DUMCALLTYPE DPIF::getlang(PDPIF dp,PDUMVOID buf,DUMU4B len)(V0.45以降)

引数
dpdp_const() の返値
buf文字列を格納するバッファの先頭位置
lenバッファサイズ

処理内容
シーケンスで使われている文字列の言語コードを得る。
バッファサイズが足りないときは、後ろが切られる。
メタイヴェントの最長サイズは255バイトなので、確実に得たい場合はlenを256以上にする。

返値
本来の文字列の長さをバイト数で返す。
文字列を完全に得るためには、この数よりも大きい数(同数では不足)をlenに指定する。


DUMU4B DUMCALLTYPE DPIF::getcset(PDPIF dp,PDUMVOID buf,DUMU4B len)(V0.45以降)

引数
dpdp_const() の返値
buf文字列を格納するバッファの先頭位置
lenバッファサイズ

処理内容
シーケンスで使われている文字列の文字セット名を得る。
バッファサイズが足りないときは、後ろが切られる。
メタイヴェントの最長サイズは255バイトなので、確実に得たい場合はlenを256以上にする。

返値
本来の文字列の長さをバイト数で返す。
文字列を完全に得るためには、この数よりも大きい数(同数では不足)をlenに指定する。


DUMU4B DUMCALLTYPE DPIF::getdwpname(PDPIF dp,PDUMVOID buf,DUMU4B len)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::adddwp(PDPIF dp,PDUMVOID data,DUMU4B len)

(未実装)


DUMU4B DUMCALLTYPE DPIF::geterrloc(PDPIF dp)

引数
dpdp_const() の返値

返値
最も最近起きたエラーのコードを返す。


DUMU4B DUMCALLTYPE DPIF::gettrks(PDPIF dp)

引数
dpdp_const() の返値

返値
シーケンスのトラック数を返す。


DUMU4B DUMCALLTYPE DPIF::getdiv1(PDPIF dp)

引数
dpdp_const() の返値

返値
シーケンスの最大分解能を返す。


DUMU4B DUMCALLTYPE DPIF::getloopcount(PDPIF dp)

引数
dpdp_const() の返値

返値
シーケンスのループ数を返す。
稼動中のトラックのうち、最小のループ数がシーケンス全体のループ数として採用される。


DPERRCODE DUMCALLTYPE DPIF::allnoteoff(PDPIF dp,DUMU4B devf,DUMU4B mchf)

引数
dpdp_const() の返値
devf対象MIDIディヴァイスを表すフラグ群(bit0=dev0,bit15=dev15)
mchf対象MIDIチャネルを表すフラグ群(bit0=ch0,bit15=ch15)

処理内容
対象のMIDIディヴァイス,MIDIチャネルでノートオン状態にあるもの全てにノートオフを送信させる。
ただし、ホールド類(CC#64,CC#66,CC#69)の操作はしない。必要であれば、事前に解除しておくこと。

返値
DPERR_NONE正常に処理完了
DPERR_REENT他のインスタンス関数がまだ処理中
DPERR_ZTEMPOテンポが0になった
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::updkeypress(PDPIF dp,DUMU4B trk,DUMU4B devf,DUMU4B mchf,DUMU4B note)

引数
dpdp_const() の返値
trk送信処理に関連付けるトラック番号
devf対象MIDIディヴァイスを表すフラグ群(bit0=dev0,bit15=dev15)
mchf対象MIDIチャネルを表すフラグ群(bit0=ch0,bit15=ch15)
note対象ノート番号

処理内容
対象のMIDIディヴァイス,MIDIチャネル,ノート番号のキープレッシャを再送信する。
ユーザ側で操作して変化させた値を更新したいときに使う。

返値
DPERR_NONE正常に処理完了
DPERR_ILLEGALトラック番号が不正
DPERR_REENT他のインスタンス関数がまだ処理中
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::updctrlchg(PDPIF dp,DUMU4B trk,DUMU4B devf,DUMU4B mchf,DUMU4B code)

引数
dpdp_const() の返値
trk送信処理に関連付けるトラック番号
devf対象MIDIディヴァイスを表すフラグ群(bit0=dev0,bit15=dev15)
mchf対象MIDIチャネルを表すフラグ群(bit0=ch0,bit15=ch15)
code対象コントロール番号

処理内容
対象のMIDIディヴァイス,MIDIチャネル,コントロール番号のコントロールチェンジを再送信する。
ユーザ側で操作して変化させた値を更新したいときに使う。

返値
DPERR_NONE正常に処理完了
DPERR_ILLEGALトラック番号が不正
DPERR_REENT他のインスタンス関数がまだ処理中
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::updprogchg(PDPIF dp,DUMU4B trk,DUMU4B devf,DUMU4B mchf)

引数
dpdp_const() の返値
trk送信処理に関連付けるトラック番号
devf対象MIDIディヴァイスを表すフラグ群(bit0=dev0,bit15=dev15)
mchf対象MIDIチャネルを表すフラグ群(bit0=ch0,bit15=ch15)

処理内容
対象のMIDIディヴァイス,MIDIチャネルのプログラムチェンジを再送信する。
ユーザ側で操作して変化させた値を更新したいときに使う。

返値
DPERR_NONE正常に処理完了
DPERR_ILLEGALトラック番号が不正
DPERR_REENT他のインスタンス関数がまだ処理中
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::updchpress(PDPIF dp,DUMU4B trk,DUMU4B devf,DUMU4B mchf)

引数
dpdp_const() の返値
trk送信処理に関連付けるトラック番号
devf対象MIDIディヴァイスを表すフラグ群(bit0=dev0,bit15=dev15)
mchf対象MIDIチャネルを表すフラグ群(bit0=ch0,bit15=ch15)

処理内容
対象のMIDIディヴァイス,MIDIチャネルのチャネルプレッシャを再送信する。
ユーザ側で操作して変化させた値を更新したいときに使う。

返値
DPERR_NONE正常に処理完了
DPERR_ILLEGALトラック番号が不正
DPERR_REENT他のインスタンス関数がまだ処理中
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::updpitbend(PDPIF dp,DUMU4B trk,DUMU4B devf,DUMU4B mchf)

引数
dpdp_const() の返値
trk送信処理に関連付けるトラック番号
devf対象MIDIディヴァイスを表すフラグ群(bit0=dev0,bit15=dev15)
mchf対象MIDIチャネルを表すフラグ群(bit0=ch0,bit15=ch15)

処理内容
対象のMIDIディヴァイス,MIDIチャネルのピッチベンドを再送信する。
ユーザ側で操作して変化させた値を更新したいときに使う。

返値
DPERR_NONE正常に処理完了
DPERR_ILLEGALトラック番号が不正
DPERR_REENT他のインスタンス関数がまだ処理中
0未満ユーザ定義のエラー


DPERRCODE DUMCALLTYPE DPIF::getstepcount(PDPIF dp,PDPSTEPCOUNT tbl,DUMU4B tbllen)(V0.24以降)

引数
dpdp_const() の返値
tblステップカウンタテーブルを受け取るポインタ
tbllenステップカウンタテーブルのサイズ(byte)
通常、sizeof(DPSTEPCOUNT)を指定。

処理内容
ステップカウンタの各種パラメータを読み出す。
構造体 DPSTEPCOUNT の内訳は次の通り。
mode0:通常動作,1:動作停止中,2:小節数カウント抑制中
pad未使用
bpm小節当たりの拍数
beat現在の拍数
spm小節当たりのステップ数
frac現在の小節余りステップ数
meas現在の小節数
div11分音符の分解能

返値
DPERR_NONE正常に処理完了
DPERR_ILLEGAL引数が不正


DPERRCODE DUMCALLTYPE DPIF::gettracksta(PDPIF dp,DUMU4B trk,PDPTRACKSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getccsta(PDPIF dp,DUMU4B dev,DUMU4B mch,DUMU4B code,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getpbsta(PDPIF dp,DUMU4B dev,DUMU4B mch,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getkpsta(PDPIF dp,DUMU4B dev,DUMU4B mch,DUMU4B note,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getcpsta(PDPIF dp,DUMU4B dev,DUMU4B mch,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::gettemposta(PDPIF dp,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getonvelsta(PDPIF dp,DUMU4B trk,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getoffvelsta(PDPIF dp,DUMU4B trk,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getrgatesta(PDPIF dp,DUMU4B trk,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


DPERRCODE DUMCALLTYPE DPIF::getsgatesta(PDPIF dp,DUMU4B trk,PDPCTRLSTA tbl,DUMU4B tbllen)

(未実装)


インポート関数


DUMU4B DUMEXPORTTYPE dp_version(void)(V0.30以降)

返値
DUMPLAY.DLLのヴァージョン情報を32bit値で返す。
これは8bitずつ4つのメンバで区切られ、上位から順にアンオフィシャル識別番号,メジャーヴァージョン,マイナーヴァージョン,リリースカウントとなっている。


PDPIF DUMEXPORTTYPE dp_const(DUMU4B devs,PDUMVOID data,DUMU4B datalen,PDPHOOKTBL ht,DUMU4B htlen,PDUMVOID usr,PDPERRCODE err)

引数
devs有効にするディヴァイス数(1~16)
使用するディヴァイス数を減らすことでワークエリアを節約できる。無効なディヴァイスを使おうとした場合はダミーの処理を行うようにしているが、ちゃんとできているか不安。もし問題があったらディヴァイス数を16にしといてちょ。
dataDUMデータの先頭アドレス
この内容は、インスタンスが存在している間は保持しておかなければならない。
datalenDUMデータのサイズ(byte)
htコールバック関数テーブルの先頭アドレス
この内容は別に保存されるので、この関数を呼んだ後は破棄してもよい。
htlenコールバック関数テーブルのサイズ(byte)
通常、sizeof(DPHOOKTBL)を指定。
usrユーザポインタ
コールバック関数が呼ばれるときに渡される任意の値。
errこの関数自体で発生したエラーコードを書き込むポインタ
NULLの場合、書き込みを行わない。

処理内容
DUMプレイヤのインスタンスを生成する。

返値
NULLインスタンスの生成に失敗
otherインスタンスのポインタ
この値はインスタンス関数を呼び出すときに必要であり、インスタンスが存在している間は保持しておかなければならない。


[表紙]