[ << Standardeinstellungen verändern ] | [Anfang][Inhalt][Index] | [ Notationsübersicht >> ] |
[ < Rangfolge von Kontextwerten ] | [ Nach oben : Interpretationskontexte ] | [ Reihenfolge des Kontextlayouts > ] |
5.1.6 Neue Kontexte definieren
Bestimme Kontexte, wie Staff
oder Voice
, werden
erstellt, indem man sie mit einer Musikumgebung aufruft. Es ist
aber auch möglich, eigene neue Kontexte zu definieren, in denen
dann unterschiedliche Engraver benutzt werden.
Das folgende Beispiel zeigt, wie man etwa Voice
-Kontexte
von Grund auf neu bauen kann. Ein derartiger Kontext ähnelt
Voice
, es werden aber nur zentrierte Schrägstriche als
Notenköpfe ausgegeben. Das kann benutzt werden, um Improvisation
in Jazzmusik anzuzeigen.
Diese Einstellungen werden innerhalb der \context
-Umgebung
innerhalb der \layout
-Umgebung definiert:
\layout { \context { … } }
Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte im vorigen Beispiel eingesetzt werden.
Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu definieren:
\name ImproVoice
Weil dieser neue Kontext ähnlich wie Voice
ist, sollen die Befehle,
die in Voice
-Kontexten funktionieren, auch
in dem neuen Kontext funktionieren. Das wird erreicht, indem der
Kontext als Alias Voice
erhält:
\alias Voice
Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver hinzufügen, die für diese Aktionen zuständig sind:
\consists Note_heads_engraver \consists Text_engraver
aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
\consists Pitch_squash_engraver squashedPosition = #0
Der Pitch_squash_engraver
verändert Notenköpfe (die vom
Note_heads_engraver
erstellt werden) und setzt ihre vertikale
Position auf den Wert von squashedPosition
, in diesem Fall ist
das die Mittellinie.
Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
\override NoteHead.style = #'slash \hide Stem
Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
einem zusätzlichen Plugin, das mit dem Befehl \type
gekennzeichnet
werden muss. Dieser Typ solle immer Engraver_group
lauten:
\type Engraver_group
Alles zusammen haben wir folgende Einstellungen:
\context { \name ImproVoice \type Engraver_group \consists Note_heads_engraver \consists Text_engraver \consists Pitch_squash_engraver squashedPosition = #0 \override NoteHead.style = #'slash \hide Stem \alias Voice }
Kontexte sind hierarchisch. Wie wollen, dass ImproVoice
sich als Unterkontext von Staff
erkennt, wie eine normale
Stimme. Darum wird die Definition von Staff
mit dem
\accepts
-Befehl verändert:
\context { \Staff \accepts ImproVoice }
Das Gegenteil von \accepts
ist \denies
(verbietet), was
manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen
wieder benutzt werden sollen.
Beide Definitionen müssen in die \layout
-Umgebung geschrieben
werden:
\layout { \context { \name ImproVoice … } \context { \Staff \accepts ImproVoice } }
Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen notiert werden:
\relative { a'4 d8 bes8 \new ImproVoice { c4^"ad lib" c c4 c^"ausziehen" c c_"während des Spielens :)" } a1 }
[ << Standardeinstellungen verändern ] | [Anfang][Inhalt][Index] | [ Notationsübersicht >> ] |
[ < Rangfolge von Kontextwerten ] | [ Nach oben : Interpretationskontexte ] | [ Reihenfolge des Kontextlayouts > ] |