From ab9e3136d78bfaf15cc6d77ed1975d252c3fe506 Mon Sep 17 00:00:00 2001 From: =?utf8?q?D=C3=A9nes=20Harmath?= Date: Tue, 31 Aug 2010 23:27:08 +0200 Subject: [PATCH] Doc-hu: translated first section of Fundamental concepts --- Documentation/hu/learning/fundamental.itely | 3339 +++++++++++++++++-- 1 file changed, 3085 insertions(+), 254 deletions(-) diff --git a/Documentation/hu/learning/fundamental.itely b/Documentation/hu/learning/fundamental.itely index b01a29e6a2..a4241f8640 100644 --- a/Documentation/hu/learning/fundamental.itely +++ b/Documentation/hu/learning/fundamental.itely @@ -16,8 +16,9 @@ @translationof Fundamental concepts @translationof Fundamental concepts -@untranslated - +Miután megtanultuk, hogyan állíthatunk elő gyönyörű kottákat egyszerű szöveges +fájlokból, ebben a szakaszban megismerjük azokat a fogalmakat és technikákat, +amelyek segítségével hasonlóan gyönyörű, de bonyolultabb kottákat készíthetünk. @menu * Hogyan működnek a LilyPond bemeneti fájlok?:: @@ -31,8 +32,12 @@ @translationof How LilyPond input files work @translationof How LilyPond input files work -@untranslated - +A LilyPond bemeneti formátuma meglehetősen rugalmas, így a tapasztalt +felhasználóknak nagy szabadságot ad abban, hogyan strukturálják a +forrásfájljaikat. De ez a rugalmasság az újdonsült felhasználók számára +bonyolult lehet. Ez a szakasz elmagyarázza a struktúra nagy részét, az +egyszerűség kedvéért bizonyos részleteket elnagyolva. A bemeneti formátum +felépítésének teljes leírása a @ruser{File structure} c. szakaszban olvasható. @menu * Bevezetés a LilyPond fájlok szerkezetébe:: @@ -46,86 +51,454 @@ @translationof Introduction to the LilyPond file structure @translationof Introduction to the LilyPond file structure -@untranslated - - -@c index input format -@c index file structure -@c index book -@c index score -@c ode{\score@{@}} command. This is because LilyPond automatically -@c index implicit contexts -@c index contexts, implicit -@ref{Kontextusok és ábrázolók}. -@c ode{\score} command, leaving the others to default. -@c index header -@c index layout -@c index midi -@c ode{\midi} -- are special: unlike many other commands which begin -@c ode{\header} is often placed above the @code{\score} command, as the -@c ode{\layout @{ @}} and @code{\midi @{@}}. If these appear as -@c index scores, multiple -@c index book block, implicit -@c index implicit book block -@c ode{\book} command should be used to separate the different -@c ode{\book} block. -@c index layout block, effect of location -@c ode{\book} block in which it appears -- i.e., a @code{\layout} -@c index variables -@ref{Művek szervezettebbé tétele változók segítségével}. All the templates use this -@c ode{melody} (everything after the equals sign) and inserts it -@c ode{TimeKey}, -@c ode{pianorighthand}, or @code{foofoobarbaz}. For more details, +@c index bemeneti formátum +@c index fájlstruktúra + +A LilyPond bemeneti fájlok szerkezetére egy tipikus példa: + +@example +\version @w{"@version{}"} + +\header @{ @} + +\score @{ + @var{...összetett zenei kifejezés...} % ide jön a zene! + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +Ennek az alapvető mintának sok változata lehetséges, de ez a példa jó +kiindulási alapot jelent. + +@funindex \book +@funindex book +@funindex \score +@funindex score +@cindex book +@cindex score + +Eddig egyik példa sem használta a @code{\score@{@}} parancsot. Ennek oka, hogy +a LilyPond automatikusan hozzáadja az egyszerű bemenethez a szükséges +parancsokat. A következő bemenet például: + +@example +\relative c'' @{ + c4 a d c +@} +@end example + +@noindent +a következő rövidítése: + +@example +\book @{ + \score @{ + \new Staff @{ + \new Voice @{ + \relative c'' @{ + c4 a b c + @} + @} + @} + \layout @{ @} + @} +@} +@end example + +Más szóval, ha a bemenet egyetlen zenei kifejezést tartalmaz, a LilyPond úgy +értelmezi a fájlt, mintha a zenei kifejezés körül már szerepelnének a fenti +parancsok. + +@cindex implicit kontextusok + +@strong{Figyelem!} A dokumentációban sok példa nem tartalmazza a +@code{\new Staff} és @code{\new Voice} parancsokat, így azok implicite kerülnek +létrehozásra. Ez egyszerű példáknál jól működik, de bonyolultabb esetekben, +főleg, ha más parancsokat is használunk, a kontextusok implicit létrehozása +meglepő kimenetet eredményezhet, például nemkívánatos kottasorok jelenlétét. +A kontextusok explicit megadásának módja a @ref{Kontextusok és ábrázolók} c. +részben olvasható. + +@warning{Többszólamú zeneművek esetén ajánlott explicit módon létrehozni a +kottasorokat és az azon belüli szólamokat.} + +Egyelőre térjünk vissza az első példánkhoz, és vizsgáljuk meg csak a +@code{\score} parancsot. + +A @code{\score} blokkon belül először pontosan egy zenei kifejezésnek kell +következnie. +Emlékezzünk arra, hogy egy zenei kifejezés lehet egy hang is, de akár +egy olyan nagy összetett kifejezés is, mint: + +@example +@{ + \new StaffGroup << + @var{...egy teljes Wagner-opera zenei anyaga...} + >> +@} +@end example + +@noindent +Mivel mindez egy @code{@{ ... @}} blokkban szerepel, egy zenei +kifejezésnek számít. + +Ahogy korábban láttuk, a @code{\score} blokk a zenén kívül más definíciókat is +tartalmazhat, mint például: + +@example +\score @{ + @{ c'4 a b c' @} + \header @{ @} + \layout @{ @} + \midi @{ @} +@} +@end example + +@funindex \header +@funindex header +@funindex \layout +@funindex layout +@funindex \midi +@funindex midi +@cindex header +@cindex layout +@cindex midi + +@noindent +Ez a három parancs -- @code{\header}, @code{\layout} és @code{\midi} -- +speciális: az eddigi parancsokkal ellentétben @emph{nem} zenei kifejezések, és +nem azok részei. A @code{\score} blokkon belül vagy kívül is elhelyezkedhetnek +-- például a @code{\header} (fejléc) blokk, melyben a kotta adatait (pl. cím, +szerző stb.) lehet megadni, legtöbbször a @code{\score} parancs előtt szerepel, +ahogy a szakasz elején található példában is látható. + +A két további, még ismeretlen parancs: @code{\layout @{ @}} és +@code{\midi @{@}}. Ezek ebben a formában rendre azt jelentik, hogy a LilyPond +kottaképet, ill. hangzó anyagot állítson elő. Teljes leírásuk a Kottaírás +Kézikönyvében található, a @ruser{Score layout} és a +@ruser{Creating MIDI files} szakaszokban. + +@cindex több kotta +@cindex implicit book blokk +@funindex \book +@funindex book + +Egy fájlban több @code{\score} blokk lehet. Mindegyik egy-egy zeneművet +vagy tételt jelöl, de ezek egy kimeneti fájlban fognak megjelenni. Nem +szükséges @code{\book} blokkba foglalni őket -- ez implicite megtörténik. +Ha azonban több kimeneti fájlt szeretnénk kapni egy forrásfájlból, akkor több +@code{\book} blokkot kell megadnunk -- kimeneti fájlonként egyet-egyet. + +Összegezve: + +Minden @code{\book} blokk külön kimeneti fájlt eredményez (pl. egy-egy PDF +állományt). Ha nem szerepel explicit módon a forráskódban, akkor a LilyPond +körülveszi az egész forráskódot egy @code{\book} blokkal. + +Egy @code{\book} blokkon belül minden @code{\score} blokk különálló zenei +egységet jelöl. + +@cindex layout blokk helye + +Minden @code{\layout} blokk arra a @code{\score} vagy @code{\book} blokkra +érvényes, amelyben szerepel -- tehát egy @code{\score} blokkon belüli +@code{\layout} blokk csakis arra az egy @code{\score} blokkra vonatkozik, +de egy @code{\score} blokkon kívüli @code{\layout} blokk a @code{\score} +blokkot tartalmazó (akár explicit, akár implicit) @code{\book} blokkon belüli +minden @code{\score} blokkra érvényes. + +A részletek a @ruser{Multiple scores in a book} c. részben olvashatók. + +@cindex változók + +Fájljainkat áttekinthetőbbé tehetjük változók definiálásával (ld. +@ref{Művek szervezettebbé tétele változók segítségével}). Minden sablonban ezt +a módszert használjuk: + +@example +dallam = \relative c' @{ + c4 a b c +@} + +\score @{ + \dallam +@} +@end example + +Amikor a LilyPond feldolgozza ezt a fájlt, a @code{dallam} változó értékét +(azaz mindent az egyenlőségjel utáni zenei kifejezésből) beszúrja mindenhova, +ahol @code{\melody}. hivatkozást lát. A változók nevére nincs sok megkötés -- a +következők mind helyes példák: @code{dallam}, @code{jobbKez}, @code{fuvola}, +@code{BII} stb. A @ref{Kevesebb gépelés változókkal és függvényekkel} c. +szakasz további információkat tartalmaz. Mindössze annyi a korlátozás, hogy a +változónevek csak az angol abc betűit tartalmazhatják, és nem ütközhetnek a +LilyPond parancsok neveivel. A pontos szabályok a @ruser{File structure} c. +részben vannak leírva. + +@seealso +A bemeneti formátum teljes definíciója a +@ruser{File structure} c. szakaszban található. + @node A kotta egy összetett zenei kifejezés @subsection A kotta egy összetett zenei kifejezés @translationof Score is a (single) compound musical expression @translationof Score is a (single) compound musical expression -@untranslated +@funindex \score +@funindex score +@cindex score +@cindex összetett zenei kifejezés +Az előző szakaszban (@ref{Bevezetés a LilyPond fájlok szerkezetébe}) már láttuk +a LilyPond fájlok általános felépítését. De a legfontosabb részt mintha +átugrottuk volna: mi kerüljön a @code{\score} blokk belsejébe? + +Valójában ez sokkal egyszerűbb, mint gondolnánk. Ez a mondat mindent +megmagyaráz: -@c index score -@c index contents of a score block -@c index score block, contents of -@c index compound music expression -@c index music expression, compound @quotation +@emph{A @code{\score} blokknak egy összetett zenei kifejezéssel kell +kezdődnie.} @end quotation -@ref{A zenei kifejezés fogalma}. In that section, we saw how to -@c ode{StaffGroup} for this ensemble, which simply groups a number -@c ode{text} variable are interpreted as lyrics we preface them with -@c ode{\lyricmode}. Like @code{\addlyrics}, this switches the input + +@noindent +Az összetett zenei kifejezés fogalmát már tisztáztuk +@ref{A zenei kifejezés fogalma} c. részben. Láttuk, hogy építhetünk fel nagy +zenei kifejezéseket kis részekből -- először hangokból, aztán akkordokból stb. +Most egy összetett zenei kifejezést vizsgálunk meg felülről lefelé. Az +egyszerűség kedvéért egy zongorakíséretes dal lesz a példánk. Először is +szükségünk van az énekes és a zongorista szólamára. + +@example +\score @{ + << + \new Staff = "enek" << + >> + \new PianoStaff = "zongora" << + >> + >> + \layout @{ @} +@} +@end example + +Elneveztük a két szólamot @qq{enek} és @qq{zongora} néven. Ez nem kötelező, +de jó szokás, hogy első pillantásra lássuk, melyik szólam mire szolgál. + +Emlékezzünk arra, hogy @code{<< ... >>} szolgál több szólam jelölésére. Ennek +hatására az ének- és a zongoraszólam egymás alatt fog megjelenni a kottában. +A zongoraszólam két kottasort fog tartalmazni, az énekszólam pedig egy +kottasort és egy dalszöveget, így mindkettőhöz @code{<< ... >>} blokk kell. +A dalszöveghez az @code{\addlyrics} parancsot fogjuk használni. Ha szükséges +feleleveníteni, az @ref{Egyszerű dalok kottázása} c. részben olvashatunk róla. + +@lilypond[verbatim,quote,ragged-right] +\score { + << + \new Staff = "enek" << + \new Voice = "dallam" { c'1 } + \addlyrics { Szólt } + >> + \new PianoStaff = "zongora" << + \new Staff = "jobbkez" { c'1 } + \new Staff = "bal" { c'1 } + >> + >> + \layout { } +} +@end lilypond + +Most megvan a teljes struktúra. Az énekszólam egy @code{Voice} kontextust +tartalmaz a hangoknak, és egy strófányi dalszöveget. A zongoraszólam pedig +a jobb- és balkéz kottasorait tartalmazza. + +Most elkezdhetjük kitölteni a hangokat. Elkezdhetnénk közvetlenül a Voice +kontextus belsejébe beleírni, hogy + +@example +\relative c'' @{ + r4 d8\noBeam g, c4 r +@} +@end example + +De ha ezt tennénk, a @code{\score} blokk nagyon bonyolult lenne, és nem lehetne +átlátni a szólamok szerkezetét. Így érdemes változókat használni. A dalszöveg +változóként való megadására a @code{\lyricmode} parancsot kell használni, hogy +a LilyPond dalszövegként és ne hangokként értelmezze a változó tartalmát. +(A dalszöveg egy külön beviteli mód, ezekből még több is van, ld. az +@ruser{Input modes} c. részt.) + +Tehát miután definiáltuk a megfelelő változókat, hivatkoztunk rájuk, és +basszuskulccsal láttuk el a balkezet, kész egy valódi mű kezdete: + +@lilypond[verbatim,quote,ragged-right] +dallam = \relative c'' { r4 d8\noBeam g, c4 r } +dalszoveg = \lyricmode { Szólt az Úr, } +jobbkez = \relative c'' { 2~ } +balkez = \relative c { b2 e2 } + +\score { + << + \new Staff = "enek" << + \new Voice = "dallam" { \melody } + \addlyrics { \dalszoveg } + >> + \new PianoStaff = "zongora" << + \new Staff = "jobbkez" { \jobbkez } + \new Staff = "balkez" { + \clef "bass" + \balkez + } + >> + >> + \layout { } +} +@end lilypond + +Amikor a @code{\score} blokkot írjuk vagy olvassuk, mindig lassan, gondosan +járjunk el. Haladjunk kívülről befelé, a magas szintű felépítéstől a részletek +felé haladva. Nagyban segít, ha ügyelünk a behúzásokra -- minden blokk +kezdődjön egy tabulátorral beljebb, így az egy szinten levő blokkok ugyanolyan +mértékben lesznek behúzva. + +@seealso +Referencia: @ruser{Structure of a score}. + + @node Zenei kifejezések egymásba ágyazása @subsection Zenei kifejezések egymásba ágyazása @translationof Nesting music expressions -@translationof Nesting music expressions -@untranslated +@cindex ideiglenes kottasorok +@cindex ossia + +Ossiák bevitelekor jön jól, hogy kottasorok bármikor, darab közben is +kezdődhetnek, és bármikor végződhetnek. Álljon itt erre egy példa: + +@lilypond[verbatim,quote,ragged-right] +\new Staff { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff { + f8 f c + } + >> + r4 | + } +} +@end lilypond + +@noindent +Figyeljük meg, hogy a kulcs mérete némileg kisebb, mint a sor elején szereplő +kulcsé (mint ahogy kulcsváltásnál is). + +@cindex kottasorok pozíciója + +Az ossia a kottasor fölött is elhelyezkedhet: + +@lilypond[verbatim,quote,ragged-right] +\new Staff = "main" { + \relative g' { + r4 g8 g c4 c8 d | + e4 r8 + << + { f c c } + \new Staff \with { + alignAboveContext = #"main" } + { f8 f c } + >> + r4 | + } +} +@end lilypond + +Ebben a példában a még ismeretlen @code{\with} parancsot használtuk, amelyet +később ismertetünk. Most elég annyi, hogy a kottasor bizonyos tulajdonságainak +módosítására szolgál. Itt egy olyan tulajdonságot adunk meg, ami azt mondja, +hogy az új kottasor a @qq{main} nevű kottasor felett helyezkedjen el +(ahelyett, hogy alatta helyezkedne el, ami az alapértelmezés). + + +@seealso +Az ossiákat általában kulcs és ütemmutató nélkül, valamint kisebb méretben +szedjük. Ehhez további új parancsok kellenek; ld. az @ref{Size of objects} és +@ruser{Ossia staves} szakaszokat. -@c index staves, temporary -@c index temporary staves -@c index ossias -@c index staff, positioning @node A gerendák és ívek átfedhetik egymást @subsection A gerendák és ívek átfedhetik egymást @translationof On the un-nestedness of brackets and ties -@translationof On the un-nestedness of brackets and ties -@untranslated +@cindex zárójeltípusok +@cindex zárójelek egymásba ágyazása + +Már sok zárójelfajtával találkoztunk a LilyPond fájlok írása közben. Ezekre +különböző szabályok vonatkoznak, amelyeket érdemes tisztázni. Ismételjük át +ezeket a típusokat. + +@need 50 +@multitable @columnfractions .3 .7 +@headitem Zárójelfajta + @tab Szerep +@item @code{@{ .. @}} + @tab Egymás után megszólaló hangokat tartalmaz +@item @code{< .. >} + @tab Egy akkord hangjait tartalmazza +@item @code{<< .. >>} + @tab Egyszerre megszólaló zenei kifejezéseket tartalmaz +@item @code{( .. )} + @tab Egy ív kezdetét és végét jelöli +@item @code{\( .. \)} + @tab Egy frazeálóív kezdetét és végét jelöli +@item @code{[ .. ]} + @tab Egy kézi gerenda kezdetét és végét jelöli +@end multitable + +A LilyPond világán kívül a különböző fajtájú zárójeleket megfelelően egymásba +kell ágyazni, pl. így: @code{<< [ @{ ( .. ) @} ] >>}. Tehát a záró +zárójeleknek pontosan fordított sorrendben kell állniuk, mint a nyitó +zárójeleknek. A fenti táblázatban szereplő első három típusnál (a blokkoknál) +ezt a LilyPond is megköveteli. A többi parancsnál ez nem követelmény. +Valójában ezekre nem is úgy érdemes gondolni, mint a zárójelekre, hanem olyan +jelzésekre, amelyek zenei elemek kezdetét és végét jelölik. + +Tehát például egy frazeálóív kezdődhet egy kézzel megadott gerenda előtt, és +befejeződhet a gerenda vége előtt -- lehet, hogy nem a legzeneibb megoldás, de +lehetséges: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] + { g8\( a b[ c b\) a] } +@end lilypond + +Általánosságban az ívek, frazeálóívek, kötőívek és gerendák átnyúlhatnak +a triolák és előkék határain. A következő példában az 1. sorban egy gerenda, +a 2. sorban egy kötőív nyúl bele egy triolába, a 3. és 4. sorban pedig +mindezek mellett még egy kötőív is található két triola között, valamint egy +frazeálóív, amely túlnyúlik a triolán. + +@lilypond[quote,verbatim,fragment,ragged-right] +{ + r16[ g16 \times 2/3 {r16 e'8] } + g16( a \times 2/3 {b d) e' } + g8[( a \times 2/3 {b d') e'~]} + \times 4/5 {e'32\( a b d' e'} a'4.\) +} +@end lilypond -@c index brackets, nesting -@c index bracket types -@c index brackets, enclosing vs. marking -@c attempt to force this onto a new page @node A szólamok zenét tartalmaznak @section A szólamok zenét tartalmaznak @translationof Voices contain music -@translationof Voices contain music -@untranslated +Singers need voices to sing, and so does LilyPond. +The actual music for all instruments in a score +is contained in Voices -- the most fundamental +of all LilyPond's concepts. @menu * Hangzatos szólamok:: @@ -136,102 +509,984 @@ @node Hangzatos szólamok @subsection Hangzatos szólamok @translationof I'm hearing Voices -@translationof I'm hearing Voices -@untranslated - - -@c index polyphony -@c index layers -@c index multiple voices -@c index voices, multiple -@c index Voice context -@c index context, Voice -@c index simultaneous music -@c index music, simultaneous -@c index concurrent music -@c index music, concurrent -@c index voices vs. chords -@c index chords vs. voices -@c ode{\\}, to place them in separate voices. Without these, the -@c index voices, naming -@c index voices crossing brackets -@c index slurs crossing brackets -@c index ties crossing brackest -@ref{Változók felhasználása a finomhangoláshoz}. -@c index polyphony and relative note entry -@c index relative note entry and polyphony -@c ode{\relative @{ @}} block. Each note is still calculated -@c ode{noteB} is relative to @code{noteA} @* -@c ode{noteC} is relative to @code{noteB}, not @code{noteA}; @* -@c ode{noteD} is relative to @code{noteB}, not @code{noteA} or -@c ode{noteC}; @* -@c ode{noteE} is relative to @code{noteD}, not @code{noteA}. + +@cindex polyphony +@cindex layers +@cindex multiple voices +@cindex voices, multiple +@cindex Voice context +@cindex context, Voice +@cindex simultaneous music +@cindex music, simultaneous +@cindex concurrent music +@cindex music, concurrent +@cindex voices vs. chords +@cindex chords vs. voices + +The lowest, most fundamental or innermost layers in a LilyPond +score are called @q{Voice contexts} or just @q{Voices} for short. +Voices are sometimes called @q{layers} in other notation +packages. + +In fact, a Voice layer or context is the only one which can contain +music. If a Voice context is not explicitly declared one is created +automatically, as we saw at the beginning of this chapter. Some +instruments such as an Oboe can play only one note at a time. Music +written for such instruments is monophonic and requires just a single +voice. Instruments which can play more than one note at a time like +the piano will often require multiple voices to encode the different +concurrent notes and rhythms they are capable of playing. + +A single voice can contain many notes in a chord, of course, +so when exactly are multiple voices needed? Look first at +this example of four chords: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=1] +\key g \major +4 +@end lilypond + +This can be expressed using just the single angle bracket chord +symbols, @code{< ... >}, and for this just a single voice is +needed. But suppose the F-sharp were actually an eighth-note +followed by an eighth-note G, a passing note on the way to the A? +Now we have two notes which start at the same time but have +different durations: the quarter-note D and the eighth-note +F-sharp. How are these to be coded? They cannot be written as +a chord because all the notes in a chord must have the same +duration. And they cannot be written as two sequential notes +as they need to start at the same time. This is when two +voices are required. + +Let us see how this is done in LilyPond input syntax. + +@funindex << \\ >> +@funindex \\ + +The easiest way to enter fragments with more than one voice on a +staff is to enter each voice as a sequence (with @code{@{...@}}), +and combine them simultaneously with angle brackets, @code{<<...>>}. +The fragments must also be separated with double backward slashes, +@code{\\}, to place them in separate voices. Without these, the +notes would be entered into a single voice, which would usually +cause errors. This technique is particularly suited to pieces of +music which are largely monophonic with occasional short sections +of polyphony. + +Here's how we split the chords above into two voices and add both +the passing note and a slur: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key g \major +% Voice "1" Voice "2" +<< { g4 fis8( g) a4 g } \\ { d4 d d d } >> +@end lilypond + +Notice how the stems of the second voice now point down. + +Here's another simple example: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +% Voice "1" Voice "2" +<< { r4 g g4. a8 } \\ { d,2 d4 g } >> +<< { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> +<< { a2. r4 } \\ { fis2. s4 } >> +@end lilypond + +It is not necessary to use a separate @code{<< \\ >>} construct +for each bar. For music with few notes in each bar this layout +can help the legibility of the code, but if there are many +notes in each bar it may be better to split out each voice +separately, like this: + +@lilypond[quote,verbatim,fragment,ragged-right,relative=2] +\key d \minor +<< { + % Voice "1" + r4 g g4. a8 | + bes4 bes c bes | + a2. r4 | +} \\ { + % Voice "2" + d,2 d4 g | + g4 g g8( a) g4 | + fis2. s4 | +} >> +@end lilypond + + +@cindex voices, naming +@cindex voices crossing brackets +@cindex slurs crossing brackets +@cindex ties crossing brackest + +This example has just two voices, but the same construct may be +used to encode three or more voices by adding more back-slash +separators. + +The Voice contexts bear the names @code{"1"}, @code{"2"}, etc. +In each of these contexts, the vertical direction of slurs, +stems, ties, dynamics etc., is set appropriately. + +@lilypond[quote,verbatim,fragment] +\new Staff \relative c' { + % Main voice + c16 d e f + % Voice "1" Voice "2" Voice "3" + << { g4 f e } \\ { r8 e4 d c8~ } >> + << { d2 e2 } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b4 c2 } >> +} +@end lilypond + +These voices are all separate from the main voice that contains +the notes just outside the @code{<< .. >>} construct. Let's call +this the @emph{simultaneous construct}. Slurs and ties may only +connect notes within the same voice, so slurs and ties cannot go +into or out of a simultaneous construct. Conversely, +parallel voices from separate simultaneous constructs on the same +staff are the same voice. Other voice-related properties also +carry across simultaneous constructs. Here is the same example, +with different colors and note heads for each voice. Note that +changes in one voice do not affect other voices, but they do +persist in the same voice later. Note also that tied notes may be +split across the same voices in two constructs, shown here in the +blue triangle voice. + +@lilypond[quote,verbatim] +\new Staff \relative c' { + % Main voice + c16 d e f + << % Bar 1 + { + \voiceOneStyle + g4 f e + } + \\ + { + \voiceTwoStyle + r8 e4 d c8~ + } + >> + << % Bar 2 + % Voice 1 continues + { d2 e2 } + \\ + % Voice 2 continues + { c8 b16 a b8 g ~ g2 } + \\ + { + \voiceThreeStyle + s4 b4 c2 + } + >> +} +@end lilypond + +@funindex \voiceOneStyle +@funindex \voiceTwoStyle +@funindex \voiceThreeStyle +@funindex \voiceFourStyle +@funindex \voiceNeutralStyle + +The commands @code{\voiceXXXStyle} are mainly intended for use in +educational documents such as this one. They modify the color +of the note head, the stem and the beams, and the style of the +note head, so that the voices may be easily distinguished. +Voice one is set to red diamonds, voice two to blue triangles, +voice three to green crossed circles, and voice four (not used +here) to magenta crosses; @code{\voiceNeutralStyle} (also not +used here) reverts the style back to the default. +We shall see later how commands like these may be created by the +user. +See @ref{Visibility and color of objects} and +@ref{Using variables for tweaks}. + +@cindex polyphony and relative note entry +@cindex relative note entry and polyphony + +Polyphony does not change the relationship of notes within a +@code{\relative @{ @}} block. Each note is still calculated +relative to the note immediately preceding it, or to the first +note of the preceding chord. So in + +@example +\relative c' @{ noteA << < noteB noteC > \\ noteD >> noteE @} +@end example + +@noindent +@code{noteB} is relative to @code{noteA} @* +@code{noteC} is relative to @code{noteB}, not @code{noteA}; @* +@code{noteD} is relative to @code{noteB}, not @code{noteA} or +@code{noteC}; @* +@code{noteE} is relative to @code{noteD}, not @code{noteA}. + +An alternative way, which may be clearer if the notes in the +voices are widely separated, is to place a @code{\relative} +command at the start of each voice: + +@example +\relative c' @{ noteA ... @} +<< + \relative c'' @{ < noteB noteC > ... @} +\\ + \relative g' @{ noteD ... @} +>> +\relative c' @{ noteE ... @} +@end example + +Let us finally analyze the voices in a more complex piece of music. +Here are the notes from the first two bars of the second of Chopin's +Deux Nocturnes, Op 32. This example will be used at later stages in +this and the next chapter to illustrate several techniques for +producing notation, so please ignore for now anything in the +underlying code which looks mysterious and concentrate just on the +music and the voices -- the complications will all be explained in +later sections. + @c The following should appear as music without code +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % No voice three + \\ % Voice four + { + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> | + 1 | +} +@end lilypond + +The direction of the stems is often used to indicate the continuity of +two simultaneous melodic lines. Here the stems of the highest notes +are all pointing up and the stems of the lower notes are all pointing +down. This is the first indication that more than one voice is +required. + +But the real need for multiple voices arises when notes +which start at the same time have different durations. +Look at the notes which start at beat three in the first +bar. The A-flat is a dotted quarter note, the F is a +quarter note and the D-flat is a half note. These +cannot be written as a chord as all the notes in a chord +must have the same duration. Neither can they be written +as sequential notes, as they must start at the same time. +This section of the bar requires three voices, and the +normal practice would be to write the whole bar as three +voices, as shown below, where we have used different note heads +and colors for the three voices. Again, the code behind this +example will be explained later, so ignore anything you do +not understand. + @c The following should appear as music without code @c The three voice styles should be defined in -init -@c index stem down -@c index voices and stem directions -@c index stem directions and voices -@c index stem up +@lilypond[quote,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { % Voice one + \voiceOneStyle + c2 aes4. bes8 + } + \\ % Voice two + { \voiceTwoStyle + aes2 f4 fes + } + \\ % No Voice three (we want stems down) + \\ % Voice four + { \voiceThreeStyle + % Ignore these for now - they are explained in Ch 4 + \once \override NoteColumn #'force-hshift = #0 + 2 + \once \override NoteColumn #'force-hshift = #0.5 + des2 + } + >> + 1 +} +@end lilypond + + +Let us try to encode this music from scratch. As we +shall see, this encounters some difficulties. We begin as +we have learnt, using the @code{<< \\ >>} construct to +enter the music of the first bar in three voices: + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << + { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des2 } + >> + 1 +} +@end lilypond + +@cindex stem down +@cindex voices and stem directions +@cindex stem directions and voices +@cindex stem up + +The stem directions are automatically assigned with the +odd-numbered voices taking upward stems and the even-numbered +voices downward ones. The stems for voices 1 and 2 are right, +but the stems in voice 3 should go down in this particular piece +of music. We can correct this by skipping voice three +and placing the music in voice four. This is done by simply +adding another pair of @code{\\}. + +@lilypond[quote,verbatim,fragment,ragged-right] +\new Staff \relative c'' { + \key aes \major + << % Voice one + { c2 aes4. bes8 } + \\ % Voice two + { aes2 f4 fes } + \\ % Omit Voice three + \\ % Voice four + { 2 des2 } + >> + 1 +} +@end lilypond + +@noindent +We see that this fixes the stem direction, but exposes a problem +sometimes encountered with multiple voices -- the stems of the notes +in one voice can collide with the note heads in other voices. In +laying out the notes, LilyPond allows the notes or chords from two +voices to occupy the same vertical note column provided the stems are +in opposite directions, but the notes from the third and fourth voices +are displaced, if necessary, to avoid the note heads colliding. This +usually works well, but in this example the notes of the lowest voice +are clearly not well placed by default. LilyPond provides several ways +to adjust the horizontal placing of notes. We are not quite ready yet +to see how to correct this, so we shall leave this problem until a +later section --- see the @code{force-hshift} property in @ref{Fixing +overlapping notation}. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + @node Szólamok kézi létrehozása @subsection Szólamok kézi létrehozása @translationof Explicitly instantiating voices -@translationof Explicitly instantiating voices -@untranslated +@funindex \voiceOne +@funindex voiceOne +@funindex \voiceTwo +@funindex voiceTwo +@funindex \voiceThree +@funindex voiceThree +@funindex \voiceFour +@funindex voiceFour +@funindex \oneVoice +@funindex oneVoice +@funindex \new Voice +@cindex voice contexts, creating + +Voice contexts can also be created manually +inside a @code{<< >>} block to create polyphonic music, using +@code{\voiceOne} ... @code{\voiceFour} to indicate the required +directions of stems, slurs, etc. In longer scores this method +is clearer, as it permits the voices to be separated and to be +given more descriptive names. + +Specifically, the construct @code{<< \\ >>} which we used in +the previous section: + +@example +\new Staff @{ + \relative c' @{ + << @{ e4 f g a @} \\ @{ c,4 d e f @} >> + @} +@} +@end example + +@noindent +is equivalent to + +@example +\new Staff << + \new Voice = "1" @{ \voiceOne \relative c' @{ e4 f g a @} @} + \new Voice = "2" @{ \voiceTwo \relative c' @{ c4 d e f @} @} +>> +@end example + +Both of the above would produce -@c index voice contexts, creating -@c ode{\voiceOne} ... @code{\voiceFour} to indicate the required @c The following example should not display the code -@c index voices, reverting to single -@c index reverting to a single voice -@c ode{\voiceFour} make them point downwards. These commands also -@c ode{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on -@c index nesting music expressions -@c index nesting simultaneous constructs -@c index nesting voices -@c index voices, temporary -@c index voices, nesting -@c index spacing notes -@subsubheading Hangoszlopok -@c index note column -@c index note collisions -@c index collisions, notes -@c index shift commands -@c ode{\shiftOff} commands specify the degree to which notes and -@c ode{\shiftOnn} and @code{\shiftOnnn} define further shift +@lilypond[ragged-right,quote] +\new Staff << + \new Voice = "1" { \voiceOne \relative c' { e4 f g a } } + \new Voice = "2" { \voiceTwo \relative c' { c4 d e f } } +>> +@end lilypond + +@cindex voices, reverting to single +@cindex reverting to a single voice + +The @code{\voiceXXX} commands set the direction of stems, slurs, +ties, articulations, text annotations, augmentation dots of dotted +notes, and fingerings. @code{\voiceOne} and @code{\voiceThree} +make these objects point upwards, while @code{\voiceTwo} and +@code{\voiceFour} make them point downwards. These commands also +generate a horizontal shift for each voice when this is required +to avoid clashes of note heads. The command @code{\oneVoice} +reverts the settings back to the normal values for a single voice. + +Let us see in some simple examples exactly what effect +@code{\oneVoice}, @code{\voiceOne} and @code{voiceTwo} have on +markup, ties, slurs, and dynamics: + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + % Default behavior or behavior after \oneVoice + c d8~ d e4( f g a) b-> c +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + \voiceOne + c d8~ d e4( f g a) b-> c + \oneVoice + c, d8~ d e4( f g a) b-> c +} +@end lilypond + +@lilypond[quote,ragged-right,verbatim] +\relative c'{ + \voiceTwo + c d8~ d e4( f g a) b-> c + \oneVoice + c, d8~ d e4( f g a) b-> c +} +@end lilypond + +Now let's look at three different ways to notate the same passage +of polyphonic music, each of which is advantageous in different +circumstances, using the example from the previous section. + +An expression that appears directly inside a @code{<< >>} belongs +to the main voice (but, note, @strong{not} in a @code{<< \\ >>} +construct). This is useful when extra voices appear while the +main voice is playing. Here is a more correct rendition of our +example. The red diamond-shaped notes +demonstrate that the main melody is now in a single voice context, +permitting a phrasing slur to be drawn over them. + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + \voiceOneStyle + % The following notes are monophonic + c16^( d e f + % Start simultaneous section of three voices + << + % Continue the main voice in parallel + { g4 f e | d2 e2) | } + % Initiate second voice + \new Voice { + % Set stems, etc., down + \voiceTwo + r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s2. | s4 b4 c2 | + } + >> +} +@end lilypond + +@cindex nesting music expressions +@cindex nesting simultaneous constructs +@cindex nesting voices +@cindex voices, temporary +@cindex voices, nesting + +More deeply nested polyphony constructs are possible, and if a +voice appears only briefly this might be a more natural way to +typeset the music: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' { + c16^( d e f + << + { g4 f e | d2 e2) | } + \new Voice { + \voiceTwo + r8 e4 d c8~ + << + { c8 b16 a b8 g~ g2 } + \new Voice { + \voiceThree + s4 b4 c2 + } + >> + } + >> +} +@end lilypond + +@cindex spacing notes + +This method of nesting new voices briefly is useful +when only small sections of the music +are polyphonic, but when the whole staff is largely polyphonic +it can be clearer to use multiple voices throughout, using +spacing notes to step over sections where the voice is silent, +as here: + +@lilypond[quote,ragged-right,verbatim] +\new Staff \relative c' << + % Initiate first voice + \new Voice { + \voiceOne + c16^( d e f g4 f e | d2 e2) | + } + % Initiate second voice + \new Voice { + % Set stems, etc, down + \voiceTwo + s4 r8 e4 d c8~ | c8 b16 a b8 g~ g2 | + } + % Initiate third voice + \new Voice { + % Set stems, etc, up + \voiceThree + s1 | s4 b4 c2 | + } +>> +@end lilypond + +@subsubheading Note columns + +@cindex note column +@cindex note collisions +@cindex collisions, notes +@cindex shift commands +@funindex \shiftOff +@funindex shiftOff +@funindex \shiftOn +@funindex shiftOn +@funindex \shiftOnn +@funindex shiftOnn +@funindex \shiftOnnn +@funindex shiftOnnn + +Closely spaced notes in a chord, or notes occurring at the same +time in different voices, are arranged in two, occasionally more, +columns to prevent the note heads overlapping. These are called +note columns. There are separate columns for each voice, and +the currently specified voice-dependent shift is applied to the +note column if there would otherwise be a collision. This can +be seen in the example above. In bar 2 the C in voice two is +shifted to the right relative to the D in voice one, and in the +final chord the C in voice three is also shifted to the right +relative to the other notes. + +The @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, and +@code{\shiftOff} commands specify the degree to which notes and +chords of the voice should be shifted if a collision +would otherwise occur. By default, the outer voices (normally +voices one and two) have @code{\shiftOff} specified, while the +inner voices (three and four) have @code{\shiftOn} specified. +When a shift is applied, voices one and three are shifted to +the right and voices two and four to the left. + +@code{\shiftOnn} and @code{\shiftOnnn} define further shift +levels which may be specified temporarily to resolve collisions +in complex situations -- see @ref{Real music example}. + +A note column can contain just one note (or chord) from a voice +with stems up and one note (or chord) from a voice with stems +down. If notes from two voices which have their stems in the +same direction are placed at the same position and both voices +have no shift or the same shift specified, the error message +@qq{Too many clashing note columns} will be produced. + + +@seealso +Notation Reference: @ruser{Multiple voices}. + + @node Szólamok és vokális zene @subsection Szólamok és vokális zene @translationof Voices and vocals -@translationof Voices and vocals -@untranslated - - -@c index Lyrics context, creating -@c index lyrics, linking to voice -@c index lyrics and beaming -@c index beaming and lyrics -@c ode{\autoBeamOff} to turn off the automatic beaming. -@c index vocal score structure -@c index choir staff -@c ode{\lyricmode} to ensure they are interpreted as lyrics -@c index hymn structure -@c index SATB structure -@c index vocal scores with multiple verses -@c index multiple vocal verses -@c index verses, multiple vocal -@c index verse and refrain -@c index book, example of using -@c ode{\score} blocks within an implicit @code{\book} block, as +Vocal music presents a special difficulty: we need to combine two +expressions -- notes and lyrics. + +@funindex \new Lyrics +@funindex \lyricsto +@funindex lyricsto +@funindex Lyrics +@cindex Lyrics context, creating +@cindex lyrics, linking to voice + +You have already seen the @code{\addlyrics@{@}} command, which +handles simple scores well. However, this technique is +quite limited. For more complex music, you must introduce the +lyrics in a @code{Lyrics} context using @code{\new Lyrics} and +explicitly link +the lyrics to the notes with @code{\lyricsto@{@}}, using the +name assigned to the Voice. + +@lilypond[quote,verbatim,fragment] +<< + \new Voice = "one" \relative c'' { + \autoBeamOff + \time 2/4 + c4 b8. a16 g4. f8 e4 d c2 + } + \new Lyrics \lyricsto "one" { + No more let sins and sor -- rows grow. + } +>> +@end lilypond + +Note that the lyrics must be linked to a @code{Voice} context, +@emph{not} a @code{Staff} context. This is a case where it is +necessary to create @code{Staff} and @code{Voice} contexts +explicitly. + +@cindex lyrics and beaming +@cindex beaming and lyrics +@funindex \autoBeamOff +@funindex autoBeamOff + +The automatic beaming which LilyPond uses by default works well +for instrumental music, but not so well for music with lyrics, +where beaming is either not required at all or is used to indicate +melismata in the lyrics. In the example above we use the command +@code{\autoBeamOff} to turn off the automatic beaming. + +@funindex \new ChoirStaff +@funindex ChoirStaff +@funindex \lyricmode +@funindex lyricmode +@cindex vocal score structure +@cindex choir staff + +Let us reuse the earlier example from Judas Maccabæus to +illustrate this more flexible technique. We first recast +it to use variables so the music and lyrics can be separated +from the staff structure. We also introduce a ChoirStaff +bracket. The lyrics themselves must be introduced with +@code{\lyricmode} to ensure they are interpreted as lyrics +rather than music. + +@lilypond[quote,verbatim] +global = { \time 6/8 \partial 8 \key f \major} +SopOneMusic = \relative c'' { + c8 | c([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 | } +SopTwoMusic = \relative c' { + r8 | r4. r4 c8 | a'([ g)] f f([ e)] d | e([ d)] c bes' | } +SopOneLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, __ | } +SopTwoLyrics = \lyricmode { + Let | flee -- cy flocks the | hills a -- dorn, | } + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "SopOne" { + \global + \SopOneMusic + } + \new Lyrics \lyricsto "SopOne" { + \SopOneLyrics + } + >> + \new Staff << + \new Voice = "SopTwo" { + \global + \SopTwoMusic + } + \new Lyrics \lyricsto "SopTwo" { + \SopTwoLyrics + } + >> + >> +} +@end lilypond + +This is the basic structure of all vocal scores. More staves may be +added as required, more voices may be added to the staves, more verses +may be added to the lyrics, and the variables containing the music can +easily be placed in separate files should they become too long. + +@cindex hymn structure +@cindex SATB structure +@cindex vocal scores with multiple verses +@cindex multiple vocal verses +@cindex verses, multiple vocal + +Here is an example of the first line of a hymn with four +verses, set for SATB. In this case the words for all four +parts are the same. Note how we use variables to separate the +music notation and words from the staff structure. See too +how a variable, which we have chosen to call @q{TimeKey}, is used +to hold several commands for use within the two staves. In other +examples this is often called @q{global}. + +@lilypond[quote,verbatim] +TimeKey = { \time 4/4 \partial 4 \key c \major} +SopMusic = \relative c' { c4 | e4. e8 g4 g | a a g | } +AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e | } +TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 | } +BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 | } +VerseOne = \lyricmode { + E -- | ter -- nal fa -- ther, | strong to save, | } +VerseTwo = \lyricmode { + O | Christ, whose voice the | wa -- ters heard, | } +VerseThree = \lyricmode { + O | Ho -- ly Spi -- rit, | who didst brood | } +VerseFour = \lyricmode { + O | Tri -- ni -- ty of | love and pow'r | } + +\score { + \new ChoirStaff << + \new Staff << + \clef "treble" + \new Voice = "Sop" { \voiceOne \TimeKey \SopMusic } + \new Voice = "Alto" { \voiceTwo \AltoMusic } + \new Lyrics \lyricsto "Sop" { \VerseOne } + \new Lyrics \lyricsto "Sop" { \VerseTwo } + \new Lyrics \lyricsto "Sop" { \VerseThree } + \new Lyrics \lyricsto "Sop" { \VerseFour } + >> + \new Staff << + \clef "bass" + \new Voice = "Tenor" { \voiceOne \TimeKey \TenorMusic } + \new Voice = "Bass" { \voiceTwo \BassMusic } + >> + >> +} +@end lilypond + +@cindex verse and refrain + +We end with an example to show how we might code a solo verse which +continues into a two-part refrain in two staves. The positioning +of the sequential and simultaneous sections to achieve this within +a single score is quite tricky, so follow the explanation carefully! + +Let's start with a score block containing a @code{ChoirStaff}, as +we would like the brace to appear at the start of the chorus. +Normally you would need angle brackets after @code{\new ChoirStaff} +to bring in all the staves in parallel, but here we want to +defer the parallelism during the solo so we use braces, although +angle brackets here wouldn't hurt. Inside the @code{ChoirStaff} we +want first the staff which will contain the verse. This must +contain notes and lyrics in parallel, so here we need angle +brackets around the @code{\new Voice} and @code{\new Lyrics} to +start them at the same time: + +@lilypond[quote,verbatim,ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 + g g g | b b b | +} +versewords = \lyricmode { + One two three four five six +} +\score { + \new ChoirStaff { + \new Staff << + \new Voice = "verse" { + \versenotes \break + } + \new Lyrics \lyricsto verse { + \versewords + } + >> + } +} +@end lilypond + +That gives the verse line. + +Now we want to continue with refrainA on the same staff while a +second staff is introduced in parallel with it for refrainB, so +this is a parallel section which must be positioned immediately +following the @code{\break} in the verse Voice. Yes, @emph{within} +the verse Voice! Here's that parallel section. More staves +could be introduced here in the same way. + +@example +<< + \refrainnotesA + \new Lyrics \lyricsto verse @{ + \refrainwordsA + @} + \new Staff << + \new Voice = "refrainB" @{ + \refrainnotesB + @} + \new Lyrics \lyricsto "refrainB" @{ + \refrainwordsB + @} + >> +>> +@end example + +Here's the final result with two staves in the chorus showing +how the parallel section is positioned within the verse Voice: + +@lilypond[quote,verbatim, ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 + g g g | b b b | +} +refrainnotesA = \relative c'' { + \time 2/4 + c c | g g \bar "|." +} +refrainnotesB = \relative c { + \clef "bass" + \key g \major + c e | d d | +} +versewords = \lyricmode { + One two three four five six +} +refrainwordsA = \lyricmode { + la la la la +} +refrainwordsB = \lyricmode { + dum dum dum dum +} +\score { + \new ChoirStaff { + \new Staff << + \new Voice = "verse" { + \versenotes \break + << + \refrainnotesA + \new Lyrics \lyricsto "verse" { + \refrainwordsA + } + \new Staff << + \new Voice = "refrainB" { + \refrainnotesB + } + \new Lyrics \lyricsto "refrainB" { + \refrainwordsB + } + >> + >> + } + \new Lyrics \lyricsto "verse" { + \versewords + } + >> + } +} +@end lilypond + +@cindex book, example of using +@funindex \book +@funindex book + +However, although this is an interesting and useful exercise to +help you to understand how sequential and simultaneous blocks work, +in practice one would perhaps choose to code this as two +@code{\score} blocks within an implicit @code{\book} block, as +follows: + +@lilypond[quote,verbatim,ragged-right] +versenotes = \relative c'' { + \clef "treble" + \key g \major + \time 3/4 + g g g | b b b | +} +refrainnotesA = \relative c'' { + \time 2/4 + c c | g g \bar "|." +} +refrainnotesB = \relative c { + \clef "bass" + \key g \major + c e | d d | +} +versewords = \lyricmode { + One two three four five six +} +refrainwordsA = \lyricmode { + la la la la +} +refrainwordsB = \lyricmode { + dum dum dum dum +} +\score { + \new Staff << + \new Voice = "verse" { + \versenotes + } + \new Lyrics \lyricsto "verse" { + \versewords + } + >> +} + +\score { + \new ChoirStaff << + \new Staff << + \new Voice = "refrainA" { + \refrainnotesA + } + \new Lyrics \lyricsto "refrainA" { + \refrainwordsA + } + >> + \new Staff << + \new Voice = "refrainB" { + \refrainnotesB + } + \new Lyrics \lyricsto "refrainB" { + \refrainwordsB + } + >> + >> +} +@end lilypond + + +@seealso +Notation Reference: @ruser{Vocal music}. + + @node Kontextusok és ábrázolók @section Kontextusok és ábrázolók @translationof Contexts and engravers -@translationof Contexts and engravers -@untranslated + +Kontextusok és ábrázolók have been mentioned informally +in earlier sections; we now must look at +these concepts in more detail, as they are important +in the fine-tuning of LilyPond output. @menu @@ -245,116 +1500,770 @@ @node A kontextus fogalma @subsection A kontextus fogalma @translationof Contexts explained -@translationof Contexts explained - -@untranslated +@cindex contexts explained + +When music is printed, many notational elements which do not +appear explicitly in the input file must be added to the +output. For example, compare the input and output of the +following example: + +@lilypond[quote,verbatim,relative=2,fragment] +cis4 cis2. g4 +@end lilypond + +The input is rather sparse, but in the output, bar lines, +accidentals, clef, and time signature have been added. When +LilyPond @emph{interprets} the input the musical information +is parsed from left to right, similar to the way a performer +reads the score. While reading the input, the program remembers +where measure boundaries are, and which pitches require explicit +accidentals. This information must be held on several levels. +For example, an accidental affects only a single staff, while +a bar line must be synchronized across the entire score. + +Within LilyPond, these rules and bits of information are grouped in +@emph{Contexts}. We have already introduced the @code{Voice} context. +Others are the @code{Staff} and @code{Score} contexts. Contexts are +hierarchical to reflect the hierarchical nature of a musical score. +For example: a @code{Staff} context can contain many @code{Voice} +contexts, and a @code{Score} context can contain many @code{Staff} +contexts. -@c index contexts explained @quotation @sourceimage{context-example,5cm,,} @end quotation -@c ode{Score} and @code{Staff} contexts. -@c ode{Voice} contexts there are contexts which fit between -@c ode{PianoStaff} and @code{ChoirStaff} contexts. There -@c ode{GregorianTranscriptionStaff}. + +Each context has the responsibility for enforcing some notation rules, +creating some notation objects and maintaining the associated +properties. For example, the @code{Voice} context may introduce an +accidental and then the @code{Staff} context maintains the rule to +show or suppress the accidental for the remainder of the measure. + +As another example, the synchronization of bar lines is, by default, +handled in the @code{Score} context. +However, in some music we may not want the bar lines to be +synchronized -- consider a polymetric score in 4/4 and 3/4 time. +In such cases, we must modify the default settings of the +@code{Score} and @code{Staff} contexts. + +For very simple scores, contexts are created implicitly, and you need +not be aware of them. For larger pieces, such as anything with more +than one staff, they must be +created explicitly to make sure that you get as many staves as you +need, and that they are in the correct order. For typesetting pieces +with specialized notation, it is usual to modify existing, or +even to define totally new, contexts. + +In addition to the @code{Score,} @code{Staff} and +@code{Voice} contexts there are contexts which fit between +the score and staff levels to control staff groups, such as the +@code{PianoStaff} and @code{ChoirStaff} contexts. There +are also alternative staff and voice contexts, and contexts for +lyrics, percussion, fret boards, figured bass, etc. + +The names of all context types are formed from one or more +words, each word being capitalized and joined immediately to the +preceding word with no hyphen or underscore, e.g., +@code{GregorianTranscriptionStaff}. + + +@seealso +Notation Reference: @ruser{A kontextus fogalma}. + + @node Kontextusok létrehozása @subsection Kontextusok létrehozása @translationof Creating contexts -@translationof Creating contexts - -@untranslated -@c index new contexts -@c index creating contexts -@c index contexts, creating -@c ode{Staff} contexts may also be left to be created automatically, -@c ode{Voice}). This command creates a new context, and starts -@c ode{\with} block in which one or more score-wide default values -@c ode{\with} blocks can be found under the heading +@funindex \new +@funindex new +@cindex new contexts +@cindex creating contexts +@cindex contexts, creating + +In an input file a score block, introduced with a @code{\score} +command, contains a single music expression and an associated +output definition (either a @code{\layout} or a @code{\midi} block). +The @code{Score} context is usually left to be created automatically +when the interpretation of that music expression starts. + +For scores with only one voice and one staff, the @code{Voice} and +@code{Staff} contexts may also be left to be created automatically, +but for more complex scores it is necessary to create them by hand. +The simplest command that does this is @code{\new}. It is prepended +to a music expression, for example + +@example +\new @var{type} @var{music-expression} +@end example + +@noindent +where @var{type} is a context name (like @code{Staff} or +@code{Voice}). This command creates a new context, and starts +interpreting the @var{music-expression} within that context. + +(Note that a @code{\new Score} command is not normally required, +as the essential top-level @code{Score} context is created +automatically when the music expression within the @code{\score} +block is interpreted. The only reason for creating a @code{Score} +context explicitly using @code{\new Score} is to introduce a +@code{\with} block in which one or more score-wide default values +of context properties may be specified. Information on using +@code{\with} blocks can be found under the heading +@qq{Setting context properties with @code{\\with} } in @ref{Kontextusok tulajdonságainak módosítása}.) -@c ode{Staff} and @code{Voice} contexts in earlier sections, but -@c index contexts, naming -@c index naming contexts -@c ode{Staff}, @code{Voice}, etc, and the identifying name of a + +You have seen many practical examples which created new +@code{Staff} and @code{Voice} contexts in earlier sections, but +to remind you how these commands are used in practice, here's an +annotated real-music example: + +@lilypond[quote,verbatim,ragged-right] +\score { % start of single compound music expression + << % start of simultaneous staves section + \time 2/4 + \new Staff { % create RH staff + \key g \minor + \clef "treble" + \new Voice { % create voice for RH notes + \relative c'' { % start of RH notes + d4 ees16 c8. + d4 ees16 c8. + } % end of RH notes + } % end of RH voice + } % end of RH staff + \new Staff << % create LH staff; needs two simultaneous voices + \key g \minor + \clef "bass" + \new Voice { % create LH voice one + \voiceOne + \relative g { % start of LH voice one notes + g8 ees, + g8 ees, + } % end of LH voice one notes + } % end of LH voice one + \new Voice { % create LH voice two + \voiceTwo + \relative g { % start of LH voice two notes + g4 ees + g4 ees + } % end of LH voice two notes + } % end of LH voice two + >> % end of LH staff + >> % end of simultaneous staves section +} % end of single compound music expression +@end lilypond + +(Note how all the statements which open a block with either a +curly bracket, @code{@{}, or double angle brackets, @code{<<}, +are indented by two further spaces, and the corresponding +closing bracket is indented by exactly the same amount. While +this is not required, following this practice will greatly +reduce the number of @q{unmatched bracket} errors, and is +strongly recommended. It enables the structure of the music to +be seen at a glance, and any unmatched brackets will be obvious. +Note too how the LH staff is created using double angle brackets +because it requires two voices for its music, whereas the RH staff +is created with a single music expression surrounded by curly +brackets because it requires only one voice.) + +@cindex contexts, naming +@cindex naming contexts + +The @code{\new} command may also give an identifying name to the +context to distinguish it from other contexts of the same type, + +@example +\new @var{type} = @var{id} @var{music-expression} +@end example + +Note the distinction between the name of the context type, +@code{Staff}, @code{Voice}, etc, and the identifying name of a +particular instance of that type, which can be any sequence of letters +invented by the user. Digits and spaces can also be used in the +identifying name, but then it has to be placed in quotes, +i.e. @code{\new Staff = "MyStaff 1" @var{music-expression}}. +The identifying name is used to +refer back to that particular instance of a context. We saw this in +use in the section on lyrics, see @ref{Szólamok és vokális zene}. + + +@seealso +Notation Reference: @ruser{Kontextusok létrehozása}. + + @node Az ábrázoló fogalma @subsection Az ábrázoló fogalma -@translationof Engravers explained -@translationof Engravers explained +@subsection Az ábrázoló fogalma -@untranslated +@cindex engravers + +Every mark on the printed output of a score produced by LilyPond +is produced by an @code{Engraver}. Thus there is an engraver +to print staves, one to print note heads, one for stems, one for +beams, etc, etc. In total there are over 120 such engravers! +Fortunately, for most scores it is not necessary to know about +more than a few, and for simple scores you do not need to know +about any. + +Engravers live and operate in Contexts. Engravers such as the +@code{Metronome_mark_engraver}, whose action and output apply to the +score as a whole, operate in the highest level context -- the +@code{Score} context. + +The @code{Clef_engraver} and @code{Key_engraver} are to be +found in every @code{Staff} Context, as different staves may require +different clefs and keys. + +The @code{Note_heads_engraver} and @code{Stem_engraver} live +in every @code{Voice} context, the lowest level context of all. + +Each engraver processes the particular objects associated +with its function, and maintains the properties that relate +to that function. These properties, like the properties +associated with contexts, may be modified to change the +operation of the engraver or the appearance of those elements +in the printed score. + +Engravers all have compound names formed from words which +describe their function. Just the first word is capitalized, +and the remainder are joined to it with underscores. Thus +the @code{Staff_symbol_engraver} is responsible for creating the +lines of the staff, the @code{Clef_engraver} determines and sets +the pitch reference point on the staff by drawing a clef symbol. + +Here are some of the most common engravers together with their +function. You will see it is usually easy to guess the function +from the name, or vice versa. + +@multitable @columnfractions .3 .7 +@headitem Engraver + @tab Function +@item Accidental_engraver + @tab Makes accidentals, cautionary and suggested accidentals +@item Beam_engraver + @tab Engraves beams +@item Clef_engraver + @tab Engraves clefs +@item Completion_heads_engraver + @tab Splits notes which cross bar lines +@c The old Dynamic_engraver is deprecated. -jm +@item New_dynamic_engraver + @tab Creates hairpins and dynamic texts +@item Forbid_line_break_engraver + @tab Prevents line breaks if a musical element is still active +@item Key_engraver + @tab Creates the key signature +@item Metronome_mark_engraver + @tab Engraves metronome marking +@item Note_heads_engraver + @tab Engraves note heads +@item Rest_engraver + @tab Engraves rests +@item Staff_symbol_engraver + @tab Engraves the five (by default) lines of the staff +@item Stem_engraver + @tab Creates stems and single-stem tremolos +@item Time_signature_engraver + @tab Creates time signatures +@end multitable + +@smallspace + +We shall see later how the output of LilyPond can be changed +by modifying the action of Engravers. + + +@seealso +Internals reference: @rinternals{Engravers and Performers}. -@c index engravers -@c ode{Metronome_mark_engraver}, whose action and output apply to the -@c ode{Score} context. -@c The old Dynamic_engraver is deprecated. -jm @node Kontextusok tulajdonságainak módosítása @subsection Kontextusok tulajdonságainak módosítása @translationof Modifying context properties -@translationof Modifying context properties -@untranslated +@cindex context properties +@cindex context properties, modifying +@cindex modifying context properties +@funindex \set +@funindex set +@funindex \unset +@funindex unset + +Contexts are responsible for holding the values of a number of +context @emph{properties}. Many of them can be changed to +influence the interpretation of the input and so change the +appearance of the output. They are changed by the +@code{\set} command. This takes the form + +@example +\set @emph{ContextName}.@emph{propertyName} = #@emph{value} +@end example + +Where the @emph{ContextName} is usually @code{Score}, +@code{Staff} or @code{Voice}. It may be omitted, +in which case the current context (typically @code{Voice}) is assumed. + +The names of context properties consist of words joined +together with no hyphens or underscores, all except the +first having a capital letter. Here are a few examples +of some commonly used ones. There are many more. - -@c index context properties -@c index context properties, modifying -@c index modifying context properties -@c ode{\set} command. This takes the form -@c ode{Staff} or @code{Voice}. It may be omitted, @c attempt to force this onto a new page -@c index properties operating in contexts -@c index setting properties within contexts -@c ode{instrumentName} clearly lives in the @code{Staff} context, since -@c ode{\set} command set the property @code{instrumentName} in the -@c ode{Voice} context to @qq{Alto}, but as LilyPond does not look -@c ode{\set} or @code{\unset} again. Let's try changing the -@c ode{##t} and @code{##f}, with two hash signs. A text property -@subsubheading Kontextusok tulajdonságainak beállítása a @code{\with} paranccsal -@c index context properties, setting with \with -@c ode{\new Score} command, like this: -@c ode{\set} and returned to the default value set in the -@c ode{\with} block with @code{\unset}. -@c index fontSize, default and setting -@c ode{\unset fontSize} command. -@subsubheading Kontextusok tulajdonságainak beállítása a @code{\context} paranccsal -@c index context properties, setting with \context -@c ode{\with} block, introduced above. It is placed in a -@c ode{\context} block within a @code{\layout} block. Each -@c ode{\context} block will affect all contexts of the type specified -@c ode{\layout} block appears. Here is a example to show the format: -@c ode{\set} commands embedded in music statements. -@c FIXME -@c uncomment when backslash-node-name issue is resolved -pm -@c @ruser{The set command}. +@need 50 +@multitable @columnfractions .25 .15 .45 .15 +@headitem propertyName + @tab Type + @tab Function + @tab Example Value +@item extraNatural + @tab Boolean + @tab If true, set extra natural signs before accidentals + @tab @code{#t}, @code{#f} +@item currentBarNumber + @tab Integer + @tab Set the current bar number + @tab @code{50} +@item doubleSlurs + @tab Boolean + @tab If true, print slurs both above and below notes + @tab @code{#t}, @code{#f} +@item instrumentName + @tab Text + @tab Set the name to be placed at the start of the staff + @tab @code{"Cello I"} +@item fontSize + @tab Real + @tab Increase or decrease the font size + @tab @code{2.4} +@item stanza + @tab Text + @tab Set the text to print before the start of a verse + @tab @code{"2"} +@end multitable + +@noindent +where a Boolean is either True (@code{#t}) or False (@code{#f}), +an Integer is a positive whole number, a Real is a positive +or negative decimal number, and text is enclosed in double +apostrophes. Note the occurrence of hash signs, +(@code{#}), in two different places -- as part of the Boolean +value before the @code{t} or @code{f}, and before @emph{value} +in the @code{\set} statement. So when a Boolean is being +entered you need to code two hash signs, e.g., @code{##t}. + +@cindex properties operating in contexts +@cindex setting properties within contexts + +Before we can set any of these properties we need to know +in which context they operate. Sometimes this is obvious, +but occasionally it can be tricky. If the wrong context +is specified, no error message is produced, but the expected +action will not take place. For example, the +@code{instrumentName} clearly lives in the @code{Staff} context, since +it is the staff that is to be named. +In this example the first staff is labelled, but not the second, +because we omitted the context name. + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + \set Staff.instrumentName = #"Soprano" + c4 c + } + \new Staff \relative c' { + \set instrumentName = #"Alto" % Wrong! + d4 d + } +>> +@end lilypond + +Remember the default context name is @code{Voice}, so the second +@code{\set} command set the property @code{instrumentName} in the +@code{Voice} context to @qq{Alto}, but as LilyPond does not look +for any such property in the @code{Voice} context, no +further action took place. This is not an error, and no error +message is logged in the log file. + +Similarly, if the property name is mis-spelt no error message is +produced, and clearly the expected action cannot be performed. In +fact, you can set any (fictitious) @q{property} using any name you +like in any context that exists by using the @code{\set} command. But +if the name is not known to LilyPond it will not cause any action to +be taken. Some text editors with special support for LilyPond input +files document property names with bullets when you hover them with +the mouse, like JEdit with LilyPondTool, or highlight unknown property +names differently, like ConTEXT. If you do not use an editor with +such features, it is recommended to check the property name in the +Internals Reference: see @rinternals{Tunable context properties}, or +@rinternals{Contexts}. + +The @code{instrumentName} property will take effect only +if it is set in the @code{Staff} context, but +some properties can be set in more than one context. +For example, the property @code{extraNatural} is by +default set to ##t (true) for all staves. +If it is set to ##f (false) in one particular @code{Staff} +context it applies just to the accidentals on that staff. +If it is set to false in the @code{Score} context +it applies to all staves. + +So this turns off extra naturals in one staff: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais4 aes + } + \new Staff \relative c'' { + \set Staff.extraNatural = ##f + ais4 aes + } +>> +@end lilypond + +@noindent +and this turns them off in all staves: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff \relative c'' { + ais4 aes + } + \new Staff \relative c'' { + \set Score.extraNatural = ##f + ais4 aes + } +>> +@end lilypond + +As another example, if @code{clefOctavation} is set in +the @code{Score} context this immediately changes the value +of the octavation in all current staves and sets a new default +value which will be applied to all staves. + +The opposite command, @code{\unset}, effectively removes the +property from the context, which causes most properties to +revert to their default value. Usually @code{\unset} is not +required as a new @code{\set} command will achieve what is +wanted. + +The @code{\set} and @code{\unset} commands can appear anywhere +in the input file and will take effect from the time they are +encountered until the end of the score or until the property is +@code{\set} or @code{\unset} again. Let's try changing the +font size, which affects the size of the note heads (among +other things) several times. The change is from the default +value, not the most recently set value. + +@lilypond[quote,verbatim,ragged-right,relative=1,fragment] +c4 +% make note heads smaller +\set fontSize = #-4 +d e +% make note heads larger +\set fontSize = #2.5 +f g +% return to default size +\unset fontSize +a b +@end lilypond + +We have now seen how to set the values of several different types of +property. Note that integers and numbers are always preceded by a +hash sign, @code{#}, while a true or false value is specified by +@code{##t} and @code{##f}, with two hash signs. A text property +should be enclosed in double quotation signs, as above, although we +shall see later that text can actually be specified in a much more +general way by using the very powerful @code{\markup} command. + +@subsubheading Setting context properties with @code{\with} + +@funindex \with +@funindex with +@cindex context properties, setting with \with + +The default value of context properties may be set at the time the +context is created. Sometimes this is a clearer way of setting a +property value if it is to remain fixed for the duration of +the context. When a context is created with a @code{\new} +command it may be followed immediately by a @code{\with @{ .. @}} +block in which the default property values are set. For example, +if we wish to suppress the printing of extra naturals for the +duration of a staff we would write: + +@example +\new Staff \with @{ extraNatural = ##f @} +@end example + +@noindent +like this: + +@lilypond[quote,verbatim,ragged-right] +<< + \new Staff + \relative c'' { + gis ges aes ais + } + \new Staff \with { extraNatural = ##f } + \relative c'' { + gis ges aes ais + } +>> +@end lilypond + +Or, if the property override is to be applied to all staves +within the score, it may be appended to an explicit +@code{\new Score} command, like this: + +@lilypond[quote,verbatim,ragged-right] +\score { + \new Score \with { extraNatural = ##f } << + \new Staff { + \relative c'' { + gis ges aes ais + } + } + \new Staff { + \relative c'' { + gis ges aes ais + } + } + >> +} +@end lilypond + +Properties set in this way may still be changed dynamically using +@code{\set} and returned to the default value set in the +@code{\with} block with @code{\unset}. + +@cindex fontSize, default and setting + +So if the @code{fontSize} property is set in a @code{\with} clause +it sets the default value of the font size. If it is later changed +with @code{\set}, this new default value may be restored with the +@code{\unset fontSize} command. + +@subsubheading Setting context properties with @code{\context} + +@cindex context properties, setting with \context +@funindex \context +@funindex context + +The values of context properties may be set in @emph{all} contexts +of a particular type, such as all @code{Staff} contexts, with a single +command. The context type is identified by using its +type name, like @code{Staff}, prefixed by a back-slash: @code{\Staff}. +The statement which sets the property value is the same as that in a +@code{\with} block, introduced above. It is placed in a +@code{\context} block within a @code{\layout} block. Each +@code{\context} block will affect all contexts of the type specified +throughout the @code{\score} or @code{\book} block in which the +@code{\layout} block appears. Here is a example to show the format: + +@lilypond[verbatim,quote] +\score { + \new Staff { + \relative c'' { + cis4 e d ces + } + } + \layout { + \context { + \Staff + extraNatural = ##t + } + } +} +@end lilypond + +@noindent +Context properties set in this way may be overridden for particular +instances of contexts by statements in a @code{\with} block, and by +@code{\set} commands embedded in music statements. + + +@seealso +Notation Reference: +@ruser{Changing context default settings}. +@ruser{The set command}. + +Internals Reference: +@rinternals{Contexts}, +@rinternals{Tunable context properties}. + + @node Ábrázolók hozzáadása és eltávolítása @subsection Ábrázolók hozzáadása és eltávolítása @translationof Adding and removing engravers -@translationof Adding and removing engravers -@untranslated - - -@c index engravers, adding -@c index adding engravers -@c index engravers, removing -@c index removing engravers -@subsubheading Egyetlenegy kontextus módosítása -@c ode{\with} command placed immediately after the context creation -@c index ambitus engraver -@c ode{\consists @var{Engraver_name}}, -@c ode{Ambitus_engraver}, which is not normally included in any -@c ode{Staff} context, it calculates the range from all -@subsubheading Azonos típusú kontextusok módosítása -@c ode{\set} command in a @code{\context} block in the +@cindex engravers, adding +@cindex adding engravers +@cindex engravers, removing +@cindex removing engravers + +@funindex \consists +@funindex consists +@funindex \remove +@funindex remove + +We have seen that contexts each contain several engravers, each +of which is responsible for producing a particular part of the +output, like bar lines, staves, note heads, stems, etc. If an +engraver is removed from a context, it can no longer produce its +output. This is a crude way of modifying the output, but it +can sometimes be useful. + +@subsubheading Changing a single context + +To remove an engraver from a single context we use the +@code{\with} command placed immediately after the context creation +command, as in the previous section. + +As an illustration, let's repeat an example from the previous section +with the staff lines removed. Remember that the staff lines are +produced by the @code{Staff_symbol_engraver}. + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \remove Staff_symbol_engraver +} +\relative c' { + c4 + \set fontSize = #-4 % make note heads smaller + d e + \set fontSize = #2.5 % make note heads larger + f g + \unset fontSize % return to default size + a b +} +@end lilypond + +@cindex ambitus engraver + +Engravers can also be added to individual contexts. +The command to do this is + +@code{\consists @var{Engraver_name}}, + +@noindent +placed inside a @code{\with} block. Some vocal scores have an ambitus +placed at the beginning of a staff to indicate the range of notes in +that staff -- see @rglos{ambitus}. The ambitus is produced by the +@code{Ambitus_engraver}, which is not normally included in any +context. If we add it to the @code{Voice} context, it calculates the +range from that voice only: + +@lilypond[quote,verbatim,ragged-right] +\new Staff << + \new Voice \with { + \consists Ambitus_engraver + } + \relative c'' { + \voiceOne + c a b g + } + \new Voice + \relative c' { + \voiceTwo + c e d f + } +>> +@end lilypond + +@noindent +but if we add the ambitus engraver to the +@code{Staff} context, it calculates the range from all +the notes in all the voices on that staff: + +@lilypond[quote,verbatim,ragged-right] +\new Staff \with { + \consists Ambitus_engraver + } + << + \new Voice + \relative c'' { + \voiceOne + c a b g + } + \new Voice + \relative c' { + \voiceTwo + c e d f + } +>> +@end lilypond + +@subsubheading Changing all contexts of the same type + +@funindex \layout +@funindex layout + +The examples above show how to remove or add engravers to +individual contexts. It is also possible to remove or add +engravers to every context of a specific type by placing the +commands in the appropriate context in a @code{\layout} +block. For example, if we wanted to show an ambitus for every +staff in a four-staff score, we could write + +@lilypond[quote,verbatim,ragged-right] +\score { + << + \new Staff << + \relative c'' { + c a b g + } + >> + \new Staff << + \relative c' { + c a b g + } + >> + \new Staff << + \clef "G_8" + \relative c' { + c a b g + } + >> + \new Staff << + \clef "bass" + \relative c { + c a b g + } + >> + >> + \layout { + \context { + \Staff + \consists Ambitus_engraver + } + } +} +@end lilypond + +@noindent +The values of context properties may also be set +for all contexts of a particular type by including the +@code{\set} command in a @code{\context} block in the +same way. + + +@seealso +Notation Reference: @ruser{Modifying context plug-ins}, +@ruser{Changing context default settings}. + + @node A sablonok kibővítése @section A sablonok kibővítése @translationof Extending the templates -@translationof Extending the templates - -@untranslated +You've read the tutorial, you know how to write music, you +understand the fundamental concepts. But how can you +get the staves that you want? Well, you can find lots of +templates (see @ref{Templates}) which may give you a start. +But what if you want something that isn't covered there? Read on. @menu * Szoprán és cselló:: @@ -367,70 +2276,992 @@ @node Szoprán és cselló @subsection Szoprán és cselló @translationof Soprano and cello -@translationof Soprano and cello -@untranslated +@cindex template, modifying +@cindex modifying templates + +Start off with the template that seems closest to what you want to +end up with. Let's say that you want to write something for +soprano and cello. In this case, we would start with the +@q{Notes and lyrics} template (for the soprano part). + +@example +\version @w{"@version{}"} +melody = \relative c' @{ + \clef treble + \key c \major + \time 4/4 + a4 b c d +@} + +text = \lyricmode @{ + Aaa Bee Cee Dee +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \melody + @} + \new Lyrics \lyricsto "one" \text + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +Now we want to add a cello part. Let's look at the @q{Notes only} example: + +@example +\version @w{"@version{}"} +melody = \relative c' @{ + \clef treble + \key c \major + \time 4/4 + a4 b c d +@} + +\score @{ + \new Staff \melody + \layout @{ @} + \midi @{ @} +@} +@end example + +We don't need two @code{\version} commands. We'll need the +@code{melody} section. We don't want two @code{\score} sections +-- if we had two @code{\score}s, we'd get the two parts separately. +We want them together, as a duet. Within the @code{\score} +section, we don't need two @code{\layout} or @code{\midi}. + +If we simply cut and paste the @code{melody} section, we would +end up with two @code{melody} definitions. This would not generate +an error, but the second one would be used for both melodies. +So let's rename them to make them distinct. We'll call the +section for the soprano @code{sopranoMusic} and the section for +the cello @code{celloMusic}. While we're doing this, let's rename +@code{text} to be @code{sopranoLyrics}. Remember to rename both +instances of all these names -- both the initial definition (the +@code{melody = \relative c' @{ } part) and the name's use (in the +@code{\score} section). + +While we're doing this, let's change the cello part's staff -- +celli normally use bass clef. We'll also give the cello some +different notes. + +@example +\version @w{"@version{}"} +sopranoMusic = \relative c' @{ + \clef treble + \key c \major + \time 4/4 + a4 b c d +@} + +sopranoLyrics = \lyricmode @{ + Aaa Bee Cee Dee +@} + +celloMusic = \relative c @{ + \clef bass + \key c \major + \time 4/4 + d4 g fis8 e d4 +@} + +\score @{ + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +This is looking promising, but the cello part won't appear in the +score -- we haven't used it in the @code{\score} section. If we +want the cello part to appear under the soprano part, we need to add + +@example +\new Staff \celloMusic +@end example + +@noindent +underneath the soprano stuff. We also need to add @code{<<} and +@code{>>} around the music -- that tells LilyPond that there's +more than one thing (in this case, two @code{Staves}) happening +at once. The @code{\score} looks like this now: - -@c index template, modifying -@c index modifying templates -@c ode{melody} section. We don't want two @code{\score} sections -@c ode{text} to be @code{sopranoLyrics}. Remember to rename both -@c ode{melody = \relative c' @{ } part) and the name's use (in the -@c ode{\score} section). -@c ode{>>} around the music -- that tells LilyPond that there's @c Indentation in this example is deliberately poor +@example +\score @{ + << + << + \new Voice = "one" @{ + \autoBeamOff + \sopranoMusic + @} + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout @{ @} + \midi @{ @} +@} +@end example + +@noindent +This looks a bit messy; the indentation is messed up now. That is +easily fixed. Here's the complete soprano and cello template. + +@lilypond[quote,verbatim,ragged-right,addversion] +sopranoMusic = \relative c' { + \clef treble + \key c \major + \time 4/4 + a4 b c d +} + +sopranoLyrics = \lyricmode { + Aaa Bee Cee Dee +} + +celloMusic = \relative c { + \clef bass + \key c \major + \time 4/4 + d4 g fis8 e d4 +} + +\score { + << + << + \new Voice = "one" { + \autoBeamOff + \sopranoMusic + } + \new Lyrics \lyricsto "one" \sopranoLyrics + >> + \new Staff \celloMusic + >> + \layout { } + \midi { } +} +@end lilypond + + +@seealso +The starting templates can be found in the @q{Templates} appendix, +see @ref{Single staff}. + + @node Négyszólamú vegyeskar @subsection Négyszólamú vegyeskar @translationof Four-part SATB vocal score -@translationof Four-part SATB vocal score -@untranslated +@cindex template, SATB +@cindex SATB template +Most vocal scores of music written for four-part mixed choir +with orchestral accompaniment such as Mendelssohn's Elijah or +Handel's Messiah have the choral music and words on four +staves, one for each of SATB, with a piano reduction of the +orchestral accompaniment underneath. Here's an example +from Handel's Messiah: -@c index template, SATB -@c index SATB template @c The following should appear as music without code -@c ode{\voiceXXX} commands should be removed. We also need to specify +@lilypond[quote,ragged-right] +global = { \key d \major \time 4/4 } +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy is the lamb that was slain +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis e2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { \altoWords } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { \tenorWords } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + +None of the templates provides this layout exactly. The nearest is +@q{SATB vocal score and automatic piano reduction} -- see @ref{Vocal +ensembles} -- but we need to change the layout and add a piano +accompaniment which is not derived automatically from the vocal parts. +The variables holding the music and words for the vocal parts are +fine, but we shall need to add variables for the piano reduction. + +The order in which the contexts appear in the ChoirStaff of the +template do not correspond with the order in the vocal score shown +above. We need to rearrange them so there are four staves with the +words written directly underneath the notes for each part. All the +voices should be @code{\voiceOne}, which is the default, so the +@code{\voiceXXX} commands should be removed. We also need to specify +the tenor clef for the tenors. The way in which lyrics are specified +in the template has not yet been encountered so we need to use the +method with which we are familiar. We should also add the names of +each staff. + +Doing this gives for our ChoirStaff: + +@example + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff +@end example + +Next we must work out the piano part. This is +easy - we just pull out the piano part from the +@q{Solo piano} template: + +@example +\new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower +>> +@end example + +and add the variable definitions for @code{upper} +and @code{lower}. + +The ChoirStaff and PianoStaff must be combined +using angle brackets as we want them to be +stacked one above the other: + +@example +<< % combine ChoirStaff and PianoStaff one above the other + \new ChoirStaff << + \new Staff = "sopranos" << + \new Voice = "sopranos" @{ + \global + \sopranoMusic + @} + >> + \new Lyrics \lyricsto "sopranos" @{ + \sopranoWords + @} + \new Staff = "altos" << + \new Voice = "altos" @{ + \global + \altoMusic + @} + >> + \new Lyrics \lyricsto "altos" @{ + \altoWords + @} + \new Staff = "tenors" << + \clef "G_8" % tenor clef + \new Voice = "tenors" @{ + \global + \tenorMusic + @} + >> + \new Lyrics \lyricsto "tenors" @{ + \tenorWords + @} + \new Staff = "basses" << + \clef "bass" + \new Voice = "basses" @{ + \global + \bassMusic + @} + >> + \new Lyrics \lyricsto "basses" @{ + \bassWords + @} + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano" + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> +>> +@end example + +Combining all these together and adding the music +for the three bars of the example above gives: + +@lilypond[quote,verbatim,ragged-right,addversion] +global = { + \key d \major + \time 4/4 +} +sopranoMusic = \relative c'' { + \clef "treble" + r4 d2 a4 | d4. d8 a2 | cis4 d cis2 | +} +sopranoWords = \lyricmode { + Wor -- thy is the lamb that was slain +} +altoMusic = \relative a' { + \clef "treble" + r4 a2 a4 | fis4. fis8 a2 | g4 fis fis2 | +} +altoWords = \sopranoWords +tenorMusic = \relative c' { + \clef "G_8" + r4 fis2 e4 | d4. d8 d2 | e4 a, cis2 | +} +tenorWords = \sopranoWords +bassMusic = \relative c' { + \clef "bass" + r4 d2 cis4 | b4. b8 fis2 | e4 d a'2 | +} +bassWords = \sopranoWords +upper = \relative a' { + \clef "treble" + \global + r4 2 4 + 4. 8 2 + 4 2 +} +lower = \relative c, { + \clef "bass" + \global + 4 2 4 + 4. 8 2 + 4 2 +} + +\score { + << % combine ChoirStaff and PianoStaff in parallel + \new ChoirStaff << + \new Staff = "sopranos" << + \set Staff.instrumentName = #"Soprano" + \new Voice = "sopranos" { + \global + \sopranoMusic + } + >> + \new Lyrics \lyricsto "sopranos" { + \sopranoWords + } + \new Staff = "altos" << + \set Staff.instrumentName = #"Alto" + \new Voice = "altos" { + \global + \altoMusic + } + >> + \new Lyrics \lyricsto "altos" { + \altoWords + } + \new Staff = "tenors" << + \set Staff.instrumentName = #"Tenor" + \new Voice = "tenors" { + \global + \tenorMusic + } + >> + \new Lyrics \lyricsto "tenors" { + \tenorWords + } + \new Staff = "basses" << + \set Staff.instrumentName = #"Bass" + \new Voice = "basses" { + \global + \bassMusic + } + >> + \new Lyrics \lyricsto "basses" { + \bassWords + } + >> % end ChoirStaff + + \new PianoStaff << + \set PianoStaff.instrumentName = #"Piano " + \new Staff = "upper" \upper + \new Staff = "lower" \lower + >> + >> +} +@end lilypond + + @node Kotta létrehozása az alapoktól @subsection Kotta létrehozása az alapoktól @translationof Building a score from scratch -@translationof Building a score from scratch -@untranslated +@cindex template, writing your own +@cindex example of writing a score +@cindex writing a score, example +@cindex score, example of writing + +After gaining some facility with writing LilyPond code, you +may find that it is easier to build a score from scratch +rather than modifying one of the templates. You can also +develop your own style this way to suit the sort of music you +like. Let's see how to put together the score for an organ +prelude as an example. + +We begin with a header section. Here go the title, name +of composer, etc, then come any variable definitions, and +finally the score block. Let's start with these in outline +and fill in the details later. + +We'll use the first two bars of Bach's prelude +based on @emph{Jesu, meine Freude} which is written for two +manuals and pedal organ. You can see these two bars of music +at the bottom of this section. The top manual part has two voices, +the lower and pedal organ one each. So we need four +music definitions and one to define the time signature +and key: + +@example +\version @w{"@version{}"} +\header @{ + title = "Jesu, meine Freude" + composer = "J S Bach" +@} +TimeKey = @{ + \time 4/4 + \key c \minor +@} +ManualOneVoiceOneMusic = @{ s1 @} +ManualOneVoiceTwoMusic = @{ s1 @} +ManualTwoMusic = @{ s1 @} +PedalOrganMusic = @{ s1 @} + +\score @{ +@} +@end example + +For now we've just used a spacer note, @code{s1}, +instead of the real music. We'll add that later. + +Next let's see what should go in the score block. +We simply mirror the staff structure we want. +Organ music is usually written on three staves, +one for each manual and one for the pedals. The +manual staves should be bracketed together, so we +need to use a PianoStaff for them. The first +manual part needs two voices and the second manual +part just one. + +@example + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context +@end example + +Next we need to add a staff for the pedal organ. +This goes underneath the PianoStaff, but it must +be simultaneous with it, so we need angle brackets +around the two. Missing these out would generate +an error in the log file. It's a common mistake +which you'll make sooner or later! Try copying +the final example at the end of this section, +remove these angle brackets, and compile it to +see what errors it generates. + +@example +<< % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \new Voice @{ + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \new Voice @{ + \PedalOrganMusic + @} + >> +>> +@end example + +It is not necessary to use the simultaneous construct +@code{<< .. >>} for the manual two staff and the pedal organ staff, +since they contain only one music expression, but it does no harm, +and always using angle brackets after @code{\new Staff} is a good +habit to cultivate in case there are multiple voices. The opposite +is true for Voices: these should habitually be followed by braces +@code{@{ .. @}} in case your music is coded in several variables +which need to run consecutively. + +Let's add this structure to the score block, and adjust the indenting. +We also add the appropriate clefs, ensure stems, ties and slurs in +each voice on the upper staff point to the right direction with +@code{\voiceOne} and @code{\voiceTwo}, and enter the time signature +and key to each staff using our predefined variable, @code{\TimeKey}. + +@example +\score @{ + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \TimeKey % set time signature and key + \clef "treble" + \new Voice @{ + \voiceOne + \ManualOneVoiceOneMusic + @} + \new Voice @{ + \voiceTwo + \ManualOneVoiceTwoMusic + @} + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \TimeKey + \clef "bass" + \new Voice @{ + \ManualTwoMusic + @} + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \TimeKey + \clef "bass" + \new Voice @{ + \PedalOrganMusic + @} + >> % end PedalOrgan Staff + >> +@} % end Score context +@end example + +That completes the structure. Any three-staff organ music +will have a similar structure, although the number of voices +may vary. All that remains now +is to add the music, and combine all the parts together. + +@lilypond[quote,verbatim,ragged-right,addversion] +\header { + title = "Jesu, meine Freude" + composer = "J S Bach" +} +TimeKey = { + \time 4/4 + \key c \minor +} +ManualOneVoiceOneMusic = \relative g' { + g4 g f ees + d2 c2 +} +ManualOneVoiceTwoMusic = \relative c' { + ees16 d ees8~ ees16 f ees d c8 d~ d c~ + c c4 b8 c8. g16 c b c d +} +ManualTwoMusic = \relative c' { + c16 b c8~ c16 b c g a8 g~ g16 g aes ees + f ees f d g aes g f ees d e8~ ees16 f ees d +} +PedalOrganMusic = \relative c { + r8 c16 d ees d ees8~ ees16 a, b g c b c8 + r16 g ees f g f g8 c,2 +} + +\score { + << % PianoStaff and Pedal Staff must be simultaneous + \new PianoStaff << + \new Staff = "ManualOne" << + \TimeKey % set time signature and key + \clef "treble" + \new Voice { + \voiceOne + \ManualOneVoiceOneMusic + } + \new Voice { + \voiceTwo + \ManualOneVoiceTwoMusic + } + >> % end ManualOne Staff context + \new Staff = "ManualTwo" << + \TimeKey + \clef "bass" + \new Voice { + \ManualTwoMusic + } + >> % end ManualTwo Staff context + >> % end PianoStaff context + \new Staff = "PedalOrgan" << + \TimeKey + \clef "bass" + \new Voice { + \PedalOrganMusic + } + >> % end PedalOrgan Staff context + >> +} % end Score context +@end lilypond -@c index template, writing your own -@c index example of writing a score -@c index writing a score, example -@c index score, example of writing -@c ode{<< .. >>} for the manual two staff and the pedal organ staff, -@c ode{@{ .. @}} in case your music is coded in several variables -@c ode{\voiceOne} and @code{\voiceTwo}, and enter the time signature @node Kevesebb gépelés változókkal és függvényekkel @subsection Kevesebb gépelés változókkal és függvényekkel @translationof Saving typing with variables and functions -@translationof Saving typing with variables and functions - -@untranslated +@cindex variables +@cindex variables + +By this point, you've seen this kind of thing: + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } +\score { + { + \hornNotes + } +} +@end lilypond + +You may even realize that this could be useful in minimalist music: + +@lilypond[quote,verbatim,ragged-right] +fragmentA = \relative c'' { a4 a8. b16 } +fragmentB = \relative c'' { a8. gis16 ees4 } +violin = \new Staff { + \fragmentA + \fragmentA + \fragmentB + \fragmentA +} +\score { + { + \violin + } +} +@end lilypond + +However, you can also use these variables (also known as +macros, or user-defined commands) for tweaks: -@c index variables -@c index variables @c TODO Avoid padtext - not needed with skylining +@lilypond[quote,verbatim,ragged-right] +dolce = \markup { \italic \bold dolce } +padText = { \once \override TextScript #'padding = #5.0 } +fthenp=_\markup { \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b + \padText + c4.^"hi there!" d8 e' f g d + c,4.\fthenp b8 c4 c-. + } +} +\score { + { + \violin + } +\layout { ragged-right=##t } +} +@end lilypond + +These variables are obviously useful for saving +typing. But they're worth considering even if you +only use them once -- they reduce complexity. Let's +look at the previous example without any +variables. It's a lot harder to read, especially +the last line. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup @{ \italic \bold dolce @} b8 a8 g a b + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d + c,4.\markup @{ \dynamic f \italic \small @{ 2nd @} + \hspace #0.1 \dynamic p @} + b8 c4 c-. + @} +@} +@end example + @c TODO Replace the following with a better example -td @c Skylining handles this correctly without padText -@c ode{padtext=}). -@node Partitúra és szólamkották -@subsection Partitúra és szólamkották -@translationof Scores and parts -@translationof Scores and parts -@untranslated +So far we've seen static substitution -- when LilyPond +sees @code{\padText}, it replaces it with the stuff that +we've defined it to be (ie the stuff to the right of +@code{padtext=}). + +LilyPond can handle non-static substitution, too (you +can think of these as functions). + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function (parser location padding) (number?) + #{ + \once \override TextScript #'padding = #$padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +Using variables is also a good way to reduce work if the +LilyPond input syntax changes (see +@rprogram{Updating files with convert-ly}). If +you have a single definition (such as @code{\dolce}) for all your +input files (see @ref{Style sheets}), then if the syntax changes, you +only need to update your single @code{\dolce} definition, +instead of making changes throughout every @code{.ly} file. -@c ode{\transpose f@tie{}c'} indicates that the argument, being -@c ode{\hornNotes}, should be transposed by a fifth upwards. Sounding -@c ode{f} is denoted by notated @code{c'}, which corresponds with the -@c ode{Score} context to true (@code{##t}). Prepending the rest and +@node Partitúra és szólamkották +@subsection Partitúra és szólamkották +@translationof Scores and parts +In orchestral music, all notes are printed twice. Once in a part for +the musicians, and once in a full score for the conductor. Variables can +be used to avoid double work. The music is entered once, and stored in +a variable. The contents of that variable is then used to generate +both the part and the full score. + +It is convenient to define the notes in a special file. For example, +suppose that the file @file{horn-music.ly} contains the following part +of a horn/@/bassoon duo + +@example +hornNotes = \relative c @{ + \time 2/4 + r4 f8 a cis4 f e d +@} +@end example + +@noindent +Then, an individual part is made by putting the following in a file + +@example +\include "horn-music.ly" +\header @{ + instrument = "Horn in F" +@} + +@{ + \transpose f c' \hornNotes +@} +@end example + +The line + +@example +\include "horn-music.ly" +@end example + +@noindent +substitutes the contents of @file{horn-music.ly} at this position in +the file, so @code{hornNotes} is defined afterwards. The command +@code{\transpose f@tie{}c'} indicates that the argument, being +@code{\hornNotes}, should be transposed by a fifth upwards. Sounding +@code{f} is denoted by notated @code{c'}, which corresponds with the +tuning of a normal French Horn in@tie{}F. The transposition can be seen +in the following output + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a cis4 f e d +} +@end lilypond + +In ensemble pieces, one of the voices often does not play for many +measures. This is denoted by a special rest, the multi-measure +rest. It is entered with a capital @code{R} followed by a duration +(@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note, +etc.). By multiplying the +duration, longer rests can be constructed. For example, this rest +takes 3@tie{}measures in 2/4 time + +@example +R2*3 +@end example + +When printing the part, multi-rests +must be condensed. This is done by setting a run-time variable + +@example +\set Score.skipBars = ##t +@end example + +@noindent +This command sets the property @code{skipBars} in the +@code{Score} context to true (@code{##t}). Prepending the rest and +this option to the music above, leads to the following result + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 + r4 f8 a cis4 f e d +} +@end lilypond + + +The score is made by combining all of the music together. Assuming +that the other voice is in @code{bassoonNotes} in the file +@file{bassoon-music.ly}, a score is made with + +@example +\include "bassoon-music.ly" +\include "horn-music.ly" + +<< + \new Staff \hornNotes + \new Staff \bassoonNotes +>> +@end example + +@noindent +leading to + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \time 2/4 + R2*3 + r4 f8 a cis4 f e d + } + \new Staff { + \clef bass + r4 d,8 f | gis4 c | b bes | + a8 e f4 | g d | gis f | + } +>> +@end lilypond \ No newline at end of file -- 2.39.2