〜 メディア 〜
現在の状態を取得

任意デバイスが現在どのような状態であるのかを取得するTipsです。
状態は以下のものが全てであるのかわかりませんので参考にお考えください。
状 態内 容
not ready準備中
open準備完了
playing再生中
paused一時停止中
stopped停止中(再生終了)
seekingシーク中
parked停止? (不明)
recording録音中
利用の仕方は、例えばサンプルのようにループで"stopped"の状態になるまで監視させて、 再生/停止ボタンのキャプションを切り替える…みたいなことに使用すると良いかと思います。 尚、今回は同時再生の必要がないので、モジュール命令のパラメータ「バッファ番号」は不要なのですが、 複数読込に対応しているコチラのサンプルでの命令と統一するために当サンプルも定義しています。

mciload ファイルパス, 番号
ファイルパス再生するファイルパスを指定する。
尚、"1"ならA、"2"ならB、"26"ならZドライブとしたCDオーディオ形式でロードする。
番号割り当てるバッファ番号を指定する。

mciplay 番号, 繰り返し, 再生位置
番号再生するバッファ番号を指定する。
繰り返し最後まで再生したら自動的に初めから再生する(=1)か否(=0)かを指定する。
再生位置ミリ秒単位の再生位置を指定する。

mcistop 番号
番号停止するバッファ番号を指定する。

mciexit
[パラメータなし]全デバイスを解放するだけの為、パラメータは必要ない。
尚、終了時に自動的に呼び出されるので命令を実行する必要はない。

mcigetstat
[パラメータなし]現在の選択バッファ状態の状態を取得するだけの為、パラメータは必要ない。
尚、取得した状態はrefstrに返る。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#module
#deffunc mciload str, int
	mref file, 32 : mref no, 1
	cntno = no
	mci "close _" + cntno
	strmid i, file, , 2 : int i
	if i {
		file = "cdaudio!?"
		poke file, 8, i + 64
	}
	mci "open \"" + file + "\" alias _" + cntno
	return

#deffunc mciplay str, str, int
	mref start, 32 : mref finish, 33 : mref re, 2
	if start ! "" : s = " from " + start : else : s = ""
	if finish ! "" : s += " to " + finish
	if re : s += " repeat"
	mci "play _" + cntno + s
	return

#deffunc mcistop
	mci "stop _" + cntno
	return

#deffunc mciend onexit
	mci "stop all"
	mci "close all"
	return

#deffunc mcigetstat
	mci "status _" + cntno + " mode"
	return
#global

	objsize 40, 40
	font "webdings", 20 : objmode 2
	pos 10, 10 : button "6", *open
	pos 60, 10 : button "4", *play
*@
	wait 50
	mcigetstat
	if refstr ! state : gosub *button_change
	goto *@b

*open
	dialog "", 16
	if stat : mciload refstr
	goto *@b

*play
	mcigetstat
	if refstr = "playing" : mcistop : else : mciplay "", "", 1
	goto *@b

*button_change
	state = refstr
	if state = "playing" : objprm 1, ";" : else : objprm 1, "4"
	return

mciload ファイルパス, 番号
ファイルパス再生するファイルパスを指定する。
尚、"1"ならA、"2"ならB、"26"ならZドライブとしたCDオーディオ形式でロードする。
番号割り当てるバッファ番号を指定する。

mciplay 番号, 繰り返し, 再生位置
番号再生するバッファ番号を指定する。
繰り返し最後まで再生したら自動的に初めから再生する(=1)か否(=0)かを指定する。
再生位置ミリ秒単位の再生位置を指定する。

mcistop 番号
番号停止するバッファ番号を指定する。

mciexit
[パラメータなし]全デバイスを解放するだけの為、パラメータは必要ない。
尚、終了時に自動的に呼び出されるので命令を実行する必要はない。

状態 = mcigetstat()
状態取得した状態の格納先を指定する。
[パラメータなし]現在の選択バッファ状態の状態を取得するだけの為、パラメータは必要ない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#module
#deffunc mciload str file, int no, local s
	cntno = no
	mci "close _" + cntno
	if int(file) {
		s = "cdaudio!?"
		poke s, 8, int(file) + 64
	} else {
		s = file
	}
	mci "open \"" + s + "\" alias _" + cntno
	return

#deffunc mciplay str start, str finish, int re, local s
	if start ! "" : s = " from " + start : else : s = ""
	if finish ! "" : s += " to " + finish
	if re : s += " repeat"
	mci "play _" + cntno + s
	return

#deffunc mcistop
	mci "stop _" + cntno
	return

#deffunc mciend onexit
	mci "stop all"
	mci "close all"
	return

#defcfunc mcigetstat
	mci "status _" + cntno + " mode"
	return refstr
#global

	objsize 40, 40
	font "webdings", 20 : objmode 2
	pos 10, 10 : button gosub "6", *open
	pos 60, 10 : button gosub "4", *play
	repeat
		wait 50
		if mcigetstat() ! state : gosub *button_change
	loop

*open
	dialog "", 16
	if stat : mciload refstr
	return

*play
	if mcigetstat() = "playing" : mcistop : else : mciplay "", "", 1
	return

*button_change
	state = refstr
	if state = "playing" : objprm 1, ";" : else : objprm 1, "4"
	return