Introduction Pour Scripting dans Kontakt, Partie 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!  

Ainsi, dans la dernière, nous avons fait un contrôle apparaissent dans notre interface. Eh bien dans cette partie allait se brancher que le contrôle d'un paramètre et le rendre utile pour nous.

Rendre le travail Stuff

Chaque paramètre qui peut être automatisé dans Kontakt peuvent être traitées par la KSP. Tous ces paramètres ont une adresse, ceux-ci se présentent sous la forme de variables intégrées. Youll savent que l'un de ces theyre tout en majuscules (par exemple $ ENGINE_PAR_BITS).

Dans cette partie bien être en utilisant une sélection variée de commandes et variables pour donner à notre interface de commande un lien vers un paramètre à l'intérieur de Kontakt, de lui donner quelques informations utiles affichage et également conserver ses réglages lorsque l'appareil est sauvegardé et chargé. Ce n'est là qu'un contrôle allaient à regarder, mais les techniques sont applicables à tous les youll interface de commande en créer Kontakt. Commençons!


Commandes de paramètres moteur

Dans la partie 2, nous avons contourné en utilisant un effet d'une note MIDI. Allaient faire quelque chose de semblable ici, mais avec un contrôle utilisateur créé. Pour ce faire, nous utilisons set_engine_par (), qui est l'une des commandes de paramètres moteur (voir KSP Reference Manual). D'autres plus utiles de ce groupe comprennent get_engine_par () et get_engine_par_display ().

Ceux-ci vous permettent de définir et récupérer la valeur d'un paramètre à l'intérieur de Kontakt, par exemple la fréquence de coupure pour un effet de filtre. Permet donc il suffit de créer un contrôle en utilisant ce que nous avons appris dans la dernière partie. Eh bien également faire une Performance View.

Code Example 1


Ive définir la résolution du bouton de commande à 1000000 qui est la résolution maximale interne pour les paramètres de Kontakt. Il est important de définir cette valeur si vous souhaitez couvrir l'ensemble de la valeur des paramètres.

Chargez une 4-Pole filtre LP dans la fente 1 des effets d'insertion du Groupe 1. Vous pouvez charger un échantillon dans Kontakt sorte que vous pouvez entendre l'effet.


Lien de contrôle

Pour faire ce travail, nous devons placer notre set_engine_par () commande à l'intérieur d'un rappel spécial appelé le ui_control. Elle ressemble à ceci.

ui_control


Vous aurez préavis si je frappe Appliquer j'obtiens une erreur (je vois beaucoup d'entre eux: D).

Error


C'est parce que nous avons besoin pour combler les supports avec la variable de contrôle que nous voulons assigner à ce rappel. Dans notre cas $ myControl. Alors maintenant, il ressemble à ceci.

Example 2


Faire cela signifie que chaque fois nous passons cette commande on peut exécuter du code à l'intérieur du rappel spécifique à ce contrôle. Alors laisse assigner ce contrôle à la coupure du filtre dans la fente 1 des inserts du Groupe. Nous le faisons avec set_engine_par ().


set_engine_par ( , , , , )


Hors Donc la première est le paramètre que nous voulons cibler ce qui est de coupure. Cela se fait avec $ ENGINE_PAR_CUTOFF. Cela fonctionne avec tous les filtres. Youll trouver une liste complète de tous les paramètres d'effets dans le Manuel de référence KSP sous Variables des paramètres moteur.


set_engine_par ($ ENGINE_PAR_CUTOFF, , , , )


Suivant est la valeur. Nous voulons assigner la valeur de notre bouton de contrôle d'interface utilisateur que nous avons créé à la quantité de coupure. Pour envoyer la valeur de ce bouton vers la coupure nous entrer le nom de la variable pour que le bouton qui est myControl $.


set_engine_par ($ ENGINE_PAR_CUTOFF, myControl $, , , )


Ensuite, nous devons lui donner des directives à l'emplacement où vit l'effet. Son groupe en 1, qui est le premier groupe a donc un indice de groupe de 0. Kontakt compte toujours de 0 pour les groupes, les zones et les emplacements.


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


L'indice emplacement du premier effet est de nouveau 0.


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


La dernière valeur est générique pour cibler les inserts des instruments (0) ou Hors d'envoi (1). Comme celles-ci sont applicables que nous utilisons -1.


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


Nous allons maintenant placer entre notre présent rappel sur ui_control.

Code Example 3


Maintenant, quand nous nous déplaçons $ myControl la coupure suivra sa position! Brilliant!

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


Réglage de l'affichage d'informations

À l'heure actuelle, la valeur voyaient dans la vue des performances n'a pas de sens par rapport à la fréquence de coupure de l'effet que son jeu à un nombre compris entre 1-1000000. Alors, comment pouvons-nous afficher ce que l'on voit en effet l'intérieur de la Performance View? Nous pouvons le faire en utilisant la commande set_knob_label () en conjonction avec get_engine_par_display (). Laissez-moi vous expliquer.

set_knob_label () est utilisée pour modifier l'affichage de la valeur d'un bouton de plus dans la même set_text () est utilisée pour modifier l'étiquette. Je peux obtenir la valeur actuelle de l'effet de coupure en utilisant get_engine_par_display () et réécrire notre valeur boutons avec ça. Heres comment.


set_knob_label () a deux paramètres.


set_knob_label ( , )

La variable sera l'élément d'interface que nous voulons changer, soit $ myControl.


set_knob_label ($ myControl, )


Le texte sera la valeur d'affichage hors le paramètre Cutoff.

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


Nous obtenons ce get_engine_par_display utilisant (). Le format est similaire à ce que nous avons utilisé dans set_engine_par ().


get_engine_par_disp ( , , , )


Qui, pour de coupure dans le groupe 1, Slot 1 est ...


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


Ce morceau de code va dans le


Example Code 4


Maintenant, lorsque je déplace la commande je obtenir la valeur de la fréquence de coupure à l'intérieur de l'effet.

The knob controls the Cutoff


Donc c'est bon! Mais j'ai un problème! Quand j'ai frappé Appliquer (essayez ça!) Ou encore étaient pour charger le script d'un paramètre prédéfini ou recharger l'appareil, je ne vois pas la valeur et ma commande est remis à 0!

Tout d'abord pour voir la valeur de la fréquence de coupure quand je initialiser le script tout ce que je dois faire est de copier mon set_knob_label () dans la fonction de rappel sur init.

Code Example 5


Maintenant, je vois la valeur à l'initialisation.

The value appears on initialization.


Mais ma commande est toujours remis à 0! Nous pouvons résoudre ce bien utiliser une autre commande variable appelée make_persistent ().


Assurez-Bâton Réglages

make_persistent ( ) Mémorise la valeur d'une variable dans le script pour qu'il puisse être rappelé lorsque le script est initialisé. Dans ce cas, nous devons stocker la valeur de $ myControl.


Ceci est fait en ajoutant ...


make_persistent ($ myControl)


OUT pour le rappel init.

Code Example 6


Mon réglage est conservé lorsque je cliquez sur Apply.

The setting is retained


Ce paramètre variable sera stockée à l'intérieur du script lorsque vous:

  • Enregistrer un script en tant que préréglage.
  • Enregistrer l'instrument ou Multi.
  • Enregistrez votre projet DAW hôte.


Touches finales

L'étape finale consiste à ajouter l'unité de valeur correcte à notre contrôle. Comme la fréquence de coupure est affichée en Hz, permet de l'ajouter à la commande.


Nous le faisons avec set_knob_unit (). Cela a deux paramètres.


set_knob_unit ( , )


La variable est $ myControl.


set_knob_unit ($ myControl, )


L'appareil est réglé en utilisant l'une des variables d'unité intégrés, dans ce cas KNOB_UNIT_HZ $.


set_knob_unit ($ myControl, KNOB_UNIT_HZ $)


Il ya quelques-uns de ceux-ci, y compris pour la DB, ms,%, Octave et demi-ton. Nous ajoutons ceci à la fonction de rappel sur init.

Code Example 7


L'ajout de ce rappel à l'initialisation de nous donner cela.

A shiny working custom UI Control for our Filter Cutoff!


Un brillant coutume de travailler contrôle d'interface utilisateur pour notre coupure du filtre!


Conclusion

Donc c'est tout pour cette série! J'espère youve a obtenu quelque chose de cela et peut-être son suscité un certain intérêt dans les scripts de Kontakt. Theres beaucoup je nai pas couvert ici, mais c'est un début et il ya encore beaucoup à apprendre, je vous assure!

Jusque-là!


Liens rapides

Introduction Pour Scripting dans Kontakt, Partie 1

Introduction Pour Scripting dans Kontakt, Partie 2

Introduction Pour Scripting dans Kontakt, Partie 3

Introduction Pour Scripting dans Kontakt, Partie 4

Introduction Pour Scripting dans Kontakt, Partie 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!