Nell’articolo precedente abbiamo introdotto la struttura array e iniziato a progettare uno step sequencer. Dopo aver creato la tabella relativa agli step e che consentirà all’utente di modificare il valore che dovrà rappresentare ogni Step vediamo di capire come inserire i valori all’interno della tabella e come stabilire la durata degli step.
Nella realizzazione dell’array tutti gli elementi vengono inizializzati dal KSP al valore 0 e questo è il motivo per cui la tabella sembrerebbe vuota mentre in realtà ciascun step è inizializzato a zero. Chiaramente questa non è la situazione ideale per cui se si vogliono avere dei valori differenti occorre inizializzare ciascun step. Scegliamo che il valore memorizzato nello step rappresenti il numero di nota MIDI e che vogliamo impostare di default una sequenza che ripete il Do centrale (numero MIDI pari a 60). Dobbiamo quindi inserire le 16 istruzione di assegnazione dopo la dichiarazione della tabella:
on init
declare ui_table %Sequencer[16] (4, 4, 127)
%Sequencer[0] := 60
%Sequencer[1] := 60
%Sequencer[2] := 60
%Sequencer[3] := 60
%Sequencer[4] := 60
%Sequencer[5] := 60
%Sequencer[6] := 60
%Sequencer[7] := 60
%Sequencer[8] := 60
%Sequencer[9] := 60
%Sequencer[10] := 60
%Sequencer[11] := 60
%Sequencer[12] := 60
%Sequencer[13] := 60
%Sequencer[14] := 60
%Sequencer[15] := 60
set_ui_height(3)
make_perfview
end on
Cliccate su apply e vedrete che ora ogni step è impostato sul valore 60.
Per mantenere memorizzati gli ultimi valori inseriti negli step in modo tale che alla riapertura dell’istanza dello strumento, memorizzata ad esempio in un progetto di sequencing su Cubase, Logic o altro software, si ripresentino gli stessi valori occorre aggiungere l’istruzione make_persistent:
on init
declare ui_table %Sequencer[16] (4, 4, 127)
%Sequencer[0] := 60
%Sequencer[1] := 60
%Sequencer[2] := 60
%Sequencer[3] := 60
%Sequencer[4] := 60
%Sequencer[5] := 60
%Sequencer[6] := 60
%Sequencer[7] := 60
%Sequencer[8] := 60
%Sequencer[9] := 60
%Sequencer[10] := 60
%Sequencer[11] := 60
%Sequencer[12] := 60
%Sequencer[13] := 60
%Sequencer[14] := 60
%Sequencer[15] := 60
make_persistent (%Sequencer)
set_ui_height(3)
make_perfview
end on
Per l’assegnazione dei valori agli elementi dell’array si può utilizzare una scorciatoia che prevede nella dichiarazione dell’array stesso un’unica istruzione di assegnazione per l’intero array dove i valori dei singoli elementi vengono specificati all’interno di parentesi tonde separati da virgole:
declare %Sequencer[16] := (60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60)
Ovviamente il numero dei valori deve essere uguale alla dimensione dell’array (16 valori nel nostro caso).
Per memorizzare la posizione dello step suonato occorre creare un contatore e ne dovremo tenere conto quando costruiremo la callback note.
declare $contatore
Chiaramente la dichiarazione viene effettuata nella callback init.
on init
declare ui_table %Sequencer[16] (4, 4, 127)
%Sequencer[0] := 60
%Sequencer[1] := 60
%Sequencer[2] := 60
%Sequencer[3] := 60
%Sequencer[4] := 60
%Sequencer[5] := 60
%Sequencer[6] := 60
%Sequencer[7] := 60
%Sequencer[8] := 60
%Sequencer[9] := 60
%Sequencer[10] := 60
%Sequencer[11] := 60
%Sequencer[12] := 60
%Sequencer[13] := 60
%Sequencer[14] := 60
%Sequencer[15] := 60
make_persistent (%Sequencer)
declare $contatore
set_ui_height(3)
make_perfview
end on
Abbiamo detto che vogliamo dare all’utente la possibilità di scegliere la lunghezza dello step impostando un valore musicale appropriato e che varrà per tutti gli step. A tal fine possiamo utilizzare un nuovo oggetto: un pop-menu al cui interno inseriremo una lista di valori selezionabili dall’utente. Essendo un oggetto di tipo ui va dichiarato nel seguente modo:
declare ui_menu $<nome menu>
Dando ad esempio il nome Durata_Step al menu che vogliamo creare inseriamo la seguente istruzione nella callback init:
on init
declare ui_table %Sequencer[16] (4, 4, 127)
%Sequencer[0] := 60
%Sequencer[1] := 60
%Sequencer[2] := 60
%Sequencer[3] := 60
%Sequencer[4] := 60
%Sequencer[5] := 60
%Sequencer[6] := 60
%Sequencer[7] := 60
%Sequencer[8] := 60
%Sequencer[9] := 60
%Sequencer[10] := 60
%Sequencer[11] := 60
%Sequencer[12] := 60
%Sequencer[13] := 60
%Sequencer[14] := 60
%Sequencer[15] := 60
make_persistent (%Sequencer)
declare ui_menu $Durata_Step
declare $contatore
set_ui_height(3)
make_perfview
end on
Cliccando su apply subito dopo la tabella che rappresenta gli step appare un pulsante largo che rappresenta il pop-menu appena dichiarato e che contiene al suo interno il nome del menu stesso.
Se provate a cliccare sul pop-menu, esendo vuoto, non succede nulla.
Per aggiungere dei valori in lista all’interno del menu si può utilizzare un comando specifico: add_menu_item (). Nelle parentesi tonde devono essere indicati tre parametri che in ordine sono:
- il menu che dovrà contenere l’oggetto specificato
- la stringa di testo che rappresenta il nome dell’oggetto inserito
- il valore da associare all’oggetto
Nel nostro caso scriveremo ad esempio:
add_menu_item ($Durata_Step, “1/4”, $DURATION_QUARTER)
La variabile interna $DURATION_QUARTER specifica per gli step una durata pari alla semiminima. Supponiamo di voler dare all’utente la possibilità di scegliere come valori: 1/4, 1/8, 1/16 ed anche i valori terzinati (1/4T, 1/8T, 1/16T). In sostanza dobbiamo aggiungere le seguenti istruzioni:
add_menu_item ($Durata_Step, “1/4”, $DURATION_QUARTER)
add_menu_item ($Durata_Step, “1/8”, $DURATION_EIGHTH)
add_menu_item ($Durata_Step, “1/16”, $DURATION_SIXTEENTH)
add_menu_item ($Durata_Step, “1/4T”, $DURATION_QUARTER_TRIPLET)
add_menu_item ($Durata_Step, “1/8T”, $DURATION_ EIGHTH_TRIPLET)
add_menu_item ($Durata_Step, “1/16T”, $DURATION_ SIXTEENTH_TRIPLET)
La nostra callback init ora diventa:
on init
declare ui_table %Sequencer[16] (4, 4, 127)
%Sequencer[0] := 60
%Sequencer[1] := 60
%Sequencer[2] := 60
%Sequencer[3] := 60
%Sequencer[4] := 60
%Sequencer[5] := 60
%Sequencer[6] := 60
%Sequencer[7] := 60
%Sequencer[8] := 60
%Sequencer[9] := 60
%Sequencer[10] := 60
%Sequencer[11] := 60
%Sequencer[12] := 60
%Sequencer[13] := 60
%Sequencer[14] := 60
%Sequencer[15] := 60
make_persistent (%Sequencer)
declare ui_menu $Durata_Step
add_menu_item ($Durata_Step, “1/4”, $DURATION_QUARTER)
add_menu_item ($Durata_Step, “1/8”, $DURATION_EIGHTH)
add_menu_item ($Durata_Step, “1/16”, $DURATION_SIXTEENTH)
add_menu_item ($Durata_Step, “1/4T”, $DURATION_QUARTER_TRIPLET)
add_menu_item ($Durata_Step, “1/8T”, $DURATION_ EIGHTH_TRIPLET)
add_menu_item ($Durata_Step, “1/16T”, $DURATION_ SIXTEENTH_TRIPLET)
declare $contatore
set_ui_height(3)
make_perfview
end on
Cliccate su apply e il pop-menu ora di default mostrerà il valore più in alto nella lista.
Cliccando nel menu possiamo scorrere la lista e scegliere il valore più appropriato.
E’ sempre preferibile assegnare un valore di default tra quelli presenti in elenco utilizzando la solita istruzione di assegnazione:
$Durata_Step := $DURATION_QUARTER
Questa assegnazione stabilisce che l’opzione “1/4” è quella di default. Se vogliamo mantenere permanente l’ultimo valore scelto, in modo da riaverlo nella riapertura di un progetto in un sequencer host, allora occorre aggiungere anche l’istruzione:
make_persistent ($Durata_Step)
La callback init viene così aggiornata:
on init
declare ui_table %Sequencer[16] (4, 4, 127)
%Sequencer[0] := 60
%Sequencer[1] := 60
%Sequencer[2] := 60
%Sequencer[3] := 60
%Sequencer[4] := 60
%Sequencer[5] := 60
%Sequencer[6] := 60
%Sequencer[7] := 60
%Sequencer[8] := 60
%Sequencer[9] := 60
%Sequencer[10] := 60
%Sequencer[11] := 60
%Sequencer[12] := 60
%Sequencer[13] := 60
%Sequencer[14] := 60
%Sequencer[15] := 60
make_persistent (%Sequencer)
declare ui_menu $Durata_Step
add_menu_item ($Durata_Step, “1/4”, $DURATION_QUARTER)
add_menu_item ($Durata_Step, “1/8”, $DURATION_EIGHTH)
add_menu_item ($Durata_Step, “1/16”, $DURATION_SIXTEENTH)
add_menu_item ($Durata_Step, “1/4T”, $DURATION_QUARTER_TRIPLET)
add_menu_item ($Durata_Step, “1/8T”, $DURATION_ EIGHTH_TRIPLET)
add_menu_item ($Durata_Step, “1/16T”, $DURATION_ SIXTEENTH_TRIPLET)
$Durata_Step := $DURATION_QUARTER
make_persistent ($Durata_Step)
declare $contatore
set_ui_height(3)
make_perfview
end on
Pingback: Kontakt: gli script (parte 6) | tecnologiamusicale