◈ INDICE
01Le basi
02Progetto multi-file
03Output multipli
04bookTitleMarkup
05define-markup-command
Manualetto Pratico · 5 Lezioni

LilyPond

Notazione musicale professionale e gratuita

Indice dei contenuti

LEZIONE 01

Le basi

Notazione musicale professionale e gratuita

Flusso di compilazione: .ly → PDF + MIDI
file.ly testo LilyPond compilatore + Frescobaldi PDF MIDI

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:

StrumentoScopoNote
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
💡 Consiglio: tieni sempre aperta la documentazione ufficiale di LilyPond in una scheda del browser mentre scrivi. Le sezioni più utili sono Notation Reference (per i simboli musicali) e Internals Reference (per personalizzare incisori e oggetti grafici).
Struttura di un file LilyPond .ly
mio_brano.ly ersion "2.26.0" \header { title... } melodia = elative c'{} \score { ew Staff { \melodia } \layout{} \midi{} } → PDF → MIDI

02Struttura di un file .ly

Ogni file LilyPond è composto da tre blocchi principali, nell'ordine:

struttura-base.ly
% 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
}
📌 Importante: i commenti in LilyPond iniziano con % (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.

versione
\version "2.26.0"
📌 Regola: non saltare mai questa riga. In Frescobaldi puoi inserirla automaticamente dal menu Strumenti → Inserisci versione LilyPond.

04Il blocco \header

L'intestazione contiene i metadati del pezzo: titolo, sottotitolo, compositore, paroliere, e così via. Appaiono automaticamente in cima alla partitura.

header
\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.

LilyPond produce partiture di qualità tipografica professionale
LilyPond produce partiture di qualità tipografica professionale

05Il blocco \score

Il blocco \score è il cuore del file: contiene la musica e specifica i tipi di output desiderati.

score
\score {
  \new Staff {
    c' d' e' f'   % quattro note da un quarto
  }
  \layout { }   % genera il PDF
  \midi   { }   % genera il file MIDI
}
💡 Buona pratica: invece di scrivere le note direttamente dentro \score, definisci le note in una variabile separata e richiamala. Questo separa la musica dal layout e rende il file molto più leggibile.
variabili (pratica consigliata)
% 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   { }
}
Note sul pentagramma e corrispondenza LilyPond
𝄞 c' d' e' f' g' a' b'

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 LilyPondNota italianaAltezza
cDoDo centrale (ottava 4)
dRe
eMi
fFa
gSol
aLa
bSi
cisDo diesisis = diesis
besSi bemollees = bemolle

Per specificare l'ottava in modo assoluto si aggiunge un apostrofo ' per salire di un'ottava o una virgola , per scendere:

ottave assolute
c     % Do sotto il rigo (ottava 3)
c'    % Do centrale (ottava 4)
c''   % Do sopra il rigo (ottava 5)
c,    % Do grave (ottava 2)
Modalità relativa: ogni nota scelta nell'ottava più vicina alla precedente
Modalità relativa: ogni nota scelta nell'ottava più vicina alla precedente 𝄞 c' d' e' f' g' Le frecce rosse indicano la relazione tra note consecutive — nessun apostrofo necessario

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.

modalità relativa
\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
}
📌 Regola dei salti: se la nota successiva è più di una quarta lontana dalla precedente, aggiungi ' (per salire) o , (per scendere) tante volte quante ottave si supera.
salti di ottava
\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''
}
Durate delle note in LilyPond
1 intera 2 minima 4 semiminima 8 croma 16 semicroma 4. puntata

08Durate delle note

La durata si specifica con un numero dopo la lettera della nota. Se la durata non cambia, non è necessario riscriverla.

SimboloDurataItaliana
1interasemibreve
2metàminima
4quartosemiminima
8ottavocroma
16sedicesimosemicroma
4.quarto puntatosemiminima puntata
2~2legatura di valoreminima legata a minima
durate
\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
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
ChiaveSimbolo LilyPond
Sol (violino)treble
Basso (fa)bass
Contralto (do)alto
Tenore (do)tenor
Sol 8va bassatreble_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.

testo
% 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 { }
}
SimboloSignificato
--Trattino tra sillabe della stessa parola
spazioParola nuova
_Melisma: la nota è continuazione della sillaba precedente
\skip 4Salta una nota (nessuna sillaba)

11Simboli degli accordi

LilyPond può generare automaticamente i nomi degli accordi sopra il pentagramma. Si usa la modalità \chordmode.

accordi
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 { }
}
SuffissoTipo di accordo
(nessuno)Maggiore
:mMinore
:7Settima di dominante
:maj7Settima maggiore
:dimDiminuito
:sus4Sospeso quarta

12Interruzioni di riga e layout

È buona pratica separare le interruzioni di riga dalla musica vera e propria, definendole in una variabile dedicata.

interruzioni di riga
% 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
}
💡 Perché separare? Se cambi le note non devi rifare i break, e viceversa. Mantiene il codice molto più pulito, specialmente in partiture lunghe.

13Tempo MIDI e stanghetta finale

Nel blocco \midi si può specificare il tempo in BPM. La stanghetta finale si aggiunge con \bar "|.".

midi e stanghetta
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
}
StanghettaSimbolo 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.

esempio-completo.ly
\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 }
}
💡 Prossimi passi: nella Lezione 2 vedremo come creare partiture a più voci (ChoirStaff, PianoStaff), aggiungere dinamiche e articolazioni, e personalizzare l'aspetto grafico con \paper e \layout.
LEZIONE 02

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.

TipoCartellaContenuto
Outputgenera/File master: \paper, \layout e richiami ai brani
Definizioniinclude/Impostazioni globali riutilizzabili: stili, macro, funzioni comuni
Branipezzi/Un file per ogni canzone: note, testi, accordi
💡 Il vantaggio principale: se devi cambiare font o margini di tutto il canzoniere, modifichi un solo file nella cartella genera/. Le note dei brani rimangono intatte.
Struttura cartelle del progetto canzoniere
canzoniere/ genera/ pagina.ly midi.ly include/ definizioni.ly impostazioni.ly pezzi/ → PDF + MIDI → stili globali → un file / brano

02Struttura delle cartelle consigliata

canzoniere/ │ ├── genera/ ← file master di output │ └── canzoniere.ly ← compila questo per stampare tutto │ ├── include/ ← definizioni globali │ └── impostazioni.ly ← \paper, \layout, macro comuni │ └── pezzi/ ← un file per ogni brano ├── 01_canzone.ly ├── 02_canzone.ly └── _modello.ly ← template per nuove canzoni
📌 Nota: puoi adattare questa struttura. L'importante è che ogni file abbia un compito preciso e che i percorsi negli \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.

include
% Percorso relativo alla posizione del file corrente
\include "../include/impostazioni.ly"
\include "../pezzi/01_canzone.ly"

% ./ = cartella corrente   ../ = cartella superiore
💡 Frescobaldi: quando digiti \include " Frescobaldi apre un menu di completamento con i file disponibili. Usa Tab per completare il percorso.
SimboloSignificato 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.

genera/canzoniere.ly
\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"
📌 Importante: scrivi \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.

include/impostazioni.ly
% 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).

pezzi/01_canzone.ly
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.

canzoniere con più brani
\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"
💡 Ordine flessibile: vuoi cambiare l'ordine? Sposta le righe \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.

❌ modo sbagliato
% ❌ Header fuori dallo score = titolo del documento intero
\header { title = "La mia canzone" }

\score {
  \new Staff { c' d' e' f' }
  \layout { }
}
📌 Regola: in LilyPond esistono due livelli di \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.

✅ modo corretto
% 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 \headerDescrizionePosizione tipica
titleTitolo principaleGrande, centrato in cima
subtitleSottotitoloSotto il titolo
composerCompositoreIn alto a destra
poetParoliereIn alto a sinistra
instrumentOrganicoSotto il titolo
pieceNome del movimentoSopra il primo sistema
taglineRiga finale LilyPondFondo 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.

pezzi/_modello.ly
% ══════════════════════════════════════════════════
% 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

1
Copia il modelloDuplica pezzi/_modello.ly e rinominalo (es. pezzi/03_nuova_canzone.ly).
2
Compila il contenutoAggiorna i metadati (hdrTitolo, hdrCompositore ecc.), poi scrivi note, testo e accordi nelle rispettive variabili.
3
Testa il singolo branoCompila solo 03_nuova_canzone.ly in Frescobaldi per verificare che non ci siano errori.
4
Aggiungi al canzoniereApri genera/canzoniere.ly e aggiungi \include "../pezzi/03_nuova_canzone.ly" nella posizione desiderata.
⚠️ Attenzione ai nomi delle variabili: se due brani usano la stessa variabile (es. entrambi definiscono melodia), il secondo sovrascrive il primo. Usa sempre nomi univoci per brano: melodia01, melodia02 ecc.

12Esempio completo — canzoniere con due brani

include/impostazioni.ly

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

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

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

genera/canzoniere.ly
\version "2.26.0"

\include "../include/impostazioni.ly"

\include "../pezzi/01_fratello_sole.ly"

\pageBreak

\include "../pezzi/02_sorella_luna.ly"
💡 Prossimi passi — Lezione 3: vedremo come personalizzare l'aspetto grafico: font, spaziatura tra i sistemi, intestazioni di pagina con oddHeaderMarkup e evenHeaderMarkup, e partiture a più voci (ChoirStaff, PianoStaff).
LEZIONE 03

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, titolo
  • include/impostazioni.ly — contiene le impostazioni grafiche globali
  • genera/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
❌ output misti nello stesso score
\score {
  \new Staff { \melodia }
  \layout { }   % → genera PDF
  \midi   { }   % → genera MIDI (sempre, anche se non serve)
}
Flusso di compilazione: .ly → PDF + MIDI
file.ly testo LilyPond compilatore + Frescobaldi PDF MIDI

03La soluzione: due file di output separati

Si creano due file distinti nella cartella genera/:

FileContieneProduce
pagina.ly\layout senza \midiPDF con la partitura
midi.ly\midi senza \layoutFile audio .mid

Entrambi includono lo stesso file del brano (01_canzone.ly), ma lo trattano in modo diverso.

💡 Vantaggio: puoi compilare solo 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.

genera/pagina.ly
\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.

RIMUOVERE dal MIDI
elementi solo grafici
% Non servono nel MIDI:
\header { ... }
\new Lyrics ...
\mieInterruzioni
\layout { }
TENERE nel MIDI
elementi musicali
% Necessari per il MIDI:
\new ChordNames ...
\new Staff { \melodiaBrano }
\midi { ... }
genera/midi.ly
\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
}
📌 Nota: il blocco \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.

tempo fisso
❌ hardcoded
\midi {
  \tempo 4 = 120
}
tempo variabile
✅ variabile
% 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.

💡 Variabili per il tempo: puoi anche definire varianti — 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.

strumenti MIDI per voce
\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 }
}
📌 Dove trovare i nomi degli strumenti: nella documentazione ufficiale di LilyPond, sezione Notation Reference → A.6 MIDI instruments. I nomi seguono lo standard General MIDI (128 programmi).

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 LilyPondFamigliaSuono tipico
"acoustic grand"PianofortiPianoforte a coda (default)
"electric grand"PianofortiPianoforte elettrico a coda
"church organ"OrganiOrgano da chiesa
"reed organ"OrganiOrgano a canne/armonium
"choir aahs"CoroCoro su vocale "ah"
"voice oohs"CoroCoro su vocale "oh"
"flute"FiatiFlauto traverso
"violin"ArchiViolino
"string ensemble 1"ArchiOrchestra d'archi
"acoustic guitar (nylon)"ChitarreChitarra classica
"acoustic bass"BassiContrabbasso acustico
"trumpet"OttoniTromba
💡 Lista completa: vai su lilypond.org → Documentation → Notation Reference → A.6 per i 128 nomi esatti, oppure cerca "LilyPond MIDI instruments" online.

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.ly include tutti i brani → genera il PDF completo
  • midi.ly include 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.

genera/midi.ly — un brano per volta
\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 }
}
💡 Risultato: la cartella 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

canzoniere/ │ ├── genera/ │ ├── pagina.ly ← compila per il PDF completo │ └── midi.ly ← compila per controllare un brano │ ├── include/ │ └── impostazioni.ly ← \paper, \layout, stili grafici │ └── pezzi/ ├── _modello.ly ← template (include ora anche bpm) ├── 01_canzone.ly └── 02_canzone.ly

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

pezzi/01_canzone.ly
% ── 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

genera/pagina.ly
\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

genera/midi.ly
\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!
}
💡 Prossimi passi — Lezione 4: vedremo come personalizzare completamente l'intestazione della partitura: creare spazio tra titolo e primo rigo, inserire diagrammi di accordi (es. per ukulele o chitarra), e costruire un bookTitleMarkup personalizzato con \markup.
LEZIONE 04

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.

struttura base
\paper {
  bookTitleMarkup = \markup {
    % tutto il markup dell'intestazione va qui
  }
}
📌 Dove si trova: nella documentazione ufficiale, cerca bookTitleMarkup nella sezione Paper and layout. Trovi anche il codice sorgente del markup predefinito come punto di partenza.

03Aggiungere campi personalizzati all'header

LilyPond permette di aggiungere campi personalizzati all'\header oltre a quelli predefiniti. Basta assegnare un nome qualsiasi:

campi personalizzati in \header
\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
}
💡 Come funziona: LilyPond accetta qualsiasi nome come campo dell'header. Non viene visualizzato automaticamente, ma puoi richiamarlo nel tuo bookTitleMarkup con \fromproperty.

04Leggere i campi con \fromproperty

Dentro bookTitleMarkup, per leggere il valore di un campo dell'header si usa \fromproperty #'header:nomecampo:

\fromproperty — lettura campi header
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
  }
}
formattare i campi
bookTitleMarkup = \markup {
  \column {
    \bold \fontsize #4 \with-color #blue
      \fromproperty #'header:title
    \italic \fontsize #2
      \fromproperty #'header:subtitle
  }
}
Schema bookTitleMarkup con tre colonne allineate dal basso
TITOLO sottotitolo SINISTRA poet meter CENTRO diagrammiAccordi ret-diagram ... DESTRA composer arranger

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.

TITOLO (centrato)
SOTTOTITOLO (centrato)
SINISTRA
poeta / metro
CENTRO
diagrammi accordi
DESTRA
compositore / arranger
← schema tipico dell'intestazione personalizzata →
\fill-line con tre colonne
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).

colonne per più righe di testo
\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
  }
}
ComandoAllineamentoUso tipico
\columnSinistraPoeta, metro — colonna sx
\right-columnDestraCompositore, arranger — colonna dx
\center-columnCentroDiagrammi, 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:

\dir-column — allineamento dal basso
\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 }
  }
}
📌 Ordine in dir-column con direction 1: l'ultimo elemento è quello più vicino al pentagramma. Metti prima gli elementi che vuoi in cima, per ultimi quelli vicino al rigo.

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.

\vspace — spaziatura verticale
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.

\draw-hline — linea separatrice
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 ... }
  }
}
💡 Alternativa con lunghezza controllata: usa \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.

diagramma accordi ukulele
% 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
}
ParametroSignificatoEsempio
w:NNumero di cordew:4 = ukulele
h:NTasti visualizzatih:4 = 4 tasti
f:NPrimo tasto visualizzatof:1 = dal 1°
C-TCorda C al tasto T1-2-2
C-oCorda aperta1-o
C-xCorda muta6-x

11Esempio completo — bookTitleMarkup finale

include/impostazioni.ly

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

pezzi/01_canzone.ly
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 { }
}
💡 Prossimi passi — Lezione 5: vedremo come creare un comando markup personalizzato (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.
LEZIONE 05

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.

prima (verboso e difficile da mantenere)
% 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" }
  }
}
dopo (con comando personalizzato)
% 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 — struttura
% 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 ... )
genera/pagina.ly — include del nuovo file
\version "2.26.0"

\include "../include/definizioni.ly"    % ← aggiunto
\include "../include/impostazioni.ly"
\include "../pezzi/01_canzone.ly"
💡 Ordine degli include: 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

canzoniere/ │ ├── genera/ │ ├── pagina.ly ← aggiunto \include definizioni.ly │ └── midi.ly │ ├── include/ │ ├── definizioni.ly ← NUOVO: comandi markup personalizzati │ └── impostazioni.ly ← \paper, \layout, bookTitleMarkup │ └── pezzi/ ├── _modello.ly └── 01_canzone.ly ← usa \accordoUke direttamente

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.

modello diagramma completo
\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:

ridimensionamento diagramma
% 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
📌 Nota: l'\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:

etichetta con estensione 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" }
💡 \concat: unisce elementi markup senza spazi tra loro. Indispensabile per scrivere "C7" senza che il 7 finisca su una riga separata o con uno spazio indesiderato.

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:

struttura completa con \center-column
\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" }
}
Flusso del comando markup personalizzato ccordoUke
INPUT "1-o;2-o;3-o;" diteggiatura (string) \markup {"C"} nomeAccordo ccordoUke define-markup-command \center-column { ret-diagram nomeAccordo } OUTPUT C

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:

  1. Scegliere un nome per il comando (es. accordoUke)
  2. Definire i parametri che accetta (es. la stringa di diteggiatura e il nome dell'accordo)
  3. Specificare i tipi di dati dei parametri (string? per le stringhe)
  4. Scrivere il corpo del comando — cioè il markup che viene generato

09Sintassi di define-markup-command

sintassi base
% 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 ...
     )))
comando accordoUke — ukulele
% 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
       })))
📌 Note sulla sintassi:
  • layout e props sono obbligatori ma non li usiamo direttamente — vanno semplicemente dichiarati
  • string? indica che il parametro è una stringa (tra virgolette)
  • markup? indica che il parametro è un elemento markup
  • string-append concatena 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:

uso nel file del brano
% 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" } }
}
💡 Il secondo parametro è markup: passando \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:

esempi di accordi con estensioni
% 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;".

comando accordoChitarra
#(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
       })))
uso per chitarra
% 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" }
📌 Chitarra: 6 corde numerate dall'alto: la corda 1 è la più acuta (Mi alto), la corda 6 è la più grave (Mi basso). Usa C-x per le corde che non si suonano.

13Esempio completo

include/definizioni.ly

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

pezzi/01_canzone.ly
% ── 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 { }
}
💡 Riepilogo delle 5 lezioni: ora hai un sistema completo per gestire un canzoniere professionale con LilyPond: file separati per musica, layout e output; template riutilizzabili; MIDI separato con strumenti personalizzati; intestazioni grafiche a tre colonne; diagrammi di accordi automatici per ukulele e chitarra. Sei pronto per costruire il tuo canzoniere! 🎵