HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1029
zenmmplayが終わったことを知りたい。4解決


zen

リンク

2011/10/29(Sat) 20:22:29|NO.42717

mmplay でmp3の曲を再生させますが、
再生が終了したときを、
stat などで知る方法はないですか?



この記事に返信する


inovia

リンク

2011/10/29(Sat) 21:58:04|NO.42719

猛烈に裏ワザっぽいですが、
mmplayが内部でMCIが使われているのを利用してメッセージを受け取っています。
mmload のモードが1(指定したファイルは無限ループで再生を行う)でないと
メッセージが飛んでこないので注意が必要。
(2MB以下のWAVEファイルだとこの方法ではうまくいきませんので注意)


#define MM_MCINOTIFY 0x03B9 #define MCI_NOTIFY_SUCCESSFUL 1 oncmd gosub *OnMciNotify, MM_MCINOTIFY dialog "wav;*.mid;*.mp3",16 if stat == 0 : end filename = refstr mmload filename, 0, 1 mmplay 0 stop *OnMciNotify if wParam == MCI_NOTIFY_SUCCESSFUL { mmstop dialog "再生オワタ" } return



zen

リンク

2011/10/29(Sat) 23:08:18|NO.42722

すごいです。ただただすごいです。
なんやらわからへんけど、
すごく悩んだ末、簡単にできちゃって、???
とにかく、大感謝!

質問
mciコマンドの(open、play、stop、close)と

#define MM_MCINOTIFY 0x03B9
#define MCI_NOTIFY_SUCCESSFUL 1

の関係はどうなっているのですか?

解りやすくご教授ください。



inovia

リンク

2011/10/30(Sun) 17:31:47|NO.42745

HSPのmmloadの内部処理ではMCIが使われており、ファイルをオープンする際

"open ファイル名 alias myid"
のMCIのコマンドが使われています。

モード1を指定したmmplayの内部処理には、

"play myid from 0 notify"
のMCIのコマンドが使われています。
最後の "notify" がポイントで、これを指定すると
指定したコマンドの処理が終了した時、つまりこの場合再生終了時に
MM_MCINOTIFY というメッセージがHSPのウィンドウに飛んできます。
そのメッセージを捕まえるために

oncmd gosub *OnMciNotify, MM_MCINOTIFY
というコードを書いています。
再生終了時に *OnMciNotify に飛んでくるので
wParamの値をチェックし MCI_NOTIFY_SUCCESSFUL であれば
先ほどの場合は停止してダイアログを表示させています。
wParamの値をチェックしているのは、
一時停止時にもメッセージが飛んでくる可能性があるためです。

やっていること自体は、
http://quasiquote.org/hspwiki?MCI%A4%C7%B7%AB%A4%EA%CA%D6%A4%B7%BA%C6%C0%B8
と同じです。



zen

リンク

2011/10/30(Sun) 23:08:17|NO.42754

難しいけどなんとなく・・・
丁寧に有難うございました。



ONION software Copyright 1997-2023(c) All rights reserved.