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 |