Heute habe ich mir den Code von
http://lsr.dsi.unimi.it/LSR/Item?id=873 vorgenommen und untersucht.
Der Originalcode compiliert mit Fehlermeldung:
...
Interpretation der Musik...
[/usr/local/lilypond/usr/share/lilypond/current/fonts/otf/emmentaler-20.otf]
choral2.ly:146:8: Warnung: Zwei gleichzeitige mark-Ereignisse, dieses wird verworfen
\mark \markup { \bold" Pupil:" Here's my version! }
choral2.ly:57:8: Warnung: Vorheriges mark-Ereignis hier
\mark \markup {
choral2.ly:232:8: Warnung: Zwei gleichzeitige mark-Ereignisse, dieses wird verworfen
\mark \markup {
choral2.ly:57:8: Warnung: Vorheriges mark-Ereignis hier
\mark \markup {
verstrichene Zeit: 0.16 Sekunden
Elementanzahl: 1502 (Klammern: 52)
...
Diese stört aber nicht weiter und ist insbesondere für den musikalischen Teil nicht relevant. .
Eine große Zahl von Anweisungen betrifft lediglich die Textausgabe und ist deshalb für die Notendarstellung nicht wirksam. Die meisten habe ich auskommentiert. Ich füge hier den stark reuzierten Code für eigene Experimente ein:
\version "2.16.2"
%Selbst wenn man nur ein \partial stehen läßt gilt der für das ganze Stück?!
% by Thomas Morley
#(set-global-staff-size 18)
\paper {
indent = 0
%ragged-right = ##f
%Sorgt für die Ausgabe des Titels
print-all-headers = ##t
}
\layout {
\context {
\Staff
%Sorgt für die Textausgabe
%\consists "Mark_engraver"
%Ohne schiebt sich der Start des Textes nach links außerhalb des Blatts? :
\override RehearsalMark #'self-alignment-X = #LEFT
%proportionalNotationDuration = #(ly:make-moment 1 32)
}
\context {
\StaffGroup
%Sorgt für die Verbindung der beiden Zeilen mit einer Klammer
%wird unten mit durch eine Frontlinie ersetzt \override SystemStartBrace #'style = #'bar-line
%systemStartDelimiterHierarchy = #'(SystemStartBrace (SystemStartBracket a b))
}
\context {
\Score
%Overrides die übliche geschweifte Klammer und macht eine Frontlinie anstatt
%\override SystemStartBrace #'style = #'bar-line
%Sorgt dafür, dass die drei Staffs nicht mit Linie verbunden werden:
%\override SystemStartBar #'stencil = ##f
%\override SystemStartBrace #'padding = #-0.1
%\override SystemStartBrace #'thickness = #1.6
%\remove "Mark_engraver"
%\override StaffGrouper #'staffgroup-staff-spacing #'basic-distance = #15
}
}
%%%% EXAMPLE
%{
txt =
\lyricmode {
Wer4 nur den lie -- ben Gott läßt wal2 -- ten4
und4 hof -- fet auf ihn al -- le Zeit2.
}
%}
% First StaffGroup "exercise"
eI =
\relative c' {
\mark \markup {
\bold Teacher:
This is a simple setting of the choral. Please improve it.
}
\key a \minor
\time 4/4
\voiceOne
%\partial 4
e4
a b c b
a b gis2
e4\fermata g! g f
e a %a gis
%a2.\fermata
\bar ":|"
}
eII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
%\partial 4
c4
e e e gis
a f e2
b4 b d d
c c %d d
%c2.
\bar ":|"
}
eIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
%\partial 4
a4
c b a b
c d b2
gis4 g g b
c a %f e
%e2.
}
eIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
%\partial 4
a,4
a' gis a e
a, d e2
e,4\fermata e' b g
c f %d e
%a,2.\fermata
\bar ":|"
}
exercise =
\new StaffGroup = "exercise"
<<
\new Staff
<<
\new Voice \eI
\new Voice \eII
>>
%\new Lyrics \txt
\new Staff
<<
\new Voice \eIII
\new Voice \eIV
>>
>>
% Second StaffGRoup "simple Bach"
sbI =
\relative c' {
\mark \markup { \bold" Pupil:" Here's my version! }
\key a \minor
\time 4/4
\voiceOne
%\partial 4
e4
a b c b
a b gis2
e4\fermata g! g f
e a %a gis
%a2.\fermata
\bar ":|"
}
sbII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
%\partial 4
c8 d
e4 e e8 f g4
f f e2
b4 b8 c d4 d
e8 d c4 %b8 c d4
%c2.
\bar ":|"
}
sbIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
%\partial 4
a8 b
c4 b a b8 c
d4 d8 c b2
gis4 g %g8 a b4
%b a8 g f4 e
%e2.
}
sbIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
%\partial 4
a,4
a' gis a e
f8 e d4 e2
e,4\fermata e' b a8 g
c4 f8 e %d4 e
%a,2.\fermata
\bar ":|"
}
simpleBach =
\new StaffGroup = "simple Bach"
<<
\new Staff
<<
\new Voice \sbI
\new Voice \sbII
>>
%\new Lyrics \txt
\new Staff
<<
\new Voice \sbIII
\new Voice \sbIV
>>
>>
% Third StaffGroup "chromatic Bach"
cbI =
\relative c' {
\mark \markup {
\bold "Teacher:"
\column {
"Well, you simply copied and transposed a version of J.S.Bach."
"Do you know this one?"
}
}
\key a \minor
\time 4/4
\voiceOne
%\partial 4
e4
a b c b
a b gis4. fis8
e4\fermata g! g f
e a %a8 b gis4
%a2.\fermata
\bar ":|"
}
cbII =
\relative c' {
\key a \minor
\time 4/4
\voiceTwo
%\partial 4
c8 d
e4 e e8 fis gis4
a8 g! f!4 e2
b4 e e d
d8[ cis] d dis %e fis e4
%e2.
\bar ":|"
}
cbIII =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceOne
%\partial 4
a8 b
c[ b] a gis8 a4 d,
e8[ e'] d c b4. a8
gis4 b c d8 c
b[ a] a b c b b c16 d
%c2.
}
cbIV =
\relative c' {
\key a \minor
\time 4/4
\clef bass
\voiceTwo
%\partial 4
a4
c, e a, b
c d e2
e4\fermata e a b8 c
gis[ g] fis f e dis e4
%a,2.\fermata
\bar ":|"
}
chromaticBach =
\new StaffGroup = "chromatic Bach"
<<
\new Staff
<<
\new Voice \cbI
\new Voice \cbII
>>
%\new Lyrics \txt
\new Staff
<<
\new Voice \cbIII
\new Voice \cbIV
>>
>>
% Score
\score {
<<
\exercise
\simpleBach
\chromaticBach
>>
\header {
title = \markup
\column {
\vspace #1
"Exercise: Improve the given choral"
" "
}
}
\layout {
\context {
\Lyrics
\override LyricText #'X-offset = #-1
}
}
}Leider wird der Code durch diese Zusammenfassung mittels
\StaffGroup äußerst unflexibel und fehleranfällig. Wenn man beispielsweise
\partial 4 auskommentiert, muss man das
in allen Noten-Abschnitten tun. Läßt man irgendwo bewußt oder versehentlich ein
\partial 4 stehen, wird das für alle Zeilen der Gruppe wirksam! Fügt man einen Takt (in einem oder mehreren oder allen Takten) zu den fünf Takten hinzu, erfolgt ein Zeilenumbruch. Nimmt man einen Takt weg, so werden die Zeilen insgesamt kürzer. Das Beispiel wurde also so ausgewählt, dass die Noten genau in eine Zeile passen. Der Code ist also alles andere als flexibel und kleine Änderungen können zu erheblichen Unterschieden der Darstellung führen.
Sehr gut daran ist allerdings, dass gerade wegen der Zusammenfassung in eine Gruppe die Taktstriche immer fluchten und die Zeilen immer gleich lang sind! Für denjenigen, der genau das will ist das die einzige Möglichkeit das zu erreichen. Alle anderen Instrumente von lilypond funktionieren nur partiell, was an lilyponds Optimierer für die Darstellung liegt, der nicht linear wirkt (siehe Handbuch Kapitel 4.5 Horizontale Abstände
http://www.lilypond.org/doc/v2.16/Documentation/notation/horizontal-spacing und insbesondere Abschnitt 4.5.1 um das zu verstehen).
Grüße