Kontakt: gli script (parte 4)

Dopo aver introdotto le variabili definite dall’utente nel terzo articolo, lavoriamo ancora con le callback legate ai messaggi di Nota per introdurre alcuni comandi e variabili importanti ed utilizzati molto frequentemente. Mentre suoniamo una nota supponiamo di volerne aggiungere automaticamente un’altra, tramite script, utilizzando il comando play_note la cui sintassi è:

play_note(<numero di nota>,<velocity>,<offset>,<durata>)

Nelle parentesi tonde sono presenti quattro parametri.

Il primo, partendo da sinistra, rappresenta il numero di nota MIDI ovvero la sua altezza, espressa in semitoni. L’intervallo di valori ammissibili è 0-127 e come abbiamo visto in precedenza al valore 60 corrisponde la nota do dell’ottava centrale.

Il secondo parametro esprime la velocity della nota suonata. L’intervallo di valori ammissibili è ancora 0-127.

Il terzo parametro è l’offset del campione rispetto al momento in cui si preme la nota. E’ espresso in millisecondi e pertanto scrivendo ad esempio il valore 500 la riproduzione della nota avverrà mezzo secondo dopo aver premuto la nota.

Il quarto ed ultimo parametro rappresenta in millisecondi la durata della nota. Inserendo il valore 0, diremo di suonare il campione nella sua massima durata mentre scrivendo -1 diremo che la nota aggiunta tramite il comando dovrà durare quanto la nota premuta sulla tastiera MIDI o su quella virtuale di kontakt.

Ad esempio, scrivendo:

play_note(72, 90, 0, -1)

indichiamo al KSP di aggiungere alla nota suonata la nota do un’ottava sopra il do centrale (60+12 = 72), con velocity 90, nello stesso istante in cui premiamo la nota e con durata pari al messaggio di nota on utilizzato per avviare l’istruzione.

Inseriamo questa istruzione all’interno della callback note e clicchiamo su apply:

on note
 play_note (72, 90, 0, -1)
end on

 047 ksp

Proviamo a suonare una qualunque nota. Si ascolterà in aggiunta alla nota suonata anche una seconda nota (grazie al comando play_note) di altezza fissa pari al do nell’ottava sopra quello centrale. Ciò accade perchè abbiamo utilizzato un valore costante per il parametro che specifica l’altezza della nota.

Per creare un rapporto tra la nota premuta e la nota aggiunta occorre utilizzare non un valore costante bensì una variabile e nella fattispecie la variabile interna $EVENT_NOTE che memorizza il numero della nota suonata. Sostituiamo il valore costante 72 con tale variabile.

on note
 play_note ($EVENT_NOTE, 90, 0, -1)
end on

Cliccando su apply e premendo una qualsiasi nota ascolteremo un unisono con maggior volume in quanto la nota aggiunta è della stessa altezza di quella suonata. Dobbiamo specificare quindi un intervallo armonico tra la nota suonata e quella aggiunta inserendo il numero di semitoni di distanza tra le due note con la semplice operazione dell’addizione se la nota di altezza più bassa è quella suonata o della sottrazione in caso contrario. Consideriamo i seguenti rapporti armonici (espressi quindi in numeri di semitoni) che esistono tra due suoni:

– unisono (stessa altezza): 0
– seconda minore: 1
– seconda maggiore: 2
– terza minore: 3
– terza maggiore: 4
– quarta giusta: 5
– quarta aumentata (o quinta diminuita): 6
– quinta giusta: 7
– quinta aumentata: 8
– sesta maggiore: 9
– sesta aumentata: 10
– settima (sensibile): 11
– ottava: 12

Se ad esempio volessimo aggiungere una nota in rapporto di quarta giusta con la nota suonata dovremmo scrivere:

play_note ($EVENT_NOTE+5, 90, 0, -1)

Provate e cliccate su apply.

048 ksp

Suonate una qualsiasi nota. Ascolterete un bicordo formato dalla tonica e dalla quarta giusta. State attenti quando suonate le note al limite dell’intervallo di estensione dello strumento come nel caso dell’immagine seguente.

049 ksp

Suonando la nota mostrata non ascolteremo quella aggiunta in quanto la sua altezza è oltre l’intervallo di note suonabili dallo strumento (indicate con il colore celeste).

Se volessimo modificare il rapporto armonico che esiste tra la nota suonata e quella aggiunta dovremmo per forza di cose entrare nello Script Editor e cambiare ogni volta il valore numerico aggiunto alla variabile $EVENT_NOTE. Questa procedura è decisamente scomoda mentre potremmo brillantemente risolvere il problema utilizzando un oggetto con cui controllare tale valore. Questo oggetto può essere costituito da una manopola e viene mostrato nella performance view. La manopola è un oggetto di tipo ui che deve essere dichiarato all’interno della callback init secondo la seguente sintassi:

declare ui_knob $<nome manopola>(<valore minimo>,<valore massimo>,<risoluzione di un signolo valore della manopola>)

Possiamo ad esempio dichiarare la manopola utilizzando la variabile $intervallo come nome ed assegnando l’intervallo compreso tra -12 e 12 semitoni consentendo la risoluzione della manopola al valore del semitono. Questi valori sono rappresentati con tre parametri. In parole povere dobbiamo scrivere:

on init
 declare ui_knob $intervallo (-12,12,1)
end on

050 ksp

Cliccando su Apply nella performance view dello slot dove è inserito lo script compare una manopola di nome intervallo.

051 ksp

Inserita la manopola dobbiamo collegarla alla callback note per cui scriviamo

on note
 play_note ($EVENT_NOTE+$intervallo, 90, 0, -1)
end on

In questo modo, la nota aggiunta dallo script terrà conto del valore espresso tramite la manopola.

Di default la manopola viene inizializzata al valore più piccolo dell’intervallo che rappresenta pertanto se proviamo a suonare una nota non è difficile constatare che la nota aggiunta dallo script è posta un’ottava sotto in quanto il valore più piccolo rappresentato tramite la manopola è -12.

Provate a modificare il valore della manopola per ascoltarne il risultato. Se però ora usciamo dalla modalità Edit Instrument noteremo che la performance view non è mostrata. Questo avviene perchè nella callback init non abbiamo inserito l’istruzione make_perfview. Facciamolo e premiamo su apply.

on init
 declare ui_knob $intervallo(-12, 12, 1)
 make_perfview
end on

Per impostare di default un valore diverso da quello minimo occorre aggiungere alcune istruzioni. La prima è la seguente set_knob_defval($intervallo,0) e va inserita subito dopo la dichiarazione della manopola. Nei due parametri presenti nelle parentesi tonde il primo indica la manopola specifica e il secondo il valore che deve assumere.

on init
 declare ui_knob $intervallo(-12, 12, 1)
 set_knob_defval($intervallo,0)
make_perfview
end on

Successivamente assegnamo il valore 0 alla manopola

$intervallo := 0

Esattamente nel seguente ordine:

on init
 declare ui_knob $intervallo(-12, 12, 1)
 set_knob_defval($intervallo,0)
 $intervallo := 0
 make_perfview
end on

In questo esempio abbiamo quindi scelto di impostare la manopola sul valore 0 (la nota aggiunta è della stessa altezza di quella suonata).

Avendo effettuato queste modifche ogni volta che lo script viene inizializzato la manopola si colloca sul valore di default che è pari a zero. Occorre tener presente che l’inizializzazione dello script avviene anche quando state utilizzando un’istanza di Kontakt all’interno di un progetto del sequencer e precisamente nel momento che riaprite la sessione di progetto dopo averla precedentemente salvata. E’ ovvio che i valori impostati manualmente nei vari oggetti dovrebbe memorizzare l’ultimo valore utilizzato in modo tale da riproporlo alla riapertura dell’istanza di Kontakt. Dobbiamo pertanto dire al KSP che il valore presente nella manopola deve diventare persistente. A tal fine occorre utilizzare l’istruzione make_persistent($intervallo) che ha un solo parametro costituito dal nome della manopola. L’istruzione va collocata dopo la dichiarazione della manopola e l’eventuale istruzione di assegnazione:

on init
 declare ui_knob $intervallo(-12, 12, 1)
 set_knob_defval($intervallo,0)
 $intervallo := 0
 make_persistent($intervallo)
 make_perfview
end on

Cliccate su apply per applicare la modifica effettuata nello script.

Invece di imporre un valore fisso della velocity per la nota aggiunta tramite script possiamo utilizzare la variabile interna $EVENT_VELOCITY, che tiene conto del valore di velocity della nota suonata. Pertanto la nostra callback note diventa:

on note
 play_note ($EVENT_NOTE+$intervallo, $EVENT_VELOCITY, 0, -1)
end on

Così, se la nota suonata ha velocity ad esempio pari a 100 anche la nota aggiunta avrà velocity di pari valore.

parte quinta

Annunci

Informazioni su silviorelandini

sound designer, docente di tecnologie musicali, direttore iitm
Questa voce è stata pubblicata in Campionamento, Corsi, Sound Designing, Tecnologie Musicali e contrassegnata con , , , . Contrassegna il permalink.

2 risposte a Kontakt: gli script (parte 4)

  1. Pingback: Kontakt: gli script (parte 3) | tecnologiamusicale

  2. Pingback: Kontakt: gli script (parte 5) | tecnologiamusicale

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...