Posted by & filed under KSP Scripting (NI Kontakt) - Tutorials, KSP: Basics.

The Basic code structure is very simple. There are several callbacks where you basically put in your code. At least you need the init callback on init ... end on The code inside callbacks gets executed when specific events happen. For example playing a note on your keyboard always executes the “on note” callback.

You can imagine it like that an event triggers the respective callback executing all your code inside it. Thereby the same callback can be called multiple times. For example playing 2 notes on your keyboard at the same time will execute 2 instances of the on note ... end on callback.

There a re more callbacks like the ones covered here but with these you can already create cool instruments.

Note: some internal commands & constants can only be used inside specific callbacks, like e.g. the wait() & purge() command can’t be used inside the init callback.

on init […] end on

the on init callback gets executed automatically on every start of our instrument. It also gets executed when hitting the apply button and it can be executed when loading snapshots. On init is always required because you can only declare new variables or UI controls (knobs, buttons, menus,…) here. You also have to use it for defining all the default or initial values.

Example (simple init)

on init
   set_ui_height_px(540)
   make_perfview
   declare ui_switch $switch
   declare ui_knob $knob (0,1000000,100)
   make_persistent($knob)
   message ("")
end on

on note […] end on

this callback is executed when you play a note. Several instances can be called at once. For example you can use it to create a round robin playback for more realistic instruments or like in the example below to add additional sounds to create intervals & chords.

Example (this will add two additional notes, creating a chord)

on note
   play_note($EVENT_NOTE+4,$EVENT_VELOCITY,0,-1)
   play_note($EVENT_NOTE+7,$EVENT_VELOCITY,0,-1)
end on

on release […] end on

same as on note but executed when releasing a key

on ui_control(<variable>) […] end on

executed when using the respective UI element (knobs, buttons, switches, menus etc.) For each of your controls you can add an individual on ui_control. Simply use the UI element’s variable assign it to your control. In the first place we want to use the on ui_control to change engine parameters like FX settings (e.g. reverb time, attack time, filter cutoffs etc.). But we can also use them to change other settings like UI behaviors, or to activate other functions, to play a notes, midi files and many more.

Example – this sets the attack and release time of an AHDSR, named “ENV_AHDSR”:

on ui_control ($attack)
   set_engine_par($ENGINE_PAR_ATTACK, $attack, $group, find_mod($group,"ENV_AHDSR"), -1)
end on
on ui_control ($release)
   set_engine_par($ENGINE_PAR_RELEASE, $release, $group, find_mod($group,"ENV_AHDSR"), -1)
end on

NOTE: You can find a full list of all callbacks in your KSP reference manual.

 

Leave a Reply

Your email address will not be published. Required fields are marked *