KSPリファレンスマニュアル 24 - マルチスクリプト(Multi Script)

KSPリファレンスマニュアル 24 - マルチスクリプト(Multi Script)


一般情報

MultiスクリプトはInstrumentスクリプトと同じKSP構文を使用します。主な違いは以下のとおりです:

  • Multiスクリプトは純粋なMIDIイベントを基盤として動作します。つまり、生のMIDIデータを扱うことになります。
  • 利用できるコールバックタイプは4種類だけです:on initon persistence_changedon midi_in、そして各種のon ui_controlコールバックです。
  • すべてのMIDIイベントがon midi_inコールバックをトリガーします。
  • それぞれのMIDIバイトに対応するビルトイン変数が各種用意されています。

新しい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 noteon 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_midi

ignore_midi

コールバックをトリガーしたイベントを無視します。

補足

  • ignore_event()と同様に、ignore_midiは非常に「強力」なコマンドです。ignore_midiは入力されるすべてのイベントを無視することに注意してください。
  • 入力イベントのMIDIチャンネルや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コマンドを使用するものがあることに注意してください。

関連項目

ignore_event()


on midi_in

on midi_in

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メッセージをモニタリングします。

関連項目

ignore_midi


set_midi()

set_midi(<channel>, <command>, <byte-1>, <byte-2>)

任意の種類のMIDIイベントを作成します。

補足

  • 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コマンドも自分で送る必要がある点に注意してください。

関連項目

set_event_par()

イベントとMIDI$EVENT_PAR_MIDI_CHANNEL$EVENT_PAR_MIDI_COMMAND$EVENT_PAR_MIDI_BYTE_1$EVENT_PAR_MIDI_BYTE_2


Multiスクリプトのコマンド引数

$MIDI_CHANNEL

受信したMIDIイベントのMIDIチャンネルです。Kontaktは4つの異なるMIDIポートを扱えるため、この数値は0 ... 63の範囲になります(4ポート、16MIDIチャンネル)。

$MIDI_COMMAND

受信したMIDIイベントのコマンドタイプ、つまりNote、CC、Program Changeなどです。この変数には各種の定数が用意されています(下記参照)。

$MIDI_BYTE_1

$MIDI_BYTE_2

メッセージの2つのMIDIバイトです。0 ... 127の値を取ります。

$MIDI_COMMAND_NOTE_ON

$MIDI_BYTE_1:ノート番号

$MIDI_BYTE_2:ベロシティ

注意:ベロシティ値が0の場合はNote Offコマンドと同等になります

$MIDI_COMMAND_NOTE_OFF

$MIDI_BYTE_1:ノート番号

$MIDI_BYTE_2:リリースベロシティ

$MIDI_COMMAND_POLY_AT

$MIDI_BYTE_1:ノート番号

$MIDI_BYTE_2:ポリフォニックキープレッシャーの値

$MIDI_COMMAND_CC

$MIDI_BYTE_1:コントローラー番号

$MIDI_BYTE_2:コントローラーの値

$MIDI_COMMAND_PROGRAM_CHANGE

$MIDI_BYTE_1:プログラム番号

$MIDI_BYTE_2:未使用

$MIDI_COMMAND_MONO_AT

$MIDI_BYTE_1:チャンネルプレッシャーの値

$MIDI_BYTE_2:未使用

$MIDI_COMMAND_PITCH_BEND

$MIDI_BYTE_1:LSBの値

$MIDI_BYTE_2:MSBの値

$MIDI_COMMAND_RPN

$MIDI_COMMAND_NRPN

$MIDI_BYTE_1:アドレス

$MIDI_BYTE_2:値

イベントパラメーター定数

get_event_par()およびset_event_par()と組み合わせて使用できるイベントパラメーターです:

$EVENT_PAR_MIDI_CHANNEL

$EVENT_PAR_MIDI_COMMAND

$EVENT_PAR_MIDI_BYTE_1

$EVENT_PAR_MIDI_BYTE_2


参照元情報:Multi Script
https://docs.native-instruments.com/online-guides/ksp-manual/en/multi-script