GNU LilyPond

A Wikipédiából, a szabad enciklopédiából
(LilyPond szócikkből átirányítva)
GNU LilyPond

FejlesztőLilyPond development team[1]
Legfrissebb stabil kiadás2.24.3 (stabil verzió, https://gitlab.com/lilypond/lilypond/-/releases/v2.24.3, 2023. november 19.)[2]
Legfrissebb fejlesztői kiadás2.25.14 (bétaverzió, unstable version, https://gitlab.com/lilypond/lilypond/-/releases/v2.25.14, 2024. március 23.)[3]
Programozási nyelv
Operációs rendszer
Kategória
LicencGNU General Public License, version 3.0 or later
[lilypond.org A GNU LilyPond weboldala]

A GNU LilyPond egy kottaszedésre használható szabad szoftver. Automatikusan kottát állít elő egyszerű szöveges formátumú fájlokból. A programot 1996-ban kezdte el fejleszteni Han-Wen Nienhuys és Jan Nieuwenhuizen azzal a céllal, hogy a számítógép által előállított kotta „olyan életteli legyen, mintha kézzel szedték volna”.

Képességek[szerkesztés]

A LilyPond a gregorián kvadrátnotációtól kezdve a kortárs műveken keresztül a könnyűzenei slágerekig mindenféle zene szedésére alkalmas. Az általa előállított kottakép tipográfiailag kiváló minőségű. Képességei rugalmasan bővíthetők.

A legtöbb operációs rendszer, például Linux, Windows és OS X alatt is fut. A kottát PDF, PS, SVG vagy PNG, a hangzását pedig MIDI fájlba képes menteni. A többi kottaszerkesztő által exportált MusicXML formátumú fájlokat is beolvassa. Kiválóan együttműködik más dokumentumszedő rendszerekkel, mint pl. a LaTeX vagy a Texinfo, így jól használható szövegbe ágyazott kottapéldák szedésére is.

Formátum[szerkesztés]

% Példa a LilyPond
% általános formátumára
\book {
  \score {
    <<
      \new Staff {
        \relative  {
          \cleff
          \key
          \time
          dallam
        }
        \addlyrics {
          szöveg
        }
      }
    >>
    \header {  }
    \layout {  }
    \midi {  }
  }
}

A LilyPond bemenetét szöveges formában kell megadni. A bemeneti fájlok általában .ly kiterjesztéssel rendelkeznek.

Egy bemeneti fájlban egy vagy több könyv (\book) lehet. Minden könyv külön eredményfájlba kerül. Ugyanezt elérhetjük úgy is, hogy minden könyv külön bemeneti fájlban van.

Egy könyvben egy vagy több partitúra (\score) lehet. A partitúra egy mű, vagy annak egy opusza, de végső soron rajtunk áll, hogyan osztjuk részekre a kottát. Minden partitúrához megadhatók szöveges információk (\header, pl. szerző, cím) és a lapon való elhelyezkedés (\layout). A \midi utasítja a lilypond-ot midifájl generálására.

A partitúra kottasorokból (Staff) áll. A kottasoroknak közös ütemvonalaik vannak. Egy kottasorba kerülhet egy hangszer, vagy pl. zongoramű esetén az egyik kéz. A kottasor elején kulcs (\clef), előjegyzés (\key), az első sor előtt ütemjel (\time) áll. Ezeket elég egyszer megadni, de módosíthatók partitúrán ill. kottasoron belül is.

Egy kottasor egy vagy több szólam (voice) dallamát adja meg akkord vagy külön-külön hangjegyek formájában. Kórusmű esetén szövege (\addlyrics) lehet a partitúrának vagy az egyes kottasoroknak (ha a szólamok szövege különböző). Az összetartozó kottasort és szöveget << … >> közé kell zárni.

A szomszédos hangjegyek távolsága ritkán nagyobb egy oktávnál, ezért az oktáv-magasságot az előző hanghoz relatívan érdemes megadni, bár hangjegyenként is megadhatók. Az első hang magasságát a \relative utasítás adja meg.

Egyszerű kotta esetén a fenti utasítások jó része elhagyható. Ha pl. az egyetlen partitúra egyetlen kottasorból áll, és szövege sincs, elég a \relative blokkot megadni: Ha a hangjegyeket abszolút magassággal adjuk meg, csak a kapcsos zárójelre és annak tartalmára van szükség:

{
  \time 2/4% Ütemmutató
  \clef bass % Basszuskulcs
  c4 c g g a a g2
}

Ha a fenti bemenet a hullaho.ly-ben van, akkor a fordítás parancssorból:

lilypond hullaho.ly                  # eredmeny: hullaho.pdf
lilypond --png hullaho.ly            # eredmeny: hullaho.png
lilypond -d backend=svg hullaho.ly   # eredmeny: hullaho.svg

A második sor a következő PNG kimenetet adja:

Használata a Wikipédián[szerkesztés]

A kotta a Wikipédiába is beágyazható, és a lilypond által előállított midifájl is lejátszható. A fenti példát egyúttal kiegészítve a dallamszöveggel:

<score vorbis="1">
{
  \time 2/4% Ütemmutató
  \clef bass % Basszuskulcs
  c4 c g g a a g2
}
\addlyrics { Hull a pely -- hes fe -- hér  }
</score>

Az eredmény:


{
  \time 2/4% Ütemmutató
  \clef bass % Basszuskulcs
  c4 c g g a a g2
}
\addlyrics { Hull a pely -- hes fe -- hér hó }

A <score> parancs raw="1" paraméterével (csaknem) teljes LilyPond-programot tudunk beilleszteni. E nélkül csak néhány utasítást ért a wiki. A legfontosabbak: \addlyrics és \relative.

A dallam megadása[szerkesztés]

Hangnemek Lilypondban
Alap-
hang
Név Lilypond
dúr \major
\ionian
dór \dorian
mi fríg \phrygian
líd \lydian
szó mixolíd \mixolydian
moll \minor
\aeolian
ti lokriszi \locrian
Az Adeste fideles első néhány üteme LilyPonddal szedve.
  • Kulcs: \clef. Kulcsok: treble vagy french: hegedűkulcs (default), bass: basszuskulcs, alto, tenor, soprano, mezzosoprano, baritone, varbaritone, subbass, percussion, tab.
  • Előjegyzés: a hangnemet kell megadni. Pl.: \key g \minor: g-moll (két bé előjegyzés), \key g \major: G-dúr (egy kereszt). Nem szabványos (egy kereszt + egy bé) előjegyzésre példa a Kecskemét is kiállítja c. népdal kottája. Az előjegyzés nemcsak a kotta elejére tehető, hanem bárhová a hangjegyek között.
  • Ütem: pl. \time 2/4. Az utasítás előtti \numericTimeSignature a 4/4-et is szám formájában íratja ki.
  • Tempó: pl. \tempo "Allegro" 4 = 160. Akár a szöveg, akár a negyed hossza elhagyható. A tempó elrejthető; így csak a midire hat: \set Score.tempoHideNote = ##t.
  • Felütés: a hosszát kell megadni (a hosszt lásd alább, a hang hosszánál). Pl. az Adeste Fideles negyed felütése: \partial 4.

Egy hanghoz több adatot kell megadni. Az alábbi lista nem teljes:

  1. A hang 12-féle lehet: c, cis=des, d, dis=es, e, f, fis=ges, g, gis=as, a, ais=bes, b. A hangok neve nyelvfüggő, a magyarban h-val jelölt hang a lilypondban b, a magyar b a lilypondban bes.
  2. A hang oktávja. Az aposztróf (') eggyel magasabb, a vessző (,) eggyel alacsonyabb oktávot jelöl az előző hangnál (ha relatív megadást használunk). Kettő vagy több vessző ill. aposztróf is használható. Példa: gis''.
  3. A hang elé nem kell kitenni a módosítójelet: a hang nevéből és az előjegyzésből a lilypond automatikusan megteszi. Ha figyelmeztetésként mégis jelezni akarjuk (pl. mert változott a hangnem), ezt a hang után tett felkiáltójellel vagy kérdőjellel tehetjük. Az utóbbi esetben a kereszt, bé vagy feloldójel zárójelbe kerül.
  4. A hang hosszát szám adja meg. 1=egész, 2=fél, 4=negyed, 8=nyolcad, 16=tizenhatod. A számot pont követheti, ami másfélszeresére növeli a hosszt. Ha a hossz nincs megadva, azonos az előző hangéval. Ha a hosszúságot két hangjeggyel kell megadni (pl. ütemvonal miatt), a két hang közé tildét (~) kell tenni. Triola \times 2/3 { hang1, hang2, hang3 } alakban adható meg. Az \override TupletBracket #'bracket-visibility = ##t hatására a triolát alkotó három hangot össze is kapcsolja a lilypond. A beállítás alapértéke hamis (##f): ilyenkor csak a hármas szám jelzi a triolát.
  5. Szöveg/jel: a hangjegy alá vagy fölé írható. Az előbbi jele ^, az utóbbié _ (mint a TeX-ben). A szöveg lehet hangerőjel: \ppppp, \pppp, \ppp, \pp, \p, \mp, \mf, \f, \ff, \fff, \ffff, \fp, \sf, \sff, \sp, \spp, \sfz és \rfz. A \p pl. piano-t jelent. A „szöveg” lehet korona: \fermata. Ha a szöveg nem \-sel kezdődik, kiíródik a hangjegy fölé.
  6. Hajlítás: az ív elejét (, végét ) jelzi (természetesen más-más hangnál).
  7. dinamika: a crescendo jele \<, a descrescendoé \>. A végét \! jelzi.
  8. Gerendázás:[4] a gerenda eleje [, vége ].

A szünet betűjele r, hosszát a hang hosszával azonosan kell megadni. A cezúra neve \breathe. Alaphelyzetben az ötödik kottavonalon aposztrófként jelenik meg, de alakja változtatható.

Kottasor vége: \break. Ha a kottasorok hossza nagyon változó lesz, a lilypond figyelmen kívül hagyja.

A kotta vége: \bar "|."

Transzponálás[szerkesztés]

A kotta és a midifájl egymástól függetlenül transzponálható. A kotta transzponálása a teljes kottára vonatkozik, ezért csak a \score blokkjában adható meg, alblokkban nem. Alakja:

\transpose leírt_hang kiszedett_hang

Például a \transpose bes g kisterccel lefelé transzponálja a kiszedett kottát a \score-ban megadotthoz képest, beleértve az előjegyzéseket is. A B-dúr két bé előjegyzéséből egy kereszt előjegyzés lesz (G-dúr).

A midifájl transzponálása:

\transposition hang

Ahol hang azt adja meg, hogy az egyvonalas c (leírva: c') helyett mi hangozzék el.[5] A transzponálás arra a blokkra vonatkozik, amelyben a \transpose utasítás van, ill. ha azt blokk követi, csak arra a blokkra.

Pl. a \transposition a kisterccel lefelé transzponálja a midibeli hangokat, míg a \transposition c'' egy oktávval felfelé.

Előke, utóka[szerkesztés]

Kisebb hangjeggyel szedett hangok.

Az előkének négy formája van:

Utasítás Leírás Példa Eredmény
\grace Az előke hossza nem számít az ütembe. <score>{ \grace a'8 g'4 }</score>
{ \grace a'8 g'4 }
\slashedGrace Áthúzott hang. A hossza nem számít bele az ütembe. <score>{ \slashedGrace a'8 g'4 }</score>
{ \slashedGrace a'8 g'4 }
\acciaccatura Áthúzott, a hozzá tartozó hanggal kötőívvel összekötött hang. A hossza nem számít bele az ütembe. <score>{ \acciaccatura a'8 g'4 }</score>
{ \acciaccatura a'8 g'4 }
\appoggiatura A hozzá tartozó hanggal kötőívvel összekötött hang. A hosszával a hozzá tartozó hangot rövidíti le. <score>{ \appoggiatura a'8 g'4 }</score>
{ \appoggiatura a'8 g'4 }

Először a fenti négy kulcsszó valamelyikét kell leírni, azt követi az alaphang, majd az előke/utóka (ha több hangból áll, { } között).

Az utóka kulcsszava: \afterGrace. Először az alaphangot kell megadni, majd az utókát:[6]

<score>{ \transposition c' \afterGrace a' g'8 }</score>

{ \transposition c' \afterGrace a' g'8 }

Szöveg megadása[szerkesztés]

A szöveget szótagolva kell megadni \addlyrics { szöveg } formában. A szótagokat szóközök közé írt dupla kötőjellel (--) kell elválasztani. A lilypond automatikusan rendeli hozzá a szótagokat a hangokhoz, az ívvel összekötött hangokhoz egy szótagot. A -- jel helyére a kottában két szótag közé középre írt elválasztójel kerül, szükség esetén pedig el is marad.

Ha egy hanghoz több szót vagy szótagot akarunk írni, szóköz helyett aláhúzással (_) kell őket elválasztani. Tipikus példa magyarban a „s” szócska.

Egy dallamrészlethez több szöveg is megadható. Lásd pl. a Széles a Duna, keskeny a partja kottáját.

Ha bizonyos hangokhoz nem akarunk szöveget írni, a \repeat unfold n { \skip 1 } alakban hagyhatjuk ki, ahol n a kihagyott hangjegyek száma (függetlenül a hosszúságuktól).

Ismétlés[szerkesztés]

Alakja:

\repeat volta szám { dallamrészlet }
\alternative {
     { 1. dallamvég }
     { 2. dallamvég }
}

ahol szám az ismétlések száma. Az első ismétlés után dallamrészletet az első alternatíva, a második után a második követi. Egyszerű ismétléskor a \alternative elmarad.

Az ismétlésnek két módja van. volta módban a dallam ismétlőjelek közé kerül a kottában. Ha a volta helyett az unfold szót használjuk, a lilypond kétszer fogja kiszedni ugyanazt a dallamot vagy szöveget.

Ha az ismétlődő dallamot a kottában ismétlőjelek között szeretnénk látni, a midifájlban viszont kétszer hallani, akkor ugyanarról a dallamról külön állítjuk elő a kottát és a midifájlt (a lilypond fájlban két \score lesz). Hogy a dallamot ne kelljen kétszer leírni, érdemes azt változóba tenni.[7][8][9] Az \unfoldRepeats utasítás hatására a volta típusú ismétlés unfold típusúra változik. Az utasításnak akkor van értelme, ha a dallam változóban van: a kottában és a midiben ugyanazt a változót lehet használni.

A Csordapásztorok szócikkben látható példa e megoldásra.

Példa[szerkesztés]


\header {
        tagline = ""    % ne legyen copyright szöveg
	}
keret = {               % az első és utolsó sor kottája egyforma: változóba tesszük, hogy egyszer kelljen leírni
        \relative g' {  % célszerű megadni minden változóban, mihez relatív a kotta, egyébként a használat helyétől (az előző hangtól) függne az oktáv
%       Megyen mar a hajnalcsillag lefe- le,
         g8 a   g  e  g  f   e  d   e c4. c4 r \bar "||" } 
}
dallam = {              % a teljes kottát is változóba tesszük, mert kétszer fogjuk használni
      \relative c' {    % az első hang a kétvonalas c-hez relatív
      \key c \major     % c dúr
      \numericTimeSignature \time 4/4         % 4/4-es ütem
      \tempo 4 = 60     % 60 negyed / perc
      \set Staff.midiInstrument = "fretless bass"        % hangszín
      \transposition c'
        \keret          % 1. kottasor
        \repeat unfold 2 { \break             % a 2. és 3. kottasor első két üteme
%       az  én kedves galambom           most megyen hazafelé,
        c'8 b   a  b   c b  a4  \time 2/4 g8   e  c   e \time 4/4 }
        \alternative {
                { g g4. g4 r  \bar "||" }                % a 2. kottasor utolsó üteme
                { g4 g d r    \bar "||" }                % a 3. kottasor utolsó üteme
        } \break        % új kottasor
        \keret          % 4. kottasor
        \bar "|."       % a kottát záró kettős vonal
      }
}
% Eddig csak két változót definiáltunk, kottát, szöveget, audiót még nem.
% a "dallam" nevű változóban van a teljes kotta; a másik változót már nem fogjuk használni.
\score {
   <<                 % a kotta és szöveg összerendelése
   \dallam            % a teljes kotta
   \addlyrics {       % a dal szövege
        Me -- gyen már a haj -- nal -- csil -- lag le -- fe -- lé,
        az én ked -- ves ga -- lam -- bom most me -- gyen ha -- za -- fe -- lé,
        lá -- bán van a csiz -- má -- ja, lak -- kos szá -- rú kis csiz -- ma,
        rá -- sü -- tött a haj -- nal -- csil -- lag su -- ga -- ra.
   }
   >>                 % a kotta és szöveg összerendelésének vége
   \header {          % a kotta feliratai
     title = "Megyen már a hajnalcsillag"
%     composer = ""
     poet = "Népdal"
   }
   \layout { 
        indent = 0.0\cm     % az első kottasor behúzásának tiltása
   }
}
\paper { 
	page-count = 1
	paper-height=120\mm          % a kotta magassága
	paper-width = 150\mm         % a kotta szélessége
}
% A <score raw=1> nem teszi lehetővé midifájl beillesztését a kottát tartalmazó \score-ba, ezért külön \score-t csinálunk a midinek.
% Ez a wikibe ágyazott lilypond korlátja, az önálló lilypondban nincs ilyen megkötés.
\score {                             % csak midit tartalmaz, kottát és szöveget nem
   \unfoldRepeats                    % az összes ismétlést szedje ki, az ismétlőjelest is. Ilyen a példában nincs, de a midifájlt mindig így célszerű megadni.
   \dallam                           % itt használjuk másodszor a kottát: ezért van változóban
   \midi { }                         % midi előállíttatása
}


A dal első és utolsó sora egyforma, ezért ezt változóba tesszük. A második és harmadik sor csak a végében különbözik: alternatívával ismételjük. Változót csak raw=1-gyel tud a beágyazott lilypond.

A beágyazott lilypond (score) 0.2-es változatában row=1 használatakor egy partitúrában nem lehet dallam és midi is, ezért két partitúrát készítünk: az elsőben a kotta, a másodikban a midifájl van. Hogy a második partitúrában ne kelljen még egyszer leírni, az egész kottát is változóba tesszük.

<score vorbis="1" raw="1">
\header {
        tagline = ""    % ne legyen copyright szöveg
	}
keret = {               % az első és utolsó sor kottája egyforma: változóba tesszük, hogy egyszer kelljen leírni
        \relative g' {  % célszerű megadni minden változóban, mihez relatív a kotta, egyébként a használat helyétől (az előző hangtól) függne az oktáv
%       Megyen mar a hajnalcsillag lefe- le,
         g8 a   g  e  g  f   e  d   e c4. c4 r \bar "||" } 
}
dallam = {              % a teljes kottát is változóba tesszük, mert kétszer fogjuk használni
      \relative c' {    % az első hang a kétvonalas c-hez relatív
      \key c \major     % c dúr
      \numericTimeSignature \time 4/4         % 4/4-es ütem
      \tempo 4 = 60     % 60 negyed / perc
      \set Staff.midiInstrument = "fretless bass"        % hangszín
      \transposition c'
        \keret          % 1. kottasor
        \repeat unfold 2 { \break             % a 2. és 3. kottasor első két üteme
%       az  én kedves galambom           most megyen hazafelé,
        c'8 b   a  b   c b  a4  \time 2/4 g8   e  c   e \time 4/4 }
        \alternative {
                { g g4. g4 r  \bar "||" }                % a 2. kottasor utolsó üteme
                { g4 g d r    \bar "||" }                % a 3. kottasor utolsó üteme
        } \break        % új kottasor
        \keret          % 4. kottasor
        \bar "|."       % a kottát záró kettős vonal
      }
}
% Eddig csak két változót definiáltunk, kottát, szöveget, audiót még nem.
% a "dallam" nevű változóban van a teljes kotta; a másik változót már nem fogjuk használni.
\score {
   <<                 % a kotta és szöveg összerendelése
   \dallam            % a teljes kotta
   \addlyrics {       % a dal szövege
        Me -- gyen már a haj -- nal -- csil -- lag le -- fe -- lé,
        az én ked -- ves ga -- lam -- bom most me -- gyen ha -- za -- fe -- lé,
        lá -- bán van a csiz -- má -- ja, lak -- kos szá -- rú kis csiz -- ma,
        rá -- sü -- tött a haj -- nal -- csil -- lag su -- ga -- ra.
   }
   >>                 % a kotta és szöveg összerendelésének vége
   \header {          % a kotta feliratai
     title = "Megyen már a hajnalcsillag"
%     composer = ""
     poet = "Népdal"
   }
   \layout { 
        indent = 0.0\cm     % az első kottasor behúzásának tiltása
   }
}
\paper { 
	page-count = 1
	paper-height=120\mm          % a kotta magassága
	paper-width = 150\mm         % a kotta szélessége
}
% A <score raw=1> nem teszi lehetővé midifájl beillesztését a kottát tartalmazó \score-ba, ezért külön \score-t csinálunk a midinek.
% Ez a wikibe ágyazott lilypond korlátja, az önálló lilypondban nincs ilyen megkötés.
\score {                             % csak midit tartalmaz, kottát és szöveget nem
   \unfoldRepeats                    % az összes ismétlést szedje ki, az ismétlőjelest is. Ilyen a példában nincs, de a midifájlt mindig így célszerű megadni.
   \dallam                           % itt használjuk másodszor a kottát: ezért van változóban
   \midi { }                         % midi előállíttatása
}
</score>

Szerkesztők[szerkesztés]

A kényelmes szerkesztés céljából több olyan szövegszerkesztő-kiterjesztés létezik, mely LilyPond-specifikus funkciókkal bír, ilyen például a LilyPondTool vagy az Elysium.

Létezik grafikus felület is a gyors bevitelhez, például a Denemo, illetve a szabad kottaszerkesztő szoftverek legtöbbje, pl. a MuseScore képes a kottát a LilyPond formátumába menteni.

Kottatárak[szerkesztés]

Néhány online kottagyűjtemény, amely LilyPonddal szedett kottákat tartalmaz:

Jegyzetek[szerkesztés]

  1. Authors. LilyPond Development team. (Hozzáférés: 2012. december 17.)
  2. Jonas Hahnfeld: LilyPond 2.24.3 released!, 2023. november 19.
  3. Jonas Hahnfeld: LilyPond 2.25.14, 2024. március 23.
  4. Gerendázás: a nyolcadok, tizenhatodok, stb. jelölése a hangjegyszárak vízszintes összekötésével.
  5. A \transposition és \transpose közötti formai különbség feltehetően a két utasítás összetévesztését hivatott elkerülni.
  6. A \transposition nélkül a példa nem működik. Ez a MediaWiki 0.2-es verziójú Score kiterjesztésének hibája.
  7. Változók bárhol használhatók a lilypond fájlban, nemcsak ismétléskor.
  8. Az ismétlés elkerülésének másik módja külön fájl használata, mely a \include "fájlnév" utasítással illeszthető be a megfelelő helyekre. A \include kényelmes, ha ugyanarra a dallamra több lilypond-fájlból szeretnénk hivatkozni, viszont a Wikipédiában nem használható.
  9. A lilypond-változót a programozási nyelvekben nem változónak, hanem makrónak nevezik.

Források[szerkesztés]

További információk[szerkesztés]

Grafikus felületek lilypondhoz:

Kapcsolódó lapok[szerkesztés]