More ... | MCIで繰り返し再生MCIの notify フラグ指定によって、再生終了時に送られるメッセージ通知を受け取ります。
スクリプト; MCI の notify フラグによる通知を受け取る
;
; MCI による繰り返し再生
#define MM_MCINOTIFY 0x03B9
#define MCI_NOTIFY_SUCCESSFUL 1
dialog "wav;*.mid;*.mp3",16
if stat == 0 : end
filename = refstr
oncmd gosub *OnMciNotify, MM_MCINOTIFY
onexit goto *OnClose
mci "open \""+filename+"\" alias mcitest"
mes stat
; notify 付きで再生 (再生終了時に MM_MCINOTIFY を受け取る)
mci "play mcitest from 0 notify"
stop
*OnMciNotify
if wParam == MCI_NOTIFY_SUCCESSFUL {
; 再生終了時にもう一度再生
mci "play mcitest from 0 notify"
}
return
*OnClose
mci "stop mcitest wait"
mci "close mcitest"
end
解説MCIのいくつかのコマンドは、通知フラグ「notify」を指定することができます。 notify フラグを指定すると、コマンドの処理が終了したときに MM_MCINOTIFY メッセージ (0x03B9) を受け取ります。このとき、コマンドが正常に終了した場合には、wParam が MCI_NOTIFY_SUCCESSFUL (1) になっています。 上のスクリプトでは notify を指定しているのが play コマンドだけなので MCI_NOTIFY_SUCCESSFUL メッセージを受け取るのは再生終了時だけですが、play 以外のコマンドにも notify を指定する場合には、どのコマンドによってメッセージが引き起こされたのかを判断する必要があります。そのあたりはうまく書き換えてください。 |