Kontakt Scripting - Kontakt Custom Script Collection

Discussion in 'AudioSex Academy' started by Alraun, Nov 7, 2014.

  1. Clandestine

    Clandestine Platinum Record

    Joined:
    Nov 11, 2013
    Messages:
    717
    Likes Received:
    151
    Start at the beginning *yes* Am no expert & not sure this the correct place but will give it a go if the MODS/Alraun don't object.

    Scripts are written in the Kontakt Script Language.

    A script consists of a number text lines with instructions for the Kontakt Script Processor (KSP).

    The KSP interprets your script and carries out your instructions when it receives notes or MIDI CC

    SO

    Firstly u should have a copy of the KSP Reference manual it is an invaluable tool. However as you delve deeper into scripting you will find there is a lot they forget to mention :sad:

    Scripts are built into four main parts called callbacks.

    A callback is for a task that is to be performed when some event occurs such aas when a note is pressed.

    KSP triggers these events for you. However it is up to you to say what should happen.

    You will need to learn a bit of code

    All scripts start with the command "on init"

    on init
    end on

    on note
    end on

    on release
    end on

    on controller
    end on


    on init & end on are used as markers of the beginning and end of the init callback.

    Between these commands you can place lines that specify what should happen in that callback

    on init

    The init callback is performed once at the time the script is loaded & performs all necessary initilizations

    on note

    The note callback is performed whenever a note is pressed & can be used to alter pitch, velocity & many other variables.

    on release

    The release callback is performed whenever a note is released.

    Here you can choose which release samples are used which can be very useful depending upon your instrument i.e Guitar, Piano etc

    on controller

    The controller callback is performed whenever a MIDI CC message is received this can be used to let your script assign function to the movements of the mod-wheel or the sustain pedal being pressed or released.

    Since u mentioned Filters I will build a script that makes a simple knob to control a filter.

    A good thing to do would be to read up on where various FX can be placed within Kontakt & the corresponding Slot numbers

    For this example a Filter cannot be used as a send effect so it must be placed on the group insert FX or Instrument Insert FX level

    So open up Kontakt, Click on the wrench ICON

    [​IMG]


    and u will be presented with


    [​IMG]



    Now as we were talking about filters go to say the Instrument InsertFX, THE FIRST SLOT, click on add FX & choose the first simple SV LP1 Filter! It only has one knob, Cutoff :wink:

    As I said it is important to learn which slot numbers correspond to which Slots.

    To make things confusing the first slot in Kontakt (i.e the one u now have your filter in is numbered 0!)

    They then increase i.e slot 2 would be numbered 1, slot 3 would be numbered 2 all the way to slot 8 which by default on that level has your send levels. This would be numbered 7 :wink:

    Now time to write your script

    As said earlier all script start with the command on init

    Another important thing is to remember that kontakt will ignore anything written between { } Comes in very handy so start script. Click on script editor & then on edit script. A text box will open in this write your script!

    Code:
    on init
    
    make_perfview {This command makes the performance view}
    
    set_ui_height_px(200) {This command sets the height of your performance view declare in pixels or by grid numbers}
    
    set_script_title("Low Pass Filter")  {Sets the Script title}
    
    message("") {clears any messages}
    
    {DECLARE ANY CONSTANTS}
    
    declare const $LP_slot:=0 {Tells Kontakt that our LP Filter is in slot 1, Constants DO NOT CHANGE}
    
    {DECLARE GUI CONTROLS}
    
    declare ui_knob $knob_1 (0,1000000,1) {Range from 0 - 1000000 in increments of 1}
    
    set_engine_par($ENGINE_PAR_CUTOFF,$knob_1,-1,$LP_slot,-1) {Tells Kontakt what you wants the knob to change}
    
    $knob_1:= _get_engine_par($ENGINE_PAR_CUTOFF,-1,$LP_slot,-1) {Gets The Value from The Knob}
    
    set_knob_defval ($knob_1,0) {Sets the Default Value for the LP FILTER}
    
    move_control_px($knob_1,100,75) {Moves the Knob by pixels to desired location}
    
    set_text($knob_1,"Low Pass") {sets the text on the knob}
    
    make_persistent($knob_1) {Sets Knob Persistency}
    
    _read_persistent_var($knob_1) {Reads Persistent}
    
    set_control_help ($knob_1,"Changes Cutoff of LP Filter.") {Sets HELP INFO when mouse over control in info panel}
    
    end on
    
    {----------------------------------------------------------------}
    
    on ui_control($knob_1) {Tells Kontakt what to do when the Knob is moved}
    
    set_engine_par($ENGINE_PAR_CUTOFF,$knob_1,-1,$LP_slot,-1) {Tells Kontakt which knob to move in this case -1,0,-1}
    
    set_control_par_str(get_ui_id($knob_1),$CONTROL_PAR_LABEL,get_engine_par_disp($ENGINE_PAR_CUTOFF,-1,$LP_slot,-1)) {Returns the value for the knob To Display}
    
    end on

    Hit apply and you will get a knob that controls the cutoff of a low pass filter in Slot 1 of the Instrument Insert FX level in performamnce view!

    An important thing to consider is that this control by default will be permanently active and to bypass it you must script in a control (Switch or button) the activate or bypass the Filter. Controls can be placed in either state by default by adding the relevant command.

    That can be Lesson 2 if there is to be a lesson 2 :rofl:

    Anyway good luck & if there anything you not understand give us a shout :wink:
     
    • Interesting Interesting x 1
    • Useful Useful x 1
    • List
  2. Alraun

    Alraun Member

    Joined:
    Sep 17, 2012
    Messages:
    414
    Likes Received:
    13
    I am not alone. :dancing: Oh my darling Clandestine :hug: :rofl: , i am glad that you take action here. Very welcome, your helpful contributions are much appreciated. Sincere thanks. :mates: Of course this thread isn't meant to be a one man show. The idea behind is sharing/helping/learning. My initiative was simply meant as a starting impulse, since we previously didn't have a section about KSP. With you taking part now it's starting to become a community matter. That's nice. *yes*

    To be honest, i didn't have a well-grounded concept before starting this. I am everything else than a master scripter. I started scripting 1 1/2 years ago, with interruptions. I have created lots of different little scripts for myself within that time, as result of my own studies, as learning tools, experimental units, as reminders, and as templates, for the creative integration in larger scripts.

    Next one from me is a value labeled Gainer module:

    7) Gainer Send FX Module

    [​IMG]

    Download KSP Gainer

    :mates:

    And now i will check out Clandestine's scripts :wink:
     
    • Interesting Interesting x 1
    • Useful Useful x 1
    • List
  3. Clandestine

    Clandestine Platinum Record

    Joined:
    Nov 11, 2013
    Messages:
    717
    Likes Received:
    151
    As Alraun & Mods didn't object I will go a little further promised

    Now we need a button to control the filter.

    Firstly I would like to introduce a new constant

    Label_ID

    This will set the font value for all labels.

    Then we need to declare a button and put it in a bypassed state or activated. Remember Zero is on 1 is bypassed. Therefore declare your switch and point it towards the parameter you wish to affect. ie engine bypass!

    Secondly Remember Slots are zero based so slot 1=0, slot 2=1 etc etc.

    So if we write a script it would go like this

    Code:
    on init
    
    make_perfview {This command makes the performance view}
    
    set_ui_height_px(200) {This command sets the height of your performance view declare in pixels or by grid numbers}
    
    set_script_title("Low Pass Filter")  {Sets the Script title}
    
    message("") {clears any messages}
    
    {DECLARE ANY CONSTANTS}
    
    declare const $Label_ID:=14 {Declares the Label ID for all Labels}
    declare const $LP_slot:=0 {Tells Kontakt that our LP Filter is in slot 1, Constants DO NOT CHANGE}
    
    {DECLARE GUI CONTROLS}
    
    {---LP ON/OFF SWITCH---}
    
    declare ui_switch $LPass {Declares Low Pass Switch}
    
    _set_engine_par($ENGINE_PAR_EFFECT_BYPASS,1,-1,$LP_slot,-1) {Points Switch Towards Engine Parameter to change}
    
    set_text($LPass,"Low Pass Off") {Setes Text Switch}
    
    set_control_par(get_ui_id($LPass),$CONTROL_PAR_FONT_TYPE,$Label_ID) {Declares FONT ID For Switch}
    
    set_control_par(get_ui_id($LPass),$CONTROL_PAR_HEIGHT,15) {Sets Height of Switch in PX}
    
    set_control_par(get_ui_id($LPass),$CONTROL_PAR_WIDTH,80)  {Sets Width of Switch in PX}
    
    move_control_px($LPass,105,50) {Moves Switch by Pixels}
    
    
    {---LP KNOB---}
    
    declare ui_knob $knob_1 (0,1000000,1) {Range from 0 - 1000000 in increments of 1}
    
    set_engine_par($ENGINE_PAR_CUTOFF,$knob_1,-1,$LP_slot,-1) {Tells Kontakt what you wants the knob to change}
    
    set_control_par_str(get_ui_id($knob_1),$CONTROL_PAR_LABEL,get_engine_par_disp($ENGINE_PAR_CUTOFF,-1,$LP_slot,-1)) {Returns the value for the knob To Display}
    
    $knob_1:=_get_engine_par($ENGINE_PAR_CUTOFF,-1,$LP_slot,-1) {Gets The Value from The Knob}
    
    set_knob_defval ($knob_1,0) {Sets the Default Value for the LP FILTER}
    
    set_knob_unit($knob_1, $KNOB_UNIT_HZ) {Sets the knob units for LP FILTER}
    
    move_control_px($knob_1,100,75) {Moves the Knob by pixels to desired location}
    
    set_text($knob_1,"Low Pass") {sets the text on the knob}
    
    _read_persistent_var($knob_1) {Reads Persistent}
    
    set_control_help ($knob_1,"Changes Cutoff of LP Filter.") {Sets HELP INFO when mouse over control in info panel}
    
    end on
    
    {---CALLBACKS---}
    
    on ui_control($LPass)
    if ($LPass=0)
    _set_engine_par($ENGINE_PAR_EFFECT_BYPASS,1,-1,$LP_slot,-1)
    set_text($LPass,"Low Pass OFF") {Sets Text On Switch For Bypassed state (MOUSE DOWN}
    
    else
    
    _set_engine_par($ENGINE_PAR_EFFECT_BYPASS,0,-1,$LP_slot,-1)
    set_text($LPass,"Low Pass ON") {Sets Text On Switch For Active state (MOUSE UP}
    
    end if
    
    end on
    
    {---LOW PASS KNOB---}
    
    on ui_control($knob_1) {Tells Kontakt what to do when the Knob is moved}
    
    set_engine_par($ENGINE_PAR_CUTOFF,$knob_1,-1,$LP_slot,-1) {Tells Kontakt which knob to move in this case -1,0,-1}
    
    set_control_par_str(get_ui_id($knob_1),$CONTROL_PAR_LABEL,get_engine_par_disp($ENGINE_PAR_CUTOFF,-1,$LP_slot,-1)) {Returns the value for the knob To Display}
    
    end on
    Fantastic :wow:

    Now we have a filter that displays proper values & a button to bypass it & activate it.

    ALWAYS REFER to the KSP MANUAL & learn the difference between Buttons & switches and the relevant engine parameters.

    Anything u don't understand post here & I will Explain.

    Good Luck
     
    • Interesting Interesting x 1
    • List
  4. lerkjurk

    lerkjurk Platinum Record

    Joined:
    May 22, 2014
    Messages:
    403
    Likes Received:
    297
    Location:
    Behind you
    Thanks all for infos.

    For some who might come late here like me all files still live but "Two different Pitch versions" dead. Then i notice link have 1 extra letter, so delete "l" at end of link and work! :)
     
  5. Clandestine

    Clandestine Platinum Record

    Joined:
    Nov 11, 2013
    Messages:
    717
    Likes Received:
    151
    Right am going to continue the Filter Theme as that what someone asked about.

    Today I am just going to post a script that will let you control the Resonace & Cutoff of a filter such as HP4 in Slot 1 of Instruments Insert FX.

    It also has a bypass button

    Remember slot numbers are Zero Based so slot 1 has a value of 0

    A way round this problem is to declare a constant

    For example High pass filter

    Declare your constant i.e

    declare $FILTER_slot:=0

    This means your Filter is now constantly declared in slot 1 = 0 (as zero based :wink:)

    you can of course change the name to anything u like

    i.e

    declare $SHIT_slot:=0 it wont matter as long as your HP4 Filter is labelled $SHIT *yes*

    i.e for custom graphics u would use the command declare slider

    Code:
    declare ui_slider $SHIT(0,1000000) 
    set_knob_defval($SHIT,500000)
    set_control_par_str(get_ui_id($SHIT),$CONTROL_PAR_PICTURE,"MVolume")
    set_control_par(get_ui_id($SHIT),$CONTROL_PAR_MOUSE_BEHAVIOUR,-500)
    $SHIT:=get_engine_par($ENGINE_PAR_CUTOFF,-1,$FILTER_slot,1)
    move_control_px($SHIT,100,180)
    make_persistent($SHIT)
    read_persistent_var($SHIT)
    The most important thing is that the slider i.e $SHIT is directed towards the relevant engine parameter you wish you effect (in this case Cutoff)

    Therefore the important bit to declare is

    $SHIT:=get_engine_par($ENGINE_PAR_CUTOFF,-1,$SHIT_slot,1) (See KSP Reference for all relevant commands)

    The Different thing about this script is that it is set up to use custom graphics so different rules apply *yes*

    Study the script below & Copy & Paste it into a new instrument. You must of course have say an HO4 Filer in slot 1 of the Instruments Insert FX or values will not be shown. They might not anyway as we have not as yet put the relevant files in the resource folder. :wow:

    Here is the script

    Code:
    on init
    make_perfview
    set_ui_height_px(342)
    set_script_title("Simple Filter")
    set_control_par_str($INST_WALLPAPER_ID,$CONTROL_PAR_PICTURE,"Background")
    message ("")
    
    {declare constants}
    
    declare $LABEL_id:=14
    declare $FILTER_slot:=0
    
    {---BUILD GUI---}
    {---MASTER VOLUME---}
    
    declare ui_slider $volume(0,629959) 
    set_knob_defval($volume,500000)
    set_control_par_str(get_ui_id($volume),$CONTROL_PAR_TEXT,"MVolume")
    set_control_par_str(get_ui_id($volume),$CONTROL_PAR_PICTURE,"MVolume")
    set_control_par(get_ui_id($volume),$CONTROL_PAR_MOUSE_BEHAVIOUR,-350)
    $volume := get_engine_par($ENGINE_PAR_VOLUME,-1,-1,-1)
    move_control_px($Volume,520,20)
    make_persistent($volume)
    
    {---MASTER VOLUME LABEL---}
    
    declare ui_label $MASTER(1,1) 
    move_control_px($MASTER,505,0)
    set_text($MASTER,"MASTER VOL")
    set_control_par(get_ui_id($MASTER),$CONTROL_PAR_FONT_TYPE,$label_id)
    hide_part($MASTER,$HIDE_PART_BG)
    
    {---LABEL DISPLAY TO MASTER VOLUME DB---}
    
    declare ui_label $volumeval(1,1) 
    set_control_par_str(get_ui_id($volumeval),$CONTROL_PAR_TEXT,get_engine_par_disp($ENGINE_PAR_VOLUME,-1,-1,-1))
    set_control_par(get_ui_id($volumeval),$CONTROL_PAR_FONT_TYPE,$label_id)
    move_control_px($volumeval,520,60)
    read_persistent_var($volumeval)
    make_persistent($volumeval)
    hide_part($volumeval,$HIDE_PART_BG)
    
    {---BUTTON TO BYPASS FILTER---}
    
    declare ui_switch $FILBY
    set_control_par(get_ui_id($FILBY),$CONTROL_PAR_HEIGHT,50)
    set_control_par(get_ui_id($FILBY),$CONTROL_PAR_WIDTH,100)
    set_control_par_str(get_ui_id($FILBY),$CONTROL_PAR_PICTURE,"tinyswitch3")
    _set_engine_par($ENGINE_PAR_EFFECT_BYPASS,1,-1,$FILTER_slot,1)
    hide_part($FILBY,$HIDE_PART_BG)
    move_control_px($FILBY,100,100)
    set_text($FILBY,"")
    
    {---FILTER ON/OFF LABEL---}
    
    declare ui_label $FILonoff(1,1) 
    move_control_px($FILonoff,80,80)
    set_text($FILonoff,"ENABLE FILTER")
    set_control_par(get_ui_id($FILonoff),$CONTROL_PAR_FONT_TYPE,$label_id)
    hide_part($FILonoff,$HIDE_PART_BG)
    
    {---KNOB TO CONTROL CUTOFF---}
    
    declare ui_slider $CUTTOF1(0,1000000) 
    set_knob_defval($CUTTOF1,500000)
    set_control_par_str(get_ui_id($CUTTOF1),$CONTROL_PAR_PICTURE,"MVolume")
    set_control_par(get_ui_id($CUTTOF1),$CONTROL_PAR_MOUSE_BEHAVIOUR,-500)
    $CUTTOF1:=get_engine_par($ENGINE_PAR_CUTOFF,-1,$FILTER_slot,1)
    move_control_px($CUTTOF1,100,180)
    make_persistent($CUTTOF1)
    read_persistent_var($CUTTOF1)
    
    {---CUTOFF LABEL---}
    
    declare ui_label $CUTlabl(1,1) 
    move_control_px($CUTlabl,93,160)
    set_text($CUTlabl,"CUTOFF")
    set_control_par(get_ui_id($CUTlabl),$CONTROL_PAR_FONT_TYPE,$label_id)
    hide_part($CUTlabl,$HIDE_PART_BG)
    
    {---LABEL TO DIPLAY CUTOFF---}
    
    declare ui_label $CUTOFF1val(1,1) 
    set_control_par_str(get_ui_id($CUTOFF1val),$CONTROL_PAR_TEXT,get_engine_par_disp($ENGINE_PAR_CUTOFF,-1,$FILTER_slot,1))
    set_control_par(get_ui_id($CUTOFF1val),$CONTROL_PAR_FONT_TYPE,$label_id)
    move_control_px($CUTOFF1val,100,225)
    read_persistent_var($CUTOFF1val)
    make_persistent($CUTOFF1val)
    hide_part($CUTOFF1val,$HIDE_PART_BG)
    
    {---KNOB TO CONTROL RESONANCE---}
    
    declare ui_slider $RESONANCE1(0,1000000) 
    set_knob_defval($RESONANCE1,500000)
    set_control_par_str(get_ui_id($RESONANCE1),$CONTROL_PAR_PICTURE,"MVolume")
    set_control_par(get_ui_id($RESONANCE1),$CONTROL_PAR_MOUSE_BEHAVIOUR,-500)
    $RESONANCE1:=get_engine_par($ENGINE_PAR_RESONANCE,-1,$FILTER_slot,1)
    move_control_px($RESONANCE1,200,180)
    make_persistent($RESONANCE1)
    read_persistent_var($RESONANCE1)
    
    {---RESONANCE LABEL---}
    
    declare ui_label $RESlabl(1,1) 
    move_control_px($RESlabl,185,160)
    set_text($RESlabl,"RESONANCE")
    set_control_par(get_ui_id($RESlabl),$CONTROL_PAR_FONT_TYPE,$label_id)
    hide_part($RESlabl,$HIDE_PART_BG)
    
    {---LABEL TO DIPLAY RESONANCE---}
    
    declare ui_label $RESON1val(1,1) 
    set_control_par_str(get_ui_id($RESON1val),$CONTROL_PAR_TEXT,get_engine_par_disp($ENGINE_PAR_RESONANCE,-1,$FILTER_slot,1))
    set_control_par(get_ui_id($RESON1val),$CONTROL_PAR_FONT_TYPE,$label_id)
    move_control_px($RESON1val,200,225)
    read_persistent_var($RESON1val)
    make_persistent($RESON1val)
    hide_part($RESON1val,$HIDE_PART_BG)
    
    end on
    
    {---CALBACKS---}
    
    on ui_control($FILBY)
    if ($FILBY=1)
    set_engine_par($ENGINE_PAR_SEND_EFFECT_BYPASS,0,-1,$FILTER_slot,1)		
    else
    set_engine_par($ENGINE_PAR_SEND_EFFECT_BYPASS,1,-1,$FILTER_slot,1)
    end if
    end on
    
    {---MASTER VOLUME KNOB & LABEL---}
    
    on ui_control($volume)
    set_engine_par($ENGINE_PAR_VOLUME,$volume,-1,-1,-1)
    set_control_par_str(get_ui_id($volumeval),$CONTROL_PAR_TEXT,get_engine_par_disp($ENGINE_PAR_VOLUME,-1,-1,-1))
    end on
    
    {---CUTOFF KNOB & LABEL---}
    
    on ui_control($CUTTOF1)
    set_engine_par($ENGINE_PAR_CUTOFF,$CUTTOF1,-1,$FILTER_slot,1)
    set_control_par_str(get_ui_id($CUTOFF1val),$CONTROL_PAR_TEXT,get_engine_par_disp($ENGINE_PAR_CUTOFF,-1,$FILTER_slot,1))
    end on
    
    {---RESONANCE KNOB & LABEL---}
    
    on ui_control($RESONANCE1)
    set_engine_par($ENGINE_PAR_RESONANCE,$RESONANCE1,-1,$FILTER_slot,1)
    set_control_par_str(get_ui_id($RESON1val),$CONTROL_PAR_TEXT,get_engine_par_disp($ENGINE_PAR_RESONANCE,-1,$FILTER_slot,1))
    end on
    
    See if u understand it *yes*

    Tommorrow I will upload a patch with graphics & explain in much more detail about the Resource Folder & the rules that apply for using custom graphics e.t.c

    The reasom for this is that I work with Kontakt 5.5.1.451 which some guys may not have yet so i will do the patch on say 5.0.3 or something.

    NI products are backward compatible meaning if I do it on my version u will get the dreaded "u need to upgrade your Kontakt" :wink:
     
    • Interesting Interesting x 1
    • List
  6. Clandestine

    Clandestine Platinum Record

    Joined:
    Nov 11, 2013
    Messages:
    717
    Likes Received:
    151
    Right as I promised have uploaded the patch here for u to download if you so wish *yes*

    Spacey Voice Pad

    Was generated with Kontakt 5.0.3 to avoid backwards compatibility problems when using NI Products. If u still with Kontakt 2 tough! :wow:

    This is what the GUI Should look like when the Graphics added

    [​IMG]

    The script used is exactly the same as the one posted earlier but now we have a resource folder to contain the relevant info needed.

    What is a resource container?

    Put simply the resource container is a location used to store various objects needed for your library/GUI. These can range from be scripts, graphics with accompanying text files, impulse response files for convolution reverbs, NKA files for preset arrays & menus etc, Midi files amongst other things.

    I should note now that the nature of the Resource container is somewhat fragile and certain layout changes may be needed with different instruments.

    A basic setup for a resource folder would be as below

    in the folder you would have

    Data Folder - This is used to store .NKA for preset arrays. These are used to say modify values in tables or menus or set values for your controls for your desired effects. The folder can then be subdivided into sub folders say for storing user NKA files.

    Instruments Folder - Contains your NKI's etc

    Resources Folder - Again subdivided into subfolders such as

    IR Samples - For convolution

    Pictures - Graphics in png or tga format accompanied by a relevant text file that describes the values needed

    Scripts - Contains your scripts as a text file. These MUST be encoded in ANSI and can be linked to the instrument in kontakt

    Samples - Self explanatory can be various formats, WAV, NCW etc. This folder can sometimes contain your wallpaper.

    The best part is that eventually all this information can be encoded into the final NKR and then then various IR samples, Graphics, Scipts etc can be removed. This is why you often see the graphics buttons etc removed as they encoded into the NKR.

    As I said folder structure can vary substantially with different commands for say Konatakt player and different set ups for different libraries

    An example might be when using midi files. A folder set up then would be say To include a Midi files folder i.e

    your folder structure could be

    Documentation

    Instruments

    MIDI Files

    Samples

    you must then set a basepath ie

    Then u have to tell kontakt where to find or indeed store your midi files a command for this would be as follows

    basepath := get_folder($GET_FOLDER_PATCH_DIR) & "MIDI Files" (see KSP REFERENCE)

    So in conclusion

    Resource folders can be touchy! The key is to read the relevant info in the KSP reference and learn how to set up your resource folder etc.

    This is ESSENTIAL

    Enuff 4 now next time I will develop the patch further using some Pre set Arrays & showing how using them can save u time & help with workflow :wink:

    PS If I boring everyone tell me to shut up lol
     
    • Interesting Interesting x 1
    • List
  7. rudolph

    rudolph Audiosexual

    Joined:
    Jun 3, 2016
    Messages:
    920
    Likes Received:
    561
    I arrived too late to this thread and my heart bumped when saw the achdsr script and inmediately downloaded it. But it isn´t an NKP, it loads like an NKI instrument and I don´t know what to do with it except move the knobs. Could you wizards enlight this simple mortal on how to use this in a normal way, i.e. control the attack etc . of a given Kontakt instruments. Thanks in advance.
     
Loading...
Similar Threads - Kontakt Scripting Kontakt Forum Date
KSP Kontakt scripting issues with custom knob and velocity value to mirror on play note (visual FX) Kontakt Mar 21, 2023
Kontakt Scripting Kontakt Jul 27, 2017
Tutorials for Kontakt Scripting? Kontakt Jun 26, 2017
Kontakt Scripting - Building an Instrument From Scratch AudioSex Academy Aug 5, 2015
Scripting Tools For Kontakt 5 Kontakt Jul 26, 2015
Loading...