Introduzione allo scripting in Kontakt, parte 5

In this 5 Part MPVHub Series, Toby Pitman explores the wonderful world of scripting in Native Instruments' Kontakt sampler. This final part 5 covers putting the finishing touches to your script!  

Così in ultima rata abbiamo fatto un controllo appaiono nella nostra interfaccia. Bene in questa parte stavano per collegare il controllo di un parametro e lo rendono utile per noi.

Rendere lavoro Stuff

Ogni parametro che può essere automatizzato in Kontakt può essere indirizzato dal KSP. Tutti questi parametri hanno un indirizzo, questi sono disponibili in forma di variabili incorporate. Youll conoscere uno di questi come theyre tutte le lettere maiuscole (ad esempio $ ENGINE_PAR_BITS).

In questa parte e utilizzare una vasta scelta di comandi e variabili di dare il nostro controllo l'interfaccia di un collegamento a un parametro all'interno di Kontakt, dare alcune informazioni utili display e anche mantenere le impostazioni quando lo strumento viene salvata e caricata. Questo è solo un controllo sono stati andando a guardare, ma le tecniche sono applicabili a ogni controllo dell'interfaccia utente youll creare in Kontakt. Consente di iniziare!


Parametri del motore Comandi

Nella parte 2, abbiamo escluso un effetto con una nota MIDI. Intenzione di fare qualcosa di simile qui, ma con un controllo utente creato. Per fare questo usiamo set_engine_par (), che è uno dei comandi dei parametri del motore (vedi KSP Manuale di riferimento). Altre quelli utili in questo gruppo includono get_engine_par () e get_engine_par_display ().

Questi consentono di impostare e recuperare il valore di un parametro all'interno di Kontakt, dicono che il taglio per un effetto di filtro. Quindi, consente di creare solo un controllo utilizzando quello che abbiamo imparato nell'ultima parte. Beh, anche fare una vista delle prestazioni.

Code Example 1


Ive impostare la risoluzione della manopola di controllo a 1000000, che è la risoluzione interno dei parametri di Kontakt. E 'importante impostare questo valore se si desidera coprire l'intera gamma del valore dei parametri.

Caricare un 4 poli filtro LP nello slot 1 degli effetti insert Gruppo 1. Si potrebbe desiderare di caricare un campione in Kontakt in modo da poter sentire l'effetto.


Collegamento Il Controllo

Per fare questo lavoro, abbiamo bisogno di porre la nostra set_engine_par () all'interno di un comando speciale chiamato callback su ui_control. Ecco come si presenta.

ui_control


Avviso Youll se ho colpito Applicare ottengo un errore (vedo un sacco di questi: D).

Error


Questo perché abbiamo bisogno di riempire le staffe con la variabile del controllo che vogliamo assegnare al callback. Nel nostro caso $ myControl. Così ora sembra che questo.

Example 2


Fare questo significa che ogni volta che ci muoviamo questo controllo è possibile eseguire del codice all'interno della callback specifico a questo controllo. Quindi, consente di assegnare questo controllo per il cutoff del filtro nello slot 1 degli inserti del Gruppo. Lo facciamo con set_engine_par ().


set_engine_par ( , , , , )


Quindi, prima di sconto è il parametro che vogliamo colpire, che è di taglio. Questo viene fatto con $ ENGINE_PAR_CUTOFF. Questo funziona con tutti i filtri. Youll trovare un elenco completo di tutti i parametri degli effetti nel manuale di riferimento KSP sotto Variabili di parametri del motore.


set_engine_par ($ ENGINE_PAR_CUTOFF, , , , )


La prossima è il valore. Vogliamo assegnare il valore della nostra manopola di controllo dell'interfaccia utente che abbiamo creato per l'importo di taglio. Per inviare il valore di questa manopola per il taglio che inserire il nome della variabile per quella manopola che è di $ myControl.


set_engine_par ($ ENGINE_PAR_CUTOFF, $ myControl, , , )


Poi abbiamo bisogno di dare indicazioni per lo slot in cui l'effetto vive. Sua nel gruppo 1, che è il primo gruppo ha quindi un indice di gruppo 0. Kontakt conta sempre tra 0 e per gruppi, zone e slot.


set_engine_par ($ ENGINE_PAR_CUTOFF, $ myControl, 0, , )


L'indice di slot del primo effetto è ancora 0.


set_engine_par ($ ENGINE_PAR_CUTOFF, $ myControl, 0, 0, )


Il generico ultimo valore è per il targeting Inserti Strumenti (0) o Inserti di invio (1). Dal momento che nessuno di questi si applicano usiamo -1.


set_engine_par ($ ENGINE_PAR_CUTOFF, $ myControl, 0, 0, -1)


Ora collocare questo tra il nostro callback ui_control su.

Code Example 3


Ora, quando ci muoviamo $ myControl il taglio seguirà la sua posizione! Brilliant!

When we move $myControl the Cutoff will follow its position.


Impostazione delle informazioni sul display

Al momento, il valore vedevano nella vista delle prestazioni non ha senso in relazione alla frequenza di taglio del effetto come il suo insieme di un numero compreso tra 1-1000000. Quindi, come facciamo a visualizzare ciò che stavano vedendo l'effetto all'interno della vista delle prestazioni? Possiamo farlo utilizzando il comando set_knob_label () in combinato disposto con get_engine_par_display (). Mi spiego meglio.

set_knob_label () viene utilizzato per modificare la visualizzazione del valore di una manopola molto nel set_text stesso modo () viene utilizzato per cambiare l'etichetta. Posso ottenere il valore corrente degli effetti di taglio utilizzando get_engine_par_display () e riscrivere il nostro valore manopole con quello. Heres come.


set_knob_label () ha due parametri.


set_knob_label ( , )

La variabile sarà l'elemento dell'interfaccia utente che vuole cambiare e cioè $ myControl.


set_knob_label ($ myControl, )


Il testo sarà il valore display spento il parametro Cutoff.

The text will be the display value off the Cutoff parameter.


Otteniamo questo get_engine_par_display utilizzando (). Il formato è simile a quello che abbiamo usato in set_engine_par ().


get_engine_par_disp ( , , , )


Che per Cutoff nel Gruppo 1, Slot 1 è ...


get_engine_par_disp ($ ENGINE_PAR_CUTOFF, 0, 0, -1)


Questo pezzo di codice va in


Example Code 4


Ora, quando mi muovo il controllo che ottenere il valore del taglio interno l'effetto.

The knob controls the Cutoff


Questo è così buono! Ma ho un problema! Quando mi ha colpito Applica (provare questo!) Di nuovo o erano per caricare lo script da un preset o ricaricare lo strumento I dont vedere il valore e il mio controllo è resettato a 0!

In primo luogo per vedere il valore del taglio quando ho inizializzare lo script di tutto quello che devi fare è copiare il mio set_knob_label () nella su richiamata init.

Code Example 5


Ora vedo il valore di inizializzazione.

The value appears on initialization.


Ma il mio controllo è ancora in fase reimpostato a 0! Siamo in grado di risolvere questo problema se utilizzare un altro comando variabile chiamata make_persistent ().


Fai Stick Impostazioni

make_persistent ( ) Memorizza il valore di una variabile nello script in modo che possa essere richiamato quando lo script viene inizializzato. In questo caso abbiamo bisogno di memorizzare il valore di $ myControl.


Questo viene fatto aggiungendo ...


make_persistent ($ myControl)


Out per la richiamata init.

Code Example 6


La mia impostazione rimane anche quando ho colpito Applica.

The setting is retained


Questa impostazione variabile verrà memorizzato all'interno dello script quando:

  • Salvare uno script come preset.
  • Salvare lo strumento o Multi.
  • Salvare il progetto DAW host.


Ritocchi finali

Il passo finale è quello di aggiungere l'unità corretta valore al nostro controllo. Come il Cutoff viene visualizzata in Hz, che consente di aggiungere al controllo.


Lo facciamo con set_knob_unit (). Questo ha due parametri.


set_knob_unit ( , )


La variabile è $ myControl.


set_knob_unit ($ myControl, )


L'unità è impostata utilizzando uno dei built-in variabili Unit, in questo caso $ KNOB_UNIT_HZ.


set_knob_unit ($ myControl, $ KNOB_UNIT_HZ)


Ci sono alcuni di questi compresi quelli per DB, ms,%, Octave e semitono. Ci aggiungi questo a la richiamata init.

Code Example 7


L'aggiunta di questo al di callback init ci danno questo.

A shiny working custom UI Control for our Filter Cutoff!


Un brillante lavoro di controllo di interfaccia utente personalizzata per il nostro taglio del filtro!


Conclusione

Questo vuol dire che per questa serie! Spero che youve ha ottenuto qualcosa di questo e forse il suo suscitato un certo interesse per lo scripting in Kontakt. Theres un sacco I havent trattato qui, ma è un inizio e c'è ancora molto da imparare vi posso assicurare!

Fino ad allora!


Quick Links

Introduzione allo scripting in Kontakt, parte 1

Introduzione allo scripting in Kontakt, parte 2

Introduzione allo scripting in Kontakt, parte 3

Introduzione allo scripting in Kontakt, parte 4

Introduzione allo scripting in Kontakt, parte 5


For the past 20 years Toby has worked as a professional guitarist, programmer and producer. Clients include Sir Paul McCartney, George Michael, Shirley Bassey, Yusuf Islam, Giles Martin as well as the London 2012 Olympic Ceremonies. He has also worked extensively in TV, Advertising and Film. As well as composing himself he has also ... Read More

Discussion

Patrice
Hey Toby,

thanks for this great introduction. That's all i need for my instruments, except for placing a background picture on the performance view.

Greetz,
Patrice

Bellstir
Hi Patrice
This video can answer you question.
https://www.youtube.com/watch?v=oe4ul-pljEo
Scroll to about halfway thru it.
Basically, click on the wrench to see inside the patch.
Click on Instrument parameters. Select instrument tab. Then upload instrumnet wall paper. Only certain image formats work.
Good luck!

Bellstir
Toby
Thanks for sharing your expertise in such a clear and easily understandable way!
My quest in Kontakt scripting:
How to automate a user defined knob, button or slider.
Do you have any clues for me?
Thanks!
Bonzo
Great article, i just wish i could get it to work! I've copied the code letter for letter and get no errors but the knob just doesn't do anything. I followed a similar tutorial on youtube with the same result and now i'm sad.
SolonoidStudio
Hi there. There's something I'm having trouble with in regard to setting engine parameters to a ui control.

I can see you've covered knobs here - but I'm using a script where I declare sliders instead of knobs, and then use custom images to display my own knobs.

I can't figure out how to get these sliders to control certain engine parameters like attack, without snapping. I'm attempting to control the attack parameter the same way you would with a knob, but the problem is I'm using my custom knob, which requires that I use sliders instead.

None of the Kontakt manuals cover this type of approach, so I'm out of answers. Can you help?
Adrian Tucker
Hello! I am developing an instrument (drums) in kontakt 5 helped by Kontakt GUI Maker software (it is nice but I think it should work better) and I hope you can help me in this task.
I want to create a knob which could regulate the amount of unprocessed and processed signal, in other words, a parallel processing of two signals (Dry/Wet). I have some inserts (eq, comp, transient...) in different busses (kick, snare, hat...) so I would like to listen drums completely organic, with nothing of that inserts (knob at 0%) and with more of that processing (knob increase up to 100%). Maybe some way to send signal before busses and after busses to a channel which operates in parallel way? Also, I have another question: How can I assign a knob to dry or wet reverb and delay? (I tried with $ENGINE_PAR_SENDLEVEL_0 but it does not work) I have not seen the option in the KSP manual. I hope I had explained well, English is not my language. I hope hearing you soon.

Greetings!!

Want to join the discussion?

Create an account or login to get started!