[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

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 を指定する場合には、どのコマンドによってメッセージが引き起こされたのかを判断する必要があります。そのあたりはうまく書き換えてください。