KONTAKT SCRIPTING TUTORIAL – TERZA PARTE

Written by Antonio Antetomaso on . Posted in Tutorial

Proseguiamo la nostra chiacchierata sulla programmazione in ambiente Kontakt. Nelle prime due puntate abbiamo analizzato come è strutturato uno script Kontakt, l’ambiente di sviluppo/editing, le funzioni di callback principali e alcuni esempi tanto per condire bene il tutto e fissare i concetti principali. In questo terzo appuntamento parleremo di un argomento molto importante, le variabili. 

Di Antonio Antetomaso

Se ricordate, negli esempi visionati nella seconda puntata sono comparsi dei “geroglifici” in aramaico antico che assomigliavano a $ENGINE_PAR_EFFECT_BYPASS oppure $NOTE_EVENT e così via. Quando li abbiamo affrontati ci siamo accontentati di definirli variabili standard offerte da Kontakt spiegando che una variabile è una zona di memoria riservata al nostro script dall’interprete e atta a contenere uno (o più) valori di un certo tipo.

Nel caso in oggetto $NOTE_EVENT è una variabile automaticamente popolata a tempo di esecuzione dall’interprete Kontakt in corrispondenza dell’ evento di pressione di una nota. Essa contiene, per l’appunto, il valore numerico della nota premuta. Come pure la variabile $ENGINE_PAR_EFFECT_BYPASS contiene la codifica numerica del parametro che attiva/inibisce un effetto e così via discorrendo.

Entrando maggiormente nel dettaglio, dicevamo che ogni variabile che si rispetti può assumere un certo valore, nel qual caso si parla di assegnazione di una variabile. Un valore può essere di svariati tipi: una sequenza di caratteri (stringa), un numero, un oggetto grafico oppure….il valore di un’altra variabile. 

Ancora, le variabili possono essere di due tipi:

  1. BUILT IN: variabili messe a disposizione dall’environment Kontakt (come le due analizzate) e documentate nella user guide del prodotto;
  2. USER DEFINED: variabili definite dall’utente

Parliamo ancora della prima tipologia di variabili: Kontakt ne mette a disposizione del programmatore un numero rilevante, ciascuna con un nome abbastanza “parlante” ad indicare la funzione della variabile stessa. Consideriamo ad esempio l’effetto LO-FI visionato nelle puntata precedente: per controllarne il comportamento abbiamo a disposizione le seguenti variabili:

  • $ENGINE_PAR_BITS
  • $ENGINE_PAR_FREQUENCY
  • $ENGINE_PAR_NOISELEVEL
  • $ENGINE_PAR_NOISECOLOR

Una piccola analisi al microscopio rivela che tutte le variabili BUILT IN hanno un prefisso particolare che ne indica il gruppo di appartenenza. In tal caso il prefisso è ENGINE_PAR (parametro afferente all’engine principale di Kontakt) ma abbiamo anche $NI_, $EVENT_PAR_, $CONTROL_PAR_. Tutti questi prefissi sono riservati e non possono essere usati dal programmatore per nominare le proprie variabili.

Elencare tutte le variabili BUILT-IN sarebbe follia e anche fatica inutile visto che, come dicevamo, esse sono ben documentate nel manuale di Kontakt. Ve ne segnalo solo un’altra, assai significativa: $PLAYED_VOICES_INST. Essa contiene un valore che indica il numero di voci che lo strumento sta suonando. Facciamo un esempio, tanto per rompere la monotonia della descrizione. Ambiente Kontakt alla mano:

asd

Abbastanza facile no? Da notare che ho aggiunto uno perchè in corrispondenza di una nota premuta la variabile assume il valore 0…prerogativa dell’informatica, quasi tutti i conteggi iniziano da 0 (non tutti eh? sennò è troppo facile).

Come dite? L’editor è scomodo? Si lo so, non è il massimo della vita dal punto di vista della programmazione…un po’ di pazienza e affronteremo anche questo problema. Andiamo avanti parlando di variabili USER DEFINED.

Esse sono tutte quelle variabili che vengono dichiarate dal programmatore per fini propri dello script che egli sta programmando. Attenzione al verbo dichiarare: esso è un termine tecnico che ha il compito di “dire” a Kontakt che intendiamo utilizzare una variabile con un certo nome. Una dichiarazione si effettua nel blocco on init con la direttiva declare, così:

declare $MIA_VARIABILE

Così facendo abbiamo segnalato a Kontakt che intendiamo utilizzare una variabile di nome MIA_VARIABILE.Nel momento della dichiarazione tale variabile è vuota o, meglio, per non far venire la pelle di cappone ai puristi dell programmazione, non inizializzata. Insomma non contiene nessun valore!! Proviamo ad assegnargliene uno. Ho usato il grassetto volutamente, ad indicare un altra operazione tipica del mondo delle variabili, l’assegnazione. Essa si fa con il simbolo :=, così:

$MIA_VARIABILE := 6

Senza troppa fantasia, non vi scandalizzerete se vi dico che ho assegnato un numero intero alla variabile MIA_VARIABILE. Posso anche fare il fico e raggiungere il medesimo scopo con un’unica istruzione:

declare $MIA_VARIABILE:=6

Posso anche decidere di assegnare il valore di una variabile BUILT-IN, come per esempio quella di prima:

declare $MIA_VARIABILE:= $PLAYED_VOICES_INST+1

dopodichè, l’esempio visionato in precedenza può essere arricchito e reso più elegante:

Da notare che la dichiarazione di variabili avviene sempre nel blocco “on init….end on”.  Se avrete voglia di provare lo script vi accorgerete che suonando una nota otterremo un messaggio diverso dal caso in cui ne suoneremo più di una simultaneamente, provare per credere!

Prima di lasciarci vorrei dirvi qualche altra parolina in merito ai tipi di dato che si possono assegnare alle variabili Kontakt, con la considerazione che coloro che provengono da almeno un linguaggio di programmazione non troveranno nulla di nuovo o di insolito. Questi alcuni tra i principali tipi di dato assegnabili alle variabili Kontakt:

STRINGHE

Una stringa è una sequenza di caratteri. Per dichiarare ed assegnare una variabile di tipo stringa si procede come nell’esempio di seguito

@MIA_VARIABILE:=”Ciao”

COSTANTI

Una costante è un tipo di dato immutabile. Una volta dichiarata una variabile come costante essa può essere solo inizializzata con un valore di partenza:

const $MIA_VARIABILE:=1

VARIABILI POLIFONICHE

Contengono valori associati ad eventi di polifonia:

polyphonic $MIA_VARIABILE

LISTE

Altrimenti definiti array. Contengono sequenze di valori indicizzati:

%MIA_VARIABILE[NUMERO_DI_ELEMENTI]

LISTE DI STRINGHE

Contengono sequenze di stringhe:

!MIA_VARIABILE[NUMERO_DI_ELEMENTI]

Per scorrere una lista di oggetti, siano essi stringhe o elementi di altro tipo si usa la cosiddetta iterazione, una espressione che consente di ripetere una sequenza di istruzioni fino a che una determinata condizione è vera. Questa la sintassi:

while(CONDIZIONE)

istruzione 1

istruzione 2

.

.

istruzione n

end while

dove la condizione è una espressione di uguaglianza o di disuguaglianza della stessa forma usata per l’istruzione if.

Un esempio pratico, data la seguente lista di  3 elementi:

declare %MIA_LISTA[3]=(0,1,2)

si definisce una variabile contatore

$declare $i=0

dopodichè si può usare il seguente blocco di codice per visitare e stampare tutta la lista

while ($i<3)

message(%MIA_LISTA[$i])

int($i)  {FUNZIONE DI INCREMENTO}

end while

Qui, potete trovare come di consueto gli esempi programmati in questa puntata pronti per essere caricati dentro Kontakt. Nella prossima puntata il discorso diventa più ghiotto: parleremo di interfacce grafiche.

Vi aspetto!!

Tags: , ,

Trackback from your site.

Comments (3)

  • Antonio Antetomaso

    |

    Al link http://nilsliberg.se/ksp/ trovate un editor testuale per la redazionedegli scripting Kontakt molto più agevole di quello built-in nel campionatore. Ogni promessa è debito…avevo dimenticato di chiudere con questa segnalazione. Vi aspetto per parlare insieme delle interfacce grafiche, rimanete sintonizzati.
    Antonio.

    Reply

    • Antonio Antetomaso

      |

      …dimenticavo, naturalmente il prodotto è donationware. Promuoviamo le buone idee, sviluppare un software costa e non poco.

      ERRATA CORRIGE: “la redazione degli script” Kontakt, non degli scripting eh?

      😀

      Reply

  • Mauro Borsetti

    |

    entusiasmante…!! ora voglio capire come sono le interfacce grafiche perche tutto questo grigio è noioso…;-)

    Reply

Leave a comment

Inserisci il numero mancante: *