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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0812
koyaトラックバーでmci音量調節と再生位置15解決


koya

リンク

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はプログラムの先頭に置くとすっきりします



koya

リンク

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メッセージを監視するといいかも・・・



koya

リンク

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



koya

リンク

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
動かしている間は曲が途切れたり、色々と改良の余地はあると思いますが・・・。



koya

リンク

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もすべて)
あとはトラックバー設置と処理の部分だけ抜き出して差し込みましょう



koya

リンク

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の前にそのまんま挿入して大丈夫です



koya

リンク

2013/8/14(Wed) 12:16:52|NO.56365

皆さん本当にありがとうございました。



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