| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Further tweaking
4.7.1 Altri usi delle modifiche con \tweak | ||
| 4.7.2 Uso delle variabili per modificare la formattazione | ||
| 4.7.3 Fogli di stile | ||
| 4.7.4 Altre fonti di informazione | ||
| 4.7.5 Modifiche avanzate con Scheme |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
\tweak@translationof Other uses for tweaks
| Legature di valore tra note di voci diverse | ||
| Simulare una corona nel MIDI |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Tying notes across voices
L’esempio seguente mostra come unire con legature di valore note appartenenti a voci diverse. Di norma, solo le note nella stessa voce possono essere unite da una legatura di valore. Se si usano due voci con le note legate in una voce
e si toglie il primo gambo di quella voce e la sua coda, la legatura sembra attraversare le voci:
<< { \once \omit Stem \once \omit Flag b'8~ 8\noBeam } \\ { b'8[ g'] } >>
Manuale di apprendimento:
Il prefisso \once,
La proprietà stencil.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Simulating a fermata in MIDI
Per gli oggetti esterni al rigo è di solito preferibile sovrascrivere
la proprietà stencil piuttosto che la proprietà transparent
dell’oggetto se si desidera toglierlo dall’output. Se si imposta la
proprietà stencil su #f l’oggetto verrà completamente
rimosso dall’output e quindi non potrà influenzare la disposizione
di altri oggetti posizionati rispetto a esso.
Ad esempio, se volessimo modificare il segno di metronomo solo per
simulare una corona nel MIDI, non vorremmo che il segno apparisse
nella partitura né vorremmo influenzare la spaziatura tra i due
sistemi o la posizione di annotazioni adiacenti nel rigo. Dunque,
il modo migliore è impostare la proprietà stencil su
#f. Ecco l’effetto dei due metodi:
\score { \relative { % Indicazione di tempo visibile \tempo 4=120 a'4 a a \once \hide Score.MetronomeMark % Indicazione di tempo invisibile per allungare la fermata nel MIDI \tempo 4=80 a4\fermata | % Nuovo tempo per la sezione successiva \tempo 4=100 a4 a a a | } \layout { } \midi { } }
\score { \relative { % Indicazione di tempo visibile \tempo 4=120 a'4 a a \once \omit Score.MetronomeMark % Indicazione di tempo invisibile per allungare la fermata nel MIDI \tempo 4=80 a4\fermata | % Nuovo tempo per la sezione successiva \tempo 4=100 a4 a a a | } \layout { } \midi { } }
Entrambi i metodi tolgono dalla partitura l’indicazione metronomica ed entrambi cambiano il tempo del MIDI come volevamo, ma nel primo esempio l’indicazione metronomica trasparente sposta troppo in alto l’indicazione di tempo successiva, mentre nel secondo esempio, dove viene tolto lo stampo (stencil), ciò non accade.
Glossario musicale: (music-glossary)system section ‘sistema’ in Glossario Musicale.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Using variables for layout adjustments
I comandi di sovrascrittura sono spesso lunghi e tediosi da scrivere, e devono essere assolutamente corretti. Se si usa più volte la stessa sovrascrittura conviene definire una variabile che la contenga.
Immaginiamo di voler enfatizzare certe parole del testo usando
grassetto e corsivo. I comandi \italic (corsivo) e \bold
(grassetto) funzionano all’interno del testo solo se inclusi,
insieme alla parola o alle parole da modificare, in un blocco
\markup: dunque sono scomodi da inserire. Dovendo inserire
le parole stesse non si possono usare variabili semplici. Come
alternativa possiamo usare i comandi \override e \revert?
\override Lyrics.LyricText.font-shape = #'italic \override Lyrics.LyricText.font-series = #'bold \revert Lyrics.LyricText.font-shape \revert Lyrics.LyricText.font-series |
Anche questi sarebbero molto noiosi da inserire se ci fossero
molte parole che richiedono enfasi. Ma possiamo inserirli
in due variabili e poi usare queste per le parole da enfatizzare.
Un altro vantaggio dell’uso di variabili per queste sovrascritture
è che gli spazi intorno al punto non sono necessari, perché non
sono interpretati direttamente in \lyricmode. Ecco un
esempio, anche se nella pratica comune avremmo scelto dei nomi
più brevi per le variabili in modo da poterle inserire più
rapidamente:
emphasize = { \override Lyrics.LyricText.font-shape = #'italic \override Lyrics.LyricText.font-series = #'bold } normal = { \revert Lyrics.LyricText.font-shape \revert Lyrics.LyricText.font-series } global = { \key c \major \time 4/4 \partial 4 } SopranoMusic = \relative { c'4 | e4. e8 g4 g | a4 a g } AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e } TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 } BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 } VerseOne = \lyricmode { E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save, } VerseTwo = \lyricmode { O | \once \emphasize Christ, whose voice the | wa -- ters heard, } VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood } VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r } \score { \new ChoirStaff << \new Staff << \clef "treble" \new Voice = "Soprano" { \voiceOne \global \SopranoMusic } \new Voice = "Alto" { \voiceTwo \AltoMusic } \new Lyrics \lyricsto "Soprano" { \VerseOne } \new Lyrics \lyricsto "Soprano" { \VerseTwo } \new Lyrics \lyricsto "Soprano" { \VerseThree } \new Lyrics \lyricsto "Soprano" { \VerseFour } >> \new Staff << \clef "bass" \new Voice = "Tenor" { \voiceOne \TenorMusic } \new Voice = "Bass" { \voiceTwo \BassMusic } >> >> }
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Style sheets
L’output prodotto da LilyPond può essere ampiamente modificato, come abbiamo visto nel capitolo Modifica dell’output. Ma se avessi molti file di input a cui voler applicare delle modifiche? O se volessi semplicemente separare le modifiche dalla musica vera e propria? È molto semplice.
Prendiamo un esempio. Non ti preoccupare se non capisci le
parti che hanno #(); verranno spiegate nel capitolo
Modifiche avanzate con Scheme.
mpdolce = \tweak self-alignment-X #-0.6 #(make-dynamic-script #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) inst = #(define-music-function (string) (string?) #{ <>^\markup \bold \box #string #}) \relative { \tempo 4=50 a'4.\mpdolce d8 cis4--\glissando a | b4 bes a2 | \inst "Clarinet" cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 | }
Facciamo qualcosa a proposito delle definizioni di mpdolce e
inst. Producono l’output che desideriamo, ma potremmo volerle
usare in un altro brano. Potremmo semplicemente copiarle e incollarle
in cima a ogni file, ma sarebbe una seccatura e lascerebbe queste
definizioni nel file di input; personalmente trovo tutti quei #()
piuttosto brutti, dunque nascondiamoli in un altro file:
%%% salva queste righe in un file chiamato "definitions.ily"
mpdolce =
\tweak self-alignment-X #-0.6
#(make-dynamic-script
#{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
(string)
(string?)
#{ <>^\markup \bold \box #string #})
|
Ci riferiremo a questo file tramite il comando \include in cima
al file dove c’è la musica. Si usa l’estensione ‘.ily’ per distinguere
il file da includere, che non intendiamo compilare da solo, dal file principale.
Ora modifichiamo la musica (e salviamo questo file come ‘music.ly’).
\include "definitions.ily"
\relative {
\tempo 4=50
a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
g8(\! fis)-. e( d)-. cis2 |
}
|
L’aspetto è migliore, ma facciamo ancora qualche modifica. Il glissando si vede appena, rendiamolo quindi più spesso e più vicino alle teste di nota. Mettiamo l’indicazione metronomica al di sopra della chiave invece che della prima nota. E, infine, dato che il mio professore di composizione odia l’indicazione di tempo “C”, usiamo “4/4” al suo posto.
Ma non devi cambiare ‘music.ly’ bensì ‘definitions.ily’, in questo modo:
%%% definitions.ily
mpdolce =
\tweak self-alignment-X #-0.6
#(make-dynamic-script
#{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
(string)
(string?)
#{ <>^\markup \bold \box #string #})
\layout{
\context {
\Score
\override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
}
\context {
\Staff
\override TimeSignature.style = #'numbered
}
\context {
\Voice
\override Glissando.thickness = #3
\override Glissando.gap = #0.1
}
}
|
Ora l’aspetto è decisamente migliore! Supponiamo ora di voler pubblicare questo brano. Il mio professore di composizione non ama il segno di tempo “C”, mentre a me piace. Copiamo l’attuale file ‘definitions.ily’ in ‘web-publish.ily’ e modifichiamolo. Dato che questa musica verrà distribuita su un pdf da leggere a schermo, aumenteremo anche la dimensione complessiva dell’output.
%%% web-publish.ily
mpdolce =
\tweak self-alignment-X #-0.6
#(make-dynamic-script
#{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
(string)
(string?)
#{ <>^\markup \bold \box #string #})
#(set-global-staff-size 23)
\layout{
\context {
\Score
\override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
}
\context {
\Staff
}
\context {
\Voice
\override Glissando.thickness = #3
\override Glissando.gap = #0.1
}
}
|
Nel file che contiene la musica non rimane che sostituire
\include "definitions.ily" con
\include "web-publish.ily". Potremmo usare un sistema
ancora più conveniente: creare un file ‘definitions.ily’ che
contenga solo le definizioni di mpdolce e inst, un file
‘web-publish.ily’ che contenga solo la sezione \layout
vista prima, e un file ‘university.ily’ che contenga solo le
modifiche necessarie per produrre l’output preferito dal mio
professore. L’inizio di ‘music.ly’ apparirebbe così:
\include "definitions.ily" %%% Una sola di queste linee deve essere commentata \include "web-publish.ily" %\include "university.ily" |
Questo approccio può essere utile anche se si sta creando un
insieme di parti. Uso una mezza dozzina di diversi
‘fogli di stile’ per i miei progetti. Faccio iniziare
ogni file musicale con \include "../global.ily", che contiene
%%% global.ily \version "2.21.3" #(ly:set-option 'point-and-click #f) \include "../init/init-defs.ly" \include "../init/init-layout.ly" \include "../init/init-headers.ly" \include "../init/init-paper.ly" |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Other sources of information
La guida al Funzionamento interno contiene molte informazioni su LilyPond, ma si possono trovare ancora più informazioni nei file interni di LilyPond. Per studiarli devi prima trovare la giusta directory nel tuo sistema operativo. Il percorso di questa directory dipende da quale sistema operativo si sta usando e da come si è ottenuto LilyPond, se scaricando un binario precompilato da lilypond.org oppure installandolo da un gestore di pacchetti (come nelle distribuzioni GNU/Linux o nelle istallazioni tramite fink o cygwin) o compilandolo dai sorgenti:
Vai in
‘INSTALLDIR/lilypond/usr/share/lilypond/current/’ |
Vai in
‘INSTALLDIR/LilyPond.app/Contents/Resources/share/lilypond/current/’ |
usando cd in un terminale per entrare in questa
directory oppure facendo un Ctrl+click sull’applicazione LilyPond e
scegliendo “Mostra i contenuti dei pacchetti”.
Con Windows Explorer vai in
‘INSTALLDIR/LilyPond/usr/share/lilypond/current/’ |
Vai in
‘PREFIX/share/lilypond/X.Y.Z/’, dove
PREFIX è definito dal gestore pacchetti o dallo
script configure e X.Y.Z è il numero di
versione di LilyPond.
All’interno di questa directory le due sottodirectory interessanti sono
Iniziamo col vedere alcuni file in ‘ly/’.
Apri ‘ly/property-init.ly’ in un editor di testo. Quello
che usi normalmente per i file .ly va bene. Questo file
contiene le definizioni di tutti i comandi predefiniti standard
di LilyPond, come \tieUp e \slurDotted. Vedrai
che questi non sono altro che definizioni di variabili che
contengono uno o più comandi \override. Ad esempio,
\tieDotted è definito così:
tieDotted = {
\override Tie.dash-period = #0.75
\override Tie.dash-fraction = #0.1
}
|
Se non ti piacciono i valori predefiniti, puoi facilmente definire nuovamente questi comandi, proprio come qualsiasi altra variabile, all’inizio del file di input.
Ecco i file più utili che si trovano in ‘ly/’:
| Nome del file | Contenuti |
|---|---|
| ‘ly/engraver-init.ly’ | Definizioni dei contesti degli incisori (engraver) |
| ‘ly/paper-defaults-init.ly’ | Specifiche dei valori predefiniti relativi al foglio |
| ‘ly/performer-init.ly’ | Definizioni dei contesti dei performer |
| ‘ly/property-init.ly’ | Definizioni di tutti i comandi predefiniti più comuni |
| ‘ly/spanner-init.ly’ | Definizioni dei comandi predefiniti relativi agli estensori (spanner) |
Altre impostazioni (come le definizioni dei comandi di markup) sono salvate come file ‘.scm’ (Scheme). Il linguaggio di programmazione Scheme serve a fornire un’interfaccia di programmazione per modificare il funzionamento interno di LilyPond. Una spiegazione dettagliata di questi file non rientra nell’obiettivo di questo manuale, dal momento che è necessario conoscere il linguaggio Scheme. Avvisiamo gli utenti che è richiesta una notevole quantità di abilità tecnica o di tempo per comprendere Scheme e questi file (vedi (extending)Scheme tutorial section ‘Scheme tutorial’ in Estendere).
Nel caso tu conosca Scheme, i file che potrebbero essere di interesse sono:
| Nome del file | Contenuti |
|---|---|
| ‘scm/auto-beam.scm’ | Valori predefiniti della disposizione delle travature |
| ‘scm/define-grobs.scm’ | Impostazioni predefinite delle proprietà dei grob |
| ‘scm/define-markup-commands.scm’ | Definizione di tutti i comandi di markup |
| ‘scm/midi.scm’ | Impostazioni predefinite dell’output MIDI |
| ‘scm/output-lib.scm’ | Impostazioni che modificano l’aspetto di tasti, colori, alterazioni, stanghette, etc. |
| ‘scm/parser-clef.scm’ | Definizioni delle chiavi supportate |
| ‘scm/script.scm’ | Impostazioni predefinite delle articolazioni |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Advanced tweaks with Scheme
Anche se molte cose sono possibili con i comandi \override e
\tweak, un modo ancor più potente di modificare l’azione
di LilyPond è resa possibile da un interfaccia programmabile al
funzionamento interno di LilyPond. Il codice scritto nel linguaggio
di programmazione Scheme può essere incorporato direttamente nel
funzionamento interno di LilyPond. Ovviamente, per farlo è necessaria
almeno una conoscenza di base della programmazione in Scheme;
abbiamo scritto un’introduzione in
(extending)Scheme tutorial section ‘Scheme tutorial’ in Estendere.
Come esempio di una delle tante possibilità, invece di impostare una proprietà su un valore costante, si può impostare su una procedura Scheme che viene poi chiamata ogni volta che LilyPond accede a quella proprietà. La proprietà può essere poi impostata dinamicamente su un valore determinato dalla procedura nel momento in cui viene chiamata. In questo esempio coloriamo le teste delle note in base alla loro posizione sul rigo.
#(define (color-notehead grob) "Colora le teste di nota in base alla loro posizione sul rigo." (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) (case mod-position ;; Return rainbow colors ((1) (x11-color 'red )) ; for C ((2) (x11-color 'orange )) ; for D ((3) (x11-color 'yellow )) ; for E ((4) (x11-color 'green )) ; for F ((5) (x11-color 'blue )) ; for G ((6) (x11-color 'purple )) ; for A ((0) (x11-color 'violet )) ; for B ))) \relative { % Fa sì che il colore sia preso dalla procedura color-notehead \override NoteHead.color = #color-notehead a2 b | c2 d | e2 f | g2 a | }
Altri esempi che mostrano l’uso di queste interfacce programmabili si trovano in (extending)Callback functions section ‘Callback functions’ in Estendere.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] |
This document was generated by gub on Luglio 13, 2020 using texi2html 1.82.
Altre lingue: English, català, česky, deutsch, español, français, 日本語, nederlands.
A proposito della selezione automatica della lingua.