| |
|---|---|
メッセージ、警告、監視中の変数のイベントを、KontaktのステータスバーとCreator ToolsのDebuggerの両方に出力しないようにします。 | |
| 出力を無効にするイベントタイプです。選択できるオプションは次のとおりです:
|
このコマンドはon initコールバックでのみ使用できます。
on init
disable_logging($NI_LOG_MESSAGE)
disable_logging($NI_LOG_WARNING)
disable_logging($NI_LOG_WATCHING)
end on
開発中は上記の行をコメントアウトしたままにしておき、製品を出荷する直前に元へ戻して、デバッグに関する内容が一切出力されないようにします。
|
|---|
コールバックを直ちに停止するか、関数を抜けます。 |
exitは非常に強力なコマンドです。特に大きなスクリプトを扱うときは、使用に注意してください。
関数の中で使用した場合、exitはその関数を抜けるだけで、コールバック全体は終了しません。
on note
if (not in_range($EVENT_NOTE, 60, 71))
exit
end if
{ from here on, only notes between C3 to B3 will be processed }
end on
スクリプトの影響を受けるキーレンジを手早く設定したいときに便利です。
|
|---|
|
on controller
if ($CC_NUM = 1)
ignore_controller
set_controller($VCC_MONO_AT, %CC[1])
end if
end on
モジュレーションホイールをアフタータッチに変換します。
|
|---|
Kontaktのステータスラインにテキストを表示します。 |
このコマンドは、スクリプトを書いている最中のデバッグとテストに使うことを想定しています。Kontaktにはステータスラインが1つしかないため、ユーザーとやり取りするための一般的な手段として使うべきではありません。その用途にはラベルウィジェットか、Creator ToolsのDebuggerペインを使用してください。
message("")をon initコールバックの先頭に書く習慣をつけてください。そうすれば、それまでのメッセージ(スクリプトによるものもシステムによるものも)がすべて消去され、新しいメッセージだけが表示されることが保証されます。
on init
message("Hello, world!")
end on
KSPにおける、お約束の「Hello, world!」の実装です。
on note
message("Note " & $EVENT_NOTE & " received at " & $ENGINE_UPTIME & " milliseconds")
end on
message()コマンドの中で文字列と式を連結します。
時間とトランスポート: $ENGINE_UPTIME, $KSP_TIMER
| |
|---|---|
特定のノートイベントIDに対してMIDI Note Offメッセージを送信します。 | |
| 変更するノートイベントの一意な識別番号です。 |
| ノートオフが実際に発生するまでの時間オフセットをマイクロ秒単位で指定する、省略可能な引数です。 |
note_off()はキーを離すことと同等であり、常にon releaseコールバックをトリガーするとともに、ボリュームエンベロープのリリース部分へジャンプします。note_off()とfade_out()の違いに注意してください。fade_out()はボイス単位で動作します。
省略可能な時間オフセットは、イベントに設定されている可能性のあるデュレーションを上書きします(つまり、play_note()コマンドの最後の引数が0より大きい場合です)。
on controller
if ($CC_NUM = 1)
note_off($ALL_EVENTS)
end if
end on
モジュレーションホイールでトリガーする、独自の「All Notes Off」の実装です。
on init
declare polyphonic $new_id
end on
on note
ignore_event($EVENT_ID)
$new_id := play_note($EVENT_NOTE, $EVENT_VELOCITY, 0, 0)
end on
on release
ignore_event($EVENT_ID)
wait(200000)
note_off($new_id)
end on
各ノートのリリースを200ミリ秒だけ遅らせます。
on init
declare ui_button $KillAll
end on
on note
ignore_event($EVENT_ID)
play_note($EVENT_NOTE, $EVENT_VELOCITY, 0, 5000000)
end on
on ui_control ($KillAll)
note_off($ALL_EVENTS, 0)
$KillAll := 0
end on
Kontakt 8より前は、上の例のようにデュレーションが5秒とあらかじめ決まっているイベントに対してnote_off()コマンドを使うことはできませんでした。省略可能な時間オフセット引数を使えば、これができるようになりました。
| |
|---|---|
ノートイベント、すなわちNote Onメッセージとそれに続くNote Offメッセージを生成します。 | |
| 生成するMIDIノートナンバーです(0 ... 127)。 |
| 生成するノートのベロシティです(1 ... 127)。 |
| マイクロ秒単位のサンプルオフセットです。 |
| 生成するノートの長さをマイクロ秒単位で指定します。 このパラメーターは2つの特別な値も受け付けます: -1:コールバックを開始したノートを離すと、サンプルが停止します。 0:サンプル全体が再生されます(ループしたサンプルには注意してください。この場合は無限に再生され続けます)。 |
DFDモードでは、サンプルオフセットはそれぞれのZoneのSample Mod(S. Mod)の値に依存します(KontaktのWave Editorにあります)。ZoneのS. Modの設定より大きいサンプルオフセット値は無視され、サンプルオフセットは適用されません。
次のように書くと、再生したノートイベントのイベントIDを変数に取得できます:
<variable> := play_note(<note>, <velocity>, <sample-offset>, <duration>)
on note
play_note($EVENT_NOTE + 12, $EVENT_VELOCITY, 0, -1)
end on
弾いたノートを1オクターブ上の音でハモらせます。
on init
declare $new_id
end on
on controller
if ($CC_NUM = 64)
if (%CC[64] = 127)
$new_id := play_note(60, 100, 0, 0)
else
note_off($new_id)
end if
end if
end on
サステインペダルを踏むとMIDIノートがトリガーされます。
| |
|---|---|
MIDI Continuous Controller、Pitch Bend、Channel Pressureのいずれかのメッセージを送信します。 | |
| このパラメーターはタイプを設定し、MIDI CCの場合はCCナンバーも設定します: • 数値(0 ... 127)はMIDI CCナンバーを指定します • • |
| 指定したコントローラーの値です。 • MIDI CCとChannel Pressureの値の範囲:0 ... 127 • MIDI Pitch Bendの値の範囲:-8192 ... 8191 |
set_controller()はon initコールバックでは使用できません。何らかの理由でInstrumentのロード時にコントローラーの値を送信したい場合は、on persistence_changedコールバックを使用してください。
on note
if ($EVENT_NOTE = 36)
ignore_event($EVENT_ID)
set_controller($VCC_MONO_AT, $EVENT_VELOCITY)
end if
end on
on release
if ($EVENT_NOTE = 36)
ignore_event($EVENT_ID)
set_controller($VCC_MONO_AT, 0)
end if
end on
アフタータッチのないキーボードを使っている場合は、代わりにC1を押してください。
イベントとMIDI: $VCC_PITCH_BEND, $VCC_MONO_AT
| |
|---|---|
MIDI 2.0 Registered Per-Note Controller、MIDI 2.0 Assignable Per-Note Controller、MIDI 2.0 Per-Note Pitch Bendのいずれかのメッセージを送信します。 | |
| このパラメーターはメッセージタイプを設定します • 0 ... 255の数値はMIDI 2.0 Registered Per-Note Controllerを指定します • 256 ... 511の数値はMIDI 2.0 Assignable Per-Note Controllerを指定します • |
| MIDI 2.0のパーノートコントローラーを生成する対象のMIDIノートナンバーです(0 ... 127)。 |
| 指定したパーノートコントローラーの値です。 • MIDI 2.0 Per-Note Controllerの値の範囲:0 ... 127 • MIDI 2.0 Per-Note Pitch Bendの値の範囲:-8192 ... 8191 |
set_note_controller()はon initコールバックでは使用できません。何らかの理由でInstrumentのロード時にコントローラーの値を送信したい場合は、on persistence_changedコールバックを使用してください。
on init
set_ui_height(3)
declare $i
declare %black[5] := (1, 3, 6, 8, 10)
declare %key_id[128]
declare ui_label $L (1, 1)
declare ui_table %Active[61] (6, 1, 1)
declare ui_table %BG[61] (6, 1, 1)
declare ui_table %KB[61] (6, 1, -8191)
set_control_par(get_ui_id(%KB), $CONTROL_PAR_HIDE, $HIDE_PART_BG .or. $HIDE_PART_VALUE)
set_control_par(get_ui_id(%KB), $CONTROL_PAR_WIDTH, 555)
set_control_par(get_ui_id(%KB), $CONTROL_PAR_HEIGHT, 110)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_HIDE, $HIDE_PART_BG)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_WIDTH, 555)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_HEIGHT, 110)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_BAR_COLOR, 0777777H)
set_control_par(get_ui_id(%Active), $CONTROL_PAR_WIDTH, 555)
set_control_par(get_ui_id(%Active), $CONTROL_PAR_HEIGHT, 110)
set_control_par(get_ui_id(%Active), $CONTROL_PAR_BAR_COLOR, 0AAAAAAH)
set_control_par(get_ui_id($L), $CONTROL_PAR_HIDE, $HIDE_PART_BG)
set_control_par(get_ui_id($L), $CONTROL_PAR_WIDTH, 560)
set_control_par(get_ui_id($L), $CONTROL_PAR_FONT_TYPE, 19)
set_text($L, "C1 " & ...
"C2 " & ...
"C3 " & ...
"C4 " & ...
"C5 " & ...
"C6")
while ($i < num_elements(%BG))
if (search(%black, $i mod 12) # -1)
%BG[$i] := 1
end if
inc($i)
end while
move_control_px($L, 55, 0)
move_control_px(%BG, 62, 15)
move_control_px(%Active, 62, 15)
move_control_px(%KB, 62, 15)
end on
on note
{ make sure we only have one event per key }
if (event_status(%key_id[$EVENT_NOTE]) = $EVENT_STATUS_NOTE_QUEUE)
fade_out(%key_id[$EVENT_NOTE], 1000, 1)
end if
%key_id[$EVENT_NOTE] := $EVENT_ID
set_note_controller($VNC_PITCH_BEND, $EVENT_NOTE, %KB[$EVENT_NOTE - 36])
if (in_range($EVENT_NOTE, 36, 96))
%Active[$EVENT_NOTE - 36] := 1
end if
end on
on release
if (in_range($EVENT_NOTE, 36, 96))
%Active[$EVENT_NOTE - 36] := 0
end if
end on
on ui_control (%KB)
set_note_controller($VNC_PITCH_BEND, 36 + $NI_CONTROL_PAR_IDX, %KB[$NI_CONTROL_PAR_IDX])
end on
on init
declare const $BEND_RANGE := 2
declare $i
declare %events[128]
end on
on note
%events[$EVENT_NOTE] := $EVENT_ID
end on
on note_controller
if ($NC_NUM = $VNC_PITCH_BEND and in_range($NC_NOTE, 36, 96))
change_tune(%events[$NC_NOTE], int(real($NC_VALUE) * 12.208522) * $BEND_RANGE, 0)
end if
end on
set_poly_at()コマンドの例に似ていますが、こちらは2つのスクリプトスロットを必要とします。1つ目のスロットがMIDI 2.0のノートコントローラーメッセージを送信し、2つ目がそのメッセージを受けて独自のパーノートピッチベンド変化を適用します。
イベントとMIDI: $VNC_PITCH_BEND
| |
|---|---|
MIDI Polyphonic Aftertouchメッセージを送信します。 | |
| Polyphonic Aftertouchメッセージを生成する対象のMIDIノートです(0 ... 127)。 |
| Polyphonic Aftertouchメッセージの値です(0 ... 127)。 |
set_poly_at()はon initコールバックでは使用できません。何らかの理由でInstrumentのロード時にPolyphonic Aftertouchメッセージを送信したい場合は、on persistence_changedコールバックを使用してください。
on init
set_ui_height(3)
declare $i
declare %black[5] := (1, 3, 6, 8, 10)
declare ui_label $L (1, 1)
declare ui_table %Active[61] (6, 1, 1)
declare ui_table %BG[61] (6, 1, 1)
declare ui_table %KB[61] (6, 1, 127)
set_control_par(get_ui_id(%KB), $CONTROL_PAR_HIDE, $HIDE_PART_BG .or. $HIDE_PART_VALUE)
set_control_par(get_ui_id(%KB), $CONTROL_PAR_WIDTH, 555)
set_control_par(get_ui_id(%KB), $CONTROL_PAR_HEIGHT, 110)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_HIDE, $HIDE_PART_BG)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_WIDTH, 555)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_HEIGHT, 110)
set_control_par(get_ui_id(%BG), $CONTROL_PAR_BAR_COLOR, 0777777H)
set_control_par(get_ui_id(%Active), $CONTROL_PAR_WIDTH, 555)
set_control_par(get_ui_id(%Active), $CONTROL_PAR_HEIGHT, 110)
set_control_par(get_ui_id(%Active), $CONTROL_PAR_BAR_COLOR, 0AAAAAAH)
set_control_par(get_ui_id($L), $CONTROL_PAR_HIDE, $HIDE_PART_BG)
set_control_par(get_ui_id($L), $CONTROL_PAR_WIDTH, 560)
set_control_par(get_ui_id($L), $CONTROL_PAR_FONT_TYPE, 19)
set_text($L, "C1 " & ...
"C2 " & ...
"C3 " & ...
"C4 " & ...
"C5 " & ...
"C6")
while ($i < num_elements(%BG))
if (search(%black, $i mod 12) # -1)
%BG[$i] := 1
end if
inc($i)
end while
move_control_px($L, 55, 0)
move_control_px(%BG, 62, 15)
move_control_px(%Active, 62, 15)
move_control_px(%KB, 62, 15)
end on
on note
if (in_range($EVENT_NOTE, 36, 96))
%Active[$EVENT_NOTE - 36] := 1
end if
end on
on release
if (in_range($EVENT_NOTE, 36, 96))
%Active[$EVENT_NOTE - 36] := 0
end if
end on
on ui_control (%KB)
set_poly_at(36 + $NI_CONTROL_PAR_IDX, %KB[$NI_CONTROL_PAR_IDX])
end on
on poly_at
if (in_range($POLY_AT_NUM, 36, 96))
%KB[$POLY_AT_NUM - 36] := %POLY_AT[$POLY_AT_NUM]
end if
end on
ポリフォニックアフタータッチに対応したキーボードがない場合は、これらのイベントを送信するこのテーブルを使ってみてください(標準的な5オクターブのキーボードの範囲です)。入力されるポリフォニックアフタータッチメッセージのモニタリングツールとしても使えます!
| |
|---|---|
MIDIのRPNまたはNRPNメッセージを送信します。 | |
| RPNまたはNRPNのアドレスです(0 ... 16383)。 |
| RPNまたはNRPNメッセージの値です(0 ... 16383)。 |
KontaktはRPNやNRPNのメッセージを外部モジュレーションソースとして扱うことはできません。ただし、これらのメッセージをスクリプト間の簡単なやり取りに使うことはできます。
イベントとMIDI: $RPN_ADDRESS, $RPN_VALUE
| |
|---|---|
Snapshotを保存またはリコールするときの、5つのスロットすべての動作を設定します。 | |
| 利用できるタイプは次のとおりです: 0:Snapshotの切り替え時に必ずinitコールバックが実行され、続いてon persistence_changedコールバックが実行されます(既定の動作)。 1:Snapshotのロード時にinitコールバックは実行されず、on persistence_callbackだけが実行されます。 2:タイプ0と同じですが、Snapshotと一緒に保存されるのはKSPの変数だけです。 3:タイプ1と同じですが、Snapshotと一緒に保存されるのはKSPの変数だけです。 |
このコマンドはグローバルに作用します。つまり、どのスクリプトスロットでも適用できます。
Snapshotのタイプ1と3では、persistentおよびinstrument persistentな変数の値が保持されます。
Snapshotをロードすると、常にKontaktのオーディオエンジンがリセットされます。つまり、オーディオが停止し、アクティブなイベントがすべて削除されます。
on init
set_snapshot_type(1)
declare ui_knob $knob_1 (0, 127, 1)
set_text($knob_1, "Knob")
make_persistent($knob_1)
declare ui_button $gui_btn
set_text($gui_btn, "Page 1")
end on
function show_gui()
if ($gui_btn = 1)
set_control_par(get_ui_id($knob_1), $CONTROL_PAR_HIDE, $HIDE_PART_NOTHING)
else
set_control_par(get_ui_id($knob_1), $CONTROL_PAR_HIDE, $HIDE_WHOLE_CONTROL)
end if
end function
on persistence_changed
call show_gui()
end on
on ui_control ($gui_btn)
call show_gui()
end on
Snapshotのロード時にGUIを維持します。
参照元情報:General Commands
https://docs.native-instruments.com/online-guides/ksp-manual/en/general-commands