〜 メディア 〜
オーディオ出力のON・OFFを制御

ムービーのBGMや音声等のサウンド、音楽ファイル等のオーディオ出力を停止するTipsです。
ムービーのサウンドを停止して、映像だけにする…というのはわかりますが、
音楽ファイルや音楽CD等の、元々聴覚データしかないもののオーディオを停止したら何も残らないのでは?
そう思われがちですが、両方の制御はもちろん、左だけ、右だけの出力を制御できるようになっています。
出力方向部に両方[all]、左だけ[left]、右だけ[right]のいずれかを、
制御部に出力停止[off]、再開[on]を指定して、「mci "set alias audio 出力方向部 制御部"」とします。
この機能を使えば、下記サンプルのように各スピーカーから異なるミュージックを再生させることも可能。
ステレオイヤホンを使えば、2人それぞれ違う曲を聴きたい場合でもケンカすることなく聞けますよね?
	

mcisel 番号
番号以後の操作対象バッファの番号を指定する。

mciload ファイルパス, 番号
ファイルパス再生するファイルパスを指定する。
尚、"1"ならA、"2"ならB、"26"ならZドライブとしたCDオーディオ形式でロードする。
番号割り当てるバッファ番号を指定する。
尚、当命令を実行すると、自動的に指定番号が操作対象バッファとなる。

mciplay 開始位置, 終了位置, 繰り返し
開始位置省略可能(省略時は空文字""を指定すること)。再生開始位置を指定する。
尚、指定は数値文字列、現在のフォーマット(初期はMSF"mm:ss:ff")で行う。
終了位置省略可能(省略時は空文字""を指定すること)。再生終了位置を指定する。
尚、指定は数値文字列、現在のフォーマット(初期はMSF"mm:ss:ff")で行う。
繰り返し最後まで再生したら自動的に初めから再生する(=1)か否(=0)かを指定する。

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

mcisetsound 出力方向, 出力有無
出力方向制御するスピーカー等の方向を指定する。0または省略で両方、1で左のみ、2で右のみが操作対象。
出力有無指定した出力方向のスピーカー等を出力停止する(=0)のか、出力再開する(=1)のかを指定する。

 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
60
61
62
63
64
65
66
67
#module
#deffunc mcisel int
	mref no, 0
	cntno = no
	return

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

#deffunc mcisetsound int, int
	mref direction, 0 : mref flg, 1
	if flg ! 0 : s = "on" : else : s = "off"
	if direction = 1 : s = "left " + s : else : if direction = 2 : s = "right " + s : else : s = "all " + s
	mci "set _" + cntno + " audio " + s
	return
#global

	sdim file, 256, 2
	sdim d, 4, 2
	objsize 100, 20
	d = "左", "右"
	repeat 2
		pos  10, 30 * cnt + 10 : button d.cnt + "読込", *load
		pos 120, 30 * cnt + 10 : input file.cnt, 300, 20
	loop
	pos 10, 100 : button "再生", *play
	stop

*load
	i = (stat ! 0)
	dialog "wav;*.mp3;*.asf;*.wma;*.cda", 16, d.cnt + "スピーカーから流す音楽"
	if stat {
		file.i = refstr
		objprm i * 2 + 1, file.i
		mciload file.i, i
		mcisetsound 2 - i // 反対側の出力をOFFにする
	}
	stop

*play
	repeat 2
		mcisel cnt
		mciplay "", "", 1
	loop
	stop

mcisel 番号
番号以後の操作対象バッファの番号を指定する。

mciload ファイルパス, 番号
ファイルパス再生するファイルパスを指定する。
尚、"1"ならA、"2"ならB、"26"ならZドライブとしたCDオーディオ形式でロードする。
番号割り当てるバッファ番号を指定する。
尚、当命令を実行すると、自動的に指定番号が操作対象バッファとなる。

mciplay 開始位置, 終了位置, 繰り返し
開始位置省略可能(省略時は空文字""を指定すること)。再生開始位置を指定する。
尚、指定は数値文字列、現在のフォーマット(初期はMSF"mm:ss:ff")で行う。
終了位置省略可能(省略時は空文字""を指定すること)。再生終了位置を指定する。
尚、指定は数値文字列、現在のフォーマット(初期はMSF"mm:ss:ff")で行う。
繰り返し最後まで再生したら自動的に初めから再生する(=1)か否(=0)かを指定する。

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

mcisetsound 出力方向, 出力有無
出力方向制御するスピーカー等の方向を指定する。0または省略で両方、1で左のみ、2で右のみが操作対象。
出力有無指定した出力方向のスピーカー等を出力停止する(=0)のか、出力再開する(=1)のかを指定する。

 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
60
61
62
63
#module
#deffunc mcisel int no
	cntno = no
	return

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

#deffunc mcisetsound int direction, int flg, local s, local s2
	s  = "all", "left", "right"
	s2 = "off", "on"
	mci "set _" + cntno + " audio " + s(limit(direction, 0, 2)) + " " + s2(flg ! 0)
	return
#global

	sdim file, 256, 2
	objsize 100, 20
	d = "左", "右"
	repeat 2
		pos  10, 30 * cnt + 10 : button gosub d.cnt + "読込", *load
		pos 120, 30 * cnt + 10 : input file.cnt, 300, 20
	loop
	pos 10, 100 : button gosub "再生", *play
	stop

*load
	i = (stat ! 0)
	dialog "wav;*.mp3;*.asf;*.wma;*.cda", 16, d.cnt + "スピーカーから流す音楽"
	if stat {
		file.i = refstr
		objprm i * 2 + 1, file.i
		mciload file.i, i
		mcisetsound 2 - i // 反対側の出力をOFFにする
	}
	return

*play
	repeat 2
		mcisel cnt
		mciplay "", "", 1
	loop
	return