Lo script visto nell’articolo precedente funziona molto bene ma è limitato alle altezze scelte nell’assegnazione dei valori nell’array e alla durata delle note specificata nel comando play_note. Se volessimo dare all’utente la possibilità di scegliersi l’altezza della sequenza corrispondente alle otto note potremmo usare 8 manopole che chiameremo Seq1,…, Seq8. Ogni manopola potrà impostare l’altezza della nota rispetto a quella suonata partendo da un’ottava inferiore fino a due ottave superiori scegliendo come default il valore zero che sarà pari all’altezza della nota suonata. Effettuiamo quindi la dichiarazione delle 8 manopole e abilitiamo la visualizzazione della performance view:
on init
declare ui_knob $Seq1(-12,24,1)
$Seq1 := 0
make_persistent($Seq1)
declare ui_knob $Seq2(-12,24,1)
$Seq2 := 0
make_persistent($Seq2)
declare ui_knob $Seq3(-12,24,1)
$Seq3 := 0
make_persistent($Seq3)
declare ui_knob $Seq4(-12,24,1)
$Seq4 := 0
make_persistent($Seq4)
declare ui_knob $Seq5(-12,24,1)
$Seq5 := 0
make_persistent($Seq5)
declare ui_knob $Seq6(-12,24,1)
$Seq6 := 0
make_persistent($Seq6)
declare ui_knob $Seq7(-12,24,1)
$Seq7 := 0
make_persistent($Seq7)
declare ui_knob $Seq8(-12,24,1)
$Seq8 := 0
make_persistent($Seq8)
declare %Arpeggio[8] := (0,4,7,12,9,14,11,7)
declare $cont
make_perfview
end on
Cliccando su apply la sequenza di manopole appare nella Performance View nel modo seguente:
Assegniamo ora il valore espresso in ogni manopola alle varie memorie dell’array che esprime la sequenza degli arpeggiatori. Questa assegnazione deve avvenire all’interno del ciclo while più interno.
on note
ignore_event ($EVENT_ID)
while ($NOTE_HELD = 1)
$cont := 0
while ($cont<8 and $NOTE_HELD = 1)
%Arpeggio[0] := $Seq1
%Arpeggio[1] := $Seq2
%Arpeggio[2] := $Seq3
%Arpeggio[3] := $Seq4
%Arpeggio[4] := $Seq5
%Arpeggio[5] := $Seq6
%Arpeggio[6] := $Seq7
%Arpeggio[7] := $Seq8
play_note ($EVENT_NOTE+%Arpeggio[$cont], $EVENT_VELOCITY, 0, $DURATION_EIGHTH)
wait ($DURATION_EIGHTH)
inc($cont)
end while
end while
end on
Applichiamo ora le informazioni inserite. Lo script diventa:
on init
declare ui_knob $Seq1(-12,24,1)
$Seq1 := 0
make_persistent($Seq1)
declare ui_knob $Seq2(-12,24,1)
$Seq2 := 0
make_persistent($Seq2)
declare ui_knob $Seq3(-12,24,1)
$Seq3 := 0
make_persistent($Seq3)
declare ui_knob $Seq4(-12,24,1)
$Seq4 := 0
make_persistent($Seq4)
declare ui_knob $Seq5(-12,24,1)
$Seq5 := 0
make_persistent($Seq5)
declare ui_knob $Seq6(-12,24,1)
$Seq6 := 0
make_persistent($Seq6)
declare ui_knob $Seq7(-12,24,1)
$Seq7 := 0
make_persistent($Seq7)
declare ui_knob $Seq8(-12,24,1)
$Seq8 := 0
make_persistent($Seq8)
declare %Arpeggio[8]
declare $cont
make_perfview
end on
on note
ignore_event ($EVENT_ID)
while ($NOTE_HELD = 1)
$cont := 0
while ($cont<8 and $NOTE_HELD = 1)
%Arpeggio[0] := $Seq1
%Arpeggio[1] := $Seq2
%Arpeggio[2] := $Seq3
%Arpeggio[3] := $Seq4
%Arpeggio[4] := $Seq5
%Arpeggio[5] := $Seq6
%Arpeggio[6] := $Seq7
%Arpeggio[7] := $Seq8
play_note ($EVENT_NOTE+%Arpeggio[$cont], $EVENT_VELOCITY, 0, $DURATION_EIGHTH)
wait ($DURATION_EIGHTH)
inc($cont)
end while
end while
end on
Se provate a suonare una nota ora la sequenza produrrà tutte note della stessa altezza perché ogni nota dell’arpeggiatore è dato ancora dalla formula:
Nota ascoltate = Nota suonata + valore manopola
ovvero (inserendo i dati contenuti nello script):
Nota ascoltata = $EVENT_NOTE + %Arpeggio[$cont]
Poiché tutte le manopole sono di default impostate a zero, le 8 note ascoltate sono tutte di altezza pari a quella suonata. Provate ora a impostare la sequenza come quella definita a suo tempo nella prima assegnazione di valori per l’array che abbiamo fatto.
Infine completiamo lo script aggiungendo un menu per scegliere il valore musicale e quindi la durata della sequenza. possiamo riferinci al codice già scritto per lo Step Sequencer. Inseriamo quindi nella callback init la dichiarazione del menu e la creazione di oggetti al suo interno che fanno riferimento al valore delle note.
declare ui_menu $Durata
add_menu_item ($Durata, “1/4”, $DURATION_QUARTER)
add_menu_item ($Durata, “1/8”, $DURATION_EIGHTH)
add_menu_item ($Durata, “1/16”, $DURATION_SIXTEENTH)
add_menu_item ($Durata, “1/4T”, $DURATION_QUARTER_TRIPLET)
add_menu_item ($Durata, “1/8T”, $DURATION_EIGHTH_TRIPLET)
add_menu_item ($Durata, “1/16T”, $DURATION_SIXTEENTH_TRIPLET)
$Durata := $DURATION_QUARTER
make_persistent ($Durata)
Cliccate su Apply. Nella performance View è apparso il menu.
Spostiamo subito il menu inserendo l’istruzione
move_control ($Durata, 3, 3)
nella seguente posizione:
declare ui_menu $Durata
add_menu_item ($Durata, “1/4”, $DURATION_QUARTER)
add_menu_item ($Durata, “1/8”, $DURATION_EIGHTH)
add_menu_item ($Durata, “1/16”, $DURATION_SIXTEENTH)
add_menu_item ($Durata, “1/4T”, $DURATION_QUARTER_TRIPLET)
add_menu_item ($Durata, “1/8T”, $DURATION_EIGHTH_TRIPLET)
add_menu_item ($Durata, “1/16T”, $DURATION_SIXTEENTH_TRIPLET)
$Durata := $DURATION_QUARTER
make_persistent ($Durata)
move_control ($Durata, 3, 3)
Cliccando su apply ora il menu si sposta nella posizione desiderata.
Colleghiamo ora il menu alla durata per cui occorre modificare le seguenti istruzioni:
play_note ($EVENT_NOTE+%Arpeggio[$cont], $EVENT_VELOCITY, 0, $Durata)
wait ($Durata)
Cliccate su Apply. Provate a scegliere diversi valori e suonate una nota.
Concludendo, lo script completo è il seguente:
on init
declare ui_knob $Seq1(-12,24,1)
$Seq1 := 0
make_persistent($Seq1)
declare ui_knob $Seq2(-12,24,1)
$Seq2 := 0
make_persistent($Seq2)
declare ui_knob $Seq3(-12,24,1)
$Seq3 := 0
make_persistent($Seq3)
declare ui_knob $Seq4(-12,24,1)
$Seq4 := 0
make_persistent($Seq4)
declare ui_knob $Seq5(-12,24,1)
$Seq5 := 0
make_persistent($Seq5)
declare ui_knob $Seq6(-12,24,1)
$Seq6 := 0
make_persistent($Seq6)
declare ui_knob $Seq7(-12,24,1)
$Seq7 := 0
make_persistent($Seq7)
declare ui_knob $Seq8(-12,24,1)
$Seq8 := 0
make_persistent($Seq8)
declare %Arpeggio[8]
declare $cont
declare ui_menu $Durata
add_menu_item ($Durata, “1/4”, $DURATION_QUARTER)
add_menu_item ($Durata, “1/8”, $DURATION_EIGHTH)
add_menu_item ($Durata, “1/16”, $DURATION_SIXTEENTH)
add_menu_item ($Durata, “1/4T”, $DURATION_QUARTER_TRIPLET)
add_menu_item ($Durata, “1/8T”, $DURATION_EIGHTH_TRIPLET)
add_menu_item ($Durata, “1/16T”, $DURATION_SIXTEENTH_TRIPLET)
$Durata := $DURATION_QUARTER
make_persistent ($Durata)
move_control ($Durata, 3, 3)
make_perfview
end on
on note
ignore_event ($EVENT_ID)
while ($NOTE_HELD = 1)
$cont := 0
while ($cont<8 and $NOTE_HELD = 1)
%Arpeggio[0] := $Seq1
%Arpeggio[1] := $Seq2
%Arpeggio[2] := $Seq3
%Arpeggio[3] := $Seq4
%Arpeggio[4] := $Seq5
%Arpeggio[5] := $Seq6
%Arpeggio[6] := $Seq7
%Arpeggio[7] := $Seq8
play_note ($EVENT_NOTE+%Arpeggio[$cont], $EVENT_VELOCITY, 0, $Durata)
wait ($Durata)
inc($cont)
end while
end while
end on
Possiamo salvare lo script realizzato in un preset. Cliccate sul menu a comparsa Preset all’interno dello slot dello script e scegliete la voce Save Preset.
Nella finestra che compare creiamo una ns cartella e nominiamo il file relativo al preset.
Una volta salvato il preset questo comparirà nella sezione User.
Pingback: Kontakt: gli script (parte 10) | tecnologiamusicale