mmplayやmciではなく、hspogg.asのdmm系命令を使った場合ですが、
#include "hspogg.as"
#include "user32.as"
#define global boxf2(%1,%2,%3,%4) boxf %1,%2,(%1)+(%3)-1,(%2)+(%4)-1
//boxf2 p1,p2,p3,p4
//(p1,p2)の位置にp3×p4の長方形を描く
dmmini
dmmload "test.wav",0
//クリック領域の作成
font msgothic,16
color 0,0,0 : boxf2 0,0,64,64
color 255,255,255 : pos 16,24 : mes "押す"
oncmd gosub *down,0x201 //WM_LBUTTONDOWN=0x201。マウスの左ボタンを押す
oncmd gosub *up,0x202 //WM_LBUTTONUP=0x202。マウスの左ボタンを離す
down_flag=0 //マウス押下中フラグ
play_flag=0 //再生中フラグ
x=0
repeat
if play_flag {
dmmstat x,0,16
if x=0 { //音声再生が止まっている場合
//マウス押下中の場合はもう一度再生。そうでない場合は再生中フラグを0にする。
if down_flag : dmmplay 0 : else : play_flag=0
}
}
await 100
loop
*down
if down_flag : return
mx=mousex : my=mousey
if (mx>=0)&(mx<64)&(my>=0)&(my<64) {
dmmplay 0
SetCapture hwnd //マウスキャプチャ開始(どこでボタンを離しても検知できるようにする)
down_flag=1
play_flag=1
}
return
*up
if down_flag=0 : return
ReleaseCapture //マウスキャプチャ終了
down_flag=0
return
次はmciを使った場合です。(上記のdmm系命令を使った例の方がお勧め)
#include "user32.as"
#include "winmm.as"
#define global boxf2(%1,%2,%3,%4) boxf %1,%2,(%1)+(%3)-1,(%2)+(%4)-1
//boxf2 p1,p2,p3,p4
//(p1,p2)の位置にp3×p4の長方形を描く
mci "open test.wav alias 0"
//クリック領域の作成
font msgothic,16
color 0,0,0 : boxf2 0,0,64,64
color 255,255,255 : pos 16,24 : mes "押す"
oncmd gosub *down,0x201 //WM_LBUTTONDOWN=0x201。マウスの左ボタンを押す
oncmd gosub *up,0x202 //WM_LBUTTONUP=0x202。マウスの左ボタンを離す
down_flag=0 //マウス押下中フラグ
play_flag=0 //再生中フラグ
x=0
sdim s,64 //ステータス取得用
repeat
if play_flag {
mciSendString "status 0 mode",varptr(s),64,0 //標準のmci命令ではステータス文字列が取得できないので
if s="stopped" { //音声再生が止まっている場合
//マウス押下中の場合はもう一度再生。そうでない場合は再生中フラグを0にする。
if down_flag : mci "seek 0 to 0" : mci "play 0" : else : play_flag=0
}
}
await 100
loop
*down
if down_flag : return
mx=mousex : my=mousey
if (mx>=0)&(mx<64)&(my>=0)&(my<64) {
mci "seek 0 to 0" : mci "play 0"
SetCapture hwnd //マウスキャプチャ開始(どこでボタンを離しても検知できるようにする)
down_flag=1
play_flag=1
}
return
*up
if down_flag=0 : return
ReleaseCapture //マウスキャプチャ終了
down_flag=0
return