[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.7 Altre modifiche

@translationof Further tweaking


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.7.1 Altri usi delle modifiche con \tweak

@translationof Other uses for tweaks


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Legature di valore tra note di voci diverse

@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

[image of music]

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'] }
>>

[image of music]

Vedi anche

Manuale di apprendimento: Il prefisso \once, La proprietà stencil.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Simulare una corona nel MIDI

@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 { }
}

[image of music]

 
\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 { }
}

[image of music]

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.

Vedi anche

Glossario musicale: (music-glossary)system section ‘sistema’ in Glossario Musicale.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.7.2 Uso delle variabili per modificare la formattazione

@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 }
    >>
  >>
}

[image of music]


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

4.7.3 Fogli di stile

@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 |
}

[image of music]

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 |
}

[image of music]

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
  }
}

[image of music]

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
  }
}

[image of music]

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] [ ? ]

4.7.4 Altre fonti di informazione

@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:

Scaricato da lilypond.org

Istallato da un gestore di pacchetti o compilato da sorgenti

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 fileContenuti
‘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 fileContenuti
‘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] [ ? ]

4.7.5 Modifiche avanzate con Scheme

@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 |
}

[image of music]

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.