KSPリファレンスマニュアル 10 - エンジンパラメーターコマンド(Engine Parameter Commands)

KSPリファレンスマニュアル 10 - エンジンパラメーターコマンド(Engine Parameter Commands)


get_mod_idx()

get_mod_idx(<group-index>, <mod-name>)

内部モジュレーターまたは外部モジュレーションのスロットインデックスを返します。

<group-index>

グループのインデックスです(KontaktのMonitor -> GroupsペインにあるIndex列を参照してください)。

<mod-name>

内部(LFO、エンベロープ、ステップモジュレーターなど)または外部(ベロシティ、キーポジション、モノアフタータッチなど)のモジュレーターの名前です。

補足

  • 各モジュレーターには、その種類とターゲットとするパラメーターに基づいて、あらかじめ定義された名前が付いています。

  • この名前は、KontaktのOptions → Developerペインで開発者向けオプションを有効にしたうえで、モジュレーターまたはモジュレーションターゲットのストリップを右クリックすることで変更できます。

on init
    declare $grp_idx := 0
    declare $env_idx

    $env_idx := get_mod_idx($grp_idx, "VOL_ENV")

    declare ui_knob $Attack (0, 1000000, 1)

    $Attack := get_engine_par($ENGINE_PAR_ATTACK, $grp_idx, $env_idx, -1)

    set_knob_unit($Attack, $KNOB_UNIT_MS)
    set_knob_label($Attack, get_engine_par_disp($ENGINE_PAR_ATTACK, $grp_idx, $env_idx, -1))
end on

on ui_control ($Attack)
    set_engine_par($ENGINE_PAR_ATTACK, $Attack, $grp_idx, $env_idx, -1)
    set_knob_label($Attack, get_engine_par_disp($ENGINE_PAR_ATTACK, $grp_idx, $env_idx, -1))
end on

最初のグループのボリュームエンベロープのアタックタイムを制御します。注意:このエンベロープは手動で"VOL_ENV"にリネームしてあります。

on init
    declare $count
    declare $mod_idx

    $mod_idx := get_mod_idx(0, "VEL_VOLUME")

    declare ui_slider $VelAmt (0, 1000000)

    if ($mod_idx # $NI_NOT_FOUND)
        $VelAmt := get_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY, 0, $mod_idx, -1)
    end if

    make_persistent($VelAmt)
end on

on ui_control ($VelAmt)
    $count := 0
    while($count < $NUM_GROUPS)
        $mod_idx := get_mod_idx($count, "VEL_VOLUME")

        if ($mod_idx # $NI_NOT_FOUND)
            set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY, $VelAmt, $count, $mod_idx, -1)
        end if

        inc($count)
    end while
end on

存在するすべてのグループについて、ベロシティからボリュームへのモジュレーション強度を制御するスライダーを作成します。

関連項目

get_target_idx()

set_engine_par()


get_target_idx()

get_target_idx(<group-index>, <mod-index>, <target-name>)

内部モジュレーターのモジュレーションターゲットのスロットインデックスを返します

<group-index>

グループのインデックスです(KontaktのMonitor -> GroupsペインにあるIndex列を参照してください)。

<mod-index>

内部モジュレーター(LFO、エンベロープ、ステップモジュレーターなど)のスロットインデックスです。get_mod_idx()で取得できます。

<target-name>

モジュレーションターゲットのスロットの名前です。

補足

  • 各モジュレーターには、その種類とターゲットとするパラメーターに基づいて、あらかじめ定義された名前が付いています。

  • この名前は、KontaktのOptions → Developerペインで開発者向けオプションを有効にしたうえで、モジュレーターまたはモジュレーションターゲットのストリップを右クリックすることで変更できます。

on init
    declare $mod_idx
    declare $target_idx

    $mod_idx := get_mod_idx(0, "FILTER_ENV")
    $target_idx := get_target_idx(0, $mod_idx, "FILTER_ENV > CUTOFF")

    declare ui_knob $FilterEnv (-1000, 1000, 10)

    set_knob_unit($FilterEnv, $KNOB_UNIT_PERCENT)

    make_persistent($FilterEnv)
end on

on ui_control ($FilterEnv)
    if ($mod_idx # $NI_NOT_FOUND and $target_idx # $NI_NOT_FOUND)
        set_engine_par($ENGINE_PAR_MOD_TARGET_MP_INTENSITY, 500000 + ($FilterEnv * 500), 0, $mod_idx, $target_idx)
    end if
end on

最初のグループで、エンベロープからフィルターカットオフへのモジュレーション量を制御します。注意:フィルターエンベロープは手動で"FILTER_ENV"に、ターゲットは"FILTER_ENV > CUTOFF"にリネームしてあります。

関連項目

get_mod_idx()

set_engine_par()


get_engine_par()

get_engine_par(<parameter>, <group>, <slot>, <generic>)

特定のエンジンパラメーターの値を返します。

<parameter>

ビルトインのエンジンパラメーター定数のいずれかを使ってパラメーターを指定します。

<group>

指定したパラメーターが存在するグループのインデックス(ゼロ始まり)です。

指定したパラメーターがInstrumentレベルに存在する場合は、-1を入力します。

バスとMain FXもInstrumentレベルに存在するため、バスを操作したい場合は<group>に-1を設定する必要があります。

<slot>

指定したパラメーターのスロットインデックス(ゼロ始まり)です。これはグループ/インストゥルメントのエフェクト、モジュレーター、モジュレーション強度にのみ適用されます。

グループ/インストゥルメントのエフェクトの場合、この引数はそのエフェクトが存在するスロット(ゼロ始まり)を指定します。

モジュレーターとモジュレーション強度の場合、この引数はget_mod_idx()で取得できるインデックスを指定します。

それ以外の用途では、この引数に-1を設定します。

<generic>

この引数はインストゥルメントエフェクトと内部モジュレーターに適用されます。

インストゥルメントエフェクトの場合、この引数は次のものを区別します。

$NI_SEND_BUS:Send Effect

$NI_INSERT_BUS:Insert Effect

$NI_MAIN_BUS:Main Effect

バスの場合、この引数は実際のバスを指定します。

$NI_BUS_OFFSET + [0 ... 15] 16本あるバスのいずれか

内部モジュレーターの場合、この引数はget_target_idx()で取得できるモジュレーションスライダーを指定します。

Flex Envelopeの場合、この引数は$ENGINE_PAR_FLEXENV_STAGE_TIME$ENGINE_PAR_FLEXENV_STAGE_LEVEL$ENGINE_PAR_FLEXENV_STAGE_SLOPEを使うときに、どのエンベロープステージを対象にするかを指定します。

Step Modulatorの場合、この引数は$ENGINE_PAR_STEPSEQ_STEP_VALUEを使うときに、どのステップの値を対象にするかを指定します。

それ以外の用途では、この引数に-1を設定します。

on init
    declare $i

    declare ui_label $label (2, 6)
    set_text($label,"Release Trigger Groups:")

    while ($i < $NUM_GROUPS)
        if (get_engine_par($ENGINE_PAR_RELEASE_TRIGGER, $i, -1, -1) = 1)
            add_text_line($label, group_name($i) & " (Index: " & $i & ")")
        end if

        inc($i)
    end while
end on

リリーストリガーグループの名前とインデックスを出力します。

on init
    declare ui_label $label (2, 6)
    declare ui_button $Refresh

    declare $i
    declare !effect_name[128] 
    !effect_name[$EFFECT_TYPE_NONE] := "None"
    !effect_name[$EFFECT_TYPE_PHASER] := "Phaser" 
    !effect_name[$EFFECT_TYPE_CHORUS] := "Chorus" 
    !effect_name[$EFFECT_TYPE_FLANGER] := "Flanger" 
    !effect_name[$EFFECT_TYPE_REVERB] := "Reverb" 
    !effect_name[$EFFECT_TYPE_DELAY] := "Delay" 
    !effect_name[$EFFECT_TYPE_IRC] := "Convolution"
    !effect_name[$EFFECT_TYPE_GAINER] := "Gainer"

    while ($i < 8)
        add_text_line($label, "Slot: " & $i + 1 & ": " & ...
                      !effect_name[get_engine_par($ENGINE_PAR_SEND_EFFECT_TYPE, -1, $i, -1)])

        inc($i)
    end while
end on

on ui_control ($Refresh)
    set_text($label, "")

    while ($i < 8)
        add_text_line($label, "Slot: " & $i + 1 & ": " & ...
                      !effect_name[get_engine_par($ENGINE_PAR_SEND_EFFECT_TYPE, -1, $i, -1)])

        inc($i)
    end while

    $Refresh := 0
end on

8つあるSend Effectスロットすべてのエフェクトタイプを出力します。

関連項目

Module Types and Subtypes


get_engine_par_disp()

get_engine_par_disp(<parameter>, <group>, <slot>, <generic>)

特定のエンジンパラメーターの表示値を文字列として返します。

<parameter>

ビルトインのエンジンパラメーター定数のいずれかを使ってパラメーターを指定します。

<group>

指定したパラメーターが存在するグループのインデックス(ゼロ始まり)です。

指定したパラメーターがInstrumentレベルに存在する場合は、-1を入力します。

バスとMain FXもInstrumentレベルに存在するため、バスを操作したい場合は<group>に-1を設定する必要があります。

<slot>

指定したパラメーターのスロットインデックス(ゼロ始まり)です。これはグループ/インストゥルメントのエフェクト、モジュレーター、モジュレーション強度にのみ適用されます。

グループ/インストゥルメントのエフェクトの場合、この引数はそのエフェクトが存在するスロット(ゼロ始まり)を指定します。

モジュレーターとモジュレーション強度の場合、この引数はget_mod_idx()で取得できるインデックスを指定します。

それ以外の用途では、この引数に-1を設定します。

<generic>

この引数はインストゥルメントエフェクトと内部モジュレーターに適用されます。

インストゥルメントエフェクトの場合、この引数は次のものを区別します。

$NI_SEND_BUS:Send Effect

$NI_INSERT_BUS:Insert Effect

$NI_MAIN_BUS:Main Effect

バスの場合、この引数は実際のバスを指定します。

$NI_BUS_OFFSET + [0 ... 15] 16本あるバスのいずれか

内部モジュレーターの場合、この引数はget_target_idx()で取得できるモジュレーションスライダーを指定します。

Flex Envelopeの場合、この引数は$ENGINE_PAR_FLEXENV_STAGE_TIME$ENGINE_PAR_FLEXENV_STAGE_LEVEL$ENGINE_PAR_FLEXENV_STAGE_SLOPEを使うときに、どのエンベロープステージを対象にするかを指定します。

Step Modulatorの場合、この引数は$ENGINE_PAR_STEPSEQ_STEP_VALUEを使うときに、どのステップの値を対象にするかを指定します。

それ以外の用途では、この引数に-1を設定します。

on init
    declare $i

    declare ui_label $label (2, 6)
    set_text($label, "Group Volume Settings:")

    while ($i < $NUM_GROUPS)
        add_text_line($label, group_name($i) & ": " & get_engine_par_disp($ENGINE_PAR_VOLUME, $i, -1, -1) & " dB")

        inc($i)
    end while
end on

インストゥルメント内のグループのボリューム設定を取得します。


get_engine_par_disp_ext()

get_engine_par_disp_ext(<parameter>, <value>, <group>, <slot>, <generic>)

特定のエンジンパラメーターについて、任意の値に対する表示値を文字列として返します。

<parameter>

ビルトインのエンジンパラメーター定数のいずれかを使ってパラメーターを指定します。

<value>

指定したパラメーターに設定する値です。

値の範囲は常に0から1000000までです。ただしスイッチの場合は0または1となり、連続的ではなく段階的な値をとるエンジンパラメーターも一部あります。これらには専用の定数が用意されているか、汎用的な整数の値域が定められており、エンジンパラメーターのセクションで個別に記載されています。

<group>

指定したパラメーターが存在するグループのインデックス(ゼロ始まり)です。

指定したパラメーターがInstrumentレベルに存在する場合は、-1を入力します。

バスとMain FXもInstrumentレベルに存在するため、バスを操作したい場合は<group>に-1を設定する必要があります。

<slot>

指定したパラメーターのスロットインデックス(ゼロ始まり)です。これはグループ/インストゥルメントのエフェクト、モジュレーター、モジュレーション強度にのみ適用されます。

グループ/インストゥルメントのエフェクトの場合、この引数はそのエフェクトが存在するスロット(ゼロ始まり)を指定します。

モジュレーターとモジュレーション強度の場合、この引数はget_mod_idx()で取得できるインデックスを指定します。

それ以外の用途では、この引数に-1を設定します。

<generic>

この引数はインストゥルメントエフェクトと内部モジュレーターに適用されます。

インストゥルメントエフェクトの場合、この引数は次のものを区別します。

$NI_SEND_BUS:Send Effect

$NI_INSERT_BUS:Insert Effect

$NI_MAIN_BUS:Main Effect

バスの場合、この引数は実際のバスを指定します。

$NI_BUS_OFFSET + [0 ... 15] 16本あるバスのいずれか

内部モジュレーターの場合、この引数はget_target_idx()で取得できるモジュレーションスライダーを指定します。

Flex Envelopeの場合、この引数は$ENGINE_PAR_FLEXENV_STAGE_TIME$ENGINE_PAR_FLEXENV_STAGE_LEVEL$ENGINE_PAR_FLEXENV_STAGE_SLOPEを使うときに、どのエンベロープステージを対象にするかを指定します。

Step Modulatorの場合、この引数は$ENGINE_PAR_STEPSEQ_STEP_VALUEを使うときに、どのステップの値を対象にするかを指定します。

それ以外の用途では、この引数に-1を設定します。

on init
    declare $value

    declare ui_knob $Cutoff (0, 1000000, 1)
    declare ui_knob $Macro (0, 1000000, 10000)
    declare ui_knob $MacroAmt (-1000000, 1000000, 10000)

    $MacroAmt := -500000

    set_knob_defval($Cutoff, 1000000)
    set_knob_defval($MacroAmt, 0)

    set_knob_unit($Cutoff, $KNOB_UNIT_HZ)
    set_knob_unit($Macro, $KNOB_UNIT_PERCENT)
    set_knob_unit($MacroAmt, $KNOB_UNIT_PERCENT)

    make_persistent($Cutoff)
    make_persistent($Macro)
    make_persistent($MacroAmt)

    set_engine_par($ENGINE_PAR_EFFECT_TYPE, $EFFECT_TYPE_FILTER, -1, 0, $NI_INSERT_BUS)
end on

function SetCutoff()
    $value := int(real($Cutoff) + (real($Macro) * real($MacroAmt) * 1.0e-6))

    if ($value < 0)
        $value := 0
    end if

    if ($value > 1000000)
        $value := 1000000
    end if

    set_engine_par($ENGINE_PAR_CUTOFF, $value, -1, 0, $NI_INSERT_BUS)
    set_knob_label($Cutoff, get_engine_par_disp_ext($ENGINE_PAR_CUTOFF, $Cutoff, -1, 0, $NI_INSERT_BUS))
end function

on persistence_changed
    call SetCutoff()
end on

on ui_controls
    call SetCutoff()
end on

マクロ的なコントロールによる追加のオフセットのために実際のエンジンパラメーターの値が異なっていても、フィルターカットオフの基準値を取得します。


get_voice_limit()

get_voice_limit(<voice-type>)

SourceモジュールのTime Machine Proサンプラーモードのボイスリミットを返します。

<voice-type>

ボイスタイプです。次のいずれかを指定できます。

  • $NI_VL_TMPRO_STANDARD:標準品質モード

  • $NI_VL_TMPRO_HQ:高品質モード

on init
    declare ui_label $label (3, 2)

    add_text_line($label, "Standard Voice Limit: " &  get_voice_limit($NI_VL_TMPRO_STANDARD))
    add_text_line($label, "HQ Voice Limit: " & get_voice_limit($NI_VL_TMPRO_HQ))
end on

TM Proのボイスリミットを表示します。

関連項目

set_voice_limit()


output_channel_name()

output_channel_name(<output-number>)

指定した出力のチャンネル名を返します。

<output-number>

出力チャンネルの番号(ゼロ始まり。つまり最初の出力は0になります)です。

on init
    declare $i

    declare ui_menu $menu
    add_menu_item($menu, "Default", -1)

    $i := 0
    while ($i < $NUM_OUTPUT_CHANNELS)
        add_menu_item($menu, output_channel_name($i), $i)

        inc($i)
    end while

    $menu := get_engine_par($ENGINE_PAR_OUTPUT_CHANNEL, 0, -1, -1)
end on

on ui_control ($menu)
    set_engine_par($ENGINE_PAR_OUTPUT_CHANNEL,$menu, 0, -1, -1)
end on

最初のグループの出力チャンネル割り当てメニューを再現します。

関連項目

一般$NUM_OUTPUT_CHANNELS$ENGINE_PAR_OUTPUT_CHANNEL


set_engine_par()

set_engine_par(<parameter>, <value>, <group>, <slot>, <generic>)

Kontaktのさまざまなエンジンパラメーターを制御します。

<parameter>

ビルトインのエンジンパラメーター定数のいずれかを使ってパラメーターを指定します。

<value>

指定したパラメーターに設定する値です。

値の範囲は常に0から1000000までです。ただしスイッチの場合は0または1となり、連続的ではなく段階的な値をとるエンジンパラメーターも一部あります。これらには専用の定数が用意されているか、汎用的な整数の値域が定められており、エンジンパラメーターのセクションで個別に記載されています。

<group>

指定したパラメーターが存在するグループのインデックス(ゼロ始まり)です。

指定したパラメーターがInstrumentレベルに存在する場合は、-1を入力します。

バスとMain FXもInstrumentレベルに存在するため、バスを操作したい場合は<group>に-1を設定する必要があります。

<slot>

指定したパラメーターのスロットインデックス(ゼロ始まり)です。これはグループ/インストゥルメントのエフェクト、モジュレーター、モジュレーション強度にのみ適用されます。

グループ/インストゥルメントのエフェクトの場合、この引数はそのエフェクトが存在するスロット(ゼロ始まり)を指定します。

モジュレーターとモジュレーション強度の場合、この引数はget_mod_idx()で取得できるインデックスを指定します。

それ以外の用途では、この引数に-1を設定します。

<generic>

この引数はインストゥルメントエフェクトと内部モジュレーターに適用されます。

インストゥルメントエフェクトの場合、この引数は次のものを区別します。

$NI_SEND_BUS:Send Effect

$NI_INSERT_BUS:Insert Effect

$NI_MAIN_BUS:Main Effect

バスの場合、この引数は実際のバスを指定します。

$NI_BUS_OFFSET + [0 ... 15] 16本あるバスのいずれか

内部モジュレーターの場合、この引数はget_target_idx()で取得できるモジュレーションスライダーを指定します。

Flex Envelopeの場合、この引数は$ENGINE_PAR_FLEXENV_STAGE_TIME$ENGINE_PAR_FLEXENV_STAGE_LEVEL$ENGINE_PAR_FLEXENV_STAGE_SLOPEを使うときに、どのエンベロープステージを対象にするかを指定します。

Step Modulatorの場合、この引数は$ENGINE_PAR_STEPSEQ_STEP_VALUEを使うときに、どのステップの値を対象にするかを指定します。

それ以外の用途では、この引数に-1を設定します。

補足

  • 一部のエンジンパラメーターは非同期に実行されます(最も代表的なのはエフェクトのタイプとサブタイプの設定です)。on initコールバックからエフェクトスロットの内容を変更した場合は同期的に実行されるため、インストゥルメントの初期ロード時間に大きく影響することがあります。特に多数のエフェクトスロットに対してこれを行う場合はその影響が大きくなります。このような処理はon persistence_changedコールバックに移すことをおすすめします。

on init
    declare ui_knob $Volume (0, 1000000, 1000000)
end on

on ui_control ($Volume)
    set_engine_par($ENGINE_PAR_VOLUME, $Volume, -1, -1, -1)
end on

ノブでインストゥルメントのボリュームを制御します。

on init
    declare ui_knob $Freq (0, 1000000, 1000000)
    declare ui_button $Bypass
end on

on ui_control ($Freq)
    set_engine_par($ENGINE_PAR_CUTOFF, $Freq, 0, 0, -1)
end on

on ui_control ($Bypass)
    set_engine_par($ENGINE_PAR_EFFECT_BYPASS, $Bypass, 0, 0, -1)
end on

最初のグループの最初のスロットにあるフィルターモジュールのカットオフとバイパスボタンを制御します。

on init
    declare ui_knob $Knob (-1000, 1000, 10)

    declare $mod_idx
    $mod_idx := get_mod_idx(0, "FILTER_ENV")

    declare $target_idx
    $target_idx := get_target_idx(0, $mod_idx, "ENV_AHDSR_CUTOFF")
end on

on ui_control ($Knob)
    set_engine_par($ENGINE_PAR_MOD_TARGET_MP_INTENSITY, $Knob * 1000, 0, $mod_idx, $target_idx)
end on

最初のグループで、エンベロープからフィルターカットオフへのモジュレーションについて、フィルターエンベロープの量を制御します。注意:フィルターエンベロープは手動で"FILTER_ENV"にリネームしてあります。

on init
    declare ui_knob $Vol (0, 1000000, 1000000)
end on

on ui_control ($Vol)
    set_engine_par($ENGINE_PAR_VOLUME, $Vol, -1, -1, $NI_BUS_OFFSET + 15)
end on

16番目のバスのアンプボリュームを制御します。


set_voice_limit()

set_voice_limit(<voice-type>, <value>)

SourceモジュールのTime Machine Proモードのボイスリミットを設定します。

<voice-type>

ボイスタイプです。次のいずれかを指定できます。

  • $NI_VL_TMPRO_STANDARD:標準品質モード

  • $NI_VL_TMPRO_HQ:高品質モード

<value>

Time Machine Proモードのボイスリミットです。

補足

  • ボイスリミットの変更は非同期の処理です。そのため、新しく確保されたボイスにインスタンス化の直後から確実にアクセスできるとは限りません。これに対処するため、set_voice_limit()コマンドは$NI_ASYNC_IDを返し、on async_completeコールバックをトリガーします。

  • このコマンドは、インストゥルメントのメモリ使用量を調整するために使用します。Time Machine Proは、ロードされたサンプルが使用するメモリとは別に、独自のメモリ確保を行います。この状況はKontaktのサイドペインにあるMonitor → Engineタブで確認できます。

on init
    declare $change_voices_id

    declare ui_value_edit $Voices (1, 8, 1)

    make_persistent($Voices)
end on

on ui_control ($Voices)
    $change_voices_id := set_voice_limit($NI_VL_TMPRO_STANDARD, $Voices)
end on

on async_complete
    if ($NI_ASYNC_ID = $change_voices_id)
        message("New TMPro Std Voice Limit: " & get_voice_limit($NI_VL_TMPRO_STANDARD))
    end if
end on

TM Proのボイスリミットを変更します。

関連項目

get_voice_limit()


参照元情報:Engine Parameter Commands
https://docs.native-instruments.com/online-guides/ksp-manual/en/engine-parameter-commands