Subject: Comportement étrâne avec \cadenzaOn

From: "[email-masked]" <[email-masked]>
Date: Wed, 14 Mar 2012 16:25:47 +0100

Bonjour à tous,

Dans la petite partoche ci-dessous, deux barres de mesure parasites apparaissent avant la barre de mesure finale.  Si on enlève soit RSFwUEmZYZkAxAaJ et HEZxDsXfwwysHRwW, soit EYZmnqiwEyUCvvhI et SmfcABCtyTNOqTsv, ces barres ne sont pas imprimées.  Je pense que \cadenzaOn est l'agent provocateur, mais je ne suis pas sûr.  Avez-vous des idées ?

Cordialement,
~Mike

\version "2.14.0"

\header {
  title = "the tragedy of intent iv"
  subtitle = \markup { "Conchita vs. The Philistines — AND HOW!" } 
  composer = "mike solomon"
}

RSFwUEmZYZkAxAaJ =
<< {
  fis'32\mp ( gis' ais'8-. ) r cis''-. cis''-. r r16
  fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16
  ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16
  ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16
 } { \time 3/8 \cadenzaOn \tempo "presto" s16 \cadenzaOff \bar "|" s4. s4. s4. s4. s4. s4. s4.
\cadenzaOn s4 s16 \cadenzaOff \bar "||"  } >>

HEZxDsXfwwysHRwW= { r16 r4. r4. r4. r4. r4. r4. r4. r4 r16 }

EYZmnqiwEyUCvvhI= {
  \clef bass \cadenzaOn \ottava #-1    b,,,2~b,,,8^\mf\bar "" b,,,16\bar "" r4.
  b,,,16\bar "" b,,,16\bar "" b,,,4..\bar "" 
   \cadenzaOff \bar "||" \ottava #0 
}
SmfcABCtyTNOqTsv={\clef treble 
s16*26
}

HRCJDPMHVhjDaTgd = { \cadenzaOn r1^\fermata \cadenzaOff \bar "||" } FPeHmkwRBWtDOfJm = { r1^\fermata }

\new PianoStaff <<
  \new Staff = "up" { \clef treble
\RSFwUEmZYZkAxAaJ
\SmfcABCtyTNOqTsv
\HRCJDPMHVhjDaTgd }
  \new Staff = "down" { \clef bass
\HEZxDsXfwwysHRwW
\EYZmnqiwEyUCvvhI
\FPeHmkwRBWtDOfJm \bar "|."}
\layout {\context {\Score \override NonMusicalPaperColumn #'allow-loose-spacing = ##f
 \override DynamicText #'extra-spacing-width = #'(-0.15 . 0) }}

---

From: Phil Hézaine <[email-masked]>
Date: Wed, 14 Mar 2012 20:11:39 +0100

> Dans la petite partoche ci-dessous, deux barres de mesure parasites apparaissent avant la barre de mesure finale.  Si on enlève soit RSFwUEmZYZkAxAaJ et HEZxDsXfwwysHRwW, soit EYZmnqiwEyUCvvhI et S…

Bonsoir,

J'ai juste essayé de faire le compte des 16th.
Ce qui me semble plutôt <<étrâne>> c'est le problème de synchro entre 
les différentes variables. Mais peut-être que je me trompe.

  \version "2.14.0"

\header {

RSFwUEmZYZkAxAaJ =
<< {
   fis'32\mp ( gis' ais'8-. ) r cis''-. cis''-. r r16 % = 12 16th
   fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16    % = +12 16th
   ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16      % = +12 16th
   ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16      % = +12 16th
                                                      % == 48 16th
  } { \time 3/8 \cadenzaOn \tempo "presto" s16 \cadenzaOff \bar "|" s4. 
s4. s4. s4. s4. s4. s4.                               % = 42 16th
\cadenzaOn s4 s16 \cadenzaOff \bar "||"  } >>         % = +5 16th
                                                       % == 47 16th

                                                       % == 49 16th

EYZmnqiwEyUCvvhI= {
   \clef bass \cadenzaOn \ottava #-1    b,,,2~b,,,8^\mf\bar "" 
b,,,16\bar "" r4.
   b,,,16\bar "" b,,,16\bar "" b,,,4..\bar ""
    \cadenzaOff \bar "||" \ottava #0                   % == 17 16th
}
SmfcABCtyTNOqTsv={\clef treble
s16*26                                                % == 26 16th
}

HRCJDPMHVhjDaTgd = { \cadenzaOn r1^\fermata \cadenzaOff \bar "||" } % == 
16 16th
FPeHmkwRBWtDOfJm = { r1^\fermata }                    % == 16 16th

\new PianoStaff <<
   \new Staff = "up" { \clef treble
\RSFwUEmZYZkAxAaJ           % == {48 16th} // {47 16th}
\SmfcABCtyTNOqTsv           % == 26 16th
\HRCJDPMHVhjDaTgd }         % == 16 16th
   \new Staff = "down" { \clef bass
\HEZxDsXfwwysHRwW           % == 49 16th
\EYZmnqiwEyUCvvhI           % == 17 16th
\FPeHmkwRBWtDOfJm \bar "|." % == 16 16th
  }
\layout {\context {\Score \override NonMusicalPaperColumn 
#'allow-loose-spacing = ##f
  \override DynamicText #'extra-spacing-width = #'(-0.15 . 0) }}

Amicalement.
Phil.

---

From: Phil Hézaine <[email-masked]>
Date: Wed, 14 Mar 2012 20:22:48 +0100

Le 14/03/2012 20:11, Phil Hézaine a écrit :
>> Dans la petite partoche ci-dessous, deux barres de mesure parasites
>> apparaissent avant la barre de mesure finale. Si on enlève soit
>> RSFwUEmZYZkAxAaJ et HEZxDsXfwwysHRwW, soit EYZmnqiwEyUCvvhI et
>> SmfcABCtyTNOqTsv, ces barres ne sont pas imprimées. Je pense que
>> \cadenzaOn est l'agent provocateur, mais je ne suis pas sûr. Avez-vous
>> des idées ?
>>
>> Cordialement,
>> ~Mike
>
> Bonsoir,
>

Arghh!! Oublié un s16 pour le \time 3/8
donc \RSFwUEmZYZkAxAaJ % == {48 16th} // {48 16th} !!!!

Voui! Faut vérifier avant de se précipiter.

---

From: "[email-masked]" <[email-masked]>
Date: Wed, 14 Mar 2012 20:54:04 +0100

Bonsoir,

Merci pour ton aide!

Après avoir lu ton mail, j'ai créé une fonction qui vérifie que les durées des bouts de musique dans les variables soient égales (voir `doAssertion' ci-dessous).  Je suis donc à peu près certain qu'il n'y a pas de problème avec le comptage.  Voici le code complet (avec de différentes variables - le morceau est généré à partir d'un algorithme):

\version "2.14.0"

\header {

doAssertion = #(define-music-function (parser location m1 m2 s1 s2) (ly:music? ly:music? string? string?)
      (if (not (equal? (ly:music-property (car (ly:music-property m1 'elements)) 'duration)
                         (ly:music-property (car (ly:music-property m2 'elements)) 'duration)))
                               (format #t ">>>>>>>>>>>>>>>>>>>>>>> BAD ~a ~a

" s1 s2))
                                  m1)

MjUifgoyDeqbvCHM = { \cadenzaOn r1^\fermata \cadenzaOff \bar "||" } XZyJHzjaLpCoIDWf = { r1^\fermata }
GRanITzMaLSxcacU= << { fis'32\mp ( gis' ais'8-. ) r cis''-. cis''-. r r16 fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16 ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16 ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16
fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16 fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16 ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16 ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16
fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16 fis'32 ( gis' ais'8-. ) r cis''-. cis''-. r r16 ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16 ais'32 ( gis' fis'8-. ) r dis'-. dis'-. r r16
 } { \time 3/8 \cadenzaOn \tempo "presto" s16 \cadenzaOff \bar "|" s4. s4. s4. s4. s4. s4. s4.s4.*8 s4.*8 \cadenzaOn s4 s16 \cadenzaOff \bar "||"  } >>
TdpYNxtirUOVibVt= { r16 r4. r4. r4. r4. r4. r4. r4. r4 r16
r16 r4. r4. r4. r4. r4. r4. r4. r4 r16
r16 r4. r4. r4. r4. r4. r4. r4. r4 r16
 }

KDvraAcSgMpGWhQW = { \cadenzaOn r1^\fermata \cadenzaOff \bar "||" } HQROumBbwjaIbBtz = { r1^\fermata }
OxBjnhQOZwhBpbQE = { \tempo "rubato" \cadenzaOn \clef bass <c g>4 \bar "" r4 \bar "" c4 \bar "" r4 \bar "" <c g>4 \bar "" r4 \bar "" c4 \bar "" r4 \bar ""  \cadenzaOff \bar "||" }

TKiexwzyUvjbudor= {\clef treble <c' e' fis' g'>4\f  \bar "" r4 \bar "" <c' e'>4 \bar "" r4 \bar "" <c' e' fis' g'>4 \bar "" r4 \bar "" <c' e'>4 \bar "" r4 \bar "" }

AKDuHtxFBYMezRQt = { \cadenzaOn r1^\fermata \cadenzaOff \bar "||" } RPISnCyCoOebQeFe = { r1^\fermata }
\new PianoStaff <<
  \new Staff = "up" { \clef treble \MjUifgoyDeqbvCHM \GRanITzMaLSxcacU \KDvraAcSgMpGWhQW \TKiexwzyUvjbudor \AKDuHtxFBYMezRQt }
  \new Staff = "down" { \clef bass \XZyJHzjaLpCoIDWf \TdpYNxtirUOVibVt \HQROumBbwjaIbBtz \OxBjnhQOZwhBpbQE \RPISnCyCoOebQeFe \bar "|."}
\layout {\context {\Score \override NonMusicalPaperColumn #'allow-loose-spacing = ##f
 \override DynamicText #'extra-spacing-width = #'(-0.15 . 0) }}
\doAssertion #(ly:export (skip-of-length XZyJHzjaLpCoIDWf)) #(ly:export (skip-of-length MjUifgoyDeqbvCHM)) #"XZyJHzjaLpCoIDWf" #"MjUifgoyDeqbvCHM"
\doAssertion #(ly:export (skip-of-length TdpYNxtirUOVibVt)) #(ly:export (skip-of-length GRanITzMaLSxcacU)) #"TdpYNxtirUOVibVt" #"GRanITzMaLSxcacU"
\doAssertion #(ly:export (skip-of-length HQROumBbwjaIbBtz)) #(ly:export (skip-of-length KDvraAcSgMpGWhQW)) #"HQROumBbwjaIbBtz" #"KDvraAcSgMpGWhQW"
\doAssertion #(ly:export (skip-of-length OxBjnhQOZwhBpbQE)) #(ly:export (skip-of-length TKiexwzyUvjbudor)) #"OxBjnhQOZwhBpbQE" #"TKiexwzyUvjbudor"
\doAssertion #(ly:export (skip-of-length RPISnCyCoOebQeFe)) #(ly:export (skip-of-length AKDuHtxFBYMezRQt)) #"RPISnCyCoOebQeFe" #"AKDuHtxFBYMezRQt"

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Wed, 14 Mar 2012 21:33:12 +0100

Le 14/03/2012 20:54, [email-masked] disait :
>>>> Dans la petite partoche ci-dessous, deux barres de mesure
>>>> parasites apparaissent avant la barre de mesure finale. Si on
>>>> enlève soit RSFwUEmZYZkAxAaJ et HEZxDsXfwwysHRwW, soit
>>>> EYZmnqiwEyUCvvhI et SmfcABCtyTNOqTsv, ces barres ne sont pas
>>>> imprimées. Je pense que \cadenzaOn est l'agent provocateur,
>>>> mais je ne suis pas sûr. Avez-vous des idées ?
>>>>

>>> J'ai juste essayé de faire le compte des 16th. Ce qui me semble
>>> plutôt<<étrâne>>  c'est le problème de synchro entre les
>>> différentes variables. Mais peut-être que je me trompe.
>>>

oui !

>>> } { \time 3/8 \cadenzaOn \tempo "presto" s16 \cadenzaOff \bar "|"
y en avait un là                             ^^^

J'avais vérifié, le compte de croches est identique : 24+13+8

> Merci pour ton aide!
>
> Après avoir lu ton mail, j'ai créé une fonction qui vérifie que les
> durées des bouts de musique dans les variables soient égales (voir
> `doAssertion' ci-dessous).  Je suis donc à peu près certain qu'il n'y
> a pas de problème avec le comptage.  Voici le code complet (avec de
> différentes variables - le morceau est généré à partir d'un
> algorithme):
>

Là je n'ai plus de temps, mais j'ai remarqué un comportement bizarre :

Si tu joue sur la dernière cadence, les problèmes disparaissent.

- Dans ta version d'origine, le deux portées ont la même chose ; le fait 
d'utiliser la même variable fait sauter le problème.

- Basculer la cadence en "r1*3/8" résout le problème.

J'ai l'impression que le fait de finir sur une cadence peut poser 
problème : ajoute, après la cadence, un s4.*0 aux deux variables, et ça 
marche.

C'est comme au loto...

@+
Jean-Charles

---

From: "[email-masked]" <[email-masked]>
Date: Wed, 14 Mar 2012 21:56:13 +0100

On Mar 14, 2012, at 9:33 PM, Jean-Charles Malahieude wrote:

> - Dans ta version d'origine, le deux portées ont la même chose ; le fait d'utiliser la même variable fait sauter le problème.
> 
> J'ai l'impression que le fait de finir sur une cadence peut poser problème : ajoute, après la cadence, un s4.*0 aux deux variables, et ça marche.
> 

Très étranche...
J'ai réussi à faire un exemple minimal montrant la source du problème.  Apparemment il y a des cas où \time et \cadenzaOn ne se mélangent pas :(

\version "2.14.0"

GRanITzMaLSxcacU= << {
  fis'32\mp gis'
  dis'8-. r r16
} {
  \time 3/8 %%%% <<<---- supprimez-moi pour faire disparaître le problème
  \cadenzaOn s16 \cadenzaOff \bar "|"
\cadenzaOn s4 s16 \cadenzaOff \bar "||"  } >>

TdpYNxtirUOVibVt= { r16 r4 r16 }

OxBjnhQOZwhBpbQE = {
  \cadenzaOn
  \clef bass <c g>4 \bar "" r4 \bar "" c4 \bar "" r4 \bar ""
  \cadenzaOff \bar "||"
}

TKiexwzyUvjbudor= {
  \clef treble
  <c' e' fis' g'>4\f  \bar "" r4 \bar "" <c' e'>4 \bar "" r4 \bar ""
}

AKDuHtxFBYMezRQt = { \cadenzaOn r1^\fermata \cadenzaOff \bar "||" }
RPISnCyCoOebQeFe = { r1^\fermata }

\new PianoStaff <<
 \new Staff = "up" {
\clef treble
\GRanITzMaLSxcacU
\TKiexwzyUvjbudor
\AKDuHtxFBYMezRQt
}
\TdpYNxtirUOVibVt
\OxBjnhQOZwhBpbQE
\RPISnCyCoOebQeFe
\bar "|."}

---

From: Xavier Scheuer <[email-masked]>
Date: Wed, 14 Mar 2012 22:40:50 +0100

2012/3/14 [email-masked] <[email-masked]>:
>
> Très étranche...
> J'ai réussi à faire un exemple minimal montrant la source du problème.
>  Apparemment il y a des cas où \time et \cadenzaOn ne se mélangent
> pas :(

Bonsoir,

Il semblerait que le problème puisse venir du
  \set Timing.measurePosition = #ZERO-MOMENT
contenu dans la définition de "cadenzaOff".

Si on le commente on obtient le résultat attendu.
Je te laisse le "plaisir" de faire part de ceci sur bug-lilypond.

%%%% Snippet

\version "2.14.0"

cadenzaOff = {
  \set Timing.timing = ##t
  % \set Timing.measurePosition = #ZERO-MOMENT   %%%% <<<---- comment
me out to get correct barring
  \set Timing.autoBeaming = ##t
}

GRanITzMaLSxcacU = <<
  {
    fis'32\mp gis'
    dis'8-. r r16
  } {
    \time 3/8 %%%% <<<---- comment me out to get correct barring
    \cadenzaOn s16 \cadenzaOff \bar "|"
    \cadenzaOn s4 s16 \cadenzaOff \bar "||"
  }

OxBjnhQOZwhBpbQE = {
  \cadenzaOn

TKiexwzyUvjbudor= {
  \clef treble

\new PianoStaff <<
  \new Staff = "up" {
    \clef treble
    \GRanITzMaLSxcacU
    \TKiexwzyUvjbudor
    \AKDuHtxFBYMezRQt
  }
  \new Staff = "down" {
    \clef bass
    \TdpYNxtirUOVibVt
    \OxBjnhQOZwhBpbQE
    \RPISnCyCoOebQeFe
    \bar "|."
  }

%%%% End of snippet

Cordialement,
Xavier

-- 
Xavier Scheuer <[email-masked]>

---

From: "[email-masked]" <[email-masked]>
Date: Thu, 15 Mar 2012 08:03:41 +0100

> Je te laisse le "plaisir" de faire part de ceci sur bug-lilypond.

Merci Xavier,

J'ai rajouté \grace { s32 } après chaque \cadenzaOff et ça résout le problème.  Il faut écarter les arrivées des \cadenzaOff et \cadenzaOn simultanés, faute de quoi lilypond ne sait pas lequel implémenter en premier.

Cordialement,
~Mike

---

From: Jean-Charles Malahieude <[email-masked]>
Date: Thu, 15 Mar 2012 19:11:54 +0100

Le 15/03/2012 08:03, [email-masked] disait :
>> 2012/3/14 [email-masked]<[email-masked]>:
>>>
>>> Très étranche... J'ai réussi à faire un exemple minimal montrant
>>> la source du problème. Apparemment il y a des cas où \time et
>>> \cadenzaOn ne se mélangent pas :(
>>
>> Bonsoir,
>>
>> Il semblerait que le problème puisse venir du \set
>> Timing.measurePosition = #ZERO-MOMENT contenu dans la définition de
>> "cadenzaOff".
>>
>> Si on le commente on obtient le résultat attendu. Je te laisse le
>> "plaisir" de faire part de ceci sur bug-lilypond.
>
>
> Merci Xavier,
>
> J'ai rajouté \grace { s32 } après chaque \cadenzaOff et ça résout le
> problème.  Il faut écarter les arrivées des \cadenzaOff et \cadenzaOn
> simultanés, faute de quoi lilypond ne sait pas lequel implémenter en
> premier.
>

Cela me rappelle un commentaire que j'avais fait
http://lists.gnu.org/archive/html/bug-lilypond/2012-03/msg00292.html
et pour lequel la réponse de David ne m'a pas satisfait.

Je continue de considérer que Lily ne /clôture/ pas une cadence, mais
plus ou moins reprend le cours de l'histoire sans "re-synchronisation"
des chronomètres. Du moins c'est ce que me laisse à penser la sortie de
displayMusic.

@+
Jean-Charles