KONTAKT SCRIPTING TUTORIAL – PRIMA PARTE

Written by Antonio Antetomaso on . Posted in Software, Tutorial

Benvenuti a questa nuova miniserie di articoli che vuole avere lo scopo di offrire un piccola guida step by step nei meandri dell’ambiente di scripting di Kontakt, uno dei migliori (se non il migliore… ma restiamo cauti) campionatori software presenti sul mercato. Come da copione mi preme sottolineare che la serie non si prefigge di coprire tutti gli aspetti della programmazione in ambiente Kontakt, ma vuole fornire gli elementi di base per mettere poi in grado l’utente di approfondire le tematiche di proprio interesse da solo.

di Antonio Antetomaso

Iniziamo dalle definizioni, linguaggio di scripting… cosa è?

La risposta è abbastanza semplice: un linguaggio di scripting è un linguaggio di programmazione le cui istruzioni vengono interpretate da uno strato software (interprete, per gli amici) e mandate in esecuzione direttamente sull’ambiente target. Nel caso in esame, mandare in esecuzione uno script significa impartire una serie di istruzioni a Kontakt che consentono di estenderne significativamente le potenzialità: da semplici script di automazione che agiscono in base alle azioni del musicista a veri e propri moduli aggiuntivi che elaborano e riproducono campioni corredandoli con effetti non direttamente offerti dal setup di base del programma: basti pensare ad un modulo dedicato al piano Fender Rhodes…come diavolo facciamo a riprodurre il BARK del piano elettrico? Semplice, con uno script di Kontakt…

Naturalmente “semplice” non lo è affatto… un passo alla volta.

Ma altri tipi di linguaggi di programmazione? Certo! Accanto ai linguaggi di programmazione cosiddetti interpretati (Shell scripting, PHP, Python, Javascript eccetera), esistono i linguaggi di programmazione compilati: il set di istruzioni incluso in un programma scritto in un linguaggio del genere viene “tradotto” in codice binario da un apposito software chiamato compilatore e mandato in esecuzione utilizzando nativamente l’hardware a disposizione. Un esempio? I linguaggi C, il C++, il Cobol, il Fortran sono tutti linguaggi di tale natura.

Per farla breve, un linguaggio interpretato prevede la presenza di un terzo incomodo che si prende cura di eseguire il nostro script, l’interprete appunto. Un linguaggio compilato invece richiede il solo sistema operativo e la ferraglia per mandare in esecuzione i nostri programmi, una volta che li abbiamo debitamente compilati con tutte le loro dipendenze.  Per questi motivi i linguaggi interpretati sono notoriamente più lenti di quelli compilati. Esistono poi dei linguaggi ibridi per i quali esiste comunque una sorta di interprete (che potremmo meglio definire come virtual machine) ma il codice scritto prevede una fase di compilazione che lo traduce in una codifica intermedia e più vicina al linguaggio macchina. Tale codice (che per Java viene definito bytecode) viene poi dato in pasto all’interprete vero e proprio.

Chiudiamo la parentesi (per maggiori approfondimenti vi rimando ad una funzionale pagina di Wikipedia ) ricordando che,nel caso in oggetto, l’interprete è un sottosistema di Kontakt naturalmente e iniziamo dalle basi: l’HELLO WORLD!

 

Hello World!

Quando si impara un nuovo linguaggio di programmazione o una nuova tecnologia in generale non c’è niente di meglio che rompere subito il ghiaccio cercando di far funzionare un esempio banale. Il tutto costituisce (almeno per il sottoscritto) anche un elemento scaramantico la cui buona riuscita condiziona inevitabilmente il percorso di apprendimento, provare per credere.  Consentitemi di scherzare un altro po’ sull’argomento…in rete si trovano centinaia di esempi di HELLO WORLD nelle tecnologie più disparate: ci sono certi esempi che per girare davvero richiederebbero centinaia di migliaia di euro di hardware e assumono, per questo motivo, un carattere meramente didattico. Ciò non toglie che non esiste motivo per cui non dovremmo codificare il nostro HELLO WORLD KONTAKT!!

Detto fatto, carichiamo Kontakt (in versione standalone o in host presso una qualunque DAW di vostro gradimento) e prendiamo subito confidenza con l’ambiente di editing di script offerto (che, vedremo, può non essere la scelta ottimale). Dimenticavo: discuteremo in merito allo stato dell’arte, costituito da Kontakt 5, fermo restando che gli esempi che affronteremo possono essere portati anche sulle versioni precedenti del campionatore. Dicevamo dell’ambiente di editing, caricato Kontakt, doppio click nell’area di destra (quella in cui si caricano gli strumenti) per creare un nuovo strumento vuoto e poi click su “Preferenze (simbolo della chiave inglese)–>Script Editor–>Edit”:

Aprendo l’ambiente di editing di script si possono notare 5 tabs in cui poter organizzare gli script, il tutto per favorire un approccio il più modulare ed omogeneo possibile. Uno script in un tab può naturalmente interagire con un altro in un altro tab. Prima di partire con il nostro HELLO WORLD, è bene chiarire un altro aspetto della programmazione Kontakt: le funzioni di callback: che diavolo sono?

Si definisce callback una funzione che viene attivata dall’ambiente di esecuzione solo al verificarsi di un certo evento. Chi ha un minimo di dimestichezza con un linguaggio di programmazione imperativo, in cui un programma è tipicamente una sequenza di istruzioni che ha un inizio ed una fine, è abituato a vedere le funzioni essere chiamate durante il normale flusso di esecuzione del programma stesso. Le funzioni di callback hanno invece la peculiarità di essere chiamate dall’ambiente di esecuzione (sistema operativo, interprete e così via) solo e soltanto se si verificano particolari eventi ai quali il nostro programma o script che sia debba reagire in un certo modo.

Uno script di Kontakt è prevalentemente costituito da funzioni di questo tipo: il programmatore decide come lo script debba reagire al determinarsi di particolari eventi che, senza troppa fantasia, non faticheremo ad associare ad eventi per lo più di tipo musicale: pressione di un tasto, rotazione  di un knob, pressione di un pedale ecc.. Detto ciò, iniziamo dalla funzione di callback principale la “on init…end on” che viene attivata quando il nostro strumento che stiamo editando viene caricata. Andiamo a codificare, allora, il nostro “HELLO WORLD KONTAKT”:

Eccolo qui, bello come il sole. OK, codificato, ed ora?

Beh, che ne dite di eseguirlo e vedere se funziona? Click su “Apply” e lo script viene mandato in esecuzione. Non ci credete? Date un’occhiata al bordo inferiore della finestra di Kontakt? Carino no? Si, lo so che non è il massimo vedere i messaggi di output stampati sul bordo di una finestra..ma non penserete mica di utilizzare l’ambiente di scripting di Kontakt per far venire fuori messaggi di testo no?

Prima di andare avanti, un po’ di considerazioni:

  1. Nel nostro minuscolo esempio di codice abbiamo involontariamente (ma non troppo) chiamato la nostra prima funzione: message(). Essa serve a produrre messaggi testuali di output che possono essere usati per segnalare all’utente il verificarsi di particolari condizioni;
  2. Sempre nell’esempio, è mostrato come si commenta il codice scritto, inserendo il testo tra {}. Mi raccomando, COMMENTATE, COMMENTATE, COMMENTATE!!! Sennò un povero collega che prende tra le mani i vostri script impazzisce!! La stessa sorte potrebbe toccare a voi dopo che è passato un po’ di tempo dalla codifica dello script;

Salviamo il nostro lavoro (è cosa buona e giusta): Click su “Files” e poi su “Save edited instrument”. Scegliamo la cartella di destinazione et voilà:

Come si nota, uno strumento Kontakt viene salvato con l’estensione .nki e accanto al file principale abbiamo una cartella “Samples” in cui raggruppare i nostri campioni. Nell’esempio in questione non ne abbiamo, naturalmente. Andiamo avanti con un’altra funzione di callback importante: “on note..end on”. Tale funzione, come suggerisce il nome, viene invocata dall’interprete Kontakt quando si “preme una nota” nell’ovvio senso tastieristico dell’espressione (non me ne vogliano gli altri musicisti). Per codificare questo script useremo il secondo tab.

Completata la codifica, effettuiamo un click su “Apply” e  salviamo ancora il nostro meraviglioso strumento. Per provare se funziona, apriamo la tastiera virtuale di Kontakt ed effettuiamo un click su una nota a caso per notare il messaggio che compare sul pannello informazioni. Naturalmente il tutto vale anche via MIDI con un controller esterno, provare per credere. Se eseguirete questo script e suonerete una nota, la vostra attenzione non potrà non cadere sul fatto che il messaggio non scompare quando viene rilasciata la nota stessa. Questo succede perchè il nostro strumento sa soltanto reagire all’evento di pressione di una nota. Quale migliore occasione per parlare del terzo ed ultimo (per questa puntata) esempio di funzione di callback? Parliamo quindi di “on release..end on”, la funzione di callback che viene appunto invocata al rilascio di una nota.

Prova del nove: cliccate su una nota e poi rilasciate. Vedrete comparire un messaggio come quello di sopra. Nella prossima puntata entreremo nel vivo della discussione iniziando a complicare un pochino i nostri script. L’esempio programmato potete scaricarlo da qui.

A presto.

Tags: , ,

Trackback from your site.

Comments (12)

  • Saverio Paiella

    |

    Grandeeeeeeeeee ! aspettavo un articolo sullo scripting di Kontakt da sempre 😀

    Reply

    • Enrico Cosimi

      |

      eh eh, adesso incateniamo Antonio alla scrivania e gli facciamo spremere TUTTO lo spremibile… :-)

      Reply

      • Antonio Antetomaso

        |

        Porto le catene?
        Ahahahaha….a disposizione.
        Speriamo di essere all’altezza delle aspettative.

        Reply

  • Umby65

    |

    Complimenti per lo script veramente un grande lavoro, volevo chiedrLe se per stabilire l’ordine delle librerie nella finestra librerie in ambiente mac mi sono un po spremuto ma senza risultato…. Le chiedo se ha notizie a riguardo come fare… La ringrazio anticipatamente…Umberto

    Reply

  • Antonio Antetomaso

    |

    Ciao Umberto, scusami ma credo di non aver ben compreso. Intendi dire la posizione di ciascuna libreria in verticale, nella sezione “Libraries” ?
    Se è così devi ordinarle a mano semplicemente “trascinando” con il mouse ciascuna libreria nella posizione desiderata. Io faccio così. Non so se si può fare nella versione AU di Kontakt, probabilmente devi lanciare la versione standalone e operare. Una volta chiusa i settaggi rimangono.

    Se invece ho capito male ti prego di darmi qualche dettaglio in più in merito alla tua richiesta.
    Un saluto.

    Antonio.

    Reply

  • Domenico

    |

    Ciao a tutti, ma se io creo una libreria, c’è un modo per commercializzarla? E si può mettere sul mercato?

    Reply

  • Alessandro Franceschini

    |

    Salve Enrico,
    le scrivo perché da poco ho visto un suo video su Youtube dove illustra la serie Boutique della Roland, io ho acquistato da poco un ju06 ma ho riscontrato dei problemi e visto che lei è un esperto volevo chiederle un parere. In pratica quando inserisco le pile nessun problema ma quando uso il cavo usb per alimentarlo il segnale di output esce distorto, come un ronzio fastidioso( non è l’effetto noize ) e sparisce quando uso le pile, in più a volte quando sfioro appena il cavo si spegne o non si accende proprio, ho provato a cambiare cavo sia usb che quello jack per l’uscita, non so quale possa essere la causa. Se ha qualche consiglio da darmi gliene sarei grato.

    Grazie

    Reply

    • Enrico Cosimi

      |

      Carissimo Alessandro,
      devi procurarti un isolatore galvanico USB; il problema che riscontri è inevitabile quando si collegano due apparecchiature USB che vanno in conflitto massa/alimentazione. Un altro sistema, purtroppo temporaneo, consiste nello staccare il laptop dalla tensione di rete e usarlo solo con la batteria interna.

      Reply

  • Giuseppe

    |

    Gent.mo Antonio,
    ho appena dato una rapidissima occhiata a quanto sopra (di cui ti ringrazio) e mi riprometto stasera di analizzarla rigo per rigo, premettendo che però non ho alcuna competenza sull’editing di script, essendo solo un maldestro musicista. Intanto, mi viene subito questa domanda: c’è da considerare che in “Add Library” non viene individuato il file di riconoscimento forse per il fatto che dalla versione 5 in poi Kontakt adotta la nuova estensione “.nicnt”, mentre nelle precedenti versioni di Kontakt questa funzione di individuazione della libreria era assegnata semplicemente ai file “.nkc” e “.nkx”. Il discorso da te impostato, sopra, vale ugualmente per questa nuova estensione? Il mio problema è proprio: “Add Library”: nessuna libreria mi è consentito più importare. Se poi, per via traversa, accedo ai corrispondenti FILES, mi si esclude ugualmentela loro apertura, poiché Kontakt mi rimanda obbligatoriamente all’apertura – propedeutica – della relativa LIBRARY (che non è possibile, a priori…). Non so se mi sono spiegato bene e me ne scuso. Grazie per la cortese attenzione.

    Reply

Leave a comment

Inserisci il numero mancante: *