[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 773.   Introduzione a LilyPond

LilyPond (1) è una sorta di compilatore, per la composizione musicale. Per la composizione si parte da un sorgente, scritto con un linguaggio che ha delle similitudini con TeX/LaTeX, il quale viene compilato per generare lo spartito in formato DVI. La compilazione, se richiesto, può generare anche un file MIDI.

LilyPond è un lavoro ancora in corso di sviluppo, a causa del quale il formato del sorgente subisce cambiamenti da una versione all'altra.

In questo capitolo vengono descritti alcuni concetti essenziali riferiti all'utilizzo di questo programma, con alcuni esempi molto semplici, con l'auspicio che quanto mostrato rimanga valido il più a lungo possibile. Fortunatamente, la documentazione originale di LilyPond è abbastanza buona e offre la descrizione di esempi aggiornati.

773.1   Note e pause

Senza entrare troppo nel dettaglio dell'articolazione del sorgente di LilyPond, dal momento che questo è sempre soggetto a variazioni, si può cominciare con una struttura molto semplice, secondo il modello seguente:

\include "linguaggio.ly"
\score {
    \notes {
        note
    }
    \paper {
        impaginazione
    }  
}

Quelle che si vedono sembrano delle macro di TeX, ma in pratica non viene usata qui tale definizione.

Inizialmente, si vede l'istruzione \include, che intuitivamente serve a incorporare uno stile esterno. La notazione musicale cambia da un paese all'altro e quella predefinita è olandese. Pertanto, nella maggior parte delle situazioni, diventa necessario incorporare inizialmente lo stile che consente di utilizzare la notazione più adatta alla propria nazionalità.

Nell'ambito della direttiva \notes, si indicano le note con delle sigle che cambiano in base alla scelta della nazionalità, secondo la tabella 773.1.

Tabella 773.1. Denominazione delle note in base alla nazionalità.

Stile DO RE MI FA SOL LA SIb SI Diesis Bemolle Pausa
nederlands.ly
c
d
e
f
g
a
bes
b
xis
xes
r
english.ly
c
d
e
f
g
a
bf
bflat
b
xs
xsharp
xf
xflat
r
deutsch.ly
c
d
e
f
g
a
b
h
xis
xes
r
norsk.ly
c
d
e
f
g
a
b
h
xiss
xis
xess
xes
r
svenska.ly
c
d
e
f
g
a
b
h
xiss
xess
r
italiano.ly
do
re
mi
fa
sol
la
sib
si
xd
xb
r
catalano.ly
do
re
mi
fa
sol
la
sib
si
xd
xs
xb
r
espanol.ly
do
re
mi
fa
sol
la
sib
si
xs
xb
r

Si noti che la pausa si indica con la lettera «r», perché questa è l'iniziale di rest.

Gli esempi vengono mostrati con la notazione per la lingua italiana, pertanto, il modello iniziale per gli esempi può essere quello seguente:

\include "italiano.ly"
\score {
    {
        note
    }
    \layout {}  
}

Per cominciare si può scrivere la sequenza delle note naturali per vedere poi cosa si ottiene:

% primo.ly
\include "italiano.ly"
\score {
    {
        do re mi fa sol la si r
    }
    \layout {}  
}

Supponendo di chiamare il file primo.ly, come si vede dal commento iniziale in stile TeX, si può procedere alla sua compilazione nel modo seguente:

lilypond --dvi primo.ly[Invio]

Durante la compilazione, si possono vedere i messaggi seguenti:

GNU LilyPond 2.4.5
Processing `primo.ly'
Parsing...
Interpreting music... [3]
Preprocessing graphical objects... 
Calculating line breaks... 
Layout output to `primo.tex'...

Converting to `primo.dvi'...

Da quello che si vede, si comprende che viene generato il file primo.tex, compilato successivamente con LaTeX. Si ottiene così un file in formato DVI, che può essere visualizzato, o stampato, con gli strumenti appropriati (capitolo 217). Si dovrebbe ottenere un risultato simile a quello della figura successiva:

do re mi fa sol la si

È stata attribuita una chiave di violino in modo predefinito, con un tempo di un intero; inoltre, le note partono da un'ottava al di sotto rispetto a quella «media» della chiave utilizzata e la loro durata predefinita è di un quarto.

Si può definire esplicitamente la chiave con l'istruzione \clef. Le chiavi più comuni sono la chiave di violino, \clef treble, e la chiave di basso, \clef bass. Viene riproposto l'esempio precedente, usando però una chiave di basso:

\include "italiano.ly"
\score {
    {
        \clef bass
        do re mi fa sol la si r
    }
    \layout {}  
}

do re mi fa sol la si r

Il tono di una nota può essere alzato facendola seguire da un apice singolo: ogni apice alza la nota di un'ottava; nello stesso modo, si può abbassare il tono di una o più ottave, con l'uso di una virgola. Seguono due esempi:

\include "italiano.ly"
\score {
    {
        \clef treble
        do re mi fa sol la si r
    }
    \layout {}  
}

do' re' mi' fa' sol' la' si' r

\include "italiano.ly"
\score {
    {
        \clef bass
        do, re, mi, fa, sol, la, si, r
    }
    \layout {}  
}

do, re, mi, fa, sol, la, si, r

Il tempo si definisce con l'istruzione \time, seguita dalla frazione a cui si vuole fare riferimento (per esempio 3/4). La lunghezza predefinita di una nota è di un quarto. In generale, si definisce il denominatore della frazione di tempo attribuita a una nota o a una pausa con un numero intero che segue la definizione della nota stessa. Inoltre, per prolungare del 50 % la durata della nota, si può aggiungere un punto. L'esempio seguente riassume questi concetti:

\include "italiano.ly"
\score {
    {
        \clef treble
        \time 3/4
        do'2 re'4 mi'4. fa'8 sol'4 la'16 si'32 r32 r4 r2
    }
    \layout {}  
}

do'2 re'4 mi'4. fa'8 sol'4 la'16 si'32 r32 r4 r2

Per definire un legato, si usano le parentesi tonde, ma ciò subito dopo la prima nota e subito prima dell'ultima da unire assieme:

\include "italiano.ly"
\score {
    {
        \clef treble
        \time 3/4
        do'2 ( re'4 mi'4. ) fa'8 sol'4 la'16 si'32 r32 r4 r2
    }
    \layout {}  
}

do'2 ( re'4 mi'4. ) fa'8 sol'4 la'16 si'32 r32 r4 r2

Per facilitare l'introduzione delle note, è possibile indicare le note all'interno dell'istruzione \relative, con cui si dichiara il DO di partenza dell'ottava a cui si vuole fare riferimento:

#(ly:set-option 'old-relative)
\include "italiano.ly"
\score {
    {
        \clef treble
        \time 3/4
        \relative do' {
            do4 re4 mi4 fa4 sol4 la4 si4 r2
        }
    }
    \layout {}  
}

do4 re4 mi4 fa4 sol4 la4 si4

773.2   Alterazioni

Come mostra la tabella 773.1, si può alterare il tono di una nota aggiungendo una terminazione, che cambia in base allo stile nazionale selezionato. È poi LilyPond che mostra i simboli correttivi necessari (gli «accidenti»), nel modo più opportuno.

Per definire una scala predefinita differente da quella naturale in DO maggiore, si può usare l'istruzione \key, seguita dagli attributi appropriati. L'esempio seguente mostra le note di una «scala cromatica», composta quindi dai 12 semitoni di un'ottava, con la dichiarazione iniziale di una scala in DO minore.

#(ly:set-option 'old-relative)
\include "italiano.ly"
\score {
    {
        \clef treble
        \key do \minor
        \time 3/4
        \relative do' {
            do4 dod4 re4 red4 mi4 fa4 fad4 sol4 sold4 la4 lad4 si4
        }
    }
    \layout {}  
}

do4 dod4 re4 red4 mi4 fa4 fad4 sol4 sold4 la4 lad4 si4

773.3   Impaginazione

L'istruzione \layout, che è già stata usata negli esempi, ma sempre con un argomento nullo, controlla l'impaginazione. In modo predefinito è definito il formato della carta e un'intestazione contenente il numero di pagina. L'esempio seguente mostra come controllare il formato della carta e come eliminare la numerazione delle pagine:

    \layout {
        papersize = "a4"
        pagenumber = "no"
    }  

LilyPond consente anche di definire il titolo, l'autore e l'intestazione dei fogli che vanno a contenere lo spartito. Questo si ottiene nell'ambito dell'istruzione \header, che si colloca al di fuori di \score. Si osservi l'esempio seguente:

\include "italiano.ly"
\header {
    title   = "Scala in DO maggiore"
    author  = "Tizio Tizi"
    tagline = "La mia scala"
}
\score {
    ...
}

Se non si utilizza la definizione dell'intestazione dei fogli, con l'assegnamento della variabile tagline, LilyPond ne inserisce una predefinita; pertanto, se si vuole togliere questa intestazione, occorre assegnare una stringa nulla:

\header {
    tagline = ""
}

773.4   File MIDI

È possibile ottenere un file in formato MIDI dalla compilazione di un file LilyPond, purché esista l'istruzione \midi, che si colloca solitamente vicino a \layout. L'istruzione \midi vuole un argomento, che solitamente è un gruppo vuoto ({}), a meno che si debbano indicare delle caratteristiche particolari. L'esempio seguente genera anche un file con estensione .midi, contenente l'esecuzione dello spartito. Dal momento che non viene specificato lo strumento, si ottiene il suono del piano.

#(ly:set-option 'old-relative)
\include "italiano.ly"
\score {
    {
        \clef treble
        \key do \major
        \time 4/4
        \relative do' {
            do re mi r
            re mi fa r
            mi fa sol r
            sol sol fa mi
            re do r2
        }
    }
    \layout {}  
    \midi {}
}

musichetta

Per generare un suono diverso dal piano, si deve intervenire con un'istruzione particolare nell'ambito di \score. L'estratto seguente è una variante dell'esempio appena mostrato, in cui si dichiara espressamente che lo strumento abbinato è il clavicembalo:

\score {
    {
        \set Staff.midiInstrument = harpsichord
        \clef treble
        \key do \major
        \time 4/4
        \relative do' {
            ...
        }
    }
    \layout {}  
    \midi {}
}

I nomi degli strumenti che si possono indicare sono prestabiliti, come riportato nella tabella 773.25.

Tabella 773.25. Elenco dei nomi degli strumenti, secondo la documentazione di LilyPond.

acoustic grand bright acoustic electric grand honky-tonk
electric piano 1 electric piano 2 harpsichord clav
celesta glockenspiel music box vibraphone
marimba xylophone tubular bells dulcimer
drawbar organ percussive organ rock organ church organ
reed organ accordion harmonica concertina
acoustic guitar (nylon) acoustic guitar (steel) electric guitar (jazz) electric guitar (clean)
electric guitar (muted) overdriven guitar distorted guitar guitar harmonics
acoustic bass electric bass (finger) electric bass (pick) fretless bass
slap bass 1 slap bass 2 synth bass 1 synth bass 2
violin viola cello contrabass
tremolo strings pizzicato strings orchestral strings timpani
string ensemble 1 string ensemble 2 synthstrings 1 synthstrings 2
choir aahs voice oohs synth voice orchestra hit
trumpet trombone tuba muted trumpet
french horn brass section synthbrass 1 synthbrass 2
soprano sax alto sax tenor sax baritone sax
oboe english horn bassoon clarinet
piccolo flute recorder pan flute
blown bottle skakuhachi whistle ocarina
lead 1 (square) lead 2 (sawtooth) lead 3 (calliope) lead 4 (chiff)
lead 5 (charang) lead 6 (voice) lead 7 (fifths) lead 8 (bass+lead)
pad 1 (new age) pad 2 (warm) pad 3 (polysynth) pad 4 (choir)
pad 5 (bowed) pad 6 (metallic) pad 7 (halo) pad 8 (sweep)
fx 1 (rain) fx 2 (soundtrack) fx 3 (crystal) fx 4 (atmosphere)
fx 5 (brightness) fx 6 (goblins) fx 7 (echoes) fx 8 (sci-fi)
sitar banjo shamisen koto
kalimba bagpipe fiddle shanai
tinkle bell agogo steel drums woodblock
taiko drum melodic tom synth drum reverse cymbal
guitar fret noise breath noise seashore bird tweet
telephone ring helicopter applause gunshot

Per indicare a quale velocità eseguire lo spartito nella conversione MIDI, all'interno dell'istruzione \midi si può inserire l'istruzione seguente:

\tempo n = m

In questo modo si intende una velocità di esecuzione che permetta di avere m note della durata di 1/n in un minuto. L'esempio seguente serve ad avere 84 note da un quarto al minuto:

    \midi {
        \tempo 4 = 84
    }

Esiste anche la possibilità di estrapolare lo spartito da un file MIDI; tuttavia, il risultato che si ottiene risulta privo di indicazioni importanti, o peggio, se il file è stato ottenuto da un'esecuzione vera e propria, i tempi risultano imprecisi. In generale, questa possibilità consente di ottenere una bozza di sorgente LilyPond da adattare successivamente. Supponendo di disporre del file prova.midi, si ottiene il sorgente prova-midi.ly con il comando seguente:

lilypond -m prova.ly[Invio]

773.5   Altri formati

Dal momento che esistono diverse versioni, anche incompatibili, del formato del sorgente di LilyPond, si può usare il comando convert-ly per aggiornare una vecchia versione di questo sistema di scrittura musicale. Tuttavia, fino a questo punto è stata omessa l'istruzione \version, con cui si specifica, all'inizio del sorgente di LilyPond, a quale versione si sta facendo riferimento:

\version 1.5.65
\score {
...
}

È sufficiente avviare il programma convert-ly con il nome del sorgente da convertire, per ottenere l'aggiornamento dello stesso all'ultima versione disponibile (installata) di LilyPond, attraverso lo standard output. Eventualmente, si può usare l'opzione -e, per aggiornare il file di partenza (lasciando una copia di sicurezza della versione precedente con estensione ~):

convert-ly -e prova.ly[Invio]

In questo esempio, si ottiene quindi un nuovo file prova.ly, lasciando una copia di quello vecchio con il nome prova.ly~.

Sono disponibili anche dei programmi di conversione ulteriori, per trasformare altri formati in LilyPond: etf2ly abc2ly pmx2ly musedata2ly mup2ly.

773.6   Programmi frontali

Esistono diversi programmi in grado di generare un sorgente LilyPond componendo in modo grafico. Per esempio, è disponibile Denemo, (2) tuttavia, la composizione fatta in questo può essere efficace solo se si studia molto bene l'utilizzo della tastiera, per poter selezionare rapidamente le note da inserire, con le loro caratteristiche.

773.7   Progetto Mutopia

Presso <http://www.mutopiaproject.org> è disponibile un archivio di musica di dominio pubblico, realizzato attraverso LilyPond. Da questo archivio è possibile prelevare spartiti o esecuzioni in formato MIDI.

Generalmente conviene prelevare direttamente i file sorgenti LilyPond, per ricompilarli come si vuole. Tuttavia, questi sorgenti sono realizzati nei modi più diversi, ma soprattutto, sono fatti ognuno per una versione particolare di LilyPond.

Una volta prelevati i sorgenti di un'opera a cui si è interessati, si deve provvedere ad allinearne la versione con quella di LilyPond che si intende utilizzare. Il procedimento è semplice se si tratta di un file soltanto, oppure di più file indipendenti, riferiti a porzioni differenti dell'opera. Si propone un esempio con il file <http://www.mutopiaproject.org/ftp/BachJS/BWV777/bach-invention-06/bach-invention-06.ly>:

convert-ly -e bach-invention-06.ly[Invio]

convert-ly (GNU LilyPond) 1.6.6
Processing `bach-invention-06.ly' ... Applying conversions: 1.5.33, 1.5.38,
1.5.40, 1.5.49, 1.5.52, 1.5.56, 1.5.58, 1.5.59, 1.5.62, 1.5.67, 1.5.68,
1.5.71, 1.5.72, 1.6.5,

In questo caso, la conversione ha funzionato, o almeno dà l'impressione di funzionare, perché il sorgente contiene l'istruzione \version appropriata:

\version "1.3.148"

Quando nel sorgente manca l'istruzione \version, bisogna inserirla, dopo essere risaliti a questa indicazione, altrimenti la conversione è impossibile.

Tutto diventa molto difficile quanto il sorgente di un'opera si articola in file differenti. Di solito, chi realizza questa struttura non fornisce indicazioni sul modo corretto di ricompilare il sorgente; d'altro canto, spesso questi file sono generati da altri strumenti. In questi casi, si devono convertire tutti i file, ma spesso, solo il file principale, che richiama gli altri, contiene l'istruzione \version. Se le cose stanno così, si deve ricopiare quell'istruzione all'inizio di tutti questi file, utilizzando poi convert-ly con ognuno di questi, sperando di avere successo.

Successivamente si può passare alla compilazione, indicando il file sorgente principale, oppure ognuno dei file sorgenti principali se un'opera è suddivisa in parti separate.

lilypond --dvi bach-invention-06.ly[Invio]

Se lo scopo della compilazione è generare dei file MIDI, si possono incontrare altre difficoltà; la prima, costituita dal fatto che chi ha trascritto l'opera con LilyPond, può averlo fatto in modo da generare spartiti separati per ogni strumento utilizzato: in questo caso, si rischia di ottenere tanti file MIDI quanti sono gli strumenti utilizzati. In questa situazione, bisogna intervenire nel sorgente in modo molto approfondito, per riunire assieme tutti gli spartiti, in un libro solo.

Se la compilazione genera correttamente un file MIDI soltanto, oppure un file per ogni porzione dell'opera, può darsi che gli strumenti usati per l'esecuzione non corrispondano a quelli previsti nell'opera stessa. In generale, il sorgente LilyPond ottenuto dall'archivio del progetto Mutopia contiene un'intestazione con molte informazioni importanti:

\header {
    ...
 mutopiatitle = "Invention 6"
 mutopiacomposer = "J. S. Bach (1685-1750)"
 mutopiaopus = "BWV 777"
 mutopiainstrument = "Harpsichord, Piano"
    ...
}

In questo caso, si vede la proposta di utilizzare un clavicembalo o un piano. Data l'epoca a cui si riferisce l'opera trascritta, è probabile che sia più gradevole il suono di un clavicembalo. Se nel sorgente manca la richiesta esplicita di usare questo strumento, occorre provvedere ad aggiungere l'istruzione appropriata, altrimenti si ottiene il piano che è lo strumento predefinito:

\score {
   \context GrandStaff << 
    \context Staff = "one" <<
      \set Staff.instrument = "harpsichord"
      \set Staff.midiInstrument = "harpsichord"
      \voiceone
    >>
    \context Staff = "two" <<
      \set Staff.instrument = "harpsichord"
      \set Staff.midiInstrument = "harpsichord"
      \voicetwo
    >>
  >>
...

Naturalmente, la denominazione dello strumento deve corrispondere a quanto previsto da LilyPond (tabella 773.25).

773.8   Riferimenti


1) LilyPond   GNU GPL

2) Denemo   GNU GPL


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_a_lilypond.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory