Subject: Silence multimesures : apparence aléatoire

From: Jean-Charles Malahieude <[email-masked]>
Date: Sat, 25 Jun 2011 14:22:46 +0200

Bonjour à tous,

J'en suis maintenant à peaufiner la génération des parties
instrumentales, et je butte sur les silences multimesures :
bien que j'ai un
  \layout { \context { \Score skipBars = ##t } }

et une variable que j'inclus en cas de besoin
MAC = { \compressFullBarRests
         \override MultiMeasureRest #'expand-limit = #1 }

je n'obtiens pas toujours la même représentation graphique.

Quelqu'un aurait-il une idée ?

@+
Jean-Charles

---

From: Bertrand Bordage <[email-masked]>
Date: Sat, 25 Jun 2011 15:26:55 +0200

Hum... Pourrais-tu envoyer un exemple minimal ? C'est peut-être de ma faute,
j'ai modifié ça il y a peu.

Bertrand

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sat, 25 Jun 2011 15:40:27 +0200

Le 25/06/2011 15:26, Bertrand Bordage disait :
> Hum... Pourrais-tu envoyer un exemple minimal ? C'est peut-être de ma
> faute, j'ai modifié ça il y a peu.
>

Le problème est que j'ai testé dans un exemple minimal, mais le problème 
ne survient pas alors.

J'ai promis à mon épouse d'aller l'écouter, aussi je tente d'isoler une 
instance d'ici demain matin.

@+
Jean-Charles

---

From: Bertrand Bordage <[email-masked]>
Date: Sat, 25 Jun 2011 15:56:00 +0200

Ah, je pense savoir d'où ça vient.

Déjà une question : quand tu dis "apparence aléatoire", cela ne signifie pas
que le résultat diffère d'une compilation à l'autre ? Sinon c'est assez
grave et il faut modifier LilyPond pour arranger cela.

Ensuite, j'imagine que la musique de chaque partie ressemble à ça :
violon = {a4 b c d R1*12 e4 f g a }

Et que tu utilises peut-être une autre voix factice en parallèle pour
préciser la mise en page des parties séparées.
Du genre :
violonPresentation = { s1*3 \once \override MultiMeasureRest #'expand-limit
= #1 s1*11 }

Je ne sais pas si j'ai été très clair, mais la meilleure solution pour
résoudre tes problèmes est d'utiliser :
\repeat unfold 12 R1
au lieu de
R1*12
sinon LilyPond considère qu'il y a un bloc de 12 mesures de silence et non
12 mesures de silence. Et il ne peut pas découper ce bloc grâce à une voix
parallèle.

Par contre je n'ai pas testé si les "church rests" fonctionnent avec ça.

En espérant avoir avancé ta réflexion,
Bertrand

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sat, 25 Jun 2011 19:45:28 +0200

Le 25/06/2011 15:56, Bertrand Bordage disait :
> Déjà une question : quand tu dis "apparence aléatoire", cela ne signifie
> pas que le résultat diffère d'une compilation à l'autre ? Sinon c'est
> assez grave et il faut modifier LilyPond pour arranger cela.
>
> violonPresentation = { s1*3 \once \override MultiMeasureRest
> #'expand-limit = #1 s1*11 }
>

Pour faire bref (je sors Madame pour notre anniversaire de mariage),
j'ai
MAC qui réside dans definitions.ily

violon.ily qui contient  {a4 b c d R1*12 e4 f g a }

et Violon.ly :
\include definition.ily

\score {
   \new staff <<
     clef treble \MAC
     \include "violon.ily"
}

> sinon LilyPond considère qu'il y a un bloc de 12 mesures de silence et
> non 12 mesures de silence. Et il ne peut pas découper ce bloc grâce à
> une voix parallèle.
>

J'ai l'impression que cela dépend aussi de la métrique.
Si intéressé, je t'envoie demain matin l'intégrale des sources.

@+
Jean-Charles

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sun, 26 Jun 2011 14:20:52 +0200

Le 25/06/2011 15:56, Bertrand Bordage disait :
> [...]

L'utilisation d'une répétition développée n'est pas la bonne solution en 
l’occurrence  : aucune des deux portées n'a de *multimesure*.

Ce qui me contrarie au plus haut point est la différence de traitement 
alors que la construction est identique pour les deux portées du 
"staffgroup". A moins que tu n'aies, caché vers le haut de ta manche, un 
joker du genre
MMglyph = ChurchRestQuiALAirDUneCoteDArchitecteBienGrasse

Autant je pourrais arriver à "faire passer" les gros points noirs ou 
morceaux de bâton qui apparaissent çà et là au gré des parties, autant 
le cas de figure de l'image jointe m'énerve au plus haut point.
Le détail de ma construction est dans l'archive (compilation de
Arthur-Oboe.ly à la racine) dont je n'ai gardé que le nécessaire.
La totale est disponible sur simple demande.

En /a parte/, j'ajouterais que la plupart des exemples de la 
documentation ont le tort, dans l'optique de n'être que minimaliste, de 
ne fonctionner naturellement que parce qu'en 4/4...

Sur ces pensées négatives, je m'arrête, et retourne à la gestion 
disparate des espacements dans mon conducteur et partie de chœur, tout 
en gardant espoir d'avoir toujours la même chevelure à l'arrivée.

@+
Jean-Charles

---

From: Bertrand Bordage <[email-masked]>
Date: Sun, 26 Jun 2011 15:38:16 +0200

La solution est extrêmement simple :
Dans la définition de MAC, il faut préciser
\override *Staff.*MultiMeasureRest #'expand-limit = #1

À plus !
Bertrand

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sun, 26 Jun 2011 16:40:31 +0200

Le 26/06/2011 15:38, Bertrand Bordage disait :
> \override Staff.MultiMeasureRest #'expand-limit = #1
>

Peut être ceci mériterait-il un @knownissue ?

Dommage d'avoir galéré si longtemps...

@+
Jean-Charles

---

From: Bertrand Bordage <[email-masked]>
Date: Sun, 26 Jun 2011 20:15:29 +0200

> Peut être ceci mériterait-il un @knownissue ?

Non... Je n'ai pas trop fait attention à l'architecture de tes fichiers,
mais je pense que c'est de ce côté qu'il y a un problème (sans vouloir
offenser). En effet, cela fonctionne correctement si on fait :

<<
  \compressFullBarRests
  \new Staff {\override MultiMeasureRest #'expand-limit = #1 R1*5}
  \new Staff {\override MultiMeasureRest #'expand-limit = #1 R1*5}

Bertrand

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Sun, 26 Jun 2011 21:26:31 +0200

>    \new Staff {\override MultiMeasureRest #'expand-limit = #1 R1*5}

C'est ça qui me chagrine puisque ma variable MAC (pas écossaise pour un
rond, mais plus court que MesureACompter) est "recopiée" dans la
définition de mes portées :

   <<
     \new Staff = "Vents 1" <<
       \clef treble \MAC
       ...des notes rapatriées...
     \new Staff = "Vents 2" <<
       \clef treble \MAC
       ...autres notes rapatriées...

La seule différence est que tu en sors \compressFullBarRests.
Je n'ai fais que recopier en un seul endroit ce qu'il y a dans
le 4e exemple de Full measure rests (1.2.2 du manuel de notation).

J'avoue qu'il ne me viendrait pas à l'esprit d'avoir un traitement 
différent selon la voix sur une même portée... ce qui te vaut mes
plus vifs remerciements.

@+
Jean-Charles

---

From: Bertrand Bordage <[email-masked]>
Date: Sun, 26 Jun 2011 21:41:52 +0200

Le problème vient des << >>
Comme tu le sais, ils permettent de définir des choses en parallèle.
Pour que le \MAC concerne les notes, il faut soit faire :
<< {\MAC \include "notes"} \include "global" >>
soit dire que le changement d'expand-limit concerne la portée,
indifféremment des voix qu'il contient (la solution évoquée avant).

Voilà pour l'explication :)
Bertrand