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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1210
初心者mmplayやmciについての質問です4解決


初心者

リンク

2020/12/10(Thu) 20:23:40|NO.91903

HSP初心者です。


10秒程度のwav音声を、
ボタンを押したら音楽を再生し、
1コーラス目内で離したら、1コーラス目の最後まで流れ止まり、
押しっぱなしで2コーラス目に入った場合、
2コーラス内で離せば2コーラスの最後まで流れて止まるという形で
音声を再生したいと思っています。

(説明が下手で申し訳ありません。)


このようにするには、どのようにソースを書いたらようでしょうか?
mmplayやmciを使った形で行いたいと思っています。

よろしくお願いします。



この記事に返信する


沢渡

リンク

2020/12/11(Fri) 22:03:10|NO.91914

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



法貴優雅

リンク

2020/12/11(Fri) 23:03:30|NO.91915

これで要件満たしてるのかな?
mmstatがdishじゃないと使えないのでdishが必要です。
っていうかmmstatを標準でも使えたらいいのに…。


#include "hsp3dish.as" // サウンド読込 mmload dir_exe + "\\hsptv\\se_block2.wav", 0, 0 *main // 画面を左マウスクリックで再生(押しっぱで連続再生) getkey k, 1 if (k > 0) { mmstat s, 0, 16 if (s == 0):mmplay 0 } await(1000 / 60) goto *main



沢渡

リンク

2020/12/12(Sat) 09:58:50|NO.91916

すみません、NO.91914の2番目のコードですが、これで行けました。
参考:http://quasiquote.org/hspwiki?MCI%A4%C7%B7%AB%A4%EA%CA%D6%A4%B7%BA%C6%C0%B8

#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の長方形を描く 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。マウスの左ボタンを離す oncmd gosub *playend,0x3B9 //MM_MCINOTIFY=0x3B9。mciコマンドが作業完了した。 down_flag=0 //マウス押下中フラグ play_flag=0 //再生中フラグ stop *down if down_flag : return mx=mousex : my=mousey if (mx>=0)&(mx<64)&(my>=0)&(my<64) { play_flag=0 mci "play 0 from 0 notify" SetCapture hwnd //マウスキャプチャ開始(どこでボタンを離しても検知できるようにする) down_flag=1 play_flag=1 } return *up if down_flag=0 : return ReleaseCapture //マウスキャプチャ終了 down_flag=0 return *playend if (wparam=1)&play_flag { //MCI_NOTIFY_SUCCESSFUL if down_flag { mci "play 0 from 0 notify" } else { play_flag=0 } } return



初心者

リンク

2020/12/12(Sat) 15:51:18|NO.91917

ご返事、遅くなりまして申し訳ありません。

沢渡様、法貴優雅様、ご教授ありがとうございます。

思っていた通りにできました。

ありがとうございます!



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