Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: Radler am Donnerstag, 20. Juni 2013, 11:45
-
Hallo liebe Lilypondianer,
eine .ly-Datei, die im letzten Oktober (2012) noch anstandslos übersetzt wurde, bricht jetzt mit einem Fehler in den Tiefen vom Lilypond-Code ab. (siehe unten).
Durch ein- und auskommentieren von Musik fand ich heraus, dass es offenbar an einem es4. in einer \alternative-Anweisung liegt. Die ist aber völlig unverdächtig.
Ich benutze 2.17.20, zurückgehen auf 2.17.6. hat nicht geholfen.
Kann jemand helfen? Braucht Ihr die .ly-Datei?
Grüße und Dank
von Radler
c:/Programme/LilyPond/usr/share/lilypond/current/scm/bar-line.scm:926:28: In procedure ly:grob-array-length in expression (ly:grob-array-length bar-array):
c:/Programme/LilyPond/usr/share/lilypond/current/scm/bar-line.scm:926:28: Wrong type argument in position 1 (expecting Grob_array): ()
-
Hallo,
die Fehlermeldung in
ly:grob-array-length in expression (ly:grob-array-length bar-array)
läßt mich eher vermuten, daß es an den BarLines liegt.
2.17. hat ein neues barline-interface. Manche BarLine muß jetzt auch anders geschrieben werden.
->NR
Die Schreibweisen werden aber von convert-ly korrekt konvertiert.
Hast Du das versucht?
Wenn das nicht hilft, solltest Du ein Beispiel posten.
Gruß,
Harm
-
Danke für die schnelle Antwort, Harm!
Leider trifft Deine Vermutung nicht zu. Die einzige bar-Anweisung in der .ly-Datei sieht so aus:
\bar ":|."
Die entspricht NR S.92 ( vorletzter Taktstrich, zwischen g1 und a1).
Und wenn ich die bar-Anweisung herausnehme, kommt der gleiche Fehler.
Hat noch jemand Ideen?
Vielen Dank und viele Grüße
von Radler
-
lass mich raten - oder deinen code lesen ;D
-
Leider trifft Deine Vermutung nicht zu.
Das kann ich nicht glauben (falls Du die Fehlermeldungen vollständig gepostet hast).
Laut Fehlermeldung funktioniert
(ly:grob-array-length bar-array)nicht, da
bar-array eine leere Liste sei.
Dieser Code entstammt der Definition für 'ly:volta-bracket::calc-shorten-pair' aus bar-line.scm, welcher die X-Länge von VoltaBrackets regelt, abhängig von den Taktstrichen.
'bar-array' is definiert als (ly:grob-object grob 'bars)
Wenn bar-array jetzt eine leere Liste ist, heißt das, daß keine BarLines zur Berechnung gefunden werden.
Es gibt jetzt nur zwei Möglichkeiten.
- Der Code aus bar-line.scm ist fehlerhaft.
Das interessiert mich sehr, da ich eine zeitlang an der Erstellung des entsprechenden patches mitgearbeitet habe und dieser spezielle Fehler noch nie aufgetaucht ist.
Da brauch ich aber Deinen Code.
- Dein Code ist fehlerhaft.
Um hier weiterzukommen brauch ich aber Deinen Code.
Also, wie Eluze schon schrieb:
lass mich raten - oder deinen code lesen
vorzugsweise als Minimal-Beispiel.
Gruß,
Harm
Btw, bar-line.scm regelt sehr viel mehr als explizite Setzungen via \bar "xy"
-
Danke für die Angebote, meinen Code zu lesen, die ich gerne annehme!
Allerdings ist es ein gutes Stück Arbeit, weil die Datei eine lange Genese hat und erst gründlich gereinigt werden muss. Das könnte sich also etwas hinziehen. Ich melde mich dann wieder.
Danke nochmal!
Viele Grüße
von Radler
-
Danke für die Angebote, meinen Code zu lesen, die ich gerne annehme!
Ähm, Du erinnerst Dich doch an:
vorzugsweise als Minimal-Beispiel.
?!!
;)
Gruß,
Harm
-
Ja - das eben macht die viele Arbeit und kostet die viele Zeit.
Aber ich will mich nicht beklagen.
Es soll nur nicht der Eindruck entstehen, die Lösung des Problems wäre mir nicht wichtig...
Grüße von
Radler
-
So, jetzt habe ich es gefunden: Es lag an consists/remove Volta_engraver. Wenn ich beides auskommentiere, funktioniert es. Damit ist die Sache für mich erledigt, weil ich mit dem Ergebnis leben kann.
Wenn noch jemand nachforschen will: Ich hänge unten noch einen Code-Auschnitt an (nicht compilierbar) mit den auskommentierten (!) Volta_engraver-Anweisungen.
Vielen Dank an alle, die sich meines Problems angenommen haben!
Viele Grüße
von Radler
MstaffCantusFirmus =
{
\new Staff
<<
\llKeyTime
\once \override Score.RehearsalMark.X-offset = #-1
\once \override Score.MetronomeMark.extra-offset = #'(+0 . -0)
\set Staff.midiInstrument = #"violin"
\new Voice = "voiceCantusFirmus" \with
{
\consists "Ambitus_engraver"
\consists "Mark_engraver"
% \consists "Volta_engraver"
}
{
\autoBeamOff
%\voiceOne
\McantusFirmus
\bar ":|."
}
\new Lyrics \lyricsto "voiceCantusFirmus"
{
\TintroSopran
\TersteStropheCantusFirmus
\TdritteStropheCantusFirmus
}
\new Lyrics \lyricsto "voiceCantusFirmus"
{
\TintroCantusFirmusSkip
\TzweiteStropheCantusFirmus
}
\new Lyrics \lyricsto "voiceCantusFirmus"
{
\TintroCantusFirmusSkip
\TvierteStropheCantusFirmus
\TfuenfteStropheCantusFirmus
}
>>
}
llChordNames =
{
\new ChordNames
{
\set majorSevenSymbol = \markup { "7#" }
\set chordNameLowercaseMinor = ##t
\set chordChanges = ##t
\semiGermanChords % \germanChords
\Call
}
}
llScore =
{
\transpose es c
{
\new ChoirStaff
<<
\llChordNames
\MstaffCantusFirmus
>>
}
}
\score
{
{
\llScore
}
\layout
{
indent = 0.0\mm
\context
{
\RemoveEmptyStaffContext
\override VerticalAxisGroup.remove-first = ##t
}
\context
{
\Score
% \remove "Volta_engraver"
\remove "Mark_engraver"
}
\context
{
\ChordNames
\override ChordName.font-series = #'bold
\override ChordName.font-size = #2.0
}
} % \layout
} % \score
\score
{
\unfoldRepeats
{
\llScore
}
\midi{}
} % \score
-
Hallo Radler,
Du hattest den "Volta_engraver" in einem Voice-context eingefügt.
Generell kann ich mir nicht vorstellen, daß das sinnvoll sein kann.
In der Doku (ich habe NR, Snippets und LSR durchsucht) ist der "Volta_engraver" wenn überhaupt, dann immer in einen Staff-context verschoben.
Hast Du das versucht?
Gruß,
Harm
-
Großartig Harm, das funktioniert - vielen Dank!
Ehrlich gesagt habe ich die ganze Sache mit den Engrävern nicht verstanden. Das remove/consists-Konstrukt habe ich von einem anderen hilfreichen Lilypondianer übernommen - und bisher funktionierte es ja auch einigermaßen.
Aber offenbar ist die neue Lilypond-Version kritischer.
Ich werde meine .ly-Dateien umstellen. (Das sind immerhin über 600 Stück!)
Viele Grüße und nochmals vielen Dank
von Radler