LilyPond
Notazione musicale professionale e gratuita
- 01.Le basi della notazione
- 02.Progetto multi-file e canzoniere
- 03.Output PDF e MIDI separati
- 04.Intestazione personalizzata
- 05.Comandi markup personalizzati
Indice dei contenuti
- 1. Cos'è LilyPond e di cosa hai bisogno
- 2. Struttura di un file .ly
- 3. Il blocco \version
- 4. Il blocco \header
- 5. Il blocco \score
- 6. Scrivere le note
- 7. Modalità relativa
- 8. Durate delle note
- 9. Armatura di chiave, tonalità e metro
- 10. Aggiungere il testo (sillabe)
- 11. Simboli degli accordi
- 12. Interruzioni di riga e layout
- 13. Tempo MIDI e stanghetta finale
- 14. Esempio completo — tutto insieme
- 1. L'idea: separare musica, layout e output
- 2. Struttura delle cartelle consigliata
- 3. Il comando \include
- 4. File di output — genera/canzoniere.ly
- 5. File di definizioni — include/impostazioni.ly
- 6. File dei brani — pezzi/01_canzone.ly
- 7. Il file del canzoniere
- 8. Titoli tramite variabili — il problema
- 9. Titoli tramite variabili — la soluzione
- 10. Creare un file modello (template)
- 11. Flusso di lavoro per nuove canzoni
- 12. Esempio completo — canzoniere con due brani
- 1. Riepilogo: la struttura della Lezione 2
- 2. Il problema: PDF e MIDI nello stesso file
- 3. La soluzione: due file di output separati
- 4. Il file pagina.ly — solo PDF
- 5. Il file midi.ly — solo MIDI
- 6. Il tempo come variabile
- 7. Assegnare strumenti MIDI alle voci
- 8. I 128 suoni General MIDI
- 9. Strategia: un MIDI per brano, non per tutto il canzoniere
- 10. Struttura aggiornata del progetto
- 11. Esempio completo
- 1. L'intestazione di default e i suoi limiti
- 2. La funzione bookTitleMarkup
- 3. Aggiungere campi personalizzati all'header
- 4. Leggere i campi con \fromproperty
- 5. Struttura a tre colonne con \fill-line
- 6. Colonne con \column e \right-column
- 7. Allineare dal basso con \dir-column
- 8. Aggiungere spazio con \vspace
- 9. Linea separatrice con \draw-hline
- 10. Inserire un diagramma di accordi
- 11. Esempio completo — bookTitleMarkup finale
- 1. Il problema: diagrammi ripetitivi e difficili da mantenere
- 2. Il file definizioni.ly — un modulo separato
- 3. Struttura del progetto aggiornata
- 4. Il modello base di un diagramma
- 5. Ridimensionare il diagramma con \override
- 6. Aggiungere l'etichetta del nome accordo
- 7. Unire diagramma ed etichetta con \concat
- 8. Creare un comando markup personalizzato
- 9. Sintassi di define-markup-command
- 10. Usare il comando personalizzato nel brano
- 11. Accordi con estensioni (7a, 9a ecc.)
- 12. Diagrammi per chitarra
- 13. Esempio completo
Le basi
Notazione musicale professionale e gratuita
01Cos'è LilyPond e di cosa hai bisogno
LilyPond è un programma gratuito e open-source di notazione musicale.
Anziché trascinare note su un pentagramma con il mouse, si descrive la musica
in un file di testo semplice (.ly), e LilyPond lo converte in uno spartito
di qualità tipografica professionale (PDF, PNG, SVG) e in un file MIDI per l'ascolto.
Hai bisogno di tre strumenti:
| Strumento | Scopo | Note |
|---|---|---|
| LilyPond | Il motore che compila il file .ly in PDF/MIDI |
Scaricabile da lilypond.org |
| Frescobaldi | Editor grafico con anteprima in tempo reale | Consigliato per i principianti |
| Browser | Consultare la documentazione ufficiale | Sezioni utili: Notation Reference e Internals |
02Struttura di un file .ly
Ogni file LilyPond è composto da tre blocchi principali, nell'ordine:
% 1. Versione (obbligatoria) \version "2.26.0" % 2. Intestazione (titolo, compositore, ecc.) \header { title = "Il mio pezzo" composer = "Nome Cognome" } % 3. Partitura (la musica vera e propria) \score { \new Staff { % le note vanno qui } \layout { } % produce il PDF \midi { } % produce il MIDI }
%
(riga singola) o sono racchiusi tra %{ e %} (blocco multiriga).
LilyPond li ignora completamente.
03Il blocco \version
La prima riga di ogni file deve sempre dichiarare la versione di LilyPond usata.
Questo permette di convertire automaticamente i file in futuro con il comando
convert-ly quando si aggiorna il programma.
\version "2.26.0"
04Il blocco \header
L'intestazione contiene i metadati del pezzo: titolo, sottotitolo, compositore, paroliere, e così via. Appaiono automaticamente in cima alla partitura.
\header { title = "Le mie note" subtitle = "versione semplice" composer = "Sergio Installatore" poet = "Anonimo" tagline = ##f % nasconde il testo in fondo "Music engraved by LilyPond" }
In Frescobaldi, appena scrivi qualcosa nell'header, vedrai l'anteprima aggiornarsi in tempo reale — molto utile per verificare immediatamente la posizione dei testi.

05Il blocco \score
Il blocco \score è il cuore del file: contiene la musica e
specifica i tipi di output desiderati.
\score { \new Staff { c' d' e' f' % quattro note da un quarto } \layout { } % genera il PDF \midi { } % genera il file MIDI }
\score, definisci le note in una variabile separata e richiamala.
Questo separa la musica dal layout e rende il file molto più leggibile.
% Definizione della melodia come variabile melodia = \relative c' { c d e f | g a b c } % Uso della variabile nello score \score { \new Staff { \melodia } \layout { } \midi { } }
06Scrivere le note
In LilyPond le note si scrivono con le lettere dell'alfabeto, in inglese.
La scala è: c d e f g a b (Do Re Mi Fa Sol La Si).
| Simbolo LilyPond | Nota italiana | Altezza |
|---|---|---|
c | Do | Do centrale (ottava 4) |
d | Re | |
e | Mi | |
f | Fa | |
g | Sol | |
a | La | |
b | Si | |
cis | Do diesis | is = diesis |
bes | Si bemolle | es = bemolle |
Per specificare l'ottava in modo assoluto si aggiunge un apostrofo '
per salire di un'ottava o una virgola , per scendere:
c % Do sotto il rigo (ottava 3) c' % Do centrale (ottava 4) c'' % Do sopra il rigo (ottava 5) c, % Do grave (ottava 2)
07Modalità relativa
Specificare l'ottava per ogni nota è tedioso. La modalità relativa
risolve il problema: ogni nota viene calcolata in relazione alla precedente,
scegliendo l'ottava più vicina. Se il salto supera una quarta, si aggiunge
' o , solo per quella nota.
\relative c' { % nota di partenza: Do centrale c d e f % sale per gradi, nessun apostrofo necessario g a b c % continua a salire b a g f % scende per gradi e d c2 % c2 = Do mezza nota }
' (per salire) o , (per scendere)
tante volte quante ottave si supera.
\relative c' { c g' % salto di quinta: g sale di un'ottava → g' c, g % g scende sotto c → g c g'' % g due ottave sopra → g'' }
08Durate delle note
La durata si specifica con un numero dopo la lettera della nota. Se la durata non cambia, non è necessario riscriverla.
| Simbolo | Durata | Italiana |
|---|---|---|
1 | intera | semibreve |
2 | metà | minima |
4 | quarto | semiminima |
8 | ottavo | croma |
16 | sedicesimo | semicroma |
4. | quarto puntato | semiminima puntata |
2~2 | legatura di valore | minima legata a minima |
\relative c' { c4 d e f % quattro semiminime g2 a2 % due minime b1 % una semibreve c8 d e f g a % sei crome (la durata 8 rimane) f4. e8 % semiminima puntata + croma d2~2 % minima legata: vale una semibreve }
09Armatura di chiave, tonalità e metro
Questi tre elementi si definiscono tipicamente in un blocco global
che viene poi richiamato in tutte le voci, per coerenza.
global = {
\clef treble % chiave di violino (default)
\key f \major % Fa maggiore (1 bemolle)
\time 4/4 % quattro quarti per battuta
}
% chiavi disponibili: treble, bass, alto, tenor, treble_8
% \minor per la tonalità minore: \key a \minor
| Chiave | Simbolo LilyPond |
|---|---|
| Sol (violino) | treble |
| Basso (fa) | bass |
| Contralto (do) | alto |
| Tenore (do) | tenor |
| Sol 8va bassa | treble_8 |
10Aggiungere il testo (sillabe)
Il testo si definisce in modalità \lyricmode e si aggancia alle note
con \lyricsto o \addlyrics.
Le sillabe si separano con --, le parole con uno spazio.
% Definizione della melodia con un nome esplicito per la voce melodia = \relative c' { \key c \major \time 4/4 c4 d e f | g2 e2 | f4 e d c | d2 c2 } % Testo sillabato versi = \lyricmode { Fra -- tel -- lo | so -- le, | so -- rel -- la | lu -- na. } \score { << \new Staff { \new Voice = "melodia" { \melodia } } \new Lyrics \lyricsto "melodia" { \versi } >> \layout { } }
| Simbolo | Significato |
|---|---|
-- | Trattino tra sillabe della stessa parola |
| spazio | Parola nuova |
_ | Melisma: la nota è continuazione della sillaba precedente |
\skip 4 | Salta una nota (nessuna sillaba) |
11Simboli degli accordi
LilyPond può generare automaticamente i nomi degli accordi sopra il pentagramma.
Si usa la modalità \chordmode.
accordi = \chordmode { c2 g2 % Do maggiore, Sol maggiore (mezzo per accordo) a2:m % La minore (:m = minore) g2:7 % Sol settima (:7 = settima di dominante) c1 % Do maggiore per un'intera battuta } \score { << \new ChordNames { \accordi } \new Staff { \melodia } >> \layout { } }
| Suffisso | Tipo di accordo |
|---|---|
| (nessuno) | Maggiore |
:m | Minore |
:7 | Settima di dominante |
:maj7 | Settima maggiore |
:dim | Diminuito |
:sus4 | Sospeso quarta |
12Interruzioni di riga e layout
È buona pratica separare le interruzioni di riga dalla musica vera e propria, definendole in una variabile dedicata.
% Variabile separata per i break mieInterruzioni = { s1 s1 s1 \break % vai a capo dopo 3 battute s1 s1 s1 \break % vai a capo dopo altre 3 } \score { \new Staff { << \melodia \mieInterruzioni % sovrapposta alla melodia >> } \layout { indent = 0\mm } % rientranza a zero }
13Tempo MIDI e stanghetta finale
Nel blocco \midi si può specificare il tempo in BPM.
La stanghetta finale si aggiunge con \bar "|.".
melodia = \relative c' { c d e f | g a b c \bar "|." % stanghetta finale: linea sottile + linea spessa } \score { \new Staff { \melodia } \layout { } \midi { \tempo 4 = 120 } % 120 semiminime al minuto }
| Stanghetta | Simbolo LilyPond |
|---|---|
| Normale | \bar "|" |
| Doppia | \bar "||" |
| Finale | \bar "|." |
| Ripetizione inizio | \bar ".|:" |
| Ripetizione fine | \bar ":|." |
14Esempio completo — tutto insieme
Ecco un file completo che mette in pratica tutti i concetti della lezione: una melodia semplice in Fa maggiore con testo, accordi e MIDI.
\version "2.26.0" % ── INTESTAZIONE ───────────────────────────────── \header { title = "Canzone semplice" composer = "Autore" tagline = ##f } % ── VARIABILI ──────────────────────────────────── global = { \key f \major \time 4/4 } melodia = \relative c' { \global f4 g a bes | c2 a2 | bes4 a g f | g2 f2 | \bar "|." } versi = \lyricmode { Que -- sta è la mia can -- zon -- ci -- na, sem -- pli -- ce e bel -- li -- na. } accordi = \chordmode { f1 | f1 | c1 | f1 | } mieInterruzioni = { s1 s1 \break s1 s1 } % ── SCORE ──────────────────────────────────────── \score { << \new ChordNames { \accordi } \new Staff { << \new Voice = "mel" { \melodia } \mieInterruzioni >> } \new Lyrics \lyricsto "mel" { \versi } >> \layout { indent = 0\mm } \midi { \tempo 4 = 100 } }
\paper e \layout.
Progetto multi-file
Modularizzazione e struttura a canzoniere
01L'idea: separare musica, layout e output
Quando si lavora a un canzoniere (una raccolta di brani), mettere tutto in un unico file .ly diventa rapidamente ingestibile. La soluzione è la modularizzazione: dividere il progetto in file specializzati, ciascuno con un compito preciso.
| Tipo | Cartella | Contenuto |
|---|---|---|
| Output | genera/ | File master: \paper, \layout e richiami ai brani |
| Definizioni | include/ | Impostazioni globali riutilizzabili: stili, macro, funzioni comuni |
| Brani | pezzi/ | Un file per ogni canzone: note, testi, accordi |
genera/. Le note dei brani rimangono intatte.02Struttura delle cartelle consigliata
\include siano corretti.03Il comando \include
\include inserisce il contenuto di un altro file .ly nel punto esatto in cui viene scritto. Il percorso va tra virgolette doppie.
% Percorso relativo alla posizione del file corrente \include "../include/impostazioni.ly" \include "../pezzi/01_canzone.ly" % ./ = cartella corrente ../ = cartella superiore
\include " Frescobaldi apre un menu di completamento con i file disponibili. Usa Tab per completare il percorso.| Simbolo | Significato nel percorso |
|---|---|
./ | Cartella corrente |
../ | Cartella superiore (un livello su) |
../../ | Due livelli su |
04File di output — genera/canzoniere.ly
Questo è il file che si compila per ottenere il PDF finale. Non contiene note, solo la struttura globale e i richiami ai brani.
\version "2.26.0" % Carica le impostazioni globali \include "../include/impostazioni.ly" % Carica i brani nell'ordine desiderato \include "../pezzi/01_canzone.ly" \include "../pezzi/02_canzone.ly"
\version solo nel file master, non nei file inclusi. Ogni variabile deve essere definita una sola volta.05File di definizioni — include/impostazioni.ly
Qui vivono le impostazioni grafiche che si applicano a tutti i brani: margini, font, footer ecc.
% NON ripetere \version qui \paper { top-margin = 15\mm bottom-margin = 15\mm left-margin = 20\mm right-margin = 20\mm oddFooterMarkup = \markup { \fill-line { \fromproperty #'header:title \fromproperty #'page:page-number-string } } } \layout { indent = 0\mm \context { \Staff \RemoveEmptyStaves } }
06File dei brani — pezzi/01_canzone.ly
Ogni brano è un file autonomo con le variabili musicali e uno \score completo. Il titolo viene passato tramite variabili (vedi sezione 8-9).
titoloCanzone = "La mia prima canzone" compositoreCanzone = "Autore" melodiaCanzone = \relative c' { \key c \major \time 4/4 c4 d e f | g2 e2 | f4 e d c | c1 \bar "|." } versiCanzone = \lyricmode { Do Re Mi Fa Sol -- Sol Mi -- Fa Mi Re Do Do. } \score { << \new Staff { \new Voice = "mel" { \melodiaCanzone } } \new Lyrics \lyricsto "mel" { \versiCanzone } >> \header { title = \titoloCanzone composer = \compositoreCanzone } \layout { } \midi { } }
07Il file del canzoniere
Includendo più brani nel file master, LilyPond li stampa uno dopo l'altro nello stesso PDF.
\version "2.26.0" \include "../include/impostazioni.ly" \include "../pezzi/01_canzone.ly" \pageBreak % interruzione di pagina tra i brani (opzionale) \include "../pezzi/02_canzone.ly"
\include. Vuoi escludere un brano? Commenta la riga con %.08Titoli tramite variabili — il problema
Se metti l'\header con il titolo fuori dallo \score, LilyPond lo interpreta come intestazione globale del documento intero. Il risultato: il titolo appare solo nella prima pagina.
% ❌ Header fuori dallo score = titolo del documento intero \header { title = "La mia canzone" } \score { \new Staff { c' d' e' f' } \layout { } }
\header: globale (fuori da tutto, per il titolo del documento) e locale (dentro \score, per il titolo del singolo brano). Per un canzoniere multi-brano usa sempre quello locale.09Titoli tramite variabili — la soluzione
Definisci il titolo come variabile LilyPond e richiamala nell'\header locale dentro \score.
% 1. Definisci il titolo come variabile hdrTitolo = "La mia canzone" hdrCompositore = "Autore" hdrSottotitolo = "versione semplice" melodia = \relative c' { c d e f | g1 } % 2. Richiama le variabili nell'header DENTRO lo score \score { \new Staff { \melodia } \header { title = \hdrTitolo % ← variabile, non stringa diretta composer = \hdrCompositore subtitle = \hdrSottotitolo } \layout { } }
| Campo \header | Descrizione | Posizione tipica |
|---|---|---|
title | Titolo principale | Grande, centrato in cima |
subtitle | Sottotitolo | Sotto il titolo |
composer | Compositore | In alto a destra |
poet | Paroliere | In alto a sinistra |
instrument | Organico | Sotto il titolo |
piece | Nome del movimento | Sopra il primo sistema |
tagline | Riga finale LilyPond | Fondo ultima pagina |
10Creare un file modello (template)
Il modello è un file _modello.ly con la struttura vuota di un brano. Quando inizi una nuova canzone, lo copi e riempi le variabili.
% ══════════════════════════════════════════════════ % MODELLO BRANO — copia e rinomina per ogni nuova canzone % ══════════════════════════════════════════════════ % ── Metadati ────────────────────────────────────── hdrTitolo = "Titolo canzone" hdrCompositore = "Compositore" hdrPoeta = "Paroliere" % ── Impostazioni globali ─────────────────────────── globalBrano = { \key c \major \time 4/4 } % ── Melodia ──────────────────────────────────────── melodiaBrano = \relative c' { \globalBrano c1 % ← scrivi le note qui \bar "|." } % ── Testo ────────────────────────────────────────── versiBrano = \lyricmode { % ← scrivi le sillabe qui } % ── Accordi ──────────────────────────────────────── accordiBrano = \chordmode { % ← scrivi gli accordi qui } % ── Score ────────────────────────────────────────── \score { << \new ChordNames { \accordiBrano } \new Staff { \new Voice = "mel" { \melodiaBrano } } \new Lyrics \lyricsto "mel" { \versiBrano } >> \header { title = \hdrTitolo composer = \hdrCompositore poet = \hdrPoeta } \layout { } \midi { } }
11Flusso di lavoro per nuove canzoni
pezzi/_modello.ly e rinominalo (es. pezzi/03_nuova_canzone.ly).hdrTitolo, hdrCompositore ecc.), poi scrivi note, testo e accordi nelle rispettive variabili.03_nuova_canzone.ly in Frescobaldi per verificare che non ci siano errori.genera/canzoniere.ly e aggiungi \include "../pezzi/03_nuova_canzone.ly" nella posizione desiderata.melodia), il secondo sovrascrive il primo. Usa sempre nomi univoci per brano: melodia01, melodia02 ecc.12Esempio completo — canzoniere con due brani
include/impostazioni.ly
\paper { top-margin = 15\mm bottom-margin = 15\mm left-margin = 20\mm right-margin = 20\mm oddFooterMarkup = \markup { \fill-line { \fromproperty #'header:title \fromproperty #'page:page-number-string } } }
pezzi/01_fratello_sole.ly
hdrTitolo01 = "Fratello Sole" hdrCompositore01 = "Tradizionale" melodia01 = \relative c' { \key f \major \time 3/4 f4 g a | bes2 a4 | g2 f4 | a2. g4 a bes | c2 bes4 | a2 g4 | f2. \bar "|." } versi01 = \lyricmode { Fra -- tel -- lo so -- le bel -- lo, lu -- ce del mon -- do, del Si -- gnor por -- ta se -- gno e bel -- lez -- za. } \score { << \new Staff { \new Voice = "m01" { \melodia01 } } \new Lyrics \lyricsto "m01" { \versi01 } >> \header { title = \hdrTitolo01 composer = \hdrCompositore01 } \layout { } \midi { } }
pezzi/02_sorella_luna.ly
hdrTitolo02 = "Sorella Luna" hdrCompositore02 = "Tradizionale" melodia02 = \relative c' { \key g \major \time 4/4 g4 a b c | d2 b2 | c4 b a g | a1 \bar "|." } versi02 = \lyricmode { So -- rel -- la lu -- na chia -- ra, il ciel ras -- se -- re -- na. } \score { << \new Staff { \new Voice = "m02" { \melodia02 } } \new Lyrics \lyricsto "m02" { \versi02 } >> \header { title = \hdrTitolo02 composer = \hdrCompositore02 } \layout { } \midi { } }
genera/canzoniere.ly — il file da compilare
\version "2.26.0" \include "../include/impostazioni.ly" \include "../pezzi/01_fratello_sole.ly" \pageBreak \include "../pezzi/02_sorella_luna.ly"
oddHeaderMarkup e evenHeaderMarkup, e partiture a più voci (ChoirStaff, PianoStaff).Output multipli
Separare output PDF e MIDI — strumenti e tempo
01Riepilogo: la struttura della Lezione 2
Nella Lezione 2 abbiamo separato il progetto in tre tipi di file:
pezzi/01_canzone.ly— contiene le variabili musicali: melodia, accordi, testo, interruzioni di riga, titoloinclude/impostazioni.ly— contiene le impostazioni grafiche globaligenera/pagina.ly— il file master che unisce tutto e produce l'output
Il file pagina.ly conteneva sia \layout (per il PDF) che \midi (per il file audio). Questa lezione spiega come separarli per avere più controllo.
02Il problema: PDF e MIDI nello stesso file
Quando \layout e \midi stanno insieme nello stesso \score, ogni compilazione genera entrambi gli output. Questo crea due inconvenienti:
- Per un canzoniere di 20 brani si generano 20 file MIDI che ingombrano la cartella
- Non è possibile personalizzare il MIDI (strumenti, tempo) senza toccare il file che controlla la grafica
\score { \new Staff { \melodia } \layout { } % → genera PDF \midi { } % → genera MIDI (sempre, anche se non serve) }
03La soluzione: due file di output separati
Si creano due file distinti nella cartella genera/:
| File | Contiene | Produce |
|---|---|---|
pagina.ly | \layout senza \midi | PDF con la partitura |
midi.ly | \midi senza \layout | File audio .mid |
Entrambi includono lo stesso file del brano (01_canzone.ly), ma lo trattano in modo diverso.
pagina.ly quando lavori sulla grafica, e solo midi.ly quando vuoi controllare come suona. I file rimangono sempre separati e puliti.04Il file pagina.ly — solo PDF
Rispetto alla versione della Lezione 2, si rimuove semplicemente il blocco \midi dallo \score.
\version "2.26.0" \include "../include/impostazioni.ly" \include "../pezzi/01_canzone.ly" \score { << \new ChordNames { \accordiBrano } \new Staff { \new Voice = "mel" { \melodiaBrano } } \new Lyrics \lyricsto "mel" { \versiBrano } \mieInterruzioni >> \header { title = \hdrTitolo composer = \hdrCompositore } \layout { } % ← solo layout, niente \midi }
05Il file midi.ly — solo MIDI
Il file MIDI include gli stessi brani, ma nello \score tiene solo \midi e rimuove tutto ciò che è puramente grafico: intestazione, testo, interruzioni di riga, layout.
% Non servono nel MIDI:
\header { ... }
\new Lyrics ...
\mieInterruzioni
\layout { }% Necessari per il MIDI:
\new ChordNames ...
\new Staff { \melodiaBrano }
\midi { ... }\version "2.26.0" \include "../pezzi/01_canzone.ly" % solo il brano, non le impostazioni grafiche \score { << \new ChordNames { \accordiBrano } \new Staff { \melodiaBrano } >> \midi { \tempo 4 = 120 } % ← solo MIDI, niente \layout }
\midi richiede che ci sia almeno una nota: se lasci solo accordi senza melodia potresti ottenere un file silenzioso. Tieni sempre almeno una voce con note reali.06Il tempo come variabile
Invece di scrivere il tempo direttamente nel blocco \midi, conviene definirlo come variabile nel file del brano. Così puoi cambiarlo in un posto solo.
\midi { \tempo 4 = 120 }
% In 01_canzone.ly: bpm = 120 % In midi.ly: \midi { \tempo 4 = \bpm }
Se vuoi rallentare per provare, cambi solo bpm = 60 nel file del brano, ricompili midi.ly e il PDF rimane invariato.
bpmLento = 60, bpmNormale = 100 — e scegliere quale usare nel file MIDI senza toccare mai le note.07Assegnare strumenti MIDI alle voci
Di default LilyPond usa il Acoustic Grand Piano per tutte le voci. Per cambiare il suono di una voce specifica si usa \set Staff.midiInstrument.
\score { << % Accordi — suono di chitarra acustica \new ChordNames \with { \set Staff.midiInstrument = "acoustic guitar (nylon)" } { \accordiBrano } % Melodia — suono di flauto \new Staff \with { \set Staff.midiInstrument = "flute" } { \melodiaBrano } >> \midi { \tempo 4 = 100 } }
08I 128 suoni General MIDI
Lo standard General MIDI definisce 128 programmi sonori, divisi in famiglie. Ecco i più usati nella musica liturgica e corale:
| Nome LilyPond | Famiglia | Suono tipico |
|---|---|---|
"acoustic grand" | Pianoforti | Pianoforte a coda (default) |
"electric grand" | Pianoforti | Pianoforte elettrico a coda |
"church organ" | Organi | Organo da chiesa |
"reed organ" | Organi | Organo a canne/armonium |
"choir aahs" | Coro | Coro su vocale "ah" |
"voice oohs" | Coro | Coro su vocale "oh" |
"flute" | Fiati | Flauto traverso |
"violin" | Archi | Violino |
"string ensemble 1" | Archi | Orchestra d'archi |
"acoustic guitar (nylon)" | Chitarre | Chitarra classica |
"acoustic bass" | Bassi | Contrabbasso acustico |
"trumpet" | Ottoni | Tromba |
09Strategia: un MIDI per brano, non per tutto il canzoniere
Quando il canzoniere cresce (10, 20, 30 brani), generare un file MIDI per ogni brano ad ogni compilazione ingombra la cartella e rallenta il lavoro. La strategia consigliata è:
pagina.lyinclude tutti i brani → genera il PDF completomidi.lyinclude un solo brano alla volta → genera il MIDI solo del brano che stai controllando
Quando hai finito di controllare un brano, commenti il suo \include in midi.ly e decommentì il prossimo.
\version "2.26.0" % Decommentare SOLO il brano da controllare: \include "../pezzi/01_canzone.ly" % ← attivo % \include "../pezzi/02_canzone.ly" ← commentato % \include "../pezzi/03_canzone.ly" ← commentato \score { << \new ChordNames \with { \set Staff.midiInstrument = "church organ" } { \accordiBrano } \new Staff \with { \set Staff.midiInstrument = "choir aahs" } { \melodiaBrano } >> \midi { \tempo 4 = \bpm } }
genera/ contiene sempre
un solo file MIDI — quello del brano attualmente sotto controllo.
Una volta che il brano è completato e corretto, non serve più il MIDI.
10Struttura aggiornata del progetto
Rispetto alla Lezione 2, l'unica aggiunta è il file midi.ly nella cartella genera/ e la variabile bpm nei file dei brani.
11Esempio completo
Ecco tutti i file aggiornati che mettono in pratica questa lezione.
pezzi/01_canzone.ly — aggiornato con bpm
% ── Metadati ───────────────────────────────────── hdrTitolo = "La mia canzone" hdrCompositore = "Autore" % ── Tempo (usato dal file midi.ly) ─────────────── bpm = 100 % ← cambia qui per rallentare/accelerare il MIDI % ── Musica ─────────────────────────────────────── globalBrano = { \key f \major \time 4/4 } melodiaBrano = \relative c' { \globalBrano f4 g a bes | c2 a2 | bes4 a g f | g2 f2 \bar "|." } accordiBrano = \chordmode { f1 | f1 | c1 | f1 } versiBrano = \lyricmode { Que -- sta è la mia can -- zon -- ci -- na, sem -- pli -- ce e bel -- li -- na. } mieInterruzioni = { s1 s1 \break s1 s1 }
genera/pagina.ly — solo PDF
\version "2.26.0" \include "../include/impostazioni.ly" \include "../pezzi/01_canzone.ly" \score { << \new ChordNames { \accordiBrano } \new Staff { \new Voice = "mel" { \melodiaBrano } } \new Lyrics \lyricsto "mel" { \versiBrano } \mieInterruzioni >> \header { title = \hdrTitolo composer = \hdrCompositore } \layout { } % Nessun \midi qui! }
genera/midi.ly — solo MIDI
\version "2.26.0" % Includi SOLO il brano che stai controllando: \include "../pezzi/01_canzone.ly" % \include "../pezzi/02_canzone.ly" ← commentato \score { << % Accordi: organo da chiesa \new ChordNames \with { \set Staff.midiInstrument = "church organ" } { \accordiBrano } % Melodia: coro \new Staff \with { \set Staff.midiInstrument = "choir aahs" } { \melodiaBrano } >> % Usa la variabile bpm definita nel file del brano \midi { \tempo 4 = \bpm } % Nessun \layout qui! }
bookTitleMarkup personalizzato con \markup.
bookTitleMarkup
Intestazione personalizzata con \markup e diagrammi accordi
01L'intestazione di default e i suoi limiti
LilyPond genera automaticamente l'intestazione a partire dai campi di \header: title, subtitle, composer, poet, meter, arranger ecc., disposti secondo un layout predefinito non modificabile senza sovrascrivere la funzione responsabile.
Se vuoi:
- Un'area centrale per i diagrammi degli accordi (ukulele, chitarra)
- Modificare dimensione e stile di titolo e sottotitolo
- Aggiungere una linea separatrice tra titolo e rigo musicale
- Distribuire gli elementi in tre colonne allineate dal basso
…devi sovrascrivere la funzione bookTitleMarkup nel blocco \paper.
02La funzione bookTitleMarkup
bookTitleMarkup è una variabile speciale del blocco \paper che controlla l'aspetto dell'intestazione. Sovrascrivendola si ha il controllo totale sulla disposizione degli elementi.
\paper { bookTitleMarkup = \markup { % tutto il markup dell'intestazione va qui } }
03Aggiungere campi personalizzati all'header
LilyPond permette di aggiungere campi personalizzati all'\header oltre a quelli predefiniti. Basta assegnare un nome qualsiasi:
\header { title = "La mia canzone" subtitle = "versione per ukulele" composer = "Autore" poet = "Paroliere" meter = "♩ = 100" arranger = "Arr. da qualcuno" % Campo PERSONALIZZATO — non esiste di default diagrammiAccordi = \griffbilderBrano }
bookTitleMarkup con \fromproperty.04Leggere i campi con \fromproperty
Dentro bookTitleMarkup, per leggere il valore di un campo dell'header si usa \fromproperty #'header:nomecampo:
bookTitleMarkup = \markup { \column { \fromproperty #'header:title \fromproperty #'header:subtitle \fromproperty #'header:composer \fromproperty #'header:poet \fromproperty #'header:meter \fromproperty #'header:arranger % campo personalizzato: \fromproperty #'header:diagrammiAccordi } }
bookTitleMarkup = \markup { \column { \bold \fontsize #4 \with-color #blue \fromproperty #'header:title \italic \fontsize #2 \fromproperty #'header:subtitle } }
05Struttura a tre colonne con \fill-line
\fill-line prende una lista di elementi e li distribuisce uniformemente da sinistra a destra. Con tre elementi si ottengono tre zone: sinistra, centro, destra.
poeta / metro
diagrammi accordi
compositore / arranger
bookTitleMarkup = \markup { \column { \fill-line { \bold \fontsize #4 \fromproperty #'header:title } \fill-line { \italic \fontsize #2 \fromproperty #'header:subtitle } \fill-line { \fromproperty #'header:poet % ← sinistra \fromproperty #'header:diagrammiAccordi % ← centro \fromproperty #'header:composer % ← destra } } }
06Colonne con \column e \right-column
Dentro ogni zona di \fill-line puoi inserire più righe usando \column (allineato a sinistra) o \right-column (allineato a destra).
\fill-line { \column { % sinistra \fromproperty #'header:poet \fromproperty #'header:meter } \column { % centro \fromproperty #'header:diagrammiAccordi } \right-column { % destra, allineato a destra \fromproperty #'header:composer \fromproperty #'header:arranger } }
| Comando | Allineamento | Uso tipico |
|---|---|---|
\column | Sinistra | Poeta, metro — colonna sx |
\right-column | Destra | Compositore, arranger — colonna dx |
\center-column | Centro | Diagrammi, titolo |
07Allineare dal basso con \dir-column
Di default le tre colonne si allineano con il bordo superiore. Per allineare tutto al bordo inferiore (più elegante quando la colonna centrale è più alta) si usa \dir-column con un override della direzione:
\fill-line { \dir-column { \override #'(direction . 1) % 1 = dal basso; -1 = dall'alto (default) \line { \fromproperty #'header:poet } \line { \fromproperty #'header:meter } } \dir-column { \override #'(direction . 1) \line { \fromproperty #'header:diagrammiAccordi } } \dir-column { \override #'(direction . 1) \line { \right-align \fromproperty #'header:composer } \line { \right-align \fromproperty #'header:arranger } } }
08Aggiungere spazio con \vspace
\vspace #n inserisce uno spazio verticale (positivo = verso il basso, negativo = riduzione spazio). Utile per creare respiro tra gli elementi e avvicinare le colonne al pentagramma.
bookTitleMarkup = \markup { \column { \vspace #0.5 % spazio sopra il titolo \fill-line { \bold \fontsize #4 \fromproperty #'header:title } \vspace #0.3 % tra titolo e sottotitolo \fill-line { \italic \fontsize #1 \fromproperty #'header:subtitle } \vspace #0.5 % prima della linea separatrice % ... \vspace #-0.5 % avvicina le colonne al pentagramma } }
09Linea separatrice con \draw-hline
\draw-hline disegna una linea orizzontale per tutta la larghezza disponibile — perfetta come separatore visivo tra il titolo e l'area dei diagrammi.
bookTitleMarkup = \markup { \column { \fill-line { \bold \fontsize #4 \fromproperty #'header:title } \fill-line { \italic \fontsize #1 \fromproperty #'header:subtitle } \vspace #0.5 \draw-hline % ← linea separatrice \vspace #0.3 \fill-line { % ... colonne ... } } }
\draw-line #'(30 . 0) dove 30 è la lunghezza in unità tipografiche.10Inserire un diagramma di accordi
LilyPond include un sistema per disegnare diagrammi della tastiera direttamente nel markup con \fret-diagram.
% Definisci i diagrammi come variabile markup nel file del brano: griffbilderBrano = \markup { \fret-diagram "w:4;h:4;f:1;1-o;2-o;3-o;4-o;" % C \hspace #1 \fret-diagram "w:4;h:4;f:1;1-2-3;2-1-2;3-o;4-2-1;" % G } % Poi nell'header: \header { title = "La mia canzone" diagrammiAccordi = \griffbilderBrano }
| Parametro | Significato | Esempio |
|---|---|---|
w:N | Numero di corde | w:4 = ukulele |
h:N | Tasti visualizzati | h:4 = 4 tasti |
f:N | Primo tasto visualizzato | f:1 = dal 1° |
C-T | Corda C al tasto T | 1-2-2 |
C-o | Corda aperta | 1-o |
C-x | Corda muta | 6-x |
11Esempio completo — bookTitleMarkup finale
include/impostazioni.ly
\paper { top-margin = 10\mm bottom-margin = 12\mm left-margin = 15\mm right-margin = 15\mm bookTitleMarkup = \markup { \column { \vspace #0.5 \fill-line { \bold \fontsize #4 \with-color #blue \fromproperty #'header:title } \fill-line { \italic \fontsize #2 \fromproperty #'header:subtitle } \vspace #0.5 \draw-hline \vspace #0.2 \fill-line { \dir-column { \override #'(direction . 1) \line { \fontsize #-1 \fromproperty #'header:poet } \line { \fontsize #-1 \fromproperty #'header:meter } } \dir-column { \override #'(direction . 1) \line { \fromproperty #'header:diagrammiAccordi } } \dir-column { \override #'(direction . 1) \line { \right-align \fontsize #-1 \fromproperty #'header:composer } \line { \right-align \fontsize #-1 \fromproperty #'header:arranger } } } \vspace #-0.5 } } }
pezzi/01_canzone.ly — con diagrammi
griffbilderBrano = \markup { \fret-diagram "w:4;h:4;f:1;1-o;2-o;3-o;4-o;" \hspace #1 \fret-diagram "w:4;h:4;f:1;1-2-3;2-1-2;3-o;4-2-1;" \hspace #1 \fret-diagram "w:4;h:4;f:1;1-o;2-o;3-2-1;4-2-2;" } hdrTitolo = "La mia canzone" hdrSottotitolo = "per ukulele" hdrCompositore = "Autore" hdrPoeta = "Paroliere" hdrMetro = "♩ = 100" melodiaBrano = \relative c' { \key c \major \time 4/4 c4 d e f | g2 e2 | f4 e d c | c1 \bar "|." } versiBrano = \lyricmode { Do Re Mi Fa Sol -- Sol Mi -- Fa Mi Re Do Do. } accordiBrano = \chordmode { c1 c1 f1 c1 } \score { << \new ChordNames { \accordiBrano } \new Staff { \new Voice = "mel" { \melodiaBrano } } \new Lyrics \lyricsto "mel" { \versiBrano } >> \header { title = \hdrTitolo subtitle = \hdrSottotitolo composer = \hdrCompositore poet = \hdrPoeta meter = \hdrMetro diagrammiAccordi = \griffbilderBrano } \layout { } }
define-markup-command) per generare i diagrammi in modo più compatto, aggiungere etichette con il nome dell'accordo sotto ogni diagramma, e riutilizzare la stessa funzione per chitarra e ukulele.define-markup-command
Comandi markup personalizzati e diagrammi riutilizzabili
01Il problema: diagrammi ripetitivi e difficili da mantenere
Nella Lezione 4 abbiamo visto come inserire un diagramma di accordi nell'intestazione usando \fret-diagram direttamente nel markup. Questo approccio funziona, ma ha un problema: se vuoi cambiare le dimensioni o aggiungere un'etichetta a tutti i diagrammi, devi modificarli uno per uno.
La soluzione è creare un comando markup personalizzato — una funzione riutilizzabile che genera il diagramma completo (con tutte le impostazioni di stile) a partire da un singolo parametro: la stringa di diteggiatura.
% Ogni accordo richiede molte righe ripetitive: griffbilderBrano = \markup { \override #'(fret-diagram-details . ((size . 1.3))) \center-column { \fret-diagram "w:4;h:4;f:1;1-o;2-o;3-o;4-o;" \concat { "C" } } \hspace #2 \override #'(fret-diagram-details . ((size . 1.3))) % ← da ripetere per ogni accordo! \center-column { \fret-diagram "w:4;h:4;f:1;1-2-3;2-1-2;3-o;4-2-1;" \concat { "G" } } }
% Molto più compatto — il comando fa tutto: griffbilderBrano = \markup { \accordoUke "1-o;2-o;3-o;4-o;" "C" \hspace #2 \accordoUke "1-2-3;2-1-2;3-o;4-2-1;" "G" }
02Il file definizioni.ly — un modulo separato
I comandi markup personalizzati si definiscono una volta sola in un file separato include/definizioni.ly, che viene incluso dal file master. In questo modo il comando è disponibile per tutti i brani del canzoniere.
% include/definizioni.ly % Contiene: comandi markup personalizzati riutilizzabili % NON ripetere \version qui % Comando per diagrammi ukulele: #(define-markup-command ... ) % Comando per diagrammi chitarra: #(define-markup-command ... )
\version "2.26.0" \include "../include/definizioni.ly" % ← aggiunto \include "../include/impostazioni.ly" \include "../pezzi/01_canzone.ly"
definizioni.ly deve venire prima di impostazioni.ly e dei brani, perché questi ultimi potrebbero usare i comandi definiti nel file delle definizioni.03Struttura del progetto aggiornata
04Il modello base di un diagramma
Prima di creare il comando personalizzato, costruiamo il modello del diagramma completo che la funzione dovrà generare. Lo usiamo come "bozza" da cui partire.
\markup { \center-column { % Dimensione aumentata a 1.3 (default è 1.0) \override #'(fret-diagram-details . ((size . 1.3))) \fret-diagram "w:4;h:4;f:1;1-o;2-o;3-o;4-o;" % Etichetta sotto: nome dell'accordo \concat { \super "" "C" } } }
Questo modello genera un diagramma di ukulele in Do maggiore con l'etichetta "C" sotto. Ora trasformiamo questo in una funzione parametrizzata.
05Ridimensionare il diagramma con \override
La dimensione dei diagrammi si controlla con il parametro size dentro fret-diagram-details:
% Dentro il markup del diagramma: \override #'(fret-diagram-details . ((size . 1.3))) \fret-diagram "w:4;h:4;f:1;..." % Valori tipici per size: % 0.8 → piccolo (per spazi ridotti) % 1.0 → default % 1.3 → medio-grande (consigliato per intestazioni) % 1.8 → grande
\override si applica solo all'elemento immediatamente successivo se usato con \once, oppure a tutti gli elementi seguenti nella stessa colonna se usato senza. Dentro \center-column vale per tutta la colonna.06Aggiungere l'etichetta del nome accordo
Il nome dell'accordo appare sotto il diagramma, nella stessa \center-column. Per le estensioni (7, maj7, m ecc.) si usa \super per il testo in apice:
% Accordo semplice: "C" \concat { "C" } % Accordo con settima: "C7" (il 7 in apice) \concat { "C" \super "7" } % Accordo minore con settima: "Cm7" \concat { "C" \super "m7" } % Accordo di nona: "G9" \concat { "G" \super "9" }
07Unire diagramma ed etichetta con \concat
Senza \concat, il diagramma e l'etichetta si trovano in due righe separate dentro la colonna. Con \concat rimangono uniti visivamente:
\center-column { % 1. Il diagramma (con dimensione aumentata) \override #'(fret-diagram-details . ((size . 1.3))) \fret-diagram "w:4;h:4;f:1;1-o;2-o;3-o;4-o;" % 2. Spazio tra diagramma ed etichetta \vspace #0.4 % 3. Etichetta: tasto base + eventuale estensione in apice \concat { "C" \super "7" } }
08Creare un comando markup personalizzato
define-markup-command è una funzione Scheme (il linguaggio di scripting
integrato in LilyPond) che crea un nuovo comando utilizzabile nel markup.
Non è necessario conoscere Scheme in dettaglio: basta copiare la struttura base
e adattarla.
I passaggi sono:
- Scegliere un nome per il comando (es.
accordoUke) - Definire i parametri che accetta (es. la stringa di diteggiatura e il nome dell'accordo)
- Specificare i tipi di dati dei parametri (
string?per le stringhe) - Scrivere il corpo del comando — cioè il markup che viene generato
09Sintassi di define-markup-command
% Struttura generale: #(define-markup-command (nomeComando layout props arg1 arg2) (tipo1? tipo2?) % tipi dei parametri ; corpo del comando in markup LilyPond: (interpret-markup layout props (markup ; ... qui va il markup che il comando genera ... )))
% In include/definizioni.ly: #(define-markup-command (accordoUke layout props diteggiatura nomeAccordo) (string? markup?) % diteggiatura = stringa, nomeAccordo = markup (interpret-markup layout props (markup \center-column { \override #'(fret-diagram-details . ((size . 1.3))) \fret-diagram #(string-append "w:4;h:4;f:1;" diteggiatura) \vspace #0.4 nomeAccordo })))
layoutepropssono obbligatori ma non li usiamo direttamente — vanno semplicemente dichiaratistring?indica che il parametro è una stringa (tra virgolette)markup?indica che il parametro è un elemento markupstring-appendconcatena stringhe Scheme: qui aggiunge il prefisso fisso"w:4;h:4;f:1;"alla diteggiatura passata
10Usare il comando personalizzato nel brano
Una volta definito in definizioni.ly e incluso nel file master, il comando \accordoUke è disponibile in tutti i brani. Si usa direttamente nel markup:
% In pezzi/01_canzone.ly: griffbilderBrano = \markup { % Accordo Do maggiore \accordoUke "1-o;2-o;3-o;4-o;" \markup { "C" } \hspace #2 % Accordo Fa maggiore \accordoUke "1-2-1;2-o;3-1-2;4-o;" \markup { "F" } \hspace #2 % Accordo Sol settima \accordoUke "1-2-3;2-1-2;3-o;4-2-1;" \markup { \concat { "G" \super "7" } } }
\markup { ... } come secondo argomento puoi usare qualsiasi elemento markup — testo semplice, testo con apice, colori, grassetto ecc.11Accordi con estensioni (7a, 9a ecc.)
Gli accordi con estensioni come 7, maj7, m, 9 si gestiscono facilmente con il secondo parametro del comando:
% Accordo maggiore semplice \accordoUke "1-o;2-o;3-o;4-o;" \markup { "C" } % Accordo di settima \accordoUke "1-o;2-o;3-2-1;4-o;" \markup { \concat { "C" \super "7" } } % Accordo minore \accordoUke "1-o;2-o;3-2-1;4-2-2;" \markup { \concat { "A" \super "m" } } % Accordo di nona \accordoUke "1-o;2-2-1;3-o;4-2-2;" \markup { \concat { "G" \super "9" } }
12Diagrammi per chitarra
Con la stessa tecnica si crea un comando separato per la chitarra — la differenza principale è il prefisso della stringa: "w:6;h:4;f:1;" invece di "w:4;h:4;f:1;".
#(define-markup-command (accordoChitarra layout props diteggiatura nomeAccordo)
(string? markup?)
(interpret-markup layout props
(markup
\center-column {
\override #'(fret-diagram-details . ((size . 1.2)))
\fret-diagram #(string-append "w:6;h:4;f:1;" diteggiatura)
\vspace #0.4
nomeAccordo
})))% Do maggiore chitarra (apertura) \accordoChitarra "1-o;2-1-1;3-o;4-2-2;5-3-3;6-x;" \markup { "C" } % Sol maggiore chitarra \accordoChitarra "1-3-3;2-3-4;3-o;4-o;5-2-2;6-3-1;" \markup { "G" }
C-x per le corde che non si suonano.13Esempio completo
include/definizioni.ly
% ════════════════════════════════════════════════════ % DEFINIZIONI — comandi markup personalizzati % Includere PRIMA di impostazioni.ly e dei brani % ════════════════════════════════════════════════════ % ── Diagramma ukulele (4 corde) ─────────────────── #(define-markup-command (accordoUke layout props diteggiatura nomeAccordo) (string? markup?) (interpret-markup layout props (markup \center-column { \override #'(fret-diagram-details . ((size . 1.3))) \fret-diagram #(string-append "w:4;h:4;f:1;" diteggiatura) \vspace #0.4 nomeAccordo }))) % ── Diagramma chitarra (6 corde) ────────────────── #(define-markup-command (accordoChitarra layout props diteggiatura nomeAccordo) (string? markup?) (interpret-markup layout props (markup \center-column { \override #'(fret-diagram-details . ((size . 1.2))) \fret-diagram #(string-append "w:6;h:4;f:1;" diteggiatura) \vspace #0.4 nomeAccordo })))
pezzi/01_canzone.ly — uso dei comandi
% ── Diagrammi accordi (ukulele) ─────────────────── griffbilderBrano = \markup { \accordoUke "1-o;2-o;3-o;4-o;" \markup { "C" } \hspace #2 \accordoUke "1-2-1;2-o;3-1-2;4-o;" \markup { "F" } \hspace #2 \accordoUke "1-2-3;2-1-2;3-o;4-2-1;" \markup { \concat { "G" \super "7" } } } % ── Metadati ────────────────────────────────────── hdrTitolo = "La mia canzone" hdrSottotitolo = "per ukulele" hdrCompositore = "Autore" hdrPoeta = "Paroliere" hdrMetro = "♩ = 100" bpm = 100 % ── Musica ──────────────────────────────────────── melodiaBrano = \relative c' { \key c \major \time 4/4 c4 d e f | g2 e2 | f4 e d c | c1 \bar "|." } versiBrano = \lyricmode { Do Re Mi Fa Sol -- Sol Mi -- Fa Mi Re Do Do. } accordiBrano = \chordmode { c1 c1 f1 c1 } \score { << \new ChordNames { \accordiBrano } \new Staff { \new Voice = "mel" { \melodiaBrano } } \new Lyrics \lyricsto "mel" { \versiBrano } >> \header { title = \hdrTitolo subtitle = \hdrSottotitolo composer = \hdrCompositore poet = \hdrPoeta meter = \hdrMetro diagrammiAccordi = \griffbilderBrano } \layout { } }