Introdução ao Scripting no 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!  

Assim, na última parcela fizemos um controle aparecem em nossa interface. Bem nesta parte ia ligar esse controle a um parâmetro e torná-lo útil para nós.

Fazendo o trabalho Coisas

Cada parâmetro que pode ser automatizado em Kontakt pode ser abordado pela KSP. Todos estes parâmetros têm um endereço, estes vêm na forma de variáveis ​​internas. Você vai conhecer um deles como eles estão todas as letras maiúsculas (por exemplo $ ENGINE_PAR_BITS).

Nesta parte muito bem estar usando uma variada seleção de comandos e variáveis ​​de dar o nosso controle de interface de um link para um parâmetro dentro Kontakt, dar-lhe algumas informações úteis exibição e também manter as configurações quando o instrumento é salvo e carregado. Este é apenas um controle estavam indo para olhar, mas as técnicas são aplicáveis ​​a todos os controles da interface do usuário você vai criar em Kontakt. Vamos começar!


Parâmetro comandos de motor

Na parte 2, que um efeito contornado utilizando uma nota MIDI. Nós vamos fazer algo semelhante aqui, mas com um controle de usuário criado. Para fazer isso, usamos set_engine_par (), que é um dos Comandos dos parâmetros do motor (ver KSP Manual de Referência). Outros entes úteis neste grupo incluem get_engine_par () e get_engine_par_display ().

Estes permitem que você definir e recuperar o valor de um parâmetro dentro Kontakt, dizem que o corte para um efeito de filtro. Então vamos apenas criar um controle usando o que aprendemos na última parte. Bem também fazer uma Exibição de desempenho.

Code Example 1


Ive definir a resolução do botão de controle para 1000000 que é a resolução interna completa para os parâmetros Kontakt. É importante definir este valor se você quer cobrir toda a gama de parâmetros o valor.

Carregar um 4-Pole LP filtro no Slot 1 do Grupo 1 efeitos de inserção. Você pode querer carregar uma amostra em Kontakt para que você possa ouvir o efeito.


Ligando O Controle

Para fazer este trabalho, precisamos colocar nossa set_engine_par () dentro de um comando especial chamado de retorno de chamada em ui_control. Parece que este.

ui_control


Aviso Youll se eu acertar Aplicar eu recebo um erro (eu vejo um monte deles: D).

Error


Isto é porque nós precisamos encher os suportes com a variável de controle que deseja atribuir a esse retorno. No nosso caso myControl $. Então agora parece que isso.

Example 2


Fazer isso significa que sempre que passamos este controle, podemos executar algum código dentro da chamada específica para esse controle. Então vamos atribuir este controle para o corte do filtro na ranhura 1 das inserções do Grupo. Fazemos isso com set_engine_par ().


set_engine_par ( , , , , )


Então, primeiro fora é o parâmetro que deseja atingir, que é de corte. Isto é feito com ENGINE_PAR_CUTOFF $. Isso funciona com todos os filtros. Você encontrará uma lista completa de todos os parâmetros de efeitos no Manual de Referência KSP em Variáveis ​​parâmetros do motor.


set_engine_par ($ ENGINE_PAR_CUTOFF, , , , )


O próximo é o valor. Queremos atribuir o valor de nosso botão de controle da interface do usuário que criamos para a quantidade de corte. Para enviar o valor deste botão para a Corte de que a entrada do nome da variável para que o botão que é de R $ myControl.


set_engine_par (ENGINE_PAR_CUTOFF $, $ myControl, , , )


Em seguida, precisamos dar-lhe instruções para o slot onde o efeito vive. Sua no Grupo 1, que é o primeiro grupo de modo tem um índice de grupo 0. Kontakt sempre conta de 0 para grupos, zonas e slots.


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


O índice de ranhura do primeiro efeito é de novo 0.


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


O genérico último valor é para a segmentação Insere Instrumento (0) ou inserções Enviar (1). Uma vez que nenhum destes é aplicável usamos -1.


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


Vamos agora colocar este entre o nosso callback ui_control diante.

Code Example 3


Agora quando passamos $ myControl a Corte vai seguir a sua posição! Brilhante!

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


Definir as informações de exibição

No momento, o valor estava vendo na Vista desempenho não faz sentido em relação à freqüência de corte do efeito como sendo um conjunto para um número entre 1-1000000. Então, como vamos mostrar o que estavam vendo no efeito dentro da vista de desempenho? Podemos fazer isso usando o comando set_knob_label () em conjunto com get_engine_par_display (). Deixe-me explicar.

set_knob_label () é utilizado para alterar a indicação do valor de um botão muito na mesma maneira set_text () é utilizado para alterar a sua etiqueta. Eu posso obter o valor atual do efeito de corte usando get_engine_par_display () e reescrever o nosso valor botões com isso. Aqui está como.


set_knob_label () tem dois parâmetros.


set_knob_label ( , )

A variável será o elemento de interface do usuário que deseja alterar a saber $ myControl.


set_knob_label ($ myControl, )


O texto será o valor de exibição fora do parâmetro de corte.

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


Recebemos este get_engine_par_display usando (). O formato é semelhante ao que usamos no set_engine_par ().


get_engine_par_disp ( , , , )


Que para Cutoff no Grupo 1, o slot 1 é ...


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


Este pedaço de código vai para o


Example Code 4


Agora quando eu passar o controle que eu obter o valor do corte dentro do efeito.

The knob controls the Cutoff


Então isso é bom! Mas eu tenho um problema! Quando eu bati Aplicar (tente isso!) Novamente ou foram para carregar o script de uma predefinição ou recarregar o instrumento que eu não vejo o valor e meu controle é reposto a 0!

Em primeiro lugar para ver o valor do corte quando eu inicializar o script tudo que eu preciso fazer é copiar o meu set_knob_label () no no retorno de chamada init.

Code Example 5


Agora eu vejo o valor na inicialização.

The value appears on initialization.


Mas meu controle ainda está sendo reposto a 0! Podemos resolver este embora utilizando outro comando variável chamada make_persistent ().


Faça Vara Configurações

make_persistent ( ) Armazena o valor de uma variável no script para que ele possa ser lembrado quando o script for inicializado. Neste caso, é preciso armazenar o valor de US $ myControl.


Isto é feito através da adição ...


make_persistent ($ myControl)


para fora no retorno de chamada init.

Code Example 6


Minha configuração é retida quando eu bati Aplicar.

The setting is retained


Este ajuste variável será armazenado dentro do script quando você:

  • Salvar um script como uma predefinição.
  • Salve o instrumento ou Multi.
  • Salve o seu projeto DAW anfitrião.


Retoques finais

O passo final é adicionar a unidade de valor correto ao nosso controle. Como o corte é exibido em Hz, permite acrescentar que para o controle.


Fazemos isso com set_knob_unit (). Isto tem dois parâmetros.


set_knob_unit ( , )


A variável é de R $ myControl.


set_knob_unit ($ myControl, )


A unidade é definida usando uma das variáveis ​​internas da unidade, neste caso $ KNOB_UNIT_HZ.


set_knob_unit (myControl $, $ KNOB_UNIT_HZ)


Há alguns desses entes, incluindo para DB, ms,% Octave, e Semitom. Nós adicionamos este ao no retorno de chamada init.

Code Example 7


Adicionando isto ao no retorno de chamada de inicialização nos dar isso.

A shiny working custom UI Control for our Filter Cutoff!


Um brilhante trabalho personalizado de controle da interface do usuário para o nosso corte do filtro!


Conclusão

Então isso é que para esta série! Espero que você começou algo fora deste e talvez o seu despertado algum interesse no script em Kontakt. Há um monte Eu ainda não cobertos aqui, mas um começo e há muito mais para aprender que eu posso garantir-vos!

Até então!


Links rápidos

Introdução ao Scripting no Kontakt, Parte 1

Introdução ao Scripting no Kontakt, Parte 2

Introdução ao Scripting no Kontakt, Parte 3

Introdução ao Scripting no Kontakt, Parte 4

Introdução ao Scripting no 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!