〜 メディア 〜
CDの総トラック数を取得

CD/DVDディスクの総トラック数を取得するTipsです。
どこからどこまでのトラックを再生対象にするのか等の処理時に使用できることでしょう。。
トラック数を取得するには「mci "status cdaudio media present"」というように記述しますが、
この記述で正常動作するのは、ディスクドライブが1つ、または先頭(若い方)のCDドライブを操作する時で、
仮想ドライブやDVDドライブ等、複数ドライブが並んでいる場合はうまくいかないことがあります。
例えばXドライブをチェックするには「mci "status cdaudio!X media present"」と記述しましょう。
「!ドライブ名」部分は「!ドライブ名:」や「!ドライブ名:¥¥」としても正常動作します。
もし、トラック数が取得できればstatにそのトラック総数が返り、
取得できなかった場合、ではなく1が返るようになっています。
	

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

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

mcitrackmax
[パラメータなし]選択バッファの総トラック数を取得するだけの為、パラメータは必要ない。
尚、取得トラック総数はstatに入る。

 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
#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 mciend onexit
	mci "stop all"
	mci "close all"
	return

#deffunc mcitrackmax
	mci "status _" + cntno + " number of tracks"
	return
#global

	sdim drv, 128
	repeat 26, 1
		if cnt > 1 : drv += "\n"
		wpoke drv, (cnt - 1) * 3, (':' << 8) + cnt + 64 // コンボボックス用に「A: B: C: … Z:」を格納
	loop
	pos 10, 10 : combox index, 100, drv
	pos 10, 40 : button "確認", *check
	stop

*check
	s = index + 1 : str s
	mciload s
	mcitrackmax
	if stat = -1 {
		dialog "CD/DVDドライブではないか、\nドライブにディスクがセットされていません"
	} else {
		dialog "" + stat + "トラックが存在します"
	}
	stop

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

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

トラック数 = mcitrackmax()
トラック数取得したトラック総数の受取先を指定する。
[パラメータなし]選択バッファの総トラック数を取得するだけの為、パラメータは必要ない。

 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
#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 mciend onexit
	mci "stop all"
	mci "close all"
	return

#defcfunc mcitrackmax
	mci "status _" + cntno + " number of tracks"
	return stat
#global

	sdim drv, 128
	repeat 26, 1
		if cnt > 1 : drv += "\n"
		wpoke drv, (cnt - 1) * 3, (':' << 8) + cnt + 64 // コンボボックス用に「A: B: C: … Z:」を格納
	loop
	pos 10, 10 : combox index, 100, drv
	pos 10, 40 : button gosub "確認", *check
	stop

*check
	mciload str(index + 1)
	if mcitrackmax() = -1 {
		dialog "CD/DVDドライブではないか、\nドライブにディスクがセットされていません"
	} else {
		dialog "" + stat + "トラックが存在します"
	}