|
GURUGURUSMF.DLLというフリーソフトがある。これは文字通りMIDIフアイルをリピイト
再生させることに長けたDLLである。
C言語系で操作するソフトといっているが、本BASICでも対応可能。
ただし、DLホルダア内のヘルプとヘッダアファイルの内容をよく読み込むよーに。
URLはこちら↓
ttp://gurugurusmf.migmig.net
問題の関数、getplayerstatusとgetsmfinformationは構造体を引数に使っているが、
構造体といっても実は4バイト整数型変数を5つ、9つ並べただけなので、なんと文
字列変数で代用することができる。
dllフアイルの取扱方法は本BASICヘルプの「外部DLL関数の使用」の項を参照の事。
なお、C,本BASIC以外の言語(たとえば MSO VBA)ではこの2関数を使うと不具合が生じるので注意(
たとえば専用エディッタアで文字列のコピイを行うと「メモリが足りません」という表示が出るなど)。
以下、サンプルプログラムを示す。
OPTION CHARACTER byte
LET q=op(-1100,0) !第1引数は-1100(directmusic)か-1(win mapper)
LET q=al("e:\落ちゲー\data\music\maoudamashii-3-theme01.mid",0,2) !MIDIは任意のMIDIフアイル名、フアイルIDは第3引数
LET q=pl(0,2,0,0,0) !フアイルIDは第2引数
DO
WAIT DELAY 1
LET w$=REPEAT$(" ",20)
CALL gs(w$,20) !第2引数は20(getplayerstatus),36(getsmfinformation)固定
IF ORD(left$(q$,1))=0THEN !終了が0,再生中が1,一時停止中が2
CALL st(0)
EXIT DO
END IF
LOOP
CALL cl !プログラム終了前に必ずClosedeviceしないとフリイズするので注意
END
EXTERNAL FUNCTION op(q,w)
assign"c:\gurugurusmf4-0-6\gurugurusmf4.dll","GGS4OpenDevice" !関数識別冠詞「GGS4」は必ず必要
END FUNCTION
EXTERNAL FUNCTION al(q$,w,e)
assign"c:\gurugurusmf4-0-6\gurugurusmf4.dll","GGS4AddListFromFileA"
END FUNCTION
EXTERNAL FUNCTION pl(q,w,e,r,t)
assign"c:\gurugurusmf4-0-6\gurugurusmf4.dll","GGS4Play"
END FUNCTION
EXTERNAL SUB cl
assign"c:\gurugurusmf4-0-6\gurugurusmf4.dll","GGS4CloseDevice"
END SUB
EXTERNAL SUB gs(w$,l)
assign"c:\gurugurusmf4-0-6\gurugurusmf4.dll","GGS4GetPlayerStatus"
END SUB
EXTERNAL SUB st(q)
assign"c:\gurugurusmf4-0-6\gurugurusmf4.dll","GGS4Stop"
END SUB
|
|