Kontakt: gli script (parte 6)

Abbiamo visto nei precedenti articoli che una variabile è in grado di memorizzare un’informazione. Abbiamo incontrato variabili numeriche e testuali. Esiste una particolare struttura che è in grado di memorizzare non una ma più informazioni. Questa struttura è chiamata array ed altro non è che un vettore contenente un numero prestabilito di elementi e che deve essere dichiarato nella callback init. Il numero degli elementi viene definito attraverso una costante. In parole più semplici un array è una specie di cassettiera dove ogni cassetto è individuato da un numero e può contenere un’informazione. Il numero di questi cassetti può essere elevato mentre i cassetti stessi sono ordinati numericamente: il primo ha numero 0 mentre l’ultimo ha numero n-1 con n numero totale dei cassetti.

Un array può contenere numeri ma esistono array che possono contenere stringhe di testo.

La dichiarazione di un array di tipo numerico si effettua nel seguente modo:

declare %<nome array>[<numero memorie>]

Pertanto un array numerico inizia sempre con il simbolo % e il numero di memorie ovvero il numero di valori che deve memorizzare viene specificato nelle parentesi quadra. Esempio:

declare %mio[10]

La variabile array chiamata mio è costituita da 10 memorie, la prima sarà la 0, l’ultima sarà la 9. Ogni memoria o cella dell’array può essere richiamata con un indice numerico ID univoco. La prima memoria dell’array mio si indica con %mio[0], la seconda con %mio[1] e così via.

Per assegnare un valore ad una memoria di un array si utilizza la solita procedura:

%mio[3] := 10

In questo caso la quarta memoria dell’array mio conterrà il valore 10. Poichè l’array mio è costituito da 10 memorie (l’ultima è indicata con %mio[9]) se si provasse a scrivere la seguente istruzione

%mio[10] := 8

quando premerete apply il KSP rilascerà il seguente messaggio di errore: “array index out of bounds”.

Per dichiarare un array di tipo testuale si usa la seguente espressione:

declare !<nome array>[<numero memorie>]

Quindi un array testuale inizia sempre con il simbolo !

Nell’assegnare un valore ad una cella di memoria dell’array occorre specificare la stringa di testo tra doppi apici. Vediamo un esempio:

on init
 declare !Testo[5]
 !Testo[0] := “Ciao a tutti”
end on

Ora che sappiamo come dichiarare un array e come assegnare dei valori alle sue celle di memoria effettuiamo un esempio pratico su come utilizzarlo. Pensiamo di scrivere un utilissimo script per realizzare un semplice step sequencer.

Sappiamo che un music sequencer è un hardware o un software che può registrare o programmare, editare, riprodurre informazioni musicali inserite tramite il protocollo MIDI o CV/Gate e/o informazioni audio registrate ed anche automatizzate. Nella stragrande maggioranza dei casi, oggi utilizziamo dei sistemi chiamati DAW (Digital Audio Workstation) e ci avvaliamo di plug-in e virtual instrument. Lo Step Sequencer ha costituito una delle prime forme di sequencer; le informazioni musicali sono inserite all’interno di memorie (steps) che hanno uguale intervallo temporale e quindi valore musicale. Nell’immagine seguente un sintetizzatore analogico GPR A4 che possiede uno step sequencer.

0

Uno step sequencer si costituisce di un numero definito di step (tipicamente 16) ma tutti o quasi consentono di ridurne il numero in base alle esigenze di metrica musicale. Ad esempio 16 step sono ideali per tutte le metriche pari e soprattutto per il 4/4 in quanto la misura intera può essere divisa in 16 step del valore musicale di 1/16 (semicroma) ciascuno. Nel caso però di 3/4 potrebbe essere meglio uno step sequencer con 12 step se volessimo rappresentare una misura e dare quindi a ciascun step il valore di semicroma. La sequenza breve di note rappresentate negli step è normalmente ciclica e la riproduzione può essere attivata tramite un pulsante di play oppure da un segnale di CV/Gate suonando ad esempio una nota su una tastiera MIDI. In quest’ultimo caso l’intera sequenza può essere trasportata in base all’altezza della nota suonata. Finchè la nota rimane premuta la sequenza memorizzata negli step prosegue ciclicamente la riproduzione ma come si rilascia la nota (messaggio MIDI Nota Off) il playback viene arrestato.

Costruiamo pertanto uno step sequencer costituito da 16 step, di valore musicale definibile dall’utente, la cui riproduzione ciclica viene avviata quando si preme un tasto musicale (sulla tastiera MIDI o su quella virtuale di Kontakt). Ogni step potrà rappresentare un parametro caratteristico di una nota MIDI (l’altezza o la velocity) a seconda della tipologia che vogliamo dare al sequencer. Finchè la nota che avvierà il playback della sequenza resterà premuta, una volta raggiunto l’ultimo step la riproduzione ricomincerà dal primo step e così di seguito in maniera ciclica.

Per prima cosa occorre caricare uno strumento qualunque o crearne uno nuovo contenente almeno una mappatura di campioni (per avere dei riscontri sonori). Se lo strumento scelto possiede già degli script presenti in specifici slot è cosa buona collocarli in bypass premendo il corrispondente pulsante presente nello slot.

1

Sul primo slot vuoto, clicchiamo sul pulsante Edit e rinominiamo lo slot come STEP SEQUENCER.

2

I 16 step del sequencer possono costituire le celle di memoria di un array e pertanto occorre dichiararne uno che abbia dimensione pari a 16. Effettuiamo pertanto la seguente dichiarazione:

on init
 declare %Sequencer[16]
end on

Il nostro obiettivo però è anche quello di dare la possibilità ad un utente di poter scegliere il valore temporale di ogni step e di editarne il valore. Dobbiamo pertanto costruire dei controlli di tipo UI da porre nella Performance View. A tal fine dobbiamo intanto abilitare la visualizzazione della stessa Performance View inserendo nella callback init la nota istruzione vista nei precedenti articoli:

on init
 declare %Sequencer[16]
 make_perfview
end on

Per rappresentare graficamente l’array dando la possibilità all’utente di poter intervenire su di esso nella performance view possiamo utilizzare un particolare controllo ui chiamato table che nella sua dichiarazione prevede tre parametri: la larghezza della tabella, l’altezza della tabella, l’intervallo dei valori contenuto in ogni step (che essendo relativi ad uno dei due data byte del messaggio MIDI di nota on che ha intervallo pari a 0-127, sarà indicato con 127 dato che basta inserire il valore più elevato). Il nome della tabella può essere l’array %Sequencer pertanto la dichiarazione diventa:

on init
 declare ui_table %Sequencer[16] (1, 1, 127)
 make_perfview
end on

Se per caso ci fosse stata la necessità di scrivere un intervallo di valori che tenesse conto anche di numeri negativi come ad esempio -64, +64 avremmo dovuto indicare nella parentesi il valore negativo più piccolo (1, 1, -64) e KSP avrebbe creato automaticamente l’intervallo -64, +64.

Clicchiamo su apply e osserviamo il risultato nella performance view.

3

E’ comparsa una tabella costituita da 16 elementi. Prima di proseguire con la realizzazione dello step sequencer apriamo una piccola parentesi sul layout della performance view. La sua griglia è divisa in 6 colonne e in 16 righe.

4

Per ampiarne l’altezza possiamo utilizzare il seguente comando set_ui_height(). All’interno della parentesi si specifica il numero verticale di righe che si vogliono dare stando attenti però che ogni unità in realtà rappresenta due righe in quanto l’altezza di default dell’oggetto manopola è pari a 2 righe. Quindi se volessimo un’area per la performance view di altezza pari a 6 righe dovremo specificare la seguente istruzione all’interno della callback init:

on init
 declare ui_table %Sequencer[16] (1, 1, 127)
 set_ui_height(3)
 make_perfview
end on

Premendo apply l’area della Performance View si espande essendo ora costituita in altezza da 6 righe.

5

Ecco come comparirà la performance view del nuovo strumento con la nuova impostazione data all’altezza.

6

Torniamo alla costruzione dello Step Sequencer. Sicuramente la tabella appena realizzata non è particolarmente comoda per un utente che voglia inserire manualmente i valori quindi aumentiamo la sua dimensione modificando i primi due parametri nella dichiarazione. Cambiamo la sua larghezza portandola da 1 a 4:

declare ui_table %Sequencer[16] (4, 1, 127)

Clicchiamo su apply e come possiamo vedere ora la larghezza della tabella occupa lo spazio di quattro colonne.

7

Cambiamo anche l’altezza da 1 a 4:

declare ui_table %Sequencer[16] (4, 4, 127)

Clicchiamo su apply e vedremo la tabella avere un’altezza pari allo spazio occupato da 4 righe.

8

Lo script pertanto ora è così costituito:

on init
 declare ui_table %Sequencer[16] (4, 4, 127)
 set_ui_height(3)
 make_perfview
end on

Nel prossimo articolo daremo i valori di default agli elementi dell’arra e completeremo la realizzazione dello Step sequencer.

parte sette

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 6)

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

  2. Pingback: Kontakt: gli script (parte 7) | 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...