Maurits Lamers

Table of Contents

Table of Contents

  • Hoe maak ik een partij van een lied
    • Macro's
    • Opmaat
    • Commentaar
    • De Lyrics context en gelijktijdige elementen
    • Meerdere coupletten
    • Titelinformatie

Lilypond

  • Handleiding
  • Lybra

Andere zaken

  • Oefentools
  • Leren programmeren
Maurits Lamers
Docs » lilypond:hoeliedpartij

Hoe maak ik een partij van een lied

In het vorige deel van de handleiding hebben we noten op een balk gekregen. We gaan in dit deel van de handleiding kijken hoe we daar tekst onder kunnen krijgen, op een zodanige manier dat de tekst mooi aansluit bij de noten. Hoe het ongeveer moet gaan worden:

 De Herder

Ten opzichte van voorbeelden in het vorig deel van de handleiding zijn er nogal wat verschillen:

  • Er zijn meerdere regels
  • Er staat een liedtekst onder de muziek
  • Er staat een titel boven
  • De muziek begint met een opmaat

Macro's

Voordat we naar de muziek gaan kijken gaan we eerst de basisstructuur van het Lilypond bestand opzetten. Wat we minimaal nodig hebben, zijn de contexten score, Staff en Voice. We hebben de toonsoort F groot, de G-sleutel de maatsoort 4/4.

Opmerking: voor diegenen die hier nog niet mee bekend mochten zijn: het teken dat aan het begin dat in de balk is geschreven en lijkt op een hoofdletter C is hetzelfde als 4/4. Met een verticale streep erdoorheen betekent het 2/2.

De structuur:

 \score {
    \new Staff {
       \key f \major
       \clef treble
       \time 4/4
       \context Voice = melodie {
       }
    }
 }

Tot zover dus nog niets nieuws. In het vorig deel heb je kunnen lezen dat woorden en termen met een backslash ervoor macro's genoemd worden. Wat er daar (expres) niet bijstaat is dat je ook macro's zelf kunt definiëren. Dat is erg handig omdat het je nogal wat werk kan besparen, waaronder veel tikwerk voor zich herhalende delen. Daarbij is het erg gunstig voor de overzichtelijkheid.

Opmerking: De manier waarop je in Lilypond deze zelfgemaakte macro's gebruikt is vergelijkbaar met de manier waarop in veel programmeertalen variabelen worden gebruikt: daar waar je de naam van de macro neerzet, wordt dit door de computer tijdens het omzetten vervangen door de inhoud van de macro.

Laten we maar meteen eens kijken hoe je een macro definieert:

naam_van_de_macro = 

Eenvoudiger kan het bijna niet. Zie je dat als je de macro definieert er géén backslash voorkomt? Pas als je de macro wilt gebruiken (dat heet aanroepen), komt de backslash ervoor. Omdat Lilypond het bestand van boven naar onder doorwerkt, moet je de macro definiëren vóór dat je hem wilt gebruiken, wat betekent dat je de macro's het best aan het begin van het bestand kunt definiëren. Laten we maar meteen eens als voorbeeld het notenmateriaal van het bovenstaande lied als een macro definiëren:

 melodie = \relative c'' {
    a4 bes |
    c4. d8 c4 a | 
    a g g bes |
    a4. g8 f4 c |
    c2 a'4 bes |
    c4. d8 c4 a |
    a g e' c |
    c g d' b |
    c2 c4 c |
    f e8 d c4 bes |
    a2 c4 c4 |
    f4 e8 d c d bes c |
    a2. c4 |
    d2 g,4 g |
    bes2 a4 c |
    d f e d |
    c2 a4 f |
    a2 g |
    f2
 }

Misschien overbodige opmerking: als je kijkt naar dit notenmateriaal zie je dat elke maat een eigen regel kent. Dit is om overzichtelijkheid te waarborgen. Als je namelijk alles op een lange regel zet, maakt dit voor Lilypond niet uit. Op het moment echter dat er een foutje inzit wordt het wel veel lastiger om die eruit te halen. Als je goed kijkt, zie je ook dat niet bij elke noot een lengte staat. Zoals al in het vorige deel van de handleiding uitgelegd, kan dit omdat Lilypond de lengte invult van de noot ervoor. De a2 g van de op een na laatste regel is dus identiek aan a2 g2.

Als je nu de macro zó in je Lilypond bestand zet, zal er niets gebeuren, want de macro wordt niet gebruikt. We moeten de macro daarom in de structuur op gaan nemen. Dat ziet er zo uit:

 \score {
    \new Staff {
       \key f \major
       \clef treble
       \time 4/4
       \context Voice = melodie {
          \melodie
       }
    }
 }

Je ziet dat de macro nu aangeroepen wordt op de plaats waar we het notenmateriaal in de voorbeelden van het eerste deel van de handleiding hebben geplaatst. Zoals al gezegd in de opmerking, zal op het moment van omzetten \melodie vervangen worden door de inhoud die we daaraan hebben toegekend, in ons geval dus het notenmateriaal.

Opmaat

Als je nu deze code samen in Lilypond zou zetten en het omzetproces zou starten, krijg je een waarschuwing over bar check. Dat Lilypond dit aangeeft is logisch, want als je goed kijkt naar de eerste regel van de macro zie je daar twee kwartnoten plus een maatcontrolestreep staan. We zitten echter in een vierkwartsmaat en omdat we een maatcontrolestreep hebben gebruikt, waarschuwt Lilypond ons ervoor dat we een onvolledige maat hebben. We willen echter graag een opmaat, dus we willen aan Lilypond duidelijk maken dat daar inderdaad maar twee kwartnoten horen te staan zonder dat we de maatsoort zouden moeten veranderen. Voor het aangeven van een opmaat, gebruik je in Lilypond de volgende macro:

\partial [lengte]

Je kunt de lengte op twee manieren opgeven, namelijk de lengte van een bepaalde noot of een kleine vermenigvuldiging. Laten we als voorbeeld een opmaat van 3 achtste noten nemen. Je kunt dan opgeven \partial 4. want een kwartnoot met een punt is gelijk aan 3 achtste noten, maar je kunt ook opgeven \partial 8*3. De lengte komt altijd eerst, dan het vermenigvuldigingsteken * en dan de vermenigvuldigingsfactor. Ik gebruik zelf liever de eerste variant, maar het kan zijn dat voor jezelf de tweede variant logischer aanvoelt.

Je geeft deze macro op meteen aan het begin, dus voordat je de noten zelf neerzet. De eerste twee regels van de bovenstaande macro worden dan:

 melodie = \relative c'' {
    \partial 2 a4 bes |

of

 melodie = \relative c'' {
    \partial 4*2 a4 bes |

Nadat we \partial hebben toegevoegd, is de foutmelding verdwenen. We hebben nu een melodie op papier. Je ziet ook meteen dat, omdat de muziek niet op een regel past, de overige regels automatisch door Lilypond worden aangemaakt al naar gelang er noten zijn. Dus een nieuwe regel hoef je zelf niet op te geven.

Commentaar

Soms kan het erg handig zijn om bij grotere bestanden commentaar te kunnen plaatsen bij de broncode, zodat het overzicht over het een en ander wat beter wordt. Commentaar betreft dus tekst waarvan je wilt dat die door Lilypond genegeerd wordt. Je kunt dat in Lilypond op twee manieren doen:

% deze regel bevat commentaar

%{
  Dit is een commentaarblok
%}

Zoals je ziet geeft % aan dat de rest van die regel commentaar bevat. Als je meer regels commentaar in wilt voegen, kun je daarvoor het commentaarblok gebruiken. Vaak wordt % gebruikt om maatnummers in de code erbij te zetten. In dit stuk is dat nog niet echt noodzakelijk, maar het kan het overzicht wel verbeteren.

Er is nog een zeer praktisch gebruik voor commentaarblokken en dat is het (tijdelijk) uitschakelen van blokken code. Dit is erg praktisch als er op de een of andere manier een fout in je code is geslopen en je niet ziet waar die zit. Je kunt dan door delen van de code met behulp van commentaarblokken uit te schakelen gaan zoeken naar de oorzaak van de fout.

We zijn al een heel eind op weg naar onze partij, maar we missen nog tekst onder de noten staan, dus dat gaan we eerst maar eens doen.

De Lyrics context en gelijktijdige elementen

Opmerking: De Lyrics context is een lastig ding. Ik vond dit zelf een van de moeilijkste dingen om te begrijpen. Ik zal daarom proberen het zo helder mogelijk te maken, maar lees dingen gerust nog een keer over als je het niet in een keer doorhebt. Zoals ook al meer opgemerkt is in deze handleiding, zul je elders ongetwijfeld afwijkende voorbeelden vinden over hoe je liedteksten toevoegt. Lilypond biedt namelijk meerdere mogelijkheden om dit te doen. Ik behandel hier de moeilijkste, maar dat is dan ook meteen een manier die onbeperkte mogelijkheden oplevert en dus geschikt is voor zowel een lied als het uitwerken van een Matthäus Passion of een Negende Symfonie van Beethoven (om maar wat te noemen).

De Lyrics context is een speciale context die zich onder (en soms ook boven) een melodie bevindt en de tekst bevat die op die melodie gezongen moet worden. Je gebruikt de Lyrics context dus alleen voor liedteksten en niet voor andere teksten als forte of crescendo etc.

Daarbij is het kenmerkende aan het gebruik van liedtekst dat, in de tijd gezien, de tekst en muziek tegelijk moeten gaan klinken. Omdat Lilypond een stuk van voor naar achter noteert, dus tijdsgewijs, moet aan Lilypond worden duidelijk gemaakt dat de Staff context en de Lyrics context tegelijkertijd moeten worden geïnterpreteerd. Dit geef je aan door middel van « en », waarbinnen de contexten die tegelijkertijd moeten worden geïnterpreteerd worden vermeldt.

De manier waarop je in de structuur een Lyrics context gebruikt, is wat ingewikkeld, maar dat komt hoofdzakelijk omdat een Lyrics context twee verschillende gevolgen heeft voor de genoteerde muziek. Ten eerste moet er ruimte gemaakt worden in de bladmuziek om tekst te kunnen neerzetten (het layout-effect) en ten tweede moet deze tekst ook nog gevormd kunnen worden naar het notenmateriaal (het inhoudelijke aspect). Het lijkt er daarom op alsof je de context twee keer definieert, een keer voor de layout en een keer voor de inhoud.

 \score {
 <<
    \new Staff {
       \key f \major
       \clef treble
       \time 4/4
       \context Voice = melodie {
          \melodie
       }
    }
    \context Lyrics = tekst { s1 }
 
    \lyricmode {
    <<
        \lyricsto melodie \context Lyrics = tekst {
 
 
        }
    >>
    }
 >>
 }

Een codevoorbeeld met nogal wat nieuwe elementen. Wat is er nieuw?

  • \context Lyrics
  • s1
  • \lyricmode
  • \lyricsto
  • de « en » op twee plaatsen

De \context Lyrics is niet helemaal nieuw, maar je ziet dus nu hoe deze context toegepast wordt. Hij komt in het voorbeeld twee keer voor. Dit heeft te maken met de twee eigenschappen van de Lyrics-context waar we het al over gehad hebben. De eerste keer wordt de \context Lyrics neergezet waar deze in de muziek terecht moet gaan komen (namelijk onder de balk), een naam gegeven en een tijdelijk inhoud gegeven. Die tijdelijke inhoud is nodig omdat Lilypond erg op netheid gesteld is. Alles wat genoteerd moet worden, kost namelijk ruimte en als zo'n Lyrics-context leeg is, heeft het geen zin dat het er staat en wordt het dus opgeruimd.

Opmerking 1: de s1 die als tijdelijke inhoud wordt meegegeven is eigenlijk een “spacer”. Het is een noot die niet getoond wordt, maar die wel ruimte in beslag neemt. Die is soms erg praktisch als er in het midden van een maat meerstemmigheid genoteerd moet worden en de ruimte ervoor opgevuld moet worden. Hoe je die spacers precies gebruikt, kun je vinden in de online handleiding van Lilypond.

Opmerking 2: Het lijkt misschien onlogisch dat zo'n lege Lyrics context wordt opgeruimd. Het is toch een mooie manier om meer ruimte tussen de balken te krijgen?
Nou nee, eigenlijk niet. Daar is die Lyrics context namelijk helemaal niet voor bedoeld. Lilypond is hier erg strikt in: een verandering aan een notatie-element hoort namelijk thuis bij dat specifieke notatie-element. Als er meer ruimte tussen de balken moet komen, moet dit dus bij een balk worden aangegeven en nergens anders. Het werkt onzorgvuldigheid in de hand als daar andere elementen voor “misbruikt” kunnen worden. Hoewel deze benadering misschien de creativiteit lijkt te beperken, moeten we toch erg blij zijn met deze striktheid, want juist deze benadering zorgt ervoor dat de Lilypond-partijen er zo netjes uitzien.

De Lyrics-context die we tekst hebben genoemd, wordt gevuld in het \lyricmode deel. Omdat Lilypond standaard in “noot”-modus staat, moet je duidelijk aangeven dat er nu tekst aankomt en wat er precies mee moet gebeuren. Omdat alle tekst altijd tegelijk moet worden geïnterpreteerd, staat alles binnen de \lyricmode tussen « en ».

Omdat we al aangegeven hebben waar we de Lyrics qua positie willen hebben staan, willen we nu gaan aangeven dat we de noten van de melodie willen gaan gebruiken om de tekst aan op te hangen. Dit doen we met \lyricsto. De tekst die we dan gaan invoegen willen we hebben in de Lyrics-context tekst. De tekst die vervolgens tussen de twee accolades geplaatst wordt, zal dan in de Lyrics-context tekst terecht komen en per lettergreep aan een noot gekoppeld worden.

Voordat we aan de tekst zelf beginnen, eerst nog even aandacht voor de « en ». Je ziet dat ze in het bovenstaand codevoorbeeld twee keer voorkomen. Een keer (zoals al genoemd) bij de \lyricmode en een keer direct na score en vlak voor het eind. Omdat we natuurlijk graag willen dat de muziek en tekst onder elkaar komen te staan (gelijktijdig) in plaats van achter elkaar, zetten we direct na \score een « en vlak voor het eind » om alles daar tussen tegelijk te laten plaatsvinden en dus onder elkaar genoteerd te krijgen.

Nu door naar de liedtekst zelf. De liedtekst in Lilypond-code lijkt namelijk sterk op de tekst in leesboekjes voor kinderen die leren lezen. Alle lettergrepen zijn namelijk door streepjes van elkaar gescheiden. Bij Lilypond zijn dit alleen geen enkele, maar dubbele streepjes:

		Op de gro -- te stil -- le hei -- de
		dwaalt de her -- der een -- zaam rond
		Wijl de wit -- ge -- wol -- de kud -- de
		trouw be -- waakt wordt door de hond.
		En al dwa -- lend ginds en her
		denkt de her -- der: Och, hoe ver
		Hoe ver is mijn hei -- de!
		Hoe ver is mijn hei -- de, mijn hei -- de!

Als je nu deze tekst direct in de bovenstaande broncode voegt, en je laat het door Lilypond omzetten, kom je erachter dat elke noot nu een lettergreep toegewezen krijgt. Dit is alleen niet de bedoeling want er zijn ook lettergrepen die over meerdere noten worden uitgespreid. Dit heet een melisma.

In Lilypond heet dit ook een melisma en deze wordt door middel van macro's in het notenmateriaal gedefiniëerd. De code ervoor is \melisma. Omdat een melisma nogal verschillend van lengte kan zijn, geef je ook aan wanneer het melisma is afgelopen. Dat doe je door middel van \melismaEnd. De start van een melisma wordt in Lilypond aangegeven na de eerste noot en na de laatste noot van het melisma. We nemen als voorbeeld de laatste drie noten van ons lied:

 Zonder melisma:
 a2     g2 | f2
 Hei -- de
 
 Met melisma:
 a2 \melisma g2 \melismaEnd | f2
 Hei         --               de

Je geeft met deze twee elementen dus feitelijk aan welke noten moeten worden overgeslagen bij het zetten van een nieuwe lettergreep. Omdat ik zelf \melisma en \melismaEnd nogal veel tikwerk vind en het de overzichtelijkheid van de code ook niet echt in de hand werkt, definieer ik zelf altijd twee macro's aan het begin van een bestand:

 mb = \melisma
 me = \melismaEnd

Nu kan ik volstaan met \mb en \me als ik een melisma in wil voegen. Voor ons lied wordt het notenmateriaal met melisma's dus:

 \partial 2 a4 bes |
 c4. d8 c4 a |
 a g g bes |
 a4. g8 f4 c | 
 c2 a'4 bes |
 c4. d8 c4 a |
 a g e' c |
 c g d' b |
 c2 c4 c |
 f e8 \mb d \me c4 bes |
 a2 c4 c4 |
 f4 e8 \mb d \me c \mb d \me bes \mb c \me |
 a2. c4 |
 d2 g,4 g |
 bes2 a4 c |
 d \mb f \me e d |
 c2 a4 f |
 a2 \mb g \me |
 f2

Er is nog een andere manier om melisma's in te voegen, die niet voorkomt in ons voorbeeld, maar die wel even genoemd moet worden: de phrasing slur. Dit fraseerboogje geef je aan met haakjes.

a2( g2) | f2

Je zet dus het openingshaakje direct na de noot waar deze aan vast moet komen te zitten en je sluit het af na de noot waar de boog moet eindigen. Het laatste notatievoorbeeld ziet er na conversie zo uit:

 Fraseerboog

Je kunt de twee melisma-systemen ook prima tegelijkertijd gebruiken:

a2( \mb g2) \me | f2

Dit voorkomt dat, indien je het boogje naderhand toch wel wilt halen de tekst niet gaat verspringen.

Meerdere coupletten

Zoals je in het voorbeeld boven aan deze pagina ziet staan, zijn er in dit lied meerdere coupletten. Indien je nu de andere coupletten ook aan dezelfde Lyrics context zou hangen, krijg je (behalve een boel meldingen) alleen het laatste couplet te zien. Iedere keer namelijk dat je een tekst aan een bepaalde Lyrics context hangt, wordt de inhoud van die context overschreven door de nieuwe inhoud.

Dat willen we natuurlijk niet. We maken daarom voor elk couplet een eigen context aan en voegen de inhoud van de tekst bij \lyricmode toe:

 \version "2.10.20"
 
 mb = \melisma
 me = \melismaEnd
 
 melodie = \relative c'' {
 \partial 2 a4 bes |
 c4. d8 c4 a |
 a g g bes |
 a4. g8 f4 c |
 c2 a'4 bes |
 c4. d8 c4 a |
 a g e' c |
 c g d' b |
 c2 c4 c |
 f e8 \mb d \me c4 bes |
 a2 c4 c4 |
 f4 e8 \mb d \me c \mb d \me bes \mb c \me |
 a2. c4 |
 d2 g,4 g |
 bes2 a4 c |
 d \mb f \me e d |
 c2 a4 f |
 a2( \mb g) \me |
 f2
 }
 
 
 \score {
  <<
 	\new Staff {
	\key f \major
	\clef treble
	\time 4/4
	\context Voice = melodie {
		\melodie
		\bar "|."
	}
 	}
 	\context Lyrics = coupleteen { s1 }
 	\context Lyrics = couplettwee { s1 }
 	\context Lyrics = coupletdrie { s1 }
 
 
 	\lyricmode <<
	\lyricsto melodie \context Lyrics = coupleteen { 
		\set stanza = "1.  "
		Op de gro -- te stil -- le hei -- de
		dwaalt de her -- der een -- zaam rond
		Wijl de wit -- ge -- wol -- de kud -- de
		trouw be -- waakt wordt door de hond.
		En al dwa -- lend ginds en her
		denkt de her -- der: Och, hoe ver
		Hoe ver is mijn hei -- de!
		Hoe ver is mijn hei -- de, mijn hei -- de!
	}
	\lyricsto melodie \context Lyrics = couplettwee { 
		\set stanza = "2.  "
		Op de gro -- te stil -- le hei -- de
		bloei -- en bloem -- pjes lief en teer
		Pra -- lend in de zon -- ne -- stra -- len
		als een bloem -- hof heind' en veer
		En, te -- vree met kar -- ig loon
		Roept de her -- der: O, hoe schoon
		Hoe schoon is mijn hei -- de!
		Hoe schoon is mijn hei -- de, mijn hei -- de!
	}
	\lyricsto melodie \context Lyrics = coupletdrie { 
		\set stanza = "3.  "
		Op de gro -- te, stil -- le hei -- de
		rust het al bij ma -- ne -- schijn,
		Als de schaap -- jes en de bloe -- men
		vre -- dig in -- ge -- slui -- merd zijn
		En, te -- rug -- ziend op zijn pad
		juicht de her -- der: Welk een schat!
		Hoe rijk is mijn hei -- de,
		Hoe rijk is mijn hei -- de, mijn hei -- de!
	}
 	>>
 
 >>
 }

Met \set stanza = “nummer ” voegen we een coupletnummer in. Vaak wil je dat het coupletnummer wat verder van de tekst af staat. Dit doe je door achter het getal een paar spaties neer te zetten. Als je bij elk couplet evenveel spaties neerzet, zullen de getallen verticaal netjes op een rij staan.

Opmerking: Dit is eigenlijk een beetje raar. Hier wordt namelijk een spatie misbruikt om ruimte te krijgen tussen het getal en het begin van de tekst. Ik vind dit ook zeer merkwaardig en dit is dan voor mijn gevoel ook in tegenspraak met de “geest” van Lilypond.

Titelinformatie

Nu het lied er zo'n beetje staat, missen we alleen nog informatie over titel, componist, tekstdichter en dergelijke. Deze informatie wordt geplaatst in de zogeheten header-macro. In deze macro geven we met een aantal steekwoorden aan wat er precies aan informatie moet worden weergegeven. De basisvorm van de header macro is als volgt:

\header {
   ...
}

Voor deze partij willen we de titel, componist en dichter weergeven. De steekwoorden zijn daarvoor title, composer en poet. Omdat het steekwoorden zijn en geen macro's komt er geen backslash voor! Het zogeheten header-blok ziet er voor deze partij als volgt uit:

 \header {
    title = "Op de grote stille heide"
    poet = "Dichter: P. Lauwerse"
    composer = "Muziek: J. Worp"
 }

Als we dit blok meteen na de \version macro in de broncode zetten, krijg je (met uitzondering van de precieze afmetingen, het voorbeeld is wat verknipt) precies dezelfde partij als het voorbeeld boven aan deze pagina. Mocht je nu nog meer elementen willen toevoegen, kun je in de officiële Lilypond-handleiding nakijken welke steekwoorden je daarvoor nodig hebt.

In het volgend deel van de handleiding gaan we dieper in op hoe je meerstemmigheid kunt noteren.

Terug naar de overzichtspagina van dit deel van de handleiding

Previous Next