Fehler in der Taktüberprüfung wenn \midi { } an ist

Begonnen von Stephan, Sonntag, 2. August 2026, 22:03

Vorheriges Thema - Nächstes Thema

Stephan

Hallo,

ich habe diesen Code:
\version "2.24.4"

\score {
  \new Staff {
  \new Voice {
  \relative c' {
    \clef "treble" \time 3/4 \key c \major
 
      \partial 4
     
      \repeat volta 2 {
        e4 | f2 g4
      } \alternative { { d2  } { d2. | } }
      c4 d  f | e2   
      \bar "|."
  }
  }
  }
  \layout { }
  \midi { }
}

Damit bekomme diese Warnung:
Taktüberprüfung gescheitert bei: 1/2
      } \alternative { { d2  } { d2.
                                     | } }

Wenn ich nun die Zeile \midi {} auskommentiere kommt keine Warung.

Kann mir das bitte jemand erklären?

Danke und Grüße
Stephan

rgree

Hallo Stephan,

mit midi() scheint die Taktprüfung pingeliger zu sein als ohne,
weil - streng genommen - der Takt unter der 1. Klammer zu kurz ist,
nämlich nur eine halbe Note statt einer punktierten Halben.
Die Einfügung eines "partial 2" vor dem fraglichen Takt stellt Lilypond dann zufrieden.

...
\score {
  \new Staff {
  \new Voice {
  \relative c' {
    \clef "treble" \time 3/4 \key c \major
 
      \partial 4
     
      \repeat volta 2 {
        e4 | f2 g4
      } \alternative { { \partial 2 d2  } { d2. | } }
      c4 d  f | e2   
      \bar "|."
  }
  }
  }
  \layout { }
  \midi { }
}

Ich hoffe, es hilft.

Gruß,
Reinhard

harm6

ZitatDie Einfügung eines "partial 2" vor dem fraglichen Takt stellt Lilypond dann zufrieden.
Erzeugt aber seinerseits Probleme sobald \unfoldRepeats verwendet wird.

Das Problem ist das wenig dokumentierte context-property `alternativeRestores` mit dem default:
'(measurePosition
   measureLength
   measureStartNow
   lastChord)
Wenn du `measureLength` rausnimmst funktioniert es:

\version "2.24.4"

\score {
  \new Staff {
    \new Voice {
      \relative c' {
        \clef "treble"
        \time 3/4
        \key c \major
        \partial 4
        \repeat volta 2 {
          e4 | f2 g4
        } \alternative { { d2  } { d2. | } }
        c4 d  f | e2
        \bar "|."
      }
    }
  }
  \layout { }
  \midi {
    \context {
      \Score
      alternativeRestores = #'(measurePosition measureStartNow lastChord)
    }
  }
}


HTH,
  Harm

Stephan

Hallo,

vielen Dank für die schnelle Antwort.

Damit kommt die Warnung nicht mehr und ich kann beruhigt weiter machen.

Grüße
Stephan

harm6

Tatsächlich war meine Antwort nicht wirklich korrekt.
Es ist vielmehr so, dass `alternativeRestores` in \midi überhaupt nicht gesetzt ist, `measureLength` hat erstmal nichts damit zu tun.

Richtiger ist:
  \midi {
    \context {
      \Score
      alternativeRestores = #'(measurePosition measureLength measureStartNow lastChord)
    }
  }

Siehe auch:
https://gitlab.com/lilypond/lilypond/-/work_items/6953
https://gitlab.com/lilypond/lilypond/-/merge_requests/3113

Gruss,
  Harm