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

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

2011年8月28日日曜日

ポリフォニック変数

ポリフォニック変数は、少し分かりにく変数ですが、先に仕組みを覚えてしまいましょう。早速ですが、以下のコードを見てください。


on init
	declare $Poly
	$Poly := 0
end on

on note
	$Poly := $Poly + 1
	message($Poly)
end on

on release
	$Poly := $Poly - 1
	message($Poly)
end on


init callbackで、int型の変数Polyを宣言して、0を代入しています。note callbackにて、変数Polyに+1を加算し、その値をKontaktのステータスライン(Kontaktのウィンドウの左下の部分)に表示します。release callbackでは、変数Polyから1を減算して、同じようにその値をKontaktのステータスラインに表示します。

動作としては、1つ鍵盤を押せば、ステータスラインに1が表示され、鍵盤を離すと、ステータスラインに0が表示されます。2つ同時に鍵盤を押せば2が表示され、3つ同時に鍵盤を押せば3が表示されます。つまり、変数Polyは、お互いのイベントの中で共有されて使われているわけです。

では、次に今回のテーマである、ポリフォニック変数を使ってみましょう。ポリフォニック変数は、変数の宣言時に、polyphonicと付け足すだけで使うことが出来ます。ポリフォニック変数Polyを宣言したい時には、declare polyphonic $Polyと記述します。

では、以下のコードを見てください。


on init
	declare polyphonic $Poly
	$Poly := 0
end on

on note
	$Poly := $Poly + 1
	message($Poly)
end on

on release
	$Poly := $Poly - 1
	message($Poly)
end on


先ほどのコードとほとんど同じですが、変数がポリフォニック変数になっています。この場合、鍵盤を同時に2つ押しても、ステータスラインには1が表示されます。3つ押しても4つ押しても同じです。

なぜでしょうか?

ポリフォニック変数とは、実際にはイベントごとに個別の変数が用意されるからです。

イベントごとに変数を用意したい時に、通常の変数で対処しようとすると、とても面倒なプログラムを書かないといけませんが、ポリフォニック変数を使うことで、簡単に記述することが出来ます。ただし、通常の変数と比較して、多くのメモリを使用することになるので、注意が必要とされています。

実際に、どちらのタイプの変数を使うかは、目的によって変わってきますが、「こういう変わった変数があるんだな」くらいに記憶に留めておけば、まずは大丈夫です。

では、次回も他のタイプの変数の勉強をしていきましょう:-)

2011年8月27日土曜日

変数

変数とは、既にプログラミングをやっている人には当たり前のものなのですが、未経験の人にとっては、(とても小さな)最初の難関です。

プログラムを書く際に、「ある値を一時的に保存して、別の箇所でその値を使いたい。だけど、その値は、時と場合によって変化する。」という事がとてもとてもよくあります。そこで、変数が登場します。変数とは、一時的に値を保存する箱のようなものです。変数を使う場合には、それぞれの箱を区別できるように、一意な名前を付けます。そして、どのようなタイプの値を保存するかによって、型を指定します。

Kontaktに用意されている変数の型のうち、もっとも基本になるのは、int型です。int型とは整数のことです。

また、Kontaktで変数を使用する場合には、init callbackで、変数を宣言しなければなりません。変数の宣言とは、「このプログラムでは、これらの変数を使用しますよ」と、型と名前を予め指定しておくことです。例えば、int型のInstrumentという名前の変数を宣言する場合は以下のように記述します。


on init
    declare $Instrument
end on


これで、int型のInstrumentという変数を使う準備が出来ました。

変数に値を代入するには、「$変数名 := 値」というように記述します。int型のInstrumentという変数に値1024を代入するには、「$Instrument := 1024」となるわけです。

では、以下のコートを見てください。



on init
    declare $Instrument
end on

on note
    $Instrument := 1024
    message("No." & $Instrument & "!")
end on


このプログラムでは、init callbackにて、int型のInstrumentという変数を宣言し、note callbackにて、変数Instrumentに1024を代入し、messageコマンドで、テキストと変数を表示します。

messageコマンドとは、変数やテキストをKontaktのステータスライン(Kontaktの画面の左下です)に表示します。messageコマンドは、message(ここにテキストか変数を記述する)というように使います。テキストの場合は、"Hello World!"のように、"でテキストを囲います。変数は"で囲わずにそのまま記述します。テキストと変数を組み合わせて表示したい場合には、&でテキストと変数を接続します。

ちなみにnote callbackとは、ノート・オン・メッセージを受信する度に実行されるコールバックです。つまり、このプログラムでは、接続されたMIDIキーボードなどを押すと、Kontaktのステータスラインに「No.1024!」と表示されるわけです。

ここまで理解できれば、変数の基本的な使い方は理解できたと言って良いと思います。次回は、他の変数の型についても学んでいきましょう。

2011年8月26日金曜日

コールバック

KSPでプログラムを書くときは、まずは、コールバックが基本になります。

コールバックとは、特定のタイミングで、あるイベントごとに実行されるプログラム のことです。「ノート・オン毎に実行されるプログラム」、「ノート・オフ毎に実行されるプログラム」、「CCやピッチベンドに反応して実行されるプログラム」などのように、それぞれ記述していくようになっています。

コールバックで最も基本になるのはinitコールバックです。これは、スクリプトの解析が正常に終了した時に実行されます。ライブラリの利用時には、ライブラリを読み込んだ時に、最初に実行されるプログラムの部分になります。initコールバックは、主に初期設定を行う部分になるので、最初に実行される必要があるわけです。


プログラム内では以下のように記述します。


on init
    {ここに実行させたいプログラムを記述します}
end on


on initで、ここからプログラムを記述することを明記し、end onで、プログラムが終了していることを明記しています。実際に記述するプログラムについては、次回以降説明するので、ここでは割愛します。まずは、「initコールバックは初期設定を記述する」とだけ覚えれば十分です。

他には、「ノート・オン・メッセージを受信する度に実行されるnote callback」、「ノート・オフ・メッセージを受信する度に実行されるrelease callback」、「コントロール・チェンジやピッチベンド、チャンネル・プレッシャーを受信する度に実行されるcontroller callback」、「ホストのトランスポートコマンドを受信した時や、予め設定しておいた経過時間毎に実行されるlistener callback」、「ポリフォニック・アフタータッチ・メッセージを受信した時に実行されるpolyphonic aftertouch callback」など、他にもいくつかあります。

とりあえず、「初期設定を行うinitコールバックと、イベント毎に実行されるコールバックが色々と用意されている」ことと、「イベント毎に実行させたいプログラムを、それぞれ記述していけばいい」ことを覚えれば、今回は十分だと思います。