====== Structuurprobleem 1 ======
\header {
title = "Voorbeeldje"
}
voiceOne = \relative c' {
d4 d e f |
g8 a g f e d e d
c1
}
\score {
<<
\new ChordNames { \chordmode {
c1
e:m
c
}
}
\new FretBoards { \chordmode {
c
e:m
c
}
}
\new Voice = "one" { \voiceOne }
>>
}
Deze code levert een probleem op, de output van Lilypond ziet er (soms!) namelijk zo uit:
{{:lilypond:probleem_een.png|}}
wat natuurlijk nooit de bedoeling kan zijn. Met soms bedoel ik in dit geval dat bij de persoon die mij dit probleem stuurde het er inderdaad zo uit zag, het bij mij op dat moment ook zo uitzag, maar dat toen ik het voorbeeld voor deze pagina wilde omzetten in een plaatje, Lilypond er prima bladmuziek van maakte.
Niettemin is het een prima voorbeeld, omdat er het een en ander aan de code schort en dat het corrigeren van deze fouten op het moment van het oplossen van het probleem ook inderdaad weer goede bladmuziek opleverde.
Een van de eerste problemen die opvalt is het gebruik van \new Voice. Een stem hoort thuis op een balk, maar er staat geen \new Staff. Bovendien wordt door de code de standaard \voiceOne macro van Lilypond overschreven, wat ook niet erg praktisch is.
Dit is al beter:
\header {
title = "Voorbeeldje"
}
stemEen = \relative c' {
d4 d e f |
g8 a g f e d e d
c1
}
\score {
<<
\new ChordNames { \chordmode {
c1
e:m
c
}
}
\new FretBoards { \chordmode {
c
e:m
c
}
}
\new Staff {
\new Voice = "one" { \stemEen }
}
>>
}
alhoewel het plezierig is om een Staff van wat extra informatie als \clef, \key en \time te voorzien.
Er zit echter nog een fout in, die wat minder goed te zien is, en die de oplossing opleverde voor dit probleem.
Nadat we elk onderdeel hebben bekeken van de code zou je kunnen zeggen dat het prima code zou moeten zijn. We slaan dan echter een onderdeel over, namelijk het geheel. Wat heeft de schrijver van deze code nu beoogd met het tegelijk laten plaatsvinden van een ChordNames, FretBoards en een gewone Staff?
Hij wilde ongetwijfeld deze drie dingen onder elkaar zetten. Voor Lilypond echter heeft een puur grafische samenvoeging geen enkele betekenis.
Dus wij moeten er een betekenis aan geven, en dat heeft de schrijver van deze code niet gedaan. Hij heeft simpelweg gezegd: "deze dingen moeten tegelijkertijd". Maar wat hij feitelijk gezien wilde zeggen was dat deze drie balken samen een muzikaal geheel vormen. Dit lijkt misschien een verwaarloosbaar verschil, maar de reden dat de schrijver dit verschil niet aangaf, was de reden dat het niet goed werkte: hij had van deze drie balken een muzikale groepering moeten maken: een \new StaffGroup.
En zo ziet de gerepareerde code eruit:
\header {
title = "Voorbeeldje"
}
stemEen = \relative c' {
d4 d e f |
g8 a g f e d e d
c1
}
\score {
\new StaffGroup {
<<
\new ChordNames { \chordmode {
c1
e:m
c
}
}
\new FretBoards { \chordmode {
c
e:m
c
}
}
\new Staff {
\new Voice = "one" { \stemEen }
}
>>
}
}
====== Conclusie ======
Als conclusie van dit geval: Bedenk dat in een structuur ook de elementen die je normaal gesproken niet aanwezig ziet wel degelijk aanwezig kan zijn! Ook als je maar één balk hebt, kent Lilypond een StaffGroup, alleen zie je die niet. Je hoeft deze bij een balk ook niet op te geven, maar zodra je met meerdere balken gaat werken: gebruik altijd een vorm van een StaffGroup, of dit nu de StaffGroup zelf is, of een van de aanverwanten ChoirStaff, GrandStaff of PianoStaff.