Impostare il comportamento delle travature automatiche

Quando la disposizione automatica delle travature è abilitata, la disposizione delle travature è determinata da tre proprietà di contesto: baseMoment, beatStructure e beamExceptions. I valori predefiniti di queste variabili possono essere sovrascritti, come vedremo tra breve, oppure si possono anche cambiare i valori predefiniti stessi, come è spiegato in Indicazione di tempo.

Se è definita una regola beamExceptions per l’indicazione di tempo corrente, tale regola soltanto determina la disposizione delle travature; i valori di baseMoment e beatStructure vengono ignorati. Se non è definita alcuna regola beamExceptions per l’indicazione di tempo corrente, la disposizione delle travature è determinata dai valori di baseMoment e beatStructure.

Disposizione delle travature basata su baseMoment e beatStructure

Dato che le indicazioni di tempo più comuni hanno delle regole beamExceptions già definite, occorre disabilitarle se la disposizione automatica deve basarsi su baseMoment e beatStructure. Le regole beamExceptions si disabilitano con questo comando

\set Timing.beamExceptions = #'()

Quando beamExceptions è impostato su #'(), o per impostazione esplicita o perché non sono state definite internamente le beamExceptions per l’indicazione di tempo corrente, le estremità delle travature si trovano sulle suddivisioni come specificato dalle proprietà di contesto baseMoment e beatStructure. beatStructure è una lista Scheme che definisce la lunghezza di ogni suddivisione in rapporto alla misura in unità di baseMoment. Per impostazione predefinita, baseMoment è uno fratto il denominatore dell’indicazione di tempo e ogni unità di baseMoment corrisponde a una singola suddivisione.

Per ogni indicazione di tempo esistono valori separati per beatStructure e baseMoment. Le modifiche di queste variabili hanno effetto solo sulle indicazioni di tempo attive, dunque tali modifiche devono essere poste dopo il comando \time che inizia una nuova indicazione di tempo, non prima. I nuovi valori assegnati a una certa indicazione di tempo sono mantenuti e reintrodotti ogni volta che quell’indicazione di tempo viene ristabilita.

\relative c''{
  \time 5/16
  c16^"predefinito" c c c c |
  % È improbabile che per un tempo di 5/16 sia stata definita beamExceptions,
  % ma disabilitiamola lo stesso per sicurezza
  \set Timing.beamExceptions = #'()
  \set Timing.beatStructure = 2,3
  c16^"(2+3)" c c c c |
  \set Timing.beatStructure = 3,2
  c16^"(3+2)" c c c c |
}

[image of music]

\relative {
  \time 4/4
  a'8^"predefinito" a a a a a a a
  % Disabilita beamExceptions perché è senz'altro definita
  % per il tempo 4/4
  \set Timing.beamExceptions = #'()
  \set Timing.baseMoment = \musicLength 4
  \set Timing.beatStructure = 1,1,1,1
  a8^"cambiato" a a a a a a a
}

[image of music]

Le modifiche alle impostazioni delle travature possono essere limitate a contesti specifici. Se non si specifica alcuna impostazione in un contesto di livello più basso, verrà applicata l’impostazione del contesto che lo contiene.

\new Staff {
  \time 7/8
  % Nessun bisogno di disabilitare beamExceptions perché non è definita per il tempo 7/8

  \set Staff.beatStructure = 2,3,2
  <<
    \new Voice = one {
      \relative {
        a'8 a a a a a a
      }
    }
    \new Voice = two {
      \relative {
        \voiceTwo
        \set Voice.beatStructure = 1,3,3
        f'8 f f f f f f
      }
    }
  >>
}

[image of music]

Quando si usano più voci, occorre specificare il contesto Staff se si vuole applicare la disposizione delle travature a tutte le voci del rigo:

\time 7/8
% ritmo 3-1-1-2
% Se non si specifica il contesto, la modifica viene applicata a Voice e quindi non funziona correttamente
% Dato che le voci sono autogenerate, tutto il ritmo avrà come baseMoment (1 . 8)
\set beatStructure = 3,1,1,2
<< \relative {a'8 a a a16 a a a a8 a} \\ \relative {f'4. f8 f f f} >>

% Funziona correttamente se si specifica il contesto Staff
\set Staff.beatStructure = 3,1,1,2
<< \relative {a'8 a a a16 a a a a8 a} \\ \relative {f'4. f8 f f f} >>

[image of music]

Il valore di baseMoment può essere regolato in modo da cambiare il comportamento delle travature, se si vuole. In questo caso occorre cambiare anche il valore di beatStructure così che sia compatibile col nuovo valore di baseMoment.

\time 5/8
% Nessun bisogno di disabilitare beamExceptions perché non è definita per il tempo 5/8
\set Timing.baseMoment = \musicLength 16
\set Timing.beatStructure = 7,3
\repeat unfold 10 { a16 }

[image of music]

baseMoment è un momento, ovvero un’unità della durata musicale. Una quantità di tipo moment viene creata dalla funzione Scheme ly:make-moment. Per maggiori informazioni su questa funzione, si veda Gestione del tempo.

Per impostazione predefinita, baseMoment ha un valore di uno fratto il denominatore dell’indicazione di tempo. Le eccezioni a questa regola si trovano in scm/time-signature-settings.scm.

Disposizione delle travature con beamExceptions

Le regole speciali di disposizione automatica delle travature (diverse da quelle che determinano la corrispondenza della travatura alla suddivisione) sono definite nella proprietà beamExceptions.

Il valore di beamExceptions, una struttura dati Scheme piuttosto complessa, è più facile da generare con la funzione \beamExceptions. A tale funzione viene passato uno o più schemi ritmici della misura, specificati con travature manuali. Le misure devono essere separate da un controllo di battuta | dato che la funzione non ha altro modo per determinare la lunghezza della misura. Ecco un semplice esempio:

\relative c'' {
  \time 3/16
  \set Timing.beatStructure = 2,1
  \set Timing.beamExceptions =
    \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
  c16 c c |
  \repeat unfold 6 { c32 } |
}

[image of music]

Nota: Il valore di beamExceptions deve essere una lista completa di eccezioni, ovvero bisogna includere tutte le eccezioni che si vogliono applicare. Non è possibile aggiungere, rimuovere o modificare soltanto una eccezione. Anche se questo può sembrare scomodo, significa anche che non c’è bisogno di conoscere le attuali impostazioni delle travature per poter specificare un nuovo modello di disposizione delle travature.

Quando cambia l’indicazione di tempo, vengono impostati i valori predefiniti di Timing.baseMoment, Timing.beatStructure e Timing.beamExceptions. L’impostazione dell’indicazione di tempo ripristina le impostazioni automatiche delle travature del contesto Timing ai valori predefiniti.

\relative a' {
  \time 6/8
  \repeat unfold 6 { a8 }
  % raggruppamento (4 + 2)
  \set Timing.beatStructure = 4,2
  \repeat unfold 6 { a8 }
  % ritorno al comportamento predefinito
  \time 6/8
  \repeat unfold 6 { a8 }
}

[image of music]

Le impostazioni predefinite della disposizione automatica delle travature per ogni tempo sono definite in scm/time-signature-settings.scm. La loro modifica è descritta in Indicazione di tempo.

Molte impostazioni di travature automatiche per le indicazioni di tempo hanno un elemento beamExceptions. Ad esempio, il tempo 4/4 cerca di creare due travature nella misura se ci sono solo note di un ottavo. La regola beamExceptions può sovrascrivere l’impostazione di beatStructure se beamExceptions non viene annullato.

\time 4/4
\set Timing.baseMoment = \musicLength 8
\set Timing.beatStructure = 3,3,2
% Le travature non saranno raggruppate in (3 3 2) a causa di beamExceptions
\repeat unfold 8 {c8} |
% Il raggruppamento delle travature è (3 3 2) perché abbiamo tolto le impostazioni predefinite di beamExceptions
\set Timing.beamExceptions = #'()
\repeat unfold 8 {c8}

[image of music]

Analogalmente, le note di un ottavo in un tempo 3/4 sono raggruppate in un’unica travatura. Per raggrupparle secondo le suddivisioni, azzera beamExceptions.

\time 3/4
% il comportamento predefinito è un gruppo di (6) a causa di beamExceptions
\repeat unfold 6 {a8} |
% Le travature saranno raggruppate in (1 1 1) a causa dei valori predefiniti di baseMoment e beatStructure
\set Timing.beamExceptions = #'()
\repeat unfold 6 {a8}

[image of music]

Spesso, nelle partiture di età classica e romantica, le travature iniziano a metà della misura in un tempo 3/4; ma la pratica moderna preferisce evitare l’impressione ingannevole di un tempo 6/8 (vedi Gould, p. 153). Situazioni simili si incontrano anche per il tempo 3/8. Questo comportamento è controllato dalla proprietà di contesto beamHalfMeasure, che ha effetto soltanto sulle indicazioni di tempo che hanno 3 come numeratore:

\relative a' {
  \time 3/4
  r4. a8 a a |
  \set Timing.beamHalfMeasure = ##f
  r4. a8 a a |
}

[image of music]

Come funziona la disposizione automatica delle travature

Quando la disposizione automatica delle travature è abilitata, la disposizione delle travature è determinata dalle proprietà di contesto baseMoment, beatStructure e beamExceptions.

Nel determinare l’aspetto delle travature vengono applicate le seguenti regole, in ordine di priorità:

Nelle regole precedenti, il tipo di travatura è la durata della nota più corta nel gruppo della travatura.

Le regole predefinite per le travature si trovano in scm/time-signature-settings.scm.

Frammenti di codice selezionati

Suddividere le travature

Le travature di note consecutive di un sedicesimo (o più brevi) non vengono suddivise, ovvero i tre (o più) tratti della travatura si estendono, senza spezzarsi, sugli interi gruppi di note. Questo comportamento può essere modificato in modo da suddividere le travature in sottogruppi attraverso la proprietà subdivideBeams. Se impostata, le travature che comprendono più sottogruppi verranno suddivise a intervalli definiti dal valore attuale di baseMoment, riducendo le travature multiple al numero di travature che indica il valore metrico della suddivisione. Se il gruppo successivo alla suddivisione è più breve del valore metrico corrente (di solito perché la travatura è incompleta), il numero di travature riflette il gruppo di suddivisione più lungo possibile. Tuttavia, se rimane una sola nota dopo la divisione, questa restrizione non viene applicata. Si noti che baseMoment, se non impostata esplicitamente, equivale a uno fratto il denominatore dell’attuale indicazione di tempo. Deve quindi essere impostata su una frazione che stabilisca la durata del sottogruppo di travature; lo si può fare usando la funzione ly:make-moment, come è mostrato in questo frammento di codice. Inoltre quando baseMoment cambia, anche beatStructure deve essere modificato per accordarsi con baseMoment:

\relative c'' {
  c32[ c c c c c c c]

  \set subdivideBeams = ##t
  c32[ c c c c c c c]

  % Set minimum beam subdivision interval to 1/8 just for this beam
  \once \set minimumBeamSubdivisionInterval = \musicLength 8
  c32[ c c c c c c c]

  % Set maximum beam subdivision interval to 1/16 just for this beam
  \once \set maximumBeamSubdivisionInterval = \musicLength 16
  c32[ c c c c c c c]

  % Set maximum beam subdivision interval to 3/8 just for this beam
  \once \set maximumBeamSubdivisionInterval = \musicLength 8*3
  [ \repeat unfold 16 c64 ] r2.

  % Set maximum beam subdivision interval to 1/64 to limit subdivision depth,
  % despite not being metrically correct
  \once \set minimumBeamSubdivisionInterval = \musicLength 32
  \once \set maximumBeamSubdivisionInterval = \musicLength 64
  [ \repeat unfold 32 c128 ] r2.

  % Shorten beam by 1/32
  c32[ c c c c c c] r32

  % Shorten beam by 3/32
  c32[ c c c c] r16.

  % Respect the incomplete beams of the previous two examples
  \set respectIncompleteBeams = ##t
  c32[ c c c c c c] r32
  % no visual change here as last two stems are exempt from this
  % special rule
  c32[ c c c c] r16.
}

[image of music]

Travatura che segue strettamente il battito

Si possono impostare i tratti di suddivisione della travatura in modo che siano rivolti verso la relativa pulsazione. La prima travatura fa sì che non spuntino i tratti di suddivisione (comportamento predefinito); la seconda travatura è orientata verso la pulsazione.

\relative c'' {
  \time 6/8
  a8. a16 a a
  \set strictBeatBeaming = ##t
  a8. a16 a a
}

[image of music]

Segni per la conduzione, segni di raggruppamento della misura

Il raggruppamento delle pulsazioni all’interno della misura è regolato dalla proprietà di contesto beatStructure. I valori di beatStructure per varie indicazioni di tempo vengono stabiliti in scm/time-signature-settings.scm. Questi valori possono essere impostati o modificati con \set. Altrimenti, si può usare \time per impostare sia l’indicazione di tempo che la struttura delle pulsazioni. Per farlo si specifica il raggruppamento interno delle pulsazioni in una misura in una lista di numeri (nella sintassi di Scheme) prima dell’indicazione di tempo.

\time agisce nel contesto Timing, dunque non reimposterà i i valori di beatStructure e baseMoment che sono impostati in altri contesti di più basso livello, come Voice.

Se si include l’incisore Measure_grouping_engraver in uno dei contesti che regolano l’aspetto, appariranno i segni di raggruppamento della misura. Tali segni facilitano la lettura di musica moderna ritmicamente complessa. Nell’esempio la misura di 9/8 è raggruppata in due diversi schemi usando due metodi differenti, mentre la misura di 5/8 è raggruppata in base alle impostazioni predefinite in scm/time-signature-settings.scm:

\score {
  \new Voice \relative c'' {
    \time 9/8
    g8 g d d g g a( bes g) |
    \set Timing.beatStructure = 2,2,2,3
    g8 g d d g g a( bes g) |
    \time 4,5 9/8
    g8 g d d g g a( bes g) |
    \time 5/8
    a4. g4 |
  }
  \layout {
    \context {
      \Staff
      \consists "Measure_grouping_engraver"
    }
  }
}

[image of music]

Estremità delle travature nel contesto Score

Le regole relative alle estremità delle travature definite nel contesto Score si applicano a tutti i righi, ma possono essere modificate anche ai livelli Staff e Voice:

\relative c'' {
  \time 5/4
  % Set default beaming for all staves
  \set Score.baseMoment = \musicLength 8
  \set Score.beatStructure = 3,4,3
  <<
    \new Staff {
      c8 c c c c c c c c c
    }
    \new Staff {
      % Modify beaming for just this staff
      \set Staff.beatStructure = 6,4
      c8 c c c c c c c c c
    }
    \new Staff {
      % Inherit beaming from Score context
      <<
        {
          \voiceOne
          c8 c c c c c c c c c
        }
        % Modify beaming for this voice only
        \new Voice {
          \voiceTwo
          \set Voice.beatStructure = 6,4
          a8 a a a a a a a a a
        }
      >>
    }
  >>
}

[image of music]

Vedi anche

Guida alla notazione: Indicazione di tempo.

File installati: scm/time-signature-settings.scm.

Frammenti di codice: Rhythms.

Guida al funzionamento interno: Auto_beam_engraver, Beam, BeamForbidEvent, beam-interface.

Problemi noti e avvertimenti

Se una partitura finisce prima del termine di una travatura automatica, cui mancano ancora delle note, quest’ultima travatura non apparirà. Lo stesso vale per le voci polifoniche, inserite con << … \\ … >>. Una voce polifonica non apparirà se termina quando una travatura automatica è ancora in attesa di note. Per aggirare questi problemi occorre impostare manualmente l’ultima travatura della voce o della partitura.

Timing è un alias del contesto Score. Questo significa che la modifica della disposizione delle travature in un rigo avrà effetto anche sugli altri righi. Quindi un’impostazione di tempo in un rigo successivo reimposterà la disposizione personalizzata delle travature definita in un rigo precedente. Per evitare questo problema si può impostare l’indicazione di tempo su un solo rigo.

<<
  \new Staff {
    \time 3/4
    \set Timing.baseMoment = \musicLength 8
    \set Timing.beatStructure = 1,5
    \set Timing.beamExceptions = #'()
    \repeat unfold 6 { a'8 }
  }
  \new Staff {
    \repeat unfold 6 { a'8 }
  }
>>

[image of music]

Si possono cambiare anche le impostazioni predefinite delle travature, in modo che sia usata sempre la disposizione delle travature desiderata. Le modifiche nelle impostazioni della travatura automatica per le indicazioni di tempo sono descritte in Indicazione di tempo.

<<
  \new Staff {
    \overrideTimeSignatureSettings
      3/4               % timeSignatureFraction
      1/8               % baseMoment
      1,5               % beatStructure
      #'()		% beamExceptions
    \time 3/4
    \repeat unfold 6 { a'8 }
  }
  \new Staff {
    \time 3/4
    \repeat unfold 6 { a'8 }
  }
>>

[image of music]


Guida alla Notazione di LilyPond v2.25.21 (ramo di sviluppo).