Sie sind auf Seite 1von 6

5.4.

2016

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt | SAE Alumni Association Europe
Search...

Category lter

HOME

EVENTS

PEOPLE & PROJECTS

KNOW HOW & GEAR

SAE CAMPUS PORTRAITS

Language lter

Go!

ABOUT SAE MAGAZINE

SAE INSTITUTE CREATIVE MEDIA EDUCATION

ADVERTISEMENT

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt


BY MARTIN ULM ON FEBRUARY 3, 2015

.AUDIO & MUSIC, GERMAN, KNOW HOW & GEAR

Wir zeigen Dir, wie man mit dem Kontakt Scripting Processor die Benutzerober che von SoftwareInstrumenten gestaltet und Potis, Fader, Switches & Co. mit entsprechenden Funktionen verknpft.
Nach diesem Einsteiger-Tutorial bist auch Du in der Lage, gleich heute Dein erstes eigenes
Instrument zu scripten!
von Marc Bohn und Klaus Baetz
Kontakt von Native Instruments ist wohl einer der verbreitetsten Software-Sampler berhaupt. Der Kontakt
Scripting Processor, kurz KSP, wurde mit Kontakt 2 eingefhrt und hat sich ber die Jahre zu einem unglaublich
mchtigen Werkzeug entwickelt. Mittlerweile gibt es hunderte Libraries, die die Funktionen von KSP nutzen um
Samples auf intelligente Art und Weise abzuspielen und dem so entstandenen Instrument ein Gesicht zu geben.
Dieses kleine Tutorial soll Dir ein paar Grundfunktionen von KSP nherbringen. Wir versuchen uns in diesem
Beispiel an etwas ganz einfachem und bringen die Steuerelemente eines einbandigen Equalizers auf die
Benutzerober che.
Die Arbeit mit dem KSP Editor
Um komplexere KSP Scripts zu bearbeiten, die auch gerne mal 15000 Zeilen Code und mehr enthalten knnen,
emp ehlt sich de nitiv der Einsatz eines externen Texteditors; fr unsere Zwecke reicht Kontakts eigener Editor
jedoch vllig aus. Nachdem wir also Kontakt ge net haben erstellen wir ein neues NKI (Kontakt Instrument) durch
Doppelklick auf einen leeren Slot im Multirack.
EVENTS & DATES

SAE Alumni Convention XII 2016


11/10/2016 - 12/10/2016

Jetzt wechseln wir in den Editmode (Schraubenschlssel Button) und klicken dort rechts auf den Button Script.

Cologne

Nun net sich Kontakts Scripteditor mit dem wir einem NKI bis zu fnf verschiedene Scripts zuweisen knnen. Uns
reicht eines, daher knnen wir direkt auf den kleinen Editbutton unten links klicken und frhlich in das nun o ene
Textfeld hineintippen.

OTHER SAE SITES

SAE Alumni International

http://magazine.sae.edu/2015/02/03/kontakt-scritping-tutorial/

1/6

5.4.2016

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt | SAE Alumni Association Europe
SAE Alumni Convention
SAE Alumni Awards
SAE Institute

Wenn wir unser Script ausfhren wollen, verwenden wir dazu einfach den Apply Button oben rechts. Gesetzt den
Fall, es gibt keine Fehler in unserem Script, sollte Kontakt auch keine Fehlermeldung ausspucken: Die Infozeile

RECENT

direkt unter dem Editor zeigt script updated (no errors) an und wir knnen unsere nderungen direkt
ausprobieren.

APRIL 4, 2016

Life After SAE: Alumni des SAE


Weitere Vorbereitungen

Institute Stuttgart gewinnen beim


99 Fire-Films Award 2016

Damit wir den Equalizer auf die Ober che bringen knnen, mssen wir natrlich auch einen in unser NKI einfgen.
Daher whlen wir im Groupeditor die erste Gruppe an (in einem neuen NKI gibt es nur eine Gruppe) und fgen
dann weiter unten in den Group Insert FX den 1-band EQ in den ersten E ektslot ein.

APRIL 4, 2016

Life after SAE: Simeon Geyer

APRIL 4, 2016

Life After SAE: Simeon Geyer


realisiert internationales Kurz lm
Projekt

Callbacks
Ein Kontakt Script ist in verschiedene Sinnabschnitte unterteilt, sogenannte Callbacks. Diese Callbacks werden
immer dann ausgefhrte, wenn bestimmte Dinge innerhalb des Scripts passieren. Wenn der User also auf einen
Knopf auf der eigens gescripteten Benutzerober che klickt, wird der zugehrige Callback des Buttons ausgefhrt.
Den ersten Callback, den wir jedoch bentigen, ist der sogenannte initCallback er initialisiert das Instrument
und wird dann einmals ausgefhrt, wenn die NKI Datei ge net wird. Wir leiten den Callback mit on initein und
beenden ihn mit end on. Unser Script sieht also bisher so aus:

on init
end on

Zwischen diesen beiden Zeilen fgen wir jetzt also den Code ein, der beim Laden unseres Instruments ausgefhrt
wird. Unter anderem werden hier smtliche Befehle eintragen, die unsere GUI, die Gra sche Benutzerober che
de nieren.
Eine GUI entsteht
Fr unseren Equalizer brauchen wir drei Potis damit wir ihn vollparametrisch bedienen knnen. Da wir in unserem
Beispiel keine eigenen Gra ken verwenden werden, greifen wir auf ein vorde niertes Steuerelement von Kontakt
zurck, den ui_knob. Wir fgen folgenden Code ein:

declare ui_knob $Freq (0,1000000,1)


declare ui_knob $Gain (0,1000000,1)
declare ui_knob $BW (0,1000000,1)

Soeben haben wir drei Potis erstellt:

http://magazine.sae.edu/2015/02/03/kontakt-scritping-tutorial/

2/6

5.4.2016

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt | SAE Alumni Association Europe

Den declareBefehl verwendet man, um Variablen zu erstellen oder, wie in unserem Fall, Steuerelemente. Darauf
folgt der Typ des Steuerelements; hier also ein ui_knob. Als nchstes folgt der interne Name des Steuerelements.
Dieser ist frei whlbar, beginnt jedoch immer mit einem $-Zeichen und sollte weiterhin auf Buchstaben, Zahlen und
Binde- bzw. Unterstriche beschrnkt sein. Die drei, durch Kommata getrennten Zahlen in Klammern de nieren das
Verhalten unseres Potis jetzt noch genauer. Die ersten beiden Zahlen geben den Wertebereich des Potis an, also
von 0 bis 1000000. Dazu muss man wissen, dass jedes Kontakt-interne Poti mit einem Wertebereich von 0 bis
1000000 arbeitet. Die letzte Zahl sagt dem Poti dann einfach nur noch, dass sich die Werte in Einerschritten
erhhen.Wenn man nun Genaueres ber die De nition eines solchen Befehls wissen will, emp ehlt sich der Blick in
das KSP Reference Manual, was bei jeder Kontakt Installation mitkopiert wird. Dort sind smtliche Befehle mit
Beispielen aufgefhrt.
Unser Beispielscript sollte also nun ungefhr so aussehen und einen Klick auf den Apply-Button sollte Kontakt auch
problemlos akzeptieren:

on init
declare ui_knob $Freq (0,1000000,1)
declare ui_knob $Gain (0,1000000,1)
declare ui_knob $BW (0,1000000,1)
end on

Somit haben wir jetzt drei Potis die man auch schon frhlich bewegen kann. Leider passiert ansonsten rein gar
nichts, denn das Script wei ja noch nicht, was es bei einer Bewegung der Potis tun soll. Widmen wir uns also den
nchsten Callbacks.
Es funktioniert
Der nchste Callback, den wir kennenlernen, ist der ui_controlCallback; dieser kommt immer dann ins Spiel,
wenn ein Steuerelement auf der GUI verwendet wird. Jedes unserer drei Potis bekommt seinen eigenen
ui_controlCallback, daher tippen wir folgendes unterhalb unseres bisherigen Codes in den Editor:

on ui_control ($Freq)
end on
on ui_control ($Gain)
end on
on ui_control ($BW)
end on

Somit haben wir die Grundlage fr die Arbeit mit unseren Potis gescha en indem wir ihnen nun individuelle Befehle
zuweisen knnen. Damit die Potis jetzt auch Kontakts eigenen EQ fernsteuern knnen, brauchen sie den
set_engine_parBefehl. Dieser ist folgendermaen de niert:
set_engine_par (parameter,value,group,slot,generic)
Parameter bestimmt, welcher Funktion angesteuert werden soll, Value ist der Wert, Group ist die
Gruppennummer, Slot ist der E ektslot (falls man einen E ekt ansteuert) und Generic wird fr verschiedene
Zwecke verwendet. berarbeiten wir also unser erstes Poti:

on ui_control ($Freq)
set_engine_par ($ENGINE_PAR_FREQ1,$Freq,0,0,-1)
end on

http://magazine.sae.edu/2015/02/03/kontakt-scritping-tutorial/

3/6

5.4.2016

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt | SAE Alumni Association Europe

Der Parameter ist in diesem Falle also die Centerfrequenz des EQ Bandes welche mit $ENGINE_PAR_FREQ1
angesteuert wird, Value ist logischweise unser Poti (also $Freq), Group ist 0 (in Kontakt ist alles nullbasierend
Gruppe 1 ist 0, Gruppe 2 ist 1 etc.), der Slot ist ebenfalls 0 und den Generic Wert brauchen wir nicht, daher setzen
wir ihn auf -1. Mit ganz hnlichen Befehlen knnen wir auch die anderen beiden Potis ergnzen und das Script sollte
jetzt ungefhr so aussehen:

on init
declare ui_knob $Freq (0,1000000,1)
declare ui_knob $Gain (0,1000000,1)
declare ui_knob $BW (0,1000000,1)
end on
on ui_control ($Freq)
set_engine_par ($ENGINE_PAR_FREQ1,$Freq,0,0,-1)
end on
on ui_control ($Gain)
set_engine_par ($ENGINE_PAR_GAIN1,$Gain,0,0,-1)
end on
on ui_control ($BW)
set_engine_par ($ENGINE_PAR_BW1,$BW,0,0,-1)
end on

Nach einem Klick auf Apply funktionieren die Potis jetzt auch und steuern Kontakts internen EQ.
Falscher Start
Die Potis funktionieren so weit, so gut. Jedoch bei jedem Klick auf Apply oder beim erneuten Laden des NKIs
stehen die Potis wieder auf Linksanschlag. Damit sie schon beim Start den richtigen Wert besitzen, mssen wir
diesen im initCallback auslesen. Dazu verwenden wir diesmal nicht set_engine_parsondern get_engine_par,
denn wir wollen ja keinen Wert setzen sondern einen erhalten. Unter die drei declareBefehle im initCallback
schreiben wir jetzt also

$Freq:=get_engine_par ($ENGINE_PAR_FREQ1,0,0,-1)
$Gain:=get_engine_par ($ENGINE_PAR_GAIN1,0,0,-1)
$BW:=get_engine_par ($ENGINE_PAR_BW1,0,0,-1)

Mit :=weit man einer Variable oder einem Steuerelement einen bestimmten Wert zu; in diesem Falle also den
internen Wert des entsprechenden EQ Parameters den wir mit get_engine_parauslesen knnen.
Verfeinerungen
Leider zeigen die Potis EQ-untypische Werte an nmlich ihren eigenen Wert zwischen 0 und 1000000. Um dies zu
ndern, mssen wir unsere ui_control Callbacks um jeweils einen Befehl ergnzen: set_knob_label
(variable,text)
Variable ist der Name unseres Steuerelements und Text ist der Text, der ausgegeben werden soll. Um die EQWerte auszugeben brauchen wir allerdings noch die Hilfe eines zweiten Befehls der dem get_engine_parBefehl
extrem hnlich ist:
set_knob_label ($Freq,get_engine_par_disp ($ENGINE_PAR_FREQ1,0,0,-1))
Der Unterschied ist, dass get_engine_par_dispim Gegensatz zu get_engine_parnicht den internen KontaktWert ausgibt, sondern die interne Kontakt-Anzeige. Und damit die korrekten Werte auch gleich zu Beginn angezeigt
werden, schreiben wir dieselben drei Zeilen auch in unseren initCallback und das komplette Script sieht nun
ungefhr so aus:

http://magazine.sae.edu/2015/02/03/kontakt-scritping-tutorial/

4/6

5.4.2016

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt | SAE Alumni Association Europe
on init
declare ui_knob $Freq (0,1000000,1)
declare ui_knob $Gain (0,1000000,1)
declare ui_knob $BW (0,1000000,1)
$Freq:=get_engine_par ($ENGINE_PAR_FREQ1,0,0,-1)
$Gain:=get_engine_par ($ENGINE_PAR_GAIN1,0,0,-1)
$BW:=get_engine_par ($ENGINE_PAR_BW1,0,0,-1)
set_knob_label ($Freq,get_engine_par_disp ($ENGINE_PAR_FREQ1,0,0,-1))
set_knob_label ($Gain,get_engine_par_disp ($ENGINE_PAR_GAIN1,0,0,-1))
set_knob_label ($BW,get_engine_par_disp ($ENGINE_PAR_BW1,0,0,-1))
end on
on ui_control ($Freq)
set_engine_par ($ENGINE_PAR_FREQ1,$Freq,0,0,-1)
set_knob_label ($Freq,get_engine_par_disp ($ENGINE_PAR_FREQ1,0,0,-1))
end on
on ui_control ($Gain)
set_engine_par ($ENGINE_PAR_GAIN1,$Gain,0,0,-1)
set_knob_label ($Gain,get_engine_par_disp ($ENGINE_PAR_GAIN1,0,0,-1))
end on
on ui_control ($BW)
set_engine_par ($ENGINE_PAR_BW1,$BW,0,0,-1)
set_knob_label ($BW,get_engine_par_disp ($ENGINE_PAR_BW1,0,0,-1))
end on

Eine letzte Verfeinerung noch und dann soll es das erst mal gewesen sein. Wenn wir den Editmode verlassen (klick
auf den Schraubenschlssel), ist auch unsere GUI weg. Das soll natrlich nicht so sein und deshalb mssen wir die
GUI dieses Scripts als sogenannte Performanceview de nieren. Das lsst sich ganz einfach erledigen indem wir in
unseren init Callback noch den Befehl einfgen:

make_perfview

Fertig ist unser gescripteter 1-band EQ:

Weiterfhrende Informationen:
Fr alle die sich fr diese Art des Scriptings interessieren ist das Buch KSP Scripting 1, NI Kontakt-Skripte verstehen
und entwickeln von Mike Novy zu empfehlen. Das einzige deutschsprachige Buch zu diesem Thema.
Da das aktuelle Manual von Kontakt 5 keine wirkliche Einfhrung in die Skriptsprache bietet sondern eine Au istung
aller verfgbaren Befehle ist, ist es ratsam, das KSP Manual von Kontakt 2 als Grundlage zu nehmen, da dieses auch
fr Einsteiger gedacht ist.
Ein gutes Online-Tutorial stamm von Nils Liberg: http://www.nilsliberg.se/ksp/scripts/tutorial. Auf seiner Webseite
ndet man auerdem einen empfehlenswerten Editor.
_____________________________________

http://magazine.sae.edu/2015/02/03/kontakt-scritping-tutorial/

5/6

5.4.2016

Software-Instrumenten ein Gesicht verleihen: Scripting fr Kontakt | SAE Alumni Association Europe
ber die Autoren:
Marc Bohnist Systeminformatiker und Absolvent der SAE in Kln Bachelor of Arts
(Hons.)Audio Production.Erarbeitet derzeit als Produzent und Audio Engineer fr
verschiedene Tonstudios und Labels in Kln. Zudemist er alsfreier Mitarbeiter fr die
SALZBRENNER STAGETEC MEDIAGROUP ttig undschreibt alsPress Release Assistant dort
Reportagen, Fachmagazinartikel und Pressemeldungen.
Klaus Baetz hat in Kln sein Audio Engineering Diploma gemacht und ist im
Anschluss fr den Bachelor of Recording Arts nach Berlin. Heute ist er als
Sound Designer und KSP-Scripter fr Native Instruments, Sample Logic und
Galaxy Instruments ttig.
Ein Portrait ber Klaus und seine Arbeit ndest du hier im Blog:
Audio-Engineer oder Coder? Warum nicht beides!

Bilder: Klaus Baetz, Martin Ulm (Titelbild)

SHARE.

LEAVE A REPLY

Your Comment

Your Name

Your Email

Your Website

POST COMMENT
Protected by Invisible Defender. Showed 403 to 458,718 bad guys.

Imprint

http://magazine.sae.edu/2015/02/03/kontakt-scritping-tutorial/

6/6