MultiスクリプトはInstrumentスクリプトと同じKSP構文を使用します。主な違いは以下のとおりです:
on init、on persistence_changed、on midi_in、そして各種のon ui_controlコールバックです。on midi_inコールバックをトリガーします。新しいMultiスクリプトのタブには、Multi HeaderのKSPボタンをクリックしてアクセスします。
InstrumentスクリプトがInstrumentとともに保存されるのと同じように、MultiスクリプトはMultiとともに保存されます。GUIに関しては、すべてInstrumentスクリプトと同一です。スクリプトはMultiscriptsという名前のフォルダーに保存されます。このフォルダーは、既存のScriptsフォルダーの隣、ファクトリーデータのPresetsフォルダー内に置かれています:
macOS:/Library/Application Support/Native Instruments/Kontakt 8/Presets/Multiscripts
Windows:C:\Program Files\Common Files\Native Instruments\Kontakt 8\Presets\Multiscripts
Instrumentスクリプトとは異なる、Multiスクリプトにおけるイベント処理の内部構造を理解しておくことが非常に重要です。
Instrumentレベルでは、ノートのイベントIDしか取得できません。つまり、$EVENT_IDが機能するのはon noteとon releaseのコールバックの中だけです。Multiレベルでは、入力されるあらゆるMIDIイベントが固有のIDを持っており、これは$EVENT_IDで取得できます。つまり、$EVENT_IDはノートイベント、コントローラーメッセージ、Program Changeコマンドなどになりうるということです。
ここからchange_note()やchange_velo()などのコマンドの使い方につながります。$EVENT_IDは必ずしもノートイベントを指すとは限らないため、これらのコマンドもMultiスクリプトでは機能しません。ただし、set_event_par()コマンドを使えば、入力されたイベントの各種要素を変更することは可能です。
そして何よりも重要なのは、MultiスクリプトはあくまでMIDIプロセッサーにすぎないのに対し、Instrumentスクリプトはイベントプロセッサーであるという点です。Instrumentスクリプトにおけるノートイベントはボイスに結び付けられているのに対し、Multiスクリプトから送られるMIDIイベントはInstrumentレベルでノートイベントに変換されます。これはつまり、play_note()やnote_off()などはMultiスクリプトでは機能しないということです。
Multiスクリプトを扱うときは、MIDIメッセージの基本構造を把握しておくと役に立ちます。
|
|---|
コールバックをトリガーしたイベントを無視します。 |
ignore_event()と同様に、ignore_midiは非常に「強力」なコマンドです。ignore_midiは入力されるすべてのイベントを無視することに注意してください。set_event_par()を使うこともできます。on midi_in
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 > 0)
ignore_midi
end if
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_OFF or ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 = 0))
ignore_midi
end if
end on
Note OnとNote Offのメッセージを無視します。キーボードによっては、Note Offコマンドを表すためにベロシティ0のNote Onコマンドを使用するものがあることに注意してください。
|
|---|
MIDIコールバック。入力されるすべてのMIDIイベントによってトリガーされます。 |
on midi_in
select ($MIDI_COMMAND)
case $MIDI_COMMAND_NOTE_ON
if ($MIDI_BYTE_2 > 0)
message("Note On")
else
message("Note Off")
end if
case $MIDI_COMMAND_NOTE_OFF
message("Note Off")
case $MIDI_COMMAND_CC
message("Controller")
case $MIDI_COMMAND_PITCH_BEND
message("Pitch Bend")
case $MIDI_COMMAND_MONO_AT
message("Channel Pressure")
case $MIDI_COMMAND_POLY_AT
message("Poly Pressure")
case $MIDI_COMMAND_PROGRAM_CHANGE
message("Program Change")
end select
end on
入力される各種MIDIメッセージをモニタリングします。
|
|---|
任意の種類のMIDIイベントを作成します。 |
set_event_par()コマンドを使用できます。on midi_in
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 > 0)
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_NOTE_ON, $MIDI_BYTE_1 + 4, $MIDI_BYTE_2)
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_NOTE_ON, $MIDI_BYTE_1 + 7, $MIDI_BYTE_2)
end if
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_OFF or ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 = 0))
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_NOTE_ON, $MIDI_BYTE_1 + 4, 0)
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_NOTE_ON, $MIDI_BYTE_1 + 7, 0)
end if
end on
シンプルなハーモナイザーです。正しいNote Offコマンドも自分で送る必要がある点に注意してください。
イベントとMIDI:$EVENT_PAR_MIDI_CHANNEL、$EVENT_PAR_MIDI_COMMAND、$EVENT_PAR_MIDI_BYTE_1、$EVENT_PAR_MIDI_BYTE_2
|
|---|
受信したMIDIイベントのMIDIチャンネルです。Kontaktは4つの異なるMIDIポートを扱えるため、この数値は0 ... 63の範囲になります(4ポート、16MIDIチャンネル)。 |
|
|---|
受信したMIDIイベントのコマンドタイプ、つまりNote、CC、Program Changeなどです。この変数には各種の定数が用意されています(下記参照)。 |
|
|---|
メッセージの2つのMIDIバイトです。0 ... 127の値を取ります。 |
|
|---|
注意:ベロシティ値が0の場合はNote Offコマンドと同等になります |
|
|---|
|
|
|---|
|
|
|---|
|
|
|---|
|
|
|---|
|
|
|---|
|
|
|---|
|
イベントパラメーター定数 |
|---|
|
参照元情報:Multi Script
https://docs.native-instruments.com/online-guides/ksp-manual/en/multi-script