このブログの内容が難しい方へ

もし、内容が難しくて理解出来ない場合には、Cプログラミング入門以前などのプログラミングを始める前に知っておくと良い事が書いてある本を読んでから、その後にやさしいC 第3版 [やさしいシリーズ]などのC言語というプログラミング言語の入門書を読むことをお勧めします。また、MIDIの知識がない人は、コンプリートMIDIブックなどがお勧めです。そこまで理解できれば、KSP特有の作法は、このブログを参考にすれば大丈夫だと思います。

2011年9月3日土曜日

allow_group()とdisallow_group()とfind_group()

allow_groupとdisallow_groupは、グループインデックスを引数にとって、グループを有効にしたり、無効にしたりします。find_groupはグループネームを引数にとって、グループインデックスを返します。つまり、find_groupはallow_groupやdisallow_groupと共に使うことが多いわけです。KSPプログラミングで、allow_groupとdisallow_groupは、よく使うことになると思いますので、しっかりと覚えてください。まずは、以下のコードを見てください。

on init
	declare $Flag := 0
end on

on note
	inc($Flag)
	message($Flag)
	if($Flag > 1)
		disallow_group($ALL_GROUPS)
		allow_group(find_group("Hammer"))
	else
		disallow_group($ALL_GROUPS)
		allow_group(find_group("Single"))
	end if
end on

on release
	dec($Flag)
	message($Flag)
end on

仮に、SingleとHammerという2つのグループが存在するライブラリがあったとします(この2つのグループには、特にキースイッチなどの設定はしない)。そこで、このスクリプトを適用すると、単音でレガートに弾くとHammerが発音されます。(ただし、実際にこのままスクリプトを使うと、色々とバグが発生しますので、オススメしません)。この、disallow_groupとallow_groupで気を付けないといけないのが、そのコールバックを呼んだイベントにしか適用されないということです。つまり、いわゆるキースイッチみたいな使い方は出来ないということです。例として、以下のスクリプトを見てください。

on note
	message($EVENT_NOTE)
	select($EVENT_NOTE)
		case 12
			disallow_group($ALL_GROUPS)
			allow_group(find_group("Group_1"))
		case 13
			disallow_group($ALL_GROUPS)
			allow_group(find_group("Group_2"))
		case 14
			disallow_group($ALL_GROUPS)
			allow_group(find_group("Group_3"))
		case 15
			disallow_group($ALL_GROUPS)
			allow_group(find_group("Group_4"))
	end select
end on

この場合、一見して、キースイッチのように動作するように思えます。しかし、ノートナンバー12のノート・オン・イベントが発生しても、それ自身のイベントにのみ有効であるため、ノートナンバー12のノート・オンでしか、Group_1にマッピングされたサウンドは再生されません。

0 件のコメント:

コメントを投稿