KSPリファレンスマニュアル 4 - 算術コマンドと演算子(Arithmetic Commands & Operators)

KSPリファレンスマニュアル 4 - 算術コマンドと演算子(Arithmetic Commands & Operators)


基本演算子

以下の演算子は、整数と実数のどちらに対しても使用できます。

x := y

代入します(yの値がxに代入されます)。

x + y

加算を行います。

x - y

減算を行います。

x * y

乗算を行います。

x / y

除算を行います。

-x

符号を反転した値です。

abs(x)

絶対値を返します。

signbit(x)

符号ビットを返します(数値が負の場合は1を、それ以外の場合は0を返します)。

sgn(x)

符号関数です(数値が負の場合は-1を、ゼロの場合は0を、正の場合は1を返します)。


整数に関するコマンド

以下のコマンドおよび演算子は、整数型の変数と整数値に対してのみ使用できます。

inc(x)

式の値を1つ増やします(x := x + 1)。

dec(x)

式の値を1つ減らします(x := x – 1)。

x mod y

剰余演算子です。整数の除算を行った後に残る余りを返します。

例:13 mod 85を返します。


実数に関するコマンド

以下のコマンドは、実数に対してのみ使用できます。

x mod y

剰余演算子です。除算を行った後に残る余りを返します。

例:4.5 mod 2.00.5という値を返します。

exp(x)

指数を求める関数です(exの値を返します)。

exp2(x)

2を底とする指数を求める関数です(2xの値を返します)。

log(x)

自然対数を求める関数です(底はe)。

log2(x)

2を底とする対数を求める関数です(底は2)。

log10(x)

常用対数を求める関数です(底は10)。

pow(x, y)

べき乗を求める関数です(xyの値を返します)。

sqrt(x)

平方根を求める関数です。

cbrt(x)

立方根を求める関数です。


丸めコマンド

丸めコマンドは、実数に対してのみ使用できます。

ceil(x)

天井関数です(切り上げます)。

ceil(2.3) = 3.0

floor(x)

床関数です(切り捨てます)。

floor(2.8) = 2.0

round(x)

四捨五入します(最も近い値へ丸めます)。

round(2.3) = 2.0

round(2.8) = 3.0


三角関数コマンド

三角関数コマンドは、実数に対してのみ使用できます。

cos(x)

コサインを求める関数です。

sin(x)

サインを求める関数です。

tan(x)

タンジェントを求める関数です。

acos(x)

アークコサイン(逆コサイン)を求める関数です。

asin(x)

アークサイン(逆サイン)を求める関数です。

atan(x)

アークタンジェント(逆タンジェント)を求める関数です。


ビット演算子

以下のビット演算子を使用できます:

x .and. y

ビット単位のAND演算を行います。

x .or. y

ビット単位のOR演算を行います。

x .xor. y

ビット単位のXOR演算を行います。

.not. x

ビット単位のNOT演算(否定)を行います。

sh_left(<expression>, <shift-bits>)

<expression>のビットを<shift-bits>で指定した分だけ左へシフトします。実質的には、式の値を2倍します。

sh_right(<expression>, <shift-bits>)

<expression>のビットを<shift-bits>で指定した分だけ右へシフトします。実質的には、式の値を2で割ります。


random()

random(<min>, <max>)

<min>から<max>までの範囲(両端を含む)で、ランダムな整数を生成します。

on init
    declare $rnd_amt
    declare $new_vel
end on

on note
    $rnd_amt := $EVENT_VELOCITY * 10 / 100
    $new_vel := random($EVENT_VELOCITY - $rnd_amt, $EVENT_VELOCITY + $rnd_amt)

    { mirror invalid velocity values into the allowed velocity range }
    if ($new_vel > 127)
        $new_vel := 127 - ($new_vel mod 127)
    end if

    if ($new_vel < 1)
        $new_vel := 1 + abs($new_vel)
    end if

    change_velo($EVENT_ID, $new_vel)
end on

ベロシティを±10パーセントの範囲でランダムに変化させます。


real()

real(<integer-value>)

整数の値を実数の値に変換します。

on init
    declare ~velocity_disp
end on

on note
    ~velocity_disp := real($EVENT_VELOCITY) / 127.0
    message(~velocity_disp)
end on

イベントのベロシティを0.0から1.0の範囲で表示します。

関連項目

int()


int()

int(<real-value>)

実数の値を整数の値に変換します。

補足

  • このコマンドを丸め関数と組み合わせずに使用すると、実数の値は切り捨てられます。そのため、実数値2.22.8のどちらに対してこの関数を実行しても、返される整数値はどちらも2になります

  • このコマンドは、精度を64ビットから32ビットへ下げます。そのため、32ビット符号付き整数の範囲(-2147483648 ... 2147483647)を超える有効な実数は、オーバーフローとなってしまうため、正しく変換されません。

on init
    declare $test_int
    declare ~test_real := 2.8

    $test_int := int(~test_real)
    message($test_int)
end on

変数を実数から整数へ変換し、その結果を表示します。

関連項目

real()

丸めコマンド: ceil(), floor(), round()


msb()

msb(<value>)

14ビットの値のうち、上位バイトにあたる部分を返します。

on rpn
    message(msb($RPN_VALUE))
end on

RPNおよびNRPNメッセージを扱うときによく使われます。

on init
    declare ui_value_edit $Value (0, 16383, 1)
end on

on ui_control ($Value)
    message("MSB: " & msb($Value) & " - LSB: " & lsb($Value))
end on

MSBとLSBについて理解する。

関連項目

lsb()

イベントとMIDI: $RPN_ADDRESS, $RPN_VALUE


lsb()

lsb(<value>)

14ビットの値のうち、下位バイトにあたる部分を返します。

on rpn
    message(lsb($RPN_VALUE))
end on

RPNおよびNRPNメッセージを扱うときによく使われます。

on init
    declare ui_value_edit $Value (0, 16383, 1)
end on

on ui_control ($Value)
    message("MSB: " & msb($Value) & " - LSB: " & lsb($Value))
end on

MSBとLSBについて理解する。

関連項目

msb()

イベントとMIDI: $RPN_ADDRESS, $RPN_VALUE


参照元情報:Arithmetic Commands & Operators
https://docs.native-instruments.com/online-guides/ksp-manual/en/arithmetic-commands---operators