Kontakt: gli script (parte 7)

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.

9

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.

063 ksp

Se provate a cliccare sul pop-menu, esendo vuoto, non succede nulla.

065 ksp

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:

  1. il menu che dovrà contenere l’oggetto specificato
  2. la stringa di testo che rappresenta il nome dell’oggetto inserito
  3. 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.

066 ksp

Cliccando nel menu possiamo scorrere la lista e scegliere il valore più appropriato.

067 ksp

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

 parte otto

Pubblicità

Informazioni su silviorelandini

sound designer, docente di tecnologie musicali (Conservatorio S. Cecilia, Saint Louis College of Music), direttore iitm
Questa voce è stata pubblicata in Campionamento, Corsi, Sound Designing e contrassegnata con , , , . Contrassegna il permalink.

Una risposta a Kontakt: gli script (parte 7)

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

Rispondi

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

Logo di WordPress.com

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

Foto di Facebook

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

Connessione a %s...