| |
|---|---|
| |
| 変更するシグナルです。次のいずれかを指定できます。
|
| 指定したシグナルタイプに応じて異なります。
|
<parameter>を0に設定すると、特定のリスナーシグナルを完全に無効にすることもできます。
on init
declare ui_value_edit $Tempo (20, 300, 1)
declare ui_switch $Play
make_persistent($Tempo)
read_persistent_var($Tempo)
$Tempo := 120
set_listener($NI_SIGNAL_TIMER_MS, 60000000 / $Tempo)
end on
on listener
if ($NI_SIGNAL_TYPE = $NI_SIGNAL_TIMER_MS and $Play = 1)
play_note(60, 127, 0, $DURATION_EIGHTH)
end if
end on
on ui_control($Tempo)
change_listener_par($NI_SIGNAL_TIMER_MS, 60000000 / $Tempo)
end on
ごく基本的なメトロノームです。
コールバックとUI: $NI_SIGNAL_TYPE
|
|---|
マイクロ秒の値を、テンポに依存するMIDIティックの値に変換します。 |
on init
declare ui_label $bpm (1, 1)
set_text($bpm, ms_to_ticks(60000000) / 960)
end on
現在のホストテンポを表示します。
時間とトランスポート: $NI_SONG_POSITION
| |
|---|---|
listenerコールバックが反応するシグナルを設定します。 | |
| listenerコールバックが反応するイベントです。次のタイプを使用できます。
|
| ユーザーが定義するパラメーターで、指定したシグナルタイプに応じて異なります。
|
$NI_SIGNAL_TIMER_BEATを使用する場合、最大の分解能は1拍あたり24ティックです。
on init
set_listener($NI_SIGNAL_TIMER_BEAT, 1)
end on
on listener
if ($NI_SIGNAL_TYPE = $NI_SIGNAL_TIMER_BEAT)
message($ENGINE_UPTIME)
end if
end on
1拍ごとにlistenerコールバックをトリガーします。トランスポートが停止しているときもトリガーされます。
コールバックとUI: $NI_SIGNAL_TYPE
| |
|---|---|
指定したコールバック内のwaitコマンドを停止します。 | |
| waitコマンドを停止する対象のコールバックのID番号です。 |
| 0:現在のwaitのみを停止します。 1:現在のwaitを停止し、このコールバック内の以降のwaitコマンドをすべて無視します。 |
コールバック内のすべてのwait()コマンドを停止する場合は、whileループの扱いに注意してください。
on init
declare $id
declare ui_button $Play
end on
on ui_control ($Play)
if ($Play = 1)
$id := $NI_CALLBACK_ID
play_note(60, 127, 0, $DURATION_QUARTER)
wait($DURATION_QUARTER)
if ($Play = 1)
play_note(64, 127, 0, $DURATION_QUARTER)
end if
wait($DURATION_QUARTER)
if ($Play = 1)
play_note(67, 127, 0, $DURATION_QUARTER)
end if
else
stop_wait($id, 1)
fade_out($ALL_EVENTS, 10000, 1)
end if
end on
Playボタンで単純な3和音のアルペジオをトリガーします。stop_wait()コマンドが無い場合、Playボタンを素早く連続して押すと並行してコールバックが実行され、アルペジオが複数重なる結果になります。
コールバックとUI: コールバックタイプの変数と定数
|
|---|
KSPタイマーのビルトイン変数( |
$KSP_TIMER変数は32ビット符号付きであるため、2147483648マイクロ秒、およそ35分47秒で上限に達する点に注意してください。
KSPタイマーはCPUクロックに基づいているため、主な用途はデバッグと最適化です。スクリプトの特定の処理の効率を測定するのに非常に役立つツールです。ただし、Kontaktをオフラインバウンスで使用している場合でもリアルタイムの一定速度で進むため、音楽的なタイミングの用途には使用しないでください。
on init
declare $a
declare $b
declare $c
end on
on note
reset_ksp_timer
$c := 0
while ($c < 128)
$a := 0
while($a < 128)
set_event_par($EVENT_ID, $EVENT_PAR_TUNE, random(-1000, 1000))
inc($a)
end while
inc($c)
end while
message($KSP_TIMER)
end on
入れ子のwhileループの例です。およそ5400〜5800マイクロ秒かかります。
時間とトランスポート: $ENGINE_UPTIME, $KSP_TIMER
|
|---|
テンポに依存するMIDIティックの値を、マイクロ秒の値に変換します。 |
戻り値はマイクロ秒単位であるため、32ビット符号付きの性質上、現在のテンポでの指定したティック数が2147483648マイクロ秒、およそ35分47秒を超える場合は正しい値が返らない点に注意してください。
on init
declare $msec
declare $sec
declare $min
declare ui_label $label (2, 1)
set_listener($NI_SIGNAL_TIMER_MS, 1000)
end on
on listener
if ($NI_SIGNAL_TYPE = $NI_SIGNAL_TIMER_MS)
$msec := ticks_to_ms($NI_SONG_POSITION) / 1000
$sec := $msec / 1000
$min := $sec / 60
set_text($label, $min & ":" & $sec mod 60 & "." & $msec mod 1000)
end if
end on
ソングポジションをリアルタイムで表示します。
時間とトランスポート: $NI_SONG_POSITION
|
|---|
コールバックを、マイクロ秒単位で指定した時間だけ一時停止します。 |
wait()は、スクリプト内のその位置でコールバックを指定した時間だけ停止します。つまりコールバックをフリーズさせますが、その間も他のコールバックは処理されます。指定した時間が経過すると、コールバックは続きから再開します。
on note
ignore_event($EVENT_ID)
if ($DURATION_BAR = 0)
wait(($DURATION_QUARTER * 4) - $DISTANCE_BAR_START)
else
wait($DURATION_BAR - $DISTANCE_BAR_START)
end if
play_note($EVENT_NOTE, $EVENT_VELOCITY, 0, -1)
end on
すべてのノートを次の小節の頭にクオンタイズします。このスクリプトは、Kontaktスタンドアローンでは$DURATION_BARが0を返すことにも対応しており、その場合は4分音符の長さを使って4/4小節を組み立てます。
時間とトランスポート: $DURATION_QUARTER
|
|---|
|
複数の処理を実行する場合、それらをまとめて収集し、そのコレクションに対してwait_async()関数を呼び出すこともできます。このようにまとめて収集した処理は1つのブロックとして計算されるため、パフォーマンスが向上します。非同期処理がすでにパイプラインに存在しない場合や無効な場合は、待機は行われずスクリプトはそのまま続行します。
wait_async(set_engine_par($ENGINE_PAR_EFFECT_TYPE, ... $EFFECT_TYPE_CHORUS, -1, 2, 1))
単一の非同期処理を実行する例です。
%asyncid[0] := async_operation
%asyncid[1] := another_async_operation
...
%asyncid[x] := last_async_operation
$i := 0
while($i < num_elements(%asyncid))
wait_async(%asyncid[$i])
inc($i)
end while
複数の非同期処理を実行する例です。
一般: $NI_ASYNC_EXIT_STATUS, $NI_ASYNC_ID
|
|---|
コールバックを、MIDIティック単位で指定した時間だけ一時停止します。 |
wait()と同じですが、待機時間のパラメーターにMIDIティックを使用します。
960MIDIティックが4分音符1拍に相当します。
参照元情報:Time-Related Commands
https://docs.native-instruments.com/online-guides/ksp-manual/en/time-related-commands