|
|
2013/8/12(Mon) 16:44:23|NO.56299
この頃質問ばかりしてすいません。
mciでマルチプレーヤーを作っているのですが、
トラックバーで音量調節機能や、再生位置選択機能の作り方がわからなくて困っています。
一応ここまではできたのですが、volをどうやったらトラックバーで制御すればいいのかよくわかりません。
dialog "mpg;*.avi;*.wmv;*.asf;*.3gp;*.mp4;*.flv",16,"動画ファイル"
if stat = 0 : end // 未選択時に終了
fname = refstr
mci "open \""+fname+"\" alias f" // オープン
if stat = -1 : dialog "Open Error" : end // エラー
mci "play f" // 再生
vol = 500 // 0〜1000 の範囲を指定
mci "setaudio f volume to "+vol
また、再生位置については、まったくわかりません。
教えてください。
|
|
2013/8/12(Mon) 17:01:00|NO.56300
まず、トラックバーの設置がコレ
#define WM_VSCROLL $114
#define TBS_AUTOTICKS $1
#define TBM_SETPOS $405
#define TBM_SETTICFREQ $414
#define TBM_GETPOS $400
sound=50
winobj "msctls_trackbar32","", ,$50000000|$1, 200, 30
hTbar=objinfo_hwnd(stat) : objskip stat,1 ;ハンドルを取得
sendmsg hTbar, TBM_SETPOS, 1, sound ;デフォの位置(0~100)
sendmsg hTbar, TBM_SETTICFREQ, 10 ;メモリの分割幅(0~100)
で、トラックバーを動かした時の処理がコレ
oncmd gosub *vscroll,WM_VSCROLL
stop
*vscroll
if lparam=hTbar{ ;もし、トラックバーなら
sendmsg lparam, TBM_GETPOS
sound=stat ;位置をsoundに入れる
}
return
これでsound変数にリアルタイムに値が保存されます
あとはsoundに取得している処理でmciに音量を送信するだけなのでやってみて下さい
あと#defineはプログラムの先頭に置くとすっきりします
|
|
2013/8/12(Mon) 17:45:50|NO.56302
ありがとうございます音量調節はわかりました意外と簡単だったのですね。
それとmciの再生位置が変数かなにかに入っていて、それをトラックバーで制御するにはどうしたらよいでしょうか
再生位置の変更までは分かったのですが...
mci "play エイリアス名 from "+m_length/10
|
|
2013/8/12(Mon) 17:57:29|NO.56303
再生中の再生位置変更はplayコマンドよりseekコマンドをお勧めします。
(playコマンドで再生位置を指定する場合は、どこから再生し始めるかを指定するような意味合いなので)
seekコマンドは以下のように使います。
mci "seek エイリアス名 to " + 再生位置が代入された変数
|
|
2013/8/12(Mon) 18:00:42|NO.56304
トラックバーの最大値と最小値を変えるにはこれです
#define TBM_SETRANGE $406
sendmsg hTbar,TBM_SETRANGE,1,(1000/*最大*/)<<16+(0/*最小*/)
これで曲ごとに最大値を変えて、いじられた時に上の方の方法でシークすればいけると思います
|
|
2013/8/12(Mon) 18:04:56|NO.56305
それと、音楽プレイヤーみたいにリアルタイムにトラックバーが動くのはプログラムでリピートして動せばいけると思います
それを非アクティブでやられると重いのでできればWM_ACTIVATEメッセージを監視するといいかも・・・
|
|
2013/8/12(Mon) 21:01:13|NO.56310
リアルタイムに音楽の進み具合でトラックバーを動かしたいのですが、
MediaPlayerのようにしたいです
|
|
2013/8/12(Mon) 21:28:57|NO.56311
(’’さんがおっしゃっている
> WM_ACTIVATEメッセージを監視するといいかも・・・
についてたまたま最近、Win32APIを使ったウィンドウのアクティブ/非アクティブを確認するプログラムを作ったばかりなので、どうぞ参考にしてください。
#uselib "user32.dll"
#cfunc GetForegroundWindow "GetForegroundWindow"
#define WM_ACTIVATE 0x0006
oncmd gosub *actch, WM_ACTIVATE
stop
*actch
if GetForegroundWindow() = hWnd {
mes "アクティブ"
} else {
mes "非アクティブ"
}
return
|
|
2013/8/13(Tue) 15:52:27|NO.56339
ここまでは出来たのですが...
#define WM_VSCROLL $114
#define TBS_AUTOTICKS $1
#define TBM_SETPOS $405
#define TBM_SETTICFREQ $414
#define TBM_GETPOS $400
winobj "msctls_trackbar32","", ,$50000000|$1, 200, 30
hTbar=objinfo_hwnd(stat) : objskip stat,1 ;ハンドルを取得
sendmsg hTbar, TBM_SETPOS, 0, sound ;デフォの位置(0~100)
sendmsg hTbar, TBM_SETTICFREQ, 5;メモリの分割幅(0~100)
oncmd gosub *vscroll,WM_VSCROLL
*play
dialog "mpg;*.avi;*.wmv;*.asf;*.3gp;*.mp4;*.flv",16,"動画ファイル"
if stat = 0 : end // 未選択時に終了
fname = refstr
mci "open \""+fname+"\" alias f" // オープン
if stat = -1 : dialog "Open Error" : end // エラー
//repeat ←としたい
mci "seek f to " + 10000 //repeatでないので10000にしている(+soundにすると、0のまま)
//await ←としたい
//loopとしたい
//↓が飛ばされる
mci "play f" // 再生
stop
*vscroll
if lparam=hTbar{ ;もし、トラックバーなら
sendmsg lparam, TBM_GETPOS
sound=stat ;位置をsoundに入れる
}
return
この方法でrepeat&loopをしますと、
mci "play "の部分が飛ばされてしまいます。
mci "play"のあとにrepeatループしたら、mci "seek f to " +が効かなくなくなってしまいました。
|
|
2013/8/13(Tue) 18:04:56|NO.56346
この前のNO.56303の投稿は忘れてください。
私の勘違いでした。
で、再生位置変更はこんな感じでどうでしょう?
#uselib "user32.dll"
#cfunc WindowFromPoint "WindowFromPoint" int,int
#func SetTimer "SetTimer" int, int, int, int
#func KillTimer "KillTimer" int, int
#const WM_TIMER $113
#const WM_HSCROLL $114
#const TBM_GETPOS $400
#const TBM_SETPOS $405
#const TBM_SETRANGEMAX $408
dialog "wav", 16
if stat = 0 : end
mci "open \"" + refstr + "\" type MPEGvideo alias test"
if stat = -1 : stop
mci "set test time format ms"
winobj "msctls_trackbar32", "", , $50000000 | $10, 500 + 28, 26
hTrackbar = objinfo_hwnd(stat)
mci "status test length"
sendmsg hTrackbar, TBM_SETRANGEMAX, 0, stat
mci "play test"
mci "status test length"
SetTimer hwnd, 1, stat / 500, 0
oncmd gosub *OnTimer, WM_TIMER
oncmd gosub *hscroll, WM_HSCROLL
stop
*OnTimer
switch wparam
case 1
mci "status test position"
sendmsg hTrackbar, TBM_SETPOS, 1, stat
swbreak
swend
return
*hscroll
if lparam = hTrackbar {
oncmd 0
sendmsg hTrackbar, TBM_GETPOS
mci "play test from " + stat
oncmd 1
}
return
動かしている間は曲が途切れたり、色々と改良の余地はあると思いますが・・・。

| |
|
2013/8/13(Tue) 18:46:25|NO.56351
多分これで最後の質問です.
音量調節と位置調節ができたのですが、
音量調節スクリプト↓
#define WM_VSCROLL $114
#define TBS_AUTOTICKS $1
#define TBM_SETPOS $405
#define TBM_SETTICFREQ $414
#define TBM_GETPOS $400
winobj "msctls_trackbar32","", ,$50000000|$1, 200, 30
hTbar=objinfo_hwnd(stat) : objskip stat,1 ;ハンドルを取得
sendmsg hTbar, TBM_SETPOS, 1, sound ;デフォの位置(0~100)
sendmsg hTbar, TBM_SETTICFREQ, 10 ;メモリの分割幅(0~100)
oncmd gosub *vscroll,WM_VSCROLL
dialog "mpg;*.avi;*.wmv;*.asf;*.3gp;*.mp4;*.flv",16,"動画ファイル"
if stat = 0 : end // 未選択時に終了
fname = refstr
mci "open \""+fname+"\" alias f" // オープン
if stat = -1 : dialog "Open Error" : end // エラー
mci "play f" // 再生
repeat
mci "setaudio f volume to "+sound*10
await
loop
stop
*vscroll
if lparam=hTbar{ ;もし、トラックバーなら
sendmsg lparam, TBM_GETPOS
sound=stat ;位置をsoundに入れる
}
return
と葡萄色の位置調節スクリプト↓
#uselib "user32.dll"
#cfunc WindowFromPoint "WindowFromPoint" int,int
#func SetTimer "SetTimer" int, int, int, int
#func KillTimer "KillTimer" int, int
#const WM_TIMER $113
#const WM_HSCROLL $114
#const TBM_GETPOS $400
#const TBM_SETPOS $405
#const TBM_SETRANGEMAX $408
dialog "wav", 16
if stat = 0 : end
mci "open \"" + refstr + "\" type MPEGvideo alias test"
if stat = -1 : stop
mci "set test time format ms"
winobj "msctls_trackbar32", "", , $50000000 | $10, 500 + 28, 26
hTrackbar = objinfo_hwnd(stat)
mci "status test length"
sendmsg hTrackbar, TBM_SETRANGEMAX, 0, stat
mci "play test"
mci "status test length"
SetTimer hwnd, 1, stat / 500, 0
oncmd gosub *OnTimer, WM_TIMER
oncmd gosub *hscroll, WM_HSCROLL
stop
*OnTimer
switch wparam
case 1
mci "status test position"
sendmsg hTrackbar, TBM_SETPOS, 1, stat
swbreak
swend
return
*hscroll
if lparam = hTrackbar {
oncmd 0
sendmsg hTrackbar, TBM_GETPOS
mci "play test from " + stat
oncmd 1
}
return
を混ぜるたいのですが、スクリプトをいじってみましたがやり方がわかりません。
どうすれば音量調節+再生位置ができるでしょうか
お願いします。

| |
|
2013/8/13(Tue) 19:28:05|NO.56352
あのさぁ・・・いや・・・もういいや・・・
|
|
2013/8/13(Tue) 19:44:51|NO.56353
とりあえず丸コピは良くないので方法だけ
二つのうちトラックバーのハンドルの、hTrackbarという変数がかぶります
二個目のhTrackbarをhTrackbar2みたいに変えます(ifもすべて)
あとはトラックバー設置と処理の部分だけ抜き出して差し込みましょう
|
|
2013/8/13(Tue) 19:57:51|NO.56354
最後でなくなってしまいました
音量のほうはhTbar
位置のほうはhTrackbarです。
トラックバー設置はできたのですが
repeat
mci "setaudio f volume to "+sound*10
await
loop
の移し替え場所がわかりません。
|
|
2013/8/13(Tue) 20:18:16|NO.56355
二番目の方に移動させるとすると、二番目のはrepeat-loopはないのでstopの前にそのまんま挿入して大丈夫です
|
|
2013/8/14(Wed) 12:16:52|NO.56365
皆さん本当にありがとうございました。
|
|