Program Kontakt ma wbudowany język skryptowy do zarządzania oprogramowaniem, możemy w nim zmieniać ustawienia samplera w czasie rzeczywistym i sterować syntezatorami.

Jednak występują pewne problemy, jednym z nich jest to, że niektóre instrumenty w momencie zagrania nuty generują kilka zdarzeń i aby je zmienić trzeba znaleźć właściwe, które nas interesuje.

Dokumentacja: PDF
Przykład 1: gramy jeden dźwięk, powiedzmy jest to nuta 'a’, generują się trzy zdarzenia w KSP. Nie wystarczy więc odczyt $EVENT_ID. Trzeba zbadać wszystkie nowe dźwięki, które się pojawiły, aby np. zmienić intonację potem.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
on init
 set_script_title("Full/X: CC pitch bend")
 declare const $start_CC:=85
 declare $nr_kanalu:=0
 declare %nuty[12]:=(0,0,0,0,0,0,0,0,0,0,0,0)

 declare ui_label $tekst(6,3  )
 declare @text
 @text := ""

{tablica zdarzeń:}
 declare const $ARRAY_SIZE := 500
 declare %test_array[$ARRAY_SIZE]
 declare $a
 declare $note_count
 declare @events_no
end on

{zdarzenie kontrolera CC:}
on controller
 select($CC_NUM)
   case 20 to 31
    $nr_kanalu:={$CC_NUM-20}  %CC[$CC_NUM]

{                                        @text := @text & "c" & $nr_kanalu    
                                          set_text($tekst,@text)}


   case $start_CC to $start_CC+11
{                                        @text := @text & "t" & $CC_NUM-$start_CC    
                                         set_text($tekst,@text)                                
 }

        {@text := event_status(%nuty[$CC_NUM-$start_CC])
        if (event_status(%nuty[$CC_NUM-$start_CC]) = $EVENT_STATUS_NOTE_QUEUE)
                @text := "Play note " & %nuty[$CC_NUM-$start_CC]
        end if
        if (event_status(%nuty[$CC_NUM-$start_CC]) = $EVENT_STATUS_INACTIVE )
                @text := "Not active " & %nuty[$CC_NUM-$start_CC]
        end if
set_text($tekst,@text)
}

    change_tune(%nuty[$CC_NUM-$start_CC],(%CC[$CC_NUM] -64)*20000,0)
 end select

get_event_ids(%test_array)
$a := 0
$note_count := 0
@events_no := ""
while($a < $ARRAY_SIZE and %test_array[$a] # 0)
{  @events_no := @events_no & %test_array[$a] & ","}
  change_tune(%test_array[$a],(%CC[$CC_NUM] -64)*20000,0)
  inc($note_count)
  inc($a)
end while
{text := "Active Events: " & $note_count & " : " & @events_no
set_text($tekst,@text)
}

end on



{zdarzenie nuty}
on note
 {                                @text := @text & "n" & $nr_kanalu    
                                 set_text($tekst,@text)}

%nuty[$nr_kanalu]:=$EVENT_ID
get_event_ids(%test_array)
$a := 0
$note_count := 0
@events_no := "[" & $EVENT_ID & "]"
while($a < $ARRAY_SIZE and %test_array[$a] # 0)
  @events_no := @events_no & %test_array[$a] & "="&(%test_array[$a] - $EVENT_ID) & ","
  inc($note_count)
  inc($a)
end while
@text := "Active Events: " & $note_count & " : " & @events_no
set_text($tekst,@text)
end on
KSP