ユーザー定義変数はすべてon initコールバックの中で宣言する必要があります。
変数名に使用できるのは英数字(0-9、a-z、A-Z)とアンダースコア(_)だけです。
次の接頭辞が付いた変数は作成しないでください。これらは内部の変数および定数のために使用されています。
$NI_
$CONTROL_PAR_
$EVENT_PAR_
$ENGINE_PAR_
$ZONE_PAR_
$LOOP_PAR_
|
|---|
単一の32ビット符号付き整数値を格納するユーザー定義変数を宣言します。 |
整数変数に格納できる有効な数値は -2147483648 ... 2147483647 の範囲です。
on init
declare $test
$test := -1
end on
変数を作成します。
on init
declare $test := -1
end on
上と同様に変数を作成しますが、宣言と同じ行で値を初期化しています。
|
|---|
複数の32ビット符号付き整数値を指定したインデックスに格納するユーザー定義配列を宣言します。 |
配列の最大サイズは 1000000 インデックスです。
要素数は定数値で定義する必要があります。この目的に変数を使用することはできません。
配列を1つの値で初期化することもできます。下の2番目の例を参照してください。
複数の値で配列を初期化する場合に、初期化子の数が配列サイズより少ないときは、最後の初期化子が配列の残りの部分の初期化に使用されます。
整数配列に格納できる有効な数値は -2147483648 ... 2147483647 の範囲です。
on init
declare %presets[10 * 8] := ( ...
{ 1 } 8, 8, 8, 0, 0, 0, 0, 0, ...
{ 2 } 8, 8, 8, 8, 0, 0, 0, 0, ...
{ 3 } 8, 8, 8, 8, 8, 8, 8, 8, ...
{ 4 } 0, 0, 5, 3, 2, 0, 0, 0, ...
{ 5 } 0, 0, 4, 4, 3, 2, 0, 0, ...
{ 6 } 0, 0, 8, 7, 4, 0, 0, 0, ...
{ 7 } 0, 0, 4, 5, 4, 4, 2, 2, ...
{ 8 } 0, 0, 5, 4, 0, 3, 0, 0, ...
{ 9 } 0, 0, 4, 6, 7, 5, 3, 0, ...
{ 10 } 0, 0, 5, 6, 4, 4, 3, 2 )
end on
プリセットデータを格納するための配列を作成します。
on init
declare %presets[10 * 8] := (4)
end on
同じ配列を特定の値で手早く初期化する方法です。
|
|---|
単一の64ビット(倍精度)実数値を格納するユーザー定義変数を宣言します。 |
実数は、整数であっても必ず小数点を付けて定義する必要があります。たとえば 2 ではなく 2.0 と書きます。
小数部の数字は省略できます。たとえば 2. は有効で、2.0 と同じ意味になります。
指数表記もサポートされています。たとえば 1.25e5 や 2.76e-3 です。e は小文字でも大文字でもかまいません。
on init
declare ~test
~test := 0.5
end on
変数を作成します。
on init
declare ~test := 0.5
end on
上と同様に変数を作成しますが、宣言と同じ行で値を初期化しています。
|
|---|
複数の64ビット(倍精度)実数値を指定したインデックスに格納するユーザー定義配列を宣言します。 |
配列の最大サイズは 1000000 インデックスです。
要素数は定数の整数値で定義する必要があります。この目的に通常の変数を使用することはできません。
配列を1つの値で初期化することもできます。下の2番目の例を参照してください。
複数の値で配列を初期化する場合に、初期化子の数が配列サイズより少ないときは、最後の初期化子が配列の残りの部分の初期化に使用されます。
array_equal()コマンドとsearch()コマンドは実数配列では動作しません。
on init
declare ?presets[5 * 4] := ( ...
{ 1 } 1.0, 1.0, 1.0, 1.0, ...
{ 2 } 0.5, 0.7, 0.1, 0.5, ...
{ 3 } 1.0, 0.6, 0.6, 0.2, ...
{ 4 } 0.0, 0.0, 0.5, 0.3, ...
{ 5 } 0.0, 1.0, 0.4, 0.1 )
end on
プリセットデータを格納するための配列を作成します。
on init
declare ?presets[10 * 8] := (1.0)
end on
同じ配列を特定の値で手早く初期化する方法です。
|
|---|
テキストを格納するユーザー定義の文字列変数を宣言します。 |
整数変数とは異なり、文字列変数を宣言と同じ行でインラインに初期化することはできません。
文字列変数に格納できるテキストの最大長は 320 文字です。
on init
declare @text
@text := "Last received note number played or released: "
end on
on note
message(@text & $EVENT_NOTE)
end on
on release
message(@text & $EVENT_NOTE)
end on
長いテキストを表示するには文字列変数を使用します。
|
|---|
指定したインデックスにテキスト文字列を格納するユーザー定義の文字列配列を宣言します。 |
配列の最大サイズは 1000000 インデックスです。
文字列変数の場合と同じく、文字列配列の内容も宣言と同じ行でインラインに初期化することはできません。
各インデックスに格納できる文字列の最大長は 320 文字です。
長い文字列を持つ大きな文字列配列をpersistentにすると、多くのメモリーを必要とすることに注意してください(おおよそ、1文字 = 1バイト、320文字 = 320バイト、320文字の文字列 1000000 個 = 305メガバイト)
on init
declare $count
declare !note[12]
!note[0] := "C"
!note[1] := "C#"
!note[2] := "D"
!note[3] := "D#"
!note[4] := "E"
!note[5] := "F"
!note[6] := "F#"
!note[7] := "G"
!note[8] := "G#"
!note[9] := "A"
!note[10] := "Bb"
!note[11] := "B"
declare !name [128]
while ($count < 128)
!name[$count] := !note[$count mod 12] & (($count / 12) - 2)
inc($count)
end while
end on
on note
message("Note played: " & !name[$EVENT_NOTE])
end on
すべてのMIDIノート名を格納した文字列配列を作成します。
|
|---|
単一の整数値を格納するユーザー定義の定数を宣言します。 |
名前のとおり、定数変数の値は読み取ることしかできず、変更はできません。
定数の名前は大文字で書くのが一般的です(そして推奨されます)。
整数定数に格納できる有効な数値は -2147483648 ... 2147483647 の範囲です。
on init
declare const $NUM_PRESETS := 10
declare const $NUM_PARAMETERS := 5
declare %preset_data[$NUM_PRESETS * $NUM_PARAMETERS]
end on
定数を作成します。プリセット用の配列を作るときに便利です。
|
|---|
単一の64ビット(倍精度)実数値を格納するユーザー定義の定数を宣言します。 |
名前のとおり、定数変数の値は読み取ることしかできず、変更はできません。
定数の名前は大文字で書くのが一般的です(そして推奨されます)。
on init
declare const ~BIG_NUMBER := 100000.0
declare const ~SMALL_NUMBER := 0.00001
end on
ちょっとした実数定数の例です。
|
|---|
ノートイベントごとに単一の整数値を格納するユーザー定義のポリフォニック変数を宣言します。 |
ポリフォニック変数は、実行されるノートイベントごとに固有の変数として働き、並行して実行されるコールバックでの競合を回避します。たとえばwait()を使用する場合です。
ポリフォニック変数は、対応するノートのon releaseコールバックでも値を保持します。
ポリフォニック変数は通常の変数よりもはるかに多くのメモリーを必要とします。Kontaktのノートイベントキューは最大 8192 イベントに対応するため、32ビット * 8192 = 32キロバイトとなります。
ポリフォニック変数はnoteコールバックとreleaseコールバックの中でのみ使用できます。
on init
declare polyphonic $a
{ declare $a }
end on
on note
ignore_event($EVENT_ID)
$a := 0
while ($a < 13 and $NOTE_HELD = 1)
play_note($EVENT_NOTE + $a, $EVENT_VELOCITY, 0, $DURATION_QUARTER / 2)
inc($a)
wait($DURATION_QUARTER)
end while
end on
ポリフォニック変数の効果を聴くには、オクターブを弾いて押さえたままにします。両方のノートが半音ずつ上昇していきます。次に$aを通常の変数にしてから同じオクターブを弾くと、$aは実行された両方のコールバックで共有されるため、両方のノートはより大きな音程で上昇していきます。
on init
declare $counter
declare polyphonic $polyphonic_counter
end on
on note
message($polyphonic_counter & " " & $counter)
inc($counter)
inc($polyphonic_counter)
end on
ポリフォニック変数は常にコールバックごとに固有であるため、表示されるメッセージの中で$polyphonic_counterは常に 0 になります。
|
|---|
変数の値をInstrumentの中でのみ保持します。 |
make_instr_persistent()はmake_persistent()と似ていますが、変数の値はInstrumentとともに保存されるだけで、Snapshotとともには保存されません。Snapshotを読み込むときにUI要素が変更されるのを防ぐために使用できます。
on init
set_snapshot_type(1) { init callback not executed upon snapshot loading }
declare ui_knob $knob_1 (0, 2, 1)
set_text($knob_1, "Pers")
make_persistent($knob_1)
declare ui_knob $knob_2 (0, 2, 1)
set_text($knob_2, "Inst Pers")
make_instr_persistent($knob_2)
declare ui_knob $knob_3 (0, 2, 1)
set_text($knob_3, "Not Pers")
end on
2番目のノブはSnapshotを読み込んでも変更されません。
|
|---|
変数の値をInstrumentおよびSnapshotとともに保持します。 |
変数の状態は、Instrument、Multi、ホストチャンクとともに保存されるだけでなく、スクリプトをKontaktのプリセット(.nkpファイル)として保存したときにも保存されます。
変数の状態はinitコールバックの最後に読み込まれます。保存された値をinitコールバックの中で手動で読み込むには、その値を使用する前にread_persistent_var()を挿入します。
persistent変数の値を取得するためにon persistence_changedコールバックを使用することもできます。
古いコードを新しいコードに置き換えてスクリプトを更新した場合、同じ名前を持つpersistent変数の値は保持されます。
複雑なスクリプトを扱っていると、スクリプトをリセットしてpersistent変数の値を消去したくなることがあります。これは、Script EditorのPresetメニューから - INIT Script - プリセットを読み込み、そのうえでコードをもう一度適用することで行えます。
on init
declare ui_knob $Preset (1, 10, 1)
make_persistent($Preset)
end on
ノブなどのユーザーインターフェース要素は、通常、Instrumentを再読み込みしたときにも値を保持しているべきです。
|
|---|
|
このコマンドはon initコールバックの中でのみ使用できます。
persistent変数の値を取得するためにon persistence_changedコールバックを使用することもできます。
on init
declare ui_label $label (1, 1)
declare ui_button $button
set_text($button, "$a := 10000")
declare $a
make_persistent($a)
{ read_persistent_var($a) }
set_text($label, $a)
end on
on ui_control ($button)
$a := 10000
set_text($label, $a)
end on
このスクリプトを適用したらボタンをクリックし、NKIを保存して閉じます。もう一度読み込むと、$aの値はinitコールバックのいちばん最後に初期化されるため、ラベルには 0 が表示されます。ここでread_persistent_varを囲んでいるコメントを外し、スクリプトをもう一度適用して違いを確認してください。
|
|---|
監視対象の変数の値が変化するたびに、Creator ToolsのKSP Logへイベントを送信します。 |
このコマンドはon initコールバックの中でのみ使用できます。
このコマンドはKontaktのステータスバーには影響しません。イベントはCreator Toolsにのみ表示されます。
このコマンドはビルトイン変数($ENGINE_UPTIME、$NOTE_HELD、$KSP_TIMER など)では動作しません
on init
declare $intVar
watch_var($intVar)
make_persistent($intVar)
end on
on note
$intVar := $EVENT_VELOCITY
end on
Creator Toolsを起動した状態で、いくつかノートを弾いてみてください。KSP VariablesパネルまたはKSP Logパネルにフォーカスが当たっていることを確認してください。
|
|---|
監視対象の配列インデックスの値が変化するたびに、Creator ToolsのKSP Logへイベントを送信します。 |
このコマンドはon initコールバックの中でのみ使用できます。
このコマンドはKontaktのステータスバーには影響しません。イベントはCreator Toolsにのみ表示されます。
このコマンドはビルトイン配列変数(%KEY_DOWN、%CC、%EVENT_PAR など)では動作しません。
on init
declare %mykeys[128]
watch_array_idx(%mykeys, 60)
watch_array_idx(%mykeys, 61)
watch_array_idx(%mykeys, 62)
watch_array_idx(%mykeys, 63)
watch_array_idx(%mykeys, 64)
declare ui_button $Save
declare ui_button $Load
end on
on note
%mykeys[$EVENT_NOTE] := $EVENT_VELOCITY
end on
on ui_control($Save)
save_array(%mykeys, 0)
end on
on ui_control($Load)
load_array(%mykeys, 0)
end on
Creator Toolsを起動した状態で、いくつかノートを弾くか、saveボタンとloadボタンをクリックしてみてください。KSP VariablesパネルまたはKSP Logパネルにフォーカスが当たっていることを確認してください。
参照元情報:Variables
https://docs.native-instruments.com/online-guides/ksp-manual/en/variables