5.1.2 Objekte und Schnittstellen (LilyPond Handbuch zum Lernen)

#### 5.1.2 Objekte und Schnittstellen

Optimierung bedeutet, die internen Operationen und Strukturen des LilyPond-Programms zu verändern, darum sollen hier zunächst die wichtigsten Begriffe erklärt werden, die zur Beschreibung dieser Operationen und Strukturen benutzt werden.

Der Begriff „Objekt“ ist ein allgemeiner Begriff, mit dem die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond während der Bearbeitung des Quelltextes erstellt. Wenn etwa ein Befehl wie `\new Staff` auftritt, wird ein neues Objekt vom Typ `Staff` erstellt. Dieses Objekt `Staff` enthält dann alle Eigenschaften, die mit diesem speziellen Notensystem verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und spezifische Angaben über die Engraver, die innerhalb dieses Systems eingesetzt werden. Für alle anderen Kontexte gibt es genauso Objekte, die deren Eigenschaften beinhalten, beispielsweise für `Voice`-Objekte, `Score`-Objekte, `Lyrics`-Objekte, aber auch für Objekte, die Notationselemente wie die Taktstriche, Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes Objekt hat eine eigene Gruppe an Eigenschaftswerten.

Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die Notationselemente der gesetzten Ausgabe repräsentieren, also Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden „Layout-Objekte“, oft auch „Graphische Objekte“ genannt. Daraus resultiert die künstliche Abkürzung „Grob“. Diese sind auch Objekte im allgemeinen Sinn und haben genauso Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position, Farbe usw.

Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen, Crescendo-Klammern, Oktavierungszeichen und viele andere Grobs sind nicht an einer Stelle platziert – sie haben vielmehr einen Anfangspunkt, einen Endpunkt und eventuell noch andere Eigenschaften, die ihre Form bestimmen. Objekte mit solch einer erweiterten Gestalt werden als „Strecker“ (engl. Spanners) bezeichnet.

Strecker können nach ihrer Erzeugung nicht verändert werden. Dies schließt `StaffSymbol` und `LedgerLineSpanner` ein, die sich über die ganze Partitur fortsetzen, außer wenn sie durch den Befehlt `\stopStaff` beendet und dann mit `\startStaff` neu erzeugt werden.

Darüber hinaus gibt es ‚abstrakte‘ Grobs, die selbst keinen Ausdruck irgendwelcher Art erzeugen. Vielmehr sammeln sie, positionieren oder verwalten andere Grobs. Typische Beispiele hierfür sind `DynamicLineSpanner`, `BreakAlignment`, `NoteColumn`, `VerticalAxisGroup`, `NonMusicalPaperColumn` und Ähnliche. Wir werden uns später mit einigen von ihnen noch näher befassen.

Es bleibt uns noch übrig zu erklären, was „Schnittstellen“ (engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich sind, haben sie doch oft gemeinsame Eigenschaften, die auf die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise haben eine Farbe, eine Größe, eine Position usw. und alle diese Eigenschaften werden von LilyPond auf die gleiche Weise verarbeitet, während der Quelltext in Notensatz umgesetzt wird. Um die internen Operationen zu vereinfachen, sind alle diese gemeinsamen Prozesse und Eigenschaften in einem Objekt mit der Bezeichnung `grob-interface` (Schnittstelle eines graphischen Objektes) zusammengefasst. Es gibt viele andere Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung besitzen, welche auf `-interface` endet. Insgesamt gibt es über 100 dieser Schnittstellen. Wir werden später sehen, was es damit auf sich hat.

Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung kommen sollen.

#### LilyPond Handbuch zum Lernen v2.26.0 (stable-branch).

- 1 Installing
  - 1.1 Graphical setup
  - 1.2 Command line setup
- 2 Tutorium
  - 2.1 Eine Quelldatei übersetzen
  - 2.2 Wie werden Eingabe-Dateien geschrieben
    - 2.2.1 Einfache Notation
      - Tonhöhen
      - Tondauern (Rhythmen)
      - Pausen
      - Taktartangabe
      - Tempobezeichnung
      - Notenschlüssel
      - Alles zusammen
    - 2.2.2 Arbeiten an Eingabe-Dateien
  - 2.3 Fehlerbehandlung
    - 2.3.1 Allgemeine Fehlerbehandlungstipps
    - 2.3.2 Einige häufige Fehler
  - 2.4 Wie die Handbücher gelesen werden sollten
    - 2.4.1 Ausgelassenes Material
    - 2.4.2 Anklickbare Beispiele
    - 2.4.3 Überblick über die Handbücher
- 3 Übliche Notation
  - 3.1 Notation auf einem System
    - 3.1.1 Taktstriche und Taktüberprüfung
      - Taktstriche
      - Taktüberprüfungen
    - 3.1.2 Tonhöhen und Tonartbezeichnungen (Vorzeichen)
      - Tonhöhenveränderungen
      - Tonartbezeichnungen (Vorzeichen)
      - Warnung bzgl. Tonartbezeichnungen und Tonhöhen
    - 3.1.3 Bindebögen und Legatobögen
      - Bindebögen
      - Legatobögen
      - Phrasierungsbögen
      - Achtung Bindebögen sind nicht Legatobögen
    - 3.1.4 Artikulationszeichen und Lautstärke
      - Artikulationszeichen
      - Fingersätze
      - Dynamik
    - 3.1.5 Text hinzufügen
    - 3.1.6 Automatische und manuelle Balken
    - 3.1.7 Zusätzliche rhythmische Befehle
      - Auftakt
      - N-tolen
      - Verzierungen
  - 3.2 Mehrere Noten auf einmal
    - 3.2.1 Musikalische Ausdrücke erklärt
      - Analogie mathematische Ausdrücke
      - Gleichzeitige musikalische Ausdrücke mehrere Notensysteme
      - Gleichzeitige musikalische Ausdrücke ein Notensystem
    - 3.2.2 Mehrere Notensysteme
    - 3.2.3 Notensysteme gruppieren
    - 3.2.4 Noten zu Akkorden verbinden
    - 3.2.5 Mehrstimmigkeit in einem System
  - 3.3 Lieder
    - 3.3.1 Einfache Lieder setzen
    - 3.3.2 Text an einer Melodie ausrichten
    - 3.3.3 Text zu mehreren Systemen
  - 3.4 Letzter Schliff
    - 3.4.1 Stücke durch Variablen organisieren
    - 3.4.2 Titel hinzufügen
    - 3.4.3 Absolute Notenbezeichnungen
    - 3.4.4 Nach dem Tutorium
- 4 Grundbegriffe
  - 4.1 Wie eine LilyPond-Eingabe-Datei funktioniert
    - 4.1.1 Einführung in die Dateistruktur von LilyPond
    - 4.1.2 Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck
    - 4.1.3 Musikalische Ausdrücke ineinander verschachteln
    - 4.1.4 Über die Nicht-Schachtelung von Klammern und Bindebögen
  - 4.2 Voice enthält Noten
    - 4.2.1 Ich höre Stimmen
    - 4.2.2 Stimmen explizit beginnen
    - 4.2.3 Stimmen und Text
  - 4.3 Kontexte und Engraver
    - 4.3.1 Was sind Kontexte?
    - 4.3.2 Kontexte erstellen
    - 4.3.3 Was sind Engraver?
    - 4.3.4 Kontexteigenschaften verändern
    - 4.3.5 Engraver hinzufügen und entfernen
  - 4.4 Erweiterung der Vorlagen
    - 4.4.1 Sopran und Cello
    - 4.4.2 Vierstimmige SATB-Partitur
    - 4.4.3 Eine Partitur von Grund auf erstellen
    - 4.4.4 Tipparbeit durch Variablen und Funktionen einsparen
    - 4.4.5 Partituren und Stimmen
- 5 Die Ausgabe verbessern
  - 5.1 Grundlagen für die Optimierung
    - 5.1.1 Grundlagen zur Optimierung
    - 5.1.2 Objekte und Schnittstellen
    - 5.1.3 Regeln zur Benennung von Objekten und Eigenschaften
    - 5.1.4 Optimierungsmethoden
      - Der `\override`-Befehl
      - Der `\revert`-Befehl
      - Der `\once`-Präfix
      - Der `\tweak`-Befehl
      - Der `\single`-Präfix
  - 5.2 Die Referenz der Programminterna
    - 5.2.1 Eigenschaften von Layoutobjekten
    - 5.2.2 Eigenschaften, die Schnittstellen besitzen können
    - 5.2.3 Typen von Eigenschaften
  - 5.3 Erscheinung von Objekten
    - 5.3.1 Sichtbarkeit und Farbe von Objekten
      - Die `stencil`-Eigenschaft (Matrize)
      - The `break-visibility`-Eigenschaft (unsichtbar machen)
      - Die `transparent`-Eigenschaft (durchsichtig)
      - Die `color`-Eigenschaft (Farbe)
    - 5.3.2 Größe von Objekten
    - 5.3.3 Länge und Dicke von Objekten
  - 5.4 Positionierung von Objekten
    - 5.4.1 Automatisches Verhalten
    - 5.4.2 within-staff (Objekte innerhalb des Notensystems)
      - The `direction`-Eigenschaft (Richtung)
      - Fingersatz
    - 5.4.3 Objekte außerhalb des Notensystems
      - Die `outside-staff-priority`-Eigenschaft
      - Der `\textLengthOn`-Befehl (Textlänge berücksichtigen)
      - Positionierung von Dynamikzeichen
      - Verändern der Größe von grobs
  - 5.5 Vertikale Abstände
  - 5.6 Kollision von Objekten
    - 5.6.1 Verschieben von Objekten
    - 5.6.2 Überlappende Notation in Ordnung bringen
      - Die `padding`-Eigenschaft (auffüllen)
      - Die `right-padding`-Eigenschaft (rechts auffüllen)
      - The `staff-padding`-Eigenschaft (Systemfüllungseigenschaft)
      - Die `self-alignment-X`-Eigenschaft (Selbstausrichtung-X-Eigenschaft)
      - Die `staff-position`-Eigenschaft (Position innerhalb des Systems)
      - Die `extra-offset`-Eigenschaft (Genaues Positionieren)
      - Die `positions`-Eigenschaft (Ausrichtungseigenschaft)
      - Die `force-hshift`-Eigenschaft (horizontale Verschiebunseigenschaft)
    - 5.6.3 Beispiel aus dem Leben
  - 5.7 Weitere Optimierungen
    - 5.7.1 Andere Benutzung von Optimierungen
      - Noten zwischen unterschiedlichen Stimmen überbinden
      - Eine Fermate in MIDI simulieren
    - 5.7.2 Variablen für Layout Anpassungen einsetzen
    - 5.7.3 Formatvorlagen
    - 5.7.4 Mehr Information
    - 5.7.5 Fortgeschrittene Optimierungen mit Scheme
- Appendix A Vorlagen
  - A.1 Eingebaute Vorlagen
    - A.1.1 SATB Vorlage
    - A.1.2 SSAATTBB Vorlage
  - A.2 Vorlagen für ein einzelnes System
    - A.2.1 Nur Noten
    - A.2.2 Noten und Text
    - A.2.3 Noten und Akkordbezeichnungen
    - A.2.4 Noten, Text und Akkordbezeichnungen
  - A.3 Klaviervorlagen
    - A.3.1 Piano Solo
    - A.3.2 Klavier und Gesangsstimme
    - A.3.3 Klavier mit eingeschobenem Gesangstext
  - A.4 Vorlagen für Streichquartette
    - A.4.1 Streichquartett
    - A.4.2 Streichquartettstimmen
  - A.5 Vokalensemble
    - A.5.1 SATB-Partitur
    - A.5.2 SATB-Partitur und automatischer Klavierauszug
    - A.5.3 SATB mit daran ausgerichteten Kontexten
    - A.5.4 SATB auf vier Systemen
    - A.5.5 Sologesang und zweistimmiger Refrain
    - A.5.6 Kirchenlieder
    - A.5.7 Psalmengesang
  - A.6 Orchestervorlagen
    - A.6.1 Orchester, Chor und Klavier
  - A.7 Vorlagen für alte Notation
    - A.7.1 Transkription mensuraler Musik
    - A.7.2 Vorlage zur Transkription von Gregorianik
  - A.8 Andere Vorlagen
    - A.8.1 Jazz-Combo
- Appendix B GNU Free Documentation License
- Appendix C Register