Silence multimesures : apparence aléatoire

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

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

Bertrand

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

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 = { s13 \once \override MultiMeasureRest #'expand-limit = #1 s111 }

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

Le 25/06/2011 15:56, Bertrand Bordage disait :

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 }

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

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.

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

Le 25/06/2011 15:56, Bertrand Bordage disait :

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

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

bizarre.png

zetest.tar.bz2 (7.61 KB)

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

À plus !
Bertrand

Le 26/06/2011 15:38, Bertrand Bordage disait :

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

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

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

@+
Jean-Charles

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 R15}
\new Staff {\override MultiMeasureRest #'expand-limit = #1 R1
5}

Bertrand

Le 26/06/2011 20:15, Bertrand Bordage disait :

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

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

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 :slight_smile:
Bertrand