Kontakt
und Kontakt-Script
Kontakt
(Native Instruments): ab 2004, leistungsstarker Software Sampler, Multisampling,
Multilayering, eigene Effekte und ab Kontakt 2 auch mit eigener Scriptsprache
und Kontakt Script Prozessor (KSP).
Grundlagen
fürs Scripting in Kontakt:
1.
Instrument mit Ressources-Ordner und nkr-Datei anlegen
Unter
"Files -> new instrument" ein neues instrument anlegen:
Kontakt 5 - Instrument anlegen
Im
neuen Instrument auf den Werkzeugbutton oben links klicken:
Kontakt 5
- Neues Instrument
Das
Instrument via "Files -> Save instrument as..." (z.b. als
kontakt.nki)
in einem beliebigen Ordner speichern und über den Werkzeugbutton
links oben die verschiedenen Einstellungen der Library editieren: Dort
unter "instrument options" auf "create" klicken
Kontakt Instrument Options
Es
wird automatisch ein Resources-Ordner angelegt und ein *.nkr-File (um
Bilder, Impulsantworten und Skripte abzulegen, z.B. kontakt.nkr).
Immer, wenn neue Ressourcen den Ordnern hinzugefügt werden, werden
mit einem Klick auf "create" diese auch dem *.nkr-File zugeordnet.
Dabei muss folgendes beachtet werden:
- Impulsantworten
gehören in den Ordner: Resources\ir_samples\
- Skripte
gehören in den Ordner: Resources\scripts\
- Bilder
gehören in den Ordner: Resources\pictures\
zu jedem
Bild gehört eine gleichnamige Textdatei (*.txt) im gleichen Ordner,
in der die Bildeigenschaften eingestellt werden. Für ein Hintergrundbild
(*.tga oder *.png z.B. wallpaper.png)
bedeutet das im Textfile wallpaper.txt:
Has Alpha Channel: no
Number of Animations: 0
Horizontal Animation: no
Vertical Resizable: no
Horizontal Resizable: no
Fixed Top: 0
Fixed Bottom: 0
Fixed Left: 0
Fixed Right: 0
Unter "Instrument
Wallpaper" lässt sich die wallpaper.png
auswählen. Eine gute Wallpapergröße sollte in der Höhe
zwischen 50 und 540px liegen und in der Weite stets bei 632px.
Die
Kontakt-eigenen Grafiken liegen bei Kontakt 4 bei Windows unter:
...\Programme\Gemeinsame Dateien\Native
Instruments\Kontakt 4\pictures
Die
Kontakt-eigenen Grafiken liegen bei Kontakt 5 bei Windows unter:
C:\Users\[...]\Documents\Native
Instruments\Kontakt 5\pictures
bei MacOs unter:
...\Library\Application Support\Native
Instruments\Kontakt 4\pictures
Unter
Files "save edited instrument as..." das Instrument abspeichern,
entweder als "Patch" (es werden nur die Positionen der Samples
abgespeichert) oder als "Patch+Samples" (Samples werden mit
dem Patch in einem eigenen Ordner abgespeichert) oder als "Monolith"
(Samples und Patch werden in einer einzigen Datei abgespeichert).
2.
Wave-Dateien einladen und gruppieren
Unter
den Werkzeugen den Mapping Editor öffnen und unter Files die gwünschten
Wavedateien auswählen und via Drag & Drop in den Mapping Editor
ziehen. Je weiter unten man im Mapping-Editor die Dateien ablegt, desto
kleiner wird der Umfang, innerhalb dessen die einzelne Wavedatei auf verschiedenen
Tonhöhen gespielt werden kann.
Will
man pro Taste einen Klang haben, dann sollten die Dateien ganz unten im
Velocitiy-Feld auf die entsprechenden Tasten abgelegt werden. Soll ein
Klang über die ganze Tastatur in verschiedenen Tonhöhen spielbar
sein, dann sollte er ganz oben abgelegt werden.
Klänge
können im Velocity-Feld auch übereinander abgelegt werden, so
dass z.B. im pp ein anderer Klang erklingt als im p, im mf, ff oder ff.
Meist
werden sowohl für verschiedene Velocitystufen als auch für verschiedene
Tonhöhen die Samples im Mapping Editor abgelegt.
Mapping von
fünf Wave-Dateien nebeneinander auf der Tastatur, im Velocity-Feld
ganz unten abgelegt.
Mapping von
einer Wave-Datei im Velocity-Feld ganz oben abgelegt.
Verschiedene Klänge für verschiedene Velocity-Stufen auf einer
Taste
3.
Keyswitch zwischen verschiedenen Artikulationen erstellen
- Group-
und Mapping-Editor öffnen.
- im Group
Editor: Samples für die erste Group hineinziehen und die Gruppe
entsprechend benennen (z.B. "a").
- über
"Create Empty Group" zweite Gruppe erstellen und im Mapping
Editor "selected groups only" anklicken, so dass jeweils nur
der Inhalt der ausgewählten Gruppe angezeigt wird. "Edit all
groups" dissablen, damit nicht alle Gruppen gleichzeitig bearbeitet
werden.
- Samples
für die zweite Group hineinziehen und die Gruppe entsprechend benennen
(z.B. "e").
- Zur Gruppe
"a" wechseln und in "Group starts" "on key"
auswählen und bei "if key is between ... and ..." die
Taste für den Keyswitch auswählen (z.B. "between C0 and
C0"). Dann zur Gruppe "e" wechseln, ebenfalls "on
key" auswählen und den zweiten Keyswitch anlegen (z.B. "between
D0" and D0").
- für
"i", "o" und "u" die Schritte entsprechend
wiederholen.
Keyswitch mit der Gruppe "a" aktiviert
Keyswitch mit der Gruppe "e" aktiviert
kompletter
Monolith: kontakt_keyswitch.nki
4.
Round Robin zwischen verschiedenen Artikulationen erstellen
automatisch
zwischen den Gruppen wechseln (damit bei gleicher Tonhöhe dennoch
leicht unterschiedliche Klangfarben erklingen), funktioniert ähnlich
wie der Keyswitch:
- Group-
und Mapping-Editor öffnen.
- im Group
Editor: Samples für die erste Group hineinziehen und die Gruppe
entsprechend benennen (z.B. "a").
- über
"Create Empty Group" zweite Gruppe erstellen und im Mapping
Editor "selected groups only" anklicken, so dass jeweils nur
der Inhalt der ausgewählten Gruppe angezeigt wird. "Edit all
groups" dissablen, damit nicht alle Gruppen gleichzeitig bearbeitet
werden.
- Samples
für die zweite Group hineinziehen und die Gruppe entsprechend benennen
(z.B. "e").
- für
"i", "o" und "u" die Schritte entsprechend
wiederholen.
- Zur Gruppe
"a" wechseln und in "Group starts" "cycle round
robin" oder "random round robin" auswählen und bei
"Position in round robin chain" die gewünschte Position
eingeben (z.B. 1). Dann zur Gruppe "e" wechseln, ebenfalls
"cycle round robin"auswählen und die nächste Position
anlegen (z.B. 2) und für "i", "o" und "u"
die Schritte entsprechend wiederholen.
-
cycle round robin = bei jedem Tastendruck wird in festgelegter Reihenfolge
eine Gruppe nach der anderen aufgerufen
kompletter
Monolith: kontakt_round_robin_cycle.nki
-
random round robin = bei jedem Tastendruck wird in zufälliger Reihenfolge
eine Gruppe aufgerufen:
kompletter
Monolith: kontakt_round_robin_random.nki
5.
Scripte anlegen
Von
Native Instruments werden schon direkt beim Start eine Reihe von Scripten
mitgeliefert, die man unter dem Tab "Script Editor" (ganz rechts)
und dann "Preset" (ganz links) findet. Pro Instrument können
fünf verschiedene Scripte angelegt werden; die Scripte werden von
links nach rechts abgearbeitet.
Über
"edit" (links unten) gelangt man in den Script-Editor, in dem
man vorgefertigte Scripte anschauen und verändern kann oder eigene
Scripte anfertigen kann.
Kontakt Script Editor
Kontakt-SängerInnen-Bausatz
sobald man ein Script aufgeschrieben hat, kann man es mit
einem Klick auf die Taste "Apply" (ganz rechts im Editor) ausführen.
Eigene Scripte kann man auch mit einem Passwort schützen (via "lock
with password") und/oder auch via "Preset -> Save Preset"
für die spätere Weiterverwendung unter "User" abspeichern.
Events
(gedrückte Taste, geklickter Button, gedrehtes Modulationsrad etc.)
lösen sogenannte callbacks aus. Es gibt verschiedene Arten von callbacks:
5.1
on init
on init
[
] end on:
Initialisierung beim Starten. Hier wird das User-Interface mit Größe
und Art/Position der Knöpfe festgelegt.
Als
Initialisierungsscript bietet sich so z.B. an:
(Script
aus dem Kontakt-SängerInnen-Bausatz)
{########Initialisierung#######}
on init
message ("") {Messages loeschen}
make_perfview {GUI auf Wallpapergroesse aufziehen}
set_ui_height_px(350) {Wallpaperhoehe festlegen}
declare ui_switch $Schalter {Schalter
deklarieren}
move_control_px($Schalter, 200,200) {Schalter positionieren}
declare $ID_schalter {Variable fuer ID des Schalters
deklarieren}
$ID_schalter:=get_ui_id($Schalter) {ID des Schalters
holen}
set_control_par_str($ID_schalter, $CONTROL_PAR_TEXT, "Saengerin"){mit
ID Schalter-Text umbenennen}
declare ui_knob $Drehknopf (0,12,1){Drehknopf deklarieren:
min, max, Schrittweite}
move_control_px($Drehknopf, 350,200){Drehknopf positionieren}
make_persistent($Drehknopf){Drehknopf persistent
machen = wird in der gleichen Position wieder geladen}
declare $ID_drehknopf {Variable fuer ID des Drehknopfs
deklarieren}
$ID_drehknopf:=get_ui_id($Drehknopf){ID des Drehknopfs
holen}
set_control_par_str($ID_drehknopf, $CONTROL_PAR_TEXT, "Intervall"){mit
ID Drehknopf-Text umbenennen}
declare ui_slider $s1(0,1){Slider deklarieren, um
mit Bild zu belegen: min, max}
set_control_par_str(get_ui_id($s1), $CONTROL_PAR_PICTURE, "saenger"){Bild
Saenger auf den Slider legen}
move_control_px($s1, 530,0){Slider positionieren}
set_control_par(get_ui_id($s1), $CONTROL_PAR_MOUSE_BEHAVIOUR, 0){Slider
fuer Mausbewegung aktivieren}
set_control_par(get_ui_id($s1), $CONTROL_PAR_PICTURE_STATE, 0){Ausgangsbild
des Sliders festlegen}
declare ui_slider $s2(0,1){Slider deklarieren,
um mit Bild zu belegen: min, max}
set_control_par_str(get_ui_id($s2), $CONTROL_PAR_PICTURE, "saengerin"){Bild
Saengerin auf den Slider legen}
move_control_px($s2, 0,0){Slider positionieren}
set_control_par(get_ui_id($s2), $CONTROL_PAR_MOUSE_BEHAVIOUR, 0){Slider
fuer Mausbewegung aktivieren}
set_control_par(get_ui_id($s2), $CONTROL_PAR_PICTURE_STATE, 0){Ausgangsbild
des Sliders festlegen}
declare $zufall {Variable Zufall deklarieren}
end on
Mit
Hilfe von {...}
kann man Kommentare setzen = gut, um den Überblick zu behalten
oder Scriptteile auszukommentieren.
Mit message ("")
werden eventuelle Ausgaben gelöscht, die in der Statusleiste des
Instruments angezeigt werden (gut zum debuggen).
mit make_perfview
wird die Performance-Ansicht aufgerufen, die mit set_ui_height_px(540)in
ihrer Höhe festgelegt wird.
Über declare
werden Variablen
deklariert ($zufall,
$s1, $s2, $Drehknopf, $Schalter)
und können Schalter (ui_switch)
und Drehknöpfe (ui_knob)
eingerichtet und mit einer Variablen versehen werden (s.u.):
ui_switch hat
1 Einstellung: aus/an
ui_knob
hat 3 Einstellungen: Minimum - Maximum - Schrittgröße
ui_slider
hat 2 Einstellungen:
Minimum - Maximum
make_persistent
bewirkt, dass der eingestellte Wert auch nach dem Schließen des
Instruments noch erhalten bleibt.
Mit move_control_px(...)
kann man die x- und y-Position eines Bedienelements in Pxeln festlegen.
5.1.1
Variablen
Mit
dem Zeichen $ wird eine
Variable vergeben (z.B. $Schalter
und $Drehknopf
und $Schieber
sind Variablen = veränderliche Werte, die den gleichnamigen UI-Elementen
zugeordnet sind).
Variablen
können Zahlen (mit $)
oder Texte (mit @) sein
und werden bei on init
über den Befehl declare
deklariert.
Zahlenwerte
können einer Variablen direkt über
:= zugewiesen werden, z.B.
$Drehknopf
:= 100
Variablen
können auch in Arrays (Listen) zusammengefasst werden (mit %
bei Zahlen und mit ! bei
Texten). Beim Deklarieren wird auch gleich die Anzahl der Variablen pro
Array in eckigen Klammern mitgegeben, z.B.:
declare
%Drehknopfliste[5]
Zahlen
und Texte können den einzelnen Array-Elementen zugewiesen werden;
dabei werden sie in ihrer Zählung von 0 beginnend über runde
Klammern angesprochen, z.B.:
%Drehknopfliste(0)
:=10
%Drehknopfliste(1) :=127
%Drehknopfliste(2) :=99
%Drehknopfliste(3) :=50
%Drehknopfliste(4) :=66
Konstante
Variablen (die nur einmal definiert werden und sich dann nicht mehr ändern,
z.B. für Konvertierungen) werden mit dem Zusatz const
gekennzeichnet.
5.2
on note
on note
[
] end on:
Callback wird aufgerufen, wenn eine MIDI-Note gedrückt wird: via
Script kann die Note verändert (pitch, velocity, volume, panning,
tuning etc.) oder als Begleitung vervielfacht werden
Als
Notenscript bietet sich z.B. an, Dur-Akkorde zu erzeugen, z.B.:
on note
play_note($EVENT_NOTE+4,$EVENT_VELOCITY,0,-1)
play_note($EVENT_NOTE+7,$EVENT_VELOCITY,0,-1)
end on
play_note($EVENT_NOTE+4,$EVENT_VELOCITY,0,-1)
= Dem Notenwert ($EVENT_NOTE)
wird eine um 4 Halbtöne hörere Note hinzugefügt mit der
gleichen Anschlagsgeschwindigkeit ($EVENT_VELOCITY)
Das
kann man auch via if (...)...end
if mit einem Schalter verbinden:
on note
if ($Schalter=1)
play_note($EVENT_NOTE+4,$EVENT_VELOCITY,0,-1)
play_note($EVENT_NOTE+7,$EVENT_VELOCITY,0,-1)
end if
end on
Und
über den Drehknopf ($Drehknopf)
und den Schieberegler ($Schieber)
könnte man die zusätzlichen Noten einstellen:
on note
if ($Schalter=1)
play_note($EVENT_NOTE+$Drehknopf,$EVENT_VELOCITY,0,-1)
play_note($EVENT_NOTE+$Schieber,$EVENT_VELOCITY,0,-1)
end if
end on
Man
kann das Script noch weiter abändern, indem man sagt, dass man gar
nicht die original gespielte Note haben möchte, sondern nur noch
die beiden zusätzlich generierten Noten, und diese auch noch auf
den linken und rechten Kanal verteilt. Über ignore_event($EVENT_ID)
wird die gespielte Note unterdrückt und mit change_pan(...)
lässt sich die generierte Note im Stereofeld verteilen (vorausgesetzt
$ton_ID1
und
$ton_ID2
sind im Eingangsscript initialisiert):
on note
if ($Schalter=1)
ignore_event($EVENT_ID)
$ton_ID1 := play_note($EVENT_NOTE+$Drehknopf,$EVENT_VELOCITY,0,-1)
change_pan($ton_ID1,-1000,0)
$ton_ID2 := play_note($EVENT_NOTE+$Schieber,$EVENT_VELOCITY,0,-1)
change_pan($ton_ID2,1000,0)
end if
$ton_ID1 := 0
$ton_ID2 := 0
end on
Als
on-note-Script bietet sich so z.B. an:
(Script
aus dem Kontakt-SängerInnen-Bausatz)
{########Beim
Druck einer Taste#######}
on note
message($EVENT_NOTE){MIDI-Noten-Nummer ausgeben}
disallow_group($ALL_GROUPS){alle Gruppen muten}
if ($EVENT_NOTE=24){wenn
MIDI-Note = 24, Kontra-C Key fuer Saengerin}
set_control_par_str($ID_schalter, $CONTROL_PAR_TEXT, "Saengerin"){Schalter
in Saengerin umbenennen}
$Schalter:=0 {Schalterwert auf 0 setzen}
end if
if ($EVENT_NOTE=26){wenn
MIDI-Note = 26, Kontra-D Key fuer Saenger}
set_control_par_str($ID_schalter, $CONTROL_PAR_TEXT, "Saenger"){Schalter
in Saenger umbenennen}
$Schalter:=1{Schalterwert auf 1 setzen}
end if
if($Schalter=0)
{Wenn Schalter =0}
$s2 :=1 {Bild der Saengerin wird auf aktiv gesetzt}
$zufall:=random(0,4){Zufallszahl zwischen 0 und
4 wird gewaehlt}
allow_group($zufall){Gruppe mit Zufallszahl wird
aktiviert = eine aus den ersten fünf Gruppen wird angesprochen: f_a/e/i/o/u}
end if
if($Schalter=1){Wenn
Schalter =1}
$s1 :=1 {Bild des Saengers wird auf aktiv gesetzt}
$zufall:=random(5,9){Zufallszahl zwischen 5 und
9 wird gewaehlt}
allow_group($zufall){Gruppe mit Zufallszahl wird
aktiviert = eine aus den zweiten fünf Gruppen wird angesprochen:
m_a/e/i/o/u}
end if
if ($Drehknopf>1){wenn
Drehknopf hoeher ist als 1}
play_note($EVENT_NOTE+$Drehknopf,$EVENT_VELOCITY,0,-1){eine
zusaetzliche Note in gleicher Dynamik(Velocity) und in dem vom Drehknopf
festgelegten Intervall wird gespielt}
end if
end on
5.3
on release
on
release [
] end on:
Callback wird aufgerufen, wenn eine MIDI-Note beendet wird: z.B. gut für
typische Instrumentengeräusche, Nachhall oder Pitch-Veränderungen.
Man könnte hier z.B. beginnen, eine leiser werdende chromatische
Skala aufwärts spielen zu lassen (mit wait(...)
kann man die Abstände zwischen den Noten einstellen). Dies klappt
am besten via while (...)... end
while (wenn vorher in der Initialisierung eine Variable $zaehler
zum Mitzählen deklariert wurde; am Ende der Schleife muss $zaehler
jedoch wieder auf 0 gesetzt werden):
on release
if ($Schalter=0)
while ($zaehler<11)
play_note($EVENT_NOTE+$zaehler,$EVENT_VELOCITY,0,-1)
$zaehler:=$zaehler+1
wait(200000)
end while
end if
$zaehler:=0
end on
Als
on-release-Script bietet sich so z.B. an:
(Script
aus dem Kontakt-SängerInnen-Bausatz)
{########Beim
Loslassen einer Taste#######}
on release
$s1 :=0 {Bild von Saenger wird deaktiviert}
$s2 :=0 {Bild von Saengerin wird deaktiviert}
end on
5.4
on controller
on controller
[
] end on:
Callback wird aufgerufen, wenn ein Controller bewegt wird (z.b. Modulationsrad,
pitch bend etc..). Um den Wert eines bestimmten Controllers zu erhalten,
verwendet man die Variable $CC_NUM.
Um einen bestimmten Controller anzusprechen verwendet man das Array %CC.
1
= Mod wheel
2 = Breath Contoller
5 = Portamento Time
7 = Main Volume
64 = Damper Pedal (Sustain)
66 = Sustain-Pedal (Sostenuto)
121 = Controller reset
123 = all notes off
Um
also das Modulationsrad anzusprechen schreibt man
on controller
if ($CC_NUM = 1 )
message ( "ModWheel-Wert: " & %CC[l] )
end if
end on
Um
mit dem Modulationsrad z.B. den Drehknopf zu bewegen schreibt man z.B.:
(Script
aus dem Kontakt-SängerInnen-Bausatz)
{########Beim
Bewegen eines Controllers#######}
on controller
if ($CC_NUM = 1){Wenn MIDI-Controller 1 = Modulationsrad
betaetigt wird}
message(%CC[$CC_NUM]){gebe den Wert des Controllers
aus, hier: 0-127}
$Drehknopf := %CC[1]/10 {teile den Wert des Modulationsrads
durch 10, um ihn auf 12 gleiche Schritte entsprechend der Drehknopf-Skalierung
zu skalieren. um den Drehknopf in einem Wertebereich von -12 bis +12 anzusprechen,
müsste mann die 127 Werte des Modulationsrads durch fünf teilen
und das Ergebnis (also ca. 0-24) von 12 abziehen: $Drehknopf := 12-(%CC[1]/5)}
end if
end on
5.5
on ui_control und on ui_update
on ui_control(<variable>)
[
] end on:
Callback wird aufgerufen, wenn ein Element des User-Interfaces bewegt
wird. Z.B. können die Werte des Schalters, oder des Drehknopfs direkt
in der Statusleiste wiedergegeben werden:
on ui_control($Schalter)
message($Schalter)
end on
on ui_control($Drehknopf)
message($Drehknopf)
end on
Über
set_engine_par(...)
lassen sich die verschiedenen Effekte mit samt ihren Parametern via Drehknöpfen
und Schaltern setzen und über get_engine_par(...)
lassen
sich die Effekte mit ihren Parametern holen.
Dafür müssen zunächst jedoch im Group-Editor überhaupt
Effekte hinzugefügt werden:
Hierfür gibt es pro Gruppe eine Reihe von Slots, die mit Effekten
befüllt werden können, die Zählung dieser Reihe beginnt
bei 0, das Tiefpassfilter in diesem Beispiel liegt also im Slot 0 und
ist der ersten Guppe (wird ebenfalls als 0 gezählt) zugeordnet. Ein
weiterer Parameter gibt an, ob der Effekt als Insert (-1) oder als Send
(0) eingesetzt werden soll. So ist also die Schreibweise für set_engine_par(...):
set_engine_par($zu_ändernder_Effekt,$Wert,$Gruppe,$Slot,$Einsatz)
Group-Editor mit aktiviertem Tiefpass-Filter (SV LP1) im ersten Slot
Für
eine Filterveränderung über 5 Gruppen würde man dann schreiben:
on ui_control($Filter)
message($Filter)
set_engine_par($ENGINE_PAR_CUTOFF,$Filter,0,0,- 1)
set_engine_par($ENGINE_PAR_CUTOFF,$Filter,0,1,- 1)
set_engine_par($ENGINE_PAR_CUTOFF,$Filter,0,2,- 1)
set_engine_par($ENGINE_PAR_CUTOFF,$Filter,0,3,- 1) set_engine_par($ENGINE_PAR_CUTOFF,$Filter,0,4,-
1)
end on
Um
mit einem Schalter vom graphischen User Interface (ui_ ...) einen Tastendruck
und damit einen Keyswitch auszulösen (um zwischen verschiedenen Gruppen
zu wechseln) würde sich z.B. folgendes Script anbieten:
(Script
aus dem Kontakt-SängerInnen-Bausatz)
{########Beim
Bewegen eines Schalters oder Drehknopfs#######}
on ui_control($Schalter)
if ($Schalter=0){Wenn der Schalter auf 0 ist}
set_control_par_str($ID_schalter, $CONTROL_PAR_TEXT, "Saengerin"){Schalter-Beschriftung
in "Saengerin" umbenennen}
play_note(24,1,0,-1){Note 24 = Key fuer Saengerin
wird gespielt}
end if
if ($Schalter=1){Wenn
der Schalter auf 1 ist}
set_control_par_str($ID_schalter, $CONTROL_PAR_TEXT, "Saenger"){Schalter-Beschriftung
in "Saenger" umbenennen}
play_note(26,1,0,-1){Note 26 = Key fuer Saenger
wird gespielt}
end if
end on
5.5.1
eigene animierte Grafiken hinzufügen
Eigene
Grafik in den verschiedenen Zuständen erstellen und diese horizontal
oder vertikal in einem einzigen Bild nebeneinander aufgereiht im Ordner
"[...]/Resources/pictures"
abspeichern (*.tga oder *png), z.B. saenger.png und saengerin.png (Grafiken
aus dem Kontakt-SängerInnen-Bausatz) :
Dazu
ein gleichnamiges Textfile (hier also saenger.txt oder saengerin.txt)
im gleichen Ordner abspeichern mit der Angabe, wie viele Animationsschritte
etc im Bild enthalten sind:
Has Alpha
Channel: yes
Number of Animations: 2
Horizontal Animation: no
Vertical Resizable: no
Horizontal Resizable: no
Fixed Top: 0
Fixed Bottom: 0
Fixed Left: 0
Fixed Right: 0
Im
Script bei der Initialisierung einen Schieberegler (ui_slider(...)
) deklarieren und diesem über set_control_par_str(...)
und $CONTROL_PAR_PICTURE
das Bild zuweisen (über get_ui_id(...)
erhält man die interne id des Schiebereglers). Über move_control_px(...)
das Bild auf seine Position setzen und mit Hilfe von
$CONTROL_PAR_PICTURE_STATE den Ausgangszustand des Bildes bestimmen
sowie über $CONTROL_PAR_MOUSE_BEHAVIOUR
die Reaktion auf die Maus abschalten:
(Ausschnitt
aus dem Initialisierungsscript (s.o.)
aus dem Kontakt-SängerInnen-Bausatz))
{########Initialisierung#######}
on init
declare ui_slider
$s1(0,1){Slider deklarieren, um mit Bild zu belegen:
min, max}
set_control_par_str(get_ui_id($s1), $CONTROL_PAR_PICTURE, "saenger"){Bild
Saenger auf den Slider legen}
move_control_px($s1, 530,0){Slider positionieren}
set_control_par(get_ui_id($s1), $CONTROL_PAR_MOUSE_BEHAVIOUR, 0){Slider
fuer Mausbewegung deaktivieren}
set_control_par(get_ui_id($s1), $CONTROL_PAR_PICTURE_STATE, 0){Ausgangsbild
des Sliders festlegen}
declare ui_slider $s2(0,1){Slider
deklarieren, um mit Bild zu belegen: min, max}
set_control_par_str(get_ui_id($s2), $CONTROL_PAR_PICTURE, "saengerin"){Bild
Saengerin auf den Slider legen}
move_control_px($s2, 0,0){Slider positionieren}
set_control_par(get_ui_id($s2), $CONTROL_PAR_MOUSE_BEHAVIOUR, 0){Slider
fuer Mausbewegung deaktivieren}
set_control_par(get_ui_id($s2), $CONTROL_PAR_PICTURE_STATE, 0){Ausgangsbild
des Sliders festlegen}
declare $zufall {Variable Zufall deklarieren}
end on
Über
die dem Slider zugewiesene Variable (hier z.B. $1
und $s2 ) kann man dann (z.B. über einen Tastendruck oder
ein Modulationsrad oder in Abhängigkeit von anderen Variablen) den
Zustand des Bildes auf eine beliebige Position setzen, indem man einfach
der Variablen eine Zahl zuweist, die dem jeweiligen Bild entspricht, z.B.
(Ausschnitt
aus dem Initialisierungsscript (s.o.)
aus dem Kontakt-SängerInnen-Bausatz)) :
{########Beim Druck einer Taste#######}
on note
if($Schalter=0) {Wenn Schalter =0}
$s2 :=1 {Bild der Saengerin wird auf aktiv gesetzt}
end if
if($Schalter=1){Wenn Schalter =1}
$s1 :=1 {Bild des Saengers wird auf aktiv gesetzt}
end if
end on
{########Beim
Loslassen einer Taste#######}
on release
$s1 :=0 {Bild von Saenger wird deaktiviert}
$s2 :=0 {Bild von Saengerin wird deaktiviert}
end on
|