Uso delle variabili

Indice generale

  1. Parte 1a: Gestione dello spartito
    1. Lezione 1 - Scrivere le note
    2. Lezione 2 - Uso delle variabili
  1. Parte 2a: Stile e output
    1. Lezione 3 - Make up della partitura
    2. Lezione 4 - Trasposizione & output
  1. Parte 3a: Gestione della partitura
    1. Lezione 5 - Sistemi multipli
    2. Lezione 6 - Estrazione delle parti
  1. Appendice: Script di riferimento
    1. Schema 20: Trasposizione & output
    2. Schema 26: Sistemi multipli
    3. Schema 33: estrazione delle parti

Lezione 2

Riproduzione grafica della chiave di Sol con degli strumenti musicali incastonati all'interno

Questa seconda lezione fa riferimento agli appunti relativi al secondo incontro avvenuto il 29 Marzo 2018.

Nel corso di questa esercitazione, affronteremo la definizione e l’utilizzo delle variabili in LilyPond.

Se noi riprendessimo il codice elaborato precedentemente, potremmo integrarlo trascrivendo la stesura completa della melodia che stiamo elaborando.
Poco male; si tratta di sedici misure e, perciò, il carico di lavoro non sarebbe poi così importante.

Ma se dovessimo riportare mediante il codice una melodia molto più estesa, potremmo facilitarci il compito in qualche modo?
La risposta ovviamente è positiva, poiché è proprio a questo proposito che dobbiamo affidarci all’utilizzo delle variabili.

Riprendiamo il nostro codice sorgente e aggiorniamone il contenuto nel modo seguente:

Schema 4: definire una variabile

%versione del programma
\version "2.18.2"
%Notazione melodica
%Pattern 1
%Nome variabile
voiceonea = {
%Misure 1 - 3; 5 - 7; 13 - 15
e4 e f g | g4 f e d | c4 c d e |
%Chiusura variabile: livello 1
}

Ecco definita la prima variabile chiamata <voiceonea>; essa racchiude un pattern di tre misure, le quali – come abbiamo osservato analizzando preliminarmente la costruzione della melodia con gli allievi in sede di laboratorio – ricorrono per ben tre volte nell’arco del nostro brano.

Rispetto al primo esempio analizzato in precedenza, abbiamo eliminato le righe contenenti i riferimenti all’armatura di chiave e abbiamo racchiuso gli argomenti della variabile medesima – le altezze e i valori delle note musicali – fra parentesi graffe <{ }>.

Si noti che la variabile, liberamente definibile nel nome, non ammette però caratteri di tipo numerico.

Se salviamo il file e lo compiliamo, rispetto al risultato ottenuto nella lezione precedente, osserveremo che il lettore PDF non si aprirà.
La compilazione – se non avremo commesso errori di sintassi – sarà andata sicuramente a buon fine e la finestra di log restituirà quale output “Successo! Compilazione completata con successo.”, ma, non essendoci un sistema strutturato, il programma non sarà in grado di determinare la collocazione delle variabili contenenti le note all’interno della score o – più semplicemente – sul pentagramma.

Si noti anche l’utilità, nel caso specifico, dei commenti; con un numero elevato di variabili, infatti, i commenti ci aiuteranno ad identificare più agevolmente a cosa esse facciano riferimento.

Prima di proseguire, soffermiamoci per un istante sulla struttura delle istruzioni e delle variabili che abbiamo cominciato a manipolare.

Ciò che subito risulta evidente è che i comandi veri e propri, che noi utilizziamo per dire a LilyPond cosa fare, sono preceduti dal carattere backslash <\> e possono contenere al loro interno degli argomenti racchiusi fra parentesi graffe che, a loro volta, possono essere rappresentati da parametri – ad esempio una sequenza di note – o da altri comandi nidificati all’interno delle parentesi.

Infine, un dettaglio da non scordare mai, nel modo più assoluto, è che il compilatore del sorgente è di tipo case sensitive, quindi sensibile alla distinzione fra caratteri maiuscoli e minuscoli; ciò – soprattutto nei primi approcci con questa materia – può indurre in frequenti errori nella sintassi.

Le variabili, al momento della definizione, non richiedono il carattere backslash <\>: lo richiederanno – come vedremo a breve – nel momento in cui esse dovranno essere inserite in un punto qualsiasi a livello della score, ossia all’interno del sistema musicale.

A questo punto, sotto la riga contenente la versione – solamente per una questione di ordine – inseriamo questa variabile:

Schema 5: variabile global

%Nome variabile
global = {
%Armatura di chiave
\key c \major
%indicazione di tempo
\time 4/4
%indicazione metronomica
\tempo 4 = 120
%Chiusura variabile: livello 1
}

Abbiamo chiamato questa variabile con il nome <global>, per il semplice motivo che abbiamo inserito al suo interno istruzioni che richiameremo in diverse circostanze nel corso di questo studio.

Il nostro codice, in questo momento, presenta due variabili: una di esse contiene una sequenza di note, mentre l’altra contiene le indicazioni relative all’armatura della chiave di Sol, non indicata poiché impostata per default.
Guardiamolo nella sua struttura completa:

Schema 6: variabili global e voiceone

%versione del programma
\version "2.18.2"
%Nome variabile
global = {
%Armatura di chiave
\key c \major
%indicazione di tempo
\time 4/4
%indicazione metronomica
\tempo 4 = 120
%Chiusura variabile: livello 1
}
%***
%Notazione melodica
%Pattern 1
%Nome variabile
voiceonea = {
%Misure 1 - 3; 5 - 7; 13 - 15
e4 e f g | g4 f e d | c4 c d e |
%Chiusura variabile: livello 1
}

Appendiamo ora al nostro sorgente un’ulteriore variabile, che conterrà – finalmente – la struttura melodica completa della prima voce: la celebre melodia dell’inno alla gioia in versione basica.

Noteremo che la variabile presenterà un insieme di richiami alla variabile <voiceonea>, precedentemente definita, e sequenze di suoni non inseriti nel pattern 1.

Schema 7: Richiamare le variabili

%Struttura melodica
%nome variabile
voiceone = {
	%Definizione dell'altezza per il do relativo
	\relative c'' {
	%misure 1 - 3: chiamata alla variabile voiceonea
	\voiceonea
	%misura 4
	e4. d8 d4 r |
	%Forzatura di a capo
	\break
	%misure 5 - 7: chiamata alla variabile voiceonea
	\voiceonea
	\voiceonea
	%misura 8
	d4. c8 c4 r |
	%Forzatura di a capo
	\break
	%misure 9 - 12
	d4 d e c8 r | d4 e8 f e4 c8 r | d4 e8 f e4 d | c4 d g, r |
	%Forzatura di a capo
	\break
	%Ridefinizione dell'altezza per il Do relativo
	\relative c''
	%misure 13 - 15: chiamata alla variabile voiceonea
	\voiceonea
	\voiceonea
	%misura 16
	d4. c8 c4 r |
	%Doppia barra di chiusura
	\bar "|."
	%Chiusura notazione: livello 2
	}
%Chiusura variabile: livello 1
}

Questa variabile – da come possiamo osservare – contiene un’istruzione

\break

la quale forza la divisione della score ogni quattro misure allo scopo di rendere più ordinata la lettura della musica.

Notiamo, inoltre, che ad un certo punto del codice incontriamo una ridefinizione della posizione relativa rispetto al Do4:

\relative c''

Spieghiamo brevemente che LilyPond richiede i caratteri apice <’> e virgola <,> per indicare gli intervalli che superano rispettivamente la quinta ascendente e discendente.

Per chiarirci le idee, Do4 – Sol4, in relazione a

\relative c'' -

vanno indicati con <c g’> mentre Do4 – Sol3 vanno scritti con <c g>.
Per contro, Do4 – Fa4 vengono codificati con <c f> mentre Do4 – Fa3 si scriveranno <c f,>.

Ancora un po’ di Pazienza, pazienza e ancora pazienza!

Se compilassimo il sorgente ora – come in precedenza – otterremmo solamente – sempre a fronte di un’esatta sintassi – il log che certifica il successo e, di conseguenza, la correttezza del codice.

Introduciamo qui il concetto di score.
La score si configura come un insieme di istruzioni che realizzeranno di fatto la costruzione del nostro sistema musicale, il quale potrà essere definito da un pentagramma singolo o da un layout basato su un’intelaiatura di pentagrammi multipli.

Appendiamo in coda al nostro codice le seguenti istruzioni:

Schema 8: la score

%Definizione del sistema dei pentagrammi
\score {
%Definizione di un nuovo pentagramma
\new Staff <<
%Chiamata alle variabili global e voiceone
\global
\voiceone
>>
%Definizione del layout
	\layout {
	%Chiusura layout: livello 2
	}
%Chiusura score: livello 1
}

Prima di passare alla compilazione, prendiamoci il tempo di osservare nuovamente il codice nella sua totalità:

Schema 9: sorgente riassuntivo

%Versione del programma
\version "2.18.2"
%Nome variabile
global = {
%Armatura di chiave
\key c \major
%indicazione di tempo
\time 4/4
%indicazione metronomica
\tempo 4 = 120
%Chiusura variabile: livello 1
}
%***
%Notazione melodica
%Pattern 1
%Nome variabile
voiceonea = {
%Misure 1 - 3; 5 - 7; 13 - 15
e4 e f g | g4 f e d | c4 c d e |
%Chiusura variabile: livello 1
}
%Struttura melodica
%nome variabile
voiceone = {
	%Definizione dell'altezza per il do relativo
	\relative c'' {
	%misure 1 - 3: chiamata alla variabile voiceonea
	\voiceonea
	%misura 4
	e4. d8 d4 r |
	%Forzatura di a capo
	\break
	%misure 5 - 7: chiamata alla variabile voiceonea
	\voiceonea
	%misura 8
	d4. c8 c4 r |
	%Forzatura di a capo
	\break
	%misure 9 - 12
	d4 d e c8 r | d4 e8 f e4 c8 r | d4 e8 f e4 d | c4 d g, r |
	%Forzatura di a capo.
	\break
	%Ridefinizione dell'altezza per il Do relativo
	\relative c''
	%misure 13 - 15: chiamata alla variabile voiceonea
	\voiceonea
	%misura 16
	d4. c8 c4 r |
	%Doppia barra di chiusura
	\bar "|."
	%Chiusura notazione: livello 2
	}
%Chiusura variabile: livello 1
}
%***
%Definizione del sistema dei pentagrammi
\score {
%Definizione di un nuovo pentagramma
\new Staff <<
%Chiamata alle variabili global e voiceone
\global
\voiceone
>>
%Definizione del layout
	\layout{
	%Chiusura layout: livello 2
	}
%Chiusura score: livello 1
}
Compiliamo - impazienti che non siamo altro - e godiamoci il risultato... Bravissimi!

Riproduzione grafica della musica generata dallo schema 9

L'immagine utilizzata in questa pagina proviene dalle bacheche tematiche di Pinterest.

<Argomento precedente Argomento successivo>

Tavola dei contenuti

  1. Definire una variabile Schema 4
  2. Variabile global Schema 5
  3. Variabili global e voiceone Schema 6
  4. Richiamare le variabili Schema 7
  5. La Score Schema 8
  6. Sorgente riassuntivo Schema 9

Riferimenti