Subject: Sauts de système

From: Jean ABOU SAMRA <[email-masked]>
Date: Tue, 1 Jan 2019 20:22:33 +0100

Bonjour,

Décidément, j'ai besoin de notations de plus en plus complexes… Je travaille sur deux extraits, l'un non-mesuré et l'autre polymétrique. LilyPond permet les deux notations avec une facilité remarquable. Toutefois, je rencontre quelques problèmes en ce qui concerne les sauts de système.
En effet, par défaut, un saut de système ne peut pas intervenir au milieu d'une mesure. Cela reste vrai pendant une cadence : les sauts de système sont désactivés. La solution officielle pour autoriser les sauts est de placer \bar "" à chaque endroit où un saut peut intervenir.
Toutefois, cela peut finir par rendre le code assez lourd. Dans cet exemple de Satie (fin des Airs à faire fuir), il n'y a aucune barre de mesure, sauf à la fin, où une double barre est présente. Je supprimerais volontiers le Bar_engraver , ce qui permet les sauts partout, mais je ne peux plus obtenir la double barre en fin de morceau.
https://www.dropbox.com/s/lbd3qnhz0gy3ygp/Exemple%20Satie.pdf?dl=0 <https://www.dropbox.com/s/lbd3qnhz0gy3ygp/Exemple%20Satie.pdf?dl=0>
Si l'on suit la documentation, pour autoriser les sauts n'importe où, il faut placer \bar "" après chaque note ! Je sais qu'il est possible de redéfinir le symbole | par l'instruction
	"|" = \bar ""
et l'on place | au lieu de \bar "" . Mais cela reste assez lourd, et l'on ne dispose plus des contrôles de mesure (barcheck). (Je préfèrerais ne pas décider moi-même des sauts car LilyPond le fait automatiquement bien mieux que moi, et de plus il faut tout refaire si on ajoute trois note au beau milieu de la pièce.)
Une autre solution est d'imposer une métrique en interne, et de simuler \cadenzaOn sur la partition (comme dans notre précédent échange). Néanmoins, cela n'est pas toujours possible. Dans le cas d'une musique polymétrique, chaque portée a sa propre métrique, et l'on ne peut pas lui en donner une autre qui gèrerait les sauts de système, alors que j'aimerais que les sauts soient autorisés même au milieu d'une mesure. On doit alors revenir aux \bar "" (ou | avec "|" = \bar "" ) et le code est particulièrement incompréhensible, car il faut déterminer où tombent les mesures des autres portées.

Ma question est donc : est-il possible de régler l'algorithme de sauts de système, pour autoriser les sauts à n'importe quel endroit ? Ce serait encore mieux si l'on pouvait tenir compte des mesures d'une seule portée, et ignorer la mesure des autres.

À la fin de ce message se trouve un code avec quelques exemples comme illustration.

Merci pour votre aide,
Jean Abou Samra.

PS : Déplacer le Timing_translator et le Default_bar_engraver du contexte Score vers le contexte Staff semble régler le problème du premier avertissement, cela permet de placer un \break sans erreur. Mais cela n'autorise pas pour autant le saut implicite au milieu d'une mesure ou dans une cadence.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.18.2"

% diverses manières d'indiquer les sauts de système possibles

% mauvais ; génère un avertissement

\relative c' {
\time 2/4
c4 d |
c \break d |
c d
}

% bon

\relative c' {
\time 2/4
c4 d |
c \bar "" \break d |
c d
}

% code lourd, voire incompréhensible

\relative c' {
\cadenzaOn
c4 \bar "" d \bar "" e \bar "" f \bar "" g \bar "" a \bar "" b \bar "" c \bar "" d \bar "" e \bar "" f \bar "" g \bar "" a \bar "" b \bar "" c \bar "" b \bar "" a \bar "" g \bar "" f \bar "" e \bar "" d \bar "" c \bar "" b \bar "" a \bar "" g \bar "" f \bar "" e \bar "" d \bar "" c  \bar "" d \bar "" e \bar "" f \bar "" g \bar "" a \bar "" b \bar "" c \bar "" d \bar "" e \bar "" f \bar "" g \bar "" a \bar "" b \bar "" c \bar "" b \bar "" a \bar "" g \bar "" f \bar "" e \bar "" d \bar "" c \bar "" b \bar "" a \bar "" g \bar "" f \bar "" e \bar "" d \bar "" c
\bar "|."
}

% déjà mieux, mais toujours pas extraordinaire

"|" = \bar ""
\relative c' {
\cadenzaOn
c4 | d | e | f | g | a | b | c | d | e | f | g | a | b | c | b | a | g | f | e | d | c | b | a | g | f | e | d | c | d | e | f | g | a | b | c | d | e | f | g | a | b | c | b | a | g | f | e | d | c | b | a | g | f | e | d | 
\bar "|."
}

% compliqué quand la musique devient plus longue

\score {
  % autoriser chaque portée à avoir sa propre métrique
  % http://lilypond.org/doc/v2.18/Documentation/notation/displaying-rhythms.fr.html#polymetric-notation
  \layout {
    \context {
      \Score
      \remove "Timing_translator"
      \remove "Default_bar_line_engraver"
    }
    \context {
      \Staff
      \consists "Timing_translator"
      \consists "Default_bar_line_engraver"
    }
  }
  <<
    \relative c' { \time 2/4  c4 d c \bar "" d c d c d c \bar "" d c d }
    \relative c' { \time 3/4  c4 d e c d e c d e c d e }
}

% ce que j'aimerais

%{
\relative c' {
\cadenzaOn
\breakAnywhereOn % à trouver
c4 d e f g a b c d e f g a b c b a g f e d c b a g f e d c
\cadenzaOff
\bar "|:"
%}

---

From: Valentin Villenave <[email-masked]>
Date: Tue, 1 Jan 2019 21:05:03 +0100

On 1/1/19, Jean ABOU SAMRA <[email-masked]> wrote:
> pour autoriser les sauts n'importe où, il
> faut placer \bar "" après chaque note !

Certes, il vaudrait mieux trouver autre chose.

Par exemple, je vous proposerais volontiers une solution comme celle-ci :

\score {
  \relative c' {
    \time 1/4
    c4 d e f g a b c
    d e f g a b c b
    a g f e d c b a
    g f e d c
    d e f g a b c d
    e f g a b c b a
    g f e d c b a g
    f e d c
    \override Score.BarLine.stencil=#ly:bar-line::print
    \bar "|."
  }
  \layout {
    \context {
      \Score
      \remove "Timing_translator"
      \remove "Default_bar_line_engraver"
      \override BarLine.stencil = ##f
      \override BarNumber.stencil = ##f
      \override TimeSignature.stencil = ##f
    }
    \context {
      \Staff
      \consists "Timing_translator"
      \consists "Default_bar_line_engraver"
    }
  }
}

Et pour la polymétrie, en principe vos mesures tombent en même temps à
certains moments, ce qui autorise le changement de système.

Pour répondre à votre question, oui, il est possible de forcer
l’algorithme à ignorer les valeurs prolongées, mais le résultat
devient en général chaotique et illisible. Pour les métriques
hyper-complexes, il vaut mieux tricher… ou comme certains (notamment
Karim Haddad sur notre liste) concevoir les partitions sur des
systèmes de format A3 orienté paysage… mais à ce stade il faudrait
voir le code.

Cordialement,
V. Villenave.

---

From: Valentin Villenave <[email-masked]>
Date: Tue, 1 Jan 2019 21:06:47 +0100

On 1/1/19, Valentin Villenave <[email-masked]> wrote:
> Par exemple, je vous proposerais volontiers une solution comme celle-ci

… évidemment l’échange des \remove \consists n’est pas nécessaire ici,
on peut écrire plus simplement :

\score {
  \relative c' {
    \time 1/4
    c4 d e f g a b c
    d e f g a b c b
    a g f e d c b a
    g f e d c
    d e f g a b c d
    e f g a b c b a
    g f e d c b a g
    f e d c

V.

---

From: NOreply <[email-masked]>
Date: Tue, 1 Jan 2019 13:18:14 -0700 (MST)

De mon côté, j'avais écrit autre chose, en gardant le \cadenzaOn:

\score {
  <<
 \new Staff    \relative c' { \time 1/4 
                    \set Staff.timeSignatureFraction =2/4
                    \cadenzaOn
                    c4 d c  d c d  c d c  d c d }
   \new Staff <<  \relative c' { \time 1/4 
                    \set Staff.timeSignatureFraction =3/4
                    \cadenzaOn
                    c4 d e c d  e c d \break e c d e }
   \new Voice {  \repeat unfold 12 { s \bar "" } } 
}
%.....à voir

--
Sent from: http://lilypond-french-users.1298960.n2.nabble.com/

---

From: Jean ABOU SAMRA <[email-masked]>
Date: Thu, 3 Jan 2019 20:10:19 +0100

Bonjour,
Merci pour vos réponses.
Si je résume, dans le cas d'une musique non-mesurée, il suffit soit de définir une métrique seulement pour les sauts, puis, soit de désactiver les graveurs qui la rendent visible, soit d'insérer une voix invisible qui contienne les sauts possibles. Ces deux solutions me plaisent.
Toutefois, après observation attentive, ma préférence va à la deuxième (M. le graveur de partitions… quel est votre nom ?), car dans la première, les barres de mesure laissent des traces. En comparant les deux sur la même musique, on voit que la première produit une mise en page plus espacée, et si l'on change la métrique à 2/4 au lieu de 1/4, on voit des espaces indésirables apparaître aux endroits des barres de mesure fantôme.

Je retiens en revanche ces considérations sur la musique polymétrique et je vais essayer la présentation en une seule ligne. En effet, mes mesures se synchronisent bien en quelques endroits, mais elles sont à 10/8 et 9/8 (déphasage d'une croche), et tombent donc ensemble seulement toutes les 90 croches, ce qui à l'évidence ne peut pas être placé sur une seule ligne.

J'ai donc téléchargé la version 2.19 qui introduit l'algorithme ly:one-line-auto-height-breaking pour écrire la musique sur une seule ligne et ajuster automatiquement la hauteur de la page à cet unique système.

Merci encore pour votre aide précieuse,
Jean

> Le 1 janv. 2019 à 21:18, NOreply <[email-masked]> a écrit :
> 
> _______________________________________________
> liste de diffusion lilypond-user-fr
> [email-masked]
> https://lists.gnu.org/mailman/listinfo/lilypond-user-fr

---

From: Valentin Villenave <[email-masked]>
Date: Thu, 3 Jan 2019 20:37:01 +0100

On 1/3/19, Jean ABOU SAMRA <[email-masked]> wrote:
> En comparant les deux sur la même
> musique, on voit que la première produit une mise en page plus espacée, et
> si l'on change la métrique à 2/4 au lieu de 1/4, on voit des espaces
> indésirables apparaître aux endroits des barres de mesure fantôme.

C’est vrai. On peut certes y remédier (en partie) en ajoutant
      \override BarLine.X-extent = #'(0 . 0)
      \override BarLine.stencil = ##f
mais ce n’est pas exactement équivalent.

La solution de NOreply (la Vengeance du Graveur Masqué!!) est
effectivement préférable ; toutefois je l’appliquerais directement
dans le contexte Voice, ce qui évite d’éventuels bugs avec la
polyphonie :

\score {
  \new Staff
  \new Voice <<
    \relative c' {
      \oneVoice
      \cadenzaOn
      c4 d e f g a b c
      d e f g a b c b
      a g f e d c b a
      g f e d c
      d e f g a b c d
      e f g a b c b a
      g f e d c b a g
      f e d c
      \bar "|."
    } \\
    \repeat unfold 56 {s4 \bar ""}
  \layout {
    \context {
      \Staff
      \remove Time_signature_engraver
    }
  }
}

Cordialement,
V. V.