〜 メディア 〜
時間フォーマットの加算

MCIの時間単位はコチラのやり方で変更できますが、デフォルトではMSF形式となっており、
取得や設定は、分・秒・フレームを合わせた文字列「mm:ss:ff」で行います。
CDの曲はトラック単位ですが、デフォルトのMSF形式で任意トラックの曲を1曲だけ再生させるには、
取得した開始位置と曲の長さから、終了する位置を算出しなければなりません。
今回は終了位置を求めるための、かなり限定的なTipsです。
尚、MCIの時間単位に合わせて、1秒は75フレームで、
デフォルトのMSF形式は、分・秒・フレームのいずれかが1桁でも前ゼロが付いて2桁で揃えられます。
	

addmsf 時間1, 時間2
時間1MSF(mm:ss:ff)形式の時間を指定する。尚、加算した結果時間はrefstrに返る。
時間2MSF(mm:ss:ff)形式の時間を指定する。

 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
#module
#deffunc addmsf str, str
	mref msf1, 32 : mref msf2, 33
	mref rstr, 65
	dim i, 3
	repeat 3
		strmid s, msf1, cnt * 3, 2 : i.cnt  = 0 + s
		strmid s, msf2, cnt * 3, 2 : i.cnt += 0 + s
	loop
	if i.2 >= 75 : i.2 -= 75 : i.1++ // 1秒=75フレーム
	if i.1 >= 60 : i.1 -= 60 : i.0++
	repeat 3
		s = "00" + i.cnt
		strmid s, s, -1, 2
		if cnt : rstr += ":" : else : rstr = ""
		rstr += s
	loop
	return
#global

	sdim time, 9, 2
	randomize
	repeat 20
		rnd r, 50 : s = "00" + r : strmid s, s, -1, 2 : time.0  = s + ":"
		rnd r, 60 : s = "00" + r : strmid s, s, -1, 2 : time.0 += s + ":"
		rnd r, 75 : s = "00" + r : strmid s, s, -1, 2 : time.0 += s
		rnd r, 50 : s = "00" + r : strmid s, s, -1, 2 : time.1  = s + ":"
		rnd r, 60 : s = "00" + r : strmid s, s, -1, 2 : time.1 += s + ":"
		rnd r, 75 : s = "00" + r : strmid s, s, -1, 2 : time.1 += s
		addmsf time.0, time.1
		mes time.0 + " + " + time.1 + " = " + refstr
	loop
	stop

加算値 = addmsf(時間1, 時間2)
加算値加算した結果時間の受取先を指定する。
時間1MSF(mm:ss:ff)形式の時間を指定する。
時間2MSF(mm:ss:ff)形式の時間を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#module
#defcfunc addmsf str msf1, str msf2, local i, local s
	s = msf1, msf2
	repeat 3
		i.cnt = int(strmid(s.0, cnt * 3, 2)) + int(strmid(s.1, cnt * 3, 2))
	loop
	if i.2 >= 75 : i.2 -= 75 : i.1++
	if i.1 >= 60 : i.1 -= 60 : i.0++
	return strf("%02d:", i.0) + strf("%02d:", i.1) + strf("%02d", i.2)
#global

	sdim time, 9, 2
	randomize
	repeat 20
		time.0 = strf("%02d:", rnd(50)) + strf("%02d:", rnd(60)) + strf("%02d", rnd(75))
		time.1 = strf("%02d:", rnd(50)) + strf("%02d:", rnd(60)) + strf("%02d", rnd(75))
		mes time.0 + " + " + time.1 + " = " + addmsf(time.0, time.1)
	loop