@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-

@ignore
    Translation of GIT committish: 6ca1d8c80817f9baaa7b66b2fde9a7b98b0ffc0a

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
    Guide, node Updating translation committishes..
@end ignore

@c \version "2.19.22"
@c Translators: Federico Bruni
@c Translation checkers:

@node Input e output
@chapter Input e output
@translationof General input and output

Questa sezione tratta le questioni generali relative all'input e
all'output di LilyPond, non specifiche di un certo tipo di notazione.

@menu
* Struttura dell'input::
* Titoli e intestazioni::
* Lavorare coi file di input::
* Controllo dell'output::
* Creazione dell'output MIDI::
* Estrazione dell'informazione musicale::
@end menu


@node Struttura dell'input
@section Struttura dell'input
@translationof Input structure

Il principale formato di input di LilyPond sono i file di testo.  Per
convenzione, questi file hanno estensione @file{.ly}.

@menu
* Struttura di una partitura::
* Molteplici partiture in un libro::
* Molteplici file di output da un unico file di input::
* Nomi dei file di output::
* Struttura del file::
@end menu


@node Struttura di una partitura
@subsection Struttura di una partitura
@translationof Structure of a score

@funindex \score

Un blocco @code{\score} deve contenere una singola espressione musicale
delimitata da parentesi graffe:

@example
\score @{
  @dots{}
@}
@end example

@warning{Ci deve essere @strong{solo una} espressione musicale più
esterna in un blocco @code{\score} e @strong{deve} essere racchiusa
tra parentesi graffe.}

Questa espressione musicale singola può essere di qualsiasi dimensione
e contenere altre espressioni musicali di qualsiasi complessità. Tutti
gli esempi seguenti sono espressioni musicali:

@example
@{ c'4 c' c' c' @}
@end example

@lilypond[verbatim,quote]
{
  { c'4 c' c' c' }
  { d'4 d' d' d' }
}
@end lilypond

@lilypond[verbatim,quote]
<<
  \new Staff { c'4 c' c' c' }
  \new Staff { d'4 d' d' d' }
>>
@end lilypond

@example
@{
  \new GrandStaff <<
    \new StaffGroup <<
      \new Staff @{ \flauto @}
      \new Staff @{ \oboe @}
    >>
    \new StaffGroup <<
      \new Staff @{ \violinoI @}
      \new Staff @{ \violinoII @}
    >>
  >>
@}
@end example

@funindex %
@funindex %@{ @dots{} %@}
@cindex commento
@cindex linea di commento
@cindex linea di commento, singola
@cindex blocco di commento
@cindex commento multirigo
I commenti sono un'eccezione a questa regola generale (altre eccezioni
sono spiegate in @ref{Struttura del file}).  Sia i commenti su una singola
riga che quelli multirigo delimitati da @code{%@{ @dots{} %@}} possono
essere inseriti ovunque nel file di input: dentro o fuori un blocco
@code{\score} e dentro o fuori la singola espressione musicale di
un blocco @code{\score}.

È bene ricordare che anche se un file contiene soltanto un blocco
@code{\score}, questo è implicitamente racchiuso in un blocco
\book.  Un blocco \book in un file sorgente produce almeno un file
di output e il nome predefinito del file di output deriva dal nome
del file di input, quindi @file{fandangoperelefanti.ly} genererà
@file{fandangoperelefanti.pdf}.

Maggiori dettagli sui blocchi @code{\book} si trovano in
@ref{Molteplici partiture in un libro},
@ref{Molteplici file di output da un unico file di input} e @ref{Struttura del file}.

@seealso
Manuale di apprendimento:
@rlearning{Lavorare sui file di input},
@rlearning{Espressioni musicali},
@rlearning{La partitura è una (singola) espressione musicale composta}.


@node Molteplici partiture in un libro
@subsection Molteplici partiture in un libro
@translationof Multiple scores in a book

@funindex \book
@cindex movimenti, molteplici

Un documento può contenere più brani di musica e testo, come, per
esempio, uno studio o una parte orchestrale con vari movimenti.
Ogni movimento si inserisce con un blocco @code{\score},

@example
\score @{
  @var{@dots{}musica@dots{}}
@}
@end example

e il testo si inserisce con un blocco @code{\markup},

@example
\markup @{
  @var{@dots{}testo@dots{}}
@}
@end example

@funindex \book

Tutti i movimenti e i testi che appaiono nello stesso file @file{.ly}
normalmente vengono elaborati in un singolo file di output.

@example
\score @{
  @var{@dots{}}
@}
\markup @{
  @var{@dots{}}
@}
\score @{
  @var{@dots{}}
@}
@end example

Un'importante eccezione è costituita dai documenti da elaborare con
lilypond-book, dove occorre aggiungere esplicitamente un blocco
@code{\book}, altrimenti apparirà nell'output solo il primo blocco
@code{\score} o @code{\markup}.

L'intestazione di ogni brano musicale può essere inserita nel blocco
@code{\score}.  Il nome definito nel campo @code{piece} (brano)
dell'intestazione apparirà all'inizio di ogni movimento.  Il titolo
dell'intero libro può trovarsi all'interno del blocco @code{\book}
oppure, se questo non è presente, nel blocco @code{\header} all'inizio
del file.

@example
\header @{
  title = "Otto miniature"
  composer = "Igor Stravinsky"
@}
\score @{
  @dots{}
  \header @{ piece = "Romanza" @}
@}
\markup @{
   @dots{}testo della seconda strofa@dots{}
@}
\markup @{
   @dots{}testo della terza strofa@dots{}
@}
\score @{
  @dots{}
  \header @{ piece = "Minuetto" @}
@}
@end example

@funindex \bookpart

I brani musicali possono essere raggruppati in parti di libro tramite
i blocchi @code{\bookpart}.  Le parti di libro sono separate da
un'interruzione di pagina e possono iniziare con un titolo, come il
libro stesso, specificandolo in un blocco @code{\header}.

@example
\bookpart @{
  \header @{
    title = "Titolo del libro"
    subtitle = "Prima parte"
  @}
  \score @{ @dots{} @}
  @dots{}
@}
\bookpart @{
  \header @{
    subtitle = "Seconda parte"
  @}
  \score @{ @dots{} @}
  @dots{}
@}
@end example

@node Molteplici file di output da un unico file di input
@subsection Molteplici file di output da un unico file di input
@translationof Multiple output files from one input file

Per generare molteplici file di output dallo stesso file @file{.ly},
basta aggiungere molteplici blocchi @code{\book}, ognuno dei
quali produrrà un file di output separato.
Se non è specificato alcun blocco @code{\book} nel file di
input, LilyPond tratterà implicitamente l'intero file come un
singolo blocco @code{\book}, come è spiegato in @ref{Struttura del file}.

Nel generare molteplici file da un singolo file sorgente, LilyPond
controlla che nessuno dei file di output di alcun blocco
@code{\book} sovrascriva il file di output prodotto da un blocco
@code{\book} precedente dello stesso file di input.

Per farlo, aggiunge un suffisso al nome del file di output di ogni
blocco @code{\book}, derivato dal nome del file di input (se viene
lasciata l'impostazione predefinita).

Il comportamento predefinito consiste quindi nell'appendere un suffisso
numerico a ogni nome che potrebbe entrare in conflitto, quindi

@example
\book @{
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
\book @{
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
\book @{
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
@end example

nel file sorgente @file{ottominiature.ly}
genererà

@itemize
@item
@file{ottominiature.pdf},
@item
@file{ottominiature-1.pdf} e
@item
@file{ottominiature-2.pdf}.
@end itemize

@node Nomi dei file di output
@subsection Nomi dei file di output
@translationof Output file names

@funindex \bookOutputSuffix
@funindex \bookOutputName

LilyPond permette di decidere quali nomi di file debbano essere
usati dai vari backend quando questi generano i file di output.

Nella sezione precedente abbiamo visto come LilyPond prevenga i
conflitti di nome quando genera molti file di output da un singolo
file sorgente.  È possibile anche specificare un proprio suffisso
per ogni blocco @code{\book}.  Quindi si possono, per esempio,
generare file chiamati @file{ottominiature-Romanza.pdf}, @file{ottominiature-Minuetto.pdf}
e @file{ottominiature-Notturno.pdf} aggiungendo una dichiarazione
@code{\bookOutputSuffix} all'interno di ogni blocco @code{\book}.

@example
\book @{
  \bookOutputSuffix "Romanza"
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
\book @{
  \bookOutputSuffix "Minuetto"
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
\book @{
  \bookOutputSuffix "Notturno"
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
@end example

È possibile anche specificare un diverso nome del file di output per
ciascun blocco @code{book}, tramite le dichiarazioni
@code{\bookOutputName}

@example
\book @{
  \bookOutputName "Romanza"
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
\book @{
  \bookOutputName "Minuetto"
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
\book @{
  \bookOutputName "Notturno"
  \score @{ @dots{} @}
  \paper @{ @dots{} @}
@}
@end example

Questo file produrrà i seguenti file di output:

@itemize
@item
@file{Romanza.pdf},
@item
@file{Minuetto.pdf} e
@item
@file{Notturno.pdf}.
@end itemize


@node Struttura del file
@subsection Struttura del file
@translationof File structure

@funindex \paper
@funindex \midi
@funindex \layout
@funindex \header
@funindex \score
@funindex \book
@funindex \bookpart

Un file @file{.ly} può contenere un qualsiasi numero di espressioni di
livello superiore (in inglese, @emph{toplevel expressions}). Per espressione di
livello superiore si intende una delle seguenti:

@itemize
@item
Una definizione di output, come @code{\paper}, @code{\midi} e
@code{\layout}.  Tale definizione, se posta nel livello superiore, cambia
le impostazioni predefinite al livello del libro. Se più di una di
queste definizioni viene inserita nel livello superiore, le definizioni
vengono combinate, ma in caso di conflitto hanno precedenza le definizioni
più recenti. Per sapere con precisione come ciò influisca sul blocco
@code{\layout}, leggere
@ref{Il blocco layout}.

@item
Un'espressione scheme diretta, come
@code{#(set-default-paper-size "a7" 'landscape)} o
@code{#(ly:set-option 'point-and-click #f)}.

@item
Un blocco @code{\header}.  Se all'inizio del file, imposta il blocco
dell'intestazione globale.  Questo è il blocco che contiene
le impostazioni predefinite dei campi dei titoli come compositore,
titolo, etc. per tutti i libri del file (vedi @ref{Come funzionano i titoli}).

@item
Un blocco @code{\score}.  Questa partitura e altre eventuali partiture
di livello superiore saranno combinate insieme in un singolo blocco
@code{\book}.  Tale comportamento può essere modificato impostando la
variabile @code{toplevel-score-handler} nel livello superiore.  Il
gestore (in inglese @emph{handler}) predefinito è definito nel file
@file{../scm/lily-library.scm} e viene impostato nel file
@file{../ly/declarations-init.ly}.

@item
Un blocco @code{\book} combina logicamente molteplici movimenti
(ovvero molteplici blocchi @code{\score}) in un documento.  Se ci
sono vari blocchi @code{\score}, verrà creato un file di output per
ogni blocco @code{\book}, in cui saranno concatenati tutti i
movimenti corrispondenti.  Ha senso specificare esplicitamente
i blocchi @code{\book} in un file @file{.ly} solo se si desidera
creare vari file di output da un solo file di input.  Un'eccezione
è data dai documenti lilypond-book, dove bisogna aggiungere
esplicitamente un blocco @code{\book} se si vuole più di un singolo
blocco @code{\score} o @code{\markup} nello stesso esempio.  Tale
comportamento può essere modificato impostando la variabile
@code{toplevel-book-handler} nel livello superiore. Il gestore
predefinito è definito nel file di inizializzazione
@file{../scm/lily.scm}.

@item
Un blocco @code{\bookpart}.  Un libro può essere suddiviso in varie
parti, tramite blocchi @code{\bookpart}, per semplificare le
interruzioni di pagina o per usare impostazioni @code{\paper}
diverse nelle varie parti.

@item
Un'espressione musicale composta, come
@example
@{ c'4 d' e'2 @}
@end example

pone il brano in un blocco @code{\score} e lo formatta in un unico
libro insieme a tutti gli altri blocchi @code{\score} e espressioni
musicali di livello superiore. In altre parole, un file che contiene
soltanto l'espressione musicale precedente verrà trasformato in

@example
\book @{
  \score @{
    \new Staff @{
      \new Voice @{
        @{ c'4 d' e'2 @}
      @}
    @}
    \layout @{ @}
  @}
  \paper @{ @}
  \header @{ @}
@}
@end example

Tale comportamento può essere modificato impostando la variabile
@code{toplevel-music-handler} nel livello superiore.  Il gestore
predefinito è definito nel file di inizializzazione
@file{../scm/lily.scm}.

@item
Un testo, per esempio una strofa
@example
\markup @{
   2.  La prima riga della seconda strofa.
@}
@end example

I testi possono trovarsi sopra, sotto o in mezzo alle partiture
o espressioni musicali, ovunque esse appaiano.

@cindex variabili

@item
Una variabile, come
@example
foo = @{ c4 d e d @}
@end example

può essere utilizzata in un punto successivo del file scrivendo
@code{\foo}.  Il nome di una variabile deve avere solo caratteri
alfabetici; nessun numero, trattino o trattino basso.

@end itemize

L'esempio seguente mostra tre elementi che possono essere inseriti
nel livello superiore

@example
\layout @{
  % Non giustificare l'output
  ragged-right = ##t
@}

\header @{
   title = "Do-re-mi"
@}

@{ c'4 d' e2 @}
@end example


Ciascuna delle seguenti istruzioni lessicali può essere inserita
in qualsiasi punto di un file:
@funindex \version
@funindex \include
@funindex \sourcefilename
@funindex \sourcefileline

@funindex %
@funindex %@{ @dots{} %@}
@cindex commento
@cindex linea di commento
@cindex linea di commento, singola
@cindex blocco di commento
@cindex commento multirigo

@itemize
@item @code{\version}
@item @code{\include}
@item @code{\sourcefilename}
@item @code{\sourcefileline}
@item
Un commento su riga singola, introdotto da un segno @code{%}.

@item
Un commento multirigo delimitato da @code{%@{ @dots{} %@}}.

@end itemize

@cindex spazio bianco

Lo spazio bianco tra gli elementi dell'input viene generalmente
ignorato e può essere liberamente omesso o aumentato per migliorare
la leggibilità.  Tuttavia esistono dei casi in cui lo spazio bianco
deve essere sempre usato per non incorrere in errori:

@itemize

@item Intorno ad ogni parentesi graffa di apertura e di chiusura.

@item Dopo ogni comando o variabile, ovvero qualsiasi elemento
che inizi con un segno@tie{}@code{\}.

@item Dopo ogni elemento che debba essere interpretato come
un'espressione Scheme, ovvero ogni elemento che inizi con un
segno@tie{}@code{#}.

@item Per separare tutti gli elementi di un'espressione Scheme.

@item Nella modalità @code{lyricmode} prima e dopo i comandi @code{\set}
e @code{\override}.

@end itemize

@seealso
Manuale di apprendimento:
@rlearning{Come funzionano i file di input di LilyPond}.

Guida alla notazione:
@ref{Come funzionano i titoli},
@ref{Il blocco layout}.


@node Titoli e intestazioni
@section Titoli e intestazioni
@translationof Titles and headers

@cindex titolo
@cindex intestazione
@cindex piè di pagina

Quasi tutte le partiture musicali hanno il titolo e il nome del compositore e
alcuni brani comprendono molte altre informazioni.

@menu
* Creazione di titoli intestazioni e piè di pagina::
* Titoli intestazioni e piè di pagina personalizzati::
* Creazione di metadati per i file di output::
* Creazione di note a piè di pagina::
* Riferimento ai numeri di pagina::
* Indice::
@end menu


@node Creazione di titoli intestazioni e piè di pagina
@subsection Creazione di titoli intestazioni e piè di pagina
@translationof  Creating titles headers and footers

@menu
* Come funzionano i titoli::
* Formattazione predefinita dei titoli delle parti e dei brani::
* Formattazione predefinita delle intestazioni e dei piè di pagina::
@end menu


@node Come funzionano i titoli
@unnumberedsubsubsec Come funzionano i titoli
@translationof Titles explained

Ogni blocco @code{\book} in un singolo file di input produce un diverso
file di output, vedi @ref{Struttura del file}.  In ciascun file di output
sono disponibili tre tipi di titolazioni: @emph{titoli del libro} all'inizio
di ogni libro (@emph{book}), @emph{titoli della parte} all'inizio di ciascuna
parte (@emph{bookpart}) e @emph{titoli del brano} all'inizio di ciascun
brano (@emph{score}).

I valori dei campi dei titoli come @code{title} (titolo) e @code{composer}
(compositore) sono definiti nei blocchi @code{\header} (la sintassi dei
blocchi @code{\header} e un elenco completo dei campi disponibili si
trovano in @ref{Formattazione predefinita dei titoli delle parti e dei brani}).  I titoli
del libro, delle parti e dei brani possono avere tutti gli stessi campi,
sebbene per impostazione predefinita i campi dei titoli del brano siano
limitati a @code{piece} e @code{opus}.

I blocchi @code{\header} possono essere inseriti in quattro diversi punti
formando una gerarchia discendente di blocchi @code{\header}:

@itemize

@item
All'inizio del file di input, prima di tutti i blocchi @code{\book},
@code{\bookpart} e @code{\score}.

@item
All'interno di un blocco @code{\book} ma fuori da tutti i blocchi
@code{\bookpart} e @code{\score} compresi in quel libro.

@item
All'interno di un blocco @code{\bookpart} ma fuori da tutti i blocchi
@code{\score} compresi in quella parte.

@item
In un blocco @code{\score}.

@end itemize

I valori dei campi vengono filtrati attraverso questa gerarchia, con i valori
più in alto nella gerarchia che persistono finché un valore più in basso nella
gerarchia non ha la precedenza. In sintesi:

@itemize

@item
Il titolo di un libro deriva dai campi impostati all'inizio del file di input,
modificati dai campi definiti nel blocco @code{\book}.  I valori
risultanti vengono usati per stampare il titolo di quel libro, purché ci sia
altro materiale che generi una pagina all'inizio del libro, prima della prima
parte.  Una singola interruzione di pagina (@code{\pageBreak}) è sufficiente.

@item
Il titolo di una parte deriva dai campi impostati all'inizio del file di input,
modificati dai campi definiti nel blocco @code{\book} e poi da quelli definiti
nel blocco @code{\bookpart}.  I valori risultanti vengono usati per stampare il
titolo di quella parte del libro.

@item
Il titolo di un brano deriva dai campi all'inizio del file di input,
modificati dai campi definiti nel blocco @code{\book} e poi da quelli
definiti nel blocco @code{\bookpart} e infine da quelli definiti
nel blocco @code{\score}.  I valori risultanti vengono usati per
stampare il titolo di quel brano. Nota bene: per impostazione
predefinita nei titoli del brano appaiono soltanto i campi @code{piece}
e @code{opus} a meno che la variabile @code{print-all-headers} di
@code{\paper} non sia impostata su @code{#t}.

@end itemize

Non è necessario inserire blocchi @code{\header} in tutti e quattro
i luoghi: alcuni o perfino tutti possono essere omessi. Analogalmente,
in semplici file di input si possono omettere i blocchi @code{\book} e
@code{\bookpart}, lasciando che questi siano creati implicitamente.

Se il libro ha un solo brano, il blocco @code{\header} viene di
solito messo all'inizio del file, in modo che sia prodotto soltanto
il titolo della parte e lasciando disponibili tutti i campi di
titolazione.

Se il libro ha vari brani, è possibile usare diverse disposizioni dei
blocchi @code{\header}, corrispondenti ai diversi tipi di pubblicazione
musicale.  Per esempio, se la pubblicazione contiene vari brani dello
stesso compositore, la soluzione più adatta prevederebbe un blocco @code{\header}
all'inizio del file che specifichi il titolo del libro e il nome del compositore,
e dei blocchi @code{\header} in ciascun blocco @code{\score} che specifichino il
titolo del brano (@code{piece}) e dell'opera (@code{opus}), come in questo
esempio:

@lilypond[papersize=a5,quote,verbatim,noragged-right]
\header {
  title = "SUITE I."
  composer = "J. S. Bach."
}

\score {
  \new Staff \relative {
    \clef bass
    \key g \major
    \repeat unfold 2 { g,16( d' b') a b d, b' d, } |
    \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
  }
  \header {
    piece = "Prélude."
  }
}

\score {
  \new Staff \relative {
    \clef bass
    \key g \major
    \partial 16 b16 |
    <g, d' b'~>4 b'16 a( g fis) g( d e fis) g( a b c) |
    d16( b g fis) g( e d c) b(c d e) fis( g a b) |
  }
  \header {
    piece = "Allemande."
  }
}
@end lilypond

Sono possibili disposizioni più complesse.  Per esempio, i campi testuali
del blocco @code{\header} di un libro possono essere stampati nei titoli
di tutti i brani, magari sovrascrivendo alcuni campi e sopprimendone altri:

@lilypond[papersize=a5,quote,verbatim,noragged-right]
\book {
  \paper {
    print-all-headers = ##t
  }
  \header {
    title = "DAS WOHLTEMPERIRTE CLAVIER"
    subtitle = "TEIL I"
    % Non mostrare il piè di pagina predefinito nell'ultima pagina di questo libro
    tagline = ##f
  }
  \markup { \vspace #1 }
  \score {
    \new PianoStaff <<
      \new Staff { s1 }
      \new Staff { \clef "bass" s1 }
    >>
    \header {
      title = "PRAELUDIUM I"
      opus = "BWV 846"
      % Non mostrare il sottotitolo in questo brano
      subtitle = ##f
    }
  }
  \score {
    \new PianoStaff <<
      \new Staff { s1 }
      \new Staff { \clef "bass" s1 }
    >>
    \header {
      title = "FUGA I"
      subsubtitle = "A 4 VOCI"
      opus = "BWV 846"
      % Non mostrare il sottotitolo in questo brano
      subtitle = ##f
    }
  }
}
@end lilypond

@seealso
Guida alla notazione:
@ref{Struttura del file},
@ref{Formattazione predefinita dei titoli delle parti e dei brani},
@ref{Formattazione personalizzata dei titoli}.


@node Formattazione predefinita dei titoli delle parti e dei brani
@unnumberedsubsubsec Formattazione predefinita dei titoli delle parti e dei brani
@translationof Default layout of bookpart and score titles

Questo esempio illustra visivamente tutte le variabili del
blocco @code{\header}:

@lilypond[papersize=a6landscape,quote,verbatim,noragged-right]
\book {
  \header {
      % I seguenti campi sono centrati
    dedication = "Dedica"
    title = "Titolo"
    subtitle = "Sottotitolo"
    subsubtitle = "Sottosottotitolo"
      % I seguenti campi sono distribuiti uniformemente su una riga
      % il campo "instrument" appare anche nelle pagine seguenti
    instrument = \markup \with-color #green "Strumento"
    poet = "Poeta"
    composer = "Compositore"
      % I campi seguenti sono posti agli estremi opposti della stessa riga
    meter = "Tempo"
    arranger = "Arrangiatore"
      % I campi seguenti sono centrati in fondo
    tagline = "Lo slogan va in fondo all'ultima pagina"
    copyright = "Il copyright va in fondo alla prima pagina"
  }
  \score {
    { s1 }
    \header {
        % I campi seguenti sono posti agli estremi opposti della stessa riga
      piece = "Brano 1"
      opus = "Opera 1"
    }
  }
  \score {
    { s1 }
    \header {
        % I campi seguenti sono posti agli estremi opposti della stessa riga
      piece = "Brano 2 sulla stessa pagina"
      opus = "Opera 2"
    }
  }
  \pageBreak
  \score {
    { s1 }
    \header {
        % I campi seguenti sono posti agli estremi opposti della stessa riga
      piece = "Brano 3 su una nuova pagina"
      opus = "Opera 3"
    }
  }
}
@end lilypond

Notare che:

@itemize
@item
Il nome dello strumento sarà ripetuto su ogni pagina.

@item
Appaiono soltanto i campi @code{piece} e @code{opus} di un blocco @code{\score}
quando la variabile @code{print-all-headers} del foglio è impostata su
@code{##f} (valore predefinito).

@item
I campi testuali non specificati in un blocco @code{\header} sono sostituiti
con @code{\null} in modo da non sprecare spazio.

@item
Le impostazioni predefinite per @code{scoreTitleMarkup} posizionano i campi
@code{piece} e @code{opus} alle estremità opposte della stessa riga.

@end itemize

Per cambiare la formattazione predefinita leggere @ref{Formattazione personalizzata dei titoli}.

@funindex breakbefore

Se un blocco @code{\book} inizia subito con un blocco @code{\bookpart},
non verrà stampato alcun titolo per il libro, dato che non esiste una
pagina in cui farlo apparire. Se il titolo del libro deve comunque
apparire, conviene inserire all'inizio  di @code{\book} del testo
inserito con @code{\markup} oppure un comando @code{\pageBreak}.

Usare la variabile @code{breakbefore} all'interno di un blocco @code{\header}
racchiuso in un blocco @code{\score} per far sì che i titoli del blocco
@code{\header} di più alto livello appaiano da soli nella prima pagina,
mentre la musica (definita nel blocco @code{\score}) inizia nella
pagina successiva.

@c ho tradotto i campi liberamente per maggiore chiarezza - fb
@lilypond[papersize=c7landscape,verbatim,noragged-right]
\book {
  \header {
    title = "Titolo del libro"
    subtitle = "Sottotitolo del libro"
    copyright = "Fine della prima pagina"
  }
  \score {
    \repeat unfold 4 { e'' e'' e'' e'' }
    \header {
      piece = "Titolo del brano"
      breakbefore = ##t
    }
  }
}
@end lilypond

@seealso
Manuale di apprendimento:
@rlearning{Come funzionano i file di input di LilyPond},

Guida alla notazione:
@ref{Formattazione personalizzata dei titoli},
@ref{Struttura del file}.

File installati:
@file{ly/titling-init.ly}.


@node Formattazione predefinita delle intestazioni e dei piè di pagina
@unnumberedsubsubsec Formattazione predefinita delle intestazioni e dei piè di pagina
@translationof Default layout of headers and footers

Le @emph{intestazioni} e i @emph{piè di pagina} sono linee di testo che appaiono
in cima e in fondo alle pagine, distinte dal testo principale di un libro.
Possono essere definite nelle seguenti variabili del blocco @code{\paper}:

@itemize
@item @code{oddHeaderMarkup}
@item @code{evenHeaderMarkup}
@item @code{oddFooterMarkup}
@item @code{evenFooterMarkup}
@end itemize

Queste variabili di markup possono soltanto accedere ai campi testuali definiti
nei blocchi @code{\header} del livello superiore (che vengono applicati a tutti
i brani del libro) e sono definiti in @file{ly/titling-init.ly}.  Impostazioni
predefinite:

@itemize

@item
i numeri di pagina sono collocati automaticamente in alto a sinistra (se la
pagina è pari) o in alto a destra (se la pagina è dispari), a partire dalla
seconda pagina.

@item
il campo @code{instrument} viene ripetuto al centro di ogni pagina, a
partire dalla seconda pagina.

@item
il testo del @code{copyright} è centrato in fondo alla prima pagina.

@item
lo @qq{slogan} (o firma) -- @code{tagline} -- è centrato in fondo
all'ultima pagina o sotto il campo del @code{copyright} se c'è
una sola pagina.

@end itemize

Il testo del piè di pagina predefinito per l'ultima pagina può essere
modificato aggiungendo il campo @code{tagline} al blocco @code{\header}
del livello superiore.

@lilypond[papersize=a8landscape,verbatim]
\book {
  \header {
    tagline = "... notazione musicale per tutti"
  }
  \score {
    \relative {
      c'4 d e f
    }
  }
}
@end lilypond

Per toglierlo, impostare @code{tagline} su @code{##f}.


@node Titoli intestazioni e piè di pagina personalizzati
@subsection Titoli intestazioni e piè di pagina personalizzati
@translationof Custom titles headers and footers

@menu
* Titoli personalizzati::
* Formattazione personalizzata dei titoli::
* Formattazione personalizzata di intestazioni e piè di pagina::
@end menu


@node Titoli personalizzati
@unnumberedsubsubsec Titoli personalizzati
@translationof Custom text formatting for titles

Si possono usare i normali comandi @code{\markup} per personalizzare qualsiasi
intestazione, piè di pagina e titolo di un blocco @code{\header}.

@lilypond[quote,verbatim,noragged-right]
\score {
  { s1 }
  \header {
    piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
    opus = \markup { \italic "BWV 846" }
  }
}
@end lilypond

@seealso
Guida alla notazione:
@ref{Formattazione del testo}.


@node Formattazione personalizzata dei titoli
@unnumberedsubsubsec Formattazione personalizzata dei titoli
@translationof Custom layout for titles

@funindex bookTitleMarkup
@funindex scoreTitleMarkup

I comandi @code{\markup} nel blocco @code{\header} sono utili solo per la
formattazione del testo, ma non consentono un controllo preciso sul
posizionamento dei titoli. Per personalizzare il posizionamento dei campi
testuali, cambiare una o entrambe le seguenti variabili @code{\paper}:

@itemize
@item @code{bookTitleMarkup}
@item @code{scoreTitleMarkup}
@end itemize

Il posizionamento dei titoli secondo i valori predefiniti di queste variabili
@code{\markup} è mostrato negli esempi in
@ref{Formattazione predefinita dei titoli delle parti e dei brani}.

Le impostazioni predefinite di @code{scoreTitleMarkup}, definite in
@file{ly/titling-init.ly}, sono:

@example
scoreTitleMarkup = \markup @{ \column @{
  \on-the-fly \print-all-headers @{ \bookTitleMarkup \hspace #1 @}
  \fill-line @{
    \fromproperty #'header:piece
    \fromproperty #'header:opus
  @}
@}
@}
@end example

Questo pone i campi testuali @code{piece} e @code{opus} alle estremità opposte
della stessa riga:

@lilypond[quote,verbatim,noragged-right]
\score {
  { s1 }
  \header {
    piece = "PRAELUDIUM I"
    opus = "BWV 846"
  }
}
@end lilypond

L'esempio seguente ridefinisce @code{scoreTitleMarkup} in modo che il campo
testuale di @code{piece} sia centrato e in un tipo di carattere più grande e
in grassetto.

@lilypond[papersize=a5,quote,verbatim,noragged-right]
\book {
  \paper {
    indent = 0\mm
    scoreTitleMarkup = \markup {
      \fill-line {
        \null
        \fontsize #4 \bold \fromproperty #'header:piece
        \fromproperty #'header:opus
      }
    }
  }
  \header { tagline = ##f }
  \score {
    { s1 }
    \header {
      piece = "PRAELUDIUM I"
      opus = "BWV 846"
    }
  }
}
@end lilypond

I campi testuali che non sono normalmente attivi nei blocchi @code{\header}
compresi in un blocco @code{\score} possono essere stampati nello spazio
dedicato al titolo del brano aggiungendo @code{print-all-headers} nel
blocco @code{\paper}.  Lo svantaggio di questo metodo è che i campi testuali
intesi esclusivamente per lo spazio del titolo della parte devono essere
manualmente soppressi in ogni blocco @code{\score}.  Vedi @ref{Come funzionano i titoli}.

Per evitare ciò, è meglio mettere il campo testuale desiderato nella
definizione di @code{scoreTitleMarkup}. Nell'esempio seguente il campo
@code{composer} (solitamente associato a @code{bookTitleMarkup}) viene
aggiunto a @code{scoreTitleMarkup}, facendo sì che ogni brano possa elencare
un diverso compositore:

@lilypond[papersize=a5,quote,verbatim,noragged-right]
\book {
  \paper {
    indent = 0\mm
    scoreTitleMarkup = \markup {
      \fill-line {
        \null
        \fontsize #4 \bold \fromproperty #'header:piece
        \fromproperty #'header:composer
      }
    }
  }
  \header { tagline = ##f }
  \score {
    { s1 }
    \header {
      piece = "MENUET"
      composer = "Christian Petzold"
    }
  }
  \score {
    { s1 }
    \header {
      piece = "RONDEAU"
      composer = "François Couperin"
    }
  }
}
@end lilypond

È anche possibile creare un campo testuale personalizzato e fare riferimento
ad esso nella definizione di markup.

@lilypond[papersize=a5,quote,verbatim,noragged-right]
\book {
  \paper {
    indent = 0\mm
    scoreTitleMarkup = \markup {
      \fill-line {
        \null
        \override #`(direction . ,UP) {
          \dir-column {
            \center-align \fontsize #-1 \bold
              \fromproperty #'header:mycustomtext %% Campo definito dall'utente
            \center-align \fontsize #4 \bold
              \fromproperty #'header:piece
          }
        }
        \fromproperty #'header:opus
      }
    }
  }
  \header { tagline = ##f }
  \score {
    { s1 }
    \header {
      piece = "FUGA I"
      mycustomtext = "A 4 VOCI" %% Campo definito dall'utente
      opus = "BWV 846"
    }
  }
}
@end lilypond

@seealso
Guida alla notazione:
@ref{Come funzionano i titoli}.


@node Formattazione personalizzata di intestazioni e piè di pagina
@unnumberedsubsubsec Formattazione personalizzata di intestazioni e piè di pagina
@translationof Custom layout for headers and footers

I comandi @code{\markup} nel blocco @code{\header} sono utili solo per la
formattazione del testo, ma non consentono un controllo preciso sul
posizionamento di intestazioni e piè di pagina. Per personalizzare il
posizionamento dei campi testuali, usare una o entrambe le seguenti
variabili @code{\paper}:

@itemize
@item @code{oddHeaderMarkup}
@item @code{evenHeaderMarkup}
@item @code{oddFooterMarkup}
@item @code{evenFooterMarkup}
@end itemize

@cindex markup condizionale
@cindex testo condizionale
@funindex \on-the-fly

Il comando @code{\on-the-fly} -- usato all'interno di un blocco @code{\markup} --
permette di aggiungere del testo a intestazioni e piè di pagina definiti nel
blocco @code{\paper}, solo se certe condizioni sono soddisfatte, tramite la
seguente sintassi:

@example
variabile = \markup @{
  @dots{}
  \on-the-fly  \@var{procedura}  @var{testo}
  @dots{}
@}
@end example

La @var{procedura} viene chiamata ogni volta che viene elaborato il comando
@code{\markup} nel quale essa si trova. La @var{procedura} verifica una
precisa condizione e interpreta (ovvero stampa) l'argomento @var{testo} se
e solo se la condizione è vera.

Sono disponibili varie procedure pronte per verificare varie condizioni:

@quotation
@multitable {print-page-number-check-first-----} {should this page be printed-----}

@headitem  Nome della procedura           @tab  Condizione verificata

@item print-page-number-check-first @tab  stampare questa pagina?
@item create-page-number-stencil    @tab  print-page-numbers è vero?
@item print-all-headers             @tab  print-all-headers è vero?
@item first-page                    @tab  prima pagina del libro?
@item not-first-page                @tab  non la prima pagina del libro?
@item (on-page nmbr)                @tab  numero pagina = nmbr?
@item last-page                     @tab  ultima pagina del libero?
@item part-first-page               @tab  prima pagina della parte?
@item not-part-first-page           @tab  non la prima pagine della parte?
@item part-last-page                @tab  ultima pagina della parte?
@item not-single-page               @tab  pagine della parte > 1?

@end multitable
@end quotation

L'esempio seguente centra i numeri di pagina in fondo a ogni pagina.
Innanzitutto vengono annullate le impostazioni predefinite per
@code{oddHeaderMarkup} e @code{evenHeaderMarkup} definendo ciascuno di
essi come un markup @emph{null}. Poi @code{oddFooterMarkup} viene
ridefinito col numero di pagina centrato. Infine a @code{evenFooterMarkup}
viene assegnata la stessa formattazione di @code{\oddFooterMarkup}:

@lilypond[papersize=a8,quote,verbatim,noragged-right]
\book {
  \paper {
    print-page-number = ##t
    print-first-page-number = ##t
    oddHeaderMarkup = \markup \null
    evenHeaderMarkup = \markup \null
    oddFooterMarkup = \markup {
      \fill-line {
        \on-the-fly \print-page-number-check-first
        \fromproperty #'page:page-number-string
      }
    }
    evenFooterMarkup = \oddFooterMarkup
  }
  \score {
    \new Staff { s1 \break s1 \break s1 }
  }
}
@end lilypond

Varie condizioni @code{\on-the-fly} possono essere combinate insieme come se
si utilizzasse l'operatore logico @q{AND} e il testo apparirà solo se tutte
le condizioni sono vere. Per esempio, queste due condizioni

@example
  \on-the-fly \first-page
  \on-the-fly \last-page
  @code{@{ \markup @dots{} \fromproperty #'header: @dots{} @}}
@end example

verificano se l'output è una pagina singola.

@seealso
Guida alla notazione:
@ref{Come funzionano i titoli},
@ref{Formattazione predefinita dei titoli delle parti e dei brani}.

File installati:
@file{../ly/titling-init.ly}.

@node Creazione di metadati per i file di output
@subsection Creazione di metadati per i file di output
@translationof Creating output file metadata

@cindex metadati PDF
@cindex metadati MIDI
@cindex MIDI, metadati
@cindex PDF, metadati

Oltre ad apparire nell'output, le variabili di @code{\header} vengono
usate anche per impostare i metadati per i file di output.  Per esempio,
con i file PDF, questi metadati possono essere mostrati dai lettori PDF
come @code{proprietà} del file PDF.  Per ciascun tipo di file di output,
verranno considerate solo le definizioni @code{\header} dei blocchi
specifici per quel tipo e dei blocchi che si trovano al livello superiore
della gerarchia.  Dunque per i file PDF solo le definizioni @code{\header}
del livello @code{\book} e del livello superiore vengono utilizzate per
i metadati PDF del documento, mentre  per i file MIDI vengono usate le
definizioni che si trovano in un livello inferiore o in un
blocco @code{\score}.

Per esempio, impostando la proprietà @code{title} del blocco @code{header}
su @q{Sinfonia I}, questo nome verrà usato come titolo del documento PDF e
come nome della sequenza del file MIDI.

@example
  \header @{
    title = "Sinfonia I"
  @}
@end example

Se si desidera impostare il titolo dell'output su un valore e la proprietà
titolo del PDF su un valore diverso, si può usare @code{pdftitle}, nel
modo seguente:

@example
  \header @{
    title = "Sinfonia I"
    pdftitle = "Sinfonia I di Beethoven"
  @}
@end example

Le variabili @code{title}, @code{subject}, @code{keywords},
@code{subtitle}, @code{composer}, @code{arranger}, @code{poet}, @code{author}
e @code{copyright} impostano anche le proprietà del PDF e possono essere
tutte prefissate con @q{pdf} per impostare una proprietà del PDF su un
valore diverso da quello dell'output.

La proprietà PDF @code{Creator} è automaticamente impostata su @q{LilyPond} più
la versione di LilyPond utilizzata, e @code{CreationDate} (data di creazione) e
@code{ModDate} (data di modifica) sono entrambe impostate sulla data e ora
correnti.  @code{ModDate} può essere sovrascritta impostando nel blocco
@code{header} la variabile @code{moddate} (o @code{pdfmoddate}) su una
valida data per il PDF.

La variabile @code{title} imposta anche il nome della sequenza dei file
MIDI.  La variabile @code{midititle} serve a impostare il nome della
sequenza in modo indipendente dal valore usato per l'output.


@node Creazione di note a piè di pagina
@subsection Creazione di note a piè di pagina
@translationof Creating footnotes

@cindex nota a piè di pagina

Le note a piè di pagina possono essere usate in situazioni diverse.  In tutti
i casi, un @q{segno della nota a piè di pagina} viene inserito come riferimento
vicino al testo o alla musica a cui si riferisce e il corrispondente
@q{testo della nota a piè di pagina} appare in fondo alla stessa pagina.

Le note a piè di pagina si creano diversamente a seconda che siano applicate a
espressioni musicali o a del testo separato e fuori dalle espressioni
musicali.

@menu
* Note a piè di pagina nelle espressioni musicali::
* Note a piè di pagina nel testo separato::
@end menu

@node Note a piè di pagina nelle espressioni musicali
@unnumberedsubsubsec Note a piè di pagina nelle espressioni musicali
@translationof Footnotes in music expressions

@cindex nota a piè di pagina, nelle espressioni musicali
@funindex \footnote

@subsubsubheading Panoramica sulle note a piè di pagina attaccate alla musica

Le note a piè di pagina nelle espressioni musicali appartengono a
due categorie:

@table @emph
@item Note a piè di pagina basate su un evento
sono collegate a un preciso evento.  Esempi di tali eventi sono
note singole, articolazioni (come le indicazioni di diteggiatura, gli accenti,
le dinamiche), e ciò che è successivo a un evento (come le legature di
portamento e le travature manuali).  La forma generale per le note a piè di
pagina basate su un evento è la seguente:

@example
[@var{direzione}] \footnote [@var{segno}] @var{offset} @var{nota} @var{musica}
@end example

@item Note a piè di pagina basate sul tempo
sono collegate a un preciso momento temporale in un contesto musicale.  Alcuni
comandi come @code{\time} e @code{\clef} non usano in realtà degli eventi
per creare oggetti come le indicazioni di tempo e le chiavi.  E nemmeno un
accordo crea un suo evento: il suo gambo o coda sono creati alla fine di
un'unità di tempo (attraverso un evento di una delle note al suo interno).
Non è definito esattamente quale dei molteplici eventi nota di un accordo
sarà giudicato la causa ultima di un gambo o di una coda. Dunque per legare
una nota a questi, sono preferibili le note a piè di pagina basate sul tempo.

Una nota a piè di pagina basata sul tempo permette a tali oggetti della
formattazione di avere delle note senza che sia necessario riferirsi a
un evento.  La forma generale per le note a piè di pagina basate sul
tempo è la seguente:

@example
\footnote [@var{segno}] @var{offset} @var{nota} [@var{Contesto}].@var{NomeGrob}
@end example

@end table

Gli elementi di entrambe le forme sono:

@table @var

@item direzione
se (e  solo se) @code{\footnote} viene applicato a un post-evento o a una
articolazione, deve essere preceduto da un indicatore di direzione
(@code{-, _, ^}) per poter collegare la @var{musica} (col segno della
nota a piè di pagina) alla nota o pausa precedenti.

@item segno
@funindex @sortas{defaultB} \default
è del testo -- racchiuso tra virgolette o in un blocco @code{\markup} -- che
specifica il segno della nota usata per contrassegnare sia il punto di
riferimento che la nota stessa in fondo alla pagina. Può essere omesso
(o sostituito con @code{\default}), nel qual caso sarà generato automaticamente
un numero in sequenza. Tali sequenze numeriche ricominciano su ogni pagina
contenente una nota.

@item offset
è una coppia di numeri come @samp{#(2 . 1)} che specificano la distanza
orizzontale e verticale (X e Y@tie{}offset), in unità di spazio rigo, dal
bordo dell'oggetto in cui il segno deve essere posizionato. Valori positivi
degli offset vengono presi dal bordo in alto a destra, valori negativi
dal bordo in basso a sinistra e lo zero significa che il segno è centrato
sul bordo.

@item Contesto
è il contesto in cui è creato il grob a cui è collegata la nota.  Può essere
omesso se il grob si trova in un contesto più basso, per esempio un
contesto @code{Voice}.

@item NomeGrob
indica un tipo di grob a cui assegnare la nota (come @samp{Flag}).  Se viene
specificato, la nota a piè di pagina non è collegata a un'espressione musicale
in particolare, bensì a tutti i grob di quel tipo che si trovano in quel
momento del tempo musicale.

@item nota
è il testo -- racchiuso tra virgolette o in un blocco @code{\markup} -- che
contiene il testo da usare per la nota a piè di pagina.

@item musica
è l'evento musicale o il post-evento o articolazione a cui viene collegata
la nota.

@end table

@subsubsubheading Note a piè di pagina basate su un evento

@cindex nota a piè di pagina basata su un evento

Una nota a piè di pagina può essere collegata a un oggetto della formattazione
direttamente causato dall'evento corrispondente a @var{musica} con la sintassi:

@example
\footnote [@var{segno}] @var{offset} @var{nota} @var{musica}
@end example

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c'' {
    \footnote #'(-1 . 3) "Una nota" a4
    a4
    \footnote #'(2 . 2) "Una pausa" r4
    a4
  }
}
@end lilypond

Contrassegnare un @emph{intero} accordo con una nota a piè di pagina basata
su un evento non è possibile: infatti un accordo, perfino uno che contenga
una sola nota, non produce un vero evento specifico. Tuttavia possono essere
contrassegnate singole note @emph{dentro} l'accordo:

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c'' {
    \footnote #'(2 . 3) "Non funziona" <a-3>2
    <\footnote #'(-2 . -3) "Funziona" a-3>4
    <a-3 \footnote #'(3 . 1/2) "Anche questo funziona" c-5>4
  }
}
@end lilypond

Se la nota deve essere attaccata a un post-evento o un'articolazione
il comando @code{\footnote} @emph{deve} essere preceduto da un indicatore
di direzione, @code{-, _, ^}, e seguito dal post-evento o dall'articolazione
che si desidera commentare nell'argomento @var{musica}.  In questa forma
@code{\footnote} può essere considerato semplicemente una copia del
suo ultimo argomento con un segno di nota a piè di pagina collegato a
esso.  La sintassi è:

@example
@var{direzione} \footnote [@var{segno}] @var{offset} @var{nota} @var{musica}
@end example

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative {
    a'4_\footnote #'(0 . -1) "Una legatura di portamento forzata in giù" (
    b8^\footnote #'(1 . 0.5) "Una travatura manuale forzata in su" [
    b8 ]
    c4 )
    c-\footnote #'(1 . 1) "Tenuto" --
  }
}
@end lilypond

@subsubsubheading Note a piè di pagina basate sul tempo

@cindex nota a piè di pagina basate sul tempo

Se l'oggetto della formattazione a cui attaccare la nota è @emph{indirettamente}
causato da un evento -- come un @code{Accidental} (alterazione) o @code{Stem}
(gambo) causati da un evento @code{NoteHead} (testa di nota), è necessario
specificare il @var{NomeGrob} dell'oggetto di formattazione al posto di
@var{musica} dopo il testo della nota:

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c'' {
    \footnote #'(-1 . -3) "Un bemolle" Accidental
    aes4 c
    \footnote #'(-1 . 0.5) "Un altro bemolle" Accidental
    ees
    \footnote #'(1 . -2) "Un gambo" Stem
    aes
  }
}
@end lilypond

Tuttavia nota che, quando si specifica un NomeGrob, una nota a piè di
pagina sarà attaccata a tutti i grob di quel tipo che si trovano in
quel momento musicale:

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c' {
    \footnote #'(-1 . 3) "Un bemolle" Accidental
    <ees ges bes>4
    \footnote #'(2 . 0.5) "Articolazione" Script
    c'->-.
  }
}
@end lilypond

@funindex \single
È possibile assegnare a una nota di un accordo una singola nota a
piè di pagina (basata su un evento). @samp{NoteHead} è l'unico grob
causato direttamente dalla nota di un accordo, dunque una nota a piè
di pagina basata su un evento è adatta @emph{soltanto} ad aggiungere
una nota a piè di pagina al @samp{NoteHead} all'interno di un accordo.
Tutti gli altri grob delle note di un accordo sono causati indirettamente.
Il comando @code{\footnote} non ha una sintassi per specificare @emph{sia}
un particolare tipo di grob @emph{sia} un particolare evento a cui collegare
la nota. Tuttavia si può usare un comando @code{\footnote} basato sul tempo
per specificare il tipo di grob e poi precedere tale comando con @code{\single}
perché venga applicato soltanto all'evento che segue:

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c'' {
    < \footnote #'(1 . -2) "An A" a
      \single \footnote #'(-1 . -1) "Un diesis" Accidental
      cis
      \single \footnote #'(0.5 . 0.5) "Un bemolle" Accidental
      ees fis
    >2
  }
}
@end lilypond

@warning {Quando le note a piè di pagina sono collegate a diversi elementi
musicali nello stesso momento musicale, come nell'esempio precedente, le note
sono numerate dall'elemento più alto a quello più in basso come questi
appaiono nell'output e non nell'ordine in cui sono inseriti nell'input.}

Gli oggetti della formattazione come le chiavi e i cambi di armatura di chiave
sono causati principalmente da proprietà modificate piuttosto che da veri
eventi. Per questo motivo le note su tali oggetti devono essere basate sul loro
tempo musicale. Le note a piè di pagina basate sul tempo sono da preferire anche
quando si vogliono contrassegnare elementi come i gambi e le travature in un
@emph{accordo}: sebbene tali elementi dell'accordo siano nominalmente assegnati
a @emph{un} evento all'interno dell'accordo, affidarsi a una scelta particolare
sarebbe imprudente.

L'oggetto della formattazione in questione deve essere sempre specificato
esplicitamente nelle note a piè di pagina basate sul tempo, e il contesto
appropriato deve essere indicato se il grob viene creato in un contesto
diverso da quello più basso.

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c'' {
    r1 |
    \footnote #'(-0.5 . -1) "Cambio di tempo" Staff.TimeSignature
    \time 3/4
    \footnote #'(1 . -1) "Gambo dell'accordo" Stem
    <c e g>4 q q
    \footnote #'(-0.5 . 1) "Stanghetta" Staff.BarLine
    q q
    \footnote #'(0.5 . -1) "Cambio di armatura" Staff.KeySignature
    \key c \minor
    q
  }
}
@end lilypond

Si possono usare segni personalizzati in alternativa a quelli numerici, e
si può sopprimere la linea che collega l'oggetto commentato al segno:

@lilypond[quote,verbatim,papersize=a8landscape]
\book {
  \header { tagline = ##f }
  \relative c' {
    \footnote "*" #'(0.5 . -2) \markup { \italic "* La prima nota" } a'4
    b8
    \footnote \markup { \super "$" } #'(0.5 . 1)
      \markup { \super "$" \italic " La seconda nota" } e
    c4
    \once \override Score.FootnoteItem.annotation-line = ##f
    b-\footnote \markup \tiny "+" #'(0.1 . 0.1)
      \markup { \super "+" \italic " Editoriale" } \p
  }
}
@end lilypond

Altri esempi di segni personalizzati si trovano in
@ref{Note a piè di pagina nel testo separato}.


@node Note a piè di pagina nel testo separato
@unnumberedsubsubsec Note a piè di pagina nel testo separato
@translationof Footnotes in stand-alone text

@cindex nota a piè di pagina nel testo separato

Vengono usate all'interno di blocchi @code{\markup} che si trovano
fuori dalle espressioni musicali.  Non hanno una linea che le unisce al
loro punto di riferimento: i loro segni seguono semplicemente il
testo citato. I segni possono essere inseriti automaticamente, nel
qual caso sono numerici; altrimenti è possibile inserire manualmente
dei segni personalizzati.

Le note a piè di pagina su testo separato vengono create in modo diverso
a seconda che si scelgano segni automatici oppure segni personalizzati.

@subsubsubheading Note a piè di pagina nel testo separato con segni automatici

La sintassi di una nota a piè di pagina nel testo separato con segni
automatici è

@example
\markup @{ @dots{} \auto-footnote @var{testo} @var{nota} @dots{} @}
@end example

Gli elementi sono:

@table @var

@item testo
è il testo -- racchiuso tra virgolette doppie o in un blocco markup -- da
contrassegnare.

@item nota
è il testo della nota a piè di pagina.

@end table

Per esempio:

@lilypond[verbatim,quote,ragged-right,papersize=a8]
\book {
  \header { tagline = ##f }
  \markup {
    "Una semplice"
    \auto-footnote "canzone" \italic " Scritta da me"
    "è mostrata sotto.  È una composizione"
    \auto-footnote "recente" \italic " Agosto 2012"
    "."
  }
  \relative {
    a'4 b8 e c4 d
  }
}
@end lilypond

@subsubsubheading Note a piè di pagina nel testo separato con segni personalizzati

La sintassi di una nota a piè di pagina nel testo separato con segni
personalizzati è

@example
\markup @{ @dots{} \footnote @var{segno} @var{nota} @dots{} @}
@end example

Gli elementi sono:

@table @var

@item segno
è una stringa di testo o un markup che indicano il segno da usare per
contrassegnare il punto di riferimento. Tale segno @emph{non} viene
inserito automaticamente prima della nota stessa.

@item nota
è una stringa di testo o un markup che indicano il testo della nota a
piè di pagina, preceduto dal @var{segno}.

@end table

Qualsiasi carattere facile da scrivere, come * o +, può essere usato come+
segno, come è spiegato in @ref{Note a piè di pagina nelle espressioni musicali}.  Altrimenti,
si possono usare gli alias ASCII (vedi @ref{Alias ASCII}):

@lilypond[verbatim,quote,ragged-right,papersize=a8]
\book {
  \paper { #(include-special-characters) }
  \header { tagline = ##f }
  \markup {
    "Una semplice canzone"
    \footnote "*" \italic "* Scritta da me"
    "è mostrata sotto.  È una composizione recente"
    \footnote \super &dagger; \concat {
      \super &dagger; \italic " Agosto 2012"
    }
    "."
  }
  \relative {
    a'4 b8 e c4 d
  }
}
@end lilypond

È possibile usare anche i caratteri Unicode per indicare i segni
(vedi @ref{Unicode}):

@lilypond[verbatim,quote,ragged-right,papersize=a8]
\book {
  \header { tagline = ##f }
  \markup {
    "Una semplice canzone"
    \footnote \super \char##x00a7 \concat {
      \super \char##x00a7 \italic " Scritta da me"
    }
    "è mostrata sotto.  È una composizione recente"
    \footnote \super \char##x00b6 \concat {
      \super \char##x00b6 \italic " Agosto 2012"
    }
    "."
  }
  \relative {
    a'4 b8 e c4 d
  }
}
@end lilypond

@seealso
Manuale di apprendimento:
@rlearning{Oggetti e interfacce}.

Guida alla notazione:
@ref{Alias ASCII},
@ref{Nuvoletta di aiuto},
@ref{Elenco dei caratteri speciali},
@ref{Indicazioni testuali},
@ref{Scritte},
@ref{Unicode}.

Guida al funzionamento interno:
@rinternals{FootnoteEvent},
@rinternals{FootnoteItem},
@rinternals{FootnoteSpanner},
@rinternals{Footnote_engraver}.

@knownissues
Varie note a piè di pagina sulla stessa pagina possono essere messe
soltanto una dopo l'altra; non è possibile disporle sulla stessa
riga.

Le note a piè di pagina non possono essere collegate a @code{MultiMeasureRests},
a travature automatiche o a testo vocale.

I segni delle note a piè di pagina potrebbero entrare in collisione con
righi, oggetti @code{\markup}, altri segni e linee delle note a piè di
pagina.


@node Riferimento ai numeri di pagina
@subsection Riferimento ai numeri di pagina
@translationof Reference to page numbers

È possibile contrassegnare un punto specifico di una partitura usando il
comando @code{\label} (etichetta) nel livello superiore o all'interno della
musica.  Questa etichetta può quindi essere citata all'interno di un blocco
markup, per ottenere il numero di pagina in cui è stato inserito il punto
contrassegnato, tramite il comando markup @code{\page-ref}.

@lilypond[verbatim,papersize=a8landscape]
\header { tagline = ##f }
\book {
  \label #'primoBrano
  \score {
    {
      c'1
      \pageBreak \mark A \label #'segnoA
      c'1
    }
  }
  \markup { Il primo brano inizia a pagina \page-ref #'primoBrano "0" "?" }
  \markup { Il segno A è a pagina \page-ref #'segnoA "0" "?" }
}
@end lilypond

Il comando markup @code{\page-ref} prende tre argomenti:
@enumerate
@item l'etichetta -- un simbolo scheme -- per esempio @code{#'primoBrano};
@item un testo markup da usare come misura di riferimento per stimare le
dimensioni del testo;
@item un testo markup che verrà usato al posto del numero di pagina se l'etichetta
non viene trovata.
@end enumerate

Il motivo per cui è necessario una misura di riferimento è che, nel momento in
cui vengono interpretati i testi (markup), le interruzioni di pagina non sono
state decise, quindi i numeri di pagina non sono ancora noti. Per aggirare il
problema, la vera interpretazione del testo viene rimandata a un momento
successivo; tuttavia le dimensioni del testo devono essere conosciute prima,
ecco perché serve una misura di riferimento per decidere tali dimensioni. Se il
libro ha un numero di pagine compreso tra 10 e 99, tale misura sarà "00", ovvero
un numero di due cifre.


@predefined
@funindex \label
@code{\label},
@funindex \page-ref
@code{\page-ref}.
@endpredefined


@node Indice
@subsection Indice
@translationof Table of contents

L'indice si include col comando @code{\markuplist \table-of-contents}.
Gli elementi che devono apparire nell'indice si inseriscono col comando
@code{\tocItem}, che può essere usato nel livello superiore o all'interno
di un'espressione musicale.

@verbatim
\markuplist \table-of-contents
\pageBreak

\tocItem \markup "Primo brano"
\score {
  {
    c'4  % ...
    \tocItem \markup "Un punto preciso nel primo brano"
    d'4  % ...
  }
}

\tocItem \markup "Secondo brano"
\score {
  {
    e'4 % ...
  }
}
@end verbatim

I testi markup usati per formattare l'indice sono definiti nel blocco
@code{\paper}.  Ce ne sono due predefiniti:

@itemize

@item
@code{tocTitleMarkup}

@noindent
Usato per formattare il titolo dell'indice.

@verbatim
tocTitleMarkup = \markup \huge \column {
  \fill-line { \null "Indice" \null }
  \null
}
@end verbatim

@item
@code{tocItemMarkup}

@noindent
Usato per formattare gli elementi dell'indice.

@verbatim
tocItemMarkup = \markup \fill-line {
  \fromproperty #'toc:text \fromproperty #'toc:page
}
@end verbatim

@end itemize

@noindent
Queste variabili possono essere entrambe modificate.

Ecco un esempio che mostra come cambiare il titolo dell'indice in francese:

@verbatim
\paper {
  tocTitleMarkup = \markup \huge \column {
    \fill-line { \null "Table des matières" \null }
    \hspace #1
  }
}
@end verbatim

Ecco un esempio che mostra come cambiare il corpo dei caratteri nell'indice:

@verbatim
\paper {
  tocItemMarkup = \markup \large \fill-line {
    \fromproperty #'toc:text \fromproperty #'toc:page
  }
}
@end verbatim

Nota il modo in cui sono citati il testo e il numero di pagina dell'elemento
dell'indice nella definizione di @code{tocItemMarkup}.

@funindex \tocItemWithDotsMarkup

Includendo il comando @code{\tocItemWithDotsMarkup} dentro @code{tocItemMarkup}
lo spazio tra un elemento dell'indice e la sua pagina corrispondente sarà
riempito con dei punti:

@lilypond[verbatim,line-width=10.0\cm]
\header { tagline = ##f }
\paper {
  tocItemMarkup = \tocItemWithDotsMarkup
}

\book {
  \markuplist \table-of-contents
  \tocItem \markup { Allegro }
  \tocItem \markup { Largo }
  \markup \null
}
@end lilypond

Si possono anche definire comandi personalizzati con markup specifici per
creare un indice più complesso.  Nell'esempio seguente, viene definito un
nuovo stile per inserire i nomi degli atti nell'indice di un'opera.

@noindent
Una nuova variabile di markup (chiamata @code{tocActMarkup}) viene definita
nel blocco @code{\paper}:

@verbatim
\paper {
  tocActMarkup = \markup \large \column {
    \hspace #1
    \fill-line { \null \italic \fromproperty #'toc:text \null }
    \hspace #1
  }
}
@end verbatim

@noindent
Viene quindi aggiunta una funzione musicale personalizzata (@code{tocAct}),
che usa la nuova definizione di markup @code{tocActMarkup}:

@verbatim
tocAct =
#(define-music-function (text) (markup?)
   (add-toc-item! 'tocActMarkup text))
@end verbatim

@noindent
Un file di input di LilyPond, che usi queste definizioni personalizzate,
potrebbe avere il seguente output:

@lilypond[line-width=10.0\cm]
\header { tagline = ##f }
\paper {
  tocActMarkup = \markup \large \column {
    \hspace #1
    \fill-line { \null \italic \fromproperty #'toc:text \null }
    \hspace #1
  }
}

tocAct =
#(define-music-function (text) (markup?)
   (add-toc-item! 'tocActMarkup text))

\book {
  \markuplist \table-of-contents
  \tocAct \markup { Atto Primo }
  \tocItem \markup { Coro. Viva il nostro Alcide }
  \tocItem \markup { Cesare. Presti omai l'Egizia terra }
  \tocAct \markup { Atto Secondo }
  \tocItem \markup { Sinfonia }
  \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore }
  \markup \null
}
@end lilypond

Ecco un esempio del comando @code{\fill-with-pattern} usato nel contesto di
un indice:

@verbatim
\paper {
  tocItemMarkup = \markup { \fill-line {
    \override #'(line-width . 70)
    \fill-with-pattern #1.5 #CENTER . \fromproperty #'toc:text \fromproperty #'toc:page
    }
  }
}
@end verbatim

@seealso
File installati:
@file{ly/toc-init.ly}.

@predefined
@funindex \table-of-contents
@code{\table-of-contents},
@funindex \tocItem
@code{\tocItem}.
@endpredefined


@node Lavorare coi file di input
@section Lavorare coi file di input
@translationof Working with input files

@menu
* Inclusione di file LilyPond::
* Edizioni diverse da un unico sorgente::
* Caratteri speciali::
@end menu


@node Inclusione di file LilyPond
@subsection Inclusione di file LilyPond
@translationof Including LilyPond files

@funindex \include
@cindex inclusione di file

Se un progetto è grande e complesso, conviene suddividerlo in file separati.
Per citare un altro file si usa

@example
\include "altrofile.ly"
@end example

La riga @code{\include "altrofile.ly"} equivale a incollare i contenuti
di @file{altrofile.ly} nel file corrente nel punto in cui appare il
comando @code{\include}.  Per esempio, in un progetto complesso si
possono scrivere file separati per ogni parte strumentale e creare
un file per l'@qq{intera partitura} che raccoglie i file dei singoli
strumenti. Di norma il file incluso definisce una serie di variabili
che poi diventano disponibili nel file della partitura completa. Le
sezioni contrassegnate con delle etichette nei file inclusi possono
essere usate in varie parti di una partitura, vedi
@ref{Edizioni diverse da un unico sorgente}.

I file nella directory di lavoro corrente possono essere citati indicando
semplicemente il nome del file dopo il comando @code{\include}. I file in altre
posizioni possono essere inclusi sia con un percorso assoluto che con un
percorso relativo (ma come separatore delle directory occorre usare la barra, o
slash, come in UNIX, piuttosto che la barra inversa, o backslash, come in
DOS/Windows).  Per esempio, se @file{cose.ly} si trova una directory prima
della directory di lavoro corrente, usare

@example
\include "../cose.ly"
@end example

@noindent
oppure se le parti orchestrali incluse si trovano tutte in una
sottodirectory chiamata @file{parti} all'interno della directory
corrente, usare

@example
\include "parti/VI.ly"
\include "parti/VII.ly"
@dots{} etc
@end example

I file che devono essere inclusi possono contenere essi stessi delle
dichiarazioni @code{\include}.  Per impostazione predefinita, queste
dichiarazioni @code{\include} di secondo livello non sono interpretate
finché non vengono portate nel file principale, dunque i nomi dei file
che specificano devono essere tutti relativi alla directory del file
principale, non alla directory del file incluso. Tuttavia tale comportamento
può essere cambiato globalmente tramite l'opzione @option{-drelative-includes}
da linea di comando (oppure agggiungendo @code{#(ly:set-option 'relative-includes #t)}
in cima al file di input principale).

Quando @code{relative-includes} viene impostato su @code{#t}, il percorso di
ogni comando @code{\include} sarà considerato relativo al file che contiene
quel comando.  Questo comportamento è raccomandato e diventerà il comportamento
predefinito in una versione futura di lilypond.

È possibile includere sia file relativi alla directory principale sia file
relativi a qualche altra directory impostando @code{relative-includes} su
@code{#t} o @code{#f} nei punti giusti dei file.  Per esempio, se è stata
creata una libreria generale, libA, che usa altri file inclusi dal file
di base di quella libreria, tali dichiarazioni @code{\include} dovranno
essere precedute da @code{#(ly:set-option 'relative-includes #t)} per poter
essere interpretate correttamente quando riportate nel file @code{.ly}
principale:

@example
libA/
  libA.ly
  A1.ly
  A2.ly
  @dots{}
@end example

@noindent
quindi il file di base, @code{libA.ly}, conterrà

@example
#(ly:set-option 'relative-includes #t)
\include "A1.ly"
\include "A2.ly"
@dots{}
% ritorna alle impostazioni predefinite
#(ly:set-option 'relative-includes #f)
@end example

Qualsiasi file @file{.ly} può quindi includere l'intera libreria
semplicemente con

@example
\include "~/libA/libA.ly"
@end example

Si possono ideare strutture di file più complesse facendo dei cambi nei
punti giusti.

È possibile includere dei file anche da una directory che si trova in un
percorso di ricerca specificato come opzione quando si lancia LilyPond da
linea di comando. I file inclusi possono allora essere specificati
usando soltanto il loro nome. Per esempio, per compilare con questo metodo
il file @file{principale.ly} che include i file di una sottodirectory
chiamata @file{parti}, entrare nella directory di @file{principale.ly} e
eseguire questo comando

@example
lilypond --include=parti principale.ly
@end example

e in principale.ly scrivere

@example
\include "VI.ly"
\include "VII.ly"
@dots{} etc
@end example

I file che devono essere inclusi in molte partiture possono essere
salvati nella directory di installazione di LilyPond @file{../ly}.  La
posizione di questa directory dipende dal tipo di installazione (vedi
@rlearning{Altre fonti di informazione}).  Questi file possono quindi
essere inclusi semplicemente nominandoli in una dichiarazione @code{\include}.
Questo è il modo in cui sono inclusi i file che dipendono dalla lingua,
come @file{english.ly}.

LilyPond include un certo numero di file quando si lancia il
programma.  Queste inclusioni non sono evidenti all'utente, ma i
file possono essere identificati eseguendo @code{lilypond --verbose} dalla
linea di comando.  Così si vedrà un elenco di percorsi e file che LilyPond
usa, insieme a tante altre informazioni.  I più importanti di questi file
sono trattati in @rlearning{Altre fonti di informazione}.  Tali file possono
essere modificati, ma le modifiche saranno perse quando si installa una
nuova versione di LilyPond.

Alcuni semplici esempi d'uso di @code{\include} si trovano in
@rlearning{Partiture e parti}.

@seealso
Manuale di apprendimento:
@rlearning{Altre fonti di informazione},
@rlearning{Partiture e parti}.

@knownissues
Se a un file incluso viene assegnato un nome identico a uno dei file di
installazione di LilyPond, quest'ultimo ha la precedenza.


@node Edizioni diverse da un unico sorgente
@subsection Edizioni diverse da un unico sorgente
@translationof Different editions from one source

Esistono vari metodi per generare versioni diverse di una partitura
dalla stessa sorgente di musica. Le variabili sono forse le più
utili per combinare lunghe sezioni musicali e/o note. Le etichette
(@emph{tag}) sono più utili per selezionare una sezione da varie
sezioni brevi alternative e possono essere usate anche per unire
insieme dei brani in punti diversi.

Qualsiasi metodo venga usato, la separazione delle note dalla struttura
della partitura permetterà di cambiare la struttura lasciando le note
intatte.

@menu
* Uso delle variabili::
* Uso delle etichette::
* Impostazioni globali::
@end menu

@node Uso delle variabili
@unnumberedsubsubsec Uso delle variabili
@translationof Using variables

@cindex variabili, uso delle

Se le sezioni musicali sono definite in variabili, possono essere
riutilizzate in varie parti della partitura, come è stato spiegato
in @rlearning{Organizzare i brani con le variabili}.  Per esempio, una
partitura vocale @notation{a cappella} spesso comprende, ai fini delle
prove, una riduzione per pianoforte delle parti, identiche alla musica
vocale, dunque la musica deve essere inserita una volta sola. La musica
definita in due variabili può essere combinata in un rigo, come è
spiegato in @ref{Combinazione automatica delle parti}. Ecco un esempio:

@lilypond[verbatim,quote]
sopranoMusic = \relative { a'4 b c b8( a) }
altoMusic = \relative { e'4 e e f }
tenorMusic = \relative { c'4 b e d8( c) }
bassMusic = \relative { a4 gis a d, }
allLyrics = \lyricmode { King of glo -- ry }
<<
  \new Staff = "Soprano" \sopranoMusic
  \new Lyrics \allLyrics
  \new Staff = "Alto" \altoMusic
  \new Lyrics \allLyrics
  \new Staff = "Tenore" {
    \clef "treble_8"
    \tenorMusic
  }
  \new Lyrics \allLyrics
  \new Staff = "Basso" {
    \clef "bass"
    \bassMusic
  }
  \new Lyrics \allLyrics
  \new PianoStaff <<
    \new Staff = "Destra" {
      \partcombine
      \sopranoMusic
      \altoMusic
    }
    \new Staff = "Sinistra" {
      \clef "bass"
      \partcombine
      \tenorMusic
      \bassMusic
    }
  >>
>>
@end lilypond

Partiture separate che mostrino soltanto le parti vocali o soltanto
quelle per pianoforte possono essere prodotte semplicemente cambiando
le dichiarazioni della struttura, lasciando la notazione musicale
intatta.

Nel caso di partiture lunghe, conviene mettere le definizioni delle
variabili in file separati da includere, vedi
@ref{Inclusione di file LilyPond}.

@node Uso delle etichette
@unnumberedsubsubsec Uso delle etichette
@translationof Using tags

@funindex \tag
@funindex \keepWithTag
@funindex \removeWithTag
@cindex tag
@cindex etichetta
@cindex tenere la musica etichettata
@cindex togliere la musica etichettata

Il comando @code{\tag #'@var{parteA}} contrassegna un'espressione
musicale col nome @var{parteA}.
Le espressioni contrassegnate in questo modo possono essere incluse o
rimosse in base al loro nome successivamente, usando
@code{\keepWithTag #'@var{nome}} oppure
@code{\removeWithTag #'@var{nome}}.  Il risultato dell'applicazione di
questi filtri alla musica etichettata è il seguente:
@multitable @columnfractions .5 .5
@headitem Filtro
  @tab Risultato
@item
Musica etichettata preceduta da @code{\keepWithTag #'@var{nome}} o
       @code{\keepWithTag #'(@var{nome1} @var{nome2}@dots{})}
@tab Viene inclusa la musica non etichettata e quella etichettata con
     uno dei nomi specificati; la musica etichettata con un nome
     etichetta diverso viene esclusa.
@item
Musica etichettata preceduta da @code{\removeWithTag #'@var{nome}} o
       @code{\removeWithTag #'(@var{nome1} @var{nome2}@dots{})}
@tab Viene inclusa la musica non etichettata e quella non etichettata con
     uno dei nomi specificati; la musica etichettata con uno dei nomi
     specificati viene esclusa.
@item
Musica etichettata non preceduta da @code{\keepWithTag} o
@code{\removeWithTag}
@tab Viene inclusa tutta la musica etichettata e non etichettata.
@end multitable

Gli argomenti dei comandi @code{\tag}, @code{\keepWithTag} e
@code{\removeWithTag} devono essere un simbolo o una lista di
simboli (come @code{#'score} o @code{#'(violinoI violinoII}),
seguiti da un'espressione musicale.  Se @emph{e solo se} i simboli
sono identificatori LilyPond validi (solo caratteri alfabetici, nessun
numero, trattino o trattino basso) che non possono essere confusi con
le note, si può omettere il @code{#'} e, come scorciatoia, una lista di
simboli può usare il punto come separatore: quindi
@code{\tag #'(violinoI violinoII)} può essere riscritto come
@code{\tag violinoI.violinoII}.  Lo stesso vale per
@code{\keepWithTag} e @code{\removeWithTag}.

Nell'esempio seguente, vediamo due versioni di un brano musicale,
una che mostra i trilli con la notazione abituale e l'altra con i
i trilli espansi esplicitamente:

@lilypond[verbatim,quote]
musica = \relative {
  g'8. c32 d
  \tag #'trilli { d8.\trill }
  \tag #'espandi { \repeat unfold 3 { e32 d } }
  c32 d
 }

\score {
  \keepWithTag #'trilli \musica
}
\score {
  \keepWithTag #'espandi \musica
}
@end lilypond

@noindent
Altrimenti, talvolta è più facile escludere sezioni musicali:

@lilypond[verbatim,quote]
musica = \relative {
  g'8. c32 d
  \tag #'trilli { d8.\trill }
  \tag #'espandi {\repeat unfold 3 { e32 d } }
  c32 d
 }

\score {
  \removeWithTag #'espandi
  \musica
}
\score {
  \removeWithTag #'trilli
  \musica
}
@end lilypond

Il filtro delle etichette può essere applicato a articolazioni, testo, etc.
scrivendo

@example
-\tag #'@var{tua-etichetta}
@end example

prima di un'articolazione.  L'esempio seguente definisce una nota
con un'indicazione di diteggiatura condizionale e una nota con un
commento condizionale:

@example
c1-\tag #'dito ^4
c1-\tag #'attenzione ^"Fai attenzione!"
@end example

Varie etichette possono essere associate a delle espressioni tramite molteplici
@code{\tag}, o unendo molteplici etichette in una lista di simboli:

@lilypond[quote,verbatim]
musica = \relative c'' {
  \tag #'a \tag #'entrambi { a4 a a a }
  \tag #'(b entrambi) { b4 b b b }
}
<<
\keepWithTag #'a \musica
\keepWithTag #'b \musica
\keepWithTag #'entrambi \musica
>>
@end lilypond

Si possono applicare molteplici filtri @code{\removeWithTag} a una singola
espressione musicale per togliere varie sezioni etichettate con nomi
diversi. Altrimenti si può usare un solo @code{\removeWithTag} seguito da
una lista di etichette.

@lilypond[verbatim,quote]
musica = \relative c'' {
  \tag #'A { a4 a a a }
  \tag #'B { b4 b b b }
  \tag #'C { c4 c c c }
  \tag #'D { d4 d d d }
}
\new Voice {
  \removeWithTag #'B
  \removeWithTag #'C
  \musica
  \removeWithTag #'(B C)
  \musica
}
@end lilypond

Applicando due o più filtri @code{\keepWithTag} su una singola espressione
musicale toglieranno @emph{tutte} le sezioni etichettate.  Il primo filtro
toglie tutto tranne la sezione menzionata e qualsiasi filtro successivo toglie
il resto.  Usando un singolo comando @code{\keepWithTag} con una lista di
varie etichette vengono rimosse soltanto le sezioni etichettate non specificate
in quella lista.

@lilypond[verbatim,quote]
music = \relative c'' {
  \tag #'violinoI { a4 a a a }
  \tag #'violinoII { b4 b b b }
  \tag #'viola { c4 c c c }
  \tag #'cello { d4 d d d }
}

\new Staff {
  \keepWithTag #'(violinI violinII)
  \music
}
@end lilypond

@noindent
farà apparire le etichette @var{violinoI} e @var{violinoII} ma non
@var{viola} o @var{cello}.

@cindex etichette, gruppi di
@funindex \tagGroup
Mentre @code{\keepWithTag} è comodo con @emph{un} gruppo di alternative, la
rimozione di musica contrassegnata con etichette @emph{indipendenti} è
problematico se si usano le etichette con diverse finalità.  In questo
caso, è possibile dichiarare @q{gruppi} di etichette:

@example
\tagGroup #'(violinoI violinoII viola cello)
@end example

dichiara che queste etichette appartengono a un gruppo.

@example
\keepWithTag #'violinoI @dots{}
@end example

@noindent
ora mostrerà soltanto la musica contrassegnata con le etichette presenti nel
gruppo cui appartiene @code{violinoI} e verrà tolta la musica contrassegnata
con una delle @emph{altre} etichette.

@lilypond[verbatim,quote]
music = \relative {
  \tagGroup #'(violinoI violinoII viola cello)
  \tag #'violinoI { c''4^"violinI" c c c }
  \tag #'violinoII { a2 a }
  \tag #'viola { e8 e e2. }
  \tag #'cello { d'2 d4 d }
  R1^"non contrassegnato"
}

\new Voice {
  \keepWithTag #'violinoI
  \music
}
@end lilypond

Quando si usa il comando @code{\keepWithTag}, sono visibili solo le etichette
provenienti dai gruppi cui appartengono le etichette specificate dopo il comando.


@funindex \pushToTag
@funindex \appendToTag
@cindex combinare musica contrassegnata con etichette

Talvolta si ha necessità di combinare insieme della musica in un punto preciso
di un'espressione musicale esistente. @code{\pushToTag} e @code{\appendToTag}
permettono di aggiungere materiale prima o dopo gli elementi di un costrutto
musicale esistente.  Non tutti i costrutti musicali hanno elementi, ma nel caso
di musica sequenziale e simultanea si può esserne sicuri:

@lilypond[verbatim,quote]
music = { \tag #'qui { \tag #'qui <<c''>> } }

{
  \pushToTag #'qui c'
  \pushToTag #'qui e'
  \pushToTag #'qui g' \music
  \appendToTag #'qui c'
  \appendToTag #'qui e'
  \appendToTag #'qui g' \music
}
@end lilypond

Entrambi i comandi prendono tre argomenti: un'etichetta, il materiale da
combinare ad ogni occorenza dell'etichetta e l'espressione contrassegnata.

@seealso
Manuale di apprendimento:
@rlearning{Organizzare i brani con le variabili}.

Guida alla notazione:
@ref{Combinazione automatica delle parti},
@ref{Inclusione di file LilyPond}.

@knownissues
Se si usa @code{\relative} prima di un'espressione musicale ottenuta
filtrando la musica con @code{\keepWithTag} o @code{\removeWithTag},
i rapporti di ottava potrebbero cambiare, perché verranno considerate
solo le altezze rimaste nell'espressione filtrata. Per evitare questo
rischio, usare @code{\relative} prima di @code{\keepWithTag} o
@code{\removeWithTag}, in modo che @code{\relative} agisca su tutte
le altezze prima del filtro.


@node Impostazioni globali
@unnumberedsubsubsec Impostazioni globali
@translationof Using global settings

@cindex includere le impostazioni

È possibile includere impostazioni globali da un altro file:

@example
lilypond -dinclude-settings=MIE_IMPOSTAZIONI.ly MIA_PARTITURA.ly
@end example

Gruppi di impostazioni come dimensioni del foglio e tipo di carattere
possono essere salvati in file separati. Ciò permette di ottenere diverse
edizioni dalla stessa partitura o di applicare delle impostazioni
tipiche a molte partiture, semplicemente indicando il relativo file
delle impostazioni.

Questa tecnica è la stessa usata per i fogli di stile, trattati
in @rlearning{Fogli di stile}.

@seealso
Manuale di apprendimento:
@rlearning{Organizzare i brani con le variabili},
@rlearning{Fogli di stile}.

Guida alla notazione:
@ref{Inclusione di file LilyPond}.


@node Caratteri speciali
@subsection Caratteri speciali
@translationof Special characters

@cindex carattere speciale
@cindex carattere non-ASCII

@menu
* Codifica del testo::
* Unicode::
* Alias ASCII::
@end menu


@node Codifica del testo
@unnumberedsubsubsec Codifica del testo
@translationof Text encoding

@cindex UTF-8

LilyPond usa il repertorio di caratteri definito dall'Unicode Consortium
e dalla ISO/IEC 10646.  Questo sistema di codifica definisce un nome
e un numero univoci per gli insiemi di caratteri utilizzati in tutte
le lingue moderne e anche in molte altre.  Unicode può essere implementato
in varie codifiche diverse.  LilyPond usa la codifica UTF-8 (UTF sta
per Unicode Transformation Format) che rappresenta tutti i comuni
caratteri latini con un byte, e gli altri caratteri con un formato di
lunghezza variabile fino a quattro byte.

L'aspetto grafico dei caratteri è determinato dai glifi definiti
nei tipi di carattere disponibili - un tipo di carattere definisce
la mappatura tra un sottoinsieme dei numeri Unicode e i glifi.
LilyPond usa la libreria Pango per rappresentare e formattare i
testi multilingua.

LilyPond non esegue alcuna conversione della codifica dell'input. Ciò
significa che qualsiasi testo, sia esso un titolo, un testo vocale
o un'istruzione musicale contenente caratteri non-ASCII, deve essere
codificato in UTF-8.  Il modo più semplice per inserire tale testo è
usare un editor che sappia riconoscere la codifica Unicode e salvare
il file con la codifica UTF-8.  La maggior parte dei moderni editor
supporta la codifica UTF-8, per esempio vim, Emacs, jEdit e Gedit.
Tutti i sistemi MS Windows successivi a NT usano Unicode come codifica
dei caratteri nativa, quindi perfino Notepad può modificare e salvare
un file in formato UTF-8.  Un'alternativa più efficiente per
Windows è BabelPad.

Se un file di input LilyPond contenente un caratter non-ASCII non viene
salvato in formato UTF-8, apparirà il seguente messaggio di errore:

@example
FT_Get_Glyph_Name () error: invalid argument
@end example

Ecco un esempio che mostra del testo cirillico, ebraico e portoghese:

@c NOTE: No verbatim in the following example as the code does not
@c display correctly in PDF Font settings for Cyrillic and Hebrew

@lilypond[quote]
% I tipi di carattere Linux Libertine contengono i glifi cirillici e ebraici.
\paper {
  #(define fonts
    (set-global-fonts
     #:roman "Linux Libertine O,serif"
     #:sans "Linux Biolinum O,sans-serif"
     #:typewriter "Linux Libertine Mono O,monospace"
   ))
}

% Cyrillic
bulgarian = \lyricmode {
  Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон.
}

% Hebrew
hebrew = \lyricmode {
  זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן.
}

% Portoghese
portuguese = \lyricmode {
  à vo -- cê uma can -- ção legal
}

\relative {
  c'2 d e f g f e
}
\addlyrics { \bulgarian }
\addlyrics { \hebrew }
\addlyrics { \portuguese }
@end lilypond


@node Unicode
@unnumberedsubsubsec Unicode

@cindex Unicode

Per inserire un singolo carattere per il quale è noto il codice Unicode ma
che non è disponibile nell'editor in uso, usare @code{\char ##xhhhh} o
@code{\char #dddd} dentro un blocco @code{\markup}, dove @code{hhhh} è il
codice esadecimale del carattere richiesto e @code{dddd} è il valore
decimale corrispondente. Gli zero iniziali possono essere omessi, ma di
norma nella rappresentazione esadecimale si specificano tutti e quattro
i caratteri. (Fare attenzione al fatto che la codifica UTF-8 del codice
@emph{non} deve essere usata dopo @code{\char}, perché le codifiche UTF-8
contengono bit extra che indicano il numero di ottetti.) Le tabelle dei
codici Unicode e un indice dei nomi dei caratteri col proprio codice
esadecimale sono disponibili sul sito dell'Unicode Consortium,
@uref{http://www.unicode.org/}.

Per esempio, @code{\char ##x03BE} e @code{\char #958} corrispondono
entambi al carattere Unicode U+03BE, che ha il nome Unicode
@qq{Greek Small Letter Xi}.

Qualsiasi codice Unicode può essere inserito in questo modo e se tutti
i caratteri speciali sono inseriti in questo formato non è necessario
salvare il file di input in formato UTF-8.  Ovviamente, un tipo di
carattere contenente tutti questi caratteri codificati deve essere
installato e disponibile per LilyPond.

L'esempio seguente mostra valori esadecimali Unicode inseriti in
quattro posti diversi: come numero di chiamata, come articolazione, nel
testo vocale e come testo separato sotto il brano:

@lilypond[quote,verbatim]
\score {
  \relative {
    c''1 \mark \markup { \char ##x03EE }
    c1_\markup { \tiny { \char ##x03B1 " a " \char ##x03C9 } }
  }
  \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } }
}
\markup { "Copyright 2008--2020" \char ##x00A9 }
@end lilypond

@cindex copyright, segno
@cindex diritto d'autore

Per inserire il segno del copyright nell'apposito campo usare:

@example
\header @{
  copyright = \markup @{ \char ##x00A9 "2008" @}
@}
@end example


@node Alias ASCII
@unnumberedsubsubsec Alias ASCII
@translationof ASCII aliases

È possibile includere una lista di alias ASCII per i caratteri speciali:

@lilypond[quote,verbatim]
\paper {
  #(include-special-characters)
}

\markup "&flqq; &ndash; &OE;uvre incomplète&hellip; &frqq;"

\score {
  \new Staff { \repeat unfold 9 a'4 }
  \addlyrics {
    Fun -- ziona an -- che nel~tes -- to: &ndash;_&OE;&hellip;
  }
}

\markup \column {
  "La sostituzione può essere disabilitata:"
  "&ndash; &OE; &hellip;"
  \override #'(replacement-alist . ()) "&ndash; &OE; &hellip;"
}
@end lilypond

Si possono creare i propri alias, sia globalmente:

@lilypond[quote,verbatim]
\paper {
  #(add-text-replacements!
    '(("100" . "hundred")
      ("dpi" . "dots per inch")))
}
\markup "A 100 dpi."
@end lilypond

che localmente:

@lilypond[quote,verbatim]
\markup \replace #'(("100" . "hundred")
                    ("dpi" . "dots per inch")) "A 100 dpi."
@end lilypond

@seealso
Guida alla notazione:
@ref{Elenco dei caratteri speciali}.

File installati:
@file{ly/text-replacements.ly}.


@node Controllo dell'output
@section Controllo dell'output
@translationof Controlling output

@menu
* Estrarre frammenti musicali::
* Saltare la musica già corretta::
* Formati di output alternativi::
* Cambiare il tipo di carattere della notazione::
@end menu

@funindex clip-regions
@cindex frammento musicale

@node Estrarre frammenti musicali
@subsection Estrarre frammenti musicali
@translationof Extracting fragments of music

È possibile creare output separati di uno o più frammenti di una
partitura definendo i punti della musica da estrarre nel blocco
@code{\layout} del file di input tramite la funzione @code{clip-regions},
e poi eseguendo LilyPond con l'opzione @option{-dclip-systems};

@example
\layout @{
  clip-regions
  = #(list
      (cons
       (make-rhythmic-location 5 1 2)
       (make-rhythmic-location 7 3 4)))
@}
@end example

@noindent
Questo esempio estrarrà dal file di input un unico frammento che
@emph{inizia} dopo una minima nella quinta misura (@code{5 1 2}) e
@emph{termina} dopo la terza semiminima nella settima misura
(@code{7 3 4}).

Si possono estrarre ulteriori frammenti aggiungendo altre coppie di
@code{make-rhythmic-location} alla lista @code{clip-regions} del
blocco @code{\layout}.

Ciascun frammento musicale verrà salvato in formato @code{EPS}, ma
se necessario si possono creare anche altri formati come @code{PDF} o
@code{PNG}. La musica estratta viene generata come se fosse letteralmente
@q{tagliata} dalla partitura a stampa originale; ciò significa che se
un frammento supera una o più linee, verrà creato un file di output
separato per ciascuna linea.

@seealso
Guida alla notazione:
@ref{Il blocco layout}.

Utilizzo:
@rprogram{Uso da linea di comando}.



@node Saltare la musica già corretta
@subsection Saltare la musica già corretta
@translationof Skipping corrected music


@funindex skipTypesetting
@funindex showFirstLength
@funindex showLastLength

Quando si inserisce o si copia della musica, di solito è utile visualizzare
e correggere soltanto la musica vicina alla fine (ovvero dove si stanno
inserendo le note). Per velocizzare il processo di correzione, è possibile
far sì che il compositore tipografico salti tutte le misure eccetto le
ultime. Per farlo basta inserire per esempio

@example
showLastLength = R1*5
\score @{ @dots{} @}
@end example

@noindent
nel file sorgente.  In questo modo verranno elaborate soltanto le ultime
5 misure (assumendo che il tempo sia 4/4) di ogni blocco @code{\score}
nel file di input. Per i brani più lunghi, elaborare solo una piccola
parte è spesso molto più veloce di elaborarli completamente. Se si lavora
sull'inizio di un brano già scritto (per esempio per aggiungere una nuova
parte), si userà invece la proprietà @code{showFirstLength}.


È possibile saltare parti di una partitura in un modo più preciso tramite
la proprietà @code{Score.skipTypesetting}.  Quando è impostata su vero, la
composizione tipografica è disattivata.

Questa proprietà viene usata anche per controllare l'output da inviare al
file MIDI.  Attenzione: salta tutti gli eventi, inclusi i cambi di tempo e
di strumento.

@lilypond[quote,ragged-right,verbatim]
\relative c' {
  c1
  \set Score.skipTypesetting = ##t
  \tempo 4 = 80
  c4 c c c
  \set Score.skipTypesetting = ##f
  d4 d d d
}
@end lilypond

Nella musica polifonica, @code{Score.skipTypesetting} agisce su tutte le
voci e su tutti i righi, facendo risparmiare tempo ulteriormente.

@node Formati di output alternativi
@subsection Formati di output alternativi
@translationof Alternative output formats

@cindex scalable vector graphics, output
@cindex SVG, output
@cindex encapsulated postscript, output
@cindex EPS, output

I formati di output predefiniti per la partitura stampata sono Portable
Document Format (PDF) e PostScript (PS).  Sono disponibili anche i formati
di output Portable Network Graphics (PNG), Scalable Vector Graphics (SVG)
e Encapsulated PostScript (EPS) attraverso le opzioni da linea di comando,
vedi @rprogram{Opzioni di base della linea di comando per LilyPond}.

@menu
* Output SVG::
@end menu

@node Output SVG
@unnumberedsubsubsec Output SVG
@translationof SVG Output

L'output SVG può contenere opzionalmente dei metadati per gli oggetti
grafici (grob) come teste di nota, pause, etc.  Questi metadati possono
essere attributi SVG standard come @code{id} e @code{class} oppure attributi
personalizzati e non standard.  Gli attributi e i loro valori si specificano
sovrascrivendo la proprietà @code{output-attributes} di un grob con una
lista associativa Scheme (alist).  I valori possono essere numeri, stringhe
o simboli.  Per esempio:

@example
@{
  \once \override NoteHead.output-attributes =
  #'((id . 123)
     (class . "questo quello")
     (data-testo . qualcosa))
  c
@}
@end example

@noindent
L'input precedente produrrà il seguente elemento @code{<g>} (gruppo) nel
file SVG:

@example
<g id="123" class="questo quello" data-testo="qualcosa">
  ...Elementi SVG del grob NoteHead...
</g>
@end example

@noindent
L'elemento @code{<g>} contiene tutti gli elementi SVG di un certo grob (alcuni
grob generano molteplici elementi SVG).  Nella sintassi SVG il prefisso
@code{data-} è utilizzato per gli attributi di metadati personalizzati
non standard.


@node Cambiare il tipo di carattere della notazione
@subsection Cambiare il tipo di carattere della notazione
@translationof Replacing the notation font

Gonville è un insieme di glifi alternativo a @emph{Feta}, parte del font
Emmentaler, e può essere usato in LilyPond.  Può essere scaricato da:
@example
@uref{http://www.chiark.greenend.org.uk/~sgtatham/gonville/ ,http://www.chiark.greenend.org.uk/~sgtatham/gonville/}
@end example

Ecco alcune battute di musica che usa Gonville:

@sourceimage{Gonville_after,15cm,,}

E alcune battute di musica che usa i glifi Feta di LilyPond:

@sourceimage{Gonville_before,15cm,,}

@subsubheading Instruzioni di installazione

Scaricare e estrarre i file dei font.
Copiare i file
@file{gonville-11.otf},
@file{gonville-13.otf},
@file{gonville-14.otf},
@file{gonville-16.otf},
@file{gonville-18.otf},
@file{gonville-20.otf},
@file{gonville-23.otf},
@file{gonville-26.otf} e @file{gonville-brace.otf}
in @file{@dots{}/share/lilypond/current/fonts/otf} o
@file{@dots{}/share/lilypond/@var{X.Y.Z}/fonts/otf}.
Se sono presenti file @file{gonville-*.svg} e @file{gonville-*.woff},
copiarli in @file{@dots{}/share/lilypond/current/fonts/svg} o
@file{@dots{}/share/lilypond/@var{X.Y.Z}/fonts/svg}.
Maggiori informazioni in @rlearning{Altre fonti di informazione}.

Nota: i file @file{gonville-*.otf} sono utilizzati dal backend
@code{ps} e @code{eps} (per la creazione di file PDF e PostScript).
I file @file{gonville-*.svg} sono utilizzati dal backend
@code{svg} quando non è attiva l'opzione @code{svg-woff}.
I file @file{gonville-*.woff} sono utilizzati dal backend
@code{svg} quando è attiva l'opzione @code{svg-woff}.
Maggiori informazioni in @rprogram{Opzioni avanzate della linea di comando per LilyPond}.

La sintassi seguente imposta il font Gonville come font della notazione
(generale e delle parentesi).

@example
\paper @{
  #(define fonts
    (set-global-fonts
     #:music "gonville"
     #:brace "gonville"
   ))
@}
@end example

Nota: ogni chiamata della funzione @code{set-global-fonts} reimposta completamente
i font sia della notazione principale che del testo. Se una categoria non è
specificata, allora verrà usato il font predefinito per quella categoria.
Ogni chiamata di @code{set-global-fonts} cambia i font di ciascun blocco
@code{\book} che la segue, sia esso creato esplicitamente o implicitamente.
Ciò significa che ogni blocco @code{\book} può avere il suo insieme di font
principali usando @code{set-global-fonts} prima di esso.
Maggiori informazioni in @ref{Tipi di carattere per l'intero documento}.

@seealso
Manuale di apprendimento:
@rlearning{Altre fonti di informazione}.

Guida alla notazione:
@ref{Il font Emmentaler},
@ref{Tipi di carattere per l'intero documento}.

@knownissues
Gonville non può essere usato per scrivere notazione in @q{musica antica}
ed è probabile che i nuovi glifi introdotti in rilasci successivi di
LilyPond non esistano in Gonville.  Fare riferimento al sito web dell'autore
per maggiori informazioni su queste e altre problematiche, inclusa la
licenza di Gonville.


@subsubheading Altri font della notazione

Se si hanno altri font della notazione come @file{@var{nomefont}-*.otf},
@file{@var{nomefont}-*.svg} e @file{@var{nomefont}-*.woff},
si possono usare nello stesso modo che abbiamo visto con Gonville.

Ovvero si copiano i file
@file{@var{nomefont}-*.otf}
in @file{@dots{}/share/lilypond/current/fonts/otf} o
@file{@dots{}/share/lilypond/@var{X.Y.Z}/fonts/otf}.
E i file @file{@var{nomefont}-*.svg} e @file{@var{nomefont}-*.woff}, se
presenti, in @file{@dots{}/share/lilypond/current/fonts/svg} o
@file{@dots{}/share/lilypond/@var{X.Y.Z}/fonts/svg}.

Nota: per il momento, LilyPond richiede che i nomi dei file dei font abbiano
i seguenti suffissi, che devono essere tutti presenti nelle cartelle di
installazione menzionate sopra perché possa funzionare correttamente:
@file{-11}, @file{-13}, @file{-14}, @file{-16},
@file{-18}, @file{-20}, @file{-23}, @file{-26}, @file{-brace}.
Per esempio, @file{emmentaler-11.otf}, @file{emmentaler-20.svg}
e @file{emmentaler-brace.woff}, etc.

La sintassi seguente imposta il font @var{nomefont} come font della notazione
(generale e delle parentesi).

@example
\paper @{
  #(define fonts
    (set-global-fonts
     #:music "@var{fontname}" ; nome del file del font senza suffisso né estensione
     #:brace "@var{fontname}" ; nome del file del font senza suffisso né estensione
   ))
@}
@end example

Nota: per le categorie @code{music} e @code{brace}, specificare il nome del
file del font senza suffisso né estensione.



@node Creazione dell'output MIDI
@section Creazione dell'output MIDI
@translationof Creating MIDI output

@cindex audio
@cindex MIDI

LilyPond è in grado di produrre dei file conformi allo standard MIDI
(Musical Instrument Digital Interface) e dunque permette di fare un
controllo uditivo dell'output musicale (con l'aiuto di un'applicazione
o un dispositivo che comprendano il MIDI).  L'ascolto dell'output MIDI
può aiutare anche a individuare errori, come note inserite in modo
erroneo o note senza alterazioni e così via.

I file MIDI non contengono audio (come i file AAC, MP3 o Vorbis), bensì
richiedono un software esterno che produca il suono a partire da essi.

@menu
* Notazione supportata nel MIDI::
* Notazione non supportata nel MIDI::
* Il blocco MIDI::
* Gestione delle dinamiche nel MIDI::
* Uso degli strumenti MIDI::
* Uso delle ripetizioni nel MIDI::
* Mappatura dei canali MIDI::
* Proprietà di contesto per gli effetti MIDI::
* Miglioramento dell'output MIDI::
@end menu

@cindex MIDI, notazione supportata

@node Notazione supportata nel MIDI
@subsection Notazione supportata nel MIDI
@translationof Supported notation for MIDI

I seguenti elementi della notazione musicale saranno resi nell'output MIDI
usando le capacità predefinite di LilyPond:

@itemize
@item Respiri
@item Accordi inseriti come nomi degli accordi
@item Crescendi e decrescendi su varie note.  Il volume viene modificato
in modo proporzionato fra i due estremi
@item Segni di dinamica da @code{ppppp} a @code{fffff}, inclusi
@code{mp}, @code{mf} e @code{sf}
@item Microtoni ma @emph{non} gli accordi microtonali.  È necessario anche
un lettore MIDI che supporti la @qq{piegatura} (@emph{bending}) delle altezze.
@item Testo vocale
@item Altezze
@item Ritmi inseriti come durate, inclusi i gruppi irregolari
@item Articolazioni @q{semplici}; staccato, staccatissimo, accento, marcato
e portato
@item Cambi di tempo tramite la funzione @code{\tempo}
@item Legature di valore
@item Tremoli che @emph{non} sono inseriti con un valore
@q{@code{:}[@var{numero}]}
@end itemize

Alcuni effetti, come panning, bilanciamento, espressione, riverbero e chorus, si
gestiscono impostando le proprietà di contesto, vedi
@ref{Proprietà di contesto per gli effetti MIDI}.

Se si usa lo script @file{articulate}, anche i seguenti elementi della
notazione musicale saranno presenti nell'output MIDI:

@itemize
@item Appoggiature.  Servono a rubare metà del valore della nota che le
segue (senza considerare i punti). Per esempio:

@example
\appoggiatura c8 d2.
@end example

@noindent
Il c avrà il valore di una semiminima.

@item Ornamenti (mordenti, trilli, gruppetti, etc.)
@item Rallentando, accelerando, ritardando e a tempo
@item Legature di portamento, incluse le legature di frase
@item Tenuto
@end itemize

@noindent
Vedi @ref{Miglioramento dell'output MIDI}.

@cindex MIDI, notazione non supportata

@node Notazione non supportata nel MIDI
@subsection Notazione non supportata nel MIDI
@translationof Unsupported notation for MIDI

I seguenti elementi della notazione musicale non possono essere trasferiti
nel file MIDI:

@itemize
@item Articolazioni diverse da staccato, staccatissimo, accento, marcato
e portato
@item Crescendi e decrescendi su una @emph{singola} nota
@item Corona
@item Basso numerato (continuo)
@item Glissandi
@item Portamenti indeterminati verso il basso e verso l'alto
@item Accordi microtonali
@item Ritmi inseriti come note, per esempio lo swing
@item Cambi di tempo senza usare @code{\tempo} (per esempio, inseriti come note)
@item Tremoli che @emph{sono} inseriti con un valore @q{@code{:}[@var{numero}]}
@end itemize


@node Il blocco MIDI
@subsection Il blocco MIDI
@translationof The MIDI block

@cindex MIDI, blocco
@cindex blocco MIDI

Per creare un file MIDI da un file di input LilyPond, inserire un blocco
@code{\midi}, che può essere vuoto, all'interno di un blocco @code{\score};

@example
\score @{
  @var{@dots{} musica @dots{}}
  \layout @{ @}
  \midi @{ @}
@}
@end example

@warning{ Un blocco @code{@bs{}score} che, oltre alla musica, contenga
soltanto un blocco @code{@bs{}midi} (ovvero @emph{sia privo} del blocco
@code{@bs{}layout}), produrrà come output soltanto file MIDI e nessun
file visuale.}

L'estensione predefinita del file di output (@code{.midi}) può essere
modificata tramite l'opzione @code{-dmidi-extension} del comando
@code{lilypond}:

@example
lilypond -dmidi-extension=mid MyFile.ly
@end example

Altrimenti, aggiungere la seguente espressione Scheme prima dell'inizio
dei blocchi @code{\book}, @code{\bookpart} o @code{\score}.  Vedi
@ref{Struttura del file}.

@example
#(ly:set-option 'midi-extension "mid")
@end example

@seealso
Guida alla notazione:
@ref{Struttura del file},
@ref{Creazione di metadati per i file di output}.

File installati:
@file{scm/midi.scm}.

@knownissues
Sono disponibili quindici canali MIDI e un canale ulteriore (#10) per
le percussioni.  I righi sono assegnati ai canali in sequenza: in una
partitura di più di quindici righi, i righi extra condivideranno
(senza sovrascriverlo) lo stesso canale MIDI. Ciò potrebbe essere un
problema se i righi in questione sono impostati con proprietà MIDI in
conflitto e basate sul canale, come ad esempio diversi strumenti MIDI.

L'uso di un blocco @code{midi} con notazione polimetrica potrebbe produrre
avvisi imprevisti di controllo della battuta.  In questo caso occorre
spostare @code{Timing_translator} dal contesto @code{Score} al contesto
@code{Staff} all'interno del blocco @code{midi}.

@lilypond[verbatim]
\midi {
  \context {
    \Score
    \remove "Timing_translator"
  }
  \context {
     \Staff
     \consists "Timing_translator"
  }
}
@end lilypond


@node Gestione delle dinamiche nel MIDI
@subsection Gestione delle dinamiche nel MIDI
@translationof Controlling MIDI dynamics

È possile regolare il volume MIDI complessivo, il volume relativo dei
segni di dinamica e il volume relativo dei diversi strumenti.

Le dinamiche vengono trasferite automaticamente sui livelli di volume nella
gamma di volume MIDI disponibile, mentre crescendi e decrescendi variano
il volume gradualmente tra i loro due estremi.  È possibile regolare il
volume relativo delle dinamiche e i livelli del volume complessivo dei
diversi strumenti.

@menu
* Dinamiche nel MIDI::
* Impostazione del volume MIDI::
* Impostazione delle proprietà del blocco MIDI::
@end menu

@cindex volume MIDI
@cindex MIDI, volume
@cindex equalizzazione MIDI
@cindex MIDI, equalizzazione
@cindex dinamiche nel MIDI
@cindex MIDI, dinamiche

@node Dinamiche nel MIDI
@unnumberedsubsubsec Dinamiche nel MIDI
@translationof Dynamic marks in MIDI

Solo i segni di dinamica compresi tra @code{ppppp} e @code{fffff}, inclusi
@code{mp}, @code{mf} e @code{sf} hanno dei valori assegnati.  Questo valore
viene poi applicato al valore della gamma del volume MIDI complessivo per
ottenere il volume finale incluso nell'output MIDI per quella particolare
dinamica. Le frazioni predefinite vanno da 0.25 per @notation{ppppp} a
0.95 per @notation{fffff}. L'insieme completo di dinamiche e delle loro
frazioni associate si trova in @file{scm/midi.scm}.

@cindex dinamiche personalizzate nel MIDI
@cindex MIDI, dinamiche personalizzate
@snippets
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{creating-custom-dynamics-in-midi-output.ly}

File installati:
@file{ly/script-init.ly}
@file{scm/midi.scm}.

Frammenti:
@rlsr{MIDI}.

Guida al funzionamento interno:
@rinternals{Dynamic_performer}.


@node Impostazione del volume MIDI
@unnumberedsubsubsec Impostazione del volume MIDI
@translationof Setting MIDI volume

I valori minimo e massimo del volume complessivo delle dinamiche MIDI sono
regolati dalle proprietà @code{midiMinimumVolume} e @code{midiMaximumVolume} nel
livello @code{Score}.  Tali proprietà hanno effetto soltanto all'inizio di
una voce e sui segni di dinamica.  La frazione corrispondente a ciascun
segno di dinamica viene modificata con la seguente formula:

@example
midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) * frazione
@end example

Nell'esempio seguente la gamma dinamica del volume MIDI complessivo
è limitata alla gamma @code{0.2} - @code{0.5}.

@example
\score @{
  <<
    \new Staff @{
      \set Staff.midiInstrument = "flauto"
      @var{@dots{} musica @dots{}}
    @}
    \new Staff @{
      \set Staff.midiInstrument = "clarinetto"
      @var{@dots{} musica @dots{}}
    @}
  >>
  \midi @{
    \context @{
      \Score
      midiMinimumVolume = #0.2
      midiMaximumVolume = #0.5
    @}
  @}
@}
@end example

Una semplice equalizzazione degli strumenti MIDI si può ottenere impostando
le proprietà @code{midiMinimumVolume} e @code{midiMaximumVolume} nel
contesto @code{Staff}.

@example
\score @{
  \new Staff @{
    \set Staff.midiInstrument = "flauto"
    \set Staff.midiMinimumVolume = #0.7
    \set Staff.midiMaximumVolume = #0.9
    @var{@dots{} musica @dots{}}
  @}
  \midi @{ @}
@}
@end example

In caso di partiture con molti righi e molti strumenti MIDI, i volumi relativi
di ogni strumento possono essere impostati individualmente;

@example
\score @{
  <<
    \new Staff @{
      \set Staff.midiInstrument = "flauto"
      \set Staff.midiMinimumVolume = #0.7
      \set Staff.midiMaximumVolume = #0.9
      @var{@dots{} musica @dots{}}
    @}
    \new Staff @{
      \set Staff.midiInstrument = "clarinetto"
      \set Staff.midiMinimumVolume = #0.3
      \set Staff.midiMaximumVolume = #0.6
      @var{@dots{} musica @dots{}}
    @}
  >>
  \midi @{ @}
@}
@end example

In questo esempio il volume del clarinetto è diminuito in modo proporzionale
al volume del flauto.

Se queste proprietà del volume non sono impostate, LilyPond applica comunque
@qq{un po'} di equalizzazione a certi strumenti.  Vedi @file{scm/midi.scm}.

File installati:
@file{scm/midi.scm}.

@seealso
Guida alla notazione:
@ref{Formattazione della partitura}.

Guida al funzionamento interno:
@rinternals{Dynamic_performer}.

@cindex MIDI, modificare l'equalizzazione predefinita di uno strumento
@cindex stumento, equalizzazione nel MIDI, cambiare predefinita
@cindex equalizzazione, strumento, cambiare predefinita nel MIDI
@snippets
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{replacing-default-midi-instrument-equalization.ly}

@knownissues
Le modifiche al volume MIDI si verificano soltanto all'inizio di una nota, quindi
i crescendi e i decrescendi non possono cambiare il volume di una singola nota.


@node Impostazione delle proprietà del blocco MIDI
@unnumberedsubsubsec Impostazione delle proprietà del blocco MIDI
@translationof Setting MIDI block properties

Il blocco @code{\midi} può contenere modifiche del contesto, nuove definizioni
del contesto o codice che imposti i valori di certe proprietà.

@example
\score @{
  @var{@dots{} musica @dots{}}
  \midi @{
    \tempo 4 = 72
  @}
@}
@end example

In questo esempio il tempo è impostato su 72 battiti da un quarto per minuto.  Il
segno di tempo nel blocco @code{\midi} non appare nella partitura, mentre qualsiasi
altra indicazione di @code{\tempo} specificata nel blocco @code{\score} sarà
trasferita anche nell'output MIDI.

Se all'interno di un blocco @code{\midi}, il comando @code{\tempo} imposta le
proprietà durante l'interpretazione della musica e nel contesto delle
definizioni di output; dunque viene interpretato @emph{come se} fosse
una modifica di contesto.

@cindex MIDI, definizioni di contesto
@cindex definizioni di contesto per il MIDI

Le definizioni di contesto seguono la stessa sintassi di quelle di un
blocco @code{\layout};

@example
\score @{
  @var{@dots{} musica @dots{}}
  \midi @{
    \context @{
      \Voice
      \remove "Dynamic_performer"
    @}
  @}
@}
@end example

Questo esempio toglie l'effetto delle dinamiche dall'output MIDI.  Nota bene:
i moduli di traduzione di LilyPond usati per l'audio si chiamano @q{performer}.

@seealso
Manuale di apprendimento:
@rlearning{Altre fonti di informazione}.

Guida alla notazione:
@ref{Segni di espressione},
@ref{Formattazione della partitura}.

File installati:
@file{ly/performer-init.ly}.

Frammenti:
@rlsr{MIDI}.

Guida al funzionamento interno:
@rinternals{Dynamic_performer}.

@knownissues
Alcuni lettori MIDI non sempre gestiscono correttamente i cambi di tempo.

I cambi di @code{midiInstrument}, e di altre opzioni MIDI, all'@emph{inizio}
di un rigo potrebbero apparire due volte nell'output MIDI.


@node Uso degli strumenti MIDI
@subsection Uso degli strumenti MIDI
@translationof Using MIDI instruments

Gli strumenti MIDI si impostano tramite la proprietà @code{midiInstrument} del
contesto @code{Staff}.

@example
\score @{
  \new Staff @{
    \set Staff.midiInstrument = "glockenspiel"
    @var{@dots{} musica @dots{}}
  @}
  \midi @{ @}
@}
@end example

o

@example
\score @{
  \new Staff \with @{midiInstrument = "cello"@} @{
    @var{@dots{} musica @dots{}}
  @}
  \midi @{ @}
@}
@end example

Se il nome dello strumento non corrisponde a nessuno degli strumenti elencati
nella sezione @q{Strumenti MIDI}, verrà usato lo strumento @code{acoustic grand}.
Vedi @ref{Strumenti MIDI}.

@seealso
Manuale di apprendimento:
@rlearning{Altre fonti di informazione}.

Guida alla notazione:
@ref{Strumenti MIDI},
@ref{Formattazione della partitura}.

File installati:
@file{scm/midi.scm}.

@knownissues
Gli strumenti percussivi che sono scritti in un contesto @code{DrumStaff}
verranno inviati, correttamente, al canale MIDI@tie{}10, ma alcuni strumenti
percussivi con un tono musicale, come xilofono, marimba, vibrafono o
timpano, sono trattati come strumenti @qq{normali}, quindi la musica di
tali strumenti deve essere inserita in un contesto @code{Staff} (non
@code{DrumStaff}) per ottenere l'output MIDI corretto.  L'elenco completo
delle voci del set di percussioni del canale 10 @code{channel 10 drum-kits} si
trova in @file{scm/midi.scm}.  Vedi @rlearning{Altre fonti di informazione}.


@node Uso delle ripetizioni nel MIDI
@subsection Uso delle ripetizioni nel MIDI
@translationof Using repeats with MIDI

@cindex ripetizioni nel MIDI
@cindex MIDI, uso delle ripetizioni
@funindex \unfoldRepeats

Le ripetizioni possono essere applicate all'output MIDI tramite il
comando @code{\unfoldRepeats}.

@example
\score @{
  \unfoldRepeats @{
    \repeat tremolo 8 @{ c'32 e' @}
    \repeat percent 2 @{ c''8 d'' @}
    \repeat volta 2 @{ c'4 d' e' f' @}
    \alternative @{
      @{ g' a' a' g' @}
      @{ f' e' d' c' @}
    @}
  @}
  \midi @{ @}
@}
@end example

Per limitare l'effetto di @code{\unfoldRepeats} all'output MIDI
soltanto, senza modificare la partitura stampata, occorre creare
@emph{due} blocchi @code{\score}; uno per il MIDI (con ripetizioni
ricopiate) e uno per la partitura scritta (con ripetizioni con volta,
tremolo e percentuale):

@example
\score @{
  @var{@dots{} musica @dots{}}
  \layout @{ @}
@}
\score @{
  \unfoldRepeats @{
    @var{@dots{} musica @dots{}}
  @}
  \midi @{ @}
@}
@end example

Quando si usa più di una voce, ciascuna voce deve avere tutte le ripetizioni
ricopiate per generare un output MIDI corretto.

@seealso
Guida alla notazione:
@ref{Ripetizioni}.


@node Mappatura dei canali MIDI
@subsection Mappatura dei canali MIDI
@translationof MIDI channel mapping

@cindex MIDI, canali
@cindex MIDI, tracce
@cindex canali MIDI
@cindex tracce MIDI
@funindex midiChannelMapping

Quando genera un file MIDI da una partitura, LilyPond assegna automaticamente
ogni nota a un canale MIDI, in cui essa dovrà essere suonata quando inviata
a un dispositivo MIDI. Un canale MIDI mette a disposizione un certo numero di
controlli per selezionare, per esempio, lo strumento da usare per riprodurre
le note in quel canale o per chiedere al dispositivo MIDI di applicare vari effetti
al suono prodotto nel canale. In ogni momento, ogni controllo di un canale
MIDI può avere un solo valore assegnato (che tuttavia può essere modificato,
per esempio, per passare a un altro strumento nel mezzo di un brano).

Lo standard MIDI supporta soltanto 16 canali per dispositivo MIDI.  Questo
limite al numero di canali limita anche il numero dei diversi strumenti che
possono essere eseguiti in contemporanea.

LilyPond crea tracce MIDI separate per ogni rigo (o strumento o voce separati,
a seconda del valore di @code{Score.midiChannelMapping}) e anche per ogni
contesto lyrics.
Non c'è limite al numero di tracce.

Per aggirare il limite del numero di canali MIDI, LilyPond supporta
varie modalità per l'assegnazione dei canali MIDI, scelti attraverso
la proprietà di contesto @code{Score.midiChannelMapping}.  In ogni caso,
se è necessario un numero di canali MIDI superiore al limite, i numeri canale
assegnati ripartono da 0, causando possibili assegnazioni erronee degli
strumenti di alcune note. Questa proprietà di contesto può essere impostata
su uno dei seguenti valori:

@table @var

@item @code{'staff}

Assegna un canale MIDI separato a ogni rigo della partitura (comportamento
predefinito).  Tutte le note in tutte le voci di ogni rigo condivideranno
lo stesso canale MIDI del rigo che le racchiude, e si trovano tutte nella
stessa traccia MIDI.

Il limite dei 16 canali è applicato al numero totale dei contesti staff (rigo)
e lyrics (testo vocale), anche se il testo vocale nel MIDI non occupa un
canale MIDI.

@item @code{'instrument}

Assegna un canale MIDI separato a ogni strumento MIDI diverso
specificato nella partitura.  Ciò significa che tutte le note suonate
con lo stesso strumento MIDI condivideranno lo stesso canale (e traccia)
MIDI, anche se le note appartengono a voci o righi diversi.

In questo caso i contesti del testo vocale (lyrics) non contano nel calcolo
del limite dei 16 canali MIDI (perché non saranno assegnati a uno strumento
MIDI), dunque questa impostazione consente una migliore assegnazione dei
canali MIDI quando il numero di righi e contesti lyrics in una partitura è
superiore a 16.

@item @code{'voice}

Assegna un canale MIDI separato a ogni voce che abbia un nome unico tra
le voci del rigo che le racchiude.  Alle voci in righi diversi vengono
sempre assegnati canali MIDI separati, ma due voci di uno stesso rigo
condivideranno lo stesso canale MIDI se hanno lo stesso nome.
@code{midiInstrument} e i vari controlli MIDI per gli effetti, essendo
proprietà del contesto del rigo (staff), non possono essere impostati
separatamente per ogni voce. La prima voce verrà suonata con lo strumento
e gli effetti specificati per il rigo, mentre alle voci con un nome diverso
da quello della prima saranno assegnati lo strumento e gli effetti predefiniti.

Nota bene: è possibile assegnare diversi strumenti e/o effetti a varie
voci dello stesso rigo spostando @code{Staff_performer} dal contesto
@code{Staff} al contesto @code{Voice} e lasciando @code{midiChannelMapping}
sul valore predefinito @code{'staff} oppure impostandolo su @code{'instrument};
vedi il frammento in basso.

@end table

Per esempio, la mappatura predefinita dei canali MIDI di una partitura può
essere modificata per usare l'impostazione @code{'instrument}:

@example
\score @{
  ...musica...
  \midi @{
    \context @{
      \Score
      midiChannelMapping = #'instrument
    @}
  @}
@}
@end example

@cindex MIDI, un canale per voce
@snippets
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{changing-midi-output-to-one-channel-per-voice.ly}


@node Proprietà di contesto per gli effetti MIDI
@subsection Proprietà di contesto per gli effetti MIDI
@translationof Context properties for MIDI effects

@cindex effetti nel MIDI
@cindex MIDI, effetti
@cindex panning, posizione nel MIDI
@cindex MIDI, panning, posizione
@cindex stereo, bilanciamento nel MIDI
@cindex MIDI, bilanciamento stereo
@cindex espressione nel MIDI
@cindex MIDI, espressione
@cindex riverbero nel MIDI
@cindex MIDI, riverbero
@cindex livello del chorus nel MIDI
@cindex MIDI, livello del chorus
@funindex midiPanPosition
@funindex midiBalance
@funindex midiExpression
@funindex midiReverbLevel
@funindex midiChorusLevel

Le seguenti proprietà di contesto possono essere usate per applicare
vari effetti MIDI alle note suonate sul canale MIDI associato col
rigo, strumento MIDI o voce correnti (a seconda del valore della
proprietà di contesto @code{Score.midiChannelMapping} e del contesto
in cui si trova @code{Staff_performer}; vedi @ref{Mappatura dei canali MIDI}).

La modifica di queste proprietà di contesto avrà effetto su tutte le
note suonate sul canale dopo il cambio, tuttavia alcuni effetti potrebbero
essere applicati anche a note che stanno già suonando (a seconda di come
è stato implementato il dispositivo MIDI).

Sono supportate le seguenti proprietà di contesto:

@table @var

@item @code{Staff.midiPanPosition}

La posizione del panning regola il modo in cui il suono in un canale MIDI
è distribuito tra gli altoparlanti stereo di sinistra e di destra. Questa
proprietà di contesto accetta un numero compreso tra -1.0 (@code{#LEFT}) e
1.0 (@code{#RIGHT}); il valore -1.0 sposterà tutto il suono sull'altoparlante
sinistro (rendendo muto quello destro), il valore 0.0 (@code{#CENTER})
distribuirà il suono in modo uniforme tra gli altoparlanti sinistro e
destro, e il valore 1.0 sposterà tutto il suono sull'altoparlante destro.
I valori intermedi tra -1.0 e 1.0 permettono di ottenere distribuzioni
miste tra gli altoparlanti sinistro e destro.

@item @code{Staff.midiBalance}

Il bilanciamento stereo di un canale MIDI.  In modo simile al panning, questa
proprietà di contesto accetta un numero compreso tra -1.0 (@code{#LEFT}) e
1.0 (@code{#RIGHT}).  Varia il volume relativo inviato ai due altoparlanti
stereo senza alterare la distribuzione dei segnali stereo.

@item @code{Staff.midiExpression}

Livello dell'espressione (come frazione del livello massimo disponibile) da
applicare a un canale MIDI.  Un dispositivo MIDI combina insieme il livello
di espressione del canale MIDI con l'attuale livello di dinamica di una
voce (stabilito dai comandi @code{\p} o @code{\ff}) per ottenere il volume
totale di ogni nota nella voce.  Il controllo dell'espressione può essere
usato, per esempio, per implementare effetti di crescendo o decrescendo
su singole note sostenute (non supportato automaticamente da LilyPond).

@c Issue 4059 contains an attached snippet which shows how this might
@c be done, but this is too large and complex for the NR, even as a
@c referenced snippet.  It could be added to the LSR.

La gamma del livello di espressione va da 0.0 (nessuna espressione, ovvero
volume zero) a 1.0 (piena espressione).

@item @code{Staff.midiReverbLevel}

Livello di riverbero (come frazione del livello massimo disponibile) da
applicare a un canale MIDI.  Questa proprietà accetta numeri compresi tra
0.0 (nessun riverbero) e 1.0 (pieno effetto).

@item @code{Staff.midiChorusLevel}

Livello del chorus (come frazione del livello massimo disponibile) da
applicare a un canale MIDI.  Questa proprietà accetta numeri compresi
tra 0.0 (nessun effetto chorus) e 1.0 (pieno effetto).

@end table


@knownissues

Dato che i file MIDI non contengono veri dati audio, le modifiche in
queste proprietà di contesto si traducono soltanto in richieste di
modifica dei controlli del canale MIDI nei file MIDI generati.
Se un particolare dispositivo MIDI (come un lettore MIDI) sia in
grado di gestire queste richieste dipende interamente dall'implementazione
del dispositivo: un dispositivo potrebbe scegliere di ignorare alcune o
tutte le richieste. Dipende dall'implementazione del dispositivo MIDI
anche il modo in cui un dispositivo MIDI interpreta valori diversi di
questi controlli (generalmente lo standard MIDI corregge il comportamento
solo alle estremità della gamma di valori disponibile per ogni controllo) e
se un cambiamento nel valore di un controllo avrà effetto anche su note che
stanno già suonando su quel canale MIDI.

Quando genera file MIDI, LilyPond trasformerà semplicemente le frazioni
comprese in ciascuna gamma in valori di una gamma di numeri interi
corrispondenti (0-127 per i 7-bit, 0-32767 per i 14 bit per i controlli
del canale MIDI che supportano una migliore risoluzione), arrotondando
i valori delle frazioni sul numero intero più vicino.
I valori interi convertiti sono salvati così come sono nel file MIDI
generato.  Consultare la documentazione del proprio dispositivo MIDI
per sapere come il dispositivo interpreta questi valori.


@node Miglioramento dell'output MIDI
@subsection Miglioramento dell'output MIDI
@translationof Enhancing MIDI output

@menu
* Lo script articulate::
@end menu

L'output MIDI predefinito fornisce le fuzionalità basilari, ma può essere
migliorato impostando gli strumenti MIDI, le proprietà del blocco
@code{\midi} e/o usando lo script @file{articulate}.

@cindex nome strumento
@cindex strumento, nome
@cindex MIDI, strumento
@cindex articulate, script
@cindex articulate.ly
@funindex Staff.midiInstrument


@node Lo script articulate
@unnumberedsubsubsec Lo script @file{articulate}
@translationof The articulate script

@cindex articulate, script
@cindex articulate.ly

Per usare lo script @file{articulate} aggiungere il relativo comando
@code{\include} all'inizio del file di input:

@example
\include "articulate.ly"
@end example

Lo script crea file MIDI in cui la durata delle note è correttamente
@qq{ridimensionata} per rappresentare molte articolazioni e indicazioni
di tempo. Tuttavia anche l'output grafico verrà modificato per
corrispondere esattamente all'output MIDI.

@example
\score @{
  \articulate <<
    @var{@dots{} musica @dots{}}
  >>
  \midi @{ @}
@}
@end example

@funindex \articulate

Il comando @code{\articulate} permette di elaborare le abbreviazioni (come
i trilli e i gruppetti). L'elenco completo degli elementi supportati si
trova nello script stesso.  Vedi @file{ly/articulate.ly}.

@seealso
Manuale di apprendimento:
@rlearning{Altre fonti di informazione}.

Guida alla notazione:
@ref{Formattazione della partitura}.

File installati:
@file{ly/articulate.ly}.

@warning{Lo script @file{articulate} potrebbe accorciare la durata degli
accordi, cosa che potrebbe non essere appropriata per alcuni tipi di
strumento, come nel caso della musica per organo. Potrebbe essere ridotta
anche la durata di note prive di articolazioni.
Dunque, per consentire tutto ciò, limitare l'uso del comando @code{\articulate}
a brevi segmenti di musica o modificare i valori delle variabili definite
nello script @file{articulate} per compensare il comportamento di accorciamento
della durata delle note.}



@node Estrazione dell'informazione musicale
@section Estrazione dell'informazione musicale
@translationof Extracting musical information

Oltre a creare l'output grafico e il MIDI, LilyPond può mostrare
l'informazione musicale in forma testuale.

@menu
* Mostrare la notazione LilyPond::
* Mostrare le espressioni musicali scheme::
* Salvare eventi musicali in un file::
@end menu

@node Mostrare la notazione LilyPond
@subsection Mostrare la notazione LilyPond
@translationof Displaying LilyPond notation

@funindex \displayLilyMusic
La funzione musicale @code{\displayLilyMusic} permette di mostrare
un'espressione musicale nella notazione di LilyPond. Per vedere
l'output, di norma si esegue LilyPond da linea di comando. Per esempio,

@example
@{
  \displayLilyMusic \transpose c a, @{ c4 e g a bes @}
@}
@end example

mostrerà

@example
@{ a,4 cis4 e4 fis4 g4 @}
@end example

LilyPond stampa questi messaggi nella console insieme a tutti gli
altri messaggi della compilazione. Per separare questi messaggi
e salvare i risultati di @code{\displayLilyMusic}, redirigere
l'output su un file:

@example
lilypond file.ly >display.txt
@end example

@funindex \void
@c tradotto un po' liberamente, dato che il paragrafo in inglese è poco chiaro:
@c https://lists.gnu.org/archive/html/lilypond-user/2015-12/msg00141.html
Nota bene che LilyPond non soltanto mostra in console l'espressione musicale, ma
la interpreta anche (infatti l'espressione musicale di @code{\displayLilyMusic}
appare nell'output oltre a essere mostrata in console).  Basta inserire
@code{\displayLilyMusic} in file esistenti, senza doverne modificare le
note di input, per ottenere informazioni su di essi.  Per interpretare e
mostrare una sezione musicale nella console ma, allo stesso tempo, toglierla
dal file di output, usare il comando @code{\void}:

@example
@{
  \void \displayLilyMusic \transpose c a, @{ c4 e g a bes @}
  c1
@}
@end example


@node Mostrare le espressioni musicali scheme
@subsection Mostrare le espressioni musicali scheme
@translationof Displaying scheme music expressions

Vedi @rextend{Displaying music expressions}.


@node Salvare eventi musicali in un file
@subsection Salvare eventi musicali in un file
@translationof Saving music events to a file

Gli eventi musicali possono essere salvati in file diversi, un file per
ogni rigo, includendo un file nella partitura principale:

@example
\include "event-listener.ly"
@end example

Così verranno creati uno o più file @file{NOMEFILE-NOMERIGO.notes} o
@file{NOMEFILE-unnamed-staff.notes} per ogni rigo.  Se ci sono vari
righi senza nome, gli eventi di tutti i righi saranno mischiati insieme
nello stesso file.  I file hanno una struttura di questo tipo:

@example
0.000   note     57       4   p-c 2 12
0.000   dynamic  f
0.250   note     62       4   p-c 7 12
0.500   note     66       8   p-c 9 12
0.625   note     69       8   p-c 14 12
0.750   rest     4
0.750   breathe
@end example

La sintassi prevede una riga delimitata da tabulatori, con due campi fissi
su ogni riga seguiti da parametri opzionali.

@example
@var{tempo}  @var{tipo}  @var{@dots{}parametri@dots{}}
@end example

Questa informazione può essere letta facilmente da altri programmi,
per esempio da uno script python, e può essere molto utile per
ricercatori che desiderano fare delle analisi musicali o degli
esperimenti di @emph{playback} con LilyPond.


@knownissues

Non tutti gli eventi musicali di lilypond sono supportati da
@file{event-listener.ly}, che vuole essere una semplice @qq{prova di concetto}
ben congeniata. Se alcuni eventi che si vorrebbero vedere non sono
inclusi, copiare @file{event-listener.ly} nella propria directory
lilypond e modificare il file in modo che produca l'informazione
desiderata.

