@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*- @ignore Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes. @end ignore @c \version "2.13.42" @c Translators: Pavel Fric @node Základní pojmy @chapter Základní pojmy @translationof Fundamental concepts Poté co ve cvičení bylo ukázáno, jak lze z jednoduchého textového souboru vytvořit překrásně formátované hudební noty, jsou v této kapitole představeny koncepty a techniky, jak se dají tvořit i složitější notové zápisy. @menu * Jak pracují vstupní soubory LilyPondu:: * Hlasy obsahují noty:: * Souvislosti a rytci:: * Rozšíření příkladů:: @end menu @node Jak pracují vstupní soubory LilyPondu @section Jak pracují vstupní soubory LilyPondu @translationof How LilyPond input files work Vstupní formát pro LilyPond měl poměrně volnou podobu, takže zkušení uživatele tu mají hodně volnosti v ovlivnění stavby jejich zdrojových souborů. Pro nováčky ale tato ohebnost může být zprvu matoucí. V této kapitole by proto z toho důvodu měla být představena část z těchto staveb. Mnohé ale bude pro zjednodušení vynecháno. Na úplný popis vstupního formátu se podívejte na @ruser{Stavba souboru}. Většinu příkladů v této příručce představují malé úryvky, jako je tento: @example c4 a b c @end example Jak je snad známo, nedá se takový úryvek v této podobě přeložit. Tyto příklady jsou tedy jen zkrácenou formou skutečných příkladů. Přinejmenším se musí dodatečně uzavřít ve složených závorkách. @example @{ c4 a b c @} @end example Většina příkladů rovněž používá příkaz @code{\relative c'}. Ten pro překlad souborů není nezbytný, ale ve většině případů tak notová sazba vypadá zřídka, když se tento příkaz vynechá. @lilypond[quote,fragment,ragged-right,verbatim] \relative c'' { c4 a b c } @end lilypond Úplné vymezení vstupního formátu se nachází v kapitole @ruser{Stavba souboru}. @menu * Uvedení do stavby souboru v LilyPondu:: * Notový zápis je jedním (jediným) složeným hudebním výrazem:: * Naskládání hudebních výrazů do sebe:: * O ne-naskládatelnosti závorek a ligatur:: @end menu @node Uvedení do stavby souboru v LilyPondu @subsection Uvedení do stavby souboru v LilyPondu @translationof Introduction to the LilyPond file structure @cindex Vstupní formát @cindex Stavba souboru @cindex Stavba, soubor Základní příklad vstupního souboru pro LilyPond zní: @example \version @w{"@version{}"} \header @{ @} \score @{ @var{...složený hudební výraz...} % Celé noty přijdou sem! \layout @{ @} \midi @{ @} @} @end example @noindent Na základě pružnosti LilyPond je mnoho obměn tohoto schématu, ale tento příklad slouží jako jednoduchý výchozí bod. @funindex \book @funindex \score @funindex book @funindex score @cindex book @cindex score Až dosud ještě žádný z příkladů příkaz @code{\score@{@}} nepoužil, neboť Lilypond takové dodatečné příkazy automaticky vkládá v případě potřeby, když má vstupní soubor jednoduchou stavbu. Podívejme se na jeden takový jednoduchý příklad: @example \relative c'' @{ c4 a d c @} @end example @noindent Na pozadí k tomu přichází ještě několik rovin: LilyPondovský kód v hořejší podobě je ve skutečnosti zestručněním. I když by se takové soubory daly napsat a také správně zapsat, znamená úplný kód, který je zde míněn, vlastně: @example \book @{ \score @{ \new Staff @{ \new Voice @{ \relative c'' @{ c4 a b c @} @} @} \layout @{ @} @} @} @end example @noindent Jinými slovy: Když vstupní soubor obsahuje nějaký jednoduchý výraz, LilyPond bude soubor vykládat tak, jakoby byl onen výraz zadán uvnitř výše ukázaných příkazů. Tato nutná stavba je vytvořena automaticky v paměti při vyvolání LilyPondu, aniž by si uživatel něčeho z toho všiml. @cindex Skrytá prostředí @cindex Prostředí, skrytá @strong{Slovo varování je však vysloveno!} Mnohé z příkladů v dokumentaci k LilyPondu vědomě vynechávají příklady @code{\new Staff} a @code{\new Voice} k vytvoření notové osnovy a hlasu (obojí je v LilyPondu tak zvané prostředí), aby byla LilyPondem v paměti vytvořena skrytě. Pro jednoduché dokumenty to obecně pracuje velmi dobře, u složitějších notových zápisů z toho ale mohou povstat neočekávané výsledky, částečně dokonce neočekávané prázdné notové osnovy. Jak otevřeně vytvářet odpovídající prostředí v takovém případě, se podívejte na @ref{Souvislosti a rytci,,souvislosti a rytce}. @warning{Když se zadává více jak dvojice notových řádků, doporučuje se vytvořit notové osnovy a hlasy vždy otevřeně pomocí @code{\new Staff} a @code{\new Voice}.} V této chvíli se ale chceme vrátit k našemu prvnímu příkladu a blíže se podívat jen na příkaz @code{\score}. Notový zápis (@code{\score}) musí vždy začínat nějakým hudebním výrazem. To je koneckonců každá hudba, počínaje jednotlivou notou až po rostoucí notový zápis s mnoha notovými osnovami (zde označeno pomocí @code{GrandStaff}): @example @{ \new GrandStaff << @var{...zde celý notový zápis...} >> @} @end example @noindent Protože se vše nachází uvnitř složených závorek @code{@{ ... @}}, zachází se s tím jako s jediným hudebním výrazem. Jak již bylo řečeno předtím, může blok @code{\score} obsahovat i jiné věci, jako například @example \score @{ @{ c'4 a b c' @} \layout @{ @} \midi @{ @} \header @{ @} @} @end example @funindex \header @funindex \layout @funindex \midi @funindex header @funindex layout @funindex midi @cindex header @cindex midi @cindex Layout @cindex Hlavička @noindent Jak je vidět, jsou ty tři příkazy @code{\header}, @code{\layout} a @code{\midi} zvláštní povahy: V protikladu k mnoha jiným příkazům, které také začínají zpětným lomítkem @code{\}, @emph{nejsou} hudebním výrazem a také nejsou částí nějakého hudebního výrazu. Z toho důvodu mohou být umístěny jak dovnitř bloku @code{\score} tak mimo něj. Ve skutečnosti jsou tyto příkazy většinou umisťovány mimo blok @code{\score}, například se příkaz @code{\header} nachází velice často nad prostředím @code{\score}, jak ukazuje příklad na začátku tohoto oddílu. Pracuje to právě tak dobře. Dvěma dosud neviděnými příkazy jsou @code{\layout @{ @}} a @code{\midi @{@}}. Když se objeví v nějakém souboru, vede to k tomu, že Lilypond vytvoří tisknutelný soubor PDF popřípadě soubor MIDI. Přesněji jsou popsány v uživatelské příručce - doporučení k notovému zápisu -- @ruser{Rozvržení notového zápisu} a @ruser{Vytváření souborů MIDI}. @cindex Notové zápisy, více @cindex Prostředí book, skryté @cindex Skryté prostředí book @funindex \book @funindex book Váš LilyPondovský kód může obsahovat více bloků @code{\score}. Každý z nich je vykládán jako samostatný notový zápis, ovšem všechny jsou umístěny v tomtéž výstupním souboru. Příkaz @code{\book} není otevřeně nezbytný -- je vytvořen skrytě. Když však má být vytvořen pro každý blok @code{\score} v souboru @file{.ly} vlastní výstupní soubor, potom se musí každý z těchto bloků zapsat do vlastního bloku @code{\book}: Každý blok @code{\book} pak vytváří vlastní výstupní soubor. Shrnutí: Každý blok @code{\book} vytváří vlastní výstupní soubor (např. soubor PDF). Pokud jste otevřeně žádný takový blok nezadali, LilyPond celý obsah souboru zapíše dovnitř jednoho jediného skrytého bloku @code{\book}. Každý blok @code{\score} popiseje jeden samostatný hudební kus uvnitř bloku @code{\book}. @cindex Prostředí Layout, umístění @cindex Umístění prostředí layout Každý blok @code{\layout} ovlivňuje @code{\score} nebo @code{\book}, ve kterém se vyskytuje. Tak působí například blok @code{\layout} uvnitř bloku @code{\score} jen na tento jeden blok a celý jeho obsah, blok @code{\layout} mimo blok @code{\score} (a proto uvnitř skrytě vytvořeného otevřeně zadaného bloku @code{\book}) však na všechny bloky @code{\score} uvnitř tohoto bloku @code{\book}. Více podrobností se nachází v části @ruser{Více notových zápisů v knize}. @cindex Proměnné @cindex Identifikátor Dobrou možností pro zjednodušení jsou vlastní vymezené proměnné, jak je to také ukázáno v @ref{Pořádání kousků pomocí proměnných}. Všechny předlohy používají tuto možnost: @example melodie = \relative c' @{ c4 a b c @} \score @{ @{ \melodie @} @} @end example Když LilyPond zpracovává tento soubor, bere obsah z @code{melodie} (vše po rovnítku) a vkládá to, kdykoli vidí @code{\melodie}. Názvy jsou volně volitelné, proměnná se právě tak dobře může jmenovat @code{melodie}, @code{GLOBAL}, @code{praváRukaKlavír}, nebo @code{cokoliDalšího}. Jako název proměnné se dá použít skoro jakýkoli oblíbený název, musí se v něm ovšem vyskytovat jen písmena (takže žádná čísla, podtržítka, zvláštní znaky, atd.) a nesmí znít jako příkaz pro LilyPond. Pro více informací se podívejte na @ref{Úspora psaní na stroji pomocí proměnných a funkcí,,úsporu psaní na stroji pomocí proměnných a funkcí}. Přesně jsou tato omezení popsána v části @ruser{Stavba souboru}. @seealso Úplné vymezení vstupního souboru se nachází v @ruser{Stavba souboru}. @node Notový zápis je jedním (jediným) složeným hudebním výrazem @subsection Notový zápis je jedním (jediným) složeným hudebním výrazem @translationof Score is a (single) compound musical expression @funindex \score @funindex score @cindex score @cindex Notový zápis @cindex Hudební kus @cindex Složený hudební výraz @cindex Hudební výraz, složený V předchozí kapitole, @ref{Uvedení do stavby souboru v LilyPondu}, byla popsána obecná stavba jednoho LilyPondovského zdrojového souboru. Ale zjevně jsme vypustili nejdůležitější otázku, totiž jak se zjistí, co se má napsat po @code{\score}. Ve skutečnosti to ale není vůbec žádným tajemstvím. Tento řádek je odpovědí: @quotation @emph{Notový zápis začíná vždy @code{\score}, který je následován jedním hudebním výrazem.} @end quotation @noindent Možná byste si měl ještě jednou zběžně přečíst, abyste pochopil, co jsou to hudební výrazy, @ref{Vysvětlení hudebních výrazů,,vysvětlení hudebních výrazů}. V této kapitole bylo ukázáno, jak se velké hudební výrazy skládají z malých částí. Noty mohou být spojeny s akordy atd. Nyní ale jdeme v jiném směru a pozorujeme, jak se dá rozložit velký hudební výraz. Kvůli zjednodušení v našem příkladu použijeme jen jednoho zpěváka a klavír. Nepotřebujeme žádnou skupinu osnov (@code{StaffGroup}), která jednoduše způsobeje jen to, že osnovy jsou spojeny závorkami, seskupuje je; ty tedy budou odstraněny. @emph{Potřebujeme} ale osnovy pro zpěváka a klavír. @example \score @{ @{ << \new Staff = "Zpěvák" << >> \new PianoStaff = "Klavír" << >> >> @} \layout @{ @} @} @end example Zde byly osnovy pojmenovány: @qq{Zpěvák} a @qq{Klavír}. To v tomto případě není přímo nutné, ale je dobré zvyknout si na tento způsob psaní, aby se hned poznalo, o kterou osnovu se jedná. K zapamatování: @code{<<} a @code{>>} jsou noty vysázeny zároveň. To způsobuje, že se hlasová část a klavírní osnova objevují v notovém zápisu nad sebou. Konstrukce @code{<< ... >>} pro zpěvákovu osnovu v příkladu výše není nutná, protože zde se mají vkládat noty jen jednoho hlasu, ale @code{<< ... >>} namísto závorek jsou nezbytné, hned jak se má vkládat více než jeden hlas, tedy dva a více současných výrazů, nebo jeden notový hlas a text písně. V našem případě se má zapsat jeden hlas s textem písně, takže jsou potřeba špičaté závorky. Noty přidáme teprve později, pro teď tedy přidáme nějaké noty a text. Pokud si nevzpomínáte, jak se text písně zapisuje, přečtěte si ještě jednou o @code{\addlyrics} v @ref{Zápis jednoduchých písní,,zápisu jednoduchých písní}. @lilypond[verbatim,quote,ragged-right] \score { << \new Staff = "singer" << \new Voice = "vocal" { c'1 } \addlyrics { And } >> \new PianoStaff = "piano" << \new Staff = "upper" { c'1 } \new Staff = "lower" { c'1 } >> >> \layout { } } @end lilypond Nyní máme mnohem více podrobností. Máme osnovu (angl. staff) pro jednoho zpěváka, ve které se zase nachází jeden hlas (angl. voice). @code{Voice} znamená pro LilyPond hlas (jak zazpívaný tak zahraný; prostě soubor not, nikoli nutně zpívaných zpěvákem -- například housle hrají jeden hlas) a případně dodatečný text. Dodatečně se zapíší dvě notové osnovy pro klavír příkazem @code{\new PianoStaff}. @code{PianoStaff} označuje prostředí klavíru (procházející taktové čáry a složené závorky na začátku), v němž se potom opět zřizují dvě vlastní osnovy ("nahoře" pro pravou ruku a "dole" pro levou), i když spodní osnova musí ještě dostat basový klíč. Nyní bychom do tohoto prostředí mohli začít vkládat noty. Uvnitř složených závorek vedle @code{\new Voice = "Zpěvní hlas"} bychom mohli zapisovat @example \relative c'' @{ r4 d8\noBeam g, c4 r @} @end example @noindent Ale když se soubor píše takto přímo, začne být část @code{\score} velmi dlouhá a je dosti obtížné porozumět tomu, jak vše souvisí. Z toho důvodu se nabízí použití identifikátorů (nebo jinak také proměnných). Byly vysvětleny na začátku předchozí části, jak si zajisté vzpomínáte? Abychom zajistili, že obsah proměnné @code{text} je vykládán jako text písně, interpretiert wird, uvedeme jej @code{\lyricmode}. Tak jako @code{\addlyrics}, je tímto vstupní režim přepnut na text písně. Bez tohoto příkazu by se LilyPond pokoušel vykládat obsah proměnné jako noty a přitom by docházelo k vytváření množství chyb. (Kromě toho je dostupných ještě několik dalších zadávacích režimů, podívejte se na @ruser{Vstupní režimy}.) Takže nyní máme, když přidáme několik not a basový klíč pro levou ruku, následující příklad: @lilypond[verbatim,quote,ragged-right] melody = \relative c'' { r4 d8\noBeam g, c4 r } text = \lyricmode { And God said, } upper = \relative c'' { 2~ } lower = \relative c { b2 e } \score { << \new Staff = "singer" << \new Voice = "vocal" { \melody } \addlyrics { \text } >> \new PianoStaff = "piano" << \new Staff = "upper" { \upper } \new Staff = "lower" { \clef "bass" \lower } >> >> \layout { } } @end lilypond Při zapisování (nebo při čtení) prostředí @code{\score} by se mělo postupovat pomalu a pečlivě. Nejlepší je začít s největšími útvary, a pak vymezit v nich obsažené menší útvary. Také pomáhá velice dbát na přesné odsazení, aby každý řádek, jenž přísluší k téže úrovni, skutečně vodorovně začínal na tom samém místě. @seealso Doporučení k notovému zápisu: @ruser{Stavba notového zápisu}. @node Naskládání hudebních výrazů do sebe @subsection Naskládání hudebních výrazů do sebe @translationof Nesting music expressions @cindex Notové osnovy, dočasné @cindex Ossia @cindex Dočasné notové osnovy Notové osnovy (prostředí @q{Staff}) není bezpodmínečně potřeba vytvořit hned na začátku -- mohou být uvedeny i kdykoli později. To je obzvláště užitečné při vytváření oddílů @rglosnamed{ossia,Ossias}. Zde následuje krátký příklad toho, jak je možné vytvořit dodatečnou dočasnou notovou osnovu jen pro dobu trvání tří not: @lilypond[verbatim,quote,ragged-right] \new Staff { \relative g' { r4 g8 g c4 c8 d | e4 r8 << { f8 c c } \new Staff { f8 f c } >> r4 | } } @end lilypond @noindent Jak je vidět, velikost notového klíče je tatáž, jaká se vyskytuje i při změně klíče -- o něco menší, než jakou má klíč na začátku notové osnovy. Toto je obvyklé u notových klíčů, které jsou zapsány uvnitř notové osnovy. @cindex Notová osnova, umístění @cindex Umístění notové osnovy Oddíl ossia může být zapsán i mimo hlavní notovou osnovu: @lilypond[verbatim,quote,ragged-right] \new Staff = "main" { \relative g' { r4 g8 g c4 c8 d | e4 r8 << { f8 c c } \new Staff \with { alignAboveContext = #"main" } { f8 f c } >> r4 | } } @end lilypond Tento příklad používá příkaz @code{\with}, který bude později gvysvětlen ještě přesněji. Jím lze měnit výchozí chování jedné notové osnovy: Zde se jednoduše říká, že nová notová osnova se má umístit nad již jsoucí osnovu s názvem @qq{main} namísto výchozího umístění, které je pod ní. @seealso Ossia jsou často tisknuta bez notového klíče a bez taktového označení, většinou také o něco menší, než jiné osnovy. Toto je přirozeně možné i v LilyPondu, vyžaduje to ale příkazy, jež dosud ještě nebyly představeny. Podívejte se na @ref{Velikost předmětů,,velikosti předmětů} a @ruser{Osnovy ossia}. @node O ne-naskládatelnosti závorek a ligatur @subsection O ne-naskládatelnosti závorek a ligatur @translationof On the un-nestedness of brackets and ties @cindex Závorky, naskládání @cindex Naskládání závorek @cindex Typy závorek Již jste při psaní vstupního souboru pro LilyPond poznali četné různé druhy závorek a staveb na způsob závorek. Tyto se řídí různými pravidly, která mohou zpočátku působit matoucím dojmem. Předtím než budou představena přesná pravidla, pojďme si tyto různé druhy závorek a staveb na způsob závorek krátce projít znovu: @c attempt to force this onto a new page @need 50 @multitable @columnfractions .3 .7 @headitem Druh závorek @tab Funkce @item @code{@{ .. @}} @tab Uzavírá postupnou část hudby @item @code{< .. >} @tab Uzavírá noty jednoho akkordu @item @code{<< .. >>} @tab Uzavírá souběžné hudební výrazy @item @code{( .. )} @tab Označuje začátek a konec obloučku @item @code{\( .. \)} @tab Označuje začátek a konec frázovacího obloučku @item @code{[ .. ]} @tab Označuje začátek a konec ručně vytvořeného trámce @end multitable Dodatečně by snad měly být ještě dále zmíněny některé další konstrukce, které noty ať už jakkoli spojují: ligatury (označované vlnovkou @code{~}), trioly (psané jako @code{\times x/y @{..@}}) und ozdoby (poznamenávané jako @code{\grace@{..@}}). Mimo LilyPond vyžaduje běžné používání závorek, aby byly jejich odpovídající druhy správně seskládány, jako je tomu například tady @code{<< [ @{ ( .. ) @} ] >>}. Uzavírající závorky přitom přicházejí v obráceném pořadí k otevírajícím závorkám. Toto je také v LilyPondu @strong{nutnost} pro ony tři druhy závorek, jež byly v hořejší tabulce popsány slovem @q{uzavírá} -- musí být správně vkládány. Nicméně zbývající stavby na způsob závorek (v tabulce popsány slovem @q{označuje}), ligatury a trioly bezpodmínečně s jinými závorkami nebo stavbami na způsob závorek seskládány být čistě @strong{nemusí}. Vlastně také ani nejsou nějakými závorkami v tom smyslu, že by něco svíraly, nýbrž mnohem více jsou ukazateli, na kterém místě určitý hudební předmět začíná nebo končí. Tak tedy může například takový frázovací oblouček začínat před ručně vloženým trámcem, a přece končit již před jeho koncem. Toto sice může z hudebního pohledu dávat málo smyslu, ale v LilyPondu je možné i toto: @lilypond[quote,verbatim,ragged-right,relative=2] { g8\( a b[ c b\) a] g4 } @end lilypond Ve všeobecnosti se dá říct, že mohou být různé druhy závorek, staveb na způsob závorek, legatových obloučků, triol a ozdob libovolně dávány dohromady. Následující příklad ukazuje trámec, který sahá až k triole (řádek 1), ligaturu, která rovněž dosahuje k triole (řádek 2), trámec a ligaturu sahající k triole, oblouček, který běží přes dvě trioly, jakož i frázovací oblouček, který začíná u trioly (řádky 3 a 4). @lilypond[quote,verbatim,ragged-right] { r16[ g \times 2/3 { r16 e'8] } g16( a \times 2/3 { b16 d) e' } g8[( a \times 2/3 { b8 d') e'~] } | \times 4/5 { e'32\( a b d' e' } a'4.\) } @end lilypond @node Hlasy obsahují noty @section Hlasy obsahují noty @translationof Voices contain music Zpěváci potřebují ke zpívání hlasy, a LilyPond je potřebuje také: ve skutečnosti jsou všechny noty pro všechny nástroje zapsány v v notovém zápisu uvnitř hlasů. Hlas je v LilyPondu tím nejzákladnějším pojmem. @menu * Slyším hlasy:: * Přímé začátky hlasů:: * Hlasy a zpěvy:: @end menu @node Slyším hlasy @subsection Slyším hlasy @translationof I'm hearing Voices @cindex Vícehlasost @cindex Úrovně @cindex Vícehlasy @cindex Hlasy, více @cindex Voice context @cindex context, Voice @cindex Prostředí hlasu @cindex Prostředí, hlas @cindex Současné noty @cindex Hlasy proti akordům @cindex Akordy proti hlasům @cindex Noty současně Nejnižší, nejzákladnější a nejvnitřnější úrovně v LilyPondovském notovém zápisu jsou nazvány @qq{Voice context} (prostředí hlasu) nebo také jen @qq{Voice} (hlas). Hlasy jsou v jiných notačních programech někdy označovány jako @qq{layer} (úroveň). Skutečně je úroveň hlasu tou jedinou, která opravdu může obsahovat noty. Pokud není otevřeně vytvořeno žádné prostředí hlasu, je jedno vytvořeno automaticky, jak to bylo ukázáno na začátku této kapitoly. Některé nástroje, jako je tomu například u hoboje, mohou zároveň zahrát jen jednu notu. Noty pro takové nástroje jsou jednohlasé a potřebují jen jeden hlas. Nástroje, které současně dokáží zahrát více not, jako klavír, naproti tomu často potřebují více hlasů, aby mohly popsat různé současně zaznívající noty s často rozdílnými rytmy. Jeden hlas přirozeně může v jednom akordu obsahovat více not -- takže kdy přesně je potřeba více hlasů? Podívejme se nejprve na tento příklad se čtyřmi akordy: @lilypond[quote,verbatim,ragged-right,relative=1] \key g \major 4 @end lilypond Das kann ausgedrückt werden, indem man die einfachen spitzen Klammern @code{< ... >} benützt, um Akkorde anzuzeigen. Hierfür braucht man nur eine Stimme. Aber gesetzt der Fall das Fis sollte eigentlich eine Achtelnote sein, gefolgt von einer Achtelnote G (als Durchgangsnote hin zum A)? Hier haben wir also zwei Noten, die zur gleichen Zeit beginnen, aber unterschiedliche Dauern haben: die Viertelnote D und die Achtelnote Fis. Wie können sie notiert werden? Als Akkord kann man sie nicht schreiben, weil alle Noten in einem Akkord die gleiche Länge besitzen müssen. Sie können auch nicht als aufeinanderfolgende Noten geschrieben werden, denn sie beginnen ja zur selben Zeit. In diesem Fall also brauchen wir zwei Stimmen. Wie aber wird das in der LilyPond-Syntax ausgedrückt? @funindex << \\ >> @funindex \\ Die einfachste Art, Fragmente mit mehr als einer Stimme auf einem System zu notieren, ist, die Stimmen nacheinander (jeweils mit den Klammern @code{@{ ... @}}) zu schreiben und dann mit den spitzen Klammern (@code{<<...>>}) simultan zu kombinieren. Die beiden Fragmente müssen zusätzlich noch mit zwei Backslash-Zeichen (@code{\\}) voneinander getrennt werden, damit sie als zwei unterschiedliche Stimmen erkannt werden. Ohne diese Trenner würden sie als eine einzige Stimme notiert werden. Diese Technik ist besonders dann angebracht, wenn es sich bei den Noten um hauptsächlich homophone Musik handelt, in der hier und da polyphone Stellen vorkommen. So sieht es aus, wenn die Akkorde in zwei Stimmen aufgeteilt werden und zur Durchgangsnote noch ein Bogen hinzugefügt wird: @lilypond[quote,verbatim,ragged-right,relative=2] \key g \major % Voice "1" Voice "2" << { g4 fis8( g) a4 g } \\ { d4 d d d } >> @end lilypond Beachte, dass die Hälse der zweiten Stimme nun nach unten zeigen. Hier ein anderes Beispiel: @lilypond[quote,verbatim,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 Es ist nicht notwendig, für jeden Takt eine eigene @code{<< \\ >>}-Konstruktion zu benutzen. Bei Musik mit nur wenigen Noten pro Takt kann es die Quelldatei besser lesbar machen, aber wenn in einem Takt viele Noten vorkommen, kann man die gesamten Stimmen separat schreiben, wie hier: @lilypond[quote,verbatim,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 Dieses Beispiel hat nur zwei Stimmen, aber die gleiche Konstruktion kann angewendet werden, wenn man drei oder mehr Stimmen hat, indem man weitere Backslash-Trenner hinzufügt. Die Stimmenkontexte tragen die Namen @code{"1"}, @code{"2"} usw. In jedem dieser Kontexte wird die vertikale Ausrichtung von Hälsen, Bögen, Dynamik-Zeichen usw. entsprechend ausgerichtet. @lilypond[quote,verbatim] \new Staff \relative c' { % Main voice c16 d e f % Voice "1" Voice "2" Voice "3" << { g4 f e } \\ { r8 e4 d c8~ } >> | << { d2 e } \\ { c8 b16 a b8 g~ g2 } \\ { s4 b c2 } >> | } @end lilypond Diese Stimmen sind alle getrennt von der Hauptstimme, die die Noten außerhalb der @code{<< .. >>}-Konstruktion beinhaltet. Lassen wir es uns die @emph{simultane Konstruktion} nennen. Bindebögen und Legatobögen können nur Noten in der selben Stimmen miteinander verbinden und können also somit nicht aus der simultanen Konstruktion hinausreichen. Umgekehrt gilt, dass parallele Stimmen aus eigenen simultanen Konstruktionen auf dem gleichen Notensystem die gleiche Stimme sind. Auch andere, mit dem Stimmenkontext verknüpfte Eigenschaften erstrecken sich auf alle simultanen Konstrukte. Hier das gleiche Beispiel, aber mit unterschiedlichen Farben für die Notenköpfe der unterschiedlichen Stimmen. Beachten Sie, dass Änderungen in einer Stimme sich nicht auf die anderen Stimmen erstrecken, aber sie sind weiterhin in der selben Stimme vorhanden, auch noch später im Stück. Beachten Sie auch, dass übergebundene Noten über die gleiche Stimme in zwei Konstrukten verteilt werden können, wie hier an der blauen Dreieckstimme gezeigt. @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 e } \\ % Voice 2 continues { c8 b16 a b8 g~ g2 } \\ { \voiceThreeStyle s4 b c2 } >> | } @end lilypond @funindex \voiceOneStyle @funindex \voiceTwoStyle @funindex \voiceThreeStyle @funindex \voiceFourStyle @funindex \voiceNeutralStyle Die Befehle @code{\voiceXXXStyle} sind vor allem dazu da, um in pädagogischen Dokumenten wie diesem hier angewandt zu werden. Sie verändern die Farbe des Notenkopfes, des Halses und des Balkens, und zusätzlich die Form des Notenkopfes, damit die einzelnen Stimmen einfach auseinander gehalten werden können. Die erste Stimme ist als rote Raute definiert, die zweite Stimme als blaue Dreiecke, die dritte Stimme als grüne Kreise mit Kreuz und die vierte Stimme (die hier nicht benutzt wird) hat dunkelrote Kreuze. @code{\voiceNeutralStyle} (hier auch nicht benutzt) macht diese Änderungen rückgängig. Später soll gezeigt werden, wie Befehle wie diese vom Benutzer selber erstellt werden können. Siehe auch @ref{Sichtbarkeit und Farbe von Objekten} und @ref{Variablen für Optimierungen einsetzen}. @cindex Polyphonie und relativer Notationsmodus @cindex relativer Notationsmodus und Polyphonie Polyphonie ändert nicht die Verhältnisse der Noten innerhalb eines @code{\relative}-Blocks. Jede Note wird weiterhin relativ zu der vorherigen Note errechnet, oder relativ zur ersten Note des vorigen Akkords. So ist etwa hier @example \relative c' @{ NoteA << < NoteB NoteC > \\ NoteD >> NoteE @} @end example @noindent @code{NoteB} bezüglich @code{NoteA} @* @code{NoteC} bezüglich @code{NoteB}, nicht @code{noteA}; @* @code{NoteD} bezüglich @code{NoteB}, nicht @code{NoteA} oder @code{NoteC}; @* @code{NoteE} bezüglich @code{NoteD}, nicht @code{NoteA} errechnet. Eine andere Möglichkeit ist, den @code{\relative}-Befehl vor jede Stimme zu stellen. Das bietet sich an, wenn die Stimmen weit voneinander entfernt sind. @example \relative c' @{ NoteA ... @} << \relative c'' @{ < NoteB NoteC > ... @} \\ \relative g' @{ NoteD ... @} >> \relative c' @{ NoteE ... @} @end example Zum Schluss wollen wir die Stimmen in einem etwas komplizierteren Stück analysieren. Hier die Noten der ersten zwei Takte von Chopins @notation{Deux Nocturnes}, Op. 32. Dieses Beispiel soll später in diesem und dem nächsten Kapitel benutzt werden, um verschiedene Techniken, Notation zu erstellen, zu demonstrieren. Ignorieren Sie deshalb an diesem Punkt alles in folgendem Code, das Ihnen seltsam vorkommt, und konzentrieren Sie sich auf die Noten und die Stimmen. Die komplizierten Dinge werden in späteren Abschnitten erklärt werden. @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 Die Richtung der Hälse wird oft benutzt, um anzuzeigen, dass zwei gleichzeitige Melodien sich fortsetzen. Hier zeigen die Hälse aller oberen Noten nach oben und die Hälse aller unteren Noten nach unten. Das ist der erste Anhaltspunkt, dass mehr als eine Stimme benötigt wird. Aber die wirkliche Notwendigkeit für mehrere Stimmen tritt erst dann auf, wenn unterschiedliche Noten gleichzeitig erklingen, aber unterschiedliche Dauern besitzen. Schauen Sie sich die Noten auf dem dritten Schlag im ersten Takt an. Das As ist eine punktierte Viertel, das F ist eine Viertel und das Des eine Halbe. Sie können nicht als Akkord geschrieben werden, denn alle Noten in einem Akkord besitzen die gleiche Dauer. Sie können aber auch nicht nacheinander geschrieben werden, denn sie beginnen auf der gleichen Taktzeit. Dieser Taktabschnitt benötigt drei Stimmen, und normalerweise schreibt man drei Stimmen für den ganzen Takt, wie im Beispiel unten zu sehen ist; hier sind unterschiedliche Köpfe und Farben für die verschiedenen Stimmen eingesetzt. Noch einmal: der Quellcode für dieses Beispiel wird später erklärt werden, deshalb ignorieren Sie alles, was Sie hier nicht verstehen können. @c The following should appear as music without code @c The three voice styles should be defined in -init @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 Versuchen wir also, diese Musik selber zu notieren. Wie wir sehen werden, beinhaltet das einige Schwierigkeiten. Fangen wir an, wie wir es gelernt haben, indem wir mit der @code{<< \\ >>}-Konstruktion die drei Stimmen des ersten Taktes notieren: @lilypond[quote,verbatim,ragged-right] \new Staff \relative c'' { \key aes \major << { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { 2 des } >> | 1 | } @end lilypond @cindex Hals nach unten @cindex Hals nach oben @cindex Notenhals, Richtung @cindex Richtung des Notenhalses @cindex Notenhalsrichtung @cindex Stimmen und Notenhalsrichtung @cindex Notenhalsrichtung in Stimmen Die Richtung des Notenhalses wird automatisch zugewiesen; die ungeraden Stimmen tragen Hälse nach oben, die gerade Hälse nach unten. Die Hälse für die Stimmen 1 und 2 stimmen, aber die Hälse in der dritten Stimme sollen in diesem Beispiel eigentlich nach unten zeigen. Wir können das korrigieren, indem wir die dritte Stimme einfach auslassen und die Noten in die vierte Stimme verschieben. Das wird einfach vorgenommen, indem noch ein Paar @code{\\}-Stimmen hinzugefügt wird. @lilypond[quote,verbatim,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 des } >> | 1 | } @end lilypond @noindent Wie zu sehen ist, ändert das die Richtung der Hälse, aber zeigt ein anderes Problem auf, auf das man manchmal bei mehreren Stimmen stößt: Die Hälse einer Stimme können mit den Hälsen anderer Stimmen kollidieren. LilyPond erlaubt Noten in verschiedenen Stimmen sich auf der gleichen vertikalen Position zu befinden, wenn die Hälse in entgegengesetzte Richtungen zeigen, und positioniert die dritte und vierte Stimme dann so, dass Zusammenstöße möglichst vermieden werden. Das funktioniert gewöhnlich recht gut, aber in diesem Beispiel sind die Noten der untersten Stimme eindeutig standardmäßig schlecht positioniert. LilyPond bietet verschiedene Möglichkeiten, die horizontale Position von Noten anzupassen. Wir sind aber noch nicht so weit, dass wir diese Funktionen anwenden könnten. Darum heben wir uns das Problem für einen späteren Abschnitt auf; siehe @code{force-hshift}-Eigenschaft in @ref{Überlappende Notation in Ordnung bringen}. @seealso Notationsreferenz: @ruser{Mehrere Stimmen}. @node Přímé začátky hlasů @subsection Přímé začátky hlasů @translationof Explicitly instantiating voices @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 context, erstellen von @cindex Stimmenkontexte, erstellen von Voice-Kontexte können auch manuell innerhalb eines @code{<< >>}-Abschnittes initiiert werden. Mit den Befehlen @code{\voiceOne} bis hin zu @code{\voiceFour} kann jeder Stimme entsprechendes Verhalten von vertikaler Verschiebung und Richtung von Hälsen und anderen Objekten hinzugefügt werden. In längeren Partituren können die Stimmen damit besser auseinander gehalten werden. Die @code{<< \\ >>}-Konstruktion, die wir im vorigen Abschnitt verwendet haben: @example \new Staff @{ \relative c' @{ << @{ e4 f g a @} \\ @{ c,4 d e f @} >> @} @} @end example @noindent ist identisch mit @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 Beide würden folgendes Notenbild erzeugen: @c The following example should not display the code @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 Stimmen, mehrere zu einer zusammenführen @cindex eine Stimme wiederherstellen Der @code{\voiceXXX}-Befehl setzt die Richtung von Hälsen, Bögen, Artikulationszeichen, Text, Punktierungen und Fingersätzen. @code{\voiceOne} und @code{\voiceThree} lassen diese Objekte nach oben zeigen, @code{\voiceTwo} und @code{\voiceFour} dagegen lassen sie abwärts zeigen. Diese Befehle erzeugen eine horizontale Verschiebung, wenn es erforderlich ist, um Zusammenstöße zu vermeiden. Der Befehl @code{\oneVoice} stellt wieder auf das normale Verhalten um. Schauen wir uns in einigen einfachen Beispielen an, was genau die Befehle @code{\oneVoice}, @code{\voiceOne} und @code{voiceTwo} mit Text, Bögen und Dynamikbezeichnung anstellen: @lilypond[quote,ragged-right,verbatim] \relative c' { % Default behavior or behavior after \oneVoice c4 d8~ d e4( f | g4 a) b-> c | } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c' { \voiceOne c4 d8~ d e4( f | g4 a) b-> c | \oneVoice c,4 d8~ d e4( f | g4 a) b-> c | } @end lilypond @lilypond[quote,ragged-right,verbatim] \relative c' { \voiceTwo c4 d8~ d e4( f | g4 a) b-> c | \oneVoice c,4 d8~ d e4( f | g4 a) b-> c | } @end lilypond Schauen wir und nun drei unterschiedliche Arten an, den gleichen Abschnitt polyphoner Musik zu notieren, jede Art mit ihren Vorteilen in unterschiedlichen Situationen. Wir benutzen dabei das Beispiel vom vorherigen Abschnitt. Ein Ausdruck, der direkt innerhalb einer @code{<< >>}-Umgebung auftritt, gehört der Hauptstimme an. Das ist nützlich, wenn zusätzliche Stimme auftreten, während die Hauptstimme sich fortsetzt. Hier also eine bessere Version des Beispiels aus dem vorigen Abschnitt. Die farbigen Kreuz-Notenköpfe zeigen, dass die Hauptstimme sich jetzt in einem einzigen Stimmen (@code{voice})-Kontext befindet. Somit kann ein Phrasierungsbogen ober sie gesetzt werden. @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 e) | } % 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 Verschachteln von musikalischen Ausdrücken @cindex Verschachteln von gleichzeitigen Ausdrücken @cindex Ausdrücke, Verschachteln von @cindex Stimmen, temporär @cindex Stimmen, Verschachteln von @cindex Verschachteln von Stimmen @cindex temporäre Stimmen Tiefer verschachtelte polyphone Konstrukte sind möglich, und wenn eine Stimme nur kurz auftaucht, kann das der bessere Weg sein, Noten zu setzen: @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 Platzhalternoten @cindex unsichtbare Noten @cindex Noten verstecken Diese Methode, neue Stimmen kurzzeitig zu verschachteln, bietet sich an, wenn nur sehr kleine Abschnitte polyphonisch gesetzt sind. Wenn aber die ganze Partitur polyphon ist, ist es meistens klarer, direkt unterschiedliche Stimmen über die gesamte Partitur hinweg einzusetzen. Hierbei kann man mit unsichtbaren Noten dann die Stellen überspringen, an denen die Stimme nicht auftaucht, wie etwa hier: @lilypond[quote,ragged-right,verbatim] \new Staff \relative c' << % Initiate first voice \new Voice { \voiceOne c16^( d e f g4 f e | d2 e) | } % 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 b c2 | } >> @end lilypond @subsubheading Notenkolumnen @cindex Notenkolumne @cindex Notenkollision @cindex Zusammenstöße von Noten @cindex Kollisionen von Noten @cindex Vertikale Position @cindex shift-Befehle @cindex Verschieben von Noten @funindex \shiftOff @funindex \shiftOn @funindex \shiftOnn @funindex \shiftOnnn @funindex shiftOff @funindex shiftOn @funindex shiftOnn @funindex shiftOnnn Dicht notierte Noten in einem Akkord, oder Noten auf der gleichen Taktzeit aber in unterschiedlichen Stimmen, werden in zwei, manchmal auch mehreren Kolumnen gesetzt, um die Noten am Überschneiden zu hindern. Wir bezeichnen sie als Notenkolumnen. Jede Stimme hat eine eigene Kolumne, und ein stimmenabhängiger Verschiebunsbefehl (engl. shift) wird eingesetzt, wenn eine Kollision auftreten könnte. Das zeigt das Beispiel oben. Im zweiten Takt wird das C der zweiten Stimme nach rechts verschoben, relativ gesehen zum D der ersten Stimme, und im letzten Akkord wird das C der dritten Stimme auch nach rechts verschoben im Verhältnis zu den anderen Stimmen. Die Befehle @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} und @code{\shiftOff} bestimmen den Grad, zu dem Noten und Akkorde verschoben werden sollen, wenn sich sonst eine Kollision nicht vermeiden ließe. Die Standardeinstellung ist, dass die äußeren Stimmen (also normalerweise Stimme 1 und 2) @code{\shiftOff} eingestellt haben, während für die inneren Stimmen (3 und 4) @code{\shiftOn} eingeschaltet ist. Wenn eine Verschiebung auftritt, werden Stimmen 1 und 3 nach rechts und Stimmen 2 und 4 nach links verschoben. @code{\shiftOnn} und @code{\shiftOnnn} definieren weitere Verschiebungsebenen, die man kurzzeitig anwählen kann, um Zusammenstöße in komplexen Situationen aufzulösen, siehe auch @ref{Beispiele aus dem Leben}. Eine Notenkolumne kann nur eine Note (oder einen Akkord) von einer Stimme mit Hälsen nach oben und eine Note (oder einen Akkord) von einer Stimme mit Hälsen nach unten tragen. Wenn Noten von zwei Stimmen mit den Hälsen in die gleiche Richtung an der selben Stelle auftreten und in beiden Stimmen ist keine Verschiebung oder die gleiche Verschiebungsebene definiert, wird die Fehlermeldung @qq{zu viele kollidierende Notenspalten werden ignoriert} ausgegeben. @seealso Notationsreferenz: @ruser{Mehrere Stimmen}. @node Hlasy a zpěvy @subsection Hlasy a zpěvy @translationof Voices and vocals Die Notation von Vokalmusik ihre eigene Schwierigkeit, nämlich die Kombination von zwei Ausdrücken: den Noten und dem Text. Achtung: Der Gesangstext wird auf Englisch @qq{lyrics} genannt. @funindex \new Lyrics @funindex \lyricsto @funindex lyricsto @funindex Lyrics @cindex Lyrics context, erstellen @cindex Gesangtext, Verbindung mit Noten Wir haben schon den @code{\addlyrics@{@}}-Befehl betrachtet, mit dem einfache Partituren gut erstellt werden können. Diese Methode ist jedoch recht eingeschränkt. Wenn der Notensatz komplexer wird, muss der Gesangstext mit einem neuen @code{Lyrics}-Kontext begonnen werden (mit dem Befehl @code{\new Lyrics}) und durch den Befehl @code{\lyricsto@{@}} mit einer bestimmten Stimme verknüpft werden, indem die Bezeichnung der Stimme benutzt wird. @lilypond[quote,verbatim] << \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 Beachten Sie, dass der Notentext nur mit einem @code{Voice}-Kontext verknüpft werden kann, nicht mit einem @code{Staff}-Kontext. In diesem Fall also müssen Sie ein System (@code{Staff}) und eine Stimme (@code{Voice}) explizit erstellen, damit alles funktioniert. @cindex Gesangstext und Balken @cindex Text und Balken @cindex Balken und Text @funindex \autoBeamOff @funindex autoBeamOff Die automatischen Balken, die LilyPond in der Standardeinstellung setzt, eignen sich sehr gut für instrumentale Musik, aber nicht so gut für Musik mit Text, wo man entweder gar keine Balken benutzt oder sie einsetzt, um Melismen zu verdeutlichen. Im Beispiel oben wird deshalb der Befehl @code{\autoBeamOff} eingesetzt um die automatischen Balken (engl. beam) auszuschalten. @funindex \new ChoirStaff @funindex \lyricmode @funindex ChoirStaff @funindex lyricmode @cindex Vokalpartitur, Aufbau @cindex Chorpartitur, Aufbau Wir wollen das frühere Beispiel von @notation{Judas Maccabæus} benutzen, um diese flexiblere Technik für Gesangstexte zu illustrieren. Das Beispiel wurde so umgeformt, dass jetzt Variablen eingesetzt werden, um den Text und die Noten von der Partiturstruktur zu trennen. Es wurde zusätzlich eine Chorpartiturklammer hinzugefügt. Der Gesangtext muss mit @code{\lyricmode} eingegeben werden, damit er als Text und nicht als Noten interpretiert werden kann. @lilypond[quote,verbatim] global = { \key f \major \time 6/8 \partial 8 } SopOneMusic = \relative c'' { c8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ c4 } SopOneLyrics = \lyricmode { Let | flee -- cy flocks the | hills a -- dorn, __ } SopTwoMusic = \relative c' { r8 | r4. r4 c8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes' } 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 Dies ist die Grundstruktur für alle Chorpartituren. Mehr Systeme können hinzugefügt werden, wenn sie gebraucht werden, mehr Stimmen können zu jedem System hinzugefügt werden, mehr Strophen können zum Text hinzugefügt werden, und schließlich können die Variablen schnell in eine eigene Datei verschoben werden, wenn sie zu lang werden sollten. @cindex Choralnotation @cindex Hymnus-Notation @cindex SATB-Partitur @cindex mehrere Strophen @cindex Strophen, mehrere @cindex Choral mit mehreren Strophen Hier ein Beispiel der ersten Zeile eines Chorals mit vier Strophen für gemischten Chor. In diesem Fall ist der Text für alle vier Stimmen identisch. Beachten Sie, wie die Variablen eingesetzt werden, um Inhalt (Noten und Text) und Form (die Partitur) voneinander zu trennen. Eine Variable wurde eingesetzt, um die Elemente, die auf beiden Systemen auftauchen, aufzunehmen, nämlich Taktart und Tonart. Solch eine Variable wird oft auch mit @qq{global} bezeichnet. @lilypond[quote,verbatim] keyTime = { \key c \major \time 4/4 \partial 4 } SopMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g } AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 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 \keyTime \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 \keyTime \TenorMusic } \new Voice = "Bass" { \voiceTwo \BassMusic } >> >> } @end lilypond @seealso Notation Reference: @ruser{Notation von Gesang}. @node Souvislosti a rytci @section Souvislosti a rytci @translationof Contexts and engravers Souvislosti a rytci (@qq{Stempel}) sind in den vorherigen Abschnitten schon aufgetaucht; hier wollen wir uns ihnen nun etwas ausführlicher widmen, denn sie sind sehr wichtig, um Feineinstellungen in der LilyPond-Notenausgabe vornehmen zu können. @menu * Vysvětlení souvislostí:: * Vytvoření souvislostí:: * Vysvětlení rytců:: * Změna souvisejících vlastností:: * Přidání a odstranění rytců:: @end menu @node Vysvětlení souvislostí @subsection Vysvětlení souvislostí @translationof Contexts explained @cindex Kontexte erklärt Wenn Noten gesetzt werden, müssen viele Elemente zu der Notenausgabe hinzugefügt werden, die im Quellcode gar nicht explizit vorkommen. Vergleichen Sie etwa den Quellcode und die Notenausgabe des folgenden Beispiels: @lilypond[quote,verbatim,relative=2] cis4 cis2. | a4 a2. | @end lilypond Der Quellcode ist sehr kurz und knapp, während in der Notenausgabe Taktlinien, Vorzeichen, ein Schlüssel und eine Taktart hinzugefügt wurden. Während LilyPond den Eingabetext @emph{interpretiert}, wird die musikalische Information von rechts nach links gelesen, in etwa, wie man eine Partitur von links nach rechts liest. Während das Programm den Code liest, merkt es sich, wo sich Taktgrenzen befinden und für welche Tonhöhen Versetzungszeichen gesetzt werden müssen. Diese Information muss auf mehreren Ebenen gehandhabt werden, denn Versetzungszeichen etwa beziehen sich nur auf ein System, Taktlinien dagegen üblicherweise auf die gesamte Partitur. Innerhalb von LilyPond sind diese Regeln und Informationshappen in @emph{Kontexten} (engl. contexts) gruppiert. Der @code{Voice} (Stimmen)-Kontext wurde schon vorgestellt. Daneben gibt es noch die @code{Staff} (Notensystem-) und @code{Score} (Partitur)-Kontexte. Kontexte sind hierarchisch geschichtet um die hierarchische Struktur einer Partitur zu spiegeln. Ein @code{Staff}-Kontext kann zum Beispiel viele @code{Voice}-Kontexte beinhalten, und ein @code{Score}-Kontext kann viele @code{Staff}-Kontexte beinhalten. @quotation @sourceimage{context-example,5cm,,} @end quotation Jeder Kontext hat die Aufgabe, bestimmte Notationsregeln zu erzwingen, bestimmte Notationsobjekte zu erstellen und verbundene Elemente zu ordnen. Der @code{Voice}-Kontext zum Beispiel kann eine Vorzeichenregel einführen und der @code{Staff}-Kontext hält diese Regel dann aufrecht, um einzuordnen, ob ein Versetzungszeichen gesetzt werden muss oder nicht. Ein anderes Beispiel: die Synchronisation der Taktlinien ist standardmäßig im @code{Score}-Kontext verankert. Manchmal sollen die Systeme einer Partitur aber unterschiedliche Taktarten enthalten, etwa in einer polymetrischen Partitur mit 4/4- und 3/4-Takt. In diesem Fall müssen also die Standardeinstellungen der @code{Score}- und @code{Staff}-Kontexte verändert werden. In einfachen Partituren werden die Kontexte implizit erstellt, und es kann sein, dass Sie sich dessen gar nicht bewusst sind. Für etwas größere Projekte, etwa mit vielen Systemen, müssen die Kontexte aber explizit erstellt werden, um sicher zu gehen, dass man auch wirklich die erwünschte Zahl an Systemen in der richtigen Reihenfolge erhält. Wenn Stücke mit spezialisierter Notation gesetzt werden sollen, ist es üblich, die existierenden Kontexte zu verändern oder gar gänzlich neue zu definieren. Zusätzlich zu den @code{Score,} @code{Staff} und @code{Voice}-Kontexten gibt es noch Kontexte, die zwischen der Partitur- und Systemebene liegen und Gruppen von Systemen kontrollieren. Das sind beispielsweise der @code{PianoStaff} und @code{ChoirStaff}-Kontext. Es gibt zusätzlich alternative Kontexte für Systeme und Stimmen sowie eigene Kontexte für Gesangstexte, Perkussion, Griffsymbole, Generalbass usw. Die Bezeichnungen all dieser Kontexte werden von einem oder mehreren englischen Wörtern gebildet, dabei wird jedes Wort mit einem Großbuchstaben begonnen und direkt an das folgende ohne Bindestrich oder Unterstrich angeschlossen, etwa @code{GregorianTranscriptionStaff}. @seealso Notationreferenz: @ruser{Vysvětlení souvislostí}. @node Vytvoření souvislostí @subsection Vytvoření souvislostí @translationof Creating contexts @funindex \new @funindex new @cindex Neue Kontexte @cindex Erstellen von Kontexten @cindex Kontexte, Erstellen In einer Eingabedatei enthält eine @code{Score}-Umgebung (einen Kontext), die mit dem Befehl @code{\score} eingeleitet wird, nur einen einzigen musikalischen Ausdruck und mit ihm verknüpft eine Ausgabedefinition (entweder eine @code{\layout}- oder eine @code{\midi}-Umgebung). Üblicherweise wird der @code{Score}-Kontext automatisch von LilyPond erstellt, wenn der musikalische Ausdruck interpretiert wird. Wenn nur ein System vorhanden ist, kann man es ruhig LilyPond überlassen, auch die @code{Voice}- und @code{Staff}-Kontexte zu erstellen, aber für komplexere Partituren ist es notwendig, sie mit einem Befehl zu erstellen. Der einfachste Befehl hierzu ist @code{\new}. Er wird dem musikalischen Ausdruck vorangestellt, etwa so: @example \new @var{Typ} @var{musikalischer Ausdruck} @end example @noindent wobei @var{Typ} eine Kontextbezeichnung (wie etwa @code{Staff} oder @code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und beginnt, den @var{muskalischen Ausdruck} innerhalb dieses Kontexts auszuwerten. @warning{Der @bs{}@code{new Score}-Befehl sollte nicht benutzt werden, weil der Partitur-(Score)-Kontext der obersten Ebene normalerweise automatisch erstellt wird, wenn der musikalische Ausdruck innerhalb der @code{\score}-Umgebung interpretiert wird. Standard-Werte von Kontexteigenschaften, die für einen bestimmten @code{Score} gelten sollen, können innerhalb der @bs{}@code{layout}-Umgebung definiert werden. Siehe @ref{Změna souvisejících vlastností,,změnu souvisejících vlastností}.} Wir haben schon viele explizite Beispiel gesehen, in denen neue @code{Staff}- und @code{Voice}-Kontexte erstellt wurden, aber um noch einmal ins Gedächtnis zu rufen, wie diese Befehle benutzt werden, hier ein kommentiertes Beispiel aus dem richtigen Leben: @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 \clef "treble" \key g \minor \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 \clef "bass" \key g \minor \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 (Beachten Sie, dass wir hier alle Zeilen, die eine neue Umgebung entweder mit einer geschweiften Klammer (@code{@{}) oder doppelten spitzen Klammern (@code{<<}) öffnen, mit jeweils zwei Leerzeichen, und die entsprechenden schließenden Klammern mit der gleichen Anzahl Leerzeichen eingerückt werden. Dies ist nicht erforderlich, es wird aber zu einem großen Teil die nicht passenden Klammerpaar-Fehler eliminieren und ist darum sehr empfohlen. Es macht es möglich, die Struktur einer Partitur auf einen Blick zu verstehen, und alle nicht passenden Klammern erschließen sich schnell. Beachten Sie auch, dass das untere Notensystem mit eckigen Klammern erstellt wird, denn innerhalb dieses Systems brauchen wir zwei Stimmen, um die Noten darzustellen. Das obere System braucht nur einen einzigen musikalischen Ausdruck und ist deshalb von geschweiften Klammern umschlossen.) @cindex Kontexte, Benennung @cindex Benennung von Kontexten Der @code{\new}-Befehl kann einem Kontext auch einen Namen zur Identifikation geben, um ihn von anderen Kontexten des selben Typs zu unterscheiden: @example \new @var{Typ} = @var{Name} @var{musikalischer Ausdruck} @end example Beachten Sie den Unterschied zwischen der Bezeichnung des Kontexttyps (@code{Staff}, @code{Voice}, usw.) und dem Namen, der aus beliebigen Buchstaben bestehen kann und vom Benutzer frei erfunden werden kann. Zahlen und Leerzeichen können auch benutzt werden, in dem Fall muss der Name aber von doppelten Anführungszeichen umgeben werden, also etwa @code{\new Staff = "Mein System 1" @var{musikalischer Ausdruck}}. Der Name wird benutzt, um später auf genau diesen spezifischen Kontext zu verweisen. Dieses Vorgehen wurde schon in dem Abschnitt zu Gesangstexten angewandt, siehe @ref{Hlasy a zpěvy,,hlasy a zpěvy}. @seealso Notationsreferenz: @ruser{Vytvoření souvislostí}. @node Vysvětlení rytců @subsection Vysvětlení rytců @translationof Engravers explained @cindex Engraver @cindex Stempel (Engraver) Jedes Zeichen des fertigen Notensatzes von LilyPond wird von einem @code{Engraver} (Stempel) produziert. Es gibt also einen Engraver, der die Systeme erstellt, einen, der die Notenköpfe ausgibt, einen für die Hälse, einen für die Balken usw. Insgesamt gibt es über 120 Engraver! Zum Glück braucht man für die meisten Partituren nur ein paar Engraver, und für einfache Partituren muss man eigentlich überhaupt nichts über sie wissen. Engraver leben und wirken aus den Kontexten heraus. Engraver wie der @code{Metronome_mark_engraver}, dessen Aktion und Ausgabe sich auf die gesamte Partitur bezieht, wirken in der obersten Kontextebene -- dem @code{Score}-Kontext. Der @code{Clef_engraver} (Schlüssel-Stempel) und der @code{Key_engraver} (Vorzeichen-Stempel) finden sich in jedem @code{Staff}-Kontext, denn unterschiedliche Systeme könnten unterschiedliche Tonarten und Notenschlüssel brauchen. Der @code{Note_heads_engraver} (Notenkopf-Stempel) und der @code{Stem_engraver} (Hals-Stempel) befinden sich in jedem @code{Voice}-Kontext, der untersten Kontextebene. Jeder Engraver bearbeitet die bestimmten Objekte, die mit seiner Funktion assoziiert sind, und verwaltet die Eigenschaften dieser Funktion. Diese Eigenschaften, wie etwa die Eigenschaften, die mit Kontexten assoziiert sind, können verändert werden, um die Wirkungsweise des Engravers oder das Erscheinungsbild der von ihm produzierten Elemente in der Partitur zu ändern. Alle Engraver haben zusammengesetzte Bezeichnung, die aus den (englischen) Wörtern ihrer Funktionsweise bestehen. Nur das erste Wort hat einen Großbuchstaben, und die restlichen Wörter werden mit einem Unterstrich angefügt. Ein @code{Staff_symbol_engraver} verantwortet also die Erstellung der Notenlinien, ein @code{Clef_engraver} entscheidet über die Art der Notenschlüssel und setzt die entsprechenden Symbole; damit wird gleichzeitig die Referenztonhöhe auf dem Notensystem festgelegt. Hier die meistgebräuchlichen Engraver mit ihrer Funktion. Sie werden sehen, dass es mit etwas Englischkenntnissen einfach ist, die Funktion eines Engravers von seiner Bezeichnung abzuleiten. @multitable @columnfractions .3 .7 @headitem Engraver @tab Funktion @item Accidental_engraver @tab Erstellt Versetzungszeichen, vorgeschlagene und Warnversetzungszeichen. @item Beam_engraver @tab Erstellt Balken. @item Clef_engraver @tab Erstellt Notenschlüssel. @item Completion_heads_engraver @tab Teilt Noten in kleiner Werte, wenn sie über die Taktlinie reichen. @c The old Dynamic_engraver is deprecated. -jm @item New_dynamic_engraver @tab Erstellt Dynamik-Klammern und Dynamik-Texte. @item Forbid_line_break_engraver @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist. @item Key_engraver @tab Erstellt die Vorzeichen. @item Metronome_mark_engraver @tab Erstellt Metronom-Bezeichnungen. @item Note_heads_engraver @tab Erstellt Notenköpfe. @item Rest_engraver @tab Erstellt Pausen. @item Staff_symbol_engraver @tab Ersetllt die (standardmäßig) fünf Notenlinien des Systems. @item Stem_engraver @tab Erstellt die Notenhälse und Tremolos mit einem Hals. @item Time_signature_engraver @tab Erstellt die Taktartbezeichnung. @end multitable @smallspace Es soll später gezeigt werden, wie die LilyPond-Ausgabe verändert werden kann, indem die Wirkungsweise der Engraver beeinflusst wird. @seealso Referenz der Interna: @rinternals{Engravers and Performers}. @node Změna souvisejících vlastností @subsection Změna souvisejících vlastností @translationof Modifying context properties @cindex Kontext-Eigenschaften, Verändern @cindex Eigenschaften von Kontexten @cindex Verändern von Kontext-Eigenschaften @funindex \set @funindex \unset @funindex set @funindex unset Kontexte sind dafür verantwortlich, die Werte bestimmter Kontext-@emph{Eigenschaften} zu speichern. Viele davon können verändert werden, um die Interpretation der Eingabe zu beeinflussen und die Ausgabe zu verändern. Kontexte werden mit dem @code{\set}-Befehl geändert. Er wird in Form @example \set @var{KontextBezeichnung}.@var{eigenschaftsBezeichnung} = #@var{Wert} @end example @noindent verwendet, wobei @var{KontextBezeichnung} üblicherweise @code{Score}, @code{Staff} oder @code{Voice} ist. Der erste Teil kann auch ausgelassen werden; in diesem Fall wird der aktuelle Kontext (üblicherweise @code{Voice}) eingesetzt. Die Bezeichnung von Kontexten-Eigenschaften besteht aus zwei Wörtern, die ohne Unterstrich oder Bindestrich verbunden sind. Alle außer dem ersten werden am Anfang groß geschrieben. Hier einige Beispiele der gebräuchlichsten Kontext-Eigenschaften. Es gibt sehr viel mehr. @c attempt to force this onto a new page @need 50 @multitable @columnfractions .25 .15 .45 .15 @headitem eigenschaftsBezeichnung @tab Typ @tab Funktion @tab Beispiel-Wert @item extraNatural @tab boolescher Wert @tab Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt. @tab @code{#t}, @code{#f} @item currentBarNumber @tab Integer @tab Setzt die aktuelle Taktnummer. @tab @code{50} @item doubleSlurs @tab boolescher Wert @tab Wenn wahr, werden Legatobögen über und unter die Noten gesetzt. @tab @code{#t}, @code{#f} @item instrumentName @tab Text @tab Setzt die Instrumentenbezeichnung am Anfang eines Systems. @tab @code{"Cello I"} @item fontSize @tab reale Zahl @tab Vergrößert oder verkleinert die Schriftgröße. @tab @code{2.4} @item stanza @tab Text @tab Setzt den Text zu Beginn einer Strophe. @tab @code{"2"} @end multitable @noindent Ein boolescher Wert ist entweder wahr (@code{#t}) oder falsch (@code{#f}), ein Integer eine positive ganze Zahl, ein Real (reelle Zahl) eine positive oder negative Dezimalzahl, und Text wird in doppelte Anführungszeichen (Shift+2) eingeschlossen. Beachten Sie das Vorkommen des Rautenzeichens (@code{#}) an unterschiedlichen Stellen: als Teil eines booleschen Wertes vor dem @code{t} oder @code{f}, aber auch vor einem @emph{Wert} in der @code{\set}-Befehlskette. Wenn ein boolescher Wert eingegeben werden soll, braucht man also zwei Rautenzeichen, z. B. @code{##t}. @cindex Eigenschaften in Kontexten @cindex Veränderung von Eigenschaften in Kontexten Bevor eine Eigenschaft geändert werden kann, muss man wissen, in welchem Kontext sie sich befindet. Manchmal versteht das sich von selbst, aber in einigen Fällen kann es zunächst unverständlich erscheinen. Wenn der falsche Kontext angegeben wird, wird keine Fehlermeldung produziert, aber die Veränderung wird einfach nicht ausgeführt. @code{instrumentName} befindet sich offensichtlich innerhalb von einem @code{Staff}-Kontext, denn das Notensystem soll benannt werden. In dem folgenden Beispiel erhält das erste System korrekt die Instrumentenbezeichnung, das zweite aber nicht, weil der Kontext ausgelassen wurde. @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { \set Staff.instrumentName = #"Soprano" c2 c } \new Staff \relative c' { \set instrumentName = #"Alto" % Wrong! d2 d } >> @end lilypond Denken Sie daran, dass der Standardkontext @code{Voice} ist; in dem zweiten @code{\set}-Befehl wird also die Eigenschaft @code{instrumentName} im @code{Voice}-Kontext auf @qq{Alto}, gesetzt, aber weil LilyPond diese Eigenschaft nicht im @code{Voice}-Kontext vermutet, passiert einfach gar nichts. Das ist kein Fehler, und darum wird auch keine Fehlermeldung produziert. Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung falsch geschrieben wird und die Änderung also nicht ausgeführt werden kann. Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung mit dem @code{\set}-Befehl eingesetzt werden, genauso wie die, die wirklich existieren. Aber wenn LilyPond diese Bezeichnung nicht zuordnen kann, bewirkt der Befehl einfach gar nichts. Manche Editoren, die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren unbekannte Bezeichnungen anders (wie ConTEXT). Wenn Sie keinen Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die Bezeichnungen in der Interna-Referenz zu überprüfen: siehe @rinternals{Tunable context properties}, oder @rinternals{Contexts}. Die Eigenschaft @code{instrumentName} wird erst aktiv, wenn sie in einem @code{Staff}-Kontext gesetzt wird, aber manche Eigenschaften können in mehr als einem Kontext benutzt werden. Als Beispiel mag die @code{extraNatural}-Eigenschaft dienen, die zusätzliche Erniedrigungszeichen setzt. Die Standardeinstellung ist ##t (wahr) in allen Systemen. Wenn sie nur in einem @code{Staff} (Notensystem) auf ##f (falsch) gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus. Wird sie dagegen in der @code{Score}-Umgebung gesetzt, wirkt sich das auf alle darin enthaltenen Systeme aus. Das also bewirkt, dass die zusätzlichen Erniedrigungszeichen in einem System ausgeschaltet sind: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { ais2 aes } \new Staff \relative c'' { \set Staff.extraNatural = ##f ais2 aes } >> @end lilypond @noindent während das dazu dient, sie in allen Systemen auszuschalten: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { ais2 aes } \new Staff \relative c'' { \set Score.extraNatural = ##f ais2 aes } >> @end lilypond Ein anderes Beispiel ist die Eigenschaft @code{clefOctavation}: wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort der Wert der Oktavierung in allen aktuellen Systemen und wird auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt. Der gegenteilige Befehl, @code{\unset}, entfernt die Eigenschaft effektiv wieder von dem Kontext: in den meisten Fällen wird der Kontext auf ihre Standardeinstellungen zurückgesetzt. Normalerweise wird aber @code{\unset} nicht benötigt, denn ein neues @code{\set} erledigt alles, was man braucht. Die @code{\set}- und @code{\unset}-Befehle könne überall im Eingabequelltext erscheinen und werden aktiv von dem Moment, an dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft mit @code{\set} oder @code{\unset} neu gesetzt wird. Versuchen wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem auf die Notenköpfe auswirkt. Die Änderung bezieht sich immer auf den Standard, nicht vom letzten gesetzten Wert. @lilypond[quote,verbatim,ragged-right,relative=1] c4 d % make note heads smaller \set fontSize = #-4 e4 f | % make note heads larger \set fontSize = #2.5 g4 a % return to default size \unset fontSize b4 c | @end lilypond Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen Eigenschaften ändern lassen. Beachten Sie, dass Integer und Zahlen immer mit einem Rautenzeichen beginnen, während die Werte wahr und falsch (mit @code{##t} und @code{##f} notiert) immer mit zwei Rauten beginnen. Eine Eigenschaft, die aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden, auch wenn wir später sehen werden, dass Text auf eine sehr viel allgemeinere und mächtigere Art mit dem @code{\markup}-Befehl eingegeben werden kann. @subsubheading Kontexteigenschaften mit @code{\with} setzen @funindex \with @funindex with @cindex Kontexteigenschaft, setzen mit \with Die Standardwerte von Kontexteigenschaften können zu dem Zeitpunkt definiert werden, an welchem der Kontext erstellt wird. Manchmal ist das eine saubere Weise, eine Eigenschaft zu bestimmen, die für die gesamte Partitur erhalten bleichen soll. Wenn ein Kontext mit einem @code{\new}-Befehl erstellt wird, können in einer direkt folgenden @code{\with @{ .. @}}-Umgebung die Eigenschaften bestimmt werden. Wenn also die zusätzlichen Auflösungszeichen für eine ganze Partitur gelten sollen, könnte man schreiben: @example \new Staff \with @{ extraNatural = ##f @} @end example @noindent etwa so: @lilypond[quote,verbatim,ragged-right] << \new Staff \relative c'' { gis4 ges aes ais } \new Staff \with { extraNatural = ##f } { \relative c'' { gis ges aes ais } } >> @end lilypond Eigenschaften, die auf diese Arte gesetzt werden, können immer noch dynamisch mit dem @code{\set}-Befehl geändert werden und mit @code{\unset} auf ihre Standardeinstellungen zurückgesetzt werden, wie sie vorher in der @code{\with}-Umgebung definiert wurden. @cindex Schriftgröße, Standardeinstellung @cindex fontSize (Schriftgröße), Standardeinstellung Wenn also die @code{fontSize}-Eigenschaft in einer @code{\with}-Umgebung definiert wird, wird der Standardwert für die Schriftgröße festgelegt. Wenn dieser Wert später mit @code{\set} verändert wird, kann dieser neue Standardwert mit dem Befehl @code{\unset fontSize} wieder erreicht werden. @subsubheading Kontexteigenschaften mit @code{\context} setzen @cindex Kontexteigenschaften, mit \context setzen @cindex Eigenschaften von Kontexten, mit \context setzen @funindex \context @funindex context Die Werte von Kontext-Eigenschaften können in @emph{allen} Kontexten eines bestimmten Typs (etwa alle @code{Staff}-Kontexte) gleichzeitig mit einem Befehl gesetzt werden. Der Kontext wird spezifiziert, indem seine Bezeichnung benutzt wird, also etwa @code{Staff}, mit einem Backslash davor: @code{\Staff}. Der Befehl für die Eigenschaft ist der gleiche, wie er auch in der @code{\with}-Konstruktion benutzt wird, wie oben gezeigt. Er wird in eine @code{\context}-Umgebung eingebettet, welche wiederum innerhalb von einer @code{\layout}-Umgebung steht. Jede @code{\context}-Umgebung wirkt sich auf alle Kontexte dieses Types aus, welche sich in der aktuellen Partitur befinden (d. h. innerhalb einer @code{\score}- oder @code{\book}-Umgebung). Hier ist ein Beispiel, wie man diese Funktion anwendet: @lilypond[verbatim,quote] \score { \new Staff { \relative c'' { cis4 e d ces } } \layout { \context { \Staff extraNatural = ##t } } } @end lilypond Wenn die Veränderung der Eigenschaft sich auf alle Systeme einer @code{score}-Umgebung beziehen soll: @lilypond[quote,verbatim] \score { << \new Staff { \relative c'' { gis4 ges aes ais } } \new Staff { \relative c'' { gis4 ges aes ais } } >> \layout { \context { \Score extraNatural = ##f } } } @end lilypond @noindent Kontext-Eigenschaften, die auf diese Weise gesetzt werden, können für bestimmten Kontexte überschrieben werden, indem die @code{\with}-Konstruktion eingesetzt wird, oder mit @code{\set}-Befehlen innerhalb der aktuellen Noten. @seealso Notationsreferenz: @ruser{Die Standardeinstellungen von Kontexten ändern}, @ruser{Der set-Befehl}. Referenz der Interna: @rinternals{Contexts}, @rinternals{Tunable context properties}. @node Přidání a odstranění rytců @subsection Přidání a odstranění rytců @translationof Adding and removing engravers @cindex Engraver, Hinzufügen von @cindex Engraver, Entfernen von @cindex Hinzufügen von Engravern @cindex Entfernen von Engravern @funindex \consists @funindex \remove @funindex consists @funindex remove Wir haben gesehen, dass jeder Kontext eine Anzahl an Engravern (Stempeln) beinhaltet, von denen ein jeder einen bestimmten Teil des fertigen Notensatzes produziert, wie z. B. Taktlinien, Notenlinien, Notenköpfe, Hälse usw. Wenn ein Engraver aus einem Kontext entfernt wird, kann er seine Objekte nicht länger produzieren. Das ist eine eher grobe Methode, die Notenausgabe zu beeinflussen, aber es kann von großem Nutzen sein. @subsubheading Einen einzelnen Kontext verändern Um einen Engraver von einem einzelnen Kontext zu entfernen, wir der @code{\with}-Befehl eingesetzt, direkt hinter den Befehl zur Kontext-Erstellung geschrieben, wie in dem vorigen Abschnitt gezeigt. Als ein Beispiel wollen wir das Beispiel aus dem letzten Abschnitt produzieren, aber die Notenlinien entfernen. Erinnern Sie sich, dass die Notenlinien vom @code{Staff_symbol_engraver} erstellt werden. @lilypond[quote,verbatim,ragged-right] \new Staff \with { \remove Staff_symbol_engraver } \relative c' { c4 d \set fontSize = #-4 % make note heads smaller e4 f | \set fontSize = #2.5 % make note heads larger g4 a \unset fontSize % return to default size b4 c | } @end lilypond @cindex Ambitus-Engraver Engraver können auch zu einem bestimmten Kontext hinzugefügt werden. Dies geschieht mit dem Befehl @code{\consists @var{Engraver_bezeichnung}} @noindent welcher auch wieder innerhalb der @code{\with}-Umgebung gesetzt wird. Einige Chorpartituren zeigen einen Ambitus direkt zu Beginn der ersten Notenzeile, um den Stimmumfang des Stückes anzuzeigen, siehe auch @rglos{ambitus}. Der Ambitus wird vom @code{Ambitus_engraver} erstellt, der normalerweise in keinem Kontext enthalten ist. Wenn wir ihn zum @code{Voice}-Kontext hinzufügen, errechnet er automatisch den Stimmumfang für diese einzelne Stimme und zeigt ihn an: @lilypond[quote,verbatim,ragged-right] \new Staff << \new Voice \with { \consists Ambitus_engraver } { \relative c'' { \voiceOne c4 a b g } } \new Voice { \relative c' { \voiceTwo c4 e d f } } >> @end lilypond @noindent wenn wir den Ambitus-Engraver allerdings zum @code{Staff}-Kontext hinzufügen, wird der Stimmumfang aller Stimmen in diesem Notensystem errechnet: @lilypond[quote,verbatim,ragged-right] \new Staff \with { \consists Ambitus_engraver } << \new Voice { \relative c'' { \voiceOne c4 a b g } } \new Voice { \relative c' { \voiceTwo c4 e d f } } >> @end lilypond @subsubheading Alle Kontexte des gleichen Typs verändern @funindex \layout Die vorigen Beispiele zeigen, wie man Engraver in einem bestimmten Kontext hinzufügen oder entfernen kann. Es ist auch möglich, Engraver in jedem Kontext eines bestimmten Typs hinzuzufügen oder zu entfernen. Dazu werden die Befehle in dem entsprechenden Kontext in einer @code{\layout}-Umgebung gesetzt. Wenn wir also z. B. den Ambitus für jedes Notensystem in einer Partitur mit vier Systemen anzeigen wollen, könnte das so aussehen: @lilypond[quote,verbatim,ragged-right] \score { << \new Staff { \relative c'' { c4 a b g } } \new Staff { \relative c' { c4 a b g } } \new Staff { \clef "G_8" \relative c' { c4 a b g } } \new Staff { \clef "bass" \relative c { c4 a b g } } >> \layout { \context { \Staff \consists Ambitus_engraver } } } @end lilypond @noindent Die Werte der Kontext-Eigenschaften können auch für alle Kontexte eines bestimmten Typs auf die gleiche Weise geändert werden, indem der @code{\set}-Befehl in einer @code{\context}-Umgebung angewendet wird. @seealso Notationsreferenz: @ruser{Umgebungs-Plugins verändern}, @ruser{Die Standardeinstellungen von Kontexten ändern}. @knownissues Die @code{Stem_engraver} und @code{Beam_engraver} fügen ihre Objekte an Notenköpfe an. Wenn der @code{Note_heads_engraver} entfernt wird, werden keine Notenköpfe erstellt und demzufolge auch keine Hälse oder Bögen dargestellt. @node Rozšíření příkladů @section Rozšíření příkladů @translationof Extending the templates Sie haben sich durch die Übung gearbeitet, Sie wissen jetzt, wie Sie Notensatz produzieren, und Sie haben die grundlegenden Konzepte verstanden. Aber wie erhalten Sie genau die Systeme, die Sie brauchen? Es gibt eine ganze Anzahl an fertigen Vorlagen (siehe @ref{Vorlagen}), mit denen Sie beginnen können. Aber was, wenn Sie nicht genau das finden, was Sie brauchen? Lesen Sie weiter. @menu * Soprán a violoncello:: * Čtyřhlasý notový zápis SATB:: * Vytvoření notového zápisu od základu:: * Úspora psaní na stroji pomocí proměnných a funkcí:: * Notové zápisy a hlasy:: @end menu @node Soprán a violoncello @subsection Soprán a violoncello @translationof Soprano and cello @cindex Template, Verändern von @cindex Vorlage, Verändern von @cindex Veränderung von Vorlagen Beginnen Sie mit der Vorlage, die Ihren Vorstellungen am nächsten kommt. Nehmen wir einmal an, Sie wollen ein Stück für Soprán a violoncello schreiben. In diesem Fall könnten Sie mit der Vorlage @qq{Noten und Text} (für die Sopran-Stimme) beginnen. @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 Jetzt wollen wir die Cello-Stimme hinzufügen. Schauen wir uns das Beispiel @qq{Nur Noten} an: @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 Wir brauchen den @code{\version}-Befehl nicht zweimal. Wir brauchen aber den @code{melody}-Abschnitt. Wir wollen keine zwei @code{\score} (Partitur)-Abschnitte -- mit zwei @code{\score}-Abschnitten würden wir zwei Stimmen getrennt voneinander erhalten. In diesem Fall wollen wir sie aber zusammen, als Duett. Schließlich brauchen wir innerhalb des @code{\score}-Abschnittes nur einmal die Befehle @code{\layout} und @code{\midi}. Wenn wir jetzt einfach zwei @code{melody}-Abschnitte in unsere Datei kopieren würden, hätten wir zwei @code{melody}-Variable. Das würde zu keinem Fehler führen, aber die zweite von ihnen würde für beide Melodien eingesetzt werden. Wir müssen ihnen also andere Bezeichnungen zuweisen, um sie voneinander zu unterscheiden. Nennen wir die Abschnitte also @code{SopranNoten} für den Sopran und @code{CelloNoten} für die Cellostimme. Wenn wir schon dabei sind, können wir @code{text}auch nach @code{SoprText} umbenennen. Denken Sie daran, beide Vorkommen der Bezeichnung zu ändern: einmal die Definition gleich am Anfang (@code{melody = \relative c' @{ }) und dann auch noch die Benutzung der Variable innerhalb des @code{\score}-Abschnittes. Gleichzeitig können wir auch noch das Notensystem für das Cello ändern -- das Cello hat normalerweise einen Bassschlüssel. Wir ändern auch die Noten etwas ab. @example \version @w{"@version{}"} SopranNoten = \relative c' @{ \clef "treble" \key c \major \time 4/4 a4 b c d @} SoprText = \lyricmode @{ Aaa Bee Cee Dee @} CelloNoten = \relative c @{ \clef "bass" \key c \major \time 4/4 d4 g fis8 e d4 @} \score @{ << \new Voice = "eins" @{ \autoBeamOff \SopranNoten @} \new Lyrics \lyricsto "eins" \Soprantext >> \layout @{ @} \midi @{ @} @} @end example Das sieht schon vielversprechend aus, aber die Cello-Stimme erscheint noch nicht im Notensatz -- wir haben vergessen, sie in den @code{\score}-Abschnitt einzufügen. Wenn die Cello-Stimme unterhalb des Soprans erscheinen soll, müssen wir @example \new Staff \CelloNoten @end example @noindent unter dem Befehl für den Sopran hinzufügen. Wir brauchen auch die spitzen Klammern (@code{<<} und @code{>>}) um die Noten, denn damit wird LilyPond mitgeteilt, dass mehr als ein Ereignis gleichzeitig stattfindet (in diesem Fall sind es zwei @code{Staff}-Instanzen). Der @code{\score}-Abschnitt sieht jetzt so aus: @c Indentation in this example is deliberately poor @example \score @{ << << \new Voice = "eins" @{ \autoBeamOff \SopranNoten @} \new Lyrics \lyricsto "eins" \SoprText >> \new Staff \CelloNoten >> \layout @{ @} \midi @{ @} @} @end example @noindent Das sieht etwas unschön aus, vor allem die Einrückung stimmt nicht mehr. Das können wir aber schnell in Ordnung bringen. Hier also die gesamte Vorlage für Soprán a violoncello: @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 Die Vorlagen, mit denen wir begonnen haben, können im Anhang @qq{Vorlagen} gefunden werden, siehe @ref{Ein einzelnes System}. @node Čtyřhlasý notový zápis SATB @subsection Čtyřhlasý notový zápis SATB @translationof Four-part SATB vocal score @cindex Vorlage, SATB @cindex Vorlage, Chorpartitur @cindex SATB-Vorlage @cindex Chorpartitur, Vorlage Die meisten Partituren für vierstimmigen gemischten Chor mit Orchesterbegleitung (wie etwa Mendelssohns @notation{Elias} oder Händels @notation{Messias}) sind so aufgebaut, dass für jede der vier Stimmen ein eigenes System besteht und die Orchesterbegleitung dann als Klavierauszug darunter notiert wird. Hier ein Beispiel aus Händels @notation{Messias}: @c The following should appear as music without code @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 Keine der Vorlage bietet diesen Aufbau direkt an. Die Vorlage, die am nächsten daran liegt, ist @qq{SATB-Partitur und automatischer Klavierauszug}, siehe @ref{Vokalensemble}. Wir müssen diese Vorlage aber so anpassen, dass die Noten für das Klavier nicht automatisch aus dem Chorsatz generiert werden. Die Variablen für die Noten und den Text des Chores sind in Ordnung, wir müssen nun noch Variablen für die Klaviernoten hinzufügen. Die Reihenfolge, in welcher die Variablen in das Chorsystem (@code{ChoirStaff}) eingefügt werden, entspricht nicht der in dem Beispiel oben. Wir wollen sie so sortieren, dass die Texte jeder Stimme direkt unter den Noten notiert werden. Alle Stimmen sollten als @code{\voiceOne} notiert werden, welches die Standardeinstellung ist; wir können also die @code{\voiceXXX}-Befehle entfernen. Wir müssen auch noch den Schlüssel für den Tenor ändern. Die Methode, mit der der Text den Stimmen zugewiesen wird, ist uns noch nicht bekannt, darum wollen wir sie umändern auf die Weise, die wir schon kennen. Wir fügen auch noch Instrumentbezeichnungen zu den Systemen hinzu. Damit erhalten wir folgenden @code{ChoirStaff}: @example \new ChoirStaff << \new Staff = "sopranos" << \set Staff.instrumentName = #"Sopran" \new Voice = "sopranos" @{ \global \sopranoMusic @} >> \new Lyrics \lyricsto "sopranos" @{ \sopranoWords @} \new Staff = "altos" << \set Staff.instrumentName = #"Alt" \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 Als nächstes müssen wir das Klaviersystem bearbeiten. Das ist einfach: wir nehmen einfach den Klavierteil aus der @qq{Piano solo}-Vorlage: @example \new PianoStaff << \set PianoStaff.instrumentName = #"Piano " \new Staff = "oben" \oben \new Staff = "unten" \unten >> @end example @noindent und fügen die Variablen @code{oben} und @code{unten} hinzu. Das Chorsystem und das Pianosystem müssen mit spitzen Klammern kombiniert werden, damit beide übereinander erscheinen: @example << % ChoirStaff und PianoStaff parallel kombinieren \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 Alles miteinander kombiniert und mit den Noten für drei Takte sieht unser Beispiel nun so aus: @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 Vytvoření notového zápisu od základu @subsection Vytvoření notového zápisu od základu @translationof Building a score from scratch @cindex Template, eigene schreiben @cindex Vorlagen, eigene schreiben @cindex eigene Vorlagen erstellen @cindex Erstellen von eigenen Vorlagen @cindex Schreiben von eigenen Vorlagen Wenn Sie einige Fertigkeit im Schreiben von LilyPond-Code gewonnen haben, werden Sie vielleicht feststellen, dass es manchmal einfacher ist, von Grund auf anzufangen, anstatt die fertigen Vorlagen zu verändern. Auf diese Art könne Sie auch Ihren eigenen Stil entwickeln, und ihn der Musik anpassen, die Sie notieren wollen. Als Beispiel wollen wir demonstrieren, wie man die Partitur für ein Orgelpreludium von Grund auf konstruiert. Beginnen wir mit dem Kopf, dem @code{header}-Abschnitt. Hier notieren wir den Titel, den Namen des Komponisten usw. Danach schreiben wir die einzelnen Variablen auf und schließlich am Ende die eigentliche Partitur, den @code{\score}-Abschnitt. Beginnen wir mit einer groben Struktur, in die wir dann die Einzelheiten nach und nach eintragen. Als Beispiel benutzen wir zwei Takte aus dem Orgelpreludium @notation{Jesu, meine Freude} von J. S. Bach, notiert für zwei Manuale und Pedal. Sie können die Noten am Ende dieses Abschnittes sehen. Das obere Manual trägt zwei Stimmen, das untere und das Pedalsystem jeweils nur eine. Wir brauchen also vier Variablen für die Noten und eine, um Taktart und Tonart zu definieren. @example \version @w{"@version{}"} \header @{ title = "Jesu, meine Freude" composer = "J. S. Bach" @} keyTime = @{ \key c \minor \time 4/4 @} ManualOneVoiceOneMusic = @{ s1 @} ManualOneVoiceTwoMusic = @{ s1 @} ManualTwoMusic = @{ s1 @} PedalOrganMusic = @{ s1 @} \score @{ @} @end example Im Moment haben wir eine unsichtbare Note in jede Stimme eingesetzt (@code{s1}). Die Noten werden später hinzugefügt. Als nächstes schauen wir uns an, was in die Partitur (die @code{\score}-Umgebung) kommt. Dazu wird einfach die Notensystemstruktur konstruiert, die wir benötigen. Orgelmusik wird meistens auf drei Systemen notiert, eins für jedes Manual und ein drittes für die Pedalnoten. Die Systeme für die Manuale werden mit einer geschweiften Klammer verbunden, wir benutzen hier also ein @code{PianoStaff}. Das erste Manualsystem braucht zwei Stimmen, das zweite nur eine. @example \new PianoStaff << \new Staff = "ManualOne" << \new Voice @{ \ManualOneVoiceOneMusic @} \new Voice @{ \ManualOneVoiceTwoMusic @} >> % Ende ManualOne Systemkontext \new Staff = "ManualTwo" << \new Voice @{ \ManualTwoMusic @} >> % Ende ManualTwo Systemkontext >> % Ende PianoStaff Kontext @end example Als nächstes soll das System für das Pedal hinzugefügt werden. Es soll unter das Klaviersystem gesetzt werden, aber muss gleichzeitig mit ihm erscheinen. Wir brauchen also spitze Klammern um beide Definitionen. Sie wegzulassen würde eine Fehlermeldung in der Log-Datei hervorrufen. Das ist ein sehr häufiger Fehler, der wohl auch Ihnen früher oder später unterläuft. Sie können das fertige Beispiel am Ende des Abschnittes kopieren und die Klammern entfernen, um zu sehen, wie die Fehlermeldung aussehen kann, die Sie in solch einem Fall erhalten würden. @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 Es ist nicht notwendig, die simultane Konstruktion @code{<< .. >>} innerhalb des zweiten Manualsystems und des Pedalsystems zu benutzen, denn sie enthalten nur eine Stimme. Andererseits schadet es nichts, sie zu schreiben, und es ist eine gute Angewohnheit, immer die spitzen Klammern nach einem @code{\new Staff} zu schreiben, wenn mehr als eine Stimme vorkommen könnten. Für Stimmen (@code{Voice}) dagegen gilt genau das Gegenteil: eine neue Stimme sollte immer von geschweiften Klammern (@code{@{ .. @}}) gefolgt werden, falls Sie ihre Noten in mehrere Variable aufteilen, die nacheinander gesetzt werden sollen. Fügen wir also diese Struktur zu der @code{\score}-Umgebung hinzu und bringen wir die Einzüge in Ordnung. Gleichzeitig wollen wir die richtigen Schlüssel setzen und die Richtung der Hälse und Bögen in den Stimmen des oberen Systems kontrollieren, indem die obere Stimme ein @code{\voiceOne}, die untere dagegen ein @code{\voiceTwo} erhält. Die Taktart und Tonart werden mit unserer fertigen Variable @code{\keyTime} eingefügt. @example \score @{ << % PianoStaff and Pedal Staff must be simultaneous \new PianoStaff << \new Staff = "ManualOne" << \keyTime % set time signature and key \clef "treble" \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} >> % end ManualOne Staff context \new Staff = "ManualTwo" << \keyTime \clef "bass" \new Voice @{ \ManualTwoMusic @} >> % end ManualTwo Staff context >> % end PianoStaff context \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice @{ \PedalOrganMusic @} >> % end PedalOrgan Staff >> @} % end Score context @end example @cindex Spreizbarkeit von Systemen @cindex Dehnung von Systemen, vertikal @cindex Systeme, vertikales Dehnen Das Layout des Orgelsystems oben ist fast perfekt, es hat jedoch einen kleinen Fehler, den man nicht bemerken kann, wenn man nur ein einzelnes System betrachtet: Der Abstand des Pedalsystems zum System der linken Hand sollte in etwa der gleiche sein wie der Abstand zwischen den Systemen der linken und rechten Hand. Die Dehnbarkeit von Systemen in einem Klaviersystem (@code{PianoStaff})-Kontext ist beschränkt (sodass der Abstand zwischen den Systemen der linken und rechten Hand nicht zu groß wird), und das Pedalsystem sollte sich genauso verhalten. @cindex Untereigenschaft @cindex sub-properties @cindex graphische Objekte @cindex Grobs @cindex Objekte, graphische Die Spreizbarkeit von Systemen kann mit der @code{staff-staff-spacing}-Eigenschaft des @code{VerticalAxisGroup}-@qq{graphischen Objekts} (üblicherweise als @qq{Grob} innerhalb der LilyPond-Dokumentation bezeichnet) kontrolliert werden. An dieser Stelle brauchen Sie sich um die Details nicht zu sorgen, sie werden später erklärt. Sehr Neugierige können sich den Abschnitt @ruser{Grundlagen zum Verändern von Eigenschaften} anschauen. Im Moment kann man nicht nur die @code{strechability} (Spreizbarkeit)-Untereigenschaft verändern, darum müssen hier auch die anderen Untereigenschaften kopiert werden. Die Standardeinstellungen dieser Untereigenschaften finden sich in der Datei @file{scm/define-grobs.scm} in den Definitionen für den @code{VerticalAxisGroup}-Grob. Der Wert für @code{strechability} wird aus der Definition für das Klaviersystem (@code{PianoStaff}) entnommen (in der Datei @file{ly/engraver-init.ly}), damit die Werte identisch sind. @example \score @{ << % PianoStaff and Pedal Staff must be simultaneous \new PianoStaff << \new Staff = "ManualOne" << \keyTime % set key and time signature \clef "treble" \new Voice @{ \voiceOne \ManualOneVoiceOneMusic @} \new Voice @{ \voiceTwo \ManualOneVoiceTwoMusic @} >> % end ManualOne Staff context \new Staff = "ManualTwo" \with @{ \override VerticalAxisGroup #'staff-staff-spacing #'stretchability = 5 @} << \keyTime \clef "bass" \new Voice @{ \ManualTwoMusic @} >> % end ManualTwo Staff context >> % end PianoStaff context \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice @{ \PedalOrganMusic @} >> % end PedalOrgan Staff >> @} % end Score context @end example Damit ist das Grundgerüst fertig. Jede Orgelmusik mit drei Systemen hat die gleiche Struktur, auch wenn die Anzahl der Stimmen in einem System sich ändern kann. Jetzt müssen wir nur noch die Noten einfügen und alle Teile zusammenfügen, indem wir die Variablen mit einem Backslash in die Partitur einbauen. @lilypond[quote,verbatim,ragged-right,addversion] \header { title = "Jesu, meine Freude" composer = "J S Bach" } keyTime = { \key c \minor \time 4/4 } ManualOneVoiceOneMusic = \relative g' { g4 g f ees | d2 c2 | } ManualOneVoiceTwoMusic = \relative c' { ees16 d ees8~ ees16 f ees d c8 d~ d c~ | c8 c4 b8 c8. g16 c b c d | } ManualTwoMusic = \relative c' { c16 b c8~ c16 b c g a8 g~ g16 g aes ees | f16 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" << \keyTime % set time signature and key \clef "treble" \new Voice { \voiceOne \ManualOneVoiceOneMusic } \new Voice { \voiceTwo \ManualOneVoiceTwoMusic } >> % end ManualOne Staff context \new Staff = "ManualTwo" \with { \override VerticalAxisGroup #'staff-staff-spacing #'stretchability = 5 } << \keyTime \clef "bass" \new Voice { \ManualTwoMusic } >> % end ManualTwo Staff context >> % end PianoStaff context \new Staff = "PedalOrgan" << \keyTime \clef "bass" \new Voice { \PedalOrganMusic } >> % end PedalOrgan Staff context >> } % end Score context @end lilypond @seealso Glossar: @rglos{system}. @node Úspora psaní na stroji pomocí proměnných a funkcí @subsection Úspora psaní na stroji pomocí proměnných a funkcí @translationof Saving typing with variables and functions @cindex Variablen Bis jetzt wurde immer derartige Notation vorgestellt: @lilypond[quote,verbatim,ragged-right] hornNotes = \relative c'' { c4 b dis c } \score { { \hornNotes } } @end lilypond Sie können sich vorstellen, dass das etwa für minimalistische Musik sehr nützlich sein könnte: @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 Diese Variablen (die man auch als Makros oder Benutzer-Befehl bezeichnet) können jedoch auch für eigene Anpassungen eingesetzt werden: @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 Derartige Variablen sind offensichtlich sehr nützlich, zu Tipparbeit zu ersparen. Aber es lohnt sich schon, sie zu benutzen, wenn man sie nur einmal benutzen will, denn sie vereinfachen die Struktur einer Datei sehr stark. Hier das vorige Beispiel ohne jede Benutzung von Variablen. Es ist sehr viel schwerer lesbar, besonders die letzte Zeile. @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 Bisher haben wir vor allem statische Ersetzungen betrachtet: wenn LilyPond etwa @code{\padText} sieht, wird es ersetzt mit all dem Code, mit dem wir es definiert haben (also alles, was sich rechts von @code{padtext=} befindet). LilyPond kann auch nicht-statische Ersetzungen bewältigen. Man kann sie sich als Funktionen vorstellen. @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 Die Benutzung von Variablen ist auch eine gute Möglichkeit, Arbeit zu vermeiden, wenn sich einmal die Syntax von LilyPond ändern sollte (siehe auch @rprogram{Updating old input files with convert-ly}). Wenn man eine einzige Definition hat (wie etwa @code{\dolce}), die für alle Vorkommen in der Notation eingesetzt wird, muss man auch nur einmal diese Definition aktualisieren, anstatt dass man sie in jeder @file{.ly}-Datei einzeln ändern müsste. @node Notové zápisy a hlasy @subsection Notové zápisy a hlasy @translationof Scores and parts In Orchestermusik werden alle Noten zweimal gedruckt. Einmal in einer Stimme für die Spieler, und einmal ein der Partitur für den Dirigenten. Variablen können benutzen, um sich doppelte Arbeit zu ersparen. Die Noten werden nur einmal eingegeben und in einer Variable abgelegt. Der Inhalt der Variable wird dann benutzt um sowohl die Stimme als auch die Partitur zu erstellen. Es bietet sich an, die Noten in einer extra Datei abzulegen. Nehmen wir an, dass die Datei @file{horn-music.ly} folgende Noten eines Horn/@/Fagott-Duos enthält: @example hornNotes = \relative c @{ \time 2/4 r4 f8 a | cis4 f | e4 d | @} @end example @noindent Eine Stimme wird also erstellt, indem man folgendes in eine Datei schreibt: @example \include "horn-music.ly" \header @{ instrument = "Horn in F" @} @{ \transpose f c' \hornNotes @} @end example Die Zeile @example \include "horn-music.ly" @end example @noindent ersetzt den Inhalt von @file{horn-music.ly} an dieser Position in der Datei, sodass @code{hornNotes} im Folgenden definiert ist. Der Befehl @code{\transpose f@tie{}c'} zeigt an, dass das Argument (@code{\hornNotes}) eine Quinte nach oben transponiert werden soll. Klingendes @code{f} wird als @code{c'}, wie es die Stimmung eines normalen F-Hornes verlangt. Die Transposition kann in folgender Notenausgabe gesehen werden: @lilypond[quote,ragged-right] \transpose f c' \relative c { \time 2/4 r4 f8 a | cis4 f | e4 d | } @end lilypond In Ensemblestücken sind manche Stimmen für viele Takte stumm. Das wird durch eine besondere Pause notiert, die Mehrtaktpause. Sie wird mit einem großen @code{R} notiert, gefolgt von der Dauer (@code{1}@tie{}für eine Ganze, @code{2}@tie{}für eine Halbe usw.). Indem man die Dauern multipliziert, kann man auch längere Dauern erzeugen. Diese Pause etwa dauert drei Takte in einem 2/4-Takt: @example R2*3 @end example Wenn die Stimme gesetzt wird, werden Mehrtaktpausen komprimiert. Das geschieht, indem man folgendes in die Datei schreibt: @example \set Score.skipBars = ##t @end example @noindent Dieser Befehl setzt die Eigenschaft @code{skipBars} im @code{Score}-Kontext auf wahr (@code{##t}). Die Pause und diese Option zu der Musik von oben hinzugefügt, ergibt folgendes Beispiel: @lilypond[quote,ragged-right] \transpose f c' \relative c { \time 2/4 \set Score.skipBars = ##t R2*3 | r4 f8 a | cis4 f | e4 d | } @end lilypond Die Partitur wird erstellt, indem man alle Noten kombiniert. Angenommen, die andere Stimme ist in @code{bassoonNotes} in der Datei @file{bassoon-music.ly} definiert, würde eine Partitur erstellt mit: @example \include "bassoon-music.ly" \include "horn-music.ly" << \new Staff \hornNotes \new Staff \bassoonNotes >> @end example @noindent woraus sich ergibt: @lilypond[quote,ragged-right] \relative c << \new Staff { \clef "treble" \time 2/4 R2*3 | r4 f8 a | cis4 f | e4 d | } \new Staff { \clef "bass" \time 2/4 r4 d,8 f | gis4 c | b4 bes | a8 e f4 | g4 d | gis4 f | } >> @end lilypond