nächstes: Die Darstellung der Musik, voriges: Automatisierter Notensatz, aufwärts: Hintergrund
Während des Notensatzprozesses entscheidet sich, wo Symbole platziert werden. Das kann aber nur gelingen, wenn vorher entschieden wird, welche Symbole gesetzt werden sollen, also welche Notation benutzt werden soll.
Die heutige Notation ist ein System zur Musikaufzeichnung, das sich über die letzten 1000 Jahre entwickelt hat. Die Form, die heute üblicherweise benutzt wird, stammt aus dem frühen Barock. Auch wenn sich die grundlegenden Formen (also die Notenköpfe, das Fünfliniensystem) nicht verändert haben, entwickeln sich die Details trotzdem immer noch weiter, um die Errungenschaften der Neuen Musik darstellen zu können. Die Notation umfasst also 500 Jahre Musikgeschichte. Ihre Anwendung reicht von monophonen Melodien bis zu ungeheurem Kontrapunkt für großes Orchester.
Wie bekommen wir dieses vielköpfige Monster zu fassen?
Unsere Lösung ist es, eine strikte Trennung zwischen der Notation,
also welche Symbole benutzt werden, und dem Satz, also wohin sie
gesetzt werden, zu machen. Um das Problem anzupacken, haben wir
es in kleine (programmierbare) Happen zerteilt, so dass jede Art
von Symbol durch ein eigenes Plugin verarbeitet wird. Alle Plugins
kooperieren durch die LilyPond-Architektur. Sie sind vollständig
modular und unabhängig und können somit auch unabhängig voneinander
entwickelt werden. Der Schreiber, der die Musik in Graphik umwandelt,
ist ein Kopist oder Notenstecher (engl. engraver). Darum werden
die Plugins als engraver
bezeichnet.
Im nächsten Beispiel wird gezeigt, wie mit dem Plugin für die Notenköpfe,
dem Note_heads_engraver
(„Notenkopfstecher“) der Satz begonnen wird.
Dann fügt ein Staff_symbol_engraver
(„Notensystemstecher“)
die Notenlinien hinzu.
Der Clef_engraver
(„Notenschlüsselstecher“) definiert
eine Referenzstelle für das System.
Der Stem_engraver
(„Halsstecher“) schließlich fügt
Hälse hinzu.
Dem Stem_engraver
wird jeder Notenkopf mitgeteilt,
der vorkommt. Jedes Mal, wenn ein Notenkopf erscheint (oder mehrere bei
einem Akkord), wird ein Hals-Objekt erstellt und an den
Kopf geheftet. Wenn wir dann noch engraver für Balken, Bögen,
Akzente, Vorzeichen, Taktlinien, Taktangaben und Tonartbezeichnungen
hinzufügen, erhalten wir eine vollständige Notation.
Dieses System funktioniert gut für monophone Musik, aber wie geht es mit Polyphonie? Hier müssen sich mehrere Stimmen ein System teilen.
In diesem Fall benutzen beide Stimmen das System und die Vorzeichen gemeinsam, aber die Hälse, Bögen, Balken usw. sind jeder einzelnen Stimme eigen. Die engraver müssen also gruppiert werden. Die Köpfe, Hälse, Bögen usw. werden in einer Gruppe mit dem Namen „Voice context“ (Stimmenkontext) zusammengefasst, die engraver für den Schlüssel, die Vorzeichen, Taktstriche usw. dagegen in einer Gruppe mit dem Namen „Staff context“ (Systemkontext). Im Falle von Polyphonie hat ein Staff-Kontext dann also mehr als nur einen Voice-Kontext. Auf gleiche Weise können auch mehrere Staff-Kontexte in einen großen Score-Kontext (Partiturkontext) eingebunden werden.
Programmreferenz: Contexts.
Diese Seite ist für LilyPond-2.11.58 (Entwicklungszweig).
Fehler bitte an http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs melden.
Ihre Vorschläge für die Dokumentation sind willkommen.