[Top][Contents] |
LilyPond – Snippets
This document shows a selected set of LilyPond snippets from the LilyPond Snippet Repository (LSR). It is in the public domain. We would like to address many thanks to Sebastiano Vigna for maintaining LSR web site and database, and the University of Milano for hosting LSR. Please note that this document is not an exact subset of LSR: some
snippets come from input/new LilyPond sources directory, and
snippets from LSR are converted through Snippets are grouped by tags; tags listed in the table of contents match a section of LilyPond notation manual. Snippets may have several tags, and not all LSR tags may appear in this document. In the HTML version of this document, you can click on the file name or figure for each example to see the corresponding input file. |
Musical notation | ||
---|---|---|
Pitches | ||
Rhythms | ||
Expressive marks | ||
Repeats | ||
Simultaneous notes | ||
Staff notation | ||
Editorial annotations | ||
Text | ||
Specialist notation | ||
Vocal music | ||
Chords | ||
Keyboards | ||
Percussion | ||
Fretted strings | ||
Unfretted strings | ||
Winds | ||
Ancient notation | ||
World music | ||
Other collections | ||
Contexts and engravers | ||
Tweaks and overrides | ||
Paper and layout | ||
Titles | ||
Spacing | ||
MIDI | ||
Templates |
Zu mehr Information, wie dieses Handbuch unter den anderen Handbüchern positioniert, oder um dieses Handbuch in einem anderen Format zu lesen, besuchen Sie bitte Handbücher. Wenn Ihnen Handbücher fehlen, finden Sie die gesamte Dokumentation unter https://lilypond.org/. |
[ << Top ] | [Top][Contents] | [ Rhythms >> ] |
[ < Top ] | [ Up : Top ] | [ Ambitus pro Stimme hinzufügen > ] |
Pitches
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Pitches ] | [ Up : Pitches ] | [ Adding an ottava marking to a single voice > ] |
Ambitus pro Stimme hinzufügen
Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie manuell verschoben werden, um Zusammenstöße zu verhindern.
\new Staff << \new Voice \with { \consists "Ambitus_engraver" } \relative c'' { \override Ambitus.X-offset = 2.0 \voiceOne c4 a d e f1 } \new Voice \with { \consists "Ambitus_engraver" } \relative c' { \voiceTwo es4 f g as b1 } >>
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Ambitus pro Stimme hinzufügen ] | [ Up : Pitches ] | [ Aiken head thin variant noteheads > ] |
Adding an ottava marking to a single voice
If you have more than one voice on the staff, setting octavation in one
voice transposes the position of notes in all voices for the duration
of the ottava bracket. If the octavation is only intended to apply to
one voice, the Ottava_spanner_engraver
should be moved to
Voice
context.
\layout { \context { \Staff \remove Ottava_spanner_engraver } \context { \Voice \consists Ottava_spanner_engraver } } { \clef bass << { <g d'>1~ q2 <c' e'> } \\ { r2. \ottava -1 <b,,, b,,>4 ~ | q2 \ottava 0 <c e>2 } >> }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Adding an ottava marking to a single voice ] | [ Up : Pitches ] | [ Altering the length of beamed stems > ] |
Aiken head thin variant noteheads
Aiken head white notes get harder to read at smaller staff sizes, especially with ledger lines. Losing interior white space makes them appear as quarter notes.
\score { { \aikenHeads c''2 a' c' a % Switch to thin-variant noteheads \set shapeNoteStyles = ##(doThin reThin miThin faThin sol laThin tiThin) c'' a' c' a } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Aiken head thin variant noteheads ] | [ Up : Pitches ] | [ Ambitus > ] |
Altering the length of beamed stems
Stem lengths on beamed notes can be varied by overriding the
beamed-lengths
property of the details
of the
Stem
. If a single value is used as an argument, the length
applies to all stems. When multiple arguments are used, the first
applies to eighth notes, the second to sixteenth notes and so on. The
final argument also applies to all notes shorter than the note length
of the final argument. Non-integer arguments may also be used.
\relative c'' { \override Stem.details.beamed-lengths = #'(2) a8[ a] a16[ a] a32[ a] \override Stem.details.beamed-lengths = #'(8 10 12) a8[ a] a16[ a] a32[ a] r8 \override Stem.details.beamed-lengths = #'(8) a8[ a] \override Stem.details.beamed-lengths = #'(8.5) a8[ a] \revert Stem.details.beamed-lengths a8[ a] a16[ a] a32[ a] r16 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Altering the length of beamed stems ] | [ Up : Pitches ] | [ Ambitus after key signature > ] |
Ambitus
Ambitus indicate pitch ranges for voices.
Accidentals only show up if they are not part of the key
signature. AmbitusNoteHead
grobs also have ledger lines.
\layout { \context { \Voice \consists "Ambitus_engraver" } } << \new Staff { \relative c' { \time 2/4 c4 f' } } \new Staff { \relative c' { \time 2/4 \key d \major cis4 as' } } >>
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Ambitus ] | [ Up : Pitches ] | [ Ambitus mit vielen Stimmen > ] |
Ambitus after key signature
By default, ambitus are positioned at the left of the clef. The
\ambitusAfter
function allows for changing this
placement. Syntax is \ambitusAfter grob-interface
(see
Graphical
Object Interfaces for a list of possible values for
grob-interface
.)
A common use case is printing the ambitus between key signature and time signature.
\new Staff \with { \consists Ambitus_engraver } \relative { \ambitusAfter key-signature \key d \major es'8 g bes cis d2 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Ambitus after key signature ] | [ Up : Pitches ] | [ Notenkopfstile basierend auf der Tonleiterstufe erstellen > ] |
Ambitus mit vielen Stimmen
Indem man den Ambitus_engraver
im Staff
-Kontext
hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem
Fall, dass mehrere Stimmen sich im gleichen System befinden.
\new Staff \with { \consists "Ambitus_engraver" } << \new Voice \relative c'' { \voiceOne c4 a d e f1 } \new Voice \relative c' { \voiceTwo es4 f g as b1 } >>
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Ambitus mit vielen Stimmen ] | [ Up : Pitches ] | [ Automatically changing the stem direction of the middle note based on the melody > ] |
Notenkopfstile basierend auf der Tonleiterstufe erstellen
Die shapeNoteStyles
-(NotenFormenStile)-Eigenschaft kann benutzt
werden, um verschiedene Notenstile für jeden Schritt der Tonleiter
zu definieren (vorgegeben von der Tonart oder der „tonic“
(Tonika)-Eigenschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen,
welche beliebig sein können (geometrische Ausdrücke wie triangle
(Dreieck), cross
(Kreuz) und xcircle
(X-Kreis) sind erlaubt)
oder basierend auf einer alten amerikanischen Notensatztradition (einige
lateinische Notenbezeichnungen sind auch erlaubt).
Um alte amerikanische Liederbücher zu imitieren, gibt es einige
vordefinierte Notenstile wie etwa \aikenHeads
(im Stil von Aiken)
oder \sacredHarpHeads
(im Stil der Sacred Harp-Tradition).
Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den harmonischen Funktionen und dem Notenstil verloren geht.
fragment = { \key c \major c2 d e2 f g2 a b2 c } \new Staff { \transpose c d \relative c' { \set shapeNoteStyles = ##(do re mi fa #f la ti) \fragment } \break \relative c' { \set shapeNoteStyles = ##(cross triangle fa #f mensural xcircle diamond) \fragment } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Notenkopfstile basierend auf der Tonleiterstufe erstellen ] | [ Up : Pitches ] | [ Changing ottava text > ] |
Automatically changing the stem direction of the middle note based on the melody
LilyPond can alter the stem direction of the middle note on a staff so
that it follows the melody, by adding the Melody_engraver
to the
Voice
context.
The context property suspendMelodyDecisions
may be used to turn
off this behavior locally.
\relative c'' { \time 3/4 a8 b g f b g | \set suspendMelodyDecisions = ##t a b g f b g | \unset suspendMelodyDecisions c b d c b c | } \layout { \context { \Voice \consists "Melody_engraver" \autoBeamOff } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Automatically changing the stem direction of the middle note based on the melody ] | [ Up : Pitches ] | [ Changing the ambitus gap > ] |
Changing ottava text
Internally, \ottava
sets the properties ottavation
(for
example, to 8va
or 8vb
) and middleCPosition
. To
override the text of the bracket, set ottavation
after invoking
\ottava
.
Short text is especially useful when a brief ottava is used.
{ c'2 \ottava 1 \set Staff.ottavation = "8" c''2 \ottava 0 c'1 \ottava 1 \set Staff.ottavation = "Text" c''1 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Changing ottava text ] | [ Up : Pitches ] | [ Changing the interval of lines on the stave > ] |
Changing the ambitus gap
It is possible to change the default gap between the ambitus noteheads and the line joining them.
\layout { \context { \Voice \consists "Ambitus_engraver" } } \new Staff { \time 2/4 % Default setting c'4 g'' } \new Staff { \time 2/4 \override AmbitusLine.gap = 0 c'4 g'' } \new Staff { \time 2/4 \override AmbitusLine.gap = 1 c'4 g'' } \new Staff { \time 2/4 \override AmbitusLine.gap = 1.5 c'4 g'' } \paper { tagline = ##f }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Changing the ambitus gap ] | [ Up : Pitches ] | [ Clefs can be transposed by arbitrary amounts > ] |
Changing the interval of lines on the stave
staffLineLayoutFunction
is used to change the position of notes.
This snippet shows setting its value to ly:pitch-semitones
in
order to produce a chromatic scale with the distance between each space
and line of the stave equal to one semitone.
scale = \relative c' { a4 ais b c cis4 d dis e f4 fis g gis a1 } \new Staff \with { \remove "Accidental_engraver" staffLineLayoutFunction = #ly:pitch-semitones } { << \scale \context NoteNames { \set printOctaveNames = ##f \scale } >> }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Changing the interval of lines on the stave ] | [ Up : Pitches ] | [ Coloring notes depending on their pitch > ] |
Clefs can be transposed by arbitrary amounts
Clefs can be transposed by arbitrary amounts, not just by octaves.
\relative c' { \clef treble c4 c c c \clef "treble_8" c4 c c c \clef "treble_5" c4 c c c \clef "treble^3" c4 c c c }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Clefs can be transposed by arbitrary amounts ] | [ Up : Pitches ] | [ Creating a sequence of notes on various pitches > ] |
Coloring notes depending on their pitch
It is possible to color note heads depending on their pitch and/or their names: the function used in this example even makes it possible to distinguish enharmonics.
%Association list of pitches to colors. #(define color-mapping (list (cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red)) (cons (ly:make-pitch 0 0 SHARP) (x11-color 'green)) (cons (ly:make-pitch 0 1 FLAT) (x11-color 'green)) (cons (ly:make-pitch 0 2 NATURAL) (x11-color 'red)) (cons (ly:make-pitch 0 2 SHARP) (x11-color 'green)) (cons (ly:make-pitch 0 3 FLAT) (x11-color 'red)) (cons (ly:make-pitch 0 3 NATURAL) (x11-color 'green)) (cons (ly:make-pitch 0 4 SHARP) (x11-color 'red)) (cons (ly:make-pitch 0 5 NATURAL) (x11-color 'green)) (cons (ly:make-pitch 0 5 FLAT) (x11-color 'red)) (cons (ly:make-pitch 0 6 SHARP) (x11-color 'red)) (cons (ly:make-pitch 0 1 NATURAL) (x11-color 'blue)) (cons (ly:make-pitch 0 3 SHARP) (x11-color 'blue)) (cons (ly:make-pitch 0 4 FLAT) (x11-color 'blue)) (cons (ly:make-pitch 0 5 SHARP) (x11-color 'blue)) (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue)))) %Compare pitch and alteration (not octave). #(define (pitch-equals? p1 p2) (and (= (ly:pitch-alteration p1) (ly:pitch-alteration p2)) (= (ly:pitch-notename p1) (ly:pitch-notename p2)))) #(define (pitch-to-color pitch) (let ((color (assoc pitch color-mapping pitch-equals?))) (if color (cdr color)))) #(define (color-notehead grob) (pitch-to-color (ly:event-property (event-cause grob) 'pitch))) \score { \new Staff \relative c' { \override NoteHead.color = #color-notehead c8 b d dis ees f g aes } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Coloring notes depending on their pitch ] | [ Up : Pitches ] | [ Creating custom key signatures > ] |
Creating a sequence of notes on various pitches
In music that contains many occurrences of the same sequence of notes at different pitches, the following music function may prove useful. It takes a note, of which only the pitch is used.
This example creates the rhythm used throughout Mars, from Gustav Holst’s The Planets.
rhythm = #(define-music-function (p) (ly:pitch?) "Make the rhythm in Mars (the Planets) at the given pitch" #{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #}) \new Staff { \time 5/4 \rhythm c' \rhythm c'' \rhythm g }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Creating a sequence of notes on various pitches ] | [ Up : Pitches ] | [ Direction of merged ’fa’ shape note heads > ] |
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D minor with an extended range of printed flats.
\new Staff \with { \override StaffSymbol.line-count = #8 \override KeySignature.flat-positions = #'((-7 . 6)) \override KeyCancellation.flat-positions = #'((-7 . 6)) % presumably sharps are also printed in both octaves \override KeySignature.sharp-positions = #'((-6 . 7)) \override KeyCancellation.sharp-positions = #'((-6 . 7)) \override Clef.stencil = # (lambda (grob)(grob-interpret-markup grob #{ \markup\combine \musicglyph "clefs.C" \translate #'(-3 . -2) \musicglyph "clefs.F" #})) clefPosition = #3 middleCPosition = #3 middleCClefPosition = #3 } { \key d\minor f bes, f bes, }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Creating custom key signatures ] | [ Up : Pitches ] | [ Force a cancellation natural before accidentals > ] |
Direction of merged ’fa’ shape note heads
Using property NoteCollision.fa-merge-direction
, the direction
of „fa“ shape note heads („fa“, „faThin“, etc.) can be controlled
independently of the stem direction if two voices with the same pitch
and different stem directions are merged. If this property is not set,
the „down“ glyph variant is used.
{ \clef bass << { \aikenHeads f2 \override Staff.NoteCollision.fa-merge-direction = #UP f2 } \\ { \aikenHeads f2 f2 } >> }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Direction of merged ’fa’ shape note heads ] | [ Up : Pitches ] | [ Forcing a clef symbol to be displayed > ] |
Force a cancellation natural before accidentals
The following example shows how to force a natural sign before an accidental.
\relative c' { \key es \major bes c des \tweak Accidental.restore-first ##t eis }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Force a cancellation natural before accidentals ] | [ Up : Pitches ] | [ Generating random notes > ] |
Forcing a clef symbol to be displayed
When a clef sign has already been displayed and it has not been changed
to a different clef, then repeating the \clef
command will be
ignored by LilyPond, since it is not a change of clef. It is possible
to force the clef to be redisplayed using the command
\set Staff.forceClef = ##t
.
\relative c' { \clef treble c1 \clef treble c1 \set Staff.forceClef = ##t c1 \clef treble c1 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Forcing a clef symbol to be displayed ] | [ Up : Pitches ] | [ Hiding accidentals on tied notes at the start of a new system > ] |
Generating random notes
This Scheme-based snippet generates random notes. Use as
\randomNotes
n
from
to
dur
to generate n random notes between pitches from and to, with duration dur.
randomNotes = #(define-music-function (n from to dur) (integer? ly:pitch? ly:pitch? ly:duration?) (let ((from-step (ly:pitch-steps from)) (to-step (ly:pitch-steps to))) (make-sequential-music (map (lambda (_) (let* ((step (+ from-step (random (- to-step from-step)))) (pitch (ly:make-pitch 0 step 0))) #{ $pitch $dur #})) (iota n))))) \randomNotes 24 c' g'' 8
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Generating random notes ] | [ Up : Pitches ] | [ Keep change clefs full sized > ] |
Hiding accidentals on tied notes at the start of a new system
This shows how to hide accidentals on tied notes at the start of a new system.
\relative c'' { \override Accidental.hide-tied-accidental-after-break = ##t cis1~ cis~ \break cis } \paper { tagline = ##f }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Hiding accidentals on tied notes at the start of a new system ] | [ Up : Pitches ] | [ Makam-Beispiel > ] |
Keep change clefs full sized
When a clef is changed, the clef sign displayed is smaller than the
initial clef. This can be overridden with full-size-change
.
\relative c' { \clef "treble" c1 \clef "bass" c1 \clef "treble" c1 \override Staff.Clef.full-size-change = ##t \clef "bass" c1 \clef "treble" c1 \revert Staff.Clef.full-size-change \clef "bass" c1 \clef "treble" c1 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Keep change clefs full sized ] | [ Up : Pitches ] | [ Modifying the Ottava spanner slope > ] |
Makam-Beispiel
Makam ist eine türkische Melodie, in der 1/9-Tonabstände eingesetzt werden. Sehen Sie sich die Initialisierungsdatei makam.ly für weiter Information zu Tonhöhenbezeichnungen und Alterationen an (siehe Handbuch zum Lernen 2.25.22, 4.6.3 Weitere Information zu Hinweisen, wo diese Datei gespeichert ist).
% Initialize makam settings \include "makam.ly" \relative c' { \set Staff.keyAlterations = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) c4 cc db fk gbm4 gfc gfb efk fk4 db cc c }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Makam-Beispiel ] | [ Up : Pitches ] | [ Untypische Tonarten > ] |
Modifying the Ottava spanner slope
It is possible to change the slope of the Ottava spanner.
\relative c'' { \override Staff.OttavaBracket.stencil = #ly:line-spanner::print \override Staff.OttavaBracket.bound-details = #`((left . ((Y . 0) (attach-dir . ,LEFT) (padding . 0) (stencil-align-dir-y . ,CENTER))) (right . ((Y . 5.0) ; Change the number here (padding . 0) (attach-dir . ,RIGHT) (text . ,(make-draw-dashed-line-markup (cons 0 -1.2)))))) \override Staff.OttavaBracket.left-bound-info = #ly:horizontal-line-spanner::calc-left-bound-info-and-text \override Staff.OttavaBracket.right-bound-info = #ly:horizontal-line-spanner::calc-right-bound-info \ottava 1 c1 c'''1 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Modifying the Ottava spanner slope ] | [ Up : Pitches ] | [ Numbers as easy note heads > ] |
Untypische Tonarten
Der üblicherweise benutzte \key
-Befehl setzt die
keySignature
-Eigenschaft im Staff
-Kontext.
Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft
direkt setzen. Das Format für den Befehl ist eine Liste: \set
Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave
. Schritt) . Alteration) ...)
wobei für jedes Element in der Liste
Oktave
die Oktave angibt (0 ist die Oktave vom
eingestrichenen C bis zum eingestrichenen H), Schritt
gibt
die Note innerhalb der Oktave an (0 heißt C und
6 heißt H), und Alteration
ist ,SHARP ,FLAT
,DOUBLE-SHARP
usw. (Beachte das beginnende Komma.)
Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format
(Schritt . Alteration)
gesetzt werden, wobei dann die Einstellungen
für alle Oktaven gelten.
Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter:
\include "arabic.ly" \relative do' { \set Staff.keyAlterations = #`((0 . ,SEMI-FLAT) (1 . ,SEMI-FLAT) (2 . ,FLAT) (5 . ,FLAT) (6 . ,SEMI-FLAT)) %\set Staff.extraNatural = ##f re reb \dwn reb resd dod dob dosd \dwn dob | dobsb dodsd do do | }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Untypische Tonarten ] | [ Up : Pitches ] | [ Orchester, Chor und Klavier > ] |
Numbers as easy note heads
Easy notation note heads use the note-names
property of the
NoteHead
object to determine what appears inside the note
head. By overriding this property, it is possible to print numbers
representing the scale-degree.
A simple engraver can be created to do this for every note head object it sees.
#(define Ez_numbers_engraver (make-engraver (acknowledgers ((note-head-interface engraver grob source-engraver) (let* ((context (ly:translator-context engraver)) (tonic-pitch (ly:context-property context 'tonic)) (tonic-name (ly:pitch-notename tonic-pitch)) (grob-pitch (ly:event-property (event-cause grob) 'pitch)) (grob-name (ly:pitch-notename grob-pitch)) (delta (modulo (- grob-name tonic-name) 7)) (note-names (make-vector 7 (number->string (1+ delta))))) (ly:grob-set-property! grob 'note-names note-names)))))) #(set-global-staff-size 26) \paper { tagline = ##f } \layout { ragged-right = ##t \context { \Voice \consists \Ez_numbers_engraver } } \relative c' { \easyHeadsOn c4 d e f g4 a b c \break \key a \major a,4 b cis d e4 fis gis a \break \key d \dorian d,4 e f g a4 b c d }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Numbers as easy note heads ] | [ Up : Pitches ] | [ Verhindern, dass zusätzliche Auflösungszeichen automatisch > ] |
Orchester, Chor und Klavier
Diese Vorlage zeigt die Benutzung von geschachtelten
StaffGroup
- und GrandStaff
-Kontexte, um
Instrumente in Untergruppen zu unterteilen, und die
Benutzung von \transpose
für transponierende
Instrumente. Alle Noten werden in C geschrieben. Noten
können in C eingegeben werden, oder auch in der Tonart
des Instrumentes: dann müssen sie zuerst nach C transponiert
werden, bevor sie einer Variable zugewiesen werden.
#(set-global-staff-size 17) \paper { indent = 3.0\cm % add space for instrumentName short-indent = 1.5\cm % add less space for shortInstrumentName } \header { tagline = ##f } fluteMusic = \relative c' { \key g \major g'1 b } % Pitches as written on a manuscript for Clarinet in A % are transposed to concert pitch. clarinetMusic = \transpose c' a \relative c'' { \key bes \major bes1 d } trumpetMusic = \relative c { \key g \major g''1 b } % Key signature is often omitted for horns hornMusic = \transpose c' f \relative c { d'1 fis } percussionMusic = \relative c { \key g \major g1 b } sopranoMusic = \relative c'' { \key g \major g'1 b } sopranoLyrics = \lyricmode { Lyr -- ics } altoIMusic = \relative c' { \key g \major g'1 b } altoIIMusic = \relative c' { \key g \major g'1 b } altoILyrics = \sopranoLyrics altoIILyrics = \lyricmode { Ah -- ah } tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b } tenorLyrics = \sopranoLyrics pianoRHMusic = \relative c { \key g \major g''1 b } pianoLHMusic = \relative c { \clef bass \key g \major g1 b } violinIMusic = \relative c' { \key g \major g'1 b } violinIIMusic = \relative c' { \key g \major g'1 b } violaMusic = \relative c { \clef alto \key g \major g'1 b } celloMusic = \relative c { \clef bass \key g \major g1 b } bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b } \score { << \new StaffGroup = "StaffGroup_woodwinds" << \new Staff = "Staff_flute" \with { instrumentName = "Flute" } \fluteMusic \new Staff = "Staff_clarinet" \with { instrumentName = \markup { \concat { "Clarinet in B" \flat } } } % Declare that written Middle C in the music % to follow sounds a concert B flat, for % output using sounded pitches such as MIDI. %\transposition bes % Print music for a B-flat clarinet \transpose bes c' \clarinetMusic >> \new StaffGroup = "StaffGroup_brass" << \new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" } % \transposition f \transpose f c' \hornMusic \new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" } \trumpetMusic >> \new RhythmicStaff = "RhythmicStaff_percussion" \with { instrumentName = "Percussion" } << \percussionMusic >> \new PianoStaff \with { instrumentName = "Piano" } << \new Staff { \pianoRHMusic } \new Staff { \pianoLHMusic } >> \new ChoirStaff = "ChoirStaff_choir" << \new Staff = "Staff_soprano" \with { instrumentName = "Soprano" } \new Voice = "soprano" \sopranoMusic \new Lyrics \lyricsto "soprano" { \sopranoLyrics } \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << \new Staff = "Staff_altoI" \with { instrumentName = "Alto I" } \new Voice = "altoI" \altoIMusic \new Lyrics \lyricsto "altoI" { \altoILyrics } \new Staff = "Staff_altoII" \with { instrumentName = "Alto II" } \new Voice = "altoII" \altoIIMusic \new Lyrics \lyricsto "altoII" { \altoIILyrics } >> \new Staff = "Staff_tenor" \with { instrumentName = "Tenor" } \new Voice = "tenor" \tenorMusic \new Lyrics \lyricsto "tenor" { \tenorLyrics } >> \new StaffGroup = "StaffGroup_strings" << \new GrandStaff = "GrandStaff_violins" << \new Staff = "Staff_violinI" \with { instrumentName = "Violin I" } \violinIMusic \new Staff = "Staff_violinII" \with { instrumentName = "Violin II" } \violinIIMusic >> \new Staff = "Staff_viola" \with { instrumentName = "Viola" } \violaMusic \new Staff = "Staff_cello" \with { instrumentName = "Cello" } \celloMusic \new Staff = "Staff_bass" \with { instrumentName = "Double Bass" } \bassMusic >> >> \layout { } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Orchester, Chor und Klavier ] | [ Up : Pitches ] | [ Auflösungzeichen nicht setzen, wenn die Tonart wechselt > ] |
Verhindern, dass zusätzliche Auflösungszeichen automatisch
hinzugefügt werden
Den traditionellen Notensatzregeln zufolge wird ein
Auflösungszeichen immer dann vor einem Kreuz oder B gesetzt, wenn
ein vorheriges Versetzungszeichen der gleichen Note aufgehoben werden
soll. Um dieses Verhalten zu ändern, muss die Eigenschaft
extraNatural
im Staff
-Kontext auf "false" gesetzt werden.
\relative c'' { aeses4 aes ais a \set Staff.extraNatural = ##f aeses4 aes ais a }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Verhindern, dass zusätzliche Auflösungszeichen automatisch ] | [ Up : Pitches ] | [ Eine Stimme mit Transposition zitieren > ] |
Auflösungzeichen nicht setzen, wenn die Tonart wechselt
Wenn die Tonart wechselt, werden automatisch Auflösungszeichen ausgegeben,
um Versetzungszeichen der vorherigen Tonart aufzulösen. Das kann
verhindert werden, indem die printKeyCancellation
-Eigenschaft
im Staff
-Kontext auf "false" gesetzt wird.
\relative c' { \key d \major a4 b cis d \key g \minor a4 bes c d \set Staff.printKeyCancellation = ##f \key d \major a4 b cis d \key g \minor a4 bes c d }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Auflösungzeichen nicht setzen, wenn die Tonart wechselt ] | [ Up : Pitches ] | [ Separating key cancellations from key signature changes > ] |
Eine Stimme mit Transposition zitieren
Zitate berücksichtigen sowohl die Transposition der Quelle als auch
des Zielinstruments. In diesem Beispiel spielen alle Instrumente
klingendes C, das Zielinstrument ist in F. Die Noten für das
Zielinstrument können mit \transpose
transponiert werden,
in diesem Fall werden alle Noten (auch die zitierten) transponiert.
\addQuote clarinet { \transposition bes \repeat unfold 8 { d'16 d' d'8 } } \addQuote sax { \transposition es' \repeat unfold 16 { a8 } } quoteTest = { % french horn \transposition f g'4 << \quoteDuring "clarinet" { \skip 4 } s4^"clar." >> << \quoteDuring "sax" { \skip 4 } s4^"sax." >> g'4 } { \new Staff \with { instrumentName = \markup { \column { Horn "in F" } } } \quoteTest \transpose c' d' << \quoteTest s4_"up a tone" >> }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Eine Stimme mit Transposition zitieren ] | [ Up : Pitches ] | [ Noten mit minimaler Anzahl an Versetzungszeichen transponieren. > ] |
Separating key cancellations from key signature changes
By default, the accidentals used for key cancellations are placed
adjacent to those for key signature changes. This behavior can be
changed by overriding the break-align-orders
property of the
BreakAlignment
grob.
The value of break-align-orders
is a vector of length 3,
with quoted lists of breakable items as elements. Each list describes
the default order of prefatory matter at the end, in the middle, and at
the beginning of a line, respectively. We are only interested in
changing the behaviour in the middle of a line.
If you look up the definition of break-align-orders
in
LilyPond’s Internal Reference (see the
BreakAlignment
grob), you get the following order in the second element:
... staff-bar key-cancellation key-signature ...
We want to change that, moving key-cancellation
before
staff-bar
. To make this happen we use the
grob-transformer
function, which gives us access to the original
vector as the second argument of the lambda function, here called
orig (we don’t need the first argument,
grob). We return a new vector, with unchanged first and
last elements. For the middle element, we first remove
key-cancellation
from the list, then adding it again before
staff-bar
.
#(define (insert-before where what lst) (cond ((null? lst) ; If the list is empty, (list what)) ; return a single-element list. ((eq? where (car lst)) ; If we find symbol `where`, (cons what lst)) ; insert `what` before curr. position. (else ; Otherwise keep building the list by (cons (car lst) ; adding the current element and ; recursing with the next element. (insert-before where what (cdr lst)))))) cancellationFirst = \override Score.BreakAlignment.break-align-orders = #(grob-transformer 'break-align-orders (lambda (grob orig) (let* ((middle (vector-ref orig 1)) (middle (delq 'key-cancellation middle)) (middle (insert-before 'staff-bar 'key-cancellation middle))) (vector ;; end of line (vector-ref orig 0) ;; middle of line middle ;; beginning of line (vector-ref orig 2))))) music = { \key es \major d'1 \bar "||" \key a \major d'1 } { <>^\markup "default" \music } { <>^\markup "cancellation first" \cancellationFirst \music } \paper { tagline = ##f }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Separating key cancellations from key signature changes ] | [ Up : Pitches ] | [ Turkish Makam example > ] |
Noten mit minimaler Anzahl an Versetzungszeichen transponieren.
Dieses Beispiel benutzt Scheme-Code, um enharmonische Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die folgenden Regeln:
- Doppelte Versetzungszeichen sollen entfernt werden
- His -> C
- Eis -> F
- Ces -> B
- Fes -> E
Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische Variante gewählt.
#(define (naturalize-pitch p) (let ((o (ly:pitch-octave p)) (a (* 4 (ly:pitch-alteration p))) ;; alteration, a, in quarter tone steps, ;; for historical reasons (n (ly:pitch-notename p))) (cond ((and (> a 1) (or (eqv? n 6) (eqv? n 2))) (set! a (- a 2)) (set! n (+ n 1))) ((and (< a -1) (or (eqv? n 0) (eqv? n 3))) (set! a (+ a 2)) (set! n (- n 1)))) (cond ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7)))) (ly:make-pitch o n (/ a 4)))) #(define (naturalize music) (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element)) (p (ly:music-property music 'pitch))) (if (pair? es) (ly:music-set-property! music 'elements (map naturalize es))) (if (ly:music? e) (ly:music-set-property! music 'element (naturalize e))) (if (ly:pitch? p) (begin (set! p (naturalize-pitch p)) (ly:music-set-property! music 'pitch p))) music)) naturalizeMusic = #(define-music-function (m) (ly:music?) (naturalize m)) music = \relative c' { c4 d e g } \score { \new Staff { \transpose c ais { \music } \naturalizeMusic \transpose c ais { \music } \transpose c deses { \music } \naturalizeMusic \transpose c deses { \music } } \layout { } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Noten mit minimaler Anzahl an Versetzungszeichen transponieren. ] | [ Up : Pitches ] | [ Eigenschaften des Schlüssels optimieren > ] |
Turkish Makam example
This template uses the start of a well-known Turkish Saz Semai that is familiar in the repertoire in order to illustrate some of the elements of Turkish music notation.
\paper { tagline = ##f } % Initialize makam settings \include "turkish-makam.ly" \header { title = "Hüseyni Saz Semaisi" composer = "Lavtacı Andon" } \relative { \set Staff.extraNatural = ##f \set Staff.autoBeaming = ##f \key a \huseyni \time 10/8 a'4 g'16 [fb] e8. [d16] d [c d e] c [d c8] bfc | a16 [bfc a8] bfc c16 [d c8] d16 [e d8] e4 fb8 | d4 a'8 a16 [g fb e] fb8 [g] a8. [b16] a16 [g] | g4 g16 [fb] fb8. [e16] e [g fb e] e4 r8 | }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Turkish Makam example ] | [ Up : Pitches ] | [ Using autochange with more than one voice > ] |
Eigenschaften des Schlüssels optimieren
Der Befehl \clef "treble_8"
ist gleichbedeutend mit einem
expliziten Setzen der Eigenschaften von clefGlyph
,
clefPosition
(welche die vertikale Position des Schlüssels bestimmt),
middleCPosition
und clefTransposition
. Ein Schlüssel wird
ausgegeben, wenn eine der Eigenschaften außer middleCPosition
sich
ändert.
Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der
Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten
auf dem System: das geschieht nur, wenn auch die Position des
eingestrichenen C (middleCPosition) angegeben wird. Die
Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen
positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie
plus Zwischenraum. Der clefTransposition
-Wert ist normalerweise auf 7,
-7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig.
Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue
Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile
ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht
erforderlich ist, kann er unterdrückt werden, indem die
explicitClefVisibility
-Eigenschaft des Staff
-Kontextes auf den
Wert end-of-line-invisible
gesetzt wird. Das Standardverhalten kann
mit \unset Staff.explicitClefVisibility
wieder hergestellt werden.
Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen Änderungen die ursprüngliche relative Positionierung von Schlüssel und Noten, auf der zweiten Zeile nicht.
{ % The default treble clef \key f \major c'1 % The standard bass clef \set Staff.clefGlyph = "clefs.F" \set Staff.clefPosition = 2 \set Staff.middleCPosition = 6 \set Staff.middleCClefPosition = 6 \key g \major c'1 % The baritone clef \set Staff.clefGlyph = "clefs.C" \set Staff.clefPosition = 4 \set Staff.middleCPosition = 4 \set Staff.middleCClefPosition = 4 \key f \major c'1 % The standard choral tenor clef \set Staff.clefGlyph = "clefs.G" \set Staff.clefPosition = -2 \set Staff.clefTransposition = -7 \set Staff.middleCPosition = 1 \set Staff.middleCClefPosition = 1 \key f \major c'1 % A non-standard clef \set Staff.clefPosition = 0 \set Staff.clefTransposition = 0 \set Staff.middleCPosition = -4 \set Staff.middleCClefPosition = -4 \key g \major c'1 \break % The following clef changes do not preserve % the normal relationship between notes, key signatures % and clefs: \set Staff.clefGlyph = "clefs.F" \set Staff.clefPosition = 2 c'1 \set Staff.clefGlyph = "clefs.G" c'1 \set Staff.clefGlyph = "clefs.C" c'1 \set Staff.clefTransposition = 7 c'1 \set Staff.clefTransposition = 0 \set Staff.clefPosition = 0 c'1 % Return to the normal clef: \set Staff.middleCPosition = 0 c'1 } \paper { tagline = ##f }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Eigenschaften des Schlüssels optimieren ] | [ Up : Pitches ] | [ Rhythms > ] |
Using autochange with more than one voice
Using autochange
with more than one voice.
\score { \new PianoStaff << \new Staff = "up" { << \set Timing.beamExceptions = #'() \set Timing.beatStructure = #'(4) \new Voice { \voiceOne \autoChange \relative c' { g8 a b c d e f g g,8 a b c d e f g } } \new Voice { \voiceTwo \autoChange \relative c' { g8 a b c d e f g g,,8 a b c d e f g } } >> } \new Staff = "down" { \clef bass } >> }
[ << Pitches ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Using autochange with more than one voice ] | [ Up : Top ] | [ Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms > ] |
Rhythms
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Rhythms ] | [ Up : Rhythms ] | [ Adding drum parts > ] |
Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms
LilyPond syntax can involve many unusual placements for parentheses, brackets etc., which might sometimes have to be interleaved.
For example, when entering a manual beam, the left square bracket has to be placed after the starting note and its duration, not before. Similarly, the right square bracket should directly follow the note which is to be at the end of the requested beaming, even if this note happens to be inside a tuplet section.
This snippet demonstrates how to combine manual beaming, manual slurs, ties and phrasing slurs with tuplet sections (enclosed within curly braces).
{ r16[ g16 \tuplet 3/2 { r16 e'8] } g16( a \tuplet 3/2 { b d e') } g8[( a \tuplet 3/2 { b d') e'] ~ } \time 2/4 \tuplet 5/4 { e'32\( a b d' e' } a'4.\) }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms ] | [ Up : Rhythms ] | [ Adjusting grace note spacing > ] |
Adding drum parts
Using the powerful pre-configured tools such as the \drummode
function and the DrumStaff
context, inputting drum parts is
quite easy: drums are placed at their own staff positions (with a
special clef symbol) and have note heads according to the drum.
Attaching an extra symbol to the drum or restricting the number of
lines is possible.
drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh hhc4 r4 r2 } drl = \drummode { bd4 sn8 bd bd4 << bd ss >> bd8 tommh tommh bd toml toml bd tomfh16 tomfh } timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb } \score { << \new DrumStaff \with { instrumentName = "timbales" drumStyleTable = #timbales-style \override StaffSymbol.line-count = #2 \override BarLine.bar-extent = #'(-1 . 1) } << \timb >> \new DrumStaff \with { instrumentName = "drums" } << \new DrumVoice { \stemUp \drh } \new DrumVoice { \stemDown \drl } >> >> \layout { } \midi { \tempo 4 = 120 } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Adding drum parts ] | [ Up : Rhythms ] | [ Taktnummern ausrichten > ] |
Adjusting grace note spacing
The space given to grace notes can be adjusted using the
spacing-increment
property of Score.GraceSpacing
.
graceNotes = { \grace { c4 c8 c16 c32 } c8 } \relative c'' { c8 \graceNotes \override Score.GraceSpacing.spacing-increment = #2.0 \graceNotes \revert Score.GraceSpacing.spacing-increment \graceNotes }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Adjusting grace note spacing ] | [ Up : Rhythms ] | [ Alternative breve notes > ] |
Taktnummern ausrichten
Taktnummern sind standardmäßig links an ihrem Ursprungsobjekt ausgerichtet. Das ist normalerweise die linke Ecke einer Linie oder, wenn die Nummern innerhalb einer Zeile gesetzt werden, auf der linken Seite eines Taktstrichs. Die Nummern können auch direkt über dem Taktstrich positioniert werden oder rechts vom Taktstrich gesetzt werden.
\relative c' { \set Score.currentBarNumber = 111 \override Score.BarNumber.break-visibility = #all-visible % Increase the size of the bar number by 2 \override Score.BarNumber.font-size = 2 % Print a bar number every second measure \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) c1 | c1 % Center-align bar numbers \override Score.BarNumber.self-alignment-X = #CENTER c1 | c1 % Left-align bar numbers \override Score.BarNumber.self-alignment-X = #LEFT c1 | c1 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Taktnummern ausrichten ] | [ Up : Rhythms ] | [ Appoggiatura or grace note before a bar line > ] |
Alternative breve notes
Breve notes are also available with two vertical lines on each side of the notehead instead of one line and in baroque style.
\relative c'' { \time 4/2 c\breve | \override Staff.NoteHead.style = #'altdefault b\breve \override Staff.NoteHead.style = #'baroque b\breve \revert Staff.NoteHead.style a\breve }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Alternative breve notes ] | [ Up : Rhythms ] | [ Automatic beam subdivisions > ] |
Appoggiatura or grace note before a bar line
By default, appoggiaturas and grace notes that occur on the first beat of a measure are printed after the bar line. They can however be printed before, simply by adding an invisible BarLine and then the visible one, as demonstrated here.
{ R1 %% default \appoggiatura d''8 c''4 r2. %% cheated \appoggiatura { \bar "" d''8 \bar "|" } c''4 r2. }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Appoggiatura or grace note before a bar line ] | [ Up : Rhythms ] | [ Automatically change durations > ] |
Automatic beam subdivisions
Beams can be subdivided automatically. By setting the property
subdivideBeams
, beams are subdivided whenever possible. The
intervals and depth of subdivision can be limited with properties
minimumBeamSubdivisionInterval
and
maximumBeamSubdivisionInterval
respectively.
\new Staff { \relative c'' { << { \voiceOne \set subdivideBeams = ##t b32[ a g f c' b a g b32^"subdivide beams" a g f c' b a g] } \new Voice { \voiceTwo b32_"default"[ a g f c' b a g b32 a g f c' b a g] } >> \oneVoice \once \set minimumBeamSubdivisionInterval = \musicLength 8 b32^"minimumBeamSubdivisionInterval 1 8"[ a g f c' b a g] \once \set maximumBeamSubdivisionInterval = \musicLength 16 b32^"maximumBeamSubdivisionInterval 1 16"[ a g f c' b a g] } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Automatic beam subdivisions ] | [ Up : Rhythms ] | [ Balkenenden auf Score-Ebene > ] |
Automatically change durations
shiftDurations
can be used to change the note lengths of a piece
of music.
It takes two arguments – the scaling factor as a power of two, and the number of dots to be added as a positive integer.
\paper { indent = 0 tagline = ##f } music = \relative c'' { a1 b2 c4 d8 r } { \time 4/2 \music \time 4/4 \shiftDurations 1 0 \music \time 2/4 \shiftDurations 2 0 \music \time 4/1 \shiftDurations -1 0 \music \time 8/1 \shiftDurations -2 0 \music \time 6/2 \shiftDurations 0 1 \music \time 7/2 \shiftDurations 0 2 \music }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Automatically change durations ] | [ Up : Rhythms ] | [ Beam nibs > ] |
Balkenenden auf Score-Ebene
Balkenenderegeln, die im Score
-Kontext definiert werden, wirken
sich auf alle Systeme aus, können aber auf Staff
- und
Voice
-Ebene neu verändert werden:
\relative c'' { \time 5/4 % Set default beaming for all staves \set Score.beatBase = #1/8 \set Score.beatStructure = 3,4,3 << \new Staff { c8 c c c c c c c c c } \new Staff { % Modify beaming for just this staff \set Staff.beatStructure = 6,4 c8 c c c c c c c c c } \new Staff { % Inherit beaming from Score context << { \voiceOne c8 c c c c c c c c c } % Modify beaming for this voice only \new Voice { \voiceTwo \set Voice.beatStructure = 6,4 a8 a a a a a a a a a } >> } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Balkenenden auf Score-Ebene ] | [ Up : Rhythms ] | [ Balken über Zeilenumbrüche > ] |
Beam nibs
Beam nibs at the start and end of beams together with beams attached to
solitary notes that look like flat flags are possible with a
combination of stemLeftBeamCount
, stemRightBeamCount
, and
paired []
beam indicators.
For imitating right-pointing flat flags on lone notes, use paired
[]
beam indicators and set stemLeftBeamCount
to
zero. For imitating left-pointing flat flags on lone notes, set
stemRightBeamCount
to zero instead (line one).
For right-pointing nibs at the end of a run of beamed notes, set
stemRightBeamCount
to a positive value. For left-pointing nibs
at the start of a run of beamed notes, set stemLeftBeamCount
instead (line two).
Sometimes it may make sense for a lone note surrounded by rests to
carry both a left- and right-pointing nib. Do this with paired
[]
beam indicators alone (line three).
Note that \set stemLeftBeamCount
is always equivalent to
\once \set
. In other words, the beam count settings are not
„sticky“, so the pair of nibs attached to the lone 16th note in the
last example has nothing to do with the \set
command for the
beam before.
\score { << \new RhythmicStaff { \set stemLeftBeamCount = 0 c16[] r8. r8. \set stemRightBeamCount = 0 16[] } \new RhythmicStaff { 16 16 \set stemRightBeamCount = 2 16 r r \set stemLeftBeamCount = 2 16 16 16 } \new RhythmicStaff { 16 16 \set stemRightBeamCount = 2 16 r16 16[] r16 \set stemLeftBeamCount = 2 16 16 } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Beam nibs ] | [ Up : Rhythms ] | [ Balken für weit auseinander liegende Noten ändern > ] |
Balken über Zeilenumbrüche
Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert werden.
\relative c'' { \override Beam.breakable = ##t c8 c[ c] c[ c] c[ c] c[ \break c8] c[ c] c[ c] c[ c] c } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Balken über Zeilenumbrüche ] | [ Up : Rhythms ] | [ Die Erscheinung von Pausentakten ändern > ] |
Balken für weit auseinander liegende Noten ändern
Balken mit Hälsen in unterschiedliche Richtungen werden automatisch
erstellt, wenn ein großer Sprung zwischen Tonhöhen gefunden wird. Dieses
Verhalten kann durch die auto-knee-gap
-Eigenschaft beeinflusst
werden. Ein derartiger Knie-Balken wird erstellt, wenn der Abstand größer
ist als der Wert von auto-knee-gap
plus der Dicke des Balkens
(was von der Notendauer und der Neigung des Balkens abhängt). Der
Standardwert von auto-knee-gap
ist 5.5 Notensystemabstände.
{ f8 f''8 f8 f''8 \override Beam.auto-knee-gap = 6 f8 f''8 f8 f''8 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Balken für weit auseinander liegende Noten ändern ] | [ Up : Rhythms ] | [ Changing the number of augmentation dots per note > ] |
Die Erscheinung von Pausentakten ändern
Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa-
und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten
wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von
zehn kann geändert werden, indem man die expand-limit
-Eigenschaft
setzt:
\relative c'' { \compressMMRests { R1*2 | R1*5 | R1*9 \override MultiMeasureRest.expand-limit = 3 R1*2 | R1*5 | R1*9 } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Die Erscheinung von Pausentakten ändern ] | [ Up : Rhythms ] | [ Das Tempo ohne Metronom-Angabe verändern > ] |
Changing the number of augmentation dots per note
The number of augmentation dots on a single note can be changed independently of the dots placed after the note.
\relative c' { c4.. a16 r2 | \override Dots.dot-count = 4 c4.. a16 r2 | \override Dots.dot-count = 0 c4.. a16 r2 | \revert Dots.dot-count c4.. a16 r2 | }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Changing the number of augmentation dots per note ] | [ Up : Rhythms ] | [ Die Zahl der N-tole verändern > ] |
Das Tempo ohne Metronom-Angabe verändern
Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden:
\score { \new Staff \relative c' { \tempo 4 = 160 c4 e g b c4 b d c \set Score.tempoHideNote = ##t \tempo 4 = 96 d,4 fis a cis d4 cis e d } \layout { } \midi { } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Das Tempo ohne Metronom-Angabe verändern ] | [ Up : Rhythms ] | [ Changing time signatures inside a polymetric section using \scaleDurations > ] |
Die Zahl der N-tole verändern
Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer
dargestellt, wie er dem \times
-Befehl übergeben wird.
Man kann aber auch Zähler/Nenner ausgeben lassen, oder die Zahl
vollständig unterdrücken.
\relative c'' { \tuplet 3/2 { c8 c c } \tuplet 3/2 { c8 c c } \override TupletNumber.text = #tuplet-number::calc-fraction-text \tuplet 3/2 { c8 c c } \omit TupletNumber \tuplet 3/2 { c8 c c } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Die Zahl der N-tole verändern ] | [ Up : Rhythms ] | [ Psalmennotation > ] |
Changing time signatures inside a polymetric section using \scaleDurations
The measureLength
property, together with
measurePosition
, determines when a bar line is needed. However,
when using \scaleDurations
, the scaling of durations makes it
difficult to change time signatures. In this case,
measureLength
should be set manually, using the
ly:make-moment
callback. The second argument must be the same
as the second argument of \scaleDurations
.
\layout { \context { \Score \remove "Timing_translator" } \context { \Staff \consists "Timing_translator" } } << \new Staff { \scaleDurations 8/5 { \time 6/8 \set Timing.measureLength = \musicLength 1*6/5 b8 b b b b b \time 2/4 \set Timing.measureLength = \musicLength 1*4/5 b4 b } } \new Staff { \clef bass \time 2/4 c2 d e f } >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Changing time signatures inside a polymetric section using \scaleDurations ] | [ Up : Rhythms ] | [ Zusammengesetzte Taktarten > ] |
Psalmennotation
Diese Form der Notation wird benutzt für die Notation von Psalmen, in denen die Strophen nicht die gleiche Länge haben.
stemOff = \hide Staff.Stem stemOn = \undo \stemOff \score { \new Staff \with { \remove "Time_signature_engraver" } { \key g \minor \cadenzaOn \stemOff a'\breve bes'4 g'4 \stemOn a'2 \section \stemOff a'\breve g'4 a'4 \stemOn f'2 \section \stemOff a'\breve^\markup { \italic flexe } \stemOn g'2 \fine } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Psalmennotation ] | [ Up : Rhythms ] | [ Dirigierzeichen, Taktgruppenzeichen > ] |
Zusammengesetzte Taktarten
Ungerade Taktarten werden (wie etwa "5/8") werden oft als zusammengesetzte Taktarten interpretiert (bspw. "3/8 + 2/8"), in welchen zwei oder mehr Teiltakte unterschieden werden. LilyPond kann derartige Noten produzieren, indem entsprechende Taktarten gesetzt werden und die automatische Bebalkung angepasst wird.
\relative c' { \compoundMeter #'((2 8) (3 8)) c8 d e fis gis c8 fis, gis e d c8 d e4 gis8 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Zusammengesetzte Taktarten ] | [ Up : Rhythms ] | [ Consistently left-aligned bar numbers > ] |
Dirigierzeichen, Taktgruppenzeichen
Optionen, mit denen die Balken in einem Takt gruppiert werden, sind
durch die Scheme-Funktion set-time-signature
erhältlich, die
drei Argumente braucht: Die Zahl der Taktschläge, die Länge des
Schlages und die interne gruppieren von Balken in dem Takt. Wenn der
Measure_grouping_engraver
hinzugefügt worden ist, erstellt
diese Funktion auch MeasureGrouping
-(Taktgruppen)-Zeichen. Derartige
Zeichen erleichtern das Lesen von rhythmisch komplexer Musik. In dem
Beispiel ist der 9/8-Takt in 2, 2, 2 und 3 aufgeteilt. Das wird
der set-time-signature
-Funktion als das dritte Argument mitgegeben:
'(2 2 2 3)
:
\score { \new Voice \relative c'' { \time 9/8 g8 g d d g g a( bes g) | \set Timing.beatStructure = 2,2,2,3 g8 g d d g g a( bes g) | \time 4,5 9/8 g8 g d d g g a( bes g) | \time 5/8 a4. g4 | \time 3,3,2 4/4 \set Timing.beatBase = #1/8 f4 d8 f4 d8 g4 } \layout { \context { \Staff \consists "Measure_grouping_engraver" } } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Dirigierzeichen, Taktgruppenzeichen ] | [ Up : Rhythms ] | [ Controlling tuplet bracket visibility > ] |
Consistently left-aligned bar numbers
When left-aligning bar numbers, overlapping problems may occur with staff brackets.
The snippet solves this by keeping the first bar number right-aligned that follows a line break.
consistentlyLeftAlignedBarNumbers = { \override Score.BarNumber.break-visibility = #end-of-line-invisible \override Score.BarNumber.self-alignment-X = #(lambda (grob) (let ((break-dir (ly:item-break-dir grob))) (if (= break-dir RIGHT) RIGHT LEFT))) } \new ChoirStaff << \new Staff { \relative c' { \set Score.barNumberVisibility = #(every-nth-bar-number-visible 3) \bar "" \consistentlyLeftAlignedBarNumbers \set Score.currentBarNumber = #112 \repeat unfold 8 { R1 } \break \repeat unfold 9 { R1 } \break \repeat unfold 7 { R1 } } } \new Staff { \relative c' { \repeat unfold 24 { R1 } } } >> \layout { indent = #0 ragged-right = ##t ragged-last = ##t } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Consistently left-aligned bar numbers ] | [ Up : Rhythms ] | [ Cow and ride bell example > ] |
Controlling tuplet bracket visibility
The default behavior of tuplet-bracket visibility is to print a bracket unless there is a beam of the same length as the tuplet.
To control the visibility of tuplet brackets, set the property
bracket-visibility
to either #t
(always print a bracket),
if-no-beam
(only print a bracket if there is no beam) or
#f
(never print a bracket). The latter is in fact equivalent to
omitting the TupletBracket
object altogether from the printed
output.
music = \relative c'' { \tuplet 3/2 { c16[ d e } f8] \tuplet 3/2 { c8 d e } \tuplet 3/2 { c4 d e } } \new Voice { \relative c' { \override Score.TextMark.non-musical = ##f \textMark "default" \music \override TupletBracket.bracket-visibility = #'if-no-beam \textMark \markup \typewriter "'if-no-beam" \music \override TupletBracket.bracket-visibility = ##t \textMark \markup \typewriter "#t" \music \override TupletBracket.bracket-visibility = ##f \textMark \markup \typewriter "#f" \music \omit TupletBracket \textMark \markup \typewriter "omit" \music } } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Controlling tuplet bracket visibility ] | [ Up : Rhythms ] | [ Eine Metronombezeichnung als Textbeschriftung erstellen > ] |
Cow and ride bell example
Two different bells, entered with ’cb’ (cowbell) and ’rb’ (ridebell).
\paper { tagline = ##f } #(define mydrums '((ridebell default #f 3) (cowbell default #f -2))) \new DrumStaff \with { instrumentName = #"Different Bells" } \drummode { \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \set DrumStaff.clefPosition = 0.5 \override DrumStaff.StaffSymbol.line-positions = #'(-2 3) \override Staff.BarLine.bar-extent = #'(-1.0 . 1.5) \time 2/4 rb8 8 cb8 16 rb16-> ~ | 16 8 16 cb8 8 | }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Cow and ride bell example ] | [ Up : Rhythms ] | [ Bindebögen manuell setzen > ] |
Eine Metronombezeichnung als Textbeschriftung erstellen
Neue Metronombezeichnungen können als Textbeschriftung erstellt werden, aber sie ändern nicht das Tempo für die MIDI-Ausgabe.
\relative c' { \tempo \markup { \concat { ( \smaller \general-align #Y #DOWN \note { 16. } #UP " = " \smaller \general-align #Y #DOWN \note { 8 } #UP ) } } c1 c4 c' c,2 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Eine Metronombezeichnung als Textbeschriftung erstellen ] | [ Up : Rhythms ] | [ Engraving tremolos with floating beams > ] |
Bindebögen manuell setzen
Überbindungen können manuell gesetzt werden, indem man die
tie-configuration
-Eigenschaft des TieColumn
-Objekts
beeinflusst. Die erste Zahl zeigt den Abstand von der Mitte in
Notensystemabständen an, die zweite Zahl zeigt die Richtung an (1 = nach oben,
-1 = nach unten).
\relative c' { <>^"default" g'1 ^~ g <>^"0" \once \override Tie.staff-position = 0 g1 ^~ g <>^"0.0" \once \override Tie.staff-position = 0.0 g1 ^~ g <>^"reset" \revert Tie.staff-position g1 ^~ g } \relative c' { \override TextScript.outside-staff-priority = ##f \override TextScript.padding = 0 <>^"default" <c e g>1~ <c e g> <>^"0, -2, -4" \override TieColumn.tie-configuration = #'((0 . 1) (-2 . 1) (-4 . 1)) <c e g>1~ <c e g> <>^"0.0, -2.0, -4.0" \override TieColumn.tie-configuration = #'((0.0 . 1) (-2.0 . 1) (-4.0 . 1)) <c e g>1~ <c e g> <>^"reset" \override TieColumn.tie-configuration = ##f <c e g>1~ <c e g> } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Bindebögen manuell setzen ] | [ Up : Rhythms ] | [ Entering several tuplets using only one \tuplet command > ] |
Engraving tremolos with floating beams
If a tremolo’s total duration is less than a quarter-note, or exactly a
half-note, or between a half-note and a whole-note, it is normally
typeset with all beams touching the stems. Certain engraving styles
typeset some of these beams as centered floating beams that do not
touch the stems. The number of floating beams in this type of tremolo
is controlled with the 'gap-count
property of the Beam
object, and the size of the gaps between beams and stems is set with
the 'gap
property.
\relative c'' { \repeat tremolo 8 { a32 f } \override Beam.gap-count = #1 \repeat tremolo 8 { a32 f } \override Beam.gap-count = #2 \repeat tremolo 8 { a32 f } \override Beam.gap-count = #3 \repeat tremolo 8 { a32 f } \override Beam.gap-count = #3 \override Beam.gap = #1.33 \repeat tremolo 8 { a32 f } \override Beam.gap = #1 \repeat tremolo 8 { a32 f } \override Beam.gap = #0.67 \repeat tremolo 8 { a32 f } \override Beam.gap = #0.33 \repeat tremolo 8 { a32 f } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Engraving tremolos with floating beams ] | [ Up : Rhythms ] | [ Forcing rehearsal marks to start from a given letter or number > ] |
Entering several tuplets using only one \tuplet command
The property tupletSpannerDuration
sets how long each of the
tuplets contained within the brackets after \tuplet
should
last. Many consecutive tuplets can then be placed within a single
\tuplet
expression, thus saving typing.
There are several ways to set tupletSpannerDuration
. The
command \tupletSpan
sets it to a given duration, and clears it
when instead of a duration \default
is specified. Another way
is to use an optional argument with \tuplet
.
\relative c' { \time 2/4 \tupletSpan 4 \tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c } \tupletSpan \default \tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c } \tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Entering several tuplets using only one \tuplet command ] | [ Up : Rhythms ] | [ Generating custom flags > ] |
Forcing rehearsal marks to start from a given letter or number
This snippet demonstrates how to obtain automatic ordered rehearsal marks, but from the letter or number desired.
\relative c'' { c1 \mark \default c1 \mark \default c1 \mark \default c1 \mark #14 c1 \mark \default c1 \mark \default c1 \mark \default c1 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Forcing rehearsal marks to start from a given letter or number ] | [ Up : Rhythms ] | [ Schlagrhythmus für Gitarren > ] |
Generating custom flags
The stencil
property of the Flag
grob can be set to a
custom scheme function to generate the glyph for the flag.
#(define-public (weight-flag grob) (let* ((stem-grob (ly:grob-parent grob X)) (log (- (ly:grob-property stem-grob 'duration-log) 2)) (is-up? (eqv? (ly:grob-property stem-grob 'direction) UP)) (yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8)))) (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext)) (stroke-style (ly:grob-property grob 'stroke-style)) (stroke-stencil (if (equal? stroke-style "grace") (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) empty-stencil))) (ly:stencil-add flag-stencil stroke-stencil))) % Create a flag stencil by looking up the glyph from the font #(define (inverted-flag grob) (let* ((stem-grob (ly:grob-parent grob X)) (dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u")) (flag (retrieve-glyph-flag "" dir "" grob)) (line-thickness (ly:staff-symbol-line-thickness grob)) (stem-thickness (ly:grob-property stem-grob 'thickness)) (stem-width (* line-thickness stem-thickness)) (stroke-style (ly:grob-property grob 'stroke-style)) (stencil (if (null? stroke-style) flag (add-stroke-glyph flag stem-grob dir stroke-style ""))) (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0))) (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0)))) snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 } { \time 1/4 \textMark "Normal flags" \snippetexamplenotes \textMark "Custom flag: inverted" \override Flag.stencil = #inverted-flag \snippetexamplenotes \textMark "Custom flag: weight" \override Flag.stencil = #weight-flag \snippetexamplenotes \textMark "Revert to normal" \revert Flag.stencil \snippetexamplenotes }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Generating custom flags ] | [ Up : Rhythms ] | [ Heavily customized polymetric time signatures > ] |
Schlagrhythmus für Gitarren
In Gitarrennotation kann neben Melodie, Akkordbezeichnungen und Bunddiagrammen auch der Schlagrhythmus angegeben werden.
\include "predefined-guitar-fretboards.ly" << \new ChordNames { \chordmode { c1 | f | g | c } } \new FretBoards { \chordmode { c1 | f | g | c } } \new Voice \with { \consists "Pitch_squash_engraver" } { \relative c'' { \improvisationOn c4 c8 c c4 c8 c f4 f8 f f4 f8 f g4 g8 g g4 g8 g c4 c8 c c4 c8 c } } \new Voice = "melody" { \relative c'' { c2 e4 e4 f2. r4 g2. a4 e4 c2. } } \new Lyrics { \lyricsto "melody" { This is my song. I like to sing. } } >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Schlagrhythmus für Gitarren ] | [ Up : Rhythms ] | [ High and Low woodblock example > ] |
Heavily customized polymetric time signatures
Though the polymetric time signature shown was not the most essential item here, it has been included to show the beat of this piece (which is the template of a real Balkan song!).
melody = \relative c'' { \key g \major \compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8) (2 8) (2 8) (3 8) (2 8) (2 8)) c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4 c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break } drum = \new DrumStaff \drummode { \repeat volta 2 { bd4.^\markup { Drums } sn4 bd \bar ";" sn4. bd4 sn \bar ";" bd sn bd4. sn4 bd } } \new Staff \with { instrumentName = \markup { \concat { "B" \flat " Sop." } } } { \melody \drum } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Heavily customized polymetric time signatures ] | [ Up : Rhythms ] | [ Making an object invisible with the ’transparent property > ] |
High and Low woodblock example
Two Woodblocks, entered with ’wbh’ (high woodblock) and ’wbl’ (low woodblock). The length of the barline has been altered with an \override command otherwise it would be too short. The positions of the two stafflines also have to be explicitly defined.
\paper { tagline = ##f } % These lines define the position of the woodblocks in the stave; % if you like, you can change it or you can use special note heads % for the woodblocks. #(define mydrums '((hiwoodblock default #f 3) (lowoodblock default #f -2))) woodstaff = { % This defines a staff with only two lines. % It also defines the positions of the two lines. \override Staff.StaffSymbol.line-positions = #'(-2 3) % This is necessary; if not entered, % the barline would be too short! \override Staff.BarLine.bar-extent = #'(-1.0 . 1.5) % small correction for the clef: \set DrumStaff.clefPosition = 0.5 } \new DrumStaff { % with this you load your new drum style table \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \woodstaff \drummode { \time 2/4 wbl8 16 16 8-> 8 | wbl8 16 16-> ~ 16 16 r8 | } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < High and Low woodblock example ] | [ Up : Rhythms ] | [ Legatobögen mit kompliziertem Strichelmuster > ] |
Making an object invisible with the ’transparent property
Setting the transparent
property will cause an object to be
printed in „invisible ink“: the object is not printed, but all its
other behavior is retained. The object still takes up space, it takes
part in collisions, and slurs, ties and beams can be attached to it.
This snippet demonstrates how to connect different voices using ties. Normally, ties only connect two notes in the same voice. By introducing a tie in a different voice, and blanking the first up-stem in that voice, the tie appears to cross voices.
\relative { \time 2/4 << { \once \hide Stem \once \override Stem.length = #8 b'8 ~ 8\noBeam \once \hide Stem \once \override Stem.length = #8 g8 ~ 8\noBeam } \\ { b8 g g e } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Making an object invisible with the ’transparent property ] | [ Up : Rhythms ] | [ Manually controlling beam positions > ] |
Legatobögen mit kompliziertem Strichelmuster
definieren
Legatobögen können mit einem komplizierten Strichelmuster
gesetzt werden, indem die dash-definition
-Eigenschaft
definiert wird. dash-definition
ist eine Liste bestehend
aus dash-elements
-Elementen. Ein dash-element
ist
eine Liste an Parametern, die das Strichverhalten für einen
Abschnitt des Legatobogens definieren.
Der Bogen wird nach dem Bezierparameter t definiert, welcher
von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens
reicht. dash-element
ist eine Liste (start-t stop-t dash-Unterbrechung dash-Abschnitt)
. Die Region des Bogens von start-t
bis stop-t
hat eine Unterbrechung von dash-Unterbrechung
von jedem dash-Abschnitt
-Schwarzabschnitt. dash-Abschnitt
ist in Notenlinienzwischenräumen definiert.
dash-Abschnitt
ist auf 1 für einen durchgehenden Bogen
gesetzt.
\relative c' { \once \override Slur.dash-definition = #'((0 0.3 0.1 0.75) (0.3 0.6 1 1) (0.65 1.0 0.4 0.75)) c4( d e f) \once \override Slur.dash-definition = #'((0 0.25 1 1) (0.3 0.7 0.4 0.75) (0.75 1.0 1 1)) c4( d e f) }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Legatobögen mit kompliziertem Strichelmuster ] | [ Up : Rhythms ] | [ Merging multi-measure rests in a polyphonic part > ] |
Manually controlling beam positions
Beam positions may be controlled manually, by overriding the
positions
setting of the Beam
grob.
\relative c' { \time 2/4 % from upper staff-line (position 2) to center (position 0) \override Beam.positions = #'(2 . 0) c8 c % from center to one above center (position 1) \override Beam.positions = #'(0 . 1) c8 c }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Manually controlling beam positions ] | [ Up : Rhythms ] | [ Modifying tuplet bracket length > ] |
Merging multi-measure rests in a polyphonic part
When using multi-measure rests in a polyphonic staff, the rests will be placed differently depending on the voice they belong to. However they can be printed on the same staff line, using the following setting.
normalPos = \revert MultiMeasureRest.direction { << { c''1 R1 c''1 \normalPos R1 } \\ { c'1 R1 c'1 \normalPos R1 } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Merging multi-measure rests in a polyphonic part ] | [ Up : Rhythms ] | [ Moving dotted notes in polyphony > ] |
Modifying tuplet bracket length
Tuplet brackets can be made to run to prefatory matter or the next note. Default tuplet brackets end at the right edge of the final note of the tuplet; full-length tuplet brackets extend farther to the right, either to cover all the non-rhythmic notation up to the following note, or to cover only the whitespace before the next item of notation, be that a clef, time signature, key signature, or another note. The example shows how to switch tuplets to full length mode and how to modify what material they cover.
\new RhythmicStaff { % Set tuplets to be extendable... \set tupletFullLength = ##t % ...to cover all items up to the next note \set tupletFullLengthNote = ##t \time 2/4 \tuplet 3/2 { c4 4 4 } % ...or to cover just whitespace \set tupletFullLengthNote = ##f \time 4/4 \tuplet 5/4 { 4 1 } \time 3/4 2. }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Modifying tuplet bracket length ] | [ Up : Rhythms ] | [ Multi-measure rest length control > ] |
Moving dotted notes in polyphony
When a dotted note in the upper voice is moved to avoid a collision
with a note in another voice, the default is to move the upper note to
the right. This behaviour can be over-ridden by using the
prefer-dotted-right
property of NoteCollision
.
\new Staff \relative c' << { f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##f f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##t f2. f4 } \\ { e4 e e e e e e e e e e e } >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Moving dotted notes in polyphony ] | [ Up : Rhythms ] | [ Textbeschriftung und Mehrtaktpausen > ] |
Multi-measure rest length control
Multi-measure rests have length according to their total duration which
is under the control of MultiMeasureRest.space-increment
. Note
that the default value is 2.0
.
\relative c' { \compressEmptyMeasures R1*2 R1*4 R1*64 R1*16 \override Staff.MultiMeasureRest.space-increment = 2.5 R1*2 R1*4 R1*64 R1*16 } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Multi-measure rest length control ] | [ Up : Rhythms ] | [ Nicht-standard-N-tolennummern > ] |
Textbeschriftung und Mehrtaktpausen
Textbeschriftungen, die an Mehrtaktpausen gehängt wird, wird über oder unter der Pause zentriert. Lange Beschriftungen lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer Beschriftung anzupassen, muss eine unsichtbare Pause mit der Beschriftung direkt vor der Mehrtaktpause eingesetzt werden.
Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche nach sich ziehen. Text, der an eine unsichtbare Pause gehängt wird, ist links ausgerichtet an der Position, wo die Pause erscheinen würde. Wenn aber die Länge des Taktes durch die Länge des Textes bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt ist.
\relative c' { \compressMMRests { \textLengthOn <>^\markup { [MAJOR GENERAL] } R1*19 <>_\markup { \italic { Cue: ... it is yours } } <>^\markup { A } R1*30^\markup { [MABEL] } \textLengthOff c4^\markup { CHORUS } d f c } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Textbeschriftung und Mehrtaktpausen ] | [ Up : Rhythms ] | [ Numbering single measure rests > ] |
Nicht-standard-N-tolennummern
LilyPond stellt auch Formatierungsfunktionen zur Verfügung, mit denen N-tolennummern gesetzt werden können, die sich von dem eigentlichen Bruch unterscheiden. Auch ein Notenwert kann zu Nenner oder Zähler des Bruchs hinzugefügt werden.
\relative c'' { \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-denominator-text 7) \tuplet 3/2 { c4. c4. c4. c4. } \once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-fraction-text 12 7) \tuplet 3/2 { c4. c4. c4. c4. } \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) (ly:make-duration 3 0)) \tuplet 3/2 { c4. c4. c4. c4. } \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text (ly:make-duration 2 0)) \tuplet 3/2 { c8 c8 c8 c8 c8 c8 } \once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text (ly:make-duration 2 0)) \tuplet 3/2 { c8 c8 c8 c8 c8 c8 } \once \override TupletNumber.text = #(tuplet-number::fraction-with-notes (ly:make-duration 2 1) (ly:make-duration 3 0)) \tuplet 3/2 { c4. c4. c4. c4. } \once \override TupletNumber.text = #(tuplet-number::non-default-fraction-with-notes 12 (ly:make-duration 3 0) 4 (ly:make-duration 2 0)) \tuplet 3/2 { c4. c4. c4. c4. } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Nicht-standard-N-tolennummern ] | [ Up : Rhythms ] | [ Partcombine and \autoBeamOff > ] |
Numbering single measure rests
Multi measure rests show their length by a number except for single
measures. This can be changed by setting restNumberThreshold
.
{ \compressEmptyMeasures R1 R1*10 R1*11 \bar "||" \set restNumberThreshold = 0 R1 R1*10 R1*11 \bar "||" \set restNumberThreshold = 10 R1 R1*10 R1*11 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Numbering single measure rests ] | [ Up : Rhythms ] | [ Percussion example > ] |
Partcombine and \autoBeamOff
The function of \autoBeamOff
when used with
\partCombine
can be difficult to understand. It may be
preferable to use
\set Staff.autoBeaming = ##f
instead to ensure that auto-beaming is turned off for the entire staff. Use this at a spot in your score where no beam generated by the auto-beamer is still active.
Internally, \partCombine
works with four voices – stem up
single, stem down single, combined, and solo. In order to use
\autoBeamOff
to stop all auto-beaming when used with
\partCombine
, it is necessary to use four calls to
\autoBeamOff
.
{ % \set Staff.autoBeaming = ##f % turns off all auto-beaming \partCombine { \autoBeamOff % applies to split up-stems \repeat unfold 4 a'16 % \autoBeamOff % applies to combined stems \repeat unfold 4 a'8 \repeat unfold 4 a'16 % \autoBeamOff % applies to solo \repeat unfold 4 a'16 r4 } { % \autoBeamOff % applies to split down-stems \repeat unfold 4 f'8 \repeat unfold 8 f'16 | r4 \repeat unfold 4 a'16 } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Partcombine and \autoBeamOff ] | [ Up : Rhythms ] | [ Zeilenumbrüche bei N-tolen mit Balken erlauben > ] |
Percussion example
A short example taken from Stravinsky’s L’histoire du Soldat.
#(define mydrums '((bassdrum default #f 4) (snare default #f -4) (tambourine default #f 0))) \paper { tagline = ##f } global = { \time 3/8 s4. \time 2/4 s2*2 \time 3/8 s4. \time 2/4 s2 } drumsA = { \context DrumVoice << { \global } { \drummode { \autoBeamOff \stemDown sn8 \stemUp tamb s8 | sn4 \stemDown sn4 | \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | \stemDown sn8 \stemUp tamb s8 | \stemUp sn4 s8 \stemUp tamb } } >> } drumsB = { \drummode { s4 bd8 s2*2 s4 bd8 s4 bd8 s8 } } \layout { indent = 40 \context { \DrumStaff drumStyleTable = #(alist->hash-table mydrums) } } \score { \new StaffGroup << \new DrumStaff \with { instrumentName = \markup \center-column { "Tambourine" "et" "caisse claire s. timbre" } } \drumsA \new DrumStaff \with { instrumentName = "Grosse Caisse" } \drumsB >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Percussion example ] | [ Up : Rhythms ] | [ Positioning grace note beams at the height of normal note beams > ] |
Zeilenumbrüche bei N-tolen mit Balken erlauben
Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch manuelle Zeilenumbrüche innerhalb einer N-tole mit Balken erlaubt werden können. Diese unregelmäßige Bebalkung muss allerdings manuell gesetzt werden.
\paper { tagline = ##f } \layout { \context { \Voice % Permit line breaks within tuplets \remove "Forbid_line_break_engraver" % Allow beams to be broken at line breaks \override Beam.breakable = ##t } } \relative c'' { a8 \repeat unfold 5 { \tuplet 3/2 { c[ b a] } } % Insert a manual line break within a tuplet \tuplet 3/2 { c[ b \bar "" \break a] } \repeat unfold 5 { \tuplet 3/2 { c[ b a] } } c8 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Zeilenumbrüche bei N-tolen mit Balken erlauben ] | [ Up : Rhythms ] | [ Positionierung von Verzierungen mit verschiebbarem Platz > ] |
Positioning grace note beams at the height of normal note beams
When notes are placed on ledger lines, their beams are usually centred on the stave. Grace notes beams are shorter and grace notes on ledger lines may well have beams outside the stave. You can override this beaming for grace notes.
\relative c { f8[ e] \grace { f8[ e] \override Stem.no-stem-extend = ##f f8[ e] \revert Stem.no-stem-extend } f8[ e] }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Positioning grace note beams at the height of normal note beams ] | [ Up : Rhythms ] | [ Positionierung von Ganztaktpausen > ] |
Positionierung von Verzierungen mit verschiebbarem Platz
Wenn man die Eigenschaft 'strict-grace-spacing
aktiviert,
werden die Verzierungsnoten "fließend" gemacht, d.h. sie sind
von den normalen Noten los gekoppelt: Zuerst werden die normalen
Noten platziert, dann erst die Verzierungen links von der
Hauptnote gesetzt.
\relative c'' { << \override Score.SpacingSpanner.strict-grace-spacing = ##t \new Staff \new Voice { \afterGrace c4 { c16[ c8 c16] } c8[ \grace { b16 d } c8] c4 r } \new Staff { c16 c c c c c c c c4 r } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Positionierung von Verzierungen mit verschiebbarem Platz ] | [ Up : Rhythms ] | [ Positioning opposing fermatas on a bar line > ] |
Positionierung von Ganztaktpausen
Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die Position der Pausen von geraden und ungeraden Stimmen voneinander unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert werden:
\relative c'' { % Multi-measure rests by default are set under the fourth line R1 % They can be moved using an override \override MultiMeasureRest.staff-position = -2 R1 \override MultiMeasureRest.staff-position = 0 R1 \override MultiMeasureRest.staff-position = 2 R1 \override MultiMeasureRest.staff-position = 3 R1 \override MultiMeasureRest.staff-position = 6 R1 \revert MultiMeasureRest.staff-position \break % In two Voices, odd-numbered voices are under the top line << { R1 } \\ { a1 } >> % Even-numbered voices are under the bottom line << { a1 } \\ { R1 } >> % Multi-measure rests in both voices remain separate << { R1 } \\ { R1 } >> % Separating multi-measure rests in more than two voices % requires an override << { R1 } \\ { R1 } \\ \once \override MultiMeasureRest.staff-position = 0 { R1 } >> % Using compressed bars in multiple voices requires another override % in all voices to avoid multiple instances being printed \compressMMRests << \revert MultiMeasureRest.direction { R1*3 } \\ \revert MultiMeasureRest.direction { R1*3 } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Positionierung von Ganztaktpausen ] | [ Up : Rhythms ] | [ Preventing final mark from removing final tuplet > ] |
Positioning opposing fermatas on a bar line
This snippet demonstrates a command that prints fermatas both above and below a bar line. If there would not otherwise be a bar line, it adds a double bar line. Semantically, the command codes a longer-than-normal caesura, which might be considered misuse depending on the situation.
twoWayFermata = { \once \set Staff.caesuraType = #'((underlying-bar-line . "||")) \once \set Staff.caesuraTypeTransform = ##f \caesura ^\fermata _\fermata } music = { f'1 \twoWayFermata R1 f'2 \twoWayFermata f'2 R1 b'1 \twoWayFermata \fine } \new GrandStaff << \new Staff \music \new Staff \music >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Positioning opposing fermatas on a bar line ] | [ Up : Rhythms ] | [ Setzen der Taktnummern in regelmäßigen Intervallen > ] |
Preventing final mark from removing final tuplet
The addition of a final mark
can result in the loss of a final
tuplet marking. This can be overcome by setting
TupletBracket.full-length-to-extent
to false
.
% due to issue 2362 a long mark such as % \textEndMark "Composed Feb 2007 - Feb 2008" % cannot be used here. \paper { tagline = ##f } \new Staff { \set tupletFullLength = ##t \time 1/8 \tuplet 3/2 8 { c'16 c' c' c' c' c' c' c' c' } \tweak direction #DOWN \textEndMark "1234" } \new Staff { \set tupletFullLength = ##t \override TupletBracket.full-length-to-extent = ##f \time 1/8 \tuplet 3/2 8 { c'16 c' c' c' c' c' c' c' c' } \tweak direction #DOWN \textEndMark "1234" }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Preventing final mark from removing final tuplet ] | [ Up : Rhythms ] | [ Printing bar numbers for broken measures > ] |
Setzen der Taktnummern in regelmäßigen Intervallen
Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem
man die Eigenschaft barNumberVisibility
definiert. In diesem
Beispiel werden die Taktnummern jeden zweiten Takt gesetzt, außer
am Ende einer Zeile.
\relative c' { \override Score.BarNumber.break-visibility = #end-of-line-invisible \set Score.currentBarNumber = 11 % Print a bar number every second measure \set Score.barNumberVisibility = #(every-nth-bar-number-visible 2) c1 | c | c | c | c \break c1 | c | c | c | c } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Setzen der Taktnummern in regelmäßigen Intervallen ] | [ Up : Rhythms ] | [ Setzen von Taktnummern in Kästen oder Kreisen > ] |
Printing bar numbers for broken measures
By default a BarNumber
of a broken measure is not repeated at
the beginning of the new line. Use
first-bar-number-invisible-save-broken-bars
for
barNumberVisibility
to get a parenthesized BarNumber
there.
\layout { \context { \Score barNumberVisibility = #first-bar-number-invisible-save-broken-bars \override BarNumber.break-visibility = ##(#f #t #t) } } \relative c' { c1 | d | e | f2 \bar "" \break fis | g1 | e2 \bar "" \break <>^"reenabled default" % back to default - % \unset Score.barNumberVisibility would do so as well \set Score.barNumberVisibility = #first-bar-number-invisible-and-no-parenthesized-bar-numbers es | d1 | c } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Printing bar numbers for broken measures ] | [ Up : Rhythms ] | [ Printing bar numbers using modulo-bar-number-visible > ] |
Setzen von Taktnummern in Kästen oder Kreisen
Taktnummern können auch in Boxen oder Kreisen gesetzt werden.
\relative c' { % Prevent bar numbers at the end of a line and permit them elsewhere \override Score.BarNumber.break-visibility = #end-of-line-invisible \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) % Increase the size of the bar number by 2 \override Score.BarNumber.font-size = 2 % Draw a box round the following bar number(s) \override Score.BarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) \repeat unfold 5 { c1 } % Draw a circle round the following bar number(s) \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) \repeat unfold 4 { c1 } \bar "|." }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Setzen von Taktnummern in Kästen oder Kreisen ] | [ Up : Rhythms ] | [ Printing bar numbers with changing regular intervals > ] |
Printing bar numbers using modulo-bar-number-visible
If the remainder of the division of the current BarNumber
by the
first argument of modulo-bar-number-visible
equals its second
argument print the BarNumber
.
Useful to print the BarNumber
at certain distances, p.e.:
-
(modulo-bar-number-visible 3 2)
-> prints 2,5,8 -
(modulo-bar-number-visible 4 2)
-> prints 2,6,10 -
(modulo-bar-number-visible 3 1)
-> prints 3,5,7 -
(modulo-bar-number-visible 5 2)
-> prints 2,7,12
\layout { \context { \Score \override BarNumber.break-visibility = ##(#f #t #t) barNumberVisibility = #(modulo-bar-number-visible 3 2) } } \relative c' { c1 | d | e | f \break g1 | e | d | c } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Printing bar numbers using modulo-bar-number-visible ] | [ Up : Rhythms ] | [ Metronom- und Übungszeichen unter das System setzen > ] |
Printing bar numbers with changing regular intervals
Using the set-bar-number-visibility
context function, bar number
intervals can be changed.
\relative c' { \override Score.BarNumber.break-visibility = #end-of-line-invisible \context Score \applyContext #(set-bar-number-visibility 4) \repeat unfold 10 c'1 \context Score \applyContext #(set-bar-number-visibility 2) \repeat unfold 10 c } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Printing bar numbers with changing regular intervals ] | [ Up : Rhythms ] | [ Printing music with different time signatures > ] |
Metronom- und Übungszeichen unter das System setzen
Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben.
Um sie unter das System zu setzen, muss die direction
-Eigenschaft
von MetronomeMark
oder RehearsalMark
entsprechend verändert werden.
\layout { indent = 0 ragged-right = ##f } { % Metronome marks below the staff \override Score.MetronomeMark.direction = #DOWN \tempo 8. = 120 c''1 % Rehearsal marks below the staff \override Score.RehearsalMark.direction = #DOWN \mark \default c''1 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Metronom- und Übungszeichen unter das System setzen ] | [ Up : Rhythms ] | [ Setzen der Taktnummer für den ersten Takt > ] |
Printing music with different time signatures
In the following snippet, two parts have a completely different time signature, yet remain synchronized.
The bar lines can no longer be printed at the Score
level; to
allow independent bar lines in each part, the
Default_barline_engraver
and Timing_translator
are moved
from the Score
context to the Staff
context.
If bar numbers are required, the Bar_number_engraver
should also
be moved, since it relies on properties set by the
Timing_translator
; a \with
block can be used to add bar
numbers to the relevant staff.
\paper { indent = #0 ragged-right = ##t tagline = ##f } global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } } \layout { \context { \Score \remove "Timing_translator" \remove "Bar_number_engraver" \override SpacingSpanner.uniform-stretching = ##t \override SpacingSpanner.strict-note-spacing = ##t proportionalNotationDuration = \musicLength 64 } \context { \Staff \consists "Timing_translator" } \context { \Voice \remove "Forbid_line_break_engraver" tupletFullLength = ##t } } Bassklarinette = \new Staff \with { \consists "Bar_number_engraver" barNumberVisibility = #(every-nth-bar-number-visible 2) \override BarNumber.break-visibility = #end-of-line-invisible } << \global { \bar "|" \clef treble \time 3/8 d''4. \bar "|" \time 3/4 r8 des''2( c''8) \bar "|" \time 7/8 r4. ees''2 ~ \bar "|" \time 2/4 \tupletUp \tuplet 3/2 { ees''4 r4 d''4 ~ } \bar "|" \time 3/8 \tupletUp \tuplet 4/3 { d''4 r4 } \bar "|" \time 2/4 e''2 \bar "|" \time 3/8 es''4. \bar "|" \time 3/4 r8 d''2 r8 \bar "|" } >> Perkussion = \new StaffGroup << \new Staff << \global { \bar "|" \clef percussion \time 3/4 r4 c'2 ~ \bar "|" c'2. \bar "|" R2. \bar "|" r2 g'4 ~ \bar "|" g'2. ~ \bar "|" g'2. } >> \new Staff << \global { \bar "|" \clef percussion \time 3/4 R2. \bar "|" g'2. ~ \bar "|" g'2. \bar "|" r4 g'2 ~ \bar "|" g'2 r4 \bar "|" g'2. } >> >> \score { << \Bassklarinette \Perkussion >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Printing music with different time signatures ] | [ Up : Rhythms ] | [ Printing tuplet brackets on the note head side > ] |
Setzen der Taktnummer für den ersten Takt
Standardmäßig wird die erste Taktzahl einer Partitur nicht gesetzt,
wenn sie weniger oder gleich ’1’ ist. Indem man barNumberVisibility
auf all-bar-numbers-visible
setzt, kann eine beliebige
Taktzahl für den ersten und die folgenden Takte gesetzt werden.
Eine leere Taktlinie muss jedoch vor der ersten Note eingefügt
werden, damit das funktioniert.
\layout { indent = 0 ragged-right = ##t } \relative c' { \set Score.barNumberVisibility = #all-bar-numbers-visible c1 | d | e | f \break g1 | e | d | c }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Setzen der Taktnummer für den ersten Takt ] | [ Up : Rhythms ] | [ Globale Umdefinition von Verzierungsnoten > ] |
Printing tuplet brackets on the note head side
Whichever option you choose for controlling the tuplet bracket
visibility, it will show or hide the tuplet bracket irrespectively of
tuplet bracket placement (stem side or note head side). However, when
placing the tuplet bracket on the note head side some authors recommend
always printing the tuplet bracket. The option
visible-over-note-heads
can be used to achieve this.
music = \relative c'' { \tupletNeutral \tuplet 3/2 { c16[ d e } f8] \tupletUp \tuplet 3/2 { c8 d e } } \new Voice { \relative c' { \time 2/4 \override TupletBracket.visible-over-note-heads = ##t \override Score.TextMark.non-musical = ##f { \textMark \markup "default" \music } \override TupletBracket.bracket-visibility = #'if-no-beam { \textMark \markup \typewriter "'if-no-beam" \music } } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Printing tuplet brackets on the note head side ] | [ Up : Rhythms ] | [ Entfernung von Taktnummern in einer Partitur > ] |
Globale Umdefinition von Verzierungsnoten
Die globalen Standardeinstellungen für Verzierungsnoten werden in
den VariablenstartGraceMusic
, stopGraceMusic
,
startAcciaccaturaMusic
, stopAcciaccaturaMusic
,
startAppoggiaturaMusic
und stopAppoggiaturaMusic
gespeichert, die in der Datei ly/grace-init.ly definiert
sind. Wenn man sie umdefiniert, können andere Effekte erreicht
werden.
startAcciaccaturaMusic = { <>( \override Flag.stroke-style = "grace" \slurDashed } stopAcciaccaturaMusic = { \revert Flag.stroke-style \slurSolid <>) } \relative c'' { \acciaccatura d8 c1 }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Globale Umdefinition von Verzierungsnoten ] | [ Up : Rhythms ] | [ Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff > ] |
Entfernung von Taktnummern in einer Partitur
Taktnummern können vollkommen aus den Noten entfernt werden, indem
man den Bar_number_engraver
aus dem Score
-Kontext
entfernt.
\layout { \context { \Score \omit BarNumber % or: %\remove "Bar_number_engraver" } } \relative c'' { c4 c c c \break c4 c c c } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Entfernung von Taktnummern in einer Partitur ] | [ Up : Rhythms ] | [ Pausenstile > ] |
Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff
By default, bar lines in StaffGroup, PianoStaff, or GrandStaff groups are connected between the staves, i.e. a SpanBar is printed. This behaviour can be overridden on a staff-by-staff basis.
\relative c' { \new StaffGroup << \new Staff { e1 | e \once \override Staff.BarLine.allow-span-bar = ##f e1 | e | e } \new Staff { c1 | c | c \once \override Staff.BarLine.allow-span-bar = ##f c1 | c } \new Staff { a1 | a | a | a | a } >> }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff ] | [ Up : Rhythms ] | [ Standard-Balkenwerte rückgängig machen > ] |
Pausenstile
Pausen können in verschiedenen Stilen dargestellt werden.
restsA = { r\maxima r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s256 s512 s1024 s1024 } restsB = { r\maxima r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r256 r512 r1024 s1024 } \new Staff \relative c { \omit Score.TimeSignature \cadenzaOn \override Staff.Rest.style = #'mensural <>^\markup \typewriter { mensural } \restsA \bar "" \break \override Staff.Rest.style = #'neomensural <>^\markup \typewriter { neomensural } \restsA \bar "" \break \override Staff.Rest.style = #'classical <>^\markup \typewriter { classical } \restsB \bar "" \break \override Staff.Rest.style = #'z <>^\markup \typewriter { z-style } \restsB \bar "" \break \override Staff.Rest.style = #'default <>^\markup \typewriter { default } \restsB \bar "" \break } \paper { indent = 0 tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Pausenstile ] | [ Up : Rhythms ] | [ Rhythmic slashes > ] |
Standard-Balkenwerte rückgängig machen
Um Balken im 12/8-Takt als 3-4-3-2
zu gruppieren, muss man zuerst die
Standardwerte für die Balken im 12/8-Takt rückgängig machen und dann die neuen
Werte setzen:
\relative c'' { \time 12/8 % Default beaming a8 a a a a a a a a a a a % Set new values for beam endings \set Score.beatStructure = 3,4,3,2 a8 a a a a a a a a a a a }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Standard-Balkenwerte rückgängig machen ] | [ Up : Rhythms ] | [ Skips in lyric mode > ] |
Rhythmic slashes
In „simple“ lead-sheets, sometimes no actual notes are written, instead only „rhythmic patterns“ and chords above the measures are notated giving the structure of a song. Such a feature is for example useful while creating/transcribing the structure of a song and also when sharing lead sheets with guitarists or jazz musicians.
startPat = { \improvisationOn \omit Stem } stopPat = { \improvisationOff \undo \omit Stem } \new Voice \with { \consists Pitch_squash_engraver } { c'4 d' e' f' | \startPat 4 4 4 4 | \stopPat f'4 e' d' c' }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Rhythmic slashes ] | [ Up : Rhythms ] | [ Skips in lyric mode (2) > ] |
Skips in lyric mode
The s
syntax for skips is only available in note mode and chord
mode. In other situations, for example, when entering lyrics, using the
\skip
command is recommended.
<< \relative c'' { a1 | a } \new Lyrics \lyricmode { \skip 1 bla1 } >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Skips in lyric mode ] | [ Up : Rhythms ] | [ Stemlets > ] |
Skips in lyric mode (2)
Although s
skips cannot be used in \lyricmode
(it is
taken to be a literal „s“, not a space), double quotes (""
) or
underscores (_
) are available.
So for example:
<< \relative c'' { a4 b c d } \new Lyrics \lyricmode { a4 "" _ gap } >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Skips in lyric mode (2) ] | [ Up : Rhythms ] | [ Bebalkung nach Taktschlag > ] |
Stemlets
In some notational conventions beams are allowed to extend over rests. Depending on preference, these beams may drop ’stemlets’ to help the eye appreciate the rhythm better, and in some modern music the rest itself is omitted and only the stemlet remains.
This snippet shows a progression from traditional notation, to beams
over the rest, to stemlets over the rest, to stemlets alone. Stemlets
are generated by overriding the 'stemlet-length
property of
Stem
, while rests are hidden by setting
'transparent = ##t
.
Some \markup
elements are included in the source to highlight
the different notations.
\paper { ragged-right = ##f } { c'16^\markup { traditional } d' r f' g'16[^\markup { beams over rests } f' r d'] % N.B. use Score.Stem to set for the whole score. \override Staff.Stem.stemlet-length = #0.75 c'16[^\markup { stemlets over rests } d' r f'] g'16[^\markup { stemlets and no rests } f' \once \hide Rest r16 d'] }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Stemlets ] | [ Up : Rhythms ] | [ Subdividing beams > ] |
Bebalkung nach Taktschlag
Sekundäre Balken können in die Richtung gesetzt werden, die ihrer rhythmischen Zugehörigkeit entspricht. Der erste Balken ist zusammengefasst (Standard), der zweite Sechszehntelbalken zeigt den Taktschlag an.
\relative c'' { \time 6/8 a8. a16 a a \set strictBeatBeaming = ##t a8. a16 a a }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Bebalkung nach Taktschlag ] | [ Up : Rhythms ] | [ Tam-tam example > ] |
Subdividing beams
The beams of consecutive 16th (or shorter) notes are, by default, not
subdivided. That is, the beams of more than two stems stretch unbroken
over entire groups of notes. This behavior can be modified to subdivide
the beams into sub-groups by setting the property subdivideBeams
to true (#t
). When set, a number of beamlets between two
consecutive stems are removed at intervals multiple beams will be
subdivided at intervals to match the metric value of the subdivision.
Properties minimumBeamSubdivisionInterval
and
maximumBeamSubdivisionInterval
allow configuring limits of
automatic beam subdivision: the minimum rhythmic interval at which to
subdivide beams and the number of beamlets removed depending on the
interval respectively. If the numerator of
maximumBeamSubdivisionInterval
is not a power of 2, the
smaller rhythmic intervals considered for subdivision are
maximumBeamSubdivisionInterval
divided by powers of 2 and
stay greater than or equal to minimumBeamSubdivisionInterval
. If
maximumBeamSubdivisionInterval
< minimumBeamSubdivisionInterval
,
then the depths of beam subdivision are limited to
maximumBeamSubdivisionInterval
, but not the frequency/intervals,
therefore possibly deviating from the correct expected metric value. If
respectIncompleteBeams
is set to true (##t
), the depth of the
subdivision (number of beams) reflects the longest possible subdivision interval
within the remaining length of the beam from the current stem. However, the
last two stems of the beam are exempt from this rule.
\relative c'' { c32[ c c c c c c c] \set subdivideBeams = ##t c32[ c c c c c c c] % Set minimum beam subdivision interval to 1/8 just for this beam \once \set minimumBeamSubdivisionInterval = \musicLength 8 c32[ c c c c c c c] % Set maximum beam subdivision interval to 1/16 just for this beam \once \set maximumBeamSubdivisionInterval = \musicLength 16 c32[ c c c c c c c] % Set maximum beam subdivision interval to 3/8 just for this beam \once \set maximumBeamSubdivisionInterval = \musicLength 8*3 [ \repeat unfold 16 c64 ] r2. % Set maximum beam subdivision interval to 1/64 to limit subdivision depth, % despite not being metrically correct \once \set minimumBeamSubdivisionInterval = \musicLength 32 \once \set maximumBeamSubdivisionInterval = \musicLength 64 [ \repeat unfold 32 c128 ] r2. % Shorten beam by 1/32 c32[ c c c c c c] r32 % Shorten beam by 3/32 c32[ c c c c] r16. % Respect the incomplete beams of the previous two examples \set respectIncompleteBeams = ##t c32[ c c c c c c] r32 % no visual change here as last two stems are exempt from this % special rule c32[ c c c c] r16. }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Subdividing beams ] | [ Up : Rhythms ] | [ Tambourine example > ] |
Tam-tam example
A tam-tam example, entered with ’tt’
#(define mydrums '((tamtam default #f 0))) \new DrumStaff \with { instrumentName = #"Tamtam" } \drummode { \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \override Staff.StaffSymbol.line-positions = #'( 0 ) \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5) tt 1 \pp \laissezVibrer } \paper { tagline = ##f }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Tam-tam example ] | [ Up : Rhythms ] | [ Three-sided box > ] |
Tambourine example
A tambourine example, entered ’tamb’
\paper { tagline = ##f } #(define mydrums '((tambourine default #f 0))) \new DrumStaff \with { instrumentName = #"Tambourine" } \drummode { \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \override Staff.StaffSymbol.line-positions = #'( 0 ) \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5) \time 6/8 tamb8. 16 8 8 8 8 | tamb4. 8 8 8 | % the trick with the scaled duration and the shorter rest % is neccessary for the correct ending of the trill-span! tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Tambourine example ] | [ Up : Rhythms ] | [ Time signature in brackets > ] |
Three-sided box
This example shows how to add a markup command to get a three sided box around some text (or other markup).
% New command to add a three sided box, with sides north, west and south % Based on the box-stencil command defined in scm/stencil.scm % Note that ";;" is used to comment a line in Scheme #(define-public (NWS-box-stencil stencil thickness padding) "Add a box around STENCIL, producing a new stencil." (let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding)) (y-ext (interval-widen (ly:stencil-extent stencil Y) padding)) (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) (x-rule (make-filled-box-stencil (interval-widen x-ext thickness) (cons 0 thickness)))) ;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0)) (set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0)) stencil)) % The corresponding markup command, based on the \box command defined % in scm/define-markup-commands.scm #(define-markup-command (NWS-box layout props arg) (markup?) #:properties ((thickness 0.1) (font-size 0) (box-padding 0.2)) "Draw a box round @var{arg}. Looks at @code{thickness}, @code{box-padding} and @code{font-size} properties to determine line thickness and padding around the markup." (let ((pad (* (magstep font-size) box-padding)) (m (interpret-markup layout props arg))) (NWS-box-stencil m thickness pad))) % Test it: \relative c' { c1^\markup { \NWS-box ABCD } c1^\markup { \NWS-box \note {4} #1.0 } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Three-sided box ] | [ Up : Rhythms ] | [ Time signature in parentheses > ] |
Time signature in brackets
The time signature can be enclosed within brackets.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) \time 2/4 a4 b8 c }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Time signature in brackets ] | [ Up : Rhythms ] | [ Time signature printing only the numerator as a number (instead of the fraction) > ] |
Time signature in parentheses
Enclose the time signature in parentheses.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1)) \time 2/4 a4 b8 c }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Time signature in parentheses ] | [ Up : Rhythms ] | [ Veränderung des Layouts von Verzierungen innerhalb der Noten > ] |
Time signature printing only the numerator as a number (instead of the fraction)
Sometimes, a time signature should not print the whole fraction (for
example, 7/4), but only the numerator (digit 7 in this case). This
can be easily done by using
\override Staff.TimeSignature.style = #'single-number
to change
the style permanently. By using
\revert Staff.TimeSignature.style
, this setting can be
reversed. To apply the single-number style to only one time signature,
use the \override
command and prefix it with a \once
.
\relative c'' { \time 3/4 c4 c c % Change the style permanently \override Staff.TimeSignature.style = #'single-number \time 2/4 c4 c \time 3/4 c4 c c % Revert to default style: \revert Staff.TimeSignature.style \time 2/4 c4 c % single-number style only for the next time signature \once \override Staff.TimeSignature.style = #'single-number \time 5/4 c4 c c c c \time 2/4 c4 c }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Time signature printing only the numerator as a number (instead of the fraction) ] | [ Up : Rhythms ] | [ User defined time signatures > ] |
Veränderung des Layouts von Verzierungen innerhalb der Noten
Das Layout von Verzierungsausdrücken kann in der Musik verändert
werden mit den Funktionen add-grace-property
und
remove-grace-property
. Das folgende Beispiel definiert
die Richtung von Hälsen (Stem) für diese Verzierung, sodass die
Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf
in ein Kreuz.
\relative c'' { \new Staff { $(remove-grace-property 'Voice 'Stem 'direction) $(add-grace-property 'Voice 'NoteHead 'style 'cross) \new Voice { \acciaccatura { f16 } g4 \grace { d16 e } f4 \appoggiatura { f,32 g a } e2 } } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Veränderung des Layouts von Verzierungen innerhalb der Noten ] | [ Up : Rhythms ] | [ Using alternative flag styles > ] |
User defined time signatures
New time signature styles can be defined. The time signature in the second measure should be upside down in both staves.
#(add-simple-time-signature-style 'topsy-turvy (lambda (fraction) (make-rotate-markup 180 (make-compound-meter-markup fraction)))) << \new Staff { \time 3/4 f'2. \override Score.TimeSignature.style = #'topsy-turvy \time 3/4 R2. \bar "|." } \new Staff { R2. e'' } >>
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < User defined time signatures ] | [ Up : Rhythms ] | [ Using grace note slashes with normal heads > ] |
Using alternative flag styles
Alternative shapes for flags on eighth and shorter notes can be displayed by
overriding the stencil
property of Flag
. LilyPond provides
the following functions: modern-straight-flag
,
old-straight-flag
, and flat-flag
. Use \revert
to
restore the default shape.
To get stacked (i.e., vertically more compact) flags, call the command
\flagStyleStacked
, which can be reset with
\flagStyleDefault
.
Overriding the Flag
stencil does not change how flag elements are
positioned vertically. This is especially noticeable for flat flags:
LilyPond doesn’t dynamically adjust the vertical gaps between flag elements
in the same way as it does for beams. A possible solution to harmonize the
appearance is to replace flat flags with half beams, as shown in the second
staff; however, this can’t be done automatically. In the code of this
snippet, such half beams are entered with @
as a prefix, for example
@c8
.
Be aware that half beams are not Flag
grobs. This means in
particular that modifying Flag
properties won’t have any effect on
them (you have to use Beam
properties instead), and properties for
their associated Stem
grob will also behave beam-like.
"@" = #(define-music-function (music) (ly:music?) #{ \set stemLeftBeamCount = 0 $music [] #}) testnotes = { \autoBeamOff c8 d16 e''32 f64 \acciaccatura { g,,,8 } a128 b } \relative c' { \override TextScript.staff-padding = 6 \time 1/4 <>^"default" \testnotes \override Flag.stencil = #modern-straight-flag <>_"modern straight" \testnotes \override Flag.stencil = #old-straight-flag <>^"old straight" \testnotes \override Flag.stencil = #flat-flag <>_"flat" \testnotes \revert Flag.stencil \flagStyleStacked <>^"stacked" \testnotes \flagStyleDefault <>_"default" \testnotes } \relative c' { \time 3/4 \override Flag.stencil = #flat-flag <>^"flat" c8 c[ c] d16 d[ d] e''32 e[ e] f64 f[ f] \acciaccatura { g,,,8 } a128 a[ a a a a] <>^"beam-like" @c8 c[ c] @d16 d[ d] @e''32 e[ e] @f64 f[ f] \acciaccatura { g,,,8 } @a128 a[ a a a a] } \layout { indent = 0 \context { \Score \override NonMusicalPaperColumn.line-break-permission = ##f } }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Using alternative flag styles ] | [ Up : Rhythms ] | [ Überbindungen für Arpeggio benutzen > ] |
Using grace note slashes with normal heads
The slash through the stem found in acciaccaturas can be applied in other situations.
\relative c'' { \override Flag.stroke-style = "grace" c8( d2) e8( f4) }
[ << Rhythms ] | [Top][Contents] | [ Expressive marks >> ] |
[ < Using grace note slashes with normal heads ] | [ Up : Rhythms ] | [ Expressive marks > ] |
Überbindungen für Arpeggio benutzen
Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In
diesem Fall stehen die übergebundenen Noten nicht unbedingt hintereinander.
Das Verhalten kann erreicht werden, indem die tieWaitForNote
-Eigenschaft
auf #t
gesetzt wird. Diese Funktion ist auch sinnvoll, um etwa
ein Tremolo mit einem Akkord zu überbinden, kann aber prinzipiell auch
für normale Überbindungen eingesetzt werden
\relative c' { \set tieWaitForNote = ##t \grace { c16[ ~ e ~ g] ~ } <c, e g>2 \repeat tremolo 8 { c32 ~ c' ~ } <c c,>1 e8 ~ c ~ a ~ f ~ <e' c a f>2 \tieUp c8 ~ a \tieDown \tieDotted g8 ~ c g2 }
[ << Rhythms ] | [Top][Contents] | [ Repeats >> ] |
[ < Überbindungen für Arpeggio benutzen ] | [ Up : Top ] | [ Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms > ] |
Expressive marks
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Expressive marks ] | [ Up : Expressive marks ] | [ Adding parentheses around an expressive mark or chordal note > ] |
Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms
LilyPond syntax can involve many unusual placements for parentheses, brackets etc., which might sometimes have to be interleaved.
For example, when entering a manual beam, the left square bracket has to be placed after the starting note and its duration, not before. Similarly, the right square bracket should directly follow the note which is to be at the end of the requested beaming, even if this note happens to be inside a tuplet section.
This snippet demonstrates how to combine manual beaming, manual slurs, ties and phrasing slurs with tuplet sections (enclosed within curly braces).
{ r16[ g16 \tuplet 3/2 { r16 e'8] } g16( a \tuplet 3/2 { b d e') } g8[( a \tuplet 3/2 { b d') e'] ~ } \time 2/4 \tuplet 5/4 { e'32\( a b d' e' } a'4.\) }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms ] | [ Up : Expressive marks ] | [ Adding timing marks to long glissandi > ] |
Adding parentheses around an expressive mark or chordal note
The \parenthesize
function is a special tweak that encloses
objects in parentheses. The associated grob is ParenthesesItem
.
\relative c' { c2-\parenthesize -> \override Parentheses.padding = #0.1 \override Parentheses.font-size = #-4 <d \parenthesize f a>2 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Adding parentheses around an expressive mark or chordal note ] | [ Up : Expressive marks ] | [ Adjusting slur positions vertically > ] |
Adding timing marks to long glissandi
Skipped beats in very long glissandi are sometimes indicated by timing marks, often consisting of stems without noteheads. Such stems can also be used to carry intermediate expression markings.
If the stems do not align well with the glissando, they may need to be repositioned slightly.
glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } glissandoSkipOff = { \revert NoteColumn.glissando-skip \undo \hide NoteHead \revert NoteHead.no-ledgers } \relative c'' { r8 f8\glissando \glissandoSkipOn f4 g a a8\noBeam \glissandoSkipOff a8 r8 f8\glissando \glissandoSkipOn g4 a8 \glissandoSkipOff a8 | r4 f\glissando \< \glissandoSkipOn a4\f \> \glissandoSkipOff b8\! r | }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Adding timing marks to long glissandi ] | [ Up : Expressive marks ] | [ Das Aussehen von unbestimmten Glissandi anpassen > ] |
Adjusting slur positions vertically
Using \override Slur.positions
it is possible to set the
vertical position of the start and end points of a slur to absolute
values (or rather, forcing LilyPond’s slur algorithm to consider these
values as desired). In many cases, this means a lot of trial and error
until good values are found. You probably have tried the
\offset
command next just to find out that it doesn’t work for
slurs, emitting a warning instead.
The code in this snippet allows you to tweak the vertical start and end
positions by specifying relative changes, similar to
\offset
.
Syntax: \offsetPositions #'(dy1 . dy2)
offsetPositions = #(define-music-function (offsets) (number-pair?) #{ \once \override Slur.control-points = #(lambda (grob) (match-let ((((_ . y1) _ _ (_ . y2)) (ly:slur::calc-control-points grob)) ((off1 . off2) offsets)) (set! (ly:grob-property grob 'positions) (cons (+ y1 off1) (+ y2 off2))) (ly:slur::calc-control-points grob))) #}) \relative c'' { c4(^"default" c, d2) \offsetPositions #'(0 . 1) c'4(^"(0 . 1)" c, d2) \offsetPositions #'(0 . 2) c'4(^"(0 . 2)" c, d2) \bar "||" g4(^"default" a d'2) \offsetPositions #'(1 . 0) g,,4(^"(1 . 0)" a d'2) \offsetPositions #'(2 . 0) g,,4(^"(2 . 0)" a d'2) }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Adjusting slur positions vertically ] | [ Up : Expressive marks ] | [ Aligning the ends of hairpins to NoteColumn directions > ] |
Das Aussehen von unbestimmten Glissandi anpassen
Die shortest-duration-space
-Eigenschaft kann verändert werden, um
das Aussehen von unbestimmten Glissandi anzupassen.
\relative c'' { \override Score.SpacingSpanner.shortest-duration-space = 4.0 c2-\bendAfter 5 c2-\bendAfter -4.75 c2-\bendAfter 8.5 c2-\bendAfter -6 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Das Aussehen von unbestimmten Glissandi anpassen ] | [ Up : Expressive marks ] | [ Alternative breve notes > ] |
Aligning the ends of hairpins to NoteColumn directions
The ends of hairpins may be aligned to the LEFT
, CENTER
or RIGHT
of NoteColumn
grobs by overriding the property
endpoint-alignments
, which is a pair of numbers representing the
left and right ends of the hairpin. endpoint-alignments
are
expected to be directions (either -1, 0 or 1). Other values will
be transformed with a warning. The right end of a hairpin terminating
at a rest is not affected, always ending at the left edge of the rest.
{ c'2\< <c' d'>\! | \override Hairpin.endpoint-alignments = #'(1 . -1) c'2\< <c' d'>\! | \override Hairpin.endpoint-alignments = #`(,LEFT . ,CENTER) c'2\< <c' d'>\! | }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Aligning the ends of hairpins to NoteColumn directions ] | [ Up : Expressive marks ] | [ Asymmetric slurs > ] |
Alternative breve notes
Breve notes are also available with two vertical lines on each side of the notehead instead of one line and in baroque style.
\relative c'' { \time 4/2 c\breve | \override Staff.NoteHead.style = #'altdefault b\breve \override Staff.NoteHead.style = #'baroque b\breve \revert Staff.NoteHead.style a\breve }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Alternative breve notes ] | [ Up : Expressive marks ] | [ Breathing signs > ] |
Asymmetric slurs
Slurs can be made asymmetric to match an asymmetric pattern of notes better.
slurNotes = { d,8( a' d f a f' d, a) } \relative c' { \stemDown \slurUp \slurNotes \once \override Slur.eccentricity = #3.0 \slurNotes }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Asymmetric slurs ] | [ Up : Expressive marks ] | [ Broken Crescendo Hairpin > ] |
Breathing signs
Breathing signs are available in different tastes: commas (default), ticks, vees and „railroad tracks“ (caesura).
\new Staff \relative c'' { \key es \major \time 3/4 % this bar contains no \breathe << { g4 as g } \\ { es4 bes es } >> | % Modern notation: % by default, \breathe uses the rcomma, just as if saying: % \override BreathingSign.text = % #(make-musicglyph-markup "scripts.rcomma") << { g4 as g } \\ { es4 \breathe bes es } >> | % rvarcomma and lvarcomma are variations of the default rcomma % and lcomma % N.B.: must use Staff context here, since we start a Voice below \override Staff.BreathingSign.text = \markup { \musicglyph "scripts.rvarcomma" } << { g4 as g } \\ { es4 \breathe bes es } >> | % raltcomma and laltcomma are alternative variations of the % default rcomma and lcomma \override Staff.BreathingSign.text = \markup { \musicglyph "scripts.raltcomma" } << { g4 as g } \\ { es4 \breathe bes es } >> | % vee \override BreathingSign.text = \markup { \musicglyph "scripts.uupbow" } es8[ d es f g] \breathe f | % caesura \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.curved" } es8[ d] \breathe es[ f g f] | es2 r4 \bar "||" }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Breathing signs ] | [ Up : Expressive marks ] | [ Caesura ("railtracks") with fermata > ] |
Broken Crescendo Hairpin
In order to make parts of a crescendo hairpin invisible, the following method is used: A white rectangle is drawn on top of the respective part of the crescendo hairpin, making it invisible. The rectangle is defined as postscript code within a text markup.
The markup command with-dimensions
tells LilyPond to consider
only the bottom edge of the rectangle when spacing it against the
hairpin. The property staff-padding
prevents the rectangle from
fitting between the hairpin and staff.
Make sure the hairpin is in a lower layer than the text markup to draw the rectangle over the hairpin.
\relative c' { << { \dynamicUp r2 r16 c'8.\pp r4 } \\ { \override DynamicLineSpanner.layer = #0 des,2\mf\< ~ \override TextScript.layer = #2 \once\override TextScript.staff-padding = #6 \once\override TextScript.vertical-skylines = #'() des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0) \with-color #white \filled-box #'(2 . 7) #'(0 . 2) #0 r8. des4 ~ des16->\sff r8. } >> }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Broken Crescendo Hairpin ] | [ Up : Expressive marks ] | [ Center text below hairpin dynamics > ] |
Caesura ("railtracks") with fermata
A caesura is sometimes denoted by a double „railtracks“ breath mark with a fermata sign positioned above. This snippet shows an optically pleasing combination of railtracks and fermata.
\relative c'' { c2. % construct the symbol \override BreathingSign.text = \markup { \override #'(direction . 1) \override #'(baseline-skip . 1.8) \dir-column { \translate #'(0.155 . 0) \center-align \musicglyph "scripts.caesura.curved" \center-align \musicglyph "scripts.ufermata" } } \breathe c4 % set the breath mark back to normal \revert BreathingSign.text c2. \breathe c4 \bar "|." }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Caesura ("railtracks") with fermata ] | [ Up : Expressive marks ] | [ Text und Strecker-Stile für Dynamik-Texte ändern > ] |
Center text below hairpin dynamics
This example provides a function to typeset a hairpin (de)crescendo with some additional text below it, such as „molto“ or „poco“. The added text will change the direction according to the direction of the hairpin. The Hairpin is aligned to DynamicText.
The example also illustrates how to modify the way an object is normally printed, using some Scheme code.
\paper { tagline = ##f } hairpinWithCenteredText = #(define-music-function (text) (markup?) #{ \once \override Voice.Hairpin.after-line-breaking = #(lambda (grob) (let* ((stencil (ly:hairpin::print grob)) (par-y (ly:grob-parent grob Y)) (dir (ly:grob-property par-y 'direction)) (staff-line-thickness (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness)) (new-stencil (ly:stencil-aligned-to (ly:stencil-combine-at-edge (ly:stencil-aligned-to stencil X CENTER) Y dir (ly:stencil-aligned-to (grob-interpret-markup grob (make-fontsize-markup (magnification->font-size (+ (ly:staff-symbol-staff-space grob) (/ staff-line-thickness 2))) text)) X CENTER)) X LEFT)) (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space)) (par-x (ly:grob-parent grob X)) (dyn-text (grob::has-interface par-x 'dynamic-text-interface)) (dyn-text-stencil-x-length (if dyn-text (interval-length (ly:stencil-extent (ly:grob-property par-x 'stencil) X)) 0)) (x-shift (if dyn-text (- (+ staff-space dyn-text-stencil-x-length) (* 0.5 staff-line-thickness)) 0))) (ly:grob-set-property! grob 'Y-offset 0) (ly:grob-set-property! grob 'stencil (ly:stencil-translate-axis new-stencil x-shift X)))) #}) hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } \layout { ragged-right = ##f } \relative c' { \hairpinMolto c2\< c\f \hairpinMore c2\ppppp\< c\f \break \hairpinMolto c2^\< c\f \hairpinMore c2\ppppp\< c\f }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Center text below hairpin dynamics ] | [ Up : Expressive marks ] | [ Changing the appearance of a slur from solid to dotted or dashed > ] |
Text und Strecker-Stile für Dynamik-Texte ändern
Der Text, der für Crescendo und Decrescendo gesetzt wird, kann geändert
werden, indem man die Eigenschaften crescendoText
und
decrescendoText
verändert. Der Stil des Streckers kann auch
geändert werden, indem die 'style
-Eigenschaft des
DynamicTextSpanner
beeinflusst wird. Der Standardwert ist
'hairpin
, andere Möglichkeiten sind 'line
, 'dashed-line
und 'dotted-line
.
\relative c'' { \set crescendoText = \markup { \italic { cresc. poco } } \set crescendoSpanner = #'text \override DynamicTextSpanner.style = #'dotted-line a2\< a a2 a a2 a a2 a\mf }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Text und Strecker-Stile für Dynamik-Texte ändern ] | [ Up : Expressive marks ] | [ Das Atemzeichen-Symbol verändern > ] |
Changing the appearance of a slur from solid to dotted or dashed
The appearance of slurs may be changed from solid to dotted or dashed.
\relative c' { c4( d e c) \slurDotted c4( d e c) \slurSolid c4( d e c) \slurDashed c4( d e c) \slurSolid c4( d e c) }
Das Atemzeichen-Symbol verändern
Das Schriftzeichen für das Atemzeichen kann verändert werden, indem
die Text-Eigenschaft des BreathingSign
-Layoutobjekts mit einer
beliebigen Textbeschriftung definiert wird.
\relative c'' { c2 \override BreathingSign.text = \markup { \musicglyph "scripts.rvarcomma" } \breathe d2 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Das Atemzeichen-Symbol verändern ] | [ Up : Expressive marks ] | [ Combining dynamics with markup texts > ] |
Changing the number of augmentation dots per note
The number of augmentation dots on a single note can be changed independently of the dots placed after the note.
\relative c' { c4.. a16 r2 | \override Dots.dot-count = 4 c4.. a16 r2 | \override Dots.dot-count = 0 c4.. a16 r2 | \revert Dots.dot-count c4.. a16 r2 | }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Changing the number of augmentation dots per note ] | [ Up : Expressive marks ] | [ Moderne Glissandi > ] |
Combining dynamics with markup texts
Some dynamics may involve text indications (such as „più forte“ or
„piano subito“). These can be produced using a \markup
block.
piuF = \markup { \italic più \dynamic f } \layout { ragged-right = ##f } \relative c'' { c2\f c-\piuF }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Combining dynamics with markup texts ] | [ Up : Expressive marks ] | [ Controlling spanner visibility after a line break > ] |
Moderne Glissandi
Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem eine Kadenz eingesetzt wird und die Endnote unsichtbar gemacht wird.
\relative c'' { \time 3/4 \override Glissando.style = #'zigzag c4 c \cadenzaOn c4\glissando \hideNotes c,,4 \unHideNotes \cadenzaOff \bar "|" }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Moderne Glissandi ] | [ Up : Expressive marks ] | [ Die vertikale Anordnung von Beschriftungen kontrollieren > ] |
Controlling spanner visibility after a line break
The visibility of spanners which end on the first note following a line
break is controlled by the after-line-breaking
callback
ly:spanner::kill-zero-spanned-time
.
For objects such as glissandos and hairpins, the default behaviour is to hide the spanner after a break; disabling the callback will allow the left-broken span to be shown.
Conversely, spanners which are usually visible, such as text spans, can be hidden by enabling the callback.
\paper { ragged-right = ##t tagline = ##f } \relative c'' { \override Hairpin.to-barline = ##f \override Glissando.breakable = ##t % show hairpin \override Hairpin.after-line-breaking = ##t % hide text span \override TextSpanner.after-line-breaking = #ly:spanner::kill-zero-spanned-time e2\<\startTextSpan % show glissando \override Glissando.after-line-breaking = ##t f2\glissando \break f,1\!\stopTextSpan }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Controlling spanner visibility after a line break ] | [ Up : Expressive marks ] | [ Einen Doppelschlag mit Vorhalt erstellen > ] |
Die vertikale Anordnung von Beschriftungen kontrollieren
Die vertikale Anordnung von Beschriftungen wird mit der
'script-priority
-Eigenschaft kontrolliert. Um so kleiner die
Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In
diesem Beispiel hat das TextScript
-Objekt (das Kreuz) zuerst
die niedrigste Priorität, wird also auch am niedrigsten in dem ersten
Beispiel gesetzt. Im zweiten Fall hat der Praller (das Script
)
die niedrigste Priorität, darum wird er am nächsten zum System gesetzt.
Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge
anhand ihres Auftretens in der Quelldatei entschieden.
\relative c''' { \once \override TextScript.script-priority = -100 a2^\prall^\markup { \sharp } \once \override Script.script-priority = -100 a2^\prall^\markup { \sharp } \set fingeringOrientations = #'(up) <c-2 a-1>2 <a-1 c\tweak script-priority -100 -2>2 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Die vertikale Anordnung von Beschriftungen kontrollieren ] | [ Up : Expressive marks ] | [ Arpeggios zwischen unterschiedlichen Stimmen erzeugen > ] |
Einen Doppelschlag mit Vorhalt erstellen
Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das
Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die
outside-staff-priority
-Eigenschaft muss auf falsch (#f
)
gesetzt werden, weil sie sonst über die Eigenschaft
avoid-slur property
dominieren würde. Der Wert von halign
wird benutzt, um den Doppelschlag horizontal zu positionieren.
\relative c'' { \after 2*2/3 \turn c2( d4) r | \after 4 \turn c4.( d8) \after 4 { \once \set suggestAccidentals = ##t \once \override AccidentalSuggestion.outside-staff-priority = ##f \once \override AccidentalSuggestion.avoid-slur = #'inside \once \override AccidentalSuggestion.font-size = -3 \once \override AccidentalSuggestion.script-priority = -1 \once \hideNotes cis8\turn \noBeam } d4.( e8) }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Einen Doppelschlag mit Vorhalt erstellen ] | [ Up : Expressive marks ] | [ Arpeggio über mehrere Systeme in anderen Kontexten > ] |
Arpeggios zwischen unterschiedlichen Stimmen erzeugen
Ein Arpeggio kann zwischen Noten aus unterschiedlichen Stimmen auf demselben
System gezogen werden, wenn der Span_arpeggio_engraver
in den
Staff
-Kontext verschoben wird:
\new Staff \with { \consists "Span_arpeggio_engraver" } \relative c' { \set Staff.connectArpeggios = ##t << { <e' g>4\arpeggio <d f> <d f>2 } \\ { <d, f>2\arpeggio <g b>2 } >> }
Arpeggio über mehrere Systeme in anderen Kontexten
Arpeggio über mehrere Systeme können in anderen Kontexten als dem
PianoStaff
erstellt werden, wenn der Span_arpeggio_engraver
in den Score
-Kontext eingefügt wird.
\new PianoStaff \relative c'' << \set PianoStaff.connectArpeggios = ##t \new Staff { <c e g c>4\arpeggio <g c e g>4\arpeggio <e g c e>4\arpeggio <c e g c>4\arpeggio } \new Staff { \clef bass \repeat unfold 4 { <c,, e g c>4\arpeggio } } >>
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Arpeggio über mehrere Systeme in anderen Kontexten ] | [ Up : Expressive marks ] | [ Creating double-digit fingerings > ] |
Arpeggio zwischen Systemen in einem Klaviersystem erstellen
In einem Klaviersystem (PianoStaff
) ist es möglich, ein Arpeggio
zwischen beiden Systemen zu verbinden, indem die
PianoStaff.connectArpeggios
-Eigenschaft gesetzt wird.
\score { \new ChoirStaff { \set Score.connectArpeggios = ##t << \new Voice \relative c' { <c e>2\arpeggio <d f>2\arpeggio <c e>1\arpeggio } \new Voice \relative c { \clef bass <c g'>2\arpeggio <b g'>2\arpeggio <c g'>1\arpeggio } >> } \layout { \context { \Score \consists "Span_arpeggio_engraver" } } }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Arpeggio zwischen Systemen in einem Klaviersystem erstellen ] | [ Up : Expressive marks ] | [ Creating "real" parenthesized dynamics > ] |
Creating double-digit fingerings
Creating fingerings larger than 5 is possible.
\relative c' { c1-10 c1-50 c1-36 c1-29 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Creating double-digit fingerings ] | [ Up : Expressive marks ] | [ Creating slurs across voices > ] |
Creating "real" parenthesized dynamics
Although the easiest way to add parentheses to a dynamic mark is to use
a \markup
block, this method has a downside: the created
objects will behave like text markups, and not like dynamics.
However, it is possible to create a similar object using the equivalent
Scheme code (as described in the Notation Reference), combined with the
make-dynamic-script
function. This way, the markup will be
regarded as a dynamic, and therefore will remain compatible with
commands such as \dynamicUp
or \dynamicDown
.
paren = #(define-event-function (dyn) (ly:event?) (make-dynamic-script #{ \markup \concat { \normal-text \italic \fontsize #2 ( \pad-x #0.2 #(ly:music-property dyn 'text) \normal-text \italic \fontsize #2 ) } #})) \relative c'' { c4\paren\f c c \dynamicUp c\paren\p }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Creating "real" parenthesized dynamics ] | [ Up : Expressive marks ] | [ Creating text spanners > ] |
Creating slurs across voices
In some situations, it may be necessary to create slurs between notes
from different voices. The solution is to add invisible notes to one of
the voices, using \hideNotes
.
This example is measure 235 of the Ciaconna from Bach’s 2nd Partita for solo violin, BWV 1004.
\relative c' { << { d16( a') s a s a[ s a] s a[ s a] } \\ { \slurUp bes,16[ s e]( \hideNotes a) \unHideNotes f[( \hideNotes a) \unHideNotes fis]( \hideNotes a) \unHideNotes g[( \hideNotes a) \unHideNotes gis]( \hideNotes a) } >> }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Creating slurs across voices ] | [ Up : Expressive marks ] | [ Eigene Dynamiktextspanner nachgestellt > ] |
Creating text spanners
The \startTextSpan
and \stopTextSpan
commands allow the
creation of text spanners as easily as pedal indications or
octavations. Override some properties of the TextSpanner
object
to modify its output.
\paper { ragged-right = ##f } \relative c'' { \override TextSpanner.bound-details.left.text = #"bla" \override TextSpanner.bound-details.right.text = #"blu" a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'line \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'dashed-line \override TextSpanner.bound-details.left.text = \markup { \draw-line #'(0 . 1) } \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -2) } \once \override TextSpanner.bound-details.right.padding = #-2 a4 \startTextSpan b4 c a4 \stopTextSpan \set Staff.middleCPosition = #-13 \override TextSpanner.dash-period = #10 \override TextSpanner.dash-fraction = #0.5 \override TextSpanner.thickness = #10 a4 \startTextSpan b4 c a4 \stopTextSpan }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Creating text spanners ] | [ Up : Expressive marks ] | [ Dynamiktextstrecker nachgestellt > ] |
Eigene Dynamiktextspanner nachgestellt
Die Nachstellung funktioniert für eigene Crescendo-Textstrecker. Die Strecker sollten an der ersten Note eines Taktes beginnen. Man muss -\mycresc benutzen, sonst wird der Beginn des Streckers der nächsten Note zugewiesen.
% Two functions for (de)crescendo spanners where you can explicitly % give the spanner text. mycresc = #(define-music-function (mymarkup) (markup?) (make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text mymarkup)) mydecresc = #(define-music-function (mymarkup) (markup?) (make-music 'DecrescendoEvent 'span-direction START 'span-type 'text 'span-text mymarkup)) \relative c' { c4-\mycresc "custom cresc" c4 c4 c4 | c4 c4 c4 c4 | c4-\mydecresc "custom decresc" c4 c4 c4 | c4 c4\! c4 c4 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Eigene Dynamiktextspanner nachgestellt ] | [ Up : Expressive marks ] | [ Glissando kann Grobs überspringen > ] |
Dynamiktextstrecker nachgestellt
Die \cresc, \dim und \decresc Strecker können umdefiniert werden, um nachgestellt zu funktionieren und einen Textstrecker zu produzieren. Eigene Strecker können auch einfach definiert werden. Klammer- und Textcrescendi können einfach vermischt werden. \< und \> erstellen normalerweise Klammern, \cresc usw. dagegen normalerweise Textspanner.
% Some sample text dynamic spanners, to be used as postfix operators crpoco = #(make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text "cresc. poco a poco") \relative c' { c4\cresc d4 e4 f4 | g4 a4\! b4\crpoco c4 | c4 d4 e4 f4 | g4 a4\! b4\< c4 | g4\dim a4 b4\decresc c4\! }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Dynamiktextstrecker nachgestellt ] | [ Up : Expressive marks ] | [ Hairpins with different line styles > ] |
Glissando kann Grobs überspringen
NoteColumn
-Grobs können bei Glissandos übersprungen werden.
\relative c' { a2 \glissando \once \override NoteColumn.glissando-skip = ##t f''4 d, }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Glissando kann Grobs überspringen ] | [ Up : Expressive marks ] | [ Crescendo-Linien von Dynamik-Texten unterdrücken > ] |
Hairpins with different line styles
Hairpins can take any style from line-interface
- dashed-line,
dotted-line, line, trill or zigzag.
\relative c' { c2\< c\! \override Hairpin.style = #'dashed-line c2\< c\! \override Hairpin.style = #'dotted-line c2\< c\! \override Hairpin.style = #'line c2\< c\! \override Hairpin.style = #'trill c2\< c\! \override Hairpin.style = #'zigzag c2\< c\! \revert Hairpin.style c2\< c\! }
Crescendo-Linien von Dynamik-Texten unterdrücken
Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie gesetzt, die ihre Dauer anzeigt. Diese Linie kann auf folgende Weise unterdrückt werden:
\relative c'' { \override DynamicTextSpanner.style = #'none \crescTextCresc c1\< | d | b | c\! }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Crescendo-Linien von Dynamik-Texten unterdrücken ] | [ Up : Expressive marks ] | [ Eine Zäsur einfügen > ] |
Horizontally aligning custom dynamics (e.g. "sempre pp", "piu f", "subito p")
Some dynamic expressions involve additional text, like „sempre pp“. Since dynamics are usually centered under the note, the \pp would be displayed way after the note it applies to.
To correctly align the „sempre pp“ horizontally so that it is aligned as if it were only the \pp, there are several approaches:
- Simply use
\once\override DynamicText.X-offset = #-9.2
before the note with the dynamics to manually shift it to the correct position. Drawback: This has to be done manually each time you use that dynamic markup... - Add some padding (
#:hspace 7.1
) into the definition of your custom dynamic mark so that after LilyPond center-aligns it, it is already correctly aligned. Drawback: The padding really takes up that space and does not allow any other markup or dynamics to be shown in that position. - Shift the dynamic script
\once\override ... .X-offset = ...
. Drawback:\once\override
is needed for every invocation! - Set the dimensions of the additional text to 0 (using
#:with-dimensions '(0 . 0) '(0 . 0)
). Drawback: For LilyPond, „sempre“ has no extent now. This means it might put other stuff there, causing collisions (which are not detected by LilyPond’s collision detection algorithm!). There also seems to be some spacing, so it is not exactly the same alignment as without the additional text. - Add an explicit shift directly inside the scheme function for the dynamic script.
- Set an explicit alignment inside the dynamic script. By default, this
won’t have any effect, only if one sets
X-offset
! Drawback: One needs to setDynamicText.X-offset
, which will apply to all dynamic texts! Also, it is aligned at the right edge of the additional text, not at the center of \pp.
\paper { ragged-right = ##f indent = 2.5\cm tagline = ##f } % Solution 1: Using a simple markup with a particular halign value % Drawback: It's a markup, not a dynamic command, so \dynamicDown % etc. will have no effect semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } % Solution 2: Using a dynamic script & shifting with % \once \override ...X-offset = .. % Drawback: \once \override needed for every invocation semppK = #(make-dynamic-script (markup #:line (#:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 3: Padding the dynamic script so the center-alignment % puts it at the correct position % Drawback: the padding really reserves the space, nothing else can be there semppT = #(make-dynamic-script (markup #:line (#:normal-text #:italic "sempre" #:dynamic "pp" #:hspace 7.1))) % Solution 4: Dynamic, setting the dimensions of the additional text to 0 % Drawback: To lilypond "sempre" has no extent, so it might put % other stuff there => collisions % Drawback: Also, there seems to be some spacing, so it's not exactly the % same alignment as without the additional text semppM = #(make-dynamic-script (markup #:line (#:with-dimensions '(0 . 0) '(0 . 0) #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 5: Dynamic with explicit shifting inside the scheme function semppG = #(make-dynamic-script (markup #:hspace 0 #:translate '(-18.85 . 0) #:line (#:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 6: Dynamic with explicit alignment. This has only effect % if one sets X-offset! % Drawback: One needs to set DynamicText.X-offset! % Drawback: Aligned at the right edge of the additional text, % not at the center of pp semppMII = #(make-dynamic-script (markup #:line (#:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) \new StaffGroup << \new Staff = "s" \with { instrumentName = \markup \column { Normal } } << \relative c'' { \key es \major c4\pp c\p c c | c\ff c c\pp c } >> \new Staff = "sMarkup" \with { instrumentName = \markup \column { Normal markup } } << \relative c'' { \key es \major c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c } >> \new Staff = "sK" \with { instrumentName = \markup \column { Explicit shifting } } << \relative c'' { \key es \major \once \override DynamicText.X-offset = #-9.2 c4\semppK c\p c c c4\ff c \once \override DynamicText.X-offset = #-9.2 c4\semppK c } >> \new Staff = "sT" \with { instrumentName = \markup \column { Right padding } } << \relative c'' { \key es \major c4\semppT c\p c c | c\ff c c\semppT c } >> \new Staff = "sM" \with { instrumentName = \markup \column { Set dimension "to zero" } } << \relative c'' { \key es \major c4\semppM c\p c c | c\ff c c\semppM c } >> \new Staff = "sG" \with { instrumentName = \markup \column { Shift inside dynamics} } << \relative c'' { \key es \major c4\semppG c\p c c | c\ff c c\semppG c } >> \new Staff = "sMII" \with { instrumentName = \markup \column { Alignment inside dynamics } } << \relative c'' { \key es \major % Setting to ##f (false) gives the same result \override DynamicText.X-offset = #0 c4\semppMII c\p c c | c\ff c c\semppMII c } >> >> \layout { \override Staff.InstrumentName.self-alignment-X = #LEFT }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Horizontally aligning custom dynamics (e.g. "sempre pp", "piu f", "subito p") ] | [ Up : Expressive marks ] | [ Laissez vibrer ties > ] |
Eine Zäsur einfügen
Zäsurzeichen können erstellt werden, indem die 'text
-Eigenschaft
des BreathingSign
-Objektes verändert wird. Ein gekrümmtes
Zäsurzeichen ist auch möglich.
\relative c'' { \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.straight" } c8 e4. \breathe g8. e16 c4 \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.curved" } g8 e'4. \breathe g8. e16 c4 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Eine Zäsur einfügen ] | [ Up : Expressive marks ] | [ Line arrows > ] |
Laissez vibrer ties
Laissez vibrer ties have a fixed size. Their formatting can be tuned
using 'tie-configuration
.
\relative c' { <c e g>4\laissezVibrer r <c f g>\laissezVibrer r <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8 <c d e f>4\laissezVibrer r \override LaissezVibrerTieColumn.tie-configuration = #`((-7 . ,DOWN) (-5 . ,DOWN) (-3 . ,UP) (-1 . ,UP)) <c d e f>4\laissezVibrer r }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Laissez vibrer ties ] | [ Up : Expressive marks ] | [ Legatobögen mit kompliziertem Strichelmuster > ] |
Line arrows
Arrows can be applied to text-spanners and line-spanners (such as the Glissando).
\relative c'' { \override TextSpanner.bound-padding = #1.0 \override TextSpanner.style = #'line \override TextSpanner.bound-details.right.arrow = ##t \override TextSpanner.bound-details.left.text = #"fof" \override TextSpanner.bound-details.right.text = #"gag" \override TextSpanner.bound-details.right.padding = #0.6 \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override Glissando.bound-details.right.arrow = ##t \override Glissando.arrow-length = #0.5 \override Glissando.arrow-width = #0.25 a8\startTextSpan gis a4 b\glissando b, g'4 c\stopTextSpan c2 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Line arrows ] | [ Up : Expressive marks ] | [ Die Standardwerte der Abkürzungen von Artikulationen verändern > ] |
Legatobögen mit kompliziertem Strichelmuster
definieren
Legatobögen können mit einem komplizierten Strichelmuster
gesetzt werden, indem die dash-definition
-Eigenschaft
definiert wird. dash-definition
ist eine Liste bestehend
aus dash-elements
-Elementen. Ein dash-element
ist
eine Liste an Parametern, die das Strichverhalten für einen
Abschnitt des Legatobogens definieren.
Der Bogen wird nach dem Bezierparameter t definiert, welcher
von 0 am linken Ende des Bogens zu 1 am rechten Ende des Bogens
reicht. dash-element
ist eine Liste (start-t stop-t dash-Unterbrechung dash-Abschnitt)
. Die Region des Bogens von start-t
bis stop-t
hat eine Unterbrechung von dash-Unterbrechung
von jedem dash-Abschnitt
-Schwarzabschnitt. dash-Abschnitt
ist in Notenlinienzwischenräumen definiert.
dash-Abschnitt
ist auf 1 für einen durchgehenden Bogen
gesetzt.
\relative c' { \once \override Slur.dash-definition = #'((0 0.3 0.1 0.75) (0.3 0.6 1 1) (0.65 1.0 0.4 0.75)) c4( d e f) \once \override Slur.dash-definition = #'((0 0.25 1 1) (0.3 0.7 0.4 0.75) (0.75 1.0 1 1)) c4( d e f) }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Legatobögen mit kompliziertem Strichelmuster ] | [ Up : Expressive marks ] | [ Moving slur positions vertically > ] |
Die Standardwerte der Abkürzungen von Artikulationen verändern
Die Abkürzungen sind in der Datei ly/script-init.ly definiert, wo
den Variablen dashHat
, dashPlus
, dashDash
,
dashBar
, dashLarger
, dashDot
und
dashUnderscore
Standardwerte zugewiesen werden. Diese Standardwerte
können verändert werden. Um zum Beispiel die Abkürzung
-+
(dashPlus
) mit dem Triller anstatt mit dem +-Symbol zu
assoziieren, muss der Wert trill
der Variable
dashPlus
zugewiesen werden:
\paper { tagline = ##f } \relative c'' { c1-+ } dashPlus = \trill \relative c'' { c1-+ }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Die Standardwerte der Abkürzungen von Artikulationen verändern ] | [ Up : Expressive marks ] | [ Moving the ends of hairpins > ] |
Moving slur positions vertically
The vertical position of a slur can be adjusted using the
positions
property of Slur
. The property has 2
parameters, the first referring to the left end of the slur and the
second to the right. The values of the parameters are not used by
LilyPond to make an exact movement of the slur - instead it selects
what placement of the slur looks best, taking into account the
parameter values. Positive values move the slur up, and are
appropriate for notes with stems down. Negative values move downward
slurs further down.
\relative c' { \stemDown e4( a) \override Slur.positions = #'(1 . 1) e4( a) \override Slur.positions = #'(2 . 2) e4( a) \override Slur.positions = #'(3 . 3) e4( a) \override Slur.positions = #'(4 . 4) e4( a) \override Slur.positions = #'(5 . 5) e4( a) \override Slur.positions = #'(0 . 5) e4( a) \override Slur.positions = #'(5 . 0) e4( a) \stemUp \override Slur.positions = #'(-5 . -5) e4( a) \stemDown \revert Slur.positions e4( a) }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Moving slur positions vertically ] | [ Up : Expressive marks ] | [ Positioning arpeggios > ] |
Moving the ends of hairpins
The ends of hairpins may be offset by setting the shorten-pair
property of the Hairpin
object. Positive values move endpoints
to the right, negative to the left. Unlike the minimum-length
property, this property only affects the appearance of the hairpin; it
does not adjust horizontal spacing (including the position of bounding
dynamics). This method is thus suitable for fine-tuning a hairpin
within its allotted space.
{ c'1~\< c'2~ c'\! \once \override Hairpin.shorten-pair = #'(2 . 2) c'1~\< c'2~ c'\! \once \override Hairpin.shorten-pair = #'(-2 . -2) c'1~\< c'2~ c'\! c'1~\p-\tweak shorten-pair #'(2 . 0)\< c'2~ c'\ffff }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Moving the ends of hairpins ] | [ Up : Expressive marks ] | [ Textbeschriftung innerhalb von Bögen positionieren > ] |
Positioning arpeggios
If you need to extend or shorten an arpeggio, you can modify the upper and lower start positions independently.
\relative c' { <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(-5 . 0) <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(0 . 5) <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(-5 . 5) <c e g b>1\arpeggio }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Positioning arpeggios ] | [ Up : Expressive marks ] | [ Printing hairpins in various styles > ] |
Textbeschriftung innerhalb von Bögen positionieren
Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die
outside-staff-priority
-Eigenschaft auf falsch gesetzt wird.
\relative c'' { \override TextScript.avoid-slur = #'inside \override TextScript.outside-staff-priority = ##f c2(^\markup { \halign #-10 \natural } d4.) c8 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Textbeschriftung innerhalb von Bögen positionieren ] | [ Up : Expressive marks ] | [ Crescendo Klammern al niente schreiben > ] |
Printing hairpins in various styles
Hairpin dynamics may be created in a variety of styles.
\paper { tagline = ##f } \relative c'' { \override Hairpin.stencil = #flared-hairpin a4\< a a a\f a4\p\< a a a\ff a4\sfz\< a a a\! \override Hairpin.stencil = #constante-hairpin a4\< a a a\f a4\p\< a a a\ff a4\sfz\< a a a\! \override Hairpin.stencil = #flared-hairpin a4\> a a a\f a4\p\> a a a\ff a4\sfz\> a a a\! \override Hairpin.stencil = #constante-hairpin a4\> a a a\f a4\p\> a a a\ff a4\sfz\> a a a\! }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Printing hairpins in various styles ] | [ Up : Expressive marks ] | [ Metronom- und Übungszeichen unter das System setzen > ] |
Crescendo Klammern al niente schreiben
Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze
notiert werden (al niente = bis zum Nichts), indem die
circled-tip
-Eigenschaft des Hairpin
-Objekts auf
#t
gesetzt wird.
\relative c'' { \override Hairpin.circled-tip = ##t c2\< c\! c4\> c\< c2\! }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Crescendo Klammern al niente schreiben ] | [ Up : Expressive marks ] | [ Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen > ] |
Metronom- und Übungszeichen unter das System setzen
Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben.
Um sie unter das System zu setzen, muss die direction
-Eigenschaft
von MetronomeMark
oder RehearsalMark
entsprechend verändert werden.
\layout { indent = 0 ragged-right = ##f } { % Metronome marks below the staff \override Score.MetronomeMark.direction = #DOWN \tempo 8. = 120 c''1 % Rehearsal marks below the staff \override Score.RehearsalMark.direction = #DOWN \mark \default c''1 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Metronom- und Übungszeichen unter das System setzen ] | [ Up : Expressive marks ] | [ Die Mindestlänge von Crescendo-Klammern bestimmen > ] |
Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen
Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note
eines Taktes ist, wird die Klammer an der vorhergehenden Taktlinie
beendet. Dieses Verhalten kann auch mit der Eigenschaft
'to-barline
geändert werden:
\relative c'' { e4\< e2. e1\! \override Hairpin.to-barline = ##f e4\< e2. e1\! }
Die Mindestlänge von Crescendo-Klammern bestimmen
Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem
die minimum-length
-Eigenschaft des Hairpin
-Objektes
verändert wird.
<< { \after 4 \< \after 2 \> \after 2. \! f'1 \override Hairpin.minimum-length = 8 \after 4 \< \after 2 \> \after 2. \! f'1 } { \repeat unfold 8 c'4 } >>
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Die Mindestlänge von Crescendo-Klammern bestimmen ] | [ Up : Expressive marks ] | [ Snap-pizzicato or Bartok pizzicato > ] |
Showing the same articulation above and below a note or chord
By default, LilyPond does not allow the same articulation (e.g., an
accent, a fermata, a flageolet, etc.) to be displayed above and below a
note. For example, c4_\fermata^\fermata
only shows a fermata
below. The fermata above gets simply ignored.
However, one can stick scripts (just like fingerings) inside a chord,
which means it is possible to have as many articulations as desired.
This approach has the advantage that it ignores the stem and positions
the articulation relative to the note head. This can be seen in the
case of the flageolets in the snippet. To mimic the behaviour of
scripts outside a chord, 'add-stem-support
would be required.
The solution is thus to write the note as a chord and add the
articulations inside of <...>
, using the direction modifiers
^
and _
as appropriate.
\relative c' { <>^"Wrong" c2_\fermata^\fermata % The second fermata is ignored! <e d'>2^\flageolet_\flageolet \stopStaff s1 \startStaff <>^"Works if written inside a chord" <e_\flageolet d'^\flageolet>2 <e_\flageolet d'^\flageolet>2 <e_\flageolet^\flageolet>2 <e_\fermata^\fermata>2 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Showing the same articulation above and below a note or chord ] | [ Up : Expressive marks ] | [ Using a tick as the breath mark symbol > ] |
Snap-pizzicato or Bartok pizzicato
A snap-pizzicato (also known as „Bartok pizzicato“) is a „strong pizzicato where the string is plucked vertically by snapping and rebounds off the fingerboard of the instrument“ (Wikipedia). It is denoted by a circle with a vertical line going from the center upwards outside the circle.
\relative c' { c4\snappizzicato <c' e g>4\snappizzicato <c' e g>4^\snappizzicato <c, e g>4_\snappizzicato }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Snap-pizzicato or Bartok pizzicato ] | [ Up : Expressive marks ] | [ Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen > ] |
Using a tick as the breath mark symbol
Vocal and wind music frequently uses a tick mark as a breathing sign. This indicates a breath that subtracts a little time from the previous note rather than causing a short pause, which is indicated by the comma breath mark. The mark can be moved up a little to take it away from the stave.
\relative c'' { c2 \breathe d2 \override BreathingSign.Y-offset = #2.6 \override BreathingSign.text = \markup { \musicglyph "scripts.tickmark" } c2 \breathe d2 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Using a tick as the breath mark symbol ] | [ Up : Expressive marks ] | [ Doppelte Bögen für Legato-Akkorde benutzen > ] |
Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen
Das arpeggioBracket
-Klammerobjekt kann benutzt werden, um geteilte
Stimmen anzuzeigen, wenn keine Hälse diese Information bieten. Das sieht
man oft in Chormusik.
\include "english.ly" \score { \relative c'' { \key a \major \time 2/2 << \new Voice = "upper" << { \voiceOne \arpeggioBracket a2( b2 <b d>1\arpeggio) <cs e>\arpeggio ~ <cs e>4 } \addlyrics { \lyricmode { A -- men. } } >> \new Voice = "lower" { \voiceTwo a1 ~ a a ~ a4 \bar "|." } >> } \layout { ragged-right = ##t } }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen ] | [ Up : Expressive marks ] | [ Using the whiteout property > ] |
Doppelte Bögen für Legato-Akkorde benutzen
Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert
werden. Das kann mit der Eigenschaft doubleSlurs
erreicht werden.
\relative c' { \set doubleSlurs = ##t <c e>4( <d f> <c e> <d f>) }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Doppelte Bögen für Legato-Akkorde benutzen ] | [ Up : Expressive marks ] | [ Vertical line as a baroque articulation mark > ] |
Using the whiteout property
Any graphical object can be printed over a white background to mask
parts of objects that lie beneath. This can be useful to improve the
appearance of collisions in complex situations when repositioning
objects is impractical. It is necessary to explicitly set the
layer
property to control which objects are masked by the white
background.
In this example the collision of the tie with the time signature is
improved by masking out the part of the tie that crosses the time
signature, setting the whiteout
property of
TimeSignature
. To do this, TimeSignature
is moved to a
layer above Tie
, which is left in the default layer 1, and
StaffSymbol
is moved to a layer above TimeSignature
so it
is not masked.
{ \override Score.StaffSymbol.layer = 4 \override Staff.TimeSignature.layer = 3 b'2 b'~ \once \override Staff.TimeSignature.whiteout = ##t \time 3/4 b' r4 }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Using the whiteout property ] | [ Up : Expressive marks ] | [ Vertically aligning dynamics across multiple notes > ] |
Vertical line as a baroque articulation mark
This short vertical line placed above the note is commonly used in baroque music. Its meaning can vary, but generally indicates notes that should be played with more „weight“. The following example demonstrates how to achieve such a notation.
upline = \tweak stencil #(lambda (grob) (grob-interpret-markup grob #{ \markup \draw-line #'(0 . 1) #})) \stopped \relative c' { a'4^\upline a( c d')_\upline }
[ << Expressive marks ] | [Top][Contents] | [ Repeats >> ] |
[ < Vertical line as a baroque articulation mark ] | [ Up : Expressive marks ] | [ Repeats > ] |
Vertically aligning dynamics across multiple notes
Dynamics that occur at, begin on, or end on the same note will be
vertically aligned. To ensure that dynamics are aligned when they do
not occur on the same note, increase the staff-padding
property
of the DynamicLineSpanner
object.
\relative c' { \override DynamicLineSpanner.staff-padding = #4 c2\p f\mf g2\< b4\> c\! }
[ << Expressive marks ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Vertically aligning dynamics across multiple notes ] | [ Up : Top ] | [ Volta-Klammern zu zusätzlichen Systemen hinzufügen > ] |
Repeats
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Repeats ] | [ Up : Repeats ] | [ Centered measure numbers > ] |
Volta-Klammern zu zusätzlichen Systemen hinzufügen
Der Volta_engraver
befindet sich im Score
-Kontext und Klammern
werden deshalb nur auf dem obersten System dargestellt. Das kann umgangen
werden, indem man den Volta_engraver
zu dem Staff
-Kontext
hinzufügt, in dem die Klammern zusätzlichen vorkommen sollen. Siehe auch
das "Volta multi staff"-Schnipsel.
<< \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } \new Staff \with { \consists "Volta_engraver" } { c'2 g' e' a' } \new Staff { \repeat volta 2 { c'1 } \alternative { c' } } >>
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Volta-Klammern zu zusätzlichen Systemen hinzufügen ] | [ Up : Repeats ] | [ Changing the default bar lines > ] |
Centered measure numbers
Scores of large ensemble works often have bar numbers placed beneath
the system, centered horizontally on the measure’s extent. This
snippet shows how the Measure_counter_engraver
may be used to
simulate this notational practice. Here, the engraver has been added
to a Dynamics
context.
This snippet presents a legacy method: starting from LilyPond 2.23.3,
\set Score.centerBarNumbers = ##t
is enough.
\layout { \context { \Dynamics \consists #Measure_counter_engraver \override MeasureCounter.direction = #DOWN \override MeasureCounter.font-encoding = #'latin1 \override MeasureCounter.font-shape = #'italic % to control the distance of the Dynamics context from the staff: \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2 } \context { \Score \remove "Bar_number_engraver" } } pattern = \repeat unfold 7 { c'4 d' e' f' } \new StaffGroup << \new Staff { \pattern } \new Staff { \pattern } \new Dynamics { \startMeasureCount s1*7 \stopMeasureCount } >>
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Centered measure numbers ] | [ Up : Repeats ] | [ Controlling the appearance of tremolo slashes > ] |
Changing the default bar lines
Default bar lines can be changed when re-defined in a score context.
% http://lsr.di.unimi.it/LSR/Item?id=964 %%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html %%=> http://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html \layout { \context { \Score %% Changing the defaults from engraver-init.ly measureBarType = "!" startRepeatBarType = "[|:" endRepeatBarType = ":|]" doubleRepeatBarType = ":|][|:" } } %% example: { c'1 \repeat volta 2 { \repeat unfold 2 c' } \repeat volta 2 { \repeat unfold 2 c' } \alternative { { c' } { %% v2.18 workaround \once\override Score.VoltaBracket.shorten-pair = #'(1 . -1) c' } } \bar "|." }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Changing the default bar lines ] | [ Up : Repeats ] | [ Cross-staff tremolos > ] |
Controlling the appearance of tremolo slashes
Using various properties of the StemTremolo
grob it is possible
to control the appearance of tremolo slashes.
- Property
slope
sets the slope for tremolo slashes. - Property
shape
determines whether tremolo slashes look like rectangles (valuerectangle
) or like very small beams (valuebeam-like
). - Property
style
sets both the slope and the shape depending on whether the note has flags, beams, or only a plain stem. This is in contrast to the previous two properties, which change the slope and shape unconditionally. There are two styles defined.-
default
: slashes for down-stem flags are longer and more sloped than slashes for up-stem flags; slashes on beamed notes have a rectangular shape and are parallel to the beam. -
constant
: all slashes are beam-like and have the same slope except for down-stem flags.
-
music = { a''4:32 a': e''8: \noBeam e': a'':[ a':] f':[ g':] d':[ d':] } \new Staff { <>^\markup "default" \music } \new Staff { <>^\markup \typewriter "style = #'constant" \override StemTremolo.style = #'constant \music } \new Staff { <>^\markup \typewriter "shape = #'rectangle" \override StemTremolo.shape = #'rectangle \music } \new Staff { <>^\markup \typewriter "shape = #'beam-like" \override StemTremolo.shape = #'beam-like \music } \new Staff { <>^\markup \typewriter "slope = -0.2" \override StemTremolo.slope = -0.2 \music } \paper { indent = 0 tagline = ##f }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Controlling the appearance of tremolo slashes ] | [ Up : Repeats ] | [ Engraving tremolos with floating beams > ] |
Cross-staff tremolos
Since \repeat tremolo
expects exactly two musical arguments for
chord tremolos, the note or chord which changes staff within a
cross-staff tremolo should be placed inside curly braces together with
its \change Staff
command.
\new PianoStaff << \new Staff = "up" \relative c'' { \key a \major \time 3/8 s4. } \new Staff = "down" \relative c'' { \key a \major \time 3/8 \voiceOne \repeat tremolo 6 { <a e'>32 { \change Staff = "up" \voiceTwo <cis a' dis>32 } } } >>
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Cross-staff tremolos ] | [ Up : Repeats ] | [ Isolierte Prozentwiederholungen > ] |
Engraving tremolos with floating beams
If a tremolo’s total duration is less than a quarter-note, or exactly a
half-note, or between a half-note and a whole-note, it is normally
typeset with all beams touching the stems. Certain engraving styles
typeset some of these beams as centered floating beams that do not
touch the stems. The number of floating beams in this type of tremolo
is controlled with the 'gap-count
property of the Beam
object, and the size of the gaps between beams and stems is set with
the 'gap
property.
\relative c'' { \repeat tremolo 8 { a32 f } \override Beam.gap-count = #1 \repeat tremolo 8 { a32 f } \override Beam.gap-count = #2 \repeat tremolo 8 { a32 f } \override Beam.gap-count = #3 \repeat tremolo 8 { a32 f } \override Beam.gap-count = #3 \override Beam.gap = #1.33 \repeat tremolo 8 { a32 f } \override Beam.gap = #1 \repeat tremolo 8 { a32 f } \override Beam.gap = #0.67 \repeat tremolo 8 { a32 f } \override Beam.gap = #0.33 \repeat tremolo 8 { a32 f } }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Engraving tremolos with floating beams ] | [ Up : Repeats ] | [ Measure counter > ] |
Isolierte Prozentwiederholungen
Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird erreicht, indem man eine Ganztaktpause notiert und ihre Ausgabeform ändert:
makePercent = #(define-music-function (note) (ly:music?) "Make a percent repeat the same length as NOTE." (make-music 'PercentEvent 'length (ly:music-length note))) \relative c'' { \makePercent s1 }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Isolierte Prozentwiederholungen ] | [ Up : Repeats ] | [ Numbering groups of measures > ] |
Measure counter
This snippet provides a workaround for emitting measure counters using transparent percent repeats.
<< \context Voice = "foo" { \clef bass c4 r g r c4 r g r c4 r g r c4 r g r } \context Voice = "foo" { \set countPercentRepeats = ##t \hide PercentRepeat \override PercentRepeatCounter.staff-padding = #1 \repeat percent 4 { s1 } } >>
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Measure counter ] | [ Up : Repeats ] | [ Sichtbarkeit von Prozent-Wiederholungen > ] |
Numbering groups of measures
This snippet demonstrates the use of the
Measure_counter_engraver
to number groups of successive
measures. Any stretch of measures may be numbered, whether consisting
of repetitions or not.
The engraver must be added to the appropriate context. Here, a
Staff
context is used; another possibility is a Dynamics
context.
The counter is begun with \startMeasureCount
and ended with
\stopMeasureCount
. Numbering will start by default
with 1, but this behavior may be modified by overriding the
count-from
property.
When a measure extends across a line break, the number will appear twice, the second time in parentheses.
\layout { \context { \Staff \consists #Measure_counter_engraver } } \new Staff { \startMeasureCount \repeat unfold 7 { c'4 d' e' f' } \stopMeasureCount \bar "||" g'4 f' e' d' \override Staff.MeasureCounter.count-from = #2 \startMeasureCount \repeat unfold 5 { g'4 f' e' d' } g'4 f' \bar "" \break e'4 d' \repeat unfold 7 { g'4 f' e' d' } \stopMeasureCount } \paper { tagline = ##f }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Numbering groups of measures ] | [ Up : Repeats ] | [ Prozent-Wiederholungen zählen > ] |
Sichtbarkeit von Prozent-Wiederholungen
Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt
werden, indem man die Eigenschaft repeatCountVisibility
beeinflusst.
\relative c'' { \set countPercentRepeats = ##t \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) \repeat percent 10 { c1 } \break \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) \repeat percent 6 { c1 d1 } }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Sichtbarkeit von Prozent-Wiederholungen ] | [ Up : Repeats ] | [ Positioning segno and coda (with line break) > ] |
Prozent-Wiederholungen zählen
Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen Zähler, wenn man die entsprechende Eigenschaft einsetzt:
\relative c'' { \set countPercentRepeats = ##t \repeat percent 4 { c1 } }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Prozent-Wiederholungen zählen ] | [ Up : Repeats ] | [ Setting the double repeat default for volte > ] |
Positioning segno and coda (with line break)
If you want to place an exiting segno sign and add text like „D.S. al Coda“ next to it where usually the staff lines are you can use this snippet. The coda will resume in a new line. There is a variation documented in this snippet, where the coda will remain on the same line.
%% Updating this snippet with convert-ly to 2.25. returns: %% %% "Not smart enough to convert music following \fine. %% %% Warning: \fine no longer enforces the end of the music. If your piece %% has music following \fine that you want to exclude when it is %% unfolded, use \volta to exclude it. %% Please refer to the manual for details, and update manually." %% %% Alas, the use of \fine here is not problematic here --harm { \relative c'' { c4 c c c c c c c c c c c \repeat segno 2 { c4 c c c c c c c \alternative { \volta 1 { c4 c c c c c c c c c c c % If you don't use \break at Coda, use \noBreak here % and after \bar "" below. \noBreak \section % double bar line \cadenzaOn % pause bar count \stopStaff % remove staff lines % Increasing the unfold counter will expand the staff-free space \repeat unfold 6 { s1 \bar "" } % Place JumpScript where the staff would normally be. \once \override Score.JumpScript.outside-staff-priority = ##f \once \override Score.JumpScript.Y-offset = 0 \startStaff % resume bar count \cadenzaOff % show staff lines again } } } \sectionLabel "Coda" % Show Coda on a new line \break \repeat unfold 8 { c4 c c c } \fine } } \paper { tagline = ##f }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Positioning segno and coda (with line break) ] | [ Up : Repeats ] | [ Volta-Klammern verkürzen > ] |
Setting the double repeat default for volte
There are three different styles of double repeats for volte, that can
be set using doubleRepeatBarType
.
\relative c'' { \repeat volta 2 { c1 } \set Score.doubleRepeatBarType = ":..:" \repeat volta 2 { c1 } \set Score.doubleRepeatBarType = ":|.|:" \repeat volta 2 { c1 } \set Score.doubleRepeatBarType = ":|.:" \repeat volta 2 { c1 } }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Setting the double repeat default for volte ] | [ Up : Repeats ] | [ Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole > ] |
Volta-Klammern verkürzen
Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber
es ist möglich sie zu verkürzen. Hierzu muss
voltaSpannerDuration
definiert werden, in dem Beispiel etwa als
3/4, sodass die Klammer nur einen Takt dauert.
\relative c'' { \time 3/4 c4 c c \set Score.voltaSpannerDuration = \musicLength 2. \repeat volta 5 { d4 d d \alternative { \volta 1,2,3,4 { e4 e e f4 f f } \volta 5 { g4 g g } } } }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Volta-Klammern verkürzen ] | [ Up : Repeats ] | [ Volta multi staff > ] |
Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole
Indem man den Volta_engraver
zu dem entsprechenden Notensystem
hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt
werden.
\score { << \chords { c1 c1 } \new Staff \with { \consists "Volta_engraver" } { \repeat volta 2 { c'1 } \alternative { c' } } >> \layout { \context { \Score \remove "Volta_engraver" } } }
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole ] | [ Up : Repeats ] | [ Volta text markup using repeatCommands > ] |
Volta multi staff
By adding the Volta_engraver
to the relevant staff, volte can be
put over staves other than the topmost one in a score.
voltaMusic = \relative c'' { \repeat volta 2 { c1 \alternative { \volta 1 { d1 } \volta 2 { e1 } } } } << \new StaffGroup << \new Staff \voltaMusic \new Staff \voltaMusic >> \new StaffGroup << \new Staff \with { \consists "Volta_engraver" } \voltaMusic \new Staff \voltaMusic >> >>
[ << Repeats ] | [Top][Contents] | [ Simultaneous notes >> ] |
[ < Volta multi staff ] | [ Up : Repeats ] | [ Simultaneous notes > ] |
Volta text markup using repeatCommands
Though volte are best specified using \repeat volta
, the
context property repeatCommands
must be used in cases where the
volta text needs more advanced formatting with \markup
.
Since repeatCommands
takes a list, the simplest method of
including markup is to use an identifier for the text and embed it in
the command list using the Scheme syntax
#(list (list 'volta textIdentifier))
. Start- and end-repeat
commands can be added as separate list elements:
voltaAdLib = \markup { \volta-number { 1. 2. 3... } \italic { ad lib. } } \relative c'' { c1 \set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat) c4 b d e \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) f1 \set Score.repeatCommands = #'((volta #f)) }
[ << Repeats ] | [Top][Contents] | [ Staff notation >> ] |
[ < Volta text markup using repeatCommands ] | [ Up : Top ] | [ Zusätzliche Stimmen, um Zusammenstöße zu vermeiden > ] |
Simultaneous notes
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Simultaneous notes ] | [ Up : Simultaneous notes ] | [ Changing \partCombine texts > ] |
Zusätzliche Stimmen, um Zusammenstöße zu vermeiden
Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche
Stimmen notwendig, um Zusammenstöße zwischen den Noten zu vermeiden.
Wenn mehr als vier parallele Stimmen benötigt werden, können zusätzliche
Stimmen definiert werden, indem eine Variable mit der Funktion
context-spec-music
definiert wird.
voiceFive = #(context-spec-music (make-voice-props-set 4) 'Voice) \relative c'' { \time 3/4 \key d \minor \partial 2 << \new Voice { \voiceOne a4. a8 e'4 e4. e8 f4 d4. c8 } \new Voice { \voiceTwo d,2 d4 cis2 d4 bes2 } \new Voice { \voiceThree f'2 bes4 a2 a4 s2 } \new Voice { \voiceFive s2 g4 g2 f4 f2 } >> }
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Zusätzliche Stimmen, um Zusammenstöße zu vermeiden ] | [ Up : Simultaneous notes ] | [ Changing a single note’s size in a chord > ] |
Changing \partCombine texts
When using the automatic part combining feature, the printed text for the solo and unison sections may be changed.
\new Staff << \set Staff.soloText = "girl" \set Staff.soloIIText = "boy" \set Staff.aDueText = "together" \partCombine \relative c'' { g4 g r r a2 g } \relative c'' { r4 r a( b) a2 g } >>
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Changing \partCombine texts ] | [ Up : Simultaneous notes ] | [ Clusters > ] |
Changing a single note’s size in a chord
Individual note heads in a chord can be modified with the
\tweak
command inside a chord, by altering the font-size
property.
Inside the chord (within the brackets < >
), before the note to
be altered, place the \tweak
command, followed by
font-size
and define the proper size like #-2
(a tiny
note head).
\relative c' { <\tweak font-size #+2 c e g c \tweak font-size #-2 e>1 ^\markup { A tiny e }_\markup { A big c } }
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Changing a single note’s size in a chord ] | [ Up : Simultaneous notes ] | [ Zwei Stimmen auf einem System kombinieren > ] |
Clusters
Clusters are a device to denote that a complete range of notes is to be played.
fragment = \relative c' { c4 f <e d'>4 <g a>8 <e a> a4 c2 <d b>4 e2 c } << \new Staff \fragment \new Staff \makeClusters \fragment >>
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Clusters ] | [ Up : Simultaneous notes ] | [ Displaying complex chords > ] |
Zwei Stimmen auf einem System kombinieren
Die Funktion, die Stimmen kombiniert (also der \partCombine
-Befehl)
ermöglicht die Kombination unterschiedlicher Stimmen auf einem
System. Textanweisungen wie "solo" oder "a2" werden automatisch
hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft
printPartCombineTexts
auf falsch setzen. Für Klavierauszüge
muss natürlich kein "solo"/"a2" usw. hinzugefügt werden, man
sollte sie also ausschalten. Wenn aber Solo-Stellen in einem
Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser,
normale Polyphonie zu verwenden, weil so die Solostellen angezeigt
werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist.
Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu
kombinieren: Standardpolyphonie, \partCombine
ohne Text und
\partCombine
mit Text.
musicUp = \relative c'' { \time 4/4 a4 c4.( g8) a4 | g4 e' g,( a8 b) | c b a2. } musicDown = \relative c'' { g4 e4.( d8) c4 | r2 g'4( f8 e) | d2 \stemDown a } \score { << \new Staff \with { instrumentName = "standard polyphony" } << \musicUp \\ \musicDown >> \new Staff \with { instrumentName = \markup { \typewriter "\\partCombine" without text} printPartCombineTexts = ##f } \partCombine \musicUp \musicDown \new Staff \with { instrumentName = \markup { \typewriter "\\partCombine" with text} } \partCombine \musicUp \musicDown >> \layout { indent = 6.0\cm \context { \Score % Setting this to a large value avoids a bar line at the % beginning that would connect the three staves otherwise. \override SystemStartBar.collapse-height = 30 } } }
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Zwei Stimmen auf einem System kombinieren ] | [ Up : Simultaneous notes ] | [ Horizontale Verschiebung von Noten erzwingen > ] |
Displaying complex chords
Here is a way to display a chord where the same note is played twice with different accidentals.
fixA = { \once \override Stem.length = #11 } fixB = { \once \override NoteHead.X-offset = #1.7 \once \override Stem.length = #7 \once \override Stem.rotation = #'(45 0 0) \once \override Stem.extra-offset = #'(-0.1 . -0.2) \once \override Flag.style = #'no-flag \once \override Accidental.extra-offset = #'(4 . -.1) } \relative c' { << { \fixA <b d!>8 } \\ { \voiceThree \fixB dis } >> s }
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Displaying complex chords ] | [ Up : Simultaneous notes ] | [ Making an object invisible with the ’transparent property > ] |
Horizontale Verschiebung von Noten erzwingen
Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere Position manuell eingestellt werden. Die Einheiten hier sind Notenlinienzwischenräume.
\relative c' << { <d g>2 <d g> } \\ { <b f'>2 \once \override NoteColumn.force-hshift = 1.7 <b f'>2 } >>
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Horizontale Verschiebung von Noten erzwingen ] | [ Up : Simultaneous notes ] | [ Moving dotted notes in polyphony > ] |
Making an object invisible with the ’transparent property
Setting the transparent
property will cause an object to be
printed in „invisible ink“: the object is not printed, but all its
other behavior is retained. The object still takes up space, it takes
part in collisions, and slurs, ties and beams can be attached to it.
This snippet demonstrates how to connect different voices using ties. Normally, ties only connect two notes in the same voice. By introducing a tie in a different voice, and blanking the first up-stem in that voice, the tie appears to cross voices.
\relative { \time 2/4 << { \once \hide Stem \once \override Stem.length = #8 b'8 ~ 8\noBeam \once \hide Stem \once \override Stem.length = #8 g8 ~ 8\noBeam } \\ { b8 g g e } >> }
Moving dotted notes in polyphony
When a dotted note in the upper voice is moved to avoid a collision
with a note in another voice, the default is to move the upper note to
the right. This behaviour can be over-ridden by using the
prefer-dotted-right
property of NoteCollision
.
\new Staff \relative c' << { f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##f f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##t f2. f4 } \\ { e4 e e e e e e e e e e e } >>
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Moving dotted notes in polyphony ] | [ Up : Simultaneous notes ] | [ Two \partCombine pairs on one staff > ] |
Suppressing warnings for clashing note columns
If notes from two voices with stems in the same direction are placed at
the same position, and both voices have no shift or the same shift
specified, the error message ‘warning: ignoring too many clashing
note columns’ will appear when compiling the LilyPond file. This
message can be suppressed by setting the 'ignore-collision
property of the NoteColumn
object to #t
. Please note that
this does not just suppress warnings but stops LilyPond trying to
resolve collisions at all and so may have unintended results unless
used with care.
ignore = \override NoteColumn.ignore-collision = ##t \relative c' { \new Staff << \new Voice { \ignore \stemDown f2 g } \new Voice { c2 \stemDown c, } >> }
[ << Simultaneous notes ] | [Top][Contents] | [ Staff notation >> ] |
[ < Suppressing warnings for clashing note columns ] | [ Up : Simultaneous notes ] | [ Staff notation > ] |
Two \partCombine pairs on one staff
The \partCombine
function takes two music expressions each
containing a part, and distributes them among four Voice
s named
„two“, „one“, „solo“, and „chords“ depending on when and how
the parts are merged into a common voice. The voices output from
\partCombine
can have their layout properties adjusted in the
usual way. Here we define extensions of \partCombine
to make
it easier to put four voices on a staff.
soprano = { d'4 | cis' b e' d'8 cis' | cis'2 b } alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 } bass = { fis8 gis | a4 gis g fis | eis fis b,2 } \new Staff << \key b\minor \clef alto \partial 4 \transpose b b' \partCombineUp \soprano \alto \partCombineDown \tenor \bass >>
\layout { \context { \Staff \accepts "VoiceBox" } \context { \name "VoiceBox" \type "Engraver_group" \defaultchild "Voice" \accepts "Voice" \accepts "NullVoice" } } customPartCombineUp = #(define-music-function (partOne partTwo) (ly:music? ly:music?) "Take the music in @var{partOne} and @var{partTwo} and return a @code{VoiceBox} named @q{Up} containing @code{Voice}s that contain @var{partOne} and @var{partTwo} merged into one voice where feasible. This variant sets the default voicing in the output to use upward stems." #{ \new VoiceBox = "Up" << \context Voice = "one" { \voiceOne } \context Voice = "two" { \voiceThree } \context Voice = "shared" { \voiceOne } \context Voice = "solo" { \voiceOne } \context NullVoice = "null" {} \partCombine #partOne #partTwo >> #}) customPartCombineDown = # (define-music-function (partOne partTwo) (ly:music? ly:music?) "Take the music in @var{partOne} and @var{partTwo} and return a @code{VoiceBox} named @q{Down} containing @code{Voice}s that contain @var{partOne} and @var{partTwo} merged into one voice where feasible. This variant sets the default voicing in the output to use downward stems." #{ \new VoiceBox = "Down" << \set VoiceBox.soloText = #"Solo III" \set VoiceBox.soloIIText = #"Solo IV" \context Voice ="one" { \voiceFour } \context Voice ="two" { \voiceTwo } \context Voice ="shared" { \voiceFour } \context Voice ="solo" { \voiceFour } \context NullVoice = "null" {} \partCombine #partOne #partTwo >> #}) soprano = { d'4 | cis' b e' d'8 cis' | cis'2 b } alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 } bass = { fis8 gis | a4 gis g fis | eis fis b,2 } \new Staff << \key b\minor \clef alto \partial 4 \transpose b b' \customPartCombineUp \soprano \alto \customPartCombineDown \tenor \bass >>
[ << Simultaneous notes ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Two \partCombine pairs on one staff ] | [ Up : Top ] | [ Ambitus pro Stimme hinzufügen > ] |
Staff notation
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Staff notation ] | [ Up : Staff notation ] | [ Adding an extra staff > ] |
Ambitus pro Stimme hinzufügen
Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie manuell verschoben werden, um Zusammenstöße zu verhindern.
\new Staff << \new Voice \with { \consists "Ambitus_engraver" } \relative c'' { \override Ambitus.X-offset = 2.0 \voiceOne c4 a d e f1 } \new Voice \with { \consists "Ambitus_engraver" } \relative c' { \voiceTwo es4 f g as b1 } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Ambitus pro Stimme hinzufügen ] | [ Up : Staff notation ] | [ Adding an extra staff at a line break > ] |
Adding an extra staff
An extra staff can be added (possibly temporarily) after the start of a piece.
\score { << \new Staff \relative c'' { c1 | c | c | c | c } \new StaffGroup \relative c'' { \new Staff { c1 | c << { c1 | d } \new Staff { \once \omit Staff.TimeSignature c1 | b } >> c1 } } >> }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Adding an extra staff ] | [ Up : Staff notation ] | [ Adding indicators to staves which get split after a break > ] |
Adding an extra staff at a line break
When adding a new staff at a line break, some extra space is
unfortunately added at the end of the line before the break (to fit in
a key signature change, which will never be printed anyway). The
workaround is to add a setting of
Staff.explicitKeySignatureVisibility
as is shown in the example.
\paper { tagline = ##f } \score { \new StaffGroup \relative c'' { \new Staff \key f \major c1 c^"Unwanted extra space" \break << { c1 | c } \new Staff { \key f \major \once \omit Staff.TimeSignature c1 | c } >> c1 | c^"Fixed here" \break << { c1 | c } \new Staff { \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible \key f \major \once \omit Staff.TimeSignature c1 | c } >> } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Adding an extra staff at a line break ] | [ Up : Staff notation ] | [ Orchesterstichnoten zu einem Klavierauszug hinzufügen > ] |
Adding indicators to staves which get split after a break
This snippet defines the commands \splitStaffBarLine
,
\convUpStaffBarLine
, and \convDownStaffBarLine
. These
add arrows at a bar line to denote that several voices sharing a staff
will each continue on a staff of their own in the next system, or that
voices split in this way recombine.
#(define-markup-command (arrow-at-angle layout props angle-deg length fill) (number? number? boolean?) (let* ( (PI-OVER-180 (/ (atan 1 1) 34)) (degrees->radians (lambda (degrees) (* degrees PI-OVER-180))) (angle-rad (degrees->radians angle-deg)) (target-x (* length (cos angle-rad))) (target-y (* length (sin angle-rad)))) (interpret-markup layout props (markup #:translate (cons (/ target-x 2) (/ target-y 2)) #:rotate angle-deg #:translate (cons (/ length -2) 0) #:concat (#:draw-line (cons length 0) #:arrow-head X RIGHT fill))))) splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) { \combine \arrow-at-angle #45 #(sqrt 8) ##t \arrow-at-angle #-45 #(sqrt 8) ##t } splitStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob splitStaffBarLineMarkup) 0)) \break } convDownStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions #'(0 . 0) #'(0 . 0) { \translate #'(0 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t }#}) 0)) \break } convUpStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions #'(0 . 0) #'(0 . 0) { \translate #'(0 . .14)\arrow-at-angle #45 #(sqrt 8) ##t }#}) 0)) \break } \header { tagline = ##f } \paper { ragged-right = ##t short-indent = 10\mm } separateSopranos = { \set Staff.instrumentName = "AI AII" \set Staff.shortInstrumentName = "AI AII" \splitStaffBarLine \change Staff = "up" } convSopranos = { \convDownStaffBarLine \change Staff = "shared" \set Staff.instrumentName = "S A" \set Staff.shortInstrumentName = "S A" } sI = { \voiceOne \repeat unfold 4 f''2 \separateSopranos \repeat unfold 4 g''2 \convSopranos \repeat unfold 4 c''2 } sII = { s1*2 \voiceTwo \change Staff = "up" \repeat unfold 4 d''2 } aI = { \voiceTwo \repeat unfold 4 a'2 \voiceOne \repeat unfold 4 b'2 \convUpStaffBarLine \voiceTwo \repeat unfold 4 g'2 } aII = { s1*2 \voiceTwo \repeat unfold 4 g'2 } ten = { \voiceOne \repeat unfold 4 c'2 \repeat unfold 4 d'2 \repeat unfold 4 c'2 } bas = { \voiceTwo \repeat unfold 4 f2 \repeat unfold 4 g2 \repeat unfold 4 c2 } \score { << \new ChoirStaff << \new Staff = up \with { instrumentName = "SI SII" shortInstrumentName = "SI SII" } { s1*4 } \new Staff = shared \with { instrumentName = "S A" shortInstrumentName = "S A" } << \new Voice = sopI \sI \new Voice = sopII \sII \new Voice = altI \aI \new Voice = altII \aII >> \new Lyrics \with { alignBelowContext = up } \lyricsto sopII { e f g h } \new Lyrics \lyricsto altI { a b c d e f g h i j k l } \new Staff = men \with { instrumentName = "T B" shortInstrumentName = "T B" } << \clef F \new Voice = ten \ten \new Voice = bas \bas >> \new Lyrics \lyricsto bas { a b c d e f g h i j k l } >> >> \layout { \context { \Staff \RemoveEmptyStaves \override VerticalAxisGroup.remove-first = ##t } } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Adding indicators to staves which get split after a break ] | [ Up : Staff notation ] | [ Adding timing marks to long glissandi > ] |
Orchesterstichnoten zu einem Klavierauszug hinzufügen
Hier wird gezeigt, wie man das Hinzufügen von vielen Orchsterstichnoten
zu einem Klavierauszug hinzufügen kann. Die musikalische Funktion
\cueWhile
braucht vier Argumente: Die Noten, von denen die
Stichnoten formatiert werden sollen, definiert durch \addQuote
,
die Bezeichnung, die mit den Noten angegeben werden soll, dann entweder
#UP
(hoch) oder #DOWN
(runter) zur Angabe von entweder
\voiceOne
mit der Bezeichnung über dem System oder \voiceTwo
mit der Bezeichnung unter dem System, und schließlich die Klaviermusik,
die parallel zu den Stichnoten gespielt werden soll. Die Bezeichnung des
Stichnoteninstruments wird links der Stichnoten positioniert. Viele
Abschnitte können zitiert werden, aber sie dürfen sich nicht überlappen.
cueWhile = #(define-music-function (instrument name dir music) (string? string? ly:dir? ly:music?) #{ \cueDuring $instrument #dir { \once \override TextScript.self-alignment-X = #RIGHT \once \override TextScript.direction = $dir <>-\markup { \tiny #name } $music } #}) flute = \relative c'' { \transposition c' s4 s4 e g } \addQuote "flute" { \flute } clarinet = \relative c' { \transposition bes fis4 d d c } \addQuote "clarinet" { \clarinet } singer = \relative c'' { c4. g8 g4 bes4 } words = \lyricmode { here's the lyr -- ics } pianoRH = \relative c'' { \transposition c' \cueWhile "clarinet" "Clar." #DOWN { c4. g8 } \cueWhile "flute" "Flute" #UP { g4 bes4 } } pianoLH = \relative c { c4 <c' e> e, <g c> } \score { << \new Staff { \new Voice = "singer" { \singer } } \new Lyrics { \lyricsto "singer" \words } \new PianoStaff << \new Staff { \new Voice { \pianoRH } } \new Staff { \clef "bass" \pianoLH } >> >> }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Orchesterstichnoten zu einem Klavierauszug hinzufügen ] | [ Up : Staff notation ] | [ Alternative Taktnummerierung > ] |
Adding timing marks to long glissandi
Skipped beats in very long glissandi are sometimes indicated by timing marks, often consisting of stems without noteheads. Such stems can also be used to carry intermediate expression markings.
If the stems do not align well with the glissando, they may need to be repositioned slightly.
glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } glissandoSkipOff = { \revert NoteColumn.glissando-skip \undo \hide NoteHead \revert NoteHead.no-ledgers } \relative c'' { r8 f8\glissando \glissandoSkipOn f4 g a a8\noBeam \glissandoSkipOff a8 r8 f8\glissando \glissandoSkipOn g4 a8 \glissandoSkipOff a8 | r4 f\glissando \< \glissandoSkipOn a4\f \> \glissandoSkipOff b8\! r | }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Adding timing marks to long glissandi ] | [ Up : Staff notation ] | [ Ambitus after key signature > ] |
Alternative Taktnummerierung
Zwei alternative Methoden können eingestellt werden, die die Taktnummerierung beeinflussen, insbesondere bei Wiederholungen.
music = \relative c' { \repeat volta 3 { c4 d e f | \alternative { \volta 1 { c4 d e f | c2 d \break } \volta 2 { f4 g a b | f4 g a b | f2 a | \break } \volta 3 { c4 d e f | c2 d } } } c1 \bar "|." } \markup "default" { \music } \markup \typewriter "'numbers" { \set Score.alternativeNumberingStyle = #'numbers \music } \markup \typewriter "'numbers-with-letters" { \set Score.alternativeNumberingStyle = #'numbers-with-letters \music } \paper { tagline = ##f }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Alternative Taktnummerierung ] | [ Up : Staff notation ] | [ Centered measure numbers > ] |
Ambitus after key signature
By default, ambitus are positioned at the left of the clef. The
\ambitusAfter
function allows for changing this
placement. Syntax is \ambitusAfter grob-interface
(see
Graphical
Object Interfaces for a list of possible values for
grob-interface
.)
A common use case is printing the ambitus between key signature and time signature.
\new Staff \with { \consists Ambitus_engraver } \relative { \ambitusAfter key-signature \key d \major es'8 g bes cis d2 }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Ambitus after key signature ] | [ Up : Staff notation ] | [ Changing the default bar lines > ] |
Centered measure numbers
Scores of large ensemble works often have bar numbers placed beneath
the system, centered horizontally on the measure’s extent. This
snippet shows how the Measure_counter_engraver
may be used to
simulate this notational practice. Here, the engraver has been added
to a Dynamics
context.
This snippet presents a legacy method: starting from LilyPond 2.23.3,
\set Score.centerBarNumbers = ##t
is enough.
\layout { \context { \Dynamics \consists #Measure_counter_engraver \override MeasureCounter.direction = #DOWN \override MeasureCounter.font-encoding = #'latin1 \override MeasureCounter.font-shape = #'italic % to control the distance of the Dynamics context from the staff: \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2 } \context { \Score \remove "Bar_number_engraver" } } pattern = \repeat unfold 7 { c'4 d' e' f' } \new StaffGroup << \new Staff { \pattern } \new Staff { \pattern } \new Dynamics { \startMeasureCount s1*7 \stopMeasureCount } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Centered measure numbers ] | [ Up : Staff notation ] | [ Changing the number of lines in a staff > ] |
Changing the default bar lines
Default bar lines can be changed when re-defined in a score context.
% http://lsr.di.unimi.it/LSR/Item?id=964 %%=> http://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00126.html %%=> http://lilypond.1069038.n5.nabble.com/Changing-the-default-end-repeat-bracket-tc169357.html \layout { \context { \Score %% Changing the defaults from engraver-init.ly measureBarType = "!" startRepeatBarType = "[|:" endRepeatBarType = ":|]" doubleRepeatBarType = ":|][|:" } } %% example: { c'1 \repeat volta 2 { \repeat unfold 2 c' } \repeat volta 2 { \repeat unfold 2 c' } \alternative { { c' } { %% v2.18 workaround \once\override Score.VoltaBracket.shorten-pair = #'(1 . -1) c' } } \bar "|." }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Changing the default bar lines ] | [ Up : Staff notation ] | [ Changing the staff size > ] |
Changing the number of lines in a staff
The number of lines in a staff may changed by overriding the
StaffSymbol
property line-count
.
upper = \relative c'' { c4 d e f } lower = \relative c { \clef bass c4 b a g } \score { \context PianoStaff << \new Staff { \upper } \new Staff { \override Staff.StaffSymbol.line-count = #4 \lower } >> }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Changing the number of lines in a staff ] | [ Up : Staff notation ] | [ Creating blank staves > ] |
Changing the staff size
Though the simplest way to resize staves is to use
#(set-global-staff-size xx)
, an individual staff’s size can be
changed by scaling the properties 'staff-space
and
fontSize
.
<< \new Staff { \relative c'' { \dynamicDown c8\ff c c c c c c c } } \new Staff \with { fontSize = #-3 \override StaffSymbol.staff-space = #(magstep -3) } { \clef bass c8 c c c c\f c c c } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Changing the staff size ] | [ Up : Staff notation ] | [ Creating custom key signatures > ] |
Creating blank staves
To create blank staves, generate empty measures then remove the
Bar_number_engraver
from the Score
context, and the
Time_signature_engraver
, Clef_engraver
and
Bar_engraver
from the Staff
context.
#(set-global-staff-size 20) \score { { \repeat unfold 12 { s1 \break } } \layout { indent = 0\in \context { \Staff \remove "Time_signature_engraver" \remove "Clef_engraver" \remove "Bar_engraver" } \context { \Score \remove "Bar_number_engraver" } } } % uncomment these lines for "letter" size %{ \paper { #(set-paper-size "letter") ragged-last-bottom = ##f line-width = 7.5\in left-margin = 0.5\in bottom-margin = 0.25\in top-margin = 0.25\in } %} % uncomment these lines for "A4" size %{ \paper { #(set-paper-size "a4") ragged-last-bottom = ##f line-width = 180 left-margin = 15 bottom-margin = 10 top-margin = 10 } %}
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Creating blank staves ] | [ Up : Staff notation ] | [ Creating double-digit fingerings > ] |
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D minor with an extended range of printed flats.
\new Staff \with { \override StaffSymbol.line-count = #8 \override KeySignature.flat-positions = #'((-7 . 6)) \override KeyCancellation.flat-positions = #'((-7 . 6)) % presumably sharps are also printed in both octaves \override KeySignature.sharp-positions = #'((-6 . 7)) \override KeyCancellation.sharp-positions = #'((-6 . 7)) \override Clef.stencil = # (lambda (grob)(grob-interpret-markup grob #{ \markup\combine \musicglyph "clefs.C" \translate #'(-3 . -2) \musicglyph "clefs.F" #})) clefPosition = #3 middleCPosition = #3 middleCClefPosition = #3 } { \key d\minor f bes, f bes, }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Creating custom key signatures ] | [ Up : Staff notation ] | [ Hälse über beide Systeme > ] |
Creating double-digit fingerings
Creating fingerings larger than 5 is possible.
\relative c' { c1-10 c1-50 c1-36 c1-29 }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Creating double-digit fingerings ] | [ Up : Staff notation ] | [ Klammer anzeigen, wenn nur ein System gesetzt wird > ] |
Hälse über beide Systeme
Dieses Schnipsel zeigt den Einsatz von Span_stem_engraver
und
\crossStaff
, um Hälse über Systeme hinweg automatisch zu
verbinden. Die Länge des Halses muss definiert werden, da der
variable Abstand zwischen Notenköpfen und Notensystemen automatisch
errechnet wird.
\layout { \context { \PianoStaff \consists "Span_stem_engraver" } } \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! | e'8 f' g'4 \voiceTwo % Down to lower staff \crossStaff { e'8 e'8 } e'4 | } \new Staff { \clef bass \voiceOne % Up to upper staff \crossStaff { <e g>4 e, g16 a8. c8 } d | g8 f g4 \voiceTwo g8 g g4 | } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Hälse über beide Systeme ] | [ Up : Staff notation ] | [ Extending a TrillSpanner > ] |
Klammer anzeigen, wenn nur ein System gesetzt wird
Wenn nur ein System einer Systemgruppe vom Typ ChoirStaff
oder
StaffGroup
angezeigt wird, wird die Klammer zu Beginn normalerweise
nicht gesetzt. Das kann verändert werden, indem man die entsprechende
Eigenschaft verändert.
Bei Systemen wie PianoStaff
und GrandStaff
, die mit einer
geschweiften Klammer beginne, muss eine andere Eigenschaft verändert werden,
wie das zweite Beispiel zeigt.
\score { \new StaffGroup << % Must be lower than the actual number of staff lines \override StaffGroup.SystemStartBracket.collapse-height = 4 \override Score.SystemStartBar.collapse-height = 4 \new Staff { c'1 } >> } \score { \new PianoStaff << \override PianoStaff.SystemStartBrace.collapse-height = 4 \override Score.SystemStartBar.collapse-height = 4 \new Staff { c'1 } >> } \paper { tagline = ##f }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Klammer anzeigen, wenn nur ein System gesetzt wird ] | [ Up : Staff notation ] | [ Extending glissandi across repeats > ] |
Extending a TrillSpanner
For TrillSpanner
, the minimum-length
property becomes
effective only if the set-spacing-rods
procedure is called
explicitly.
To do this, the springs-and-rods
property should be set to
ly:spanner::set-spacing-rods
.
\relative c' { \key c\minor \time 2/4 c16( as') c,-. des-. \once\override TrillSpanner.minimum-length = #15 \once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods \afterGrace es4 \startTrillSpan { d16[( \stopTrillSpan es)] } c( c' g es c g' es d \hideNotes c8) }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Extending a TrillSpanner ] | [ Up : Staff notation ] | [ Flat Ties > ] |
Extending glissandi across repeats
A glissando which extends into several \alternative
blocks can
be simulated by adding a hidden grace note with a glissando at the
start of each \alternative
block. The grace note should be at
the same pitch as the note which starts the initial glissando. This is
implemented here with a music function which takes the pitch of the
grace note as its argument.
Note that in polyphonic music the grace note must be matched with corresponding grace notes in all other voices.
repeatGliss = #(define-music-function (grace) (ly:pitch?) #{ % the next two lines ensure the glissando is long enough % to be visible \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods \once \override Glissando.minimum-length = 3.5 \once \hideNotes \grace $grace \glissando #}) \score { \relative c'' { \repeat volta 3 { c4 d e f\glissando } \alternative { { g2 d } { \repeatGliss f g2 e } { \repeatGliss f e2 d } } } } music = \relative c' { \voiceOne \repeat volta 2 { g a b c\glissando } \alternative { { d1 } { \repeatGliss c \once \omit StringNumber e1\2 } } } \score { \new StaffGroup << \new Staff << \new Voice { \clef "G_8" \music } >> \new TabStaff << \new TabVoice { \clef "moderntab" \music } >> >> } \paper { tagline = ##f }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Extending glissandi across repeats ] | [ Up : Staff notation ] | [ Forcing measure width to adapt to MetronomeMark’s width > ] |
Flat Ties
The function takes the default Tie.stencil
as an argument,
calculating the result relying on the extents of this default.
Further tweaking is possible by overriding
Tie.details.height-limit
or with \shape
. It’s also
possible to change the custom-definition on the fly.
%% http://lsr.di.unimi.it/LSR/Item?id=1031 #(define ((flared-tie coords) grob) (define (pair-to-list pair) (list (car pair) (cdr pair))) (define (normalize-coords goods x y dir) (map (lambda (coord) ;(coord-scale coord (cons x (* y dir))) (cons (* x (car coord)) (* y dir (cdr coord)))) goods)) (define (my-c-p-s points thick) (make-connected-path-stencil points thick 1.0 1.0 #f #f)) ;; outer let to trigger suicide (let ((sten (ly:tie::print grob))) (if (grob::is-live? grob) (let* ((layout (ly:grob-layout grob)) (line-thickness (ly:output-def-lookup layout 'line-thickness)) (thickness (ly:grob-property grob 'thickness 0.1)) (used-thick (* line-thickness thickness)) (dir (ly:grob-property grob 'direction)) (xex (ly:stencil-extent sten X)) (yex (ly:stencil-extent sten Y)) (lenx (interval-length xex)) (leny (interval-length yex)) (xtrans (car xex)) (ytrans (if (> dir 0)(car yex) (cdr yex))) (uplist (map pair-to-list (normalize-coords coords lenx (* leny 2) dir)))) (ly:stencil-translate (my-c-p-s uplist used-thick) (cons xtrans ytrans))) '()))) #(define flare-tie (flared-tie '((0 . 0)(0.1 . 0.2) (0.9 . 0.2) (1.0 . 0.0)))) \layout { \context { \Voice \override Tie.stencil = #flare-tie } } \paper { ragged-right = ##f tagline = ##f } \relative c' { a4~a \override Tie.height-limit = 4 a'4~a a'4~a <a,, c e a c e a c e>~ q \break a'4~a \once \override Tie.details.height-limit = 14 a4~a \break a4~a \once \override Tie.details.height-limit = 0.5 a4~a \break a4~a \shape #'((0 . 0) (0 . 0.4) (0 . 0.4) (0 . 0)) Tie a4~a \break a4~a \once \override Tie.stencil = #(flared-tie '((0 . 0)(0.1 . 0.4) (0.9 . 0.4) (1.0 . 0.0))) a4~a a4~a \once \override Tie.stencil = #(flared-tie '((0 . 0)(0.06 . 0.1) (0.94 . 0.1) (1.0 . 0.0))) a4~a }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Flat Ties ] | [ Up : Staff notation ] | [ Glissando kann Grobs überspringen > ] |
Forcing measure width to adapt to MetronomeMark’s width
By default, metronome marks do not influence horizontal spacing.
This can be solved through a simple override, as shown in the second half of the example.
example = { \tempo "Allegro" R1*6 \tempo "Rall." R1*2 \tempo "A tempo" R1*8 } { \compressMMRests { \example R1 R1 \override Score.MetronomeMark.extra-spacing-width = #'(-3 . 0) \example } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Forcing measure width to adapt to MetronomeMark’s width ] | [ Up : Staff notation ] | [ Incipit > ] |
Glissando kann Grobs überspringen
NoteColumn
-Grobs können bei Glissandos übersprungen werden.
\relative c' { a2 \glissando \once \override NoteColumn.glissando-skip = ##t f''4 d, }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Glissando kann Grobs überspringen ] | [ Up : Staff notation ] | [ Inserting score fragments above a staff, as markups > ] |
Incipit
When transcribing mensural music, an incipit at the beginning of the piece is useful to indicate the original key and tempo. While today musicians are used to bar lines in order to faster recognize rhythmic patterns, bar lines were not yet invented during the period of mensural music; in fact, the meter often changed after every few notes. As a compromise, bar lines are often printed between the staves rather than on the staves.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % A short excerpt from the Jubilate Deo by Orlande de Lassus %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \header { tagline = ##f } global = { \set Score.skipBars = ##t \key g \major \time 4/4 % the actual music \skip 1*8 % let finis bar go through all staves \override Staff.BarLine.transparent = ##f % finis bar \bar "|." } discantusIncipit = { \clef "neomensural-c1" \key f \major \time 2/2 c''1. } discantusNotes = { \transpose c' c'' { \clef "treble" d'2. d'4 | b e' d'2 | c'4 e'4.( d'8 c' b | a4) b a2 | b4.( c'8 d'4) c'4 | \once \hide NoteHead c'1 | b\breve | } } discantusLyrics = \lyricmode { Ju -- bi -- la -- te De -- o, om -- nis ter -- ra, __ om- "..." -us. } altusIncipit = { \clef "neomensural-c3" \key f \major \time 2/2 r1 f'1. } altusNotes = { \transpose c' c'' { \clef "treble" r2 g2. e4 fis g | a2 g4 e | fis g4.( fis16 e fis4) | g1 | \once \hide NoteHead g1 | g\breve | } } altusLyrics = \lyricmode { Ju -- bi -- la -- te De -- o, om -- nis ter -- ra, "..." -us. } tenorIncipit = { \clef "neomensural-c4" \key f \major \time 2/2 r\longa r\breve r1 c'1. } tenorNotes = { \transpose c' c' { \clef "treble_8" R1 | R1 | R1 | % two measures r2 d'2. d'4 b e' | \once \hide NoteHead e'1 | d'\breve | } } tenorLyrics = \lyricmode { Ju -- bi -- la -- te "..." -us. } bassusIncipit = { \clef "mensural-f" \key f \major \time 2/2 r\maxima f1. } bassusNotes = { \transpose c' c' { \clef "bass" R1 | R1 | R1 | R1 | g2. e4 | \once \hide NoteHead e1 | g\breve | } } bassusLyrics = \lyricmode { Ju -- bi- "..." -us. } \score { << \new StaffGroup = choirStaff << \new Voice = "discantusNotes" << \set Staff.instrumentName = "Discantus" \incipit \discantusIncipit \global \discantusNotes >> \new Lyrics \lyricsto discantusNotes { \discantusLyrics } \new Voice = "altusNotes" << \set Staff.instrumentName = "Altus" \global \incipit \altusIncipit \altusNotes >> \new Lyrics \lyricsto altusNotes { \altusLyrics } \new Voice = "tenorNotes" << \set Staff.instrumentName = "Tenor" \global \incipit \tenorIncipit \tenorNotes >> \new Lyrics \lyricsto tenorNotes { \tenorLyrics } \new Voice = "bassusNotes" << \set Staff.instrumentName = "Bassus" \global \incipit \bassusIncipit \bassusNotes >> \new Lyrics \lyricsto bassusNotes { \bassusLyrics } >> >> \layout { \context { \Score %% no bar lines in staves or lyrics \hide BarLine } %% the next two instructions keep the lyrics between the bar lines \context { \Lyrics \consists "Bar_engraver" \consists "Separating_line_group_engraver" } \context { \Voice %% no slurs \hide Slur %% Comment in the below "\remove" command to allow line %% breaking also at those bar lines where a note overlaps %% into the next measure. The command is commented out in this %% short example score, but especially for large scores, you %% will typically yield better line breaking and thus improve %% overall spacing if you comment in the following command. %%\remove "Forbid_line_break_engraver" } indent = 6\cm incipit-width = 4\cm } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Incipit ] | [ Up : Staff notation ] | [ Let TabStaff print the topmost string at bottom > ] |
Inserting score fragments above a staff, as markups
The \markup
command is quite versatile. In this snippet, it
contains a \score
block instead of texts or marks.
tuning = \markup { \score { \new Staff \with { \remove "Time_signature_engraver" } { \clef bass <c, g, d g>1 } \layout { ragged-right = ##t indent = 0\cm } } } \header { title = "Solo Cello Suites" subtitle = "Suite IV" subsubtitle = \markup { Originalstimmung: \raise #0.5 \tuning } tagline = ##f } \layout { ragged-right = ##f } \relative c'' { \time 4/8 \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e } \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e } g8 a g a g8 a g a }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Inserting score fragments above a staff, as markups ] | [ Up : Staff notation ] | [ Letter tablature formatting > ] |
Let TabStaff print the topmost string at bottom
In tablatures usually the first string is printed topmost. If you want
to have it at the bottom change the
stringOneTopmost
-context-property. For a context-wide setting
this could be done in layout
as well.
%\layout { % \context { % \Score % stringOneTopmost = ##f % } % \context { % \TabStaff % tablatureFormat = #fret-letter-tablature-format % } %} m = { \cadenzaOn e, b, e gis! b e' \bar "||" } << \new Staff { \clef "G_8" <>_"default" \m <>_"italian (historic)"\m } \new TabStaff { \m \set Score.stringOneTopmost = ##f \set TabStaff.tablatureFormat = #fret-letter-tablature-format \m } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Let TabStaff print the topmost string at bottom ] | [ Up : Staff notation ] | [ Making glissandi breakable > ] |
Letter tablature formatting
Tablature can be formatted using letters instead of numbers.
music = \relative c { c4 d e f g4 a b c d4 e f g } << \new Staff { \clef "G_8" \music } \new TabStaff \with { tablatureFormat = #fret-letter-tablature-format } { \music } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Letter tablature formatting ] | [ Up : Staff notation ] | [ Eine Linie des Notensystems dicker als die anderen machen > ] |
Making glissandi breakable
Setting the breakable
property to #t
in combination with
after-line-breaking
allows a glissando to break if it occurs at
a line break:
\paper { tagline = ##f } glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } \relative c'' { \override Glissando.breakable = ##t \override Glissando.after-line-breaking = ##t f1\glissando | \break a4 r2. | f1\glissando \once \glissandoSkipOn \break a2 a4 r4 | }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Making glissandi breakable ] | [ Up : Staff notation ] | [ Measure counter > ] |
Eine Linie des Notensystems dicker als die anderen machen
Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker
gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben).
Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die
dicker erscheinen soll, einfügt. Dazu wird die line-positions
-Eigenschaft
herangezogen.
{ \override Staff.StaffSymbol.line-positions = #'(-4 -2 -0.2 0 0.2 2 4) d'4 e' f' g' }
Measure counter
This snippet provides a workaround for emitting measure counters using transparent percent repeats.
<< \context Voice = "foo" { \clef bass c4 r g r c4 r g r c4 r g r c4 r g r } \context Voice = "foo" { \set countPercentRepeats = ##t \hide PercentRepeat \override PercentRepeatCounter.staff-padding = #1 \repeat percent 4 { s1 } } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Measure counter ] | [ Up : Staff notation ] | [ Modifying the Ottava spanner slope > ] |
Mensurstriche-Layout (Taktstriche zwischen den Systemen
Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen,
sondern zwischen den Systemen gesetzt werden, kann mit einer StaffGroup
anstelle von ChoirStaff
erreicht werden. Die Taktlinien auf den
Systemen werden mit der transparent
-Eigenschaft ausgelöscht.
\layout { \context { \Staff measureBarType = "-span|" } } music = \fixed c'' { c1 d2 \section e2 f1 \fine } \new StaffGroup << \new Staff \music \new Staff \music >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Mensurstriche-Layout (Taktstriche zwischen den Systemen ] | [ Up : Staff notation ] | [ Systeme schachteln > ] |
Modifying the Ottava spanner slope
It is possible to change the slope of the Ottava spanner.
\relative c'' { \override Staff.OttavaBracket.stencil = #ly:line-spanner::print \override Staff.OttavaBracket.bound-details = #`((left . ((Y . 0) (attach-dir . ,LEFT) (padding . 0) (stencil-align-dir-y . ,CENTER))) (right . ((Y . 5.0) ; Change the number here (padding . 0) (attach-dir . ,RIGHT) (text . ,(make-draw-dashed-line-markup (cons 0 -1.2)))))) \override Staff.OttavaBracket.left-bound-info = #ly:horizontal-line-spanner::calc-left-bound-info-and-text \override Staff.OttavaBracket.right-bound-info = #ly:horizontal-line-spanner::calc-right-bound-info \ottava 1 c1 c'''1 }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Modifying the Ottava spanner slope ] | [ Up : Staff notation ] | [ Untypische Tonarten > ] |
Systeme schachteln
Die Eigenschaft systemStartDelimiterHierarchy
kann eingesetzt
werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der
Befehl \set StaffGroup.systemStartDelimiterHierarchy
nimmt eine
Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem
System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt
werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente
in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer
die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: SystemStartBar
,
SystemStartBracket
, SystemStartBrace
und
SystemStartSquare
.
\new StaffGroup \relative c'' << \override StaffGroup.SystemStartSquare.collapse-height = 4 \set StaffGroup.systemStartDelimiterHierarchy = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a (SystemStartSquare b) ) c ) d) \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Systeme schachteln ] | [ Up : Staff notation ] | [ Numbering groups of measures > ] |
Untypische Tonarten
Der üblicherweise benutzte \key
-Befehl setzt die
keySignature
-Eigenschaft im Staff
-Kontext.
Um untypische Tonartenvorzeichen zu erstellen, muss man diese Eigenschaft
direkt setzen. Das Format für den Befehl ist eine Liste: \set
Staff.keySignature = #`(((Oktave . Schritt) . Alteration) ((Oktave
. Schritt) . Alteration) ...)
wobei für jedes Element in der Liste
Oktave
die Oktave angibt (0 ist die Oktave vom
eingestrichenen C bis zum eingestrichenen H), Schritt
gibt
die Note innerhalb der Oktave an (0 heißt C und
6 heißt H), und Alteration
ist ,SHARP ,FLAT
,DOUBLE-SHARP
usw. (Beachte das beginnende Komma.)
Alternativ kann auch jedes Element der Liste mit dem allgemeineren Format
(Schritt . Alteration)
gesetzt werden, wobei dann die Einstellungen
für alle Oktaven gelten.
Hier ein Beispiel einer möglichen Tonart für eine Ganztonleiter:
\include "arabic.ly" \relative do' { \set Staff.keyAlterations = #`((0 . ,SEMI-FLAT) (1 . ,SEMI-FLAT) (2 . ,FLAT) (5 . ,FLAT) (6 . ,SEMI-FLAT)) %\set Staff.extraNatural = ##f re reb \dwn reb resd dod dob dosd \dwn dob | dobsb dodsd do do | }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Untypische Tonarten ] | [ Up : Staff notation ] | [ Orchester, Chor und Klavier > ] |
Numbering groups of measures
This snippet demonstrates the use of the
Measure_counter_engraver
to number groups of successive
measures. Any stretch of measures may be numbered, whether consisting
of repetitions or not.
The engraver must be added to the appropriate context. Here, a
Staff
context is used; another possibility is a Dynamics
context.
The counter is begun with \startMeasureCount
and ended with
\stopMeasureCount
. Numbering will start by default
with 1, but this behavior may be modified by overriding the
count-from
property.
When a measure extends across a line break, the number will appear twice, the second time in parentheses.
\layout { \context { \Staff \consists #Measure_counter_engraver } } \new Staff { \startMeasureCount \repeat unfold 7 { c'4 d' e' f' } \stopMeasureCount \bar "||" g'4 f' e' d' \override Staff.MeasureCounter.count-from = #2 \startMeasureCount \repeat unfold 5 { g'4 f' e' d' } g'4 f' \bar "" \break e'4 d' \repeat unfold 7 { g'4 f' e' d' } \stopMeasureCount } \paper { tagline = ##f }
Orchester, Chor und Klavier
Diese Vorlage zeigt die Benutzung von geschachtelten
StaffGroup
- und GrandStaff
-Kontexte, um
Instrumente in Untergruppen zu unterteilen, und die
Benutzung von \transpose
für transponierende
Instrumente. Alle Noten werden in C geschrieben. Noten
können in C eingegeben werden, oder auch in der Tonart
des Instrumentes: dann müssen sie zuerst nach C transponiert
werden, bevor sie einer Variable zugewiesen werden.
#(set-global-staff-size 17) \paper { indent = 3.0\cm % add space for instrumentName short-indent = 1.5\cm % add less space for shortInstrumentName } \header { tagline = ##f } fluteMusic = \relative c' { \key g \major g'1 b } % Pitches as written on a manuscript for Clarinet in A % are transposed to concert pitch. clarinetMusic = \transpose c' a \relative c'' { \key bes \major bes1 d } trumpetMusic = \relative c { \key g \major g''1 b } % Key signature is often omitted for horns hornMusic = \transpose c' f \relative c { d'1 fis } percussionMusic = \relative c { \key g \major g1 b } sopranoMusic = \relative c'' { \key g \major g'1 b } sopranoLyrics = \lyricmode { Lyr -- ics } altoIMusic = \relative c' { \key g \major g'1 b } altoIIMusic = \relative c' { \key g \major g'1 b } altoILyrics = \sopranoLyrics altoIILyrics = \lyricmode { Ah -- ah } tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b } tenorLyrics = \sopranoLyrics pianoRHMusic = \relative c { \key g \major g''1 b } pianoLHMusic = \relative c { \clef bass \key g \major g1 b } violinIMusic = \relative c' { \key g \major g'1 b } violinIIMusic = \relative c' { \key g \major g'1 b } violaMusic = \relative c { \clef alto \key g \major g'1 b } celloMusic = \relative c { \clef bass \key g \major g1 b } bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b } \score { << \new StaffGroup = "StaffGroup_woodwinds" << \new Staff = "Staff_flute" \with { instrumentName = "Flute" } \fluteMusic \new Staff = "Staff_clarinet" \with { instrumentName = \markup { \concat { "Clarinet in B" \flat } } } % Declare that written Middle C in the music % to follow sounds a concert B flat, for % output using sounded pitches such as MIDI. %\transposition bes % Print music for a B-flat clarinet \transpose bes c' \clarinetMusic >> \new StaffGroup = "StaffGroup_brass" << \new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" } % \transposition f \transpose f c' \hornMusic \new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" } \trumpetMusic >> \new RhythmicStaff = "RhythmicStaff_percussion" \with { instrumentName = "Percussion" } << \percussionMusic >> \new PianoStaff \with { instrumentName = "Piano" } << \new Staff { \pianoRHMusic } \new Staff { \pianoLHMusic } >> \new ChoirStaff = "ChoirStaff_choir" << \new Staff = "Staff_soprano" \with { instrumentName = "Soprano" } \new Voice = "soprano" \sopranoMusic \new Lyrics \lyricsto "soprano" { \sopranoLyrics } \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << \new Staff = "Staff_altoI" \with { instrumentName = "Alto I" } \new Voice = "altoI" \altoIMusic \new Lyrics \lyricsto "altoI" { \altoILyrics } \new Staff = "Staff_altoII" \with { instrumentName = "Alto II" } \new Voice = "altoII" \altoIIMusic \new Lyrics \lyricsto "altoII" { \altoIILyrics } >> \new Staff = "Staff_tenor" \with { instrumentName = "Tenor" } \new Voice = "tenor" \tenorMusic \new Lyrics \lyricsto "tenor" { \tenorLyrics } >> \new StaffGroup = "StaffGroup_strings" << \new GrandStaff = "GrandStaff_violins" << \new Staff = "Staff_violinI" \with { instrumentName = "Violin I" } \violinIMusic \new Staff = "Staff_violinII" \with { instrumentName = "Violin II" } \violinIIMusic >> \new Staff = "Staff_viola" \with { instrumentName = "Viola" } \violaMusic \new Staff = "Staff_cello" \with { instrumentName = "Cello" } \celloMusic \new Staff = "Staff_bass" \with { instrumentName = "Double Bass" } \bassMusic >> >> \layout { } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Orchester, Chor und Klavier ] | [ Up : Staff notation ] | [ Putting lyrics inside the staff > ] |
Print ChordNames with same root and different bass as slash and bass-note
To print subsequent ChordNames
only differing in its bass note
as slash and bass note use the here defined engraver. The behaviour may
be controlled in detail by the chordChanges
context property.
#(define Bass_changes_equal_root_engraver (lambda (ctx) "For sequential @code{ChordNames} with same root, but different bass, the root markup is dropped: D D/C D/B -> D /C /B The behaviour may be controlled by setting the @code{chordChanges} context-property." (let ((chord-pitches '()) (last-chord-pitches '()) (bass-pitch #f)) (make-engraver ((initialize this-engraver) (let ((chord-note-namer (ly:context-property ctx 'chordNoteNamer))) ;; Set 'chordNoteNamer, respect user setting if already done (ly:context-set-property! ctx 'chordNoteNamer (if (procedure? chord-note-namer) chord-note-namer note-name->markup)))) (listeners ((note-event this-engraver event) (let* ((pitch (ly:event-property event 'pitch)) (pitch-name (ly:pitch-notename pitch)) (pitch-alt (ly:pitch-alteration pitch)) (bass (ly:event-property event 'bass #f)) (inversion (ly:event-property event 'inversion #f))) ;; Collect notes of the chord ;; - to compare inversed chords we need to collect the bass note ;; as usual member of the chord, whereas an added bass must be ;; treated separate from the usual chord-notes ;; - notes are stored as pairs containing their ;; pitch-name (an integer), i.e. disregarding their octave and ;; their alteration (cond (bass (set! bass-pitch pitch)) (inversion (set! bass-pitch pitch) (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))) (else (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))))))) (acknowledgers ((chord-name-interface this-engraver grob source-engraver) (let ((chord-changes (ly:context-property ctx 'chordChanges #f))) ;; If subsequent chords are equal apart from their bass, ;; reset the 'text-property. ;; Equality is done by comparing the sorted lists of this chord's ;; elements and the previous chord. Sorting is needed because ;; inverted chords may have a different order of pitches. ;; `chord-changes' needs to be true (if (and bass-pitch chord-changes (equal? (sort chord-pitches car<) (sort last-chord-pitches car<))) (ly:grob-set-property! grob 'text (make-line-markup (list (ly:context-property ctx 'slashChordSeparator) ((ly:context-property ctx 'chordNoteNamer) bass-pitch (ly:context-property ctx 'chordNameLowercaseMinor)))))) (set! last-chord-pitches chord-pitches) (set! chord-pitches '()) (set! bass-pitch #f)))) ((finalize this-engraver) (set! last-chord-pitches '())))))) myChords = \chordmode { %\germanChords \set chordChanges = ##t d2:m d:m/cis d:m/c \set chordChanges = ##f d:m/b e1:7 \set chordChanges = ##t e \break \once \set chordChanges = ##f e1/f e2/gis e/+gis e e:m/f d:m d:m/cis d:m/c \set chordChanges = ##f d:m/b } << \new ChordNames \with { \consists #Bass_changes_equal_root_engraver } \myChords \new Staff \myChords >>
Putting lyrics inside the staff
Lyrics can be moved vertically to place them inside the staff. The
lyrics are moved with
\override LyricText.extra-offset = #'(0 . dy)
and
there are similar commands to move the extenders and hyphens. The
offset needed is established with trial and error.
<< \new Staff << \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 } >> \new Lyrics \with { \override LyricText.extra-offset = #'(0 . 8.6) \override LyricExtender.extra-offset = #'(0 . 8.6) \override LyricHyphen.extra-offset = #'(0 . 8.6) } \lyricsto "voc" { La la -- la __ _ la } >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Putting lyrics inside the staff ] | [ Up : Staff notation ] | [ Eine Stimme mit Transposition zitieren > ] |
Eine andere Stimme zitieren
Die quotedEventTypes
-Eigenschaft bestimmt die
Typen an Musikereignissen, die zitiert werden. Die
Standardeinstellung ist (note-event rest-event)
, womit
nur Noten und Pausen der zitierten Stimme für den
\quoteDuring
-Ausdruck übernommen werden. Im
Beispiel hier wird die 16-Pause nicht übernommen, weil
sich rest-event
nicht in quotedEventTypes
befindet.
quoteMe = \relative c' { fis4 r16 a8.-> b4\ff c } \addQuote quoteMe \quoteMe original = \relative c'' { c8 d s2 \once \override NoteColumn.ignore-collision = ##t es8 gis8 } << \new Staff \with { instrumentName = "quoteMe" } \quoteMe \new Staff \with { instrumentName = "orig" } \original \new Staff \with { instrumentName = "orig+quote" quotedEventTypes = #'(note-event articulation-event) } \relative c'' << \original \new Voice { s4 \set fontSize = #-4 \override Stem.length-fraction = #(magstep -4) \quoteDuring "quoteMe" { \skip 2. } } >> >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Eine andere Stimme zitieren ] | [ Up : Staff notation ] | [ Removing brace on first line of piano score > ] |
Eine Stimme mit Transposition zitieren
Zitate berücksichtigen sowohl die Transposition der Quelle als auch
des Zielinstruments. In diesem Beispiel spielen alle Instrumente
klingendes C, das Zielinstrument ist in F. Die Noten für das
Zielinstrument können mit \transpose
transponiert werden,
in diesem Fall werden alle Noten (auch die zitierten) transponiert.
\addQuote clarinet { \transposition bes \repeat unfold 8 { d'16 d' d'8 } } \addQuote sax { \transposition es' \repeat unfold 16 { a8 } } quoteTest = { % french horn \transposition f g'4 << \quoteDuring "clarinet" { \skip 4 } s4^"clar." >> << \quoteDuring "sax" { \skip 4 } s4^"sax." >> g'4 } { \new Staff \with { instrumentName = \markup { \column { Horn "in F" } } } \quoteTest \transpose c' d' << \quoteTest s4_"up a tone" >> }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Eine Stimme mit Transposition zitieren ] | [ Up : Staff notation ] | [ Die erste leere Notenzeile auch entfernen > ] |
Removing brace on first line of piano score
This snippet removes the first brace from a PianoStaff
or a
GrandStaff
, together with the clefs.
It may be useful when cutting and pasting the engraved image into existing music.
It uses \alterBroken
.
someMusic = { \once \override Staff.Clef.stencil = ##f \once \override Staff.TimeSignature.stencil = ##f \repeat unfold 3 c1 \break \repeat unfold 5 c1 \break \repeat unfold 5 c1 } \score { \new PianoStaff << \new Staff = "right" \relative c'' \someMusic \new Staff = "left" \relative c' { \clef F \someMusic } >> \layout { indent=75 \context { \PianoStaff \alterBroken transparent #'(#t) SystemStartBrace } } } \paper { tagline = ##f }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Removing brace on first line of piano score ] | [ Up : Staff notation ] | [ Setting system separators > ] |
Die erste leere Notenzeile auch entfernen
Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur
entfernt werden, indem die Eigenschaft remove-first
der
VerticalAxisGroup
-Eigenschaft eingesetzt wird. Das kann
man global in einer \layout
-Umgebung oder lokal in dem
bestimmten Notensystem machen, das entfernt werden soll. In letzterem
Fall muss man den Kontext angeben.
Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem gültig sind.
\layout { \context { \Staff \RemoveEmptyStaves % To use the setting globally, uncomment the following line: % \override VerticalAxisGroup.remove-first = ##t } } \new StaffGroup << \new Staff \relative c' { e4 f g a \break c1 } \new Staff { % To use the setting globally, comment this line, % uncomment the line in the \layout block above \override Staff.VerticalAxisGroup.remove-first = ##t R1 \break R } >> \new StaffGroup << \new Staff \relative c' { e4 f g a \break c1 } \new Staff { R1 \break R } >> \paper { tagline = ##f }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Die erste leere Notenzeile auch entfernen ] | [ Up : Staff notation ] | [ Shape individual ties in chords > ] |
Setting system separators
System separators can be inserted between systems. Any markup can be
used, but \slashSeparator
has been provided as a sensible
default.
\paper { system-separator-markup = \slashSeparator line-width = 120 tagline = ##f } notes = \relative c' { c1 | c \break c1 | c \break c1 | c } \book { \score { \new GrandStaff << \new Staff \notes \new Staff \notes >> } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Setting system separators ] | [ Up : Staff notation ] | [ Tick bar lines > ] |
Shape individual ties in chords
To shape individual ties in chords use the method demonstrated below.
\paper { tagline = ##f } \markup "Chords can be tied note by note" { <c'~ e'~ g'~ c''~>2 q } \markup \wordwrap { Affecting those ties with "\\shape" will not succeed, because TieColumn positions them on its own behalf and more or less ignores the "\\shape-input". You may surpress this by setting 'positioning-done true. Alas, 'positioning-done is an internal property, setting it true means: all positioning is done, don't do anything further. So you better take care you really did. See the example below where this is missed: All directions are down and the thickness is not accurate: } { <c'~ e'~ g'~ c''~>2 \once \override TieColumn.positioning-done = ##t q } \markup "To cure that, enter ties with explicit direction-modifiers" { <c'_~ e'_~ g'_~ c''^~>2 \once \override TieColumn.positioning-done = ##t q } \markup "Now you can use \\shape for each tie as usual" { <c'-\shape #'((0 . 0) (0 . -10) (0 . -10) (0 . 0)) _~ e'-\shape #'((0 . 0) (0 . -5) (0 . -5) (0 . 0)) _~ g'-\shape #'((0 . 0) (0 . -2) (0 . -2) (0 . 0)) _~ c''-\shape #'((0 . 0) (0 . 5) (0 . 5) (0 . 0)) ^~ >2 \once \override TieColumn.positioning-done = ##t q } \markup "This works at line break as well." { <c'-\shape #'(((0 . 0) (0 . -10) (0 . -10) (0 . 0)) ((0 . 0) (0 . -10) (0 . -10) (0 . 0))) _~ e'-\shape #'(((0 . 0) (0 . -5) (0 . -5) (0 . 0)) ((0 . 0) (0 . -5) (0 . -5) (0 . 0))) _~ g'-\shape #'(((0 . 0) (0 . -2) (0 . -2) (0 . 0)) ((0 . 0) (0 . -2) (0 . -2) (0 . 0))) _~ c''-\shape #'(((0 . 0) (0 . 5) (0 . 5) (0 . 0)) ((0 . 0) (0 . 5) (0 . 5) (0 . 0))) ^~ >2 \break \once \override TieColumn.positioning-done = ##t q } \markup "Same with tieWaitForNote" { \set tieWaitForNote = ##t c'4-\shape #'((0 . 0) (0 . -10) (0 . -10) (0 . 0)) _~ e'-\shape #'((0 . 0) (0 . -5) (0 . -5) (0 . 0)) _~ g'-\shape #'((0 . 0) (0 . -2) (0 . -2) (0 . 0)) _~ c''-\shape #'((0 . 0) (0 . 5) (0 . 5) (0 . 0)) ^~ \once \override TieColumn.positioning-done = ##t <c' e' g' c''>1 }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Shape individual ties in chords ] | [ Up : Staff notation ] | [ Time signature in brackets > ] |
Tick bar lines
’Tick’ bar lines are often used in music where the bar line is used only for coordination and is not meant to imply any rhythmic stress.
\relative c' { \set Score.measureBarType = #"'" c4 d e f g4 f e d c4 d e f g4 f e d \bar "|." }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Tick bar lines ] | [ Up : Staff notation ] | [ Time signature in parentheses > ] |
Time signature in brackets
The time signature can be enclosed within brackets.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) \time 2/4 a4 b8 c }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Time signature in brackets ] | [ Up : Staff notation ] | [ Eigenschaften des Schlüssels optimieren > ] |
Time signature in parentheses
Enclose the time signature in parentheses.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1)) \time 2/4 a4 b8 c }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Time signature in parentheses ] | [ Up : Staff notation ] | [ Two \partCombine pairs on one staff > ] |
Eigenschaften des Schlüssels optimieren
Der Befehl \clef "treble_8"
ist gleichbedeutend mit einem
expliziten Setzen der Eigenschaften von clefGlyph
,
clefPosition
(welche die vertikale Position des Schlüssels bestimmt),
middleCPosition
und clefTransposition
. Ein Schlüssel wird
ausgegeben, wenn eine der Eigenschaften außer middleCPosition
sich
ändert.
Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der
Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten
auf dem System: das geschieht nur, wenn auch die Position des
eingestrichenen C (middleCPosition) angegeben wird. Die
Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen
positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie
plus Zwischenraum. Der clefTransposition
-Wert ist normalerweise auf 7,
-7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig.
Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue
Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile
ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht
erforderlich ist, kann er unterdrückt werden, indem die
explicitClefVisibility
-Eigenschaft des Staff
-Kontextes auf den
Wert end-of-line-invisible
gesetzt wird. Das Standardverhalten kann
mit \unset Staff.explicitClefVisibility
wieder hergestellt werden.
Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen Änderungen die ursprüngliche relative Positionierung von Schlüssel und Noten, auf der zweiten Zeile nicht.
{ % The default treble clef \key f \major c'1 % The standard bass clef \set Staff.clefGlyph = "clefs.F" \set Staff.clefPosition = 2 \set Staff.middleCPosition = 6 \set Staff.middleCClefPosition = 6 \key g \major c'1 % The baritone clef \set Staff.clefGlyph = "clefs.C" \set Staff.clefPosition = 4 \set Staff.middleCPosition = 4 \set Staff.middleCClefPosition = 4 \key f \major c'1 % The standard choral tenor clef \set Staff.clefGlyph = "clefs.G" \set Staff.clefPosition = -2 \set Staff.clefTransposition = -7 \set Staff.middleCPosition = 1 \set Staff.middleCClefPosition = 1 \key f \major c'1 % A non-standard clef \set Staff.clefPosition = 0 \set Staff.clefTransposition = 0 \set Staff.middleCPosition = -4 \set Staff.middleCClefPosition = -4 \key g \major c'1 \break % The following clef changes do not preserve % the normal relationship between notes, key signatures % and clefs: \set Staff.clefGlyph = "clefs.F" \set Staff.clefPosition = 2 c'1 \set Staff.clefGlyph = "clefs.G" c'1 \set Staff.clefGlyph = "clefs.C" c'1 \set Staff.clefTransposition = 7 c'1 \set Staff.clefTransposition = 0 \set Staff.clefPosition = 0 c'1 % Return to the normal clef: \set Staff.middleCPosition = 0 c'1 } \paper { tagline = ##f }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Eigenschaften des Schlüssels optimieren ] | [ Up : Staff notation ] | [ Eine eckige Klammer zu Beginn von Systemgruppen benutzen > ] |
Two \partCombine pairs on one staff
The \partCombine
function takes two music expressions each
containing a part, and distributes them among four Voice
s named
„two“, „one“, „solo“, and „chords“ depending on when and how
the parts are merged into a common voice. The voices output from
\partCombine
can have their layout properties adjusted in the
usual way. Here we define extensions of \partCombine
to make
it easier to put four voices on a staff.
soprano = { d'4 | cis' b e' d'8 cis' | cis'2 b } alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 } bass = { fis8 gis | a4 gis g fis | eis fis b,2 } \new Staff << \key b\minor \clef alto \partial 4 \transpose b b' \partCombineUp \soprano \alto \partCombineDown \tenor \bass >>
\layout { \context { \Staff \accepts "VoiceBox" } \context { \name "VoiceBox" \type "Engraver_group" \defaultchild "Voice" \accepts "Voice" \accepts "NullVoice" } } customPartCombineUp = #(define-music-function (partOne partTwo) (ly:music? ly:music?) "Take the music in @var{partOne} and @var{partTwo} and return a @code{VoiceBox} named @q{Up} containing @code{Voice}s that contain @var{partOne} and @var{partTwo} merged into one voice where feasible. This variant sets the default voicing in the output to use upward stems." #{ \new VoiceBox = "Up" << \context Voice = "one" { \voiceOne } \context Voice = "two" { \voiceThree } \context Voice = "shared" { \voiceOne } \context Voice = "solo" { \voiceOne } \context NullVoice = "null" {} \partCombine #partOne #partTwo >> #}) customPartCombineDown = # (define-music-function (partOne partTwo) (ly:music? ly:music?) "Take the music in @var{partOne} and @var{partTwo} and return a @code{VoiceBox} named @q{Down} containing @code{Voice}s that contain @var{partOne} and @var{partTwo} merged into one voice where feasible. This variant sets the default voicing in the output to use downward stems." #{ \new VoiceBox = "Down" << \set VoiceBox.soloText = #"Solo III" \set VoiceBox.soloIIText = #"Solo IV" \context Voice ="one" { \voiceFour } \context Voice ="two" { \voiceTwo } \context Voice ="shared" { \voiceFour } \context Voice ="solo" { \voiceFour } \context NullVoice = "null" {} \partCombine #partOne #partTwo >> #}) soprano = { d'4 | cis' b e' d'8 cis' | cis'2 b } alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 } tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 } bass = { fis8 gis | a4 gis g fis | eis fis b,2 } \new Staff << \key b\minor \clef alto \partial 4 \transpose b b' \customPartCombineUp \soprano \alto \customPartCombineDown \tenor \bass >>
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Two \partCombine pairs on one staff ] | [ Up : Staff notation ] | [ Using autochange with more than one voice > ] |
Eine eckige Klammer zu Beginn von Systemgruppen benutzen
Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer
(SystemStartSquare
) umgewandelt werden, wenn man sie explizit
im StaffGroup
- oder ChoirStaffGroup
-Kontext setzt.
\score { \new StaffGroup { << \set StaffGroup.systemStartDelimiter = #'SystemStartSquare \new Staff { c'4 d' e' f' } \new Staff { c'4 d' e' f' } >> } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Eine eckige Klammer zu Beginn von Systemgruppen benutzen ] | [ Up : Staff notation ] | [ Using marklines in a Frenched score > ] |
Using autochange with more than one voice
Using autochange
with more than one voice.
\score { \new PianoStaff << \new Staff = "up" { << \set Timing.beamExceptions = #'() \set Timing.beatStructure = #'(4) \new Voice { \voiceOne \autoChange \relative c' { g8 a b c d e f g g,8 a b c d e f g } } \new Voice { \voiceTwo \autoChange \relative c' { g8 a b c d e f g g,,8 a b c d e f g } } >> } \new Staff = "down" { \clef bass } >> }
Using marklines in a Frenched score
Using MarkLine
contexts (such as in
LSR1010) in a Frenched
score can be problematic if all the staves between two MarkLine
s
are removed in one system. The Keep_alive_together_engraver
can
be used within each StaffGroup
to keep the MarkLine
alive
only as long as the other staves in the group stay alive.
bars = { \tempo "Allegro" 4=120 s1*2 \repeat unfold 5 { \mark \default s1*2 } \bar "||" \tempo "Adagio" 4=40 s1*2 \repeat unfold 8 { \mark \default s1*2 } \bar "|." } winds = \repeat unfold 120 { c''4 } trumpet = { \repeat unfold 8 g'2 R1*16 \repeat unfold 4 g'2 R1*8 } trombone = { \repeat unfold 4 c'1 R1*8 d'1 R1*17 } strings = \repeat unfold 240 { c''8 } #(set-global-staff-size 16) \paper { systems-per-page = 5 ragged-last-bottom = ##f } \layout { indent = 15\mm short-indent = 5\mm \context { \name MarkLine \type Engraver_group \consists Output_property_engraver \consists Axis_group_engraver \consists Mark_engraver \consists Metronome_mark_engraver \consists Staff_collecting_engraver \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-layer = #'any \override VerticalAxisGroup.staff-affinity = #DOWN \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = 1 keepAliveInterfaces = #'() } \context { \Staff \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-layer = ##f } \context { \StaffGroup \accepts MarkLine \consists Keep_alive_together_engraver } \context { \Score \remove Mark_engraver \remove Metronome_mark_engraver \remove Staff_collecting_engraver } } \score { << \new StaffGroup = "winds" \with { instrumentName = "Winds" shortInstrumentName = "Winds" } << \new MarkLine \bars \new Staff \winds >> \new StaffGroup = "brass" << \new MarkLine \bars \new Staff = "trumpet" \with { instrumentName = "Trumpet" shortInstrumentName = "Tpt" } \trumpet \new Staff = "trombone" \with { instrumentName = "Trombone" shortInstrumentName = "Tbn" } \trombone >> \new StaffGroup = "strings" \with { instrumentName = "Strings" shortInstrumentName = "Strings" } << \new MarkLine \bars \new Staff = "strings" { \strings } >> >> }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Using marklines in a Frenched score ] | [ Up : Staff notation ] | [ Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole > ] |
Vertically aligned StaffGroups without connecting SystemStartBar
This snippet shows how to achieve vertically aligned StaffGroups
with a SystemStartBar
for each StaffGroup
, but without
connecting them.
#(set-global-staff-size 18) \header { tagline = ##f } \paper { indent = 0 ragged-right = ##f print-all-headers = ##t } \layout { \context { \StaffGroup \consists Text_mark_engraver \consists Staff_collecting_engraver systemStartDelimiterHierarchy = #'(SystemStartBrace (SystemStartBracket a b)) } \context { \Score \remove Text_mark_engraver \remove Staff_collecting_engraver \override SystemStartBrace.style = #'bar-line \omit SystemStartBar \override SystemStartBrace.padding = #-0.1 \override SystemStartBrace.thickness = #1.6 \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15 } } %%%% EXAMPLE txt = \lyricmode { Wer4 nur den lie -- ben Gott läßt wal2 -- ten4 und4 hof -- fet auf ihn al -- le Zeit2. } % First StaffGroup "exercise" eI = \relative c' { \textMark \markup { \bold Teacher: This is a simple setting of the choral. Please improve it. } \key a \minor \time 4/4 \voiceOne \partial 4 e4 a b c b a b gis2 e4\fermata g! g f e a a gis a2.\fermata \bar ":|." } eII = \relative c' { \key a \minor \time 4/4 \voiceTwo \partial 4 c4 e e e gis a f e2 b4 b d d c c d d c2. \bar ":|." } eIII = \relative c' { \key a \minor \time 4/4 \clef bass \voiceOne \partial 4 a4 c b a b c d b2 gis4 g g b c a f e e2. } eIV = \relative c' { \key a \minor \time 4/4 \clef bass \voiceTwo \partial 4 a,4 a' gis a e a, d e2 e,4\fermata e' b g c f d e a,2.\fermata \bar ":|." } exercise = \new StaffGroup = "exercise" << \new Staff << \new Voice \eI \new Voice \eII >> \new Lyrics \txt \new Staff << \new Voice \eIII \new Voice \eIV >> >> % Second StaffGroup "simple Bach" sbI = \relative c' { \textMark \markup { \bold" Pupil:" Here's my version! } \key a \minor \time 4/4 \voiceOne \partial 4 e4 a b c b a b gis2 e4\fermata g! g f e a a gis a2.\fermata \bar ":|." } sbII = \relative c' { \key a \minor \time 4/4 \voiceTwo \partial 4 c8 d e4 e e8 f g4 f f e2 b4 b8 c d4 d e8 d c4 b8 c d4 c2. \bar ":|." } sbIII = \relative c' { \key a \minor \time 4/4 \clef bass \voiceOne \partial 4 a8 b c4 b a b8 c d4 d8 c b2 gis4 g g8 a b4 b a8 g f4 e e2. } sbIV = \relative c' { \key a \minor \time 4/4 \clef bass \voiceTwo \partial 4 a,4 a' gis a e f8 e d4 e2 e,4\fermata e' b a8 g c4 f8 e d4 e a,2.\fermata \bar ":|." } simpleBach = \new StaffGroup = "simple Bach" << \new Staff << \new Voice \sbI \new Voice \sbII >> \new Lyrics \txt \new Staff << \new Voice \sbIII \new Voice \sbIV >> >> % Third StaffGroup "chromatic Bach" cbI = \relative c' { \textMark \markup { \bold "Teacher:" \column { "Well, you simply copied and transposed a version of J.S.Bach." "Do you know this one?" } } \key a \minor \time 4/4 \voiceOne \partial 4 e4 a b c b a b gis4. fis8 e4\fermata g! g f e a a8 b gis4 a2.\fermata \bar ":|." } cbII = \relative c' { \key a \minor \time 4/4 \voiceTwo \partial 4 c8 d e4 e e8 fis gis4 a8 g! f!4 e2 b4 e e d d8[ cis] d dis e fis e4 e2. \bar ":|." } cbIII = \relative c' { \key a \minor \time 4/4 \clef bass \voiceOne \partial 4 a8 b c[ b] a gis8 a4 d, e8[ e'] d c b4. a8 gis4 b c d8 c b[ a] a b c b b c16 d c2. } cbIV = \relative c' { \key a \minor \time 4/4 \clef bass \voiceTwo \partial 4 a4 c, e a, b c d e2 e4\fermata e a b8 c gis[ g] fis f e dis e4 a,2.\fermata \bar ":|." } chromaticBach = \new StaffGroup = "chromatic Bach" << \new Staff << \new Voice \cbI \new Voice \cbII >> \new Lyrics \txt \new Staff << \new Voice \cbIII \new Voice \cbIV >> >> % Score \score { << \exercise \simpleBach \chromaticBach >> \header { title = \markup \column { \combine \null \vspace #1 "Exercise: Improve the given choral" " " } } \layout { \context { \Lyrics \override LyricText.X-offset = #-1 } } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Vertically aligned StaffGroups without connecting SystemStartBar ] | [ Up : Staff notation ] | [ Volta multi staff > ] |
Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole
Indem man den Volta_engraver
zu dem entsprechenden Notensystem
hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt
werden.
\score { << \chords { c1 c1 } \new Staff \with { \consists "Volta_engraver" } { \repeat volta 2 { c'1 } \alternative { c' } } >> \layout { \context { \Score \remove "Volta_engraver" } } }
[ << Staff notation ] | [Top][Contents] | [ Editorial annotations >> ] |
[ < Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole ] | [ Up : Staff notation ] | [ Editorial annotations > ] |
Volta multi staff
By adding the Volta_engraver
to the relevant staff, volte can be
put over staves other than the topmost one in a score.
voltaMusic = \relative c'' { \repeat volta 2 { c1 \alternative { \volta 1 { d1 } \volta 2 { e1 } } } } << \new StaffGroup << \new Staff \voltaMusic \new Staff \voltaMusic >> \new StaffGroup << \new Staff \with { \consists "Volta_engraver" } \voltaMusic \new Staff \voltaMusic >> >>
[ << Staff notation ] | [Top][Contents] | [ Text >> ] |
[ < Volta multi staff ] | [ Up : Top ] | [ Adding fingerings to a score > ] |
Editorial annotations
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Editorial annotations ] | [ Up : Editorial annotations ] | [ Adding links to objects > ] |
Adding fingerings to a score
Fingering instructions can be entered using a simple syntax.
\relative c'' { c4-1 d-2 f-4 e-3 }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Adding fingerings to a score ] | [ Up : Editorial annotations ] | [ Adding markups in a tablature > ] |
Adding links to objects
To add a link to a grob stencil you can use add-link
as defined
here. It works both with \override
and \tweak
.
Drawback: point-and-click
is disturbed for the linked grobs.
Limitation: Works for PDF only.
The linked objects are colored with a separate command. Note that the links are not displayed and are not clickable from inside the LSR.
#(define (add-link url-strg) (lambda (grob) (let* ((stil (ly:grob-property grob 'stencil))) (if (ly:stencil? stil) (let* ((x-ext (ly:stencil-extent stil X)) (y-ext (ly:stencil-extent stil Y)) (url-expr `(url-link ,url-strg ,x-ext ,y-ext)) (new-stil (ly:stencil-add (ly:make-stencil url-expr x-ext y-ext) stil))) (ly:grob-set-property! grob 'stencil new-stil)))))) %%%% test %% For easier maintenance of this snippet the URL is formatted to use the %% actually used LilyPond version. %% Of course a literal URL would work as well. #(define major.minor-version (string-join (take (string-split (lilypond-version) #\.) 2) ".")) urlI = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/writing-pitches" major.minor-version) urlII = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/rhythms" major.minor-version) urlIII = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/note-heads" major.minor-version) urlIV = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/beams" major.minor-version) urlV = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/note-head-styles" major.minor-version) urlVI = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/writing-pitches" major.minor-version) \relative c' { \key cis \minor \once \override Staff.Clef.color = #green \once \override Staff.Clef.after-line-breaking = #(add-link urlI) \once \override Staff.TimeSignature.color = #green \once \override Staff.TimeSignature.after-line-breaking = #(add-link urlII) \once \override NoteHead.color = #green \once \override NoteHead.after-line-breaking = #(add-link urlIII) cis'1 \once \override Beam.color = #green \once \override Beam.after-line-breaking = #(add-link urlIV) cis8 dis e fis gis2 <gis, \tweak Accidental.color #green \tweak Accidental.after-line-breaking #(add-link urlVI) \tweak color #green \tweak after-line-breaking #(add-link urlV) \tweak style #'harmonic bis dis fis >1 <cis, cis' e> }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Adding links to objects ] | [ Up : Editorial annotations ] | [ Fingersatz auch innerhalb des Systems setzen > ] |
Adding markups in a tablature
By default markups does not show in a tablature.
To make them appear, simply use the command
\revert TabStaff.TextScript.stencil
%% http://lsr.di.unimi.it/LSR/Item?id=919 % by P.P.Schneider on June 2014 high = { r4 r8 <g c'> q r8 r4 } low = { c4 r4 c8 r8 g,8 b, } pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" } \score { \new TabStaff { \repeat unfold 2 << \high \\ \low \\ \pulse >> } \layout { \context { \TabStaff \clef moderntab \revert TextScript.stencil \override TextScript.font-series = #'bold \override TextScript.font-size = #-2 \override TextScript.color = #red } \context { \Score proportionalNotationDuration = \musicLength 8 } } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Adding markups in a tablature ] | [ Up : Editorial annotations ] | [ Alternative Taktnummerierung > ] |
Fingersatz auch innerhalb des Systems setzen
Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems gesetzt. Das kann aber verändert werden.
\relative c' { <c-1 e-2 g-3 b-5>2 \override Fingering.staff-padding = #'() <c-1 e-2 g-3 b-5>4 g'-0 a8[-1 b]-2 g-0 r \override Fingering.add-stem-support = ##f a[-1 b]-2 g-0 r \override Fingering.add-stem-support = ##t a[-1 b]-2 g-0 r \override Fingering.add-stem-support = #only-if-beamed a[-1 b]-2 g-0 r }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Fingersatz auch innerhalb des Systems setzen ] | [ Up : Editorial annotations ] | [ Analysis brackets above the staff > ] |
Alternative Taktnummerierung
Zwei alternative Methoden können eingestellt werden, die die Taktnummerierung beeinflussen, insbesondere bei Wiederholungen.
music = \relative c' { \repeat volta 3 { c4 d e f | \alternative { \volta 1 { c4 d e f | c2 d \break } \volta 2 { f4 g a b | f4 g a b | f2 a | \break } \volta 3 { c4 d e f | c2 d } } } c1 \bar "|." } \markup "default" { \music } \markup \typewriter "'numbers" { \set Score.alternativeNumberingStyle = #'numbers \music } \markup \typewriter "'numbers-with-letters" { \set Score.alternativeNumberingStyle = #'numbers-with-letters \music } \paper { tagline = ##f }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Alternative Taktnummerierung ] | [ Up : Editorial annotations ] | [ Analysis brackets with labels > ] |
Analysis brackets above the staff
Simple horizontal analysis brackets are added below the staff by default. The following example shows a way to place them above the staff instead.
\layout { \context { \Voice \consists "Horizontal_bracket_engraver" } } \relative c'' { \once \override HorizontalBracket.direction = #UP c2\startGroup d2\stopGroup }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Analysis brackets above the staff ] | [ Up : Editorial annotations ] | [ Notenkopfstile basierend auf der Tonleiterstufe erstellen > ] |
Analysis brackets with labels
Text markup may be added to analysis brackets through the text
property of the HorizontalBracketText
grob. Adding different
texts to brackets beginning at the same time requires the
\tweak
command.
Bracket text will be parenthesized after a line break.
\paper { tagline = ##f } \layout { \context { \Voice \consists "Horizontal_bracket_engraver" \override HorizontalBracket.direction = #UP } } { \once\override HorizontalBracketText.text = "a" c''\startGroup d''\stopGroup \once\override HorizontalBracketText.text = "a'" e''\startGroup d''\stopGroup | c''-\tweak HorizontalBracketText.text \markup \bold \huge "b" \startGroup -\tweak HorizontalBracketText.text "a" \startGroup d''\stopGroup e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup\stopGroup | c''-\tweak HorizontalBracketText.text foo \startGroup d'' e'' f'' | \break g'' a'' b'' c'''\stopGroup }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Analysis brackets with labels ] | [ Up : Editorial annotations ] | [ Blanking staff lines using the \whiteout command > ] |
Notenkopfstile basierend auf der Tonleiterstufe erstellen
Die shapeNoteStyles
-(NotenFormenStile)-Eigenschaft kann benutzt
werden, um verschiedene Notenstile für jeden Schritt der Tonleiter
zu definieren (vorgegeben von der Tonart oder der „tonic“
(Tonika)-Eigenschaft. Diese Eigenschaft braucht eine Anzahl von Symbolen,
welche beliebig sein können (geometrische Ausdrücke wie triangle
(Dreieck), cross
(Kreuz) und xcircle
(X-Kreis) sind erlaubt)
oder basierend auf einer alten amerikanischen Notensatztradition (einige
lateinische Notenbezeichnungen sind auch erlaubt).
Um alte amerikanische Liederbücher zu imitieren, gibt es einige
vordefinierte Notenstile wie etwa \aikenHeads
(im Stil von Aiken)
oder \sacredHarpHeads
(im Stil der Sacred Harp-Tradition).
Dieses Beispiel zeigt, wie man unterschiedlich geformte Noten erhält und eine Melodie transponieren kann, ohne dass das Verhältnis zwischen den harmonischen Funktionen und dem Notenstil verloren geht.
fragment = { \key c \major c2 d e2 f g2 a b2 c } \new Staff { \transpose c d \relative c' { \set shapeNoteStyles = ##(do re mi fa #f la ti) \fragment } \break \relative c' { \set shapeNoteStyles = ##(cross triangle fa #f mensural xcircle diamond) \fragment } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Notenkopfstile basierend auf der Tonleiterstufe erstellen ] | [ Up : Editorial annotations ] | [ Changing a single note’s size in a chord > ] |
Blanking staff lines using the \whiteout command
The \whiteout
command underlays a markup with a white
box. Since staff lines are in a lower layer than most other grobs,
this white box will not overlap any other grob.
\layout { ragged-right = ##f } \relative c' { \override TextScript.extra-offset = #'(2 . 4) c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c }
Changing a single note’s size in a chord
Individual note heads in a chord can be modified with the
\tweak
command inside a chord, by altering the font-size
property.
Inside the chord (within the brackets < >
), before the note to
be altered, place the \tweak
command, followed by
font-size
and define the proper size like #-2
(a tiny
note head).
\relative c' { <\tweak font-size #+2 c e g c \tweak font-size #-2 e>1 ^\markup { A tiny e }_\markup { A big c } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Changing a single note’s size in a chord ] | [ Up : Editorial annotations ] | [ Coloring notes depending on their pitch > ] |
Changing the appearance of a slur from solid to dotted or dashed
The appearance of slurs may be changed from solid to dotted or dashed.
\relative c' { c4( d e c) \slurDotted c4( d e c) \slurSolid c4( d e c) \slurDashed c4( d e c) \slurSolid c4( d e c) }
Coloring notes depending on their pitch
It is possible to color note heads depending on their pitch and/or their names: the function used in this example even makes it possible to distinguish enharmonics.
%Association list of pitches to colors. #(define color-mapping (list (cons (ly:make-pitch 0 0 NATURAL) (x11-color 'red)) (cons (ly:make-pitch 0 0 SHARP) (x11-color 'green)) (cons (ly:make-pitch 0 1 FLAT) (x11-color 'green)) (cons (ly:make-pitch 0 2 NATURAL) (x11-color 'red)) (cons (ly:make-pitch 0 2 SHARP) (x11-color 'green)) (cons (ly:make-pitch 0 3 FLAT) (x11-color 'red)) (cons (ly:make-pitch 0 3 NATURAL) (x11-color 'green)) (cons (ly:make-pitch 0 4 SHARP) (x11-color 'red)) (cons (ly:make-pitch 0 5 NATURAL) (x11-color 'green)) (cons (ly:make-pitch 0 5 FLAT) (x11-color 'red)) (cons (ly:make-pitch 0 6 SHARP) (x11-color 'red)) (cons (ly:make-pitch 0 1 NATURAL) (x11-color 'blue)) (cons (ly:make-pitch 0 3 SHARP) (x11-color 'blue)) (cons (ly:make-pitch 0 4 FLAT) (x11-color 'blue)) (cons (ly:make-pitch 0 5 SHARP) (x11-color 'blue)) (cons (ly:make-pitch 0 6 FLAT) (x11-color 'blue)))) %Compare pitch and alteration (not octave). #(define (pitch-equals? p1 p2) (and (= (ly:pitch-alteration p1) (ly:pitch-alteration p2)) (= (ly:pitch-notename p1) (ly:pitch-notename p2)))) #(define (pitch-to-color pitch) (let ((color (assoc pitch color-mapping pitch-equals?))) (if color (cdr color)))) #(define (color-notehead grob) (pitch-to-color (ly:event-property (event-cause grob) 'pitch))) \score { \new Staff \relative c' { \override NoteHead.color = #color-notehead c8 b d dis ees f g aes } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Coloring notes depending on their pitch ] | [ Up : Editorial annotations ] | [ Einen Doppelschlag mit Vorhalt erstellen > ] |
Position von Fingersatz in Akkorden kontrollieren
Die Position von Fingersatzzahlen kann exakt kontrolliert werden.
\relative c' { \set fingeringOrientations = #'(left) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down right up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(left) <c-1>2 \set fingeringOrientations = #'(down) <e-3>2 \set stringNumberOrientations = #'(up left down) <f\3 a\2 c\1>1 \set strokeFingerOrientations = #'(down right up) <c\rightHandFinger 1 e\rightHandFinger 2 c'\rightHandFinger 4 > }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Position von Fingersatz in Akkorden kontrollieren ] | [ Up : Editorial annotations ] | [ Creating blank staves > ] |
Einen Doppelschlag mit Vorhalt erstellen
Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das
Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die
outside-staff-priority
-Eigenschaft muss auf falsch (#f
)
gesetzt werden, weil sie sonst über die Eigenschaft
avoid-slur property
dominieren würde. Der Wert von halign
wird benutzt, um den Doppelschlag horizontal zu positionieren.
\relative c'' { \after 2*2/3 \turn c2( d4) r | \after 4 \turn c4.( d8) \after 4 { \once \set suggestAccidentals = ##t \once \override AccidentalSuggestion.outside-staff-priority = ##f \once \override AccidentalSuggestion.avoid-slur = #'inside \once \override AccidentalSuggestion.font-size = -3 \once \override AccidentalSuggestion.script-priority = -1 \once \hideNotes cis8\turn \noBeam } d4.( e8) }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Einen Doppelschlag mit Vorhalt erstellen ] | [ Up : Editorial annotations ] | [ Creating double-digit fingerings > ] |
Creating blank staves
To create blank staves, generate empty measures then remove the
Bar_number_engraver
from the Score
context, and the
Time_signature_engraver
, Clef_engraver
and
Bar_engraver
from the Staff
context.
#(set-global-staff-size 20) \score { { \repeat unfold 12 { s1 \break } } \layout { indent = 0\in \context { \Staff \remove "Time_signature_engraver" \remove "Clef_engraver" \remove "Bar_engraver" } \context { \Score \remove "Bar_number_engraver" } } } % uncomment these lines for "letter" size %{ \paper { #(set-paper-size "letter") ragged-last-bottom = ##f line-width = 7.5\in left-margin = 0.5\in bottom-margin = 0.25\in top-margin = 0.25\in } %} % uncomment these lines for "A4" size %{ \paper { #(set-paper-size "a4") ragged-last-bottom = ##f line-width = 180 left-margin = 15 bottom-margin = 10 top-margin = 10 } %}
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Creating blank staves ] | [ Up : Editorial annotations ] | [ Standardrichtung für Hälse auf der Mittellinie > ] |
Creating double-digit fingerings
Creating fingerings larger than 5 is possible.
\relative c' { c1-10 c1-50 c1-36 c1-29 }
Standardrichtung für Hälse auf der Mittellinie
Die Richtung von Hälsen auf der mittleren Linie kann mit der Stem
-Eigenschaft
neutral-direction
gesetzt werden.
\relative c'' { a4 b c b \override Stem.neutral-direction = #up a4 b c b \override Stem.neutral-direction = #down a4 b c b }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Standardrichtung für Hälse auf der Mittellinie ] | [ Up : Editorial annotations ] | [ Drawing boxes around grobs > ] |
Different font size settings for instrumentName and shortInstrumentName
Choose different font sizes for instrumentName and shortInstrumentName as a context override.
InstrumentNameFontSize = #(define-music-function (font-size-pair)(pair?) "Sets the @code{font-size} of @code{InstrumentName}. The font-size for the initial @code{instrumentName} is taken from the first value in @var{font-size-pair}. @code{shortInstrumentName} will get the second value of @var{font-size-pair}. " ;; This code could be changed/extended to set different values for each ;; occurance of `shortInstrumentName' #{ \override InstrumentName.after-line-breaking = #(lambda (grob) (let* ((orig (ly:grob-original grob)) (siblings (if (ly:grob? orig) (ly:spanner-broken-into orig) '()))) (if (pair? siblings) (begin (ly:grob-set-property! (car siblings) 'font-size (car font-size-pair)) (for-each (lambda (g) (ly:grob-set-property! g 'font-size (cdr font-size-pair))) (cdr siblings)))))) #}) \paper { tagline = ##f } \layout { \context { \Staff \InstrumentNameFontSize #'(6 . -3) } } \new StaffGroup << \new Staff \with { instrumentName = "Flute" shortInstrumentName = "Fl." } { c''1 \break c'' \break c'' } \new Staff \with { instrumentName = "Violin" shortInstrumentName = "Vl." } { c''1 \break c'' \break c'' } >>
Drawing boxes around grobs
The print-function
can be overridden to draw a box around an
arbitrary grob.
\relative c'' { \override TextScript.stencil = #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) c'4^"foo" \override Stem.stencil = #(make-stencil-boxer 0.05 0.25 ly:stem::print) \override Score.RehearsalMark.stencil = #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) b8 \revert Stem.stencil \revert Flag.stencil c4. c4 \mark \default c1 }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Drawing boxes around grobs ] | [ Up : Editorial annotations ] | [ Drawing circles around various objects > ] |
Drawing circles around note heads
Here is how to circle a note.
circle = \once \override NoteHead.stencil = #(lambda (grob) (let* ((note (ly:note-head::print grob)) (combo-stencil (ly:stencil-add note (circle-stencil note 0.1 0.8)))) (ly:make-stencil (ly:stencil-expr combo-stencil) (ly:stencil-extent note X) (ly:stencil-extent note Y)))) { \circle c'' }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Drawing circles around note heads ] | [ Up : Editorial annotations ] | [ Embedding native PostScript in a \markup block > ] |
Drawing circles around various objects
The \circle
markup command draws circles around various
objects, for example fingering indications. For other objects,
specific tweaks may be required: this example demonstrates two
strategies for rehearsal marks and measure numbers.
\relative c' { c1 \set Score.rehearsalMarkFormatter = #(lambda (mark context) (make-circle-markup (format-mark-numbers mark context))) \mark \default c2 d^\markup { \override #'(thickness . 3) { \circle \finger 2 } } \override Score.BarNumber.break-visibility = #all-visible \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Drawing circles around various objects ] | [ Up : Editorial annotations ] | [ Gitternetzlinien: Aussehen verändern > ] |
Embedding native PostScript in a \markup block
PostScript code can be directly inserted inside a \markup
block.
% PostScript is a registered trademark of Adobe Systems Inc. \relative c'' { a4-\markup { \postscript "3 4 moveto 5 3 rlineto stroke" } -\markup { \postscript "[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } b4-\markup { \postscript "3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } s2 a'1 }
Gitternetzlinien: Aussehen verändern
Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften geändert werden.
\score { \new ChoirStaff << \new Staff { \relative c'' { \stemUp c'4. d8 e8 f g4 } } \new Staff { \relative c { % this moves them up one staff space from the default position \override Score.GridLine.extra-offset = #'(0.0 . 1.0) \stemDown \clef bass \once \override Score.GridLine.thickness = 5.0 c4 \once \override Score.GridLine.thickness = 1.0 g'4 \once \override Score.GridLine.thickness = 3.0 f4 \once \override Score.GridLine.thickness = 5.0 e4 } } >> \layout { \context { \Staff % set up grids \consists "Grid_point_engraver" % set the grid interval to one quarter note gridInterval = \musicLength 4 } \context { \Score \consists "Grid_line_span_engraver" % this moves them to the right half a staff space \override NoteColumn.X-offset = -0.5 } } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Gitternetzlinien: Aussehen verändern ] | [ Up : Editorial annotations ] | [ Hammer on and pull off > ] |
Grid lines: emphasizing rhythms and notes synchronization
Regular vertical lines can be drawn between staves to show note synchronization; however, in case of monophonic music, you may want to make the second stave invisible, and make the lines shorter like in this snippet.
\score { \new ChoirStaff { \relative c'' << \new Staff { \time 12/8 \stemUp c4. d8 e8 f g4 f8 e8. d16 c8 } \new Staff { % hides staff and notes so that only the grid lines are visible \hideNotes \hide Staff.BarLine \override Staff.StaffSymbol.line-count = #0 \hide Staff.TimeSignature \hide Staff.Clef % dummy notes to force regular note spacing \once \override Score.GridLine.thickness = #4.0 c8 c c \once \override Score.GridLine.thickness = #3.0 c8 c c \once \override Score.GridLine.thickness = #4.0 c8 c c \once \override Score.GridLine.thickness = #3.0 c8 c c } >> } \layout { \context { \Score \consists "Grid_line_span_engraver" % center grid lines horizontally below note heads \override NoteColumn.X-offset = #-0.5 } \context { \Staff \consists "Grid_point_engraver" gridInterval = \musicLength 8 % set line length and positioning: % two staff spaces above center line on hidden staff % to four spaces below center line on visible staff \override GridPoint.Y-extent = #'(2 . -4) } ragged-right = ##t } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Grid lines: emphasizing rhythms and notes synchronization ] | [ Up : Editorial annotations ] | [ Hammer on and pull off using chords > ] |
Hammer on and pull off
Hammer-on and pull-off can be obtained using slurs.
\new TabStaff { \relative c' { d4( e\2) a( g) } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Hammer on and pull off ] | [ Up : Editorial annotations ] | [ Hammer on and pull off using voices > ] |
Hammer on and pull off using chords
When using hammer-on or pull-off with chorded notes, only a single arc
is drawn. However „double arcs“ are possible by setting the
doubleSlurs
property to #t
.
\new TabStaff { \relative c' { % chord hammer-on and pull-off \set doubleSlurs = ##t <g' b>8( <a c> <g b>) } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Hammer on and pull off using chords ] | [ Up : Editorial annotations ] | [ Eine Linie des Notensystems dicker als die anderen machen > ] |
Hammer on and pull off using voices
The arc of hammer-on and pull-off is upwards in voices one and three and downwards in voices two and four:
\new TabStaff { \relative c' { << { \voiceOne g2( a) } \\ { \voiceTwo a,( b) } >> \oneVoice } }
Eine Linie des Notensystems dicker als die anderen machen
Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker
gezeichnet werden (z. B. die Mittellinie, oder um den Schlüssel hervorzuheben).
Das ist möglich, indem man zusätzliche Linien sehr nahe an der Linie, die
dicker erscheinen soll, einfügt. Dazu wird die line-positions
-Eigenschaft
herangezogen.
{ \override Staff.StaffSymbol.line-positions = #'(-4 -2 -0.2 0 0.2 2 4) d'4 e' f' g' }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Eine Linie des Notensystems dicker als die anderen machen ] | [ Up : Editorial annotations ] | [ Measure counter > ] |
Marking notes of spoken parts with a cross on the stem (Sprechstimme)
This example shows how to put crosses on stems. Mark the beginning of
a spoken section with the \speakOn
keyword, and end it with the
\speakOff
keyword.
speakOn = { \override Stem.stencil = #(lambda (grob) (let* ((x-parent (ly:grob-parent grob X)) (is-rest? (ly:grob? (ly:grob-object x-parent 'rest)))) (if is-rest? empty-stencil (ly:stencil-combine-at-edge (ly:stem::print grob) Y (- (ly:grob-property grob 'direction)) (grob-interpret-markup grob (markup #:center-align #:fontsize -4 #:musicglyph "noteheads.s2cross")) -2.3)))) } speakOff = { \revert Stem.stencil \revert Flag.stencil } \score { \new Staff { \relative c'' { a4 b a c \speakOn g4 f r g b4 r d e \speakOff c4 a g f } } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Marking notes of spoken parts with a cross on the stem (Sprechstimme) ] | [ Up : Editorial annotations ] | [ Measure spanner > ] |
Measure counter
This snippet provides a workaround for emitting measure counters using transparent percent repeats.
<< \context Voice = "foo" { \clef bass c4 r g r c4 r g r c4 r g r c4 r g r } \context Voice = "foo" { \set countPercentRepeats = ##t \hide PercentRepeat \override PercentRepeatCounter.staff-padding = #1 \repeat percent 4 { s1 } } >>
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Measure counter ] | [ Up : Editorial annotations ] | [ Numbering groups of measures > ] |
Measure spanner
Measure spanners are an alternate way to print annotated brackets. As opposed to horizontal brackets, they extend between two bar lines rather than two notes. The text is displayed in the center of the bracket.
\paper { tagline = ##f } \layout { \context { \Staff \consists Measure_spanner_engraver } } << \new Staff \relative c'' { \key d \minor R1*2 \tweak text "Answer" \startMeasureSpanner \tuplet 3/2 8 { a16[ b c] d[ c b] c[ d e] f[ e d] } e8 a gis g fis f e d~ d c b e \stopMeasureSpanner } \new Staff \relative c' { \key d \minor \tweak text "Subject" \tweak direction #DOWN \startMeasureSpanner \tuplet 3/2 8 { d16[ e f] g[ f e] f[ g a] bes[ a g] } a8 d cis c b bes a g~ g f e a \stopMeasureSpanner \tweak text "Counter-subject" \tweak direction #DOWN \startMeasureSpanner f8 e a r r16 b, c d e fis g e a gis a b c fis, b a gis e a4 g8 \stopMeasureSpanner } >>
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Measure spanner ] | [ Up : Editorial annotations ] | [ Positioning fingering indications precisely > ] |
Numbering groups of measures
This snippet demonstrates the use of the
Measure_counter_engraver
to number groups of successive
measures. Any stretch of measures may be numbered, whether consisting
of repetitions or not.
The engraver must be added to the appropriate context. Here, a
Staff
context is used; another possibility is a Dynamics
context.
The counter is begun with \startMeasureCount
and ended with
\stopMeasureCount
. Numbering will start by default
with 1, but this behavior may be modified by overriding the
count-from
property.
When a measure extends across a line break, the number will appear twice, the second time in parentheses.
\layout { \context { \Staff \consists #Measure_counter_engraver } } \new Staff { \startMeasureCount \repeat unfold 7 { c'4 d' e' f' } \stopMeasureCount \bar "||" g'4 f' e' d' \override Staff.MeasureCounter.count-from = #2 \startMeasureCount \repeat unfold 5 { g'4 f' e' d' } g'4 f' \bar "" \break e'4 d' \repeat unfold 7 { g'4 f' e' d' } \stopMeasureCount } \paper { tagline = ##f }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Numbering groups of measures ] | [ Up : Editorial annotations ] | [ Textbeschriftung innerhalb von Bögen positionieren > ] |
Positioning fingering indications precisely
Generally the options available for positioning the fingering of chords work well by default, but if one of the indications needs to positioned more precisely the following tweak may be used. This is particularly useful for correcting the positioning when intervals of a second are involved.
\relative c' { \set fingeringOrientations = #'(left) <c-1 d-2 a'-5>4 <c-1 d-\tweak extra-offset #'(0 . 0.2)-2 a'-5>4 \set fingeringOrientations = #'(down) <c-1 d-2 a'-5>4 <c-\tweak extra-offset #'(0 . -1.1)-1 d-\tweak extra-offset #'(-1.2 . -1.8)-2 a'-5>4 \set fingeringOrientations = #'(down right up) <c-1 d-\tweak extra-offset #'(-0.3 . 0)-2 a'-5>4 <c-1 d-\tweak extra-offset #'(-1 . 1.2)-2 a'-5>4 \set fingeringOrientations = #'(up) <c-1 d-\tweak extra-offset #'(0 . 1.1)-2 a'-\tweak extra-offset #'(0 . 1)-5>4 <c-1 d-\tweak extra-offset #'(-1.2 . 1.5)-2 a'-\tweak extra-offset #'(0 . 1.4)-5>4 }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Positioning fingering indications precisely ] | [ Up : Editorial annotations ] | [ Printing text from right to left > ] |
Textbeschriftung innerhalb von Bögen positionieren
Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die
outside-staff-priority
-Eigenschaft auf falsch gesetzt wird.
\relative c'' { \override TextScript.avoid-slur = #'inside \override TextScript.outside-staff-priority = ##f c2(^\markup { \halign #-10 \natural } d4.) c8 }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Textbeschriftung innerhalb von Bögen positionieren ] | [ Up : Editorial annotations ] | [ String number extender lines > ] |
Printing text from right to left
It is possible to print text from right to left in a markup object, as demonstrated here.
{ b1^\markup { \line { i n g i r u m i m u s n o c t e } } f'_\markup { \override #'(text-direction . -1) \line { i n g i r u m i m u s n o c t e } } }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Printing text from right to left ] | [ Up : Editorial annotations ] | [ Using PostScript to generate special note head shapes > ] |
String number extender lines
Make an extender line for string number indications, showing that a series of notes is supposed to be played all on the same string.
stringNumberSpanner = #(define-music-function (StringNumber) (string?) #{ \override TextSpanner.style = #'solid \override TextSpanner.font-size = #-5 \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.text = \markup { \circle \number $StringNumber } #}) \relative c { \clef "treble_8" \stringNumberSpanner "5" \textSpannerDown a8\startTextSpan b c d e f\stopTextSpan \stringNumberSpanner "4" g\startTextSpan a bes4 a g2\stopTextSpan }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < String number extender lines ] | [ Up : Editorial annotations ] | [ Using the whiteout property > ] |
Using PostScript to generate special note head shapes
When a note head with a special shape cannot easily be generated with graphic markup, PostScript code can be used to generate the shape. This example shows how a parallelogram-shaped note head is generated.
%% Updaters remark: %% For unkown reasons this snippet returns a gs-error, but only, if compiled %% with multiple others like: lilypond *.ly %% Thus changing to a path-stencil. %% TODO description needs to get adjusted --harm parallelogram = #(ly:make-stencil '(path 0.1 (rmoveto 0 0.25 lineto 1.3125 0.75 lineto 1.3125 -0.25 lineto 0 -0.75) round round #t) (cons 0 1.3125) (cons -.75 .75)) myNoteHeads = \override NoteHead.stencil = \parallelogram normalNoteHeads = \revert NoteHead.stencil \relative c'' { \myNoteHeads g4 d' \normalNoteHeads <f, \tweak stencil \parallelogram b e>4 d }
[ << Editorial annotations ] | [Top][Contents] | [ Text >> ] |
[ < Using PostScript to generate special note head shapes ] | [ Up : Editorial annotations ] | [ Text > ] |
Using the whiteout property
Any graphical object can be printed over a white background to mask
parts of objects that lie beneath. This can be useful to improve the
appearance of collisions in complex situations when repositioning
objects is impractical. It is necessary to explicitly set the
layer
property to control which objects are masked by the white
background.
In this example the collision of the tie with the time signature is
improved by masking out the part of the tie that crosses the time
signature, setting the whiteout
property of
TimeSignature
. To do this, TimeSignature
is moved to a
layer above Tie
, which is left in the default layer 1, and
StaffSymbol
is moved to a layer above TimeSignature
so it
is not masked.
{ \override Score.StaffSymbol.layer = 4 \override Staff.TimeSignature.layer = 3 b'2 b'~ \once \override Staff.TimeSignature.whiteout = ##t \time 3/4 b' r4 }
[ << Editorial annotations ] | [Top][Contents] | [ Vocal music >> ] |
[ < Using the whiteout property ] | [ Up : Top ] | [ [OBSOLETE] Adding a QR code > ] |
Text
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Text ] | [ Up : Text ] | [ Adding markups in a tablature > ] |
[OBSOLETE] Adding a QR code
This snippet lets you draw a QR-code, for example to provide a link to the composer’s, or the music editor’s website.
Actually encoding the URL into a QR-code is not done here (this just draws the QR-code from a grid of "black" or "white" values), but see the code for a short Python snippet you can use to avoid having to fill for each small square if it’s black or white.
This snippet is obsolete starting from LilyPond 2.25.3, which
adds a \qr-code
markup command that takes a URL directly
instead of a grid of "black" and "white" values. It is used like
\markup \qr-code #10 "https://lilypond.org"
.
%% Original thread: https://lists.gnu.org/archive/html/lilypond-user-fr/2022-07/msg00005.html %% (snippet author: Jean Abou Samra <jean@abou-samra.fr>) \paper { tagline = ##f } #(define (index-map f . lsts) "Applies @code{f} to corresponding elements of @code{lists}, just as @code{map}, providing an additional counter starting at zero. @code{f} needs to have the counter in its arguments like @code{(index-map (lambda (i arg) <body>) lists)}" (let loop ((lsts lsts) (acc '()) (i 0)) (if (any null? lsts) (reverse! acc) (loop (map cdr lsts) (cons (apply f i (map car lsts)) acc) (1+ i))))) #(define-markup-command (qr-code layout props data) (string?) #:properties ((width 10)) (let* (;; Return lines in reversed order, since translating in Y-axis ;; uses increasing values. Meaning lines will be stacked upwards. (lines (reverse (remove string-null? (map string-trim-both (string-split data #\newline))))) (n (length lines)) (square-width (/ width n)) (box (make-filled-box-stencil `(0 . ,square-width) `(0 . ,square-width)))) ;; Build the final qr-code-stencil from line-stencils list (apply ly:stencil-add ;; Get a list of line-stencils (index-map (lambda (i line) ;; Build a line-stencil from square-stencils list (apply ly:stencil-add ;; Get a list of (already translated) square-stencils ;; per line (index-map (lambda (j char) (ly:stencil-translate (stencil-with-color box (case char ((#\0) white) ((#\1) black) (else (ly:warning "unrecognized character ~a, should be 0 or 1" char) red))) (cons (* j square-width) (* i square-width)))) (string->list line)))) lines)))) %{ A string representation of the QR code. 0 means white, 1 means black. You can generate this automatically using Python and the pyqrcode module ("pip install pyqrcode"). Use this line of code in a Python prompt: >>> import pyqrcode; print(pyqrcode.create("https://lilypond.org").text(quiet_zone=0)) %} lilypondDotOrg = "11111110011100011110101111111 10000010010000010111101000001 10111010010110001000101011101 10111010001010111101001011101 10111010110100000111001011101 10000010011100011001101000001 11111110101010101010101111111 00000000111000111110100000000 00110011101100001000111010000 10101001111000001000001111101 00110111010100000110001011010 01010001100110010111000110001 01111011110010011110010100111 01111101001101010001001101101 01111011000001000011001111011 11001001001011001000111011010 11100110111011011001110111000 00001100010001001011100100100 10111111011001010011001000100 00001100001000101011011011100 01010010000011000000111111111 00000000110011100010100011001 11111110101001101011101010110 10000010000110111110100010011 10111010011010111100111111111 10111010110001101111000011110 10111010100101101010100101001 10000010001001000100000010010 11111110010100110010111100010" \markup \qr-code \lilypondDotOrg \markup \vspace #5 \markup \override #'(width . 15) \qr-code \lilypondDotOrg
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < [OBSOLETE] Adding a QR code ] | [ Up : Text ] | [ Adding the current date to a score > ] |
Adding markups in a tablature
By default markups does not show in a tablature.
To make them appear, simply use the command
\revert TabStaff.TextScript.stencil
%% http://lsr.di.unimi.it/LSR/Item?id=919 % by P.P.Schneider on June 2014 high = { r4 r8 <g c'> q r8 r4 } low = { c4 r4 c8 r8 g,8 b, } pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" } \score { \new TabStaff { \repeat unfold 2 << \high \\ \low \\ \pulse >> } \layout { \context { \TabStaff \clef moderntab \revert TextScript.stencil \override TextScript.font-series = #'bold \override TextScript.font-size = #-2 \override TextScript.color = #red } \context { \Score proportionalNotationDuration = \musicLength 8 } } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Adding markups in a tablature ] | [ Up : Text ] | [ Adjusting lyrics vertical spacing > ] |
Adding the current date to a score
With a little Scheme code, the current date can easily be added to a score.
\paper { tagline = ##f } % first, define a variable to hold the formatted date: date = #(strftime "%d-%m-%Y" (localtime (current-time))) % use it in the title block: \header { title = "Including the date!" subtitle = \date } \score { \relative c'' { c4 c c c } } % and use it in a \markup block: \markup { \date }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Adding the current date to a score ] | [ Up : Text ] | [ Aligning and centering instrument names > ] |
Adjusting lyrics vertical spacing
This snippet shows how to bring the lyrics line closer to the staff.
% Default layout: << \new Staff \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } \new Staff { \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } } % Reducing the minimum space below the staff and above the lyrics: \new Lyrics \with { \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) } \lyricsto melody { aa aa aa aa aa aa aa aa aa } >>
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Adjusting lyrics vertical spacing ] | [ Up : Text ] | [ Aligning syllables with melisma > ] |
Aligning and centering instrument names
The horizontal alignment of instrument names is tweaked by changing the
Staff.InstrumentName.self-alignment-X
property. The
\layout
variables indent
and short-indent
define
the space in which the instrument names are aligned before the first
and the following systems, respectively.
\paper { left-margin = 3\cm } \score { \new StaffGroup << \new Staff \with { \override InstrumentName.self-alignment-X = #LEFT instrumentName = \markup \left-column { "Left aligned" "instrument name" } shortInstrumentName = "Left" } { c''1 \break c''1 } \new Staff \with { \override InstrumentName.self-alignment-X = #CENTER instrumentName = \markup \center-column { Centered "instrument name" } shortInstrumentName = "Centered" } { g'1 g'1} \new Staff \with { \override InstrumentName.self-alignment-X = #RIGHT instrumentName = \markup \right-column { "Right aligned" "instrument name" } shortInstrumentName = "Right" } { e'1 e'1 } >> \layout { ragged-right = ##t indent = 4\cm short-indent = 2\cm } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Aligning and centering instrument names ] | [ Up : Text ] | [ Blanking staff lines using the \whiteout command > ] |
Aligning syllables with melisma
By default, lyrics syllables that start a melisma are left aligned on
their note. The alignment can be altered using the
lyricMelismaAlignment
property.
\score { << \new Staff { \relative c'' \new Voice = "vocal" { c d~^\markup default d e c d~^\markup "right aligned" d e c d~^\markup "center aligned" d e c d~^\markup "reset to default" d e } } \new Lyrics \lyricsto "vocal" { word word word \set lyricMelismaAlignment = #RIGHT word word word \set lyricMelismaAlignment = #CENTER word word word \unset lyricMelismaAlignment word word word } >> }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Aligning syllables with melisma ] | [ Up : Text ] | [ Center text below hairpin dynamics > ] |
Blanking staff lines using the \whiteout command
The \whiteout
command underlays a markup with a white
box. Since staff lines are in a lower layer than most other grobs,
this white box will not overlap any other grob.
\layout { ragged-right = ##f } \relative c' { \override TextScript.extra-offset = #'(2 . 4) c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Blanking staff lines using the \whiteout command ] | [ Up : Text ] | [ Changing ottava text > ] |
Center text below hairpin dynamics
This example provides a function to typeset a hairpin (de)crescendo with some additional text below it, such as „molto“ or „poco“. The added text will change the direction according to the direction of the hairpin. The Hairpin is aligned to DynamicText.
The example also illustrates how to modify the way an object is normally printed, using some Scheme code.
\paper { tagline = ##f } hairpinWithCenteredText = #(define-music-function (text) (markup?) #{ \once \override Voice.Hairpin.after-line-breaking = #(lambda (grob) (let* ((stencil (ly:hairpin::print grob)) (par-y (ly:grob-parent grob Y)) (dir (ly:grob-property par-y 'direction)) (staff-line-thickness (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness)) (new-stencil (ly:stencil-aligned-to (ly:stencil-combine-at-edge (ly:stencil-aligned-to stencil X CENTER) Y dir (ly:stencil-aligned-to (grob-interpret-markup grob (make-fontsize-markup (magnification->font-size (+ (ly:staff-symbol-staff-space grob) (/ staff-line-thickness 2))) text)) X CENTER)) X LEFT)) (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space)) (par-x (ly:grob-parent grob X)) (dyn-text (grob::has-interface par-x 'dynamic-text-interface)) (dyn-text-stencil-x-length (if dyn-text (interval-length (ly:stencil-extent (ly:grob-property par-x 'stencil) X)) 0)) (x-shift (if dyn-text (- (+ staff-space dyn-text-stencil-x-length) (* 0.5 staff-line-thickness)) 0))) (ly:grob-set-property! grob 'Y-offset 0) (ly:grob-set-property! grob 'stencil (ly:stencil-translate-axis new-stencil x-shift X)))) #}) hairpinMolto = \hairpinWithCenteredText \markup { \italic molto } hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo } \layout { ragged-right = ##f } \relative c' { \hairpinMolto c2\< c\f \hairpinMore c2\ppppp\< c\f \break \hairpinMolto c2^\< c\f \hairpinMore c2\ppppp\< c\f }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Center text below hairpin dynamics ] | [ Up : Text ] | [ Changing the default text font family > ] |
Changing ottava text
Internally, \ottava
sets the properties ottavation
(for
example, to 8va
or 8vb
) and middleCPosition
. To
override the text of the bracket, set ottavation
after invoking
\ottava
.
Short text is especially useful when a brief ottava is used.
{ c'2 \ottava 1 \set Staff.ottavation = "8" c''2 \ottava 0 c'1 \ottava 1 \set Staff.ottavation = "Text" c''1 }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Changing ottava text ] | [ Up : Text ] | [ Combining dynamics with markup texts > ] |
Changing the default text font family
The default font families for text can be overridden.
%{ You may have to install additional fonts. Red Hat Fedora dejavu-fonts-all Debian GNU/Linux, Ubuntu fonts-dejavu-core fonts-dejavu-extra %} \paper { %{ run lilypond -dshow-available-fonts to show all fonts available in the process log. %} property-defaults.fonts.serif = "DejaVu Serif" property-defaults.fonts.sans = "DejaVu Sans" property-defaults.fonts.typewriter = "DejaVu Sans Mono" } { g'''4^\markup { DejaVu Serif: \bold bold \italic italic \italic \bold { bold italic } } g4_\markup { \override #'(font-family . sans) { DejaVu Sans: \bold bold \italic italic \italic \bold { bold italic } } } g''2^\markup { \override #'(font-family . typewriter) { DejaVu Sans Mono: \bold bold \italic italic \italic \bold { bold italic } } } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Changing the default text font family ] | [ Up : Text ] | [ Zwei Stimmen auf einem System kombinieren > ] |
Combining dynamics with markup texts
Some dynamics may involve text indications (such as „più forte“ or
„piano subito“). These can be produced using a \markup
block.
piuF = \markup { \italic più \dynamic f } \layout { ragged-right = ##f } \relative c'' { c2\f c-\piuF }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Combining dynamics with markup texts ] | [ Up : Text ] | [ Creating "real" parenthesized dynamics > ] |
Zwei Stimmen auf einem System kombinieren
Die Funktion, die Stimmen kombiniert (also der \partCombine
-Befehl)
ermöglicht die Kombination unterschiedlicher Stimmen auf einem
System. Textanweisungen wie "solo" oder "a2" werden automatisch
hinzugefügt. Wenn man sie entfernen will, muss man die Eigenschaft
printPartCombineTexts
auf falsch setzen. Für Klavierauszüge
muss natürlich kein "solo"/"a2" usw. hinzugefügt werden, man
sollte sie also ausschalten. Wenn aber Solo-Stellen in einem
Klavierauszug oder einer Chorpartitur angezeigt werden, ist es besser,
normale Polyphonie zu verwenden, weil so die Solostellen angezeigt
werden, auch wenn der Text des Stimmenkombinierers ausgeschaltet ist.
Der Schnipsel zeigt drei Möglichkeiten, Stimmen auf einem System zu
kombinieren: Standardpolyphonie, \partCombine
ohne Text und
\partCombine
mit Text.
musicUp = \relative c'' { \time 4/4 a4 c4.( g8) a4 | g4 e' g,( a8 b) | c b a2. } musicDown = \relative c'' { g4 e4.( d8) c4 | r2 g'4( f8 e) | d2 \stemDown a } \score { << \new Staff \with { instrumentName = "standard polyphony" } << \musicUp \\ \musicDown >> \new Staff \with { instrumentName = \markup { \typewriter "\\partCombine" without text} printPartCombineTexts = ##f } \partCombine \musicUp \musicDown \new Staff \with { instrumentName = \markup { \typewriter "\\partCombine" with text} } \partCombine \musicUp \musicDown >> \layout { indent = 6.0\cm \context { \Score % Setting this to a large value avoids a bar line at the % beginning that would connect the three staves otherwise. \override SystemStartBar.collapse-height = 30 } } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Zwei Stimmen auf einem System kombinieren ] | [ Up : Text ] | [ Creating text spanners > ] |
Creating "real" parenthesized dynamics
Although the easiest way to add parentheses to a dynamic mark is to use
a \markup
block, this method has a downside: the created
objects will behave like text markups, and not like dynamics.
However, it is possible to create a similar object using the equivalent
Scheme code (as described in the Notation Reference), combined with the
make-dynamic-script
function. This way, the markup will be
regarded as a dynamic, and therefore will remain compatible with
commands such as \dynamicUp
or \dynamicDown
.
paren = #(define-event-function (dyn) (ly:event?) (make-dynamic-script #{ \markup \concat { \normal-text \italic \fontsize #2 ( \pad-x #0.2 #(ly:music-property dyn 'text) \normal-text \italic \fontsize #2 ) } #})) \relative c'' { c4\paren\f c c \dynamicUp c\paren\p }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Creating "real" parenthesized dynamics ] | [ Up : Text ] | [ Demonstrating all headers > ] |
Creating text spanners
The \startTextSpan
and \stopTextSpan
commands allow the
creation of text spanners as easily as pedal indications or
octavations. Override some properties of the TextSpanner
object
to modify its output.
\paper { ragged-right = ##f } \relative c'' { \override TextSpanner.bound-details.left.text = #"bla" \override TextSpanner.bound-details.right.text = #"blu" a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'line \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'dashed-line \override TextSpanner.bound-details.left.text = \markup { \draw-line #'(0 . 1) } \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -2) } \once \override TextSpanner.bound-details.right.padding = #-2 a4 \startTextSpan b4 c a4 \stopTextSpan \set Staff.middleCPosition = #-13 \override TextSpanner.dash-period = #10 \override TextSpanner.dash-fraction = #0.5 \override TextSpanner.thickness = #10 a4 \startTextSpan b4 c a4 \stopTextSpan }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Creating text spanners ] | [ Up : Text ] | [ Embedding native PostScript in a \markup block > ] |
Demonstrating all headers
All header fields with special meanings.
\header { copyright = "copyright" title = "title" subtitle = "subtitle" composer = "composer" arranger = "arranger" instrument = "instrument" meter = "meter" opus = "opus" piece = "piece" poet = "poet" texidoc = "All header fields with special meanings." copyright = "public domain" enteredby = "jcn" source = "urtext" } \layout { ragged-right = ##f } \score { \relative c'' { c1 | c | c | c } } \score { \relative c'' { c1 | c | c | c } \header { title = "localtitle" subtitle = "localsubtitle" composer = "localcomposer" arranger = "localarranger" instrument = "localinstrument" metre = "localmetre" opus = "localopus" piece = "localpiece" poet = "localpoet" copyright = "localcopyright" } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Demonstrating all headers ] | [ Up : Text ] | [ Silben im Gesangstext formatieren > ] |
Embedding native PostScript in a \markup block
PostScript code can be directly inserted inside a \markup
block.
% PostScript is a registered trademark of Adobe Systems Inc. \relative c'' { a4-\markup { \postscript "3 4 moveto 5 3 rlineto stroke" } -\markup { \postscript "[ 0 1 ] 0 setdash 3 5 moveto 5 -3 rlineto stroke " } b4-\markup { \postscript "3 4 moveto 0 0 1 2 8 4 20 3.5 rcurveto stroke" } s2 a'1 }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Embedding native PostScript in a \markup block ] | [ Up : Text ] | [ How to put ties between syllables in lyrics > ] |
Silben im Gesangstext formatieren
Textbeschriftungsmodus kann eingesetzt werden, um individuelle Silben im Gesangstext zu formatieren.
mel = \relative c'' { c4 c c c c1 } lyr = \lyricmode { Your lyrics \markup { \italic can } \markup { \with-color #red contain } \markup { \fontsize #8 \bold Markup! } } << \new Voice = melody \mel \new Lyrics \lyricsto melody \lyr >>
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Silben im Gesangstext formatieren ] | [ Up : Text ] | [ Ausrichtung von Gesangstext > ] |
How to put ties between syllables in lyrics
This can be achieved by separating those syllables by tildes.
\lyrics { wa~o~a }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < How to put ties between syllables in lyrics ] | [ Up : Text ] | [ Markup list > ] |
Ausrichtung von Gesangstext
Die horizontale Ausrichtung von Gesangstext kann eingestellt werden, indem
man die self-alignment-X
-Eigenschaft des LyricText
-Objekts
verändert. #-1
bedeutet links, #0
bedeutet mittig und #1
bedeutet rechts, man kann aber genauso gut auch #LEFT
, #CENTER
und #RIGHT
benutzen.
\layout { ragged-right = ##f } \relative c'' { c1 c1 c1 } \addlyrics { \once \override LyricText.self-alignment-X = #LEFT "This is left-aligned" \once \override LyricText.self-alignment-X = #CENTER "This is centered" \once \override LyricText.self-alignment-X = 1 "This is right-aligned" }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Ausrichtung von Gesangstext ] | [ Up : Text ] | [ Textbeschriftung und Mehrtaktpausen > ] |
Markup list
Text that can spread over pages is entered with the \markuplist
command.
%% updated/modified by P.P.Schneider on Feb. 2014 \paper { tagline = ##f } #(set-default-paper-size "a6") #(define-markup-list-command (paragraph layout props args) (markup-list?) (interpret-markup-list layout props (make-justified-lines-markup-list (cons (make-hspace-markup 2) args)))) % Candide, Voltaire \markuplist { \override-lines #'(baseline-skip . 2.5) { \paragraph { Il y avait en Westphalie, dans le château de M. le baron de Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné les mœurs les plus douces. Sa physionomie annonçait son âme. Il avait le jugement assez droit, avec l'esprit le plus \concat { simple \hspace #.3 ; } c'est, je crois, pour cette raison qu'on le nommait Candide. Les anciens domestiques de la maison soupçonnaient qu'il était fils de la sœur de monsieur le baron et d'un bon et honnête gentilhomme du voisinage, que cette demoiselle ne voulut jamais épouser parce qu'il n'avait pu prouver que soixante et onze quartiers, et que le reste de son arbre généalogique avait été perdu par l'injure du temps. } \vspace #.3 \paragraph { Monsieur le baron était un des plus puissants seigneurs de la Westphalie, car son château avait une porte et des fenêtres. Sa grande salle même était ornée d'une tapisserie. Tous les chiens de ses basses-cours composaient une meute dans le \concat { besoin \hspace #.3 ; } ses palefreniers étaient ses \concat { piqueurs \hspace #.3 ; } le vicaire du village était son grand-aumônier. Ils l'appelaient tous monseigneur, et ils riaient quand il faisait des contes. } } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Markup list ] | [ Up : Text ] | [ Of the ubiquity of markup objects > ] |
Textbeschriftung und Mehrtaktpausen
Textbeschriftungen, die an Mehrtaktpausen gehängt wird, wird über oder unter der Pause zentriert. Lange Beschriftungen lassen den Takt nicht breiter werden. Um eine Mehrtaktpause einer Beschriftung anzupassen, muss eine unsichtbare Pause mit der Beschriftung direkt vor der Mehrtaktpause eingesetzt werden.
Man sollte beachten, dass unsichtbare Pausen automatische Taktstriche nach sich ziehen. Text, der an eine unsichtbare Pause gehängt wird, ist links ausgerichtet an der Position, wo die Pause erscheinen würde. Wenn aber die Länge des Taktes durch die Länge des Textes bestimmt wird, sieht es so aus, als ob der Text zentriert gesetzt ist.
\relative c' { \compressMMRests { \textLengthOn <>^\markup { [MAJOR GENERAL] } R1*19 <>_\markup { \italic { Cue: ... it is yours } } <>^\markup { A } R1*30^\markup { [MABEL] } \textLengthOff c4^\markup { CHORUS } d f c } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Textbeschriftung und Mehrtaktpausen ] | [ Up : Text ] | [ Outputting the version number > ] |
Of the ubiquity of markup objects
Text objects are entered either as simple strings between double quotes
or as \markup
blocks that can accept a variety of advanced text
formatting and graphical enhancements.
As such, markup blocks may be used:
- in any
TextScript
object (attached to notes with-
,^
or_
), - any
TextMark
introduced with the\textMark
keyword, or\textEndMark
command, or other similar objects such as MetronomeMark introduced with\tempo
, - as standalone markup blocks, entered at the top level outside of any
\score
block, - in any definition inside the
\header
block (e.g. title, subtitle, composer) or in some variables defined inside the\paper
block such asevenHeaderMarkup
for page numbers.
\markup
may additionally be used for lyrics, in chord names,
and as dynamics. In fact, it is possible to use \markup
to
customize the appearance of virtually any object, as demonstrated in
this example using various methods.
%% Thanks to Aaron Hill https://lists.gnu.org/archive/html/lilypond-user/2019-01/msg00437.html \paper { paper-width = 8\cm paper-height = 8\cm } \header { title = \markup "Header" tagline = \markup "(tagline)" } \markup "Top-level markup" dyn = #(make-dynamic-script #{ \markup \serif "DynamicText" #}) \score { << \new ChordNames \with { majorSevenSymbol = \markup "majorSevenSymbol" } \chordmode { c1:maj7 } \new Staff { \tempo \markup "MetronomeMark" \textMark "TextMark" \once \override TupletNumber.text = \markup "TupletNumber" \tuplet 3/2 { \once \override NoteHead.stencil = #ly:text-interface::print \once \override NoteHead.text = \markup \lower #0.5 "NoteHead" c''8^\markup "TextScript" \once \override Rest.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup "Rest" #})) r4 } } \new Lyrics \lyricmode { \markup "LyricText" 1 } \new Dynamics { s1\dyn } >> }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Of the ubiquity of markup objects ] | [ Up : Text ] | [ Piano template with centered lyrics > ] |
Outputting the version number
It is possible to print the version number of LilyPond in markup.
\markup { Processed with LilyPond version #(lilypond-version) }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Outputting the version number ] | [ Up : Text ] | [ Printing bar numbers with changing regular intervals > ] |
Piano template with centered lyrics
Anstatt ein eigenes System für Melodie und Text zu schreiben, können Sie den Text auch zwischen die beiden Klaviersysteme schreiben (und damit das zusätzliche System für die Gesangstimme auslassen).
upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } text = \lyricmode { Aaa Bee Cee Dee } \score { \new PianoStaff << \new Staff = upper { \new Voice = "singer" \upper } \new Lyrics \lyricsto "singer" \text \new Staff = lower { \lower } >> \layout { } \midi { } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Piano template with centered lyrics ] | [ Up : Text ] | [ Zeichen über jedem System ausgeben > ] |
Printing bar numbers with changing regular intervals
Using the set-bar-number-visibility
context function, bar number
intervals can be changed.
\relative c' { \override Score.BarNumber.break-visibility = #end-of-line-invisible \context Score \applyContext #(set-bar-number-visibility 4) \repeat unfold 10 c'1 \context Score \applyContext #(set-bar-number-visibility 2) \repeat unfold 10 c } \paper { tagline = ##f }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Printing bar numbers with changing regular intervals ] | [ Up : Text ] | [ Printing text from right to left > ] |
Zeichen über jedem System ausgeben
Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie können aber auch über jedem System ausgegeben werden.
\score { << \new Staff { \mark \default c''1 \textMark "molto" c'' } \new Staff { \mark \default c'1 \textMark "molto" c' } >> \layout { \context { \Score \remove Mark_engraver \remove Text_mark_engraver \remove Staff_collecting_engraver } \context { \Staff \consists Mark_engraver \consists Text_mark_engraver \consists Staff_collecting_engraver } } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Zeichen über jedem System ausgeben ] | [ Up : Text ] | [ Putting lyrics inside the staff > ] |
Printing text from right to left
It is possible to print text from right to left in a markup object, as demonstrated here.
{ b1^\markup { \line { i n g i r u m i m u s n o c t e } } f'_\markup { \override #'(text-direction . -1) \line { i n g i r u m i m u s n o c t e } } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Printing text from right to left ] | [ Up : Text ] | [ Isolierter Text in zwei Spalten > ] |
Putting lyrics inside the staff
Lyrics can be moved vertically to place them inside the staff. The
lyrics are moved with
\override LyricText.extra-offset = #'(0 . dy)
and
there are similar commands to move the extenders and hyphens. The
offset needed is established with trial and error.
<< \new Staff << \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 } >> \new Lyrics \with { \override LyricText.extra-offset = #'(0 . 8.6) \override LyricExtender.extra-offset = #'(0 . 8.6) \override LyricHyphen.extra-offset = #'(0 . 8.6) } \lyricsto "voc" { La la -- la __ _ la } >>
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Putting lyrics inside the staff ] | [ Up : Text ] | [ String number extender lines > ] |
Isolierter Text in zwei Spalten
Isolierter Text kann in mehreren Spalten mit \markup
-Befehlen
angeordnet werden:
\markup { \fill-line { \hspace #1 \column { \line { O sacrum convivium } \line { in quo Christus sumitur, } \line { recolitur memoria passionis ejus, } \line { mens impletur gratia, } \line { futurae gloriae nobis pignus datur. } \line { Amen. } } \hspace #2 \column \italic { \line { O sacred feast } \line { in which Christ is received, } \line { the memory of His Passion is renewed, } \line { the mind is filled with grace, } \line { and a pledge of future glory is given to us. } \line { Amen. } } \hspace #1 } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Isolierter Text in zwei Spalten ] | [ Up : Text ] | [ Three-sided box > ] |
String number extender lines
Make an extender line for string number indications, showing that a series of notes is supposed to be played all on the same string.
stringNumberSpanner = #(define-music-function (StringNumber) (string?) #{ \override TextSpanner.style = #'solid \override TextSpanner.font-size = #-5 \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.text = \markup { \circle \number $StringNumber } #}) \relative c { \clef "treble_8" \stringNumberSpanner "5" \textSpannerDown a8\startTextSpan b c d e f\stopTextSpan \stringNumberSpanner "4" g\startTextSpan a bes4 a g2\stopTextSpan }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < String number extender lines ] | [ Up : Text ] | [ UTF-8 > ] |
Three-sided box
This example shows how to add a markup command to get a three sided box around some text (or other markup).
% New command to add a three sided box, with sides north, west and south % Based on the box-stencil command defined in scm/stencil.scm % Note that ";;" is used to comment a line in Scheme #(define-public (NWS-box-stencil stencil thickness padding) "Add a box around STENCIL, producing a new stencil." (let* ((x-ext (interval-widen (ly:stencil-extent stencil X) padding)) (y-ext (interval-widen (ly:stencil-extent stencil Y) padding)) (y-rule (make-filled-box-stencil (cons 0 thickness) y-ext)) (x-rule (make-filled-box-stencil (interval-widen x-ext thickness) (cons 0 thickness)))) ;; (set! stencil (ly:stencil-combine-at-edge stencil X 1 y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil X LEFT y-rule padding)) (set! stencil (ly:stencil-combine-at-edge stencil Y UP x-rule 0.0)) (set! stencil (ly:stencil-combine-at-edge stencil Y DOWN x-rule 0.0)) stencil)) % The corresponding markup command, based on the \box command defined % in scm/define-markup-commands.scm #(define-markup-command (NWS-box layout props arg) (markup?) #:properties ((thickness 0.1) (font-size 0) (box-padding 0.2)) "Draw a box round @var{arg}. Looks at @code{thickness}, @code{box-padding} and @code{font-size} properties to determine line thickness and padding around the markup." (let ((pad (* (magstep font-size) box-padding)) (m (interpret-markup layout props arg))) (NWS-box-stencil m thickness pad))) % Test it: \relative c' { c1^\markup { \NWS-box ABCD } c1^\markup { \NWS-box \note {4} #1.0 } }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Three-sided box ] | [ Up : Text ] | [ Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System > ] |
UTF-8
Various scripts may be used for texts (like titles and lyrics) by entering them in UTF-8 encoding, and using a Pango based backend. Depending on the fonts installed, this fragment will render Bulgarian (Cyrillic), Hebrew, Japanese and Portuguese.
%{ You may have to install additional fonts. Red Hat Fedora linux-libertine-fonts (Latin, Cyrillic, Hebrew) google-noto-serif-jp-fonts (Japanese) Debian GNU/Linux, Ubuntu fonts-linuxlibertine (Latin, Cyrillic, Hebrew) fonts-noto-cjk (Japanese) %} % 'Linux Libertine' fonts also contain Cyrillic and Hebrew glyphs. \paper { property-defaults.fonts.serif = "Linux Libertine O, Noto Serif CJK JP, Noto Serif JP" } bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } japanese = \lyricmode { いろはにほへど ちりぬるを わがよたれぞ つねならむ うゐのおくや まけふこえて あさきゆめみじ ゑひもせず } % "a nice song for you" portuguese = \lyricmode { à vo -- cê uma can -- ção le -- gal } \relative c' { c2 d e2 f g2 f e2 d } \addlyrics { \bulgarian } \addlyrics { \hebrew } \addlyrics { \japanese } \addlyrics { \portuguese }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < UTF-8 ] | [ Up : Text ] | [ Volta text markup using repeatCommands > ] |
Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
In diesem Beispiel werden die Texte mit den Befehlen
alignAboveContext
und alignBelowContext
über und unter dem System angeordnet.
global = { \key c \major \time 4/4 } sopMusic = \relative c'' { c4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative c' { e4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative c' { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative c { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics \with { alignAboveContext = "women" } \lyricsto "sopranos" \sopWords \new Lyrics \with { alignBelowContext = "women" } \lyricsto "altos" \altoWords % we could remove the line about this with the line below, since % we want the alto lyrics to be below the alto Voice anyway. % \new Lyrics \lyricsto "altos" \altoWords \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics \with { alignAboveContext = "men" } \lyricsto "tenors" \tenorWords \new Lyrics \with { alignBelowContext = "men" } \lyricsto "basses" \bassWords % again, we could replace the line above this with the line below. % \new Lyrics \lyricsto "basses" \bassWords >> }
[ << Text ] | [Top][Contents] | [ Vocal music >> ] |
[ < Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System ] | [ Up : Text ] | [ Vocal music > ] |
Volta text markup using repeatCommands
Though volte are best specified using \repeat volta
, the
context property repeatCommands
must be used in cases where the
volta text needs more advanced formatting with \markup
.
Since repeatCommands
takes a list, the simplest method of
including markup is to use an identifier for the text and embed it in
the command list using the Scheme syntax
#(list (list 'volta textIdentifier))
. Start- and end-repeat
commands can be added as separate list elements:
voltaAdLib = \markup { \volta-number { 1. 2. 3... } \italic { ad lib. } } \relative c'' { c1 \set Score.repeatCommands = #(list (list 'volta voltaAdLib) 'start-repeat) c4 b d e \set Score.repeatCommands = #'((volta #f) (volta "4.") end-repeat) f1 \set Score.repeatCommands = #'((volta #f)) }
[ << Text ] | [Top][Contents] | [ Chords >> ] |
[ < Volta text markup using repeatCommands ] | [ Up : Top ] | [ Ambitus pro Stimme hinzufügen > ] |
Vocal music
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vocal music ] | [ Up : Vocal music ] | [ Adding indicators to staves which get split after a break > ] |
Ambitus pro Stimme hinzufügen
Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie manuell verschoben werden, um Zusammenstöße zu verhindern.
\new Staff << \new Voice \with { \consists "Ambitus_engraver" } \relative c'' { \override Ambitus.X-offset = 2.0 \voiceOne c4 a d e f1 } \new Voice \with { \consists "Ambitus_engraver" } \relative c' { \voiceTwo es4 f g as b1 } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Ambitus pro Stimme hinzufügen ] | [ Up : Vocal music ] | [ Orchesterstichnoten zu einem Klavierauszug hinzufügen > ] |
Adding indicators to staves which get split after a break
This snippet defines the commands \splitStaffBarLine
,
\convUpStaffBarLine
, and \convDownStaffBarLine
. These
add arrows at a bar line to denote that several voices sharing a staff
will each continue on a staff of their own in the next system, or that
voices split in this way recombine.
#(define-markup-command (arrow-at-angle layout props angle-deg length fill) (number? number? boolean?) (let* ( (PI-OVER-180 (/ (atan 1 1) 34)) (degrees->radians (lambda (degrees) (* degrees PI-OVER-180))) (angle-rad (degrees->radians angle-deg)) (target-x (* length (cos angle-rad))) (target-y (* length (sin angle-rad)))) (interpret-markup layout props (markup #:translate (cons (/ target-x 2) (/ target-y 2)) #:rotate angle-deg #:translate (cons (/ length -2) 0) #:concat (#:draw-line (cons length 0) #:arrow-head X RIGHT fill))))) splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) { \combine \arrow-at-angle #45 #(sqrt 8) ##t \arrow-at-angle #-45 #(sqrt 8) ##t } splitStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob splitStaffBarLineMarkup) 0)) \break } convDownStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions #'(0 . 0) #'(0 . 0) { \translate #'(0 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t }#}) 0)) \break } convUpStaffBarLine = { \once \override Staff.BarLine.stencil = #(lambda (grob) (ly:stencil-combine-at-edge (ly:bar-line::print grob) X RIGHT (grob-interpret-markup grob #{ \markup\with-dimensions #'(0 . 0) #'(0 . 0) { \translate #'(0 . .14)\arrow-at-angle #45 #(sqrt 8) ##t }#}) 0)) \break } \header { tagline = ##f } \paper { ragged-right = ##t short-indent = 10\mm } separateSopranos = { \set Staff.instrumentName = "AI AII" \set Staff.shortInstrumentName = "AI AII" \splitStaffBarLine \change Staff = "up" } convSopranos = { \convDownStaffBarLine \change Staff = "shared" \set Staff.instrumentName = "S A" \set Staff.shortInstrumentName = "S A" } sI = { \voiceOne \repeat unfold 4 f''2 \separateSopranos \repeat unfold 4 g''2 \convSopranos \repeat unfold 4 c''2 } sII = { s1*2 \voiceTwo \change Staff = "up" \repeat unfold 4 d''2 } aI = { \voiceTwo \repeat unfold 4 a'2 \voiceOne \repeat unfold 4 b'2 \convUpStaffBarLine \voiceTwo \repeat unfold 4 g'2 } aII = { s1*2 \voiceTwo \repeat unfold 4 g'2 } ten = { \voiceOne \repeat unfold 4 c'2 \repeat unfold 4 d'2 \repeat unfold 4 c'2 } bas = { \voiceTwo \repeat unfold 4 f2 \repeat unfold 4 g2 \repeat unfold 4 c2 } \score { << \new ChoirStaff << \new Staff = up \with { instrumentName = "SI SII" shortInstrumentName = "SI SII" } { s1*4 } \new Staff = shared \with { instrumentName = "S A" shortInstrumentName = "S A" } << \new Voice = sopI \sI \new Voice = sopII \sII \new Voice = altI \aI \new Voice = altII \aII >> \new Lyrics \with { alignBelowContext = up } \lyricsto sopII { e f g h } \new Lyrics \lyricsto altI { a b c d e f g h i j k l } \new Staff = men \with { instrumentName = "T B" shortInstrumentName = "T B" } << \clef F \new Voice = ten \ten \new Voice = bas \bas >> \new Lyrics \lyricsto bas { a b c d e f g h i j k l } >> >> \layout { \context { \Staff \RemoveEmptyStaves \override VerticalAxisGroup.remove-first = ##t } } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Adding indicators to staves which get split after a break ] | [ Up : Vocal music ] | [ Adjusting lyrics vertical spacing > ] |
Orchesterstichnoten zu einem Klavierauszug hinzufügen
Hier wird gezeigt, wie man das Hinzufügen von vielen Orchsterstichnoten
zu einem Klavierauszug hinzufügen kann. Die musikalische Funktion
\cueWhile
braucht vier Argumente: Die Noten, von denen die
Stichnoten formatiert werden sollen, definiert durch \addQuote
,
die Bezeichnung, die mit den Noten angegeben werden soll, dann entweder
#UP
(hoch) oder #DOWN
(runter) zur Angabe von entweder
\voiceOne
mit der Bezeichnung über dem System oder \voiceTwo
mit der Bezeichnung unter dem System, und schließlich die Klaviermusik,
die parallel zu den Stichnoten gespielt werden soll. Die Bezeichnung des
Stichnoteninstruments wird links der Stichnoten positioniert. Viele
Abschnitte können zitiert werden, aber sie dürfen sich nicht überlappen.
cueWhile = #(define-music-function (instrument name dir music) (string? string? ly:dir? ly:music?) #{ \cueDuring $instrument #dir { \once \override TextScript.self-alignment-X = #RIGHT \once \override TextScript.direction = $dir <>-\markup { \tiny #name } $music } #}) flute = \relative c'' { \transposition c' s4 s4 e g } \addQuote "flute" { \flute } clarinet = \relative c' { \transposition bes fis4 d d c } \addQuote "clarinet" { \clarinet } singer = \relative c'' { c4. g8 g4 bes4 } words = \lyricmode { here's the lyr -- ics } pianoRH = \relative c'' { \transposition c' \cueWhile "clarinet" "Clar." #DOWN { c4. g8 } \cueWhile "flute" "Flute" #UP { g4 bes4 } } pianoLH = \relative c { c4 <c' e> e, <g c> } \score { << \new Staff { \new Voice = "singer" { \singer } } \new Lyrics { \lyricsto "singer" \words } \new PianoStaff << \new Staff { \new Voice { \pianoRH } } \new Staff { \clef "bass" \pianoLH } >> >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Orchesterstichnoten zu einem Klavierauszug hinzufügen ] | [ Up : Vocal music ] | [ Aligning syllables with melisma > ] |
Adjusting lyrics vertical spacing
This snippet shows how to bring the lyrics line closer to the staff.
% Default layout: << \new Staff \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } \new Staff { \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } } % Reducing the minimum space below the staff and above the lyrics: \new Lyrics \with { \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) } \lyricsto melody { aa aa aa aa aa aa aa aa aa } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Adjusting lyrics vertical spacing ] | [ Up : Vocal music ] | [ Ambitus > ] |
Aligning syllables with melisma
By default, lyrics syllables that start a melisma are left aligned on
their note. The alignment can be altered using the
lyricMelismaAlignment
property.
\score { << \new Staff { \relative c'' \new Voice = "vocal" { c d~^\markup default d e c d~^\markup "right aligned" d e c d~^\markup "center aligned" d e c d~^\markup "reset to default" d e } } \new Lyrics \lyricsto "vocal" { word word word \set lyricMelismaAlignment = #RIGHT word word word \set lyricMelismaAlignment = #CENTER word word word \unset lyricMelismaAlignment word word word } >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Aligning syllables with melisma ] | [ Up : Vocal music ] | [ Ambitus after key signature > ] |
Ambitus
Ambitus indicate pitch ranges for voices.
Accidentals only show up if they are not part of the key
signature. AmbitusNoteHead
grobs also have ledger lines.
\layout { \context { \Voice \consists "Ambitus_engraver" } } << \new Staff { \relative c' { \time 2/4 c4 f' } } \new Staff { \relative c' { \time 2/4 \key d \major cis4 as' } } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Ambitus ] | [ Up : Vocal music ] | [ Ambitus mit vielen Stimmen > ] |
Ambitus after key signature
By default, ambitus are positioned at the left of the clef. The
\ambitusAfter
function allows for changing this
placement. Syntax is \ambitusAfter grob-interface
(see
Graphical
Object Interfaces for a list of possible values for
grob-interface
.)
A common use case is printing the ambitus between key signature and time signature.
\new Staff \with { \consists Ambitus_engraver } \relative { \ambitusAfter key-signature \key d \major es'8 g bes cis d2 }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Ambitus after key signature ] | [ Up : Vocal music ] | [ Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals > ] |
Ambitus mit vielen Stimmen
Indem man den Ambitus_engraver
im Staff
-Kontext
hinzufügt, erhält man einen einzigen Ambitus pro System, auch in dem
Fall, dass mehrere Stimmen sich im gleichen System befinden.
\new Staff \with { \consists "Ambitus_engraver" } << \new Voice \relative c'' { \voiceOne c4 a d e f1 } \new Voice \relative c' { \voiceTwo es4 f g as b1 } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Ambitus mit vielen Stimmen ] | [ Up : Vocal music ] | [ Vorlage für anglikanischen Psalm > ] |
Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals
Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die Länge von Pausen an.
chant = \relative c' { \set Score.timing = ##f f4 a2 \divisioMinima g4 b a2 f2 \divisioMaior g4( f) f( g) a2 \finalis } verba = \lyricmode { Lo -- rem ip -- sum do -- lor sit a -- met } \score { \new GregorianTranscriptionStaff << \new GregorianTranscriptionVoice = "melody" \chant \new GregorianTranscriptionLyrics = "one" \lyricsto melody \verba >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals ] | [ Up : Vocal music ] | [ Arranging separate lyrics on a single line > ] |
Vorlage für anglikanischen Psalm
Diese Vorlage zeigt eine Art, anglikanische Psalmengesänge zu setzen. Hier wird auch gezeigt, wie Strophen als einfacher Text unter den Noten hinzugefügt werden können. Zwei Strophen sind in unterschiedlicher Weise notiert um mehr Möglichkeiten darzustellen.
\paper { tagline = ##f } SopranoMusic = \relative g' { g1 | c2 b | a1 | \bar "||" a1 | d2 c | c b | c1 | \bar "||" } AltoMusic = \relative c' { e1 | g2 g | f1 | f1 | f2 e | d d | e1 | } TenorMusic = \relative a { c1 | c2 c | c1 | d1 | g,2 g | g g | g1 | } BassMusic = \relative c { c1 | e2 e | f1 | d1 | b2 c | g' g | c,1 | } global = { \time 2/2 } dot = \markup { \raise #0.7 \musicglyph "dots.dot" } tick = \markup { \raise #1 \fontsize #-5 \musicglyph "scripts.rvarcomma" } % Use markup to center the chant on the page \markup { \fill-line { \score { % centered << \new ChoirStaff << \new Staff << \global \clef "treble" \new Voice = "Soprano" << \voiceOne \SopranoMusic >> \new Voice = "Alto" << \voiceTwo \AltoMusic >> >> \new Staff << \clef "bass" \global \new Voice = "Tenor" << \voiceOne \TenorMusic >> \new Voice = "Bass" << \voiceTwo \BassMusic >> >> >> >> \layout { \context { \Score \override SpacingSpanner.base-shortest-duration = \musicLength 2 } \context { \Staff \remove "Time_signature_engraver" } } } % End score } } % End markup \markup { \fill-line { \column { \left-align { \null \null \null \line { \fontsize #5 O \fontsize #3 come let us \bold sing | unto \dot the | Lord : let } \line { us heartily \concat { re \bold joice } in the | strength of | our } \line { sal | vation. } \null \line { \hspace #2.5 8. Today if ye will hear his voice * } \line { \concat { \bold hard en } \tick not your \tick hearts : as in the pro- } \line { vocation * and as in the \bold day of tempt- \tick } \line { -ation \tick in the \tick wilderness. } } } } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für anglikanischen Psalm ] | [ Up : Vocal music ] | [ Changing stanza fonts > ] |
Arranging separate lyrics on a single line
Sometimes you may want to put lyrics for different performers on a
single line: where there is rapidly alternating text, for
example. This snippet shows how this can be done with
\override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = ##f
.
\header { tagline = ##f } \layout { \context { \Lyrics \override VerticalAxisGroup .nonstaff-nonstaff-spacing .minimum-distance = ##f } } aliceSings = \markup { \smallCaps "Alice" } eveSings = \markup { \smallCaps "Eve" } << \new Staff << \new Voice = "alice" { f'4^\aliceSings g' r2 | s1 | f'4^\aliceSings g' r2 | s1 | \break % ... \voiceOne s2 a'8^\aliceSings a' b'4 | \oneVoice g'1 } \new Voice = "eve" { s1 | a'2^\eveSings g' | s1 | a'2^\eveSings g' % ... \voiceTwo f'4^\eveSings a'8 g' f'4 e' | \oneVoice s1 } >> \new Lyrics \lyricsto "alice" { may -- be sec -- ond % ... Shut up, you fool! } \new Lyrics \lyricsto "eve" { that the words are % ... …and then I was like– } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Arranging separate lyrics on a single line ] | [ Up : Vocal music ] | [ Psalmennotation > ] |
Changing stanza fonts
Fonts can be changed independently for each stanza, including the font used for printing the stanza number.
%{ You may have to install additional fonts. Red Hat Fedora dejavu-fonts-all Debian GNU/Linux, Ubuntu fonts-dejavu-core fonts-dejavu-extra %} \relative c'' { \time 3/4 g2 e4 a2 f4 g2. } \addlyrics { \set stanza = #"1. " Hi, my name is Bert. } \addlyrics { \override StanzaNumber.fonts.serif = "DejaVu Sans" \set stanza = #"2. " \override LyricText.font-family = #'typewriter Oh, ché -- ri, je t'aime }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Changing stanza fonts ] | [ Up : Vocal music ] | [ Forcing hyphens to be shown > ] |
Psalmennotation
Diese Form der Notation wird benutzt für die Notation von Psalmen, in denen die Strophen nicht die gleiche Länge haben.
stemOff = \hide Staff.Stem stemOn = \undo \stemOff \score { \new Staff \with { \remove "Time_signature_engraver" } { \key g \minor \cadenzaOn \stemOff a'\breve bes'4 g'4 \stemOn a'2 \section \stemOff a'\breve g'4 a'4 \stemOn f'2 \section \stemOff a'\breve^\markup { \italic flexe } \stemOn g'2 \fine } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Psalmennotation ] | [ Up : Vocal music ] | [ Silben im Gesangstext formatieren > ] |
Forcing hyphens to be shown
If LilyPond does not think there is space for a hyphen, it will be
omitted. The behaviour can be overridden with the
minimum-distance
property of LyricHyphen
.
\relative c'' { c32 c c c c32 c c c c32 c c c c32 c c c } \addlyrics { syl -- lab word word \override LyricHyphen.minimum-distance = #1.0 syl -- lab word word \override LyricHyphen.minimum-distance = #2.0 syl -- lab word word \revert LyricHyphen.minimum-distance syl -- lab word word }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Forcing hyphens to be shown ] | [ Up : Vocal music ] | [ How to put ties between syllables in lyrics > ] |
Silben im Gesangstext formatieren
Textbeschriftungsmodus kann eingesetzt werden, um individuelle Silben im Gesangstext zu formatieren.
mel = \relative c'' { c4 c c c c1 } lyr = \lyricmode { Your lyrics \markup { \italic can } \markup { \with-color #red contain } \markup { \fontsize #8 \bold Markup! } } << \new Voice = melody \mel \new Lyrics \lyricsto melody \lyr >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Silben im Gesangstext formatieren ] | [ Up : Vocal music ] | [ Hymnus-Vorlage > ] |
How to put ties between syllables in lyrics
This can be achieved by separating those syllables by tildes.
\lyrics { wa~o~a }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < How to put ties between syllables in lyrics ] | [ Up : Vocal music ] | [ Ausrichtung von Gesangstext > ] |
Hymnus-Vorlage
Dieses Beispiel zeigt eine Möglichkeit, eine Hymnusmelodie zu setzen, in der jede Zeile mit einem Auftakt beginnt und einem unvollständigen Takt abschließt. Es zeigt auch, wie man die Strophen als allein stehenden Text unter die Noten hinzufügt.
Timeline = { \time 4/4 \tempo 4=96 \partial 2 s2 | s1 | s2 \breathe s2 | s1 | s2 \caesura \break s2 | s1 | s2 \breathe s2 | s1 | s2 \fine } SopranoMusic = \relative g' { g4 g | g g g g | g g g g | g g g g | g2 g4 g | g g g g | g g g g | g g g g | g2 } AltoMusic = \relative c' { d4 d | d d d d | d d d d | d d d d | d2 d4 d | d d d d | d d d d | d d d d | d2 } TenorMusic = \relative a { b4 b | b b b b | b b b b | b b b b | b2 b4 b | b b b b | b b b b | b b b b | b2 } BassMusic = \relative g { g4 g | g g g g | g g g g | g g g g | g2 g4 g | g g g g | g g g g | g g g g | g2 } global = { \key g \major } \score { % Start score << \new PianoStaff << % Start pianostaff \new Staff << % Start Staff = RH \global \clef "treble" \new Voice = "Soprano" << % Start Voice = "Soprano" \Timeline \voiceOne \SopranoMusic >> % End Voice = "Soprano" \new Voice = "Alto" << % Start Voice = "Alto" \Timeline \voiceTwo \AltoMusic >> % End Voice = "Alto" >> % End Staff = RH \new Staff << % Start Staff = LH \global \clef "bass" \new Voice = "Tenor" << % Start Voice = "Tenor" \Timeline \voiceOne \TenorMusic >> % End Voice = "Tenor" \new Voice = "Bass" << % Start Voice = "Bass" \Timeline \voiceTwo \BassMusic >> % End Voice = "Bass" >> % End Staff = LH >> % End pianostaff >> } % End score \markup { \fill-line { "" { \column { \left-align { "This is line one of the first verse" "This is line two of the same" "And here's line three of the first verse" "And the last line of the same" } } } "" } } \layout { \context { \Score caesuraType = #'((bar-line . "||")) fineBarType = "||" } } \paper { % Start paper block indent = 0 % don't indent first system line-width = 130 % shorten line length to suit music tagline = ##f % Don't print tag line, can be removed } % End paper block
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Hymnus-Vorlage ] | [ Up : Vocal music ] | [ Marking notes of spoken parts with a cross on the stem (Sprechstimme) > ] |
Ausrichtung von Gesangstext
Die horizontale Ausrichtung von Gesangstext kann eingestellt werden, indem
man die self-alignment-X
-Eigenschaft des LyricText
-Objekts
verändert. #-1
bedeutet links, #0
bedeutet mittig und #1
bedeutet rechts, man kann aber genauso gut auch #LEFT
, #CENTER
und #RIGHT
benutzen.
\layout { ragged-right = ##f } \relative c'' { c1 c1 c1 } \addlyrics { \once \override LyricText.self-alignment-X = #LEFT "This is left-aligned" \once \override LyricText.self-alignment-X = #CENTER "This is centered" \once \override LyricText.self-alignment-X = 1 "This is right-aligned" }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Ausrichtung von Gesangstext ] | [ Up : Vocal music ] | [ Platzverteilung von Gesangstext wie in 2.12 für neuere Versionen > ] |
Marking notes of spoken parts with a cross on the stem (Sprechstimme)
This example shows how to put crosses on stems. Mark the beginning of
a spoken section with the \speakOn
keyword, and end it with the
\speakOff
keyword.
speakOn = { \override Stem.stencil = #(lambda (grob) (let* ((x-parent (ly:grob-parent grob X)) (is-rest? (ly:grob? (ly:grob-object x-parent 'rest)))) (if is-rest? empty-stencil (ly:stencil-combine-at-edge (ly:stem::print grob) Y (- (ly:grob-property grob 'direction)) (grob-interpret-markup grob (markup #:center-align #:fontsize -4 #:musicglyph "noteheads.s2cross")) -2.3)))) } speakOff = { \revert Stem.stencil \revert Flag.stencil } \score { \new Staff { \relative c'' { a4 b a c \speakOn g4 f r g b4 r d e \speakOff c4 a g f } } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Marking notes of spoken parts with a cross on the stem (Sprechstimme) ] | [ Up : Vocal music ] | [ Orchester, Chor und Klavier > ] |
Platzverteilung von Gesangstext wie in 2.12 für neuere Versionen
Die Maschine für die vertikale Platzverteilung hat sich in Version 2.14 verändert.
Dadurch wurde Gesangstext auf andere Art verteilt. Es ist möglich, Eigenschaften
von Lyric
- und Staff
-Kontexten einzustellen, um die Platzverteilung
so aussehen zu lassen wie für Version 2.12.
\header { tagline = ##f } global = { \key d \major \time 3/4 } sopMusic = \relative c' { % VERSE ONE fis4 fis fis | \break fis4. e8 e4 } altoMusic = \relative c' { % VERSE ONE d4 d d | d4. b8 b4 | } tenorMusic = \relative c' { a4 a a | b4. g8 g4 | } bassMusic = \relative c { d4 d d | g,4. g8 g4 | } words = \lyricmode { Great is Thy faith -- ful -- ness, } \score { \new ChoirStaff << \new Lyrics = sopranos \new Staff = women << \new Voice = "sopranos" { \voiceOne \global \sopMusic } \new Voice = "altos" { \voiceTwo \global \altoMusic } >> \new Lyrics = "altos" \new Lyrics = "tenors" \new Staff = men << \clef bass \new Voice = "tenors" { \voiceOne \global \tenorMusic } \new Voice = "basses" { \voiceTwo \global \bassMusic } >> \new Lyrics = basses \context Lyrics = sopranos \lyricsto sopranos \words \context Lyrics = altos \lyricsto altos \words \context Lyrics = tenors \lyricsto tenors \words \context Lyrics = basses \lyricsto basses \words >> \layout { \context { \Lyrics \override VerticalAxisGroup.staff-affinity = ##f \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 0) (minimum-distance . 2) (padding . 2)) } \context { \Staff \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 0) (minimum-distance . 2) (padding . 2)) } } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Platzverteilung von Gesangstext wie in 2.12 für neuere Versionen ] | [ Up : Vocal music ] | [ Vorlage für Klavier und Gesangsstimme > ] |
Orchester, Chor und Klavier
Diese Vorlage zeigt die Benutzung von geschachtelten
StaffGroup
- und GrandStaff
-Kontexte, um
Instrumente in Untergruppen zu unterteilen, und die
Benutzung von \transpose
für transponierende
Instrumente. Alle Noten werden in C geschrieben. Noten
können in C eingegeben werden, oder auch in der Tonart
des Instrumentes: dann müssen sie zuerst nach C transponiert
werden, bevor sie einer Variable zugewiesen werden.
#(set-global-staff-size 17) \paper { indent = 3.0\cm % add space for instrumentName short-indent = 1.5\cm % add less space for shortInstrumentName } \header { tagline = ##f } fluteMusic = \relative c' { \key g \major g'1 b } % Pitches as written on a manuscript for Clarinet in A % are transposed to concert pitch. clarinetMusic = \transpose c' a \relative c'' { \key bes \major bes1 d } trumpetMusic = \relative c { \key g \major g''1 b } % Key signature is often omitted for horns hornMusic = \transpose c' f \relative c { d'1 fis } percussionMusic = \relative c { \key g \major g1 b } sopranoMusic = \relative c'' { \key g \major g'1 b } sopranoLyrics = \lyricmode { Lyr -- ics } altoIMusic = \relative c' { \key g \major g'1 b } altoIIMusic = \relative c' { \key g \major g'1 b } altoILyrics = \sopranoLyrics altoIILyrics = \lyricmode { Ah -- ah } tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b } tenorLyrics = \sopranoLyrics pianoRHMusic = \relative c { \key g \major g''1 b } pianoLHMusic = \relative c { \clef bass \key g \major g1 b } violinIMusic = \relative c' { \key g \major g'1 b } violinIIMusic = \relative c' { \key g \major g'1 b } violaMusic = \relative c { \clef alto \key g \major g'1 b } celloMusic = \relative c { \clef bass \key g \major g1 b } bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b } \score { << \new StaffGroup = "StaffGroup_woodwinds" << \new Staff = "Staff_flute" \with { instrumentName = "Flute" } \fluteMusic \new Staff = "Staff_clarinet" \with { instrumentName = \markup { \concat { "Clarinet in B" \flat } } } % Declare that written Middle C in the music % to follow sounds a concert B flat, for % output using sounded pitches such as MIDI. %\transposition bes % Print music for a B-flat clarinet \transpose bes c' \clarinetMusic >> \new StaffGroup = "StaffGroup_brass" << \new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" } % \transposition f \transpose f c' \hornMusic \new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" } \trumpetMusic >> \new RhythmicStaff = "RhythmicStaff_percussion" \with { instrumentName = "Percussion" } << \percussionMusic >> \new PianoStaff \with { instrumentName = "Piano" } << \new Staff { \pianoRHMusic } \new Staff { \pianoLHMusic } >> \new ChoirStaff = "ChoirStaff_choir" << \new Staff = "Staff_soprano" \with { instrumentName = "Soprano" } \new Voice = "soprano" \sopranoMusic \new Lyrics \lyricsto "soprano" { \sopranoLyrics } \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << \new Staff = "Staff_altoI" \with { instrumentName = "Alto I" } \new Voice = "altoI" \altoIMusic \new Lyrics \lyricsto "altoI" { \altoILyrics } \new Staff = "Staff_altoII" \with { instrumentName = "Alto II" } \new Voice = "altoII" \altoIIMusic \new Lyrics \lyricsto "altoII" { \altoIILyrics } >> \new Staff = "Staff_tenor" \with { instrumentName = "Tenor" } \new Voice = "tenor" \tenorMusic \new Lyrics \lyricsto "tenor" { \tenorLyrics } >> \new StaffGroup = "StaffGroup_strings" << \new GrandStaff = "GrandStaff_violins" << \new Staff = "Staff_violinI" \with { instrumentName = "Violin I" } \violinIMusic \new Staff = "Staff_violinII" \with { instrumentName = "Violin II" } \violinIIMusic >> \new Staff = "Staff_viola" \with { instrumentName = "Viola" } \violaMusic \new Staff = "Staff_cello" \with { instrumentName = "Cello" } \celloMusic \new Staff = "Staff_bass" \with { instrumentName = "Double Bass" } \bassMusic >> >> \layout { } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Orchester, Chor und Klavier ] | [ Up : Vocal music ] | [ Putting lyrics inside the staff > ] |
Vorlage für Klavier und Gesangsstimme
Das nächste Beispiel ist typisch für ein Lied: Im oberen System die Melodie mit Text, darunter Klavierbegleitung.
melody = \relative c'' { \clef treble \key c \major \time 4/4 a b c d } text = \lyricmode { Aaa Bee Cee Dee } upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } \score { << \new Voice = "mel" { \autoBeamOff \melody } \new Lyrics \lyricsto mel \text \new PianoStaff << \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> \layout { \context { \Staff \RemoveEmptyStaves } } \midi { } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für Klavier und Gesangsstimme ] | [ Up : Vocal music ] | [ SATB-Chorvorlage auf vier Systemen > ] |
Putting lyrics inside the staff
Lyrics can be moved vertically to place them inside the staff. The
lyrics are moved with
\override LyricText.extra-offset = #'(0 . dy)
and
there are similar commands to move the extenders and hyphens. The
offset needed is established with trial and error.
<< \new Staff << \new Voice = "voc" \relative c' { \stemDown a bes c8 b c4 } >> \new Lyrics \with { \override LyricText.extra-offset = #'(0 . 8.6) \override LyricExtender.extra-offset = #'(0 . 8.6) \override LyricHyphen.extra-offset = #'(0 . 8.6) } \lyricsto "voc" { La la -- la __ _ la } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Putting lyrics inside the staff ] | [ Up : Vocal music ] | [ Vorlage für eine Notenzeile mit Noten, Text und Akkorden > ] |
SATB-Chorvorlage auf vier Systemen
SATB-Chorvorlage auf vier Systemen
global = { \key c \major \time 4/4 \dynamicUp } sopranonotes = \relative c'' { c2 \p \< d c d \f } sopranowords = \lyricmode { do do do do } altonotes = \relative c'' { c2\p d c d } altowords = \lyricmode { re re re re } tenornotes = { \clef "G_8" c2\mp d c d } tenorwords = \lyricmode { mi mi mi mi } bassnotes = { \clef bass c2\mf d c d } basswords = \lyricmode { mi mi mi mi } \score { \new ChoirStaff << \new Staff << \new Voice = "soprano" << \global \sopranonotes >> \new Lyrics \lyricsto "soprano" \sopranowords >> \new Staff << \new Voice = "alto" << \global \altonotes >> \new Lyrics \lyricsto "alto" \altowords >> \new Staff << \new Voice = "tenor" << \global \tenornotes >> \new Lyrics \lyricsto "tenor" \tenorwords >> \new Staff << \new Voice = "bass" << \global \bassnotes >> \new Lyrics \lyricsto "bass" \basswords >> >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < SATB-Chorvorlage auf vier Systemen ] | [ Up : Vocal music ] | [ Single staff template with notes, lyrics, chords and frets > ] |
Vorlage für eine Notenzeile mit Noten, Text und Akkorden
Mit diesem Beispiel können Sie einen Song mit Melodie, Text und Akkorden schreiben.
melody = \relative c' { \clef treble \key c \major \time 4/4 a4 b c d } text = \lyricmode { Aaa Bee Cee Dee } harmonies = \chordmode { a2 c } \score { << \new ChordNames { \set chordChanges = ##t \harmonies } \new Voice = "one" { \autoBeamOff \melody } \new Lyrics \lyricsto "one" \text >> \layout { } \midi { } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für eine Notenzeile mit Noten, Text und Akkorden ] | [ Up : Vocal music ] | [ Vorlage für ein Notensystem mit Noten und Gesangstext > ] |
Single staff template with notes, lyrics, chords and frets
Here is a simple lead sheet template with melody, lyrics, chords and fret diagrams.
verseI = \lyricmode { \set stanza = #"1." This is the first verse } verseII = \lyricmode { \set stanza = #"2." This is the second verse. } theChords = \chordmode { % insert chords for chordnames and fretboards here c2 g4 c } staffMelody = \relative c' { \key c \major \clef treble % Type notes for melody here c4 d8 e f4 g \bar "|." } \score { << \context ChordNames { \theChords } \context FretBoards { \theChords } \new Staff { \context Voice = "voiceMelody" { \staffMelody } } \new Lyrics = "lyricsI" { \lyricsto "voiceMelody" \verseI } \new Lyrics = "lyricsII" { \lyricsto "voiceMelody" \verseII } >> \layout { } \midi { } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Single staff template with notes, lyrics, chords and frets ] | [ Up : Vocal music ] | [ Skips in lyric mode > ] |
Vorlage für ein Notensystem mit Noten und Gesangstext
Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren
Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen
Sie es mit LilyPond. In dem Beispiel wird die automatische
Balkenverbindung ausgeschaltet (mit dem Befehl \autoBeamOff
),
wie es für Vokalmusik üblich ist.
Wenn Sie die Balken wieder einschalten wollen, müssen Sie die
entsprechende Zeile entweder ändern oder auskommentieren.
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 { } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für ein Notensystem mit Noten und Gesangstext ] | [ Up : Vocal music ] | [ Skips in lyric mode (2) > ] |
Skips in lyric mode
The s
syntax for skips is only available in note mode and chord
mode. In other situations, for example, when entering lyrics, using the
\skip
command is recommended.
<< \relative c'' { a1 | a } \new Lyrics \lyricmode { \skip 1 bla1 } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Skips in lyric mode ] | [ Up : Vocal music ] | [ Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen > ] |
Skips in lyric mode (2)
Although s
skips cannot be used in \lyricmode
(it is
taken to be a literal „s“, not a space), double quotes (""
) or
underscores (_
) are available.
So for example:
<< \relative c'' { a4 b c d } \new Lyrics \lyricmode { a4 "" _ gap } >>
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Skips in lyric mode (2) ] | [ Up : Vocal music ] | [ Using tags to produce mensural and modern music from the same source > ] |
Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen
Das arpeggioBracket
-Klammerobjekt kann benutzt werden, um geteilte
Stimmen anzuzeigen, wenn keine Hälse diese Information bieten. Das sieht
man oft in Chormusik.
\include "english.ly" \score { \relative c'' { \key a \major \time 2/2 << \new Voice = "upper" << { \voiceOne \arpeggioBracket a2( b2 <b d>1\arpeggio) <cs e>\arpeggio ~ <cs e>4 } \addlyrics { \lyricmode { A -- men. } } >> \new Voice = "lower" { \voiceTwo a1 ~ a a ~ a4 \bar "|." } >> } \layout { ragged-right = ##t } }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen ] | [ Up : Vocal music ] | [ Gesangstext und Ossia vertikal ausrichten > ] |
Using tags to produce mensural and modern music from the same source
Using tags, it is possible to produce both mensural and modern notation
from the same music. In this snippet, a function \menrest
is
introduced, allowing mensural rests to be pitched as in the original,
but with modern rests in the standard staff position.
Tags can also be used where other differences are needed: for example
using „whole measure rests“ (R1
, R\breve
, etc.) in
modern music, but normal rests (r1
, r\breve
, etc.) in
the mensural version. Converting mensural music to its modern
equivalent is usually referred to as transcription.
\header { tagline = ##f } menrest = #(define-music-function (note) (ly:music?) #{ \tag #'mens $(make-music 'RestEvent note) \tag #'mod $(make-music 'RestEvent note 'pitch '()) #}) MenStyle = { \autoBeamOff \override NoteHead.style = #'petrucci \override Score.BarNumber.transparent = ##t \override Stem.neutral-direction = #up } finalis = \section Music = \relative c'' { \set Score.tempoHideNote = ##t \key f \major \time 4/4 g1 d'2 \menrest bes4 bes2 a2 r4 g4 fis2. \finalis } MenLyr = \lyricmode { So farre, deere life, deare life } ModLyr = \lyricmode { So far, dear life, dear life } \score { \keepWithTag #'mens { << \new MensuralStaff { \new MensuralVoice = Cantus \clef "mensural-c1" \MenStyle \Music } \new Lyrics \lyricsto Cantus \MenLyr >> } } \score { \keepWithTag #'mod { \new ChoirStaff << \new Staff { \new Voice = Sop \with { \remove "Note_heads_engraver" \consists "Completion_heads_engraver" \remove "Rest_engraver" \consists "Completion_rest_engraver" } { \shiftDurations 1 0 { \autoBeamOff \Music } } } \new Lyrics \lyricsto Sop \ModLyr >> } }
Gesangstext und Ossia vertikal ausrichten
Dieser Schnipsel zeigt, wie man die Kontexteigenschaften
alignBelowContext
und alignAboveContext
benutzen kann, um
die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren.
\relative c' << \new Staff = "1" { c4 c s2 } \new Staff = "2" { c4 c s2 } \new Staff = "3" { c4 c s2 } { \skip 2 << \lyrics { \set alignBelowContext = "1" lyrics4 below } \new Staff \with { alignAboveContext = "3" fontSize = -2 \override StaffSymbol.staff-space = #(magstep -2) \remove "Time_signature_engraver" } { \tuplet 6/4 { \override TextScript.padding = 3 c8[^"ossia above" d e d e f] } } >> } >> \paper { ragged-right = ##t }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Gesangstext und Ossia vertikal ausrichten ] | [ Up : Vocal music ] | [ Vertically centered common lyrics > ] |
Vertically aligning stanza numbers of different staves
It can happen that stanza numbers don’t align vertically if the verses
are attached to different staves. To fix that, override the
self-alignment-X
property of the LyricText
grob.
\markup { default behavior } << \new Staff { b b b b } \lyrics { \set stanza = "3." a a a a } \new Staff { b b b b } \lyrics { \set stanza = "1." aaaaaaaaaa a a a } \lyrics { \set stanza = "2." a a a a } >> \markup \vspace #1 \markup { using \typewriter "self-alignment-X = #LEFT" } << \new Staff { b b b b } \new Lyrics \lyricmode { \set stanza = "3." a a a a } \new Staff { b b b b } \new Lyrics \lyricmode { \set stanza = "1." \once \override LyricText.self-alignment-X = #LEFT aaaaaaaaaa a a a } \new Lyrics \lyricmode { \set stanza = "2." a a a a } >> \paper { tagline = ##f }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vertically aligning stanza numbers of different staves ] | [ Up : Vocal music ] | [ Vorlage für Vokalensemble > ] |
Vertically centered common lyrics
In a vocal piece where there are several (two, four or more) lines of lyrics and common lyrics for all voices at some point, the common lyrics may be made to appear vertically centered, as shown in the following example:
dropLyrics = { \override LyricText.extra-offset = #'(0 . -4.5) \override LyricHyphen.extra-offset = #'(0 . -4.5) \override LyricExtender.extra-offset = #'(0 . -4.5) \override StanzaNumber.extra-offset = #'(0 . -4.5) } raiseLyrics = { \revert LyricText.extra-offset \revert LyricHyphen.extra-offset \revert LyricExtender.extra-offset \revert StanzaNumber.extra-offset } skipFour = \repeat unfold 4 { \skip 8 } lyricsA = \lyricmode { The first verse has \dropLyrics \set stanza = #" All:" the com -- mon __ words \raiseLyrics used in all four. } lyricsB = \lyricmode { In stan -- za two, \skipFour al -- so ap -- pear. } lyricsC = \lyricmode { By the third verse, \skipFour are get -- ting dull. } lyricsD = \lyricmode { Last stan -- za, and \skipFour get used once more. } melody = \relative c' { c4 d e f | g f e8( e f) d | c4 e d c | } \score { << \new Voice = m \melody \new Lyrics \lyricsto m \lyricsA \new Lyrics \lyricsto m \lyricsB \new Lyrics \lyricsto m \lyricsC \new Lyrics \lyricsto m \lyricsD >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vertically centered common lyrics ] | [ Up : Vocal music ] | [ Vocal ensemble template with automatic piano reduction > ] |
Vorlage für Vokalensemble
Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa sind fast immer gleich in allen Stimmen.
\paper { top-system-spacing.basic-distance = 10 score-system-spacing.basic-distance = 20 system-system-spacing.basic-distance = 20 last-bottom-spacing.basic-distance = 10 } global = { \key c \major \time 4/4 } sopMusic = \relative { c''4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative { e'4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Lyrics = "sopranos" \with { % this is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics = "altos" \new Lyrics = "tenors" \with { % this is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics = "basses" \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords \context Lyrics = "altos" \lyricsto "altos" \altoWords \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords \context Lyrics = "basses" \lyricsto "basses" \bassWords >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für Vokalensemble ] | [ Up : Vocal music ] | [ Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System > ] |
Vocal ensemble template with automatic piano reduction
In diesem Beispiel wird ein automatischer Klavierauszug zu der Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond – man kann eine Variable mehr als einmal benutzen. Wenn Sie irgendeine Änderung an einer Chorstimme vornehmen, (etwa tenorMusic), verändert sich auch der Klavierauszug entsprechend.
\paper { top-system-spacing.basic-distance = 10 score-system-spacing.basic-distance = 20 system-system-spacing.basic-distance = 20 last-bottom-spacing.basic-distance = 10 } global = { \key c \major \time 4/4 } sopMusic = \relative { c''4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative { e'4 f d e } altoWords =\lyricmode { ha ha ha ha } tenorMusic = \relative { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { << \new ChoirStaff << \new Lyrics = "sopranos" \with { % This is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics = "altos" \new Lyrics = "tenors" \with { % This is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics = "basses" \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords \context Lyrics = "altos" \lyricsto "altos" \altoWords \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords \context Lyrics = "basses" \lyricsto "basses" \bassWords >> \new PianoStaff << \new Staff << \set Staff.printPartCombineTexts = ##f \partCombine << \global \sopMusic >> << \global \altoMusic >> >> \new Staff << \clef bass \set Staff.printPartCombineTexts = ##f \partCombine << \global \tenorMusic >> << \global \bassMusic >> >> >> >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vocal ensemble template with automatic piano reduction ] | [ Up : Vocal music ] | [ Sologesang und zweistimmiger Refrain > ] |
Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
In diesem Beispiel werden die Texte mit den Befehlen
alignAboveContext
und alignBelowContext
über und unter dem System angeordnet.
global = { \key c \major \time 4/4 } sopMusic = \relative c'' { c4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative c' { e4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative c' { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative c { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics \with { alignAboveContext = "women" } \lyricsto "sopranos" \sopWords \new Lyrics \with { alignBelowContext = "women" } \lyricsto "altos" \altoWords % we could remove the line about this with the line below, since % we want the alto lyrics to be below the alto Voice anyway. % \new Lyrics \lyricsto "altos" \altoWords \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics \with { alignAboveContext = "men" } \lyricsto "tenors" \tenorWords \new Lyrics \with { alignBelowContext = "men" } \lyricsto "basses" \bassWords % again, we could replace the line above this with the line below. % \new Lyrics \lyricsto "basses" \bassWords >> }
[ << Vocal music ] | [Top][Contents] | [ Chords >> ] |
[ < Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System ] | [ Up : Vocal music ] | [ Chords > ] |
Sologesang und zweistimmiger Refrain
Diese Vorlage erstellt eine Partitur, die mit Sologesang beginnt und einen
Refrain für zwei Stimmen enthält. Sie zeigt auch die Benutzung von
Platzhalter-Pausen innerhalb der \global
-Variable, um Taktwechsel
(und andere Elemente, die für alle Stimmen gleich sind) für das gesamte
Stück zu definieren.
\header { tagline = ##f } global = { \key g \major % verse \time 3/4 s2.*2 \break % refrain \time 2/4 s2*2 \bar "|." } SoloNotes = \relative g' { \clef "treble" % verse g4 g g | b4 b b | % refrain R2*2 | } SoloLyrics = \lyricmode { One two three | four five six | } SopranoNotes = \relative c'' { \clef "treble" % verse R2.*2 | % refrain c4 c | g4 g | } SopranoLyrics = \lyricmode { la la | la la | } BassNotes = \relative c { \clef "bass" % verse R2.*2 | % refrain c4 e | d4 d | } BassLyrics = \lyricmode { dum dum | dum dum | } \score { << \new Voice = "SoloVoice" << \global \SoloNotes >> \new Lyrics \lyricsto "SoloVoice" \SoloLyrics \new ChoirStaff << \new Voice = "SopranoVoice" << \global \SopranoNotes >> \new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics \new Voice = "BassVoice" << \global \BassNotes >> \new Lyrics \lyricsto "BassVoice" \BassLyrics >> >> \layout { ragged-right = ##t \context { \Staff % these lines prevent empty staves from being printed \RemoveEmptyStaves \override VerticalAxisGroup.remove-first = ##t } } }
[ << Vocal music ] | [Top][Contents] | [ Keyboards >> ] |
[ < Sologesang und zweistimmiger Refrain ] | [ Up : Top ] | [ Adding a figured bass above or below the notes > ] |
Chords
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Chords ] | [ Up : Chords ] | [ Tatkstriche in einen ChordNames-Kontext hinzufügen > ] |
Adding a figured bass above or below the notes
When writing a figured bass, you can place the figures above or below
the bass notes, by defining the
BassFigureAlignmentPositioning.direction
property (exclusively
in a Staff
context). Choices are #UP
(or #1
),
#CENTER
(or #0
) and #DOWN
(or #-1
).
This property can be changed as many times as you wish. Use
\once \override
if you don’t want the override to apply to the
whole score.
bass = { \clef bass g4 b, c d e d8 c d2 } continuo = \figuremode { <_>4 <6>4 <5/>4 \override Staff.BassFigureAlignmentPositioning.direction = #UP %\bassFigureStaffAlignmentUp < _+ >4 <6> \set Staff.useBassFigureExtenders = ##t \override Staff.BassFigureAlignmentPositioning.direction = #DOWN %\bassFigureStaffAlignmentDown <4>4. <4>8 <_+>4 } \score { << \new Staff = bassStaff \bass \context Staff = bassStaff \continuo >> }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Adding a figured bass above or below the notes ] | [ Up : Chords ] | [ Adjusting figured bass alteration glyphs > ] |
Tatkstriche in einen ChordNames-Kontext hinzufügen
Um Taktstriche in einem ChordNames
-Kontext anzeigen zu lassen, muss der
Bar_engraver
hinzugefügt werden.
\new ChordNames \with { \override BarLine.bar-extent = #'(-2 . 2) \consists "Bar_engraver" } \chordmode { f1:maj7 f:7 bes:7 }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Tatkstriche in einen ChordNames-Kontext hinzufügen ] | [ Up : Chords ] | [ Akkordsymboltrenner verändern > ] |
Adjusting figured bass alteration glyphs
In figured bass, specially designed glyphs for 6\\
,
7\\
, and 9\\
are used by default. Similarly,
specially designed glyphs for symbols 2\+
, 4\+
, and
5\+
are used by default if plus signs appear after the number.
To change that, pass an alist to figuredBassPlusStrokedAlist
and
set the glyph in question to #f
(or omit it).
\figures { \set figuredBassPlusDirection = #RIGHT <6\\> <7\\> <9\\> r <2\+> <4\+> <5\+> r \set figuredBassPlusStrokedAlist = #'((2 . "figbass.twoplus") ;; (4 . "figbass.fourplus") ;; (5 . "figbass.fiveplus") (6 . "figbass.sixstroked") ;; (7 . "figbass.sevenstroked") ;; (9 . "figbass.ninestroked") ) <6\\> <7\\> <9\\> r <2\+> <4\+> <5\+> r }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Adjusting figured bass alteration glyphs ] | [ Up : Chords ] | [ Changing the chord names to German or semi-German notation > ] |
Akkordsymboltrenner verändern
Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann beliebiger Text sein.
\chords { c:7sus4 \set chordNameSeparator = \markup { \typewriter | } c:7sus4 }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Akkordsymboltrenner verändern ] | [ Up : Chords ] | [ Positionen von Generalbass-Alterationszeichen verändern > ] |
Changing the chord names to German or semi-German notation
The english naming of chords (default) can be changed to german
(\germanChords
replaces B and Bes with H and B) or semi-german
(\semiGermanChords
replaces B and Bes with H and Bb).
scm = \chordmode { c1/c | cis/cis b1/b | bis/bis | bes/bes } \layout { ragged-right = ##t \context { \ChordNames \consists "Instrument_name_engraver" } } << \new ChordNames { \set instrumentName = #"default" \scm } \new ChordNames { \set instrumentName = #"german" \germanChords \scm } \new ChordNames { \set instrumentName = #"semi-german" \semiGermanChords \scm } \new ChordNames { \set instrumentName = #"italian" \italianChords \scm } \new ChordNames { \set instrumentName = #"french" \frenchChords \scm } \context Voice { \scm } >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Changing the chord names to German or semi-German notation ] | [ Up : Chords ] | [ Akkordsymbolausnahmen > ] |
Positionen von Generalbass-Alterationszeichen verändern
Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen,
je nach den Einstellungen der figuredBassAlterationDirection
und
figuredBassPlusDirection
-Eigenschaften.
\figures { <5\+> <5+ 4\+> <6 4- 2\+> r \set figuredBassAlterationDirection = #RIGHT <5\+> <5+ 4\+> <6 4- 2\+> r \set figuredBassPlusDirection = #RIGHT <5\+> <5+ 4\+> <6 4- 2\+> r \set figuredBassAlterationDirection = #LEFT <5\+> <5+ 4\+> <6 4- 2\+> r }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Positionen von Generalbass-Alterationszeichen verändern ] | [ Up : Chords ] | [ Akkordbezeichnung maj7 > ] |
Akkordsymbolausnahmen
Die Eigenschaft chordNameExceptions
kann benutzt werden, um eine
Liste an besonderen Notationen für bestimmte Akkorde zu speichern.
% modify maj9 and 6(add9) % Exception music is chords with markups chExceptionMusic = { <c e g b d'>1-\markup { \super "maj9" } <c e g a d'>1-\markup { \super "6(add9)" } } % Convert music to list and prepend to existing exceptions. chExceptions = #(append (sequential-music-to-chord-exceptions chExceptionMusic #t) ignatzekExceptions) theMusic = \chordmode { g1:maj9 g1:6.9 \set chordNameExceptions = #chExceptions g1:maj9 g1:6.9 } \layout { ragged-right = ##t } << \new ChordNames \theMusic \new Voice \theMusic >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Akkordsymbolausnahmen ] | [ Up : Chords ] | [ Chord names alternative > ] |
Akkordbezeichnung maj7
Das Aussehen des großen Septakkords kann mit majorSevenSymbol
verändert werden.
\chords { c:7+ \set majorSevenSymbol = \markup { j7 } c:7+ }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Akkordbezeichnung maj7 ] | [ Up : Chords ] | [ Chords with stretched fingering for FretBoards and TabVoice > ] |
Chord names alternative
Chord names are generated from a list of pitches. The functions which construct these names can be customised.
Here are shown chords following Ignatzek (pp. 17-18, 1995), used by default since LilyPond 1.7.20, compared with an alternative Jazz chord notation and Harald Banter’s (1987) notation. A smaller font is used in the latter case, as these tend to be overly verbose.
This mirrors the mechanism originally used in early LilyPond versions (pre-1.7); not having been properly maintained, however, some features have been lost (mainly chord exception lists) and bugs have been introduced.
%%%% Legacy chord naming functions (formerly in scm/chord-generic-names.scm) %%%% Copyright (C) 2003--2023 Jan Nieuwenhuizen <janneke@gnu.org> #(set-global-staff-size 19.7) #(define-public (banter-chordnames pitches bass inversion context) (old_chord->markup 'banter pitches bass inversion context)) #(define-public (jazz-chordnames pitches bass inversion context) (old_chord->markup 'jazz pitches bass inversion context)) #(define (define-translator-property symbol type? description) (if (not (and (symbol? symbol) (procedure? type?) (string? description))) (ly:error "error in call of define-translator-property")) (if (not (equal? (object-property symbol 'translation-doc) #f)) (ly:error (G_ "symbol ~S redefined") symbol)) (set-object-property! symbol 'translation-type? type?) (set-object-property! symbol 'translation-doc description) symbol) #(for-each (lambda (x) (apply define-translator-property x)) `((chordNameExceptionsFull ,list? "An alist of full chord exceptions. Contains @code{(@var{chord} . @var{markup})} entries.") (chordNameExceptionsPartial ,list? "An alist of partial chord exceptions. Contains @code{(@var{chord} . (@var{prefix-markup} @var{suffix-markup}))} entries."))) #(define-public (old_chord->markup style pitches bass inversion context) "Entry point for @code{Chord_name_engraver}. @var{pitches}, @var{bass}, and @var{inversion} are lily pitches." (define (default-note-namer pitch) (note-name->markup pitch #f)) (define (markup-or-empty-markup markup) "Return MARKUP if markup, else empty-markup" (if (markup? markup) markup empty-markup)) (define (accidental->markup alteration) "Return accidental markup for ALTERATION." (if (= alteration 0) (make-line-markup (list empty-markup)) (conditional-kern-before (alteration->text-accidental-markup alteration) (= alteration FLAT) 0.094725))) (define (list-minus a b) "Return list of elements in A that are not in B." (lset-difference eq? a b)) (define (markup-join markups sep) "Return line-markup of MARKUPS, joining them with markup SEP" (if (pair? markups) (make-line-markup (list-insert-separator markups sep)) empty-markup)) (define (conditional-kern-before markup bool amount) "Add AMOUNT of space before MARKUP if BOOL is true." (if bool (make-line-markup (list (make-hspace-markup amount) markup)) markup)) (define (step-nr pitch) (let* ((pitch-nr (+ (* 7 (ly:pitch-octave pitch)) (ly:pitch-notename pitch))) (root-nr (+ (* 7 (ly:pitch-octave (car pitches))) (ly:pitch-notename (car pitches))))) (+ 1 (- pitch-nr root-nr)))) (define (next-third pitch) (+ pitch (ly:make-pitch 0 2 (if (or (= (step-nr pitch) 3) (= (step-nr pitch) 5)) FLAT 0)))) (define (step-alteration pitch) (let* ((normalized-pitch (- pitch (car pitches))) (alteration (ly:pitch-alteration normalized-pitch))) (if (= (step-nr pitch) 7) (+ alteration SEMI-TONE) alteration))) (define (pitch-unalter pitch) (let ((alteration (step-alteration pitch))) (if (= alteration 0) pitch (ly:make-pitch (ly:pitch-octave pitch) (ly:pitch-notename pitch) (- (ly:pitch-alteration pitch) alteration))))) (define (step-even-or-altered? pitch) (let ((nr (step-nr pitch))) (if (!= (modulo nr 2) 0) (!= (step-alteration pitch) 0) #t))) (define (step->markup-plusminus pitch) (let ((alt (step-alteration pitch))) (make-line-markup (list (number->string (step-nr pitch)) (cond ((= alt DOUBLE-FLAT) "--") ((= alt FLAT) "-") ((= alt NATURAL) "") ((= alt SHARP) "+") ((= alt DOUBLE-SHARP) "++")))))) (define (step->markup-accidental pitch) (make-line-markup (list (accidental->markup (step-alteration pitch)) (make-simple-markup (number->string (step-nr pitch)))))) (define (step->markup-ignatzek pitch) (make-line-markup (if (and (= (step-nr pitch) 7) (= (step-alteration pitch) 1)) (list (ly:context-property context 'majorSevenSymbol)) (list (accidental->markup (step-alteration pitch)) (make-simple-markup (number->string (step-nr pitch))))))) ;; tja, kennok (define (make-sub->markup step->markup) (lambda (pitch) (make-line-markup (list (make-simple-markup "no") (step->markup pitch))))) (define (step-based-sub->markup step->markup pitch) (make-line-markup (list (make-simple-markup "no") (step->markup pitch)))) (define (get-full-list pitch) (if (<= (step-nr pitch) (step-nr (last pitches))) (cons pitch (get-full-list (next-third pitch))) '())) (define (get-consecutive nr pitches) (if (pair? pitches) (let* ((pitch-nr (step-nr (car pitches))) (next-nr (if (!= (modulo pitch-nr 2) 0) (+ pitch-nr 2) nr))) (if (<= pitch-nr nr) (cons (car pitches) (get-consecutive next-nr (cdr pitches))) '())) '())) ;;; FIXME -- exceptions no longer work. -vv (define (full-match exceptions) (if (pair? exceptions) (let* ((e (car exceptions)) (e-pitches (car e))) (if (equal? e-pitches pitches) e (full-match (cdr exceptions)))) #f)) (define (partial-match exceptions) (if (pair? exceptions) (let* ((e (car exceptions)) (e-pitches (car e))) (if (equal? e-pitches (take pitches (length e-pitches))) e (partial-match (cdr exceptions)))) #f)) ;; FIXME: exceptions don't work anyway. (if #f (begin (write-me "pitches: " pitches))) (let* ((full-exceptions (ly:context-property context 'chordNameExceptionsFull)) (full-exception (full-match full-exceptions)) (full-markup (if full-exception (cadr full-exception) '())) (partial-exceptions (ly:context-property context 'chordNameExceptionsPartial)) (partial-exception (partial-match partial-exceptions)) (partial-pitches (if partial-exception (car partial-exception) '())) (partial-markup-prefix (if partial-exception (markup-or-empty-markup (cadr partial-exception)) empty-markup)) (partial-markup-suffix (if (and partial-exception (pair? (cddr partial-exception))) (markup-or-empty-markup (caddr partial-exception)) empty-markup)) (root (car pitches)) (full (get-full-list root)) ;; kludge alert: replace partial matched lower part of all with ;; 'normal' pitches from full ;; (all pitches) (all (append (take full (length partial-pitches)) (drop pitches (length partial-pitches)))) (highest (last all)) (missing (list-minus full (map pitch-unalter all))) (consecutive (get-consecutive 1 all)) (rest (list-minus all consecutive)) (altered (filter step-even-or-altered? all)) (cons-alt (filter step-even-or-altered? consecutive)) (base (list-minus consecutive altered))) (if #f (begin (write-me "full:" full) ;; (write-me "partial-pitches:" partial-pitches) (write-me "full-markup:" full-markup) (write-me "partial-markup-perfix:" partial-markup-prefix) (write-me "partial-markup-suffix:" partial-markup-suffix) (write-me "all:" all) (write-me "altered:" altered) (write-me "missing:" missing) (write-me "consecutive:" consecutive) (write-me "rest:" rest) (write-me "base:" base))) (case style ((banter) ;; root ;; + steps:altered + (highest all -- if not altered) ;; + subs:missing (let* ((root->markup default-note-namer) (step->markup step->markup-plusminus) (sub->markup (lambda (x) (step-based-sub->markup step->markup x))) (sep (make-simple-markup "/"))) (if (pair? full-markup) (make-line-markup (list (root->markup root) full-markup)) (make-line-markup (list (root->markup root) partial-markup-prefix (make-super-markup (markup-join (append (map step->markup (append altered (if (and (> (step-nr highest) 5) (not (step-even-or-altered? highest))) (list highest) '()))) (list partial-markup-suffix) (map sub->markup missing)) sep))))))) ((jazz) ;; root ;; + steps:(highest base) + cons-alt ;; + 'add' ;; + steps:rest (let* ((root->markup default-note-namer) (step->markup step->markup-ignatzek) (sep (make-simple-markup " ")) (add-prefix (make-simple-markup " add"))) (if (pair? full-markup) (make-line-markup (list (root->markup root) full-markup)) (make-line-markup (list (root->markup root) partial-markup-prefix (make-super-markup (make-line-markup (list ;; kludge alert: omit <= 5 ;;(markup-join (map step->markup ;; (cons (last base) cons-alt)) sep) ;; This fixes: ;; c C5 -> C ;; c:2 C5 2 -> C2 ;; c:3- Cm5 -> Cm ;; c:6.9 C5 6add9 -> C6 add 9 (add?) ;; ch = \chords { c c:2 c:3- c:6.9^7 } (markup-join (map step->markup (let ((tb (last base))) (if (> (step-nr tb) 5) (cons tb cons-alt) cons-alt))) sep) (if (pair? rest) add-prefix empty-markup) (markup-join (map step->markup rest) sep) partial-markup-suffix)))))))) (else empty-markup)))) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% %%%% Here begins the actual snippet: chs = \transpose c' c' { <c e g>1 <c es g> % m = minor triad <c e gis> <c es ges> \break <c e g bes> <c es g bes> <c e g b> % triangle = maj <c es ges beses> <c es ges b> \break <c e gis bes> <c es g b> <c e gis b> <c es ges bes> \break <c e g a> % 6 = major triad with added sixth <c es g a> % m6 = minor triad with added sixth <c e g bes d'> <c es g bes d'> \break <c es g bes d' f' a' > <c es g bes d' f' > <c es ges bes d' > <c e g bes des' > \break <c e g bes dis'> <c e g bes d' f'> <c e g bes d' fis'> <c e g bes d' f' a'> \break <c e g bes d' fis' as'> <c e gis bes dis'> <c e g bes dis' fis'> <c e g bes d' f' as'> \break <c e g bes des' f' as'> <c e g bes d' fis'> <c e g b d'> <c e g bes d' f' as'> \break <c e g bes des' f' as'> <c e g bes des' f' a'> <c e g b d'> <c e g b d' f' a'> \break <c e g b d' fis'> <c e g bes des' f ' a'> <c f g> <c f g bes> \break <c f g bes d'> <c e g d'> % add9 <c es g f'> <c e g b fis'> % Lydian <c e g bes des' ees' fis' aes'> % altered chord } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % alternate Jazz notation efullmusicJazzAlt = { <c e gis>1-\markup { "+" } <c e g b>-\markup { \normal-size-super % \override #'(font-family . math) "N" \override #'(font-family . math) "M" } %%c:3.5.7 = \markup { \override #'(font-family . math) "M" } %%c:3.5.7 = \markup { \normal-size-super "maj7" } <c es ges>-\markup { \super "o" } % should be $\circ$ ? <c es ges bes>-\markup { \super \combine "o" "/" } <c es ges beses>-\markup { \super "o7" } } efullJazzAlt = #(sequential-music-to-chord-exceptions efullmusicJazzAlt #f) epartialmusicJazzAlt = { <c d>1-\markup { \normal-size-super "2" } <c es>-\markup { "m" } <c f>-\markup { \normal-size-super "sus4" } <c g>-\markup { \normal-size-super "5" } %% TODO, partial exceptions <c es f>-\markup { "m" }-\markup { \normal-size-super "sus4" } <c d es>-\markup { "m" }-\markup { \normal-size-super "sus2" } } epartialJazzAlt = #(sequential-music-to-chord-exceptions epartialmusicJazzAlt #f) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \score { << \new ChordNames { %% Already set by default: %\set chordNameFunction = #ignatzek-chord-names \set instrumentName = "Ignatzek" \set shortInstrumentName = "Def" \chs } \new ChordNames { \set chordNameFunction = #jazz-chordnames \set majorSevenSymbol = \whiteTriangleMarkup \set chordNameSeparator = "/" \set chordNameExceptionsFull = \efullJazzAlt \set chordNameExceptionsPartial = \epartialJazzAlt \set instrumentName = "Alternative" \set shortInstrumentName = "Alt" \chs } %% This is the Banter (1987) style. It gives exceedingly %% verbose (wide) names, making the output file take up to 4 pages. \new ChordNames { \set chordNameFunction = #banter-chordnames \override ChordName.font-size = -3 \set instrumentName = "Banter" \set shortInstrumentName = "Ban" \chs } \new Staff \transpose c c' { \chs } >> \layout { #(layout-set-staff-size 16) system-system-spacing.basic-distance = 0 \context { \ChordNames \consists "Instrument_name_engraver" } \context { \Score \remove "Bar_number_engraver" } } }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Chord names alternative ] | [ Up : Chords ] | [ Clusters > ] |
Chords with stretched fingering for FretBoards and TabVoice
Sometimes chords with a stretched fingering are required. If not
otherwise specified the context-property maximumFretStretch
is
set to 4
, though. Resulting in a warning about "No string for
pitch ..." and the note is omitted. You may set
maximumFretStretch
to an approppriate value or explecitely
assign string-numbers to all notes of a chord.
%% The code below will print two warnings, which may be omitted by uncommenting: %#(for-each (lambda (x) (ly:expect-warning "No string for pitch")) (iota 2)) mus = { <c' bes'> <c'\2 bes'> \set maximumFretStretch = 5 <c' bes'> <c'\2 bes'\1> } << \new FretBoards \mus \new TabVoice \mus >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Chords with stretched fingering for FretBoards and TabVoice ] | [ Up : Chords ] | [ Position von Fingersatz in Akkorden kontrollieren > ] |
Clusters
Clusters are a device to denote that a complete range of notes is to be played.
fragment = \relative c' { c4 f <e d'>4 <g a>8 <e a> a4 c2 <d b>4 e2 c } << \new Staff \fragment \new Staff \makeClusters \fragment >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Clusters ] | [ Up : Chords ] | [ Cross-staff chords - beaming problems workaround > ] |
Position von Fingersatz in Akkorden kontrollieren
Die Position von Fingersatzzahlen kann exakt kontrolliert werden.
\relative c' { \set fingeringOrientations = #'(left) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down right up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(left) <c-1>2 \set fingeringOrientations = #'(down) <e-3>2 \set stringNumberOrientations = #'(up left down) <f\3 a\2 c\1>1 \set strokeFingerOrientations = #'(down right up) <c\rightHandFinger 1 e\rightHandFinger 2 c'\rightHandFinger 4 > }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Position von Fingersatz in Akkorden kontrollieren ] | [ Up : Chords ] | [ Customizing the chord grid style > ] |
Cross-staff chords - beaming problems workaround
Sometimes it is better to use stems from the upper staff for creating
cross-staff chords, because no problems with automatic beam collision
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn’t detect collisions
between staves using
\override Staff.Beam.collision-voice-only = ##t
\new PianoStaff << \new Staff = up \relative c' { << { r4 \override Stem.cross-staff = ##t \override Stem.length = #19 % this is in half-spaces, % so it makes stems 9.5 staffspaces long \override Stem.Y-offset = #-6 % stems are normally lengthened % upwards, so here we must lower the stem by the amount % equal to the lengthening - in this case (19 - 7) / 2 % (7 is default stem length) e e e } { s4 \change Staff = "bottom" \override NoteColumn.ignore-collision = ##t c, c c } >> } \new Staff = bottom \relative c' { \clef bass \voiceOne g8 a g a g a g a } >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Cross-staff chords - beaming problems workaround ] | [ Up : Chords ] | [ Customizing the no-chord symbol > ] |
Customizing the chord grid style
Custom divisions of chord squares can be defined through the
measure-division-lines-alist
and
measure-division-chord-placement-alist
properties of
ChordSquare
. These are both alists. Their keys are measure
divisions, namely lists which give the fraction of the measure that
each chord (or rest, or skip) represents. More precisely, a measure
division alist is made of positive, exact numbers adding up to 1, for
example: '(1/2 1/4 1/4)
. The exactness requirement means that,
e.g., 1/2
is valid but not 0.5
.
The values in measure-division-lines-alist
are lists of lines,
which are represented as
(x1 y1 x2 y2)
. The
line starts at the point (x1 . y1)
and
ends at (x2 . y2)
. Coordinates are
expressed in the [-1, 1] scale relative to the extent of the
square.
The values in measure-division-chord-placement-alist
are lists
of (x . y)
pairs giving the placement of
the respective chords.
This example defines a peculiar chord grid style that has a rule for measures divided in three equal parts.
\paper { line-width = 10\cm ragged-right = ##f } \new ChordGrid \with { \override ChordSquare.measure-division-lines-alist = #'(((1) . ()) ((1/3 1/3 1/3) . ((-1 -0.4 0 1) (0 -1 1 0.4)))) \override ChordSquare.measure-division-chord-placement-alist = #'(((1) . ((0 . 0))) ((1/3 1/3 1/3) . ((-0.7 . 0.5) (0 . 0) (0.7 . -0.5)))) } \chordmode { \time 3/4 c2. c4 c4 c4 }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Customizing the chord grid style ] | [ Up : Chords ] | [ Displaying complex chords > ] |
Customizing the no-chord symbol
By default, rests in a ChordNames
context cause the „N.C.“
symbol to be printed. This markup can be customized.
<< \chords { R1 \set noChordSymbol = "—" R1 \set noChordSymbol = \markup \italic "Ssh!" R1 } { R1*3 } >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Customizing the no-chord symbol ] | [ Up : Chords ] | [ Manually break figured bass extenders for only some numbers > ] |
Displaying complex chords
Here is a way to display a chord where the same note is played twice with different accidentals.
fixA = { \once \override Stem.length = #11 } fixB = { \once \override NoteHead.X-offset = #1.7 \once \override Stem.length = #7 \once \override Stem.rotation = #'(45 0 0) \once \override Stem.extra-offset = #'(-0.1 . -0.2) \once \override Flag.style = #'no-flag \once \override Accidental.extra-offset = #'(4 . -.1) } \relative c' { << { \fixA <b d!>8 } \\ { \voiceThree \fixB dis } >> s }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Displaying complex chords ] | [ Up : Chords ] | [ Print ChordNames with same root and different bass as slash and bass-note > ] |
Manually break figured bass extenders for only some numbers
Figured bass often uses extenders to indicate continuation of the
corresponding step. However, in this case lilypond is in greedy-mode
and uses extenders whenever possible. To break individual extenders,
one can simply use a modifier \!
to a number, which breaks any
extender attributed to that number right before the number.
bassfigures = \figuremode { \set useBassFigureExtenders = ##t <6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4> } << \new Staff \relative c'' { c1 c1 } \new FiguredBass \bassfigures >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Manually break figured bass extenders for only some numbers ] | [ Up : Chords ] | [ Akkordsymbole bei Wechsel anzeigen > ] |
Print ChordNames with same root and different bass as slash and bass-note
To print subsequent ChordNames
only differing in its bass note
as slash and bass note use the here defined engraver. The behaviour may
be controlled in detail by the chordChanges
context property.
#(define Bass_changes_equal_root_engraver (lambda (ctx) "For sequential @code{ChordNames} with same root, but different bass, the root markup is dropped: D D/C D/B -> D /C /B The behaviour may be controlled by setting the @code{chordChanges} context-property." (let ((chord-pitches '()) (last-chord-pitches '()) (bass-pitch #f)) (make-engraver ((initialize this-engraver) (let ((chord-note-namer (ly:context-property ctx 'chordNoteNamer))) ;; Set 'chordNoteNamer, respect user setting if already done (ly:context-set-property! ctx 'chordNoteNamer (if (procedure? chord-note-namer) chord-note-namer note-name->markup)))) (listeners ((note-event this-engraver event) (let* ((pitch (ly:event-property event 'pitch)) (pitch-name (ly:pitch-notename pitch)) (pitch-alt (ly:pitch-alteration pitch)) (bass (ly:event-property event 'bass #f)) (inversion (ly:event-property event 'inversion #f))) ;; Collect notes of the chord ;; - to compare inversed chords we need to collect the bass note ;; as usual member of the chord, whereas an added bass must be ;; treated separate from the usual chord-notes ;; - notes are stored as pairs containing their ;; pitch-name (an integer), i.e. disregarding their octave and ;; their alteration (cond (bass (set! bass-pitch pitch)) (inversion (set! bass-pitch pitch) (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))) (else (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))))))) (acknowledgers ((chord-name-interface this-engraver grob source-engraver) (let ((chord-changes (ly:context-property ctx 'chordChanges #f))) ;; If subsequent chords are equal apart from their bass, ;; reset the 'text-property. ;; Equality is done by comparing the sorted lists of this chord's ;; elements and the previous chord. Sorting is needed because ;; inverted chords may have a different order of pitches. ;; `chord-changes' needs to be true (if (and bass-pitch chord-changes (equal? (sort chord-pitches car<) (sort last-chord-pitches car<))) (ly:grob-set-property! grob 'text (make-line-markup (list (ly:context-property ctx 'slashChordSeparator) ((ly:context-property ctx 'chordNoteNamer) bass-pitch (ly:context-property ctx 'chordNameLowercaseMinor)))))) (set! last-chord-pitches chord-pitches) (set! chord-pitches '()) (set! bass-pitch #f)))) ((finalize this-engraver) (set! last-chord-pitches '())))))) myChords = \chordmode { %\germanChords \set chordChanges = ##t d2:m d:m/cis d:m/c \set chordChanges = ##f d:m/b e1:7 \set chordChanges = ##t e \break \once \set chordChanges = ##f e1/f e2/gis e/+gis e e:m/f d:m d:m/cis d:m/c \set chordChanges = ##f d:m/b } << \new ChordNames \with { \consists #Bass_changes_equal_root_engraver } \myChords \new Staff \myChords >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Print ChordNames with same root and different bass as slash and bass-note ] | [ Up : Chords ] | [ Ein einfaches Liedblatt > ] |
Akkordsymbole bei Wechsel anzeigen
Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile und bei Akkordwechseln angezeigt werden.
harmonies = \chordmode { c1:m c:m \break c:m c:m d } << \new ChordNames { \set chordChanges = ##t \harmonies } \new Staff { \relative c' { \harmonies } } >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Akkordsymbole bei Wechsel anzeigen ] | [ Up : Chords ] | [ Vorlage für eine Notenzeile mit Noten, Text und Akkorden > ] |
Ein einfaches Liedblatt
Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext:
<< \chords { c2 g:sus4 f e } \new Staff \relative c'' { a4 e c8 e r4 b2 c4( d) } \addlyrics { One day this shall be free __ } >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Ein einfaches Liedblatt ] | [ Up : Chords ] | [ Single staff template with notes, lyrics, chords and frets > ] |
Vorlage für eine Notenzeile mit Noten, Text und Akkorden
Mit diesem Beispiel können Sie einen Song mit Melodie, Text und Akkorden schreiben.
melody = \relative c' { \clef treble \key c \major \time 4/4 a4 b c d } text = \lyricmode { Aaa Bee Cee Dee } harmonies = \chordmode { a2 c } \score { << \new ChordNames { \set chordChanges = ##t \harmonies } \new Voice = "one" { \autoBeamOff \melody } \new Lyrics \lyricsto "one" \text >> \layout { } \midi { } }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Vorlage für eine Notenzeile mit Noten, Text und Akkorden ] | [ Up : Chords ] | [ Vorlage für eine Notenzeile mit Akkorden > ] |
Single staff template with notes, lyrics, chords and frets
Here is a simple lead sheet template with melody, lyrics, chords and fret diagrams.
verseI = \lyricmode { \set stanza = #"1." This is the first verse } verseII = \lyricmode { \set stanza = #"2." This is the second verse. } theChords = \chordmode { % insert chords for chordnames and fretboards here c2 g4 c } staffMelody = \relative c' { \key c \major \clef treble % Type notes for melody here c4 d8 e f4 g \bar "|." } \score { << \context ChordNames { \theChords } \context FretBoards { \theChords } \new Staff { \context Voice = "voiceMelody" { \staffMelody } } \new Lyrics = "lyricsI" { \lyricsto "voiceMelody" \verseI } \new Lyrics = "lyricsII" { \lyricsto "voiceMelody" \verseII } >> \layout { } \midi { } }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Single staff template with notes, lyrics, chords and frets ] | [ Up : Chords ] | [ Vertically centering paired figured bass extenders > ] |
Vorlage für eine Notenzeile mit Akkorden
Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist das richtige Beispiel für Sie!
melody = \relative c' { \clef treble \key c \major \time 4/4 f4 e8[ c] d4 g a2 ~ a } harmonies = \chordmode { c4:m f:min7 g:maj c:aug d2:dim b4:5 e:sus } \score { << \new ChordNames { \set chordChanges = ##t \harmonies } \new Staff \melody >> \layout{ } \midi { } }
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Vorlage für eine Notenzeile mit Akkorden ] | [ Up : Chords ] | [ Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole > ] |
Vertically centering paired figured bass extenders
Where figured bass extender lines are being used by setting
useBassFigureExtenders
to true, pairs of congruent figured bass
extender lines are vertically centered if
figuredBassCenterContinuations
is set to true.
<< \relative c' { c8 c b b a a c16 c b b c8 c b b a a c16 c b b c8 c b b a a c c b b } \figures { \set useBassFigureExtenders = ##t <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>16 r \set figuredBassCenterContinuations = ##t <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>16 r \set figuredBassCenterContinuations = ##f <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>8 } >>
[ << Chords ] | [Top][Contents] | [ Keyboards >> ] |
[ < Vertically centering paired figured bass extenders ] | [ Up : Chords ] | [ Keyboards > ] |
Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole
Indem man den Volta_engraver
zu dem entsprechenden Notensystem
hinzufügt, können Wiederholungsklammern unterhalb der Akkorde gesetzt
werden.
\score { << \chords { c1 c1 } \new Staff \with { \consists "Volta_engraver" } { \repeat volta 2 { c'1 } \alternative { c' } } >> \layout { \context { \Score \remove "Volta_engraver" } } }
[ << Chords ] | [Top][Contents] | [ Percussion >> ] |
[ < Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole ] | [ Up : Top ] | [ Symbole für Akkordeon-Diskantregister > ] |
Keyboards
Keyboard and other multi-staff instruments
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Keyboards ] | [ Up : Keyboards ] | [ Accordion register symbols > ] |
Symbole für Akkordeon-Diskantregister
Diskantregister für Akkordeon können mit \markup
dargestellt werden.
Die vertikale Position der einzelnen Elemente werden mit \raise
angepasst.
discant = \markup { \musicglyph "accordion.discant" } dot = \markup { \musicglyph "accordion.dot" } \layout { ragged-right = ##t } % 16 voets register accBasson = ^\markup { \combine \discant \translate-scaled #'(0 . 0.5) \dot } % een korig 8 en 16 voets register accBandon = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 0.5) \dot \translate-scaled #'(0 . 1.5) \dot } accVCello = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 0.5) \dot \combine \translate-scaled #'(0 . 1.5) \dot \translate-scaled #'(1 . 1.5) \dot } % 4-8-16 voets register accHarmon = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 0.5) \dot \combine \translate-scaled #'(0 . 1.5) \dot \translate-scaled #'(0 . 2.5) \dot } accTrombon = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 0.5) \dot \combine \translate-scaled #'(0 . 1.5) \dot \combine \translate-scaled #'(1 . 1.5) \dot \translate-scaled #'(-1 . 1.5) \dot } % eenkorig 4 en 16 voets register accOrgan = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 0.5) \dot \translate-scaled #'(0 . 2.5) \dot } accMaster = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 0.5) \dot \combine \translate-scaled #'(0 . 1.5) \dot \combine \translate-scaled #'(1 . 1.5) \dot \combine \translate-scaled #'(-1 . 1.5) \dot \translate-scaled #'(0 . 2.5) \dot } accAccord = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 1.5) \dot \combine \translate-scaled #'(1 . 1.5) \dot \combine \translate-scaled #'(-1 . 1.5) \dot \translate-scaled #'(0 . 2.5) \dot } accMusette = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 1.5) \dot \combine \translate-scaled #'(1 . 1.5) \dot \translate-scaled #'(-1 . 1.5) \dot } accCeleste = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 1.5) \dot \translate-scaled #'(-1 . 1.5) \dot } accOboe = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 1.5) \dot \translate-scaled #'(0 . 2.5) \dot } accClarin = ^\markup { \combine \discant \translate-scaled #'(0 . 1.5) \dot } accPiccolo = ^\markup { \combine \discant \translate-scaled #'(0 . 2.5) \dot } accViolin = ^\markup { \combine \discant \combine \translate-scaled #'(0 . 1.5) \dot \combine \translate-scaled #'(1 . 1.5) \dot \translate-scaled #'(0 . 2.5) \dot } \relative c'' { c4 d\accBasson e f c4 d\accBandon e f c4 d\accVCello e f c4 d\accHarmon e f c4 d\accTrombon e f \break c4 d\accOrgan e f c4 d\accMaster e f c4 d\accAccord e f c4 d\accMusette e f c4 d\accCeleste e f \break c4 d\accOboe e f c4 d\accClarin e f c4 d\accPiccolo e f c4 d\accViolin e f }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Symbole für Akkordeon-Diskantregister ] | [ Up : Keyboards ] | [ Changing the text for sustain markings > ] |
Accordion register symbols
Accordion register symbols are available as \markup
as well as
as standalone music events (as register changes tend to occur between
actual music events). Bass registers are not overly standardized. The
available commands can be found in ’Discant symbols’ in the Notation
Reference.
#(use-modules (lily accreg)) \new PianoStaff << \new Staff \relative { \clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a] << { r16 <f bes> r <e a> r <d g> } \\ { d r a r bes r } >> | <cis e a>1 } \new Staff \relative { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 \clef bass \stdBass "Master" << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" | <e a cis>1^"a" } \\ { d8_"D" c_"C" bes_"B" | a1_"A" } >> } >>
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Accordion register symbols ] | [ Up : Keyboards ] | [ Clusters > ] |
Changing the text for sustain markings
Staff.pedalSustainStrings
can be used to set the text used for
pedal down and up. Note that the only valid strings are those found in
the list of pedal glyphs - the values used this snippet constitute an
exhaustive list.
sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff } \relative c' { \sustainNotes \set Staff.pedalSustainStrings = #'("P" "P-" "-") \sustainNotes \set Staff.pedalSustainStrings = #'("d" "de" "e") \sustainNotes \set Staff.pedalSustainStrings = #'("M" "M-" "-") \sustainNotes \set Staff.pedalSustainStrings = #'("Ped" "*Ped" "*") \sustainNotes }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Changing the text for sustain markings ] | [ Up : Keyboards ] | [ Position von Fingersatz in Akkorden kontrollieren > ] |
Clusters
Clusters are a device to denote that a complete range of notes is to be played.
fragment = \relative c' { c4 f <e d'>4 <g a>8 <e a> a4 c2 <d b>4 e2 c } << \new Staff \fragment \new Staff \makeClusters \fragment >>
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Clusters ] | [ Up : Keyboards ] | [ Creating slurs across voices > ] |
Position von Fingersatz in Akkorden kontrollieren
Die Position von Fingersatzzahlen kann exakt kontrolliert werden.
\relative c' { \set fingeringOrientations = #'(left) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down right up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(left) <c-1>2 \set fingeringOrientations = #'(down) <e-3>2 \set stringNumberOrientations = #'(up left down) <f\3 a\2 c\1>1 \set strokeFingerOrientations = #'(down right up) <c\rightHandFinger 1 e\rightHandFinger 2 c'\rightHandFinger 4 > }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Position von Fingersatz in Akkorden kontrollieren ] | [ Up : Keyboards ] | [ Cross-staff chords - beaming problems workaround > ] |
Creating slurs across voices
In some situations, it may be necessary to create slurs between notes
from different voices. The solution is to add invisible notes to one of
the voices, using \hideNotes
.
This example is measure 235 of the Ciaconna from Bach’s 2nd Partita for solo violin, BWV 1004.
\relative c' { << { d16( a') s a s a[ s a] s a[ s a] } \\ { \slurUp bes,16[ s e]( \hideNotes a) \unHideNotes f[( \hideNotes a) \unHideNotes fis]( \hideNotes a) \unHideNotes g[( \hideNotes a) \unHideNotes gis]( \hideNotes a) } >> }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Creating slurs across voices ] | [ Up : Keyboards ] | [ Cross-staff tremolos > ] |
Cross-staff chords - beaming problems workaround
Sometimes it is better to use stems from the upper staff for creating
cross-staff chords, because no problems with automatic beam collision
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn’t detect collisions
between staves using
\override Staff.Beam.collision-voice-only = ##t
\new PianoStaff << \new Staff = up \relative c' { << { r4 \override Stem.cross-staff = ##t \override Stem.length = #19 % this is in half-spaces, % so it makes stems 9.5 staffspaces long \override Stem.Y-offset = #-6 % stems are normally lengthened % upwards, so here we must lower the stem by the amount % equal to the lengthening - in this case (19 - 7) / 2 % (7 is default stem length) e e e } { s4 \change Staff = "bottom" \override NoteColumn.ignore-collision = ##t c, c c } >> } \new Staff = bottom \relative c' { \clef bass \voiceOne g8 a g a g a g a } >>
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Cross-staff chords - beaming problems workaround ] | [ Up : Keyboards ] | [ Fine-tuning pedal brackets > ] |
Cross-staff tremolos
Since \repeat tremolo
expects exactly two musical arguments for
chord tremolos, the note or chord which changes staff within a
cross-staff tremolo should be placed inside curly braces together with
its \change Staff
command.
\new PianoStaff << \new Staff = "up" \relative c'' { \key a \major \time 3/8 s4. } \new Staff = "down" \relative c'' { \key a \major \time 3/8 \voiceOne \repeat tremolo 6 { <a e'>32 { \change Staff = "up" \voiceTwo <cis a' dis>32 } } } >>
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Cross-staff tremolos ] | [ Up : Keyboards ] | [ Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen > ] |
Fine-tuning pedal brackets
The appearance of pedal brackets may be altered in different ways.
\paper { ragged-right = ##f } \relative c'' { c2\sostenutoOn c c2\sostenutoOff c \once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2) c2\sostenutoOn c c2\sostenutoOff c \once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3) c2\sostenutoOn c c2\sostenutoOff c }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Fine-tuning pedal brackets ] | [ Up : Keyboards ] | [ Vorlage für Jazz-Combo > ] |
Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen
Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen
Systemen mit der selben Hand gespielt werden sollen. Damit das notiert
werden kann, muss der PianoStaff
-Kontext so eingestellt werden,
dass er Arpeggios über Systeme hinweg akzeptiert und die Form der Arpeggios
muss auf eine Klammer eingestellt werden.
(Debussy, Les collines d’Anacapri, T. 65)
\new PianoStaff << \set PianoStaff.connectArpeggios = ##t \override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket \new Staff { \relative c' { \key b \major \time 6/8 b8-.(\arpeggio fis'-.\> cis-. e-. gis-. b-.)\!\fermata^\laissezVibrer \bar "||" } } \new Staff { \relative c' { \clef bass \key b \major << { <a e cis>2.\arpeggio } \\ { <a, e a,>2. } >> } } >>
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen ] | [ Up : Keyboards ] | [ Laissez vibrer ties > ] |
Vorlage für Jazz-Combo
Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung:
Alle Instrumente sind in \key c \major
(C-Dur) notiert. Das bezieht sich
auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn
sich die Noten innerhalb eines ranspose
-Abschnitts befinden.
\header { title = "Song" subtitle = "(tune)" composer = "Me" meter = "moderato" piece = "Swing" tagline = \markup { \column { "LilyPond example file by Amelie Zapf," "Berlin 07/07/2003" } } } % To make the example display in the documentation \paper { paper-width = 130 } %#(set-global-staff-size 16) \include "english.ly" %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%% sl = { \override NoteHead.style = #'slash \hide Stem } nsl = { \revert NoteHead.style \undo \hide Stem } crOn = \override NoteHead.style = #'cross crOff = \revert NoteHead.style %% insert chord name style stuff here. jazzChords = { } %%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%% global = { \time 4/4 } Key = { \key c \major } % ############ Horns ############ % ------ Trumpet ------ trpt = \transpose c d \relative c'' { \Key c1 | c | c | } trpHarmony = \transpose c' d { \jazzChords } trumpet = { \global \clef treble << \trpt >> } % ------ Alto Saxophone ------ alto = \transpose c a \relative c' { \Key c1 | c | c | } altoHarmony = \transpose c' a { \jazzChords } altoSax = { \global \clef treble << \alto >> } % ------ Baritone Saxophone ------ bari = \transpose c a' \relative c { \Key c1 c1 \sl d4^"Solo" d d d \nsl } bariHarmony = \transpose c' a \chordmode { \jazzChords s1 s d2:maj e:m7 } bariSax = { \global \clef treble << \bari >> } % ------ Trombone ------ tbone = \relative c { \Key c1 | c | c } tboneHarmony = \chordmode { \jazzChords } trombone = { \global \clef bass << \tbone >> } % ############ Rhythm Section ############# % ------ Guitar ------ gtr = \relative c'' { \Key c1 \sl b4 b b b \nsl c1 } gtrHarmony = \chordmode { \jazzChords s1 c2:min7+ d2:maj9 } guitar = { \global \clef treble << \gtr >> } %% ------ Piano ------ rhUpper = \relative c'' { \voiceOne \Key c1 | c | c } rhLower = \relative c' { \voiceTwo \Key e1 | e | e } lhUpper = \relative c' { \voiceOne \Key g1 | g | g } lhLower = \relative c { \voiceTwo \Key c1 | c | c } PianoRH = { \clef treble \global << \new Voice = "one" \rhUpper \new Voice = "two" \rhLower >> } PianoLH = { \clef bass \global << \new Voice = "one" \lhUpper \new Voice = "two" \lhLower >> } piano = { << \new Staff = "upper" \PianoRH \new Staff = "lower" \PianoLH >> } % ------ Bass Guitar ------ Bass = \relative c { \Key c1 | c | c } bass = { \global \clef bass << \Bass >> } % ------ Drums ------ up = \drummode { \voiceOne hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> } down = \drummode { \voiceTwo bd4 s bd s bd4 s bd s bd4 s bd s } drumContents = { \global << \new DrumVoice \up \new DrumVoice \down >> } %%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%% \score { << \new StaffGroup = "horns" << \new Staff = "trumpet" \with { instrumentName = "Trumpet" } \trumpet \new Staff = "altosax" \with { instrumentName = "Alto Sax" } \altoSax \new ChordNames = "barichords" \with { instrumentName = "Trumpet" } \bariHarmony \new Staff = "barisax" \with { instrumentName = "Bari Sax" } \bariSax \new Staff = "trombone" \with { instrumentName = "Trombone" } \trombone >> \new StaffGroup = "rhythm" << \new ChordNames = "chords" \gtrHarmony \new Staff = "guitar" \with { instrumentName = "Guitar" } \guitar \new PianoStaff = "piano" \with { instrumentName = "Piano" midiInstrument = "acoustic grand" } \piano \new Staff = "bass" \with { instrumentName = "Bass" } \bass \new DrumStaff \with { instrumentName = "Drums" } \drumContents >> >> \layout { \context { \Staff \RemoveEmptyStaves } \context { \Score \override BarNumber.padding = 3 \override RehearsalMark.padding = 2 skipBars = ##t } } \midi { } }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Vorlage für Jazz-Combo ] | [ Up : Keyboards ] | [ Vorlage für einfache Klaviernotation > ] |
Laissez vibrer ties
Laissez vibrer ties have a fixed size. Their formatting can be tuned
using 'tie-configuration
.
\relative c' { <c e g>4\laissezVibrer r <c f g>\laissezVibrer r <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8 <c d e f>4\laissezVibrer r \override LaissezVibrerTieColumn.tie-configuration = #`((-7 . ,DOWN) (-5 . ,DOWN) (-3 . ,UP) (-1 . ,UP)) <c d e f>4\laissezVibrer r }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Laissez vibrer ties ] | [ Up : Keyboards ] | [ Piano template with centered lyrics > ] |
Vorlage für einfache Klaviernotation
Hier ein einfaches Klaviersystem.
upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } \score { \new PianoStaff \with { instrumentName = "Piano" } << \new Staff = "upper" \upper \new Staff = "lower" \lower >> \layout { } \midi { } }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Vorlage für einfache Klaviernotation ] | [ Up : Keyboards ] | [ Vorlage für Klavier und Gesangsstimme > ] |
Piano template with centered lyrics
Anstatt ein eigenes System für Melodie und Text zu schreiben, können Sie den Text auch zwischen die beiden Klaviersysteme schreiben (und damit das zusätzliche System für die Gesangstimme auslassen).
upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } text = \lyricmode { Aaa Bee Cee Dee } \score { \new PianoStaff << \new Staff = upper { \new Voice = "singer" \upper } \new Lyrics \lyricsto "singer" \text \new Staff = lower { \lower } >> \layout { } \midi { } }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Piano template with centered lyrics ] | [ Up : Keyboards ] | [ Removing brace on first line of piano score > ] |
Vorlage für Klavier und Gesangsstimme
Das nächste Beispiel ist typisch für ein Lied: Im oberen System die Melodie mit Text, darunter Klavierbegleitung.
melody = \relative c'' { \clef treble \key c \major \time 4/4 a b c d } text = \lyricmode { Aaa Bee Cee Dee } upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } \score { << \new Voice = "mel" { \autoBeamOff \melody } \new Lyrics \lyricsto mel \text \new PianoStaff << \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> \layout { \context { \Staff \RemoveEmptyStaves } } \midi { } }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Vorlage für Klavier und Gesangsstimme ] | [ Up : Keyboards ] | [ Using autochange with more than one voice > ] |
Removing brace on first line of piano score
This snippet removes the first brace from a PianoStaff
or a
GrandStaff
, together with the clefs.
It may be useful when cutting and pasting the engraved image into existing music.
It uses \alterBroken
.
someMusic = { \once \override Staff.Clef.stencil = ##f \once \override Staff.TimeSignature.stencil = ##f \repeat unfold 3 c1 \break \repeat unfold 5 c1 \break \repeat unfold 5 c1 } \score { \new PianoStaff << \new Staff = "right" \relative c'' \someMusic \new Staff = "left" \relative c' { \clef F \someMusic } >> \layout { indent=75 \context { \PianoStaff \alterBroken transparent #'(#t) SystemStartBrace } } } \paper { tagline = ##f }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Removing brace on first line of piano score ] | [ Up : Keyboards ] | [ Vocal ensemble template with automatic piano reduction > ] |
Using autochange with more than one voice
Using autochange
with more than one voice.
\score { \new PianoStaff << \new Staff = "up" { << \set Timing.beamExceptions = #'() \set Timing.beatStructure = #'(4) \new Voice { \voiceOne \autoChange \relative c' { g8 a b c d e f g g,8 a b c d e f g } } \new Voice { \voiceTwo \autoChange \relative c' { g8 a b c d e f g g,,8 a b c d e f g } } >> } \new Staff = "down" { \clef bass } >> }
[ << Keyboards ] | [Top][Contents] | [ Percussion >> ] |
[ < Using autochange with more than one voice ] | [ Up : Keyboards ] | [ Percussion > ] |
Vocal ensemble template with automatic piano reduction
In diesem Beispiel wird ein automatischer Klavierauszug zu der Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond – man kann eine Variable mehr als einmal benutzen. Wenn Sie irgendeine Änderung an einer Chorstimme vornehmen, (etwa tenorMusic), verändert sich auch der Klavierauszug entsprechend.
\paper { top-system-spacing.basic-distance = 10 score-system-spacing.basic-distance = 20 system-system-spacing.basic-distance = 20 last-bottom-spacing.basic-distance = 10 } global = { \key c \major \time 4/4 } sopMusic = \relative { c''4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative { e'4 f d e } altoWords =\lyricmode { ha ha ha ha } tenorMusic = \relative { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { << \new ChoirStaff << \new Lyrics = "sopranos" \with { % This is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics = "altos" \new Lyrics = "tenors" \with { % This is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics = "basses" \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords \context Lyrics = "altos" \lyricsto "altos" \altoWords \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords \context Lyrics = "basses" \lyricsto "basses" \bassWords >> \new PianoStaff << \new Staff << \set Staff.printPartCombineTexts = ##f \partCombine << \global \sopMusic >> << \global \altoMusic >> >> \new Staff << \clef bass \set Staff.printPartCombineTexts = ##f \partCombine << \global \tenorMusic >> << \global \bassMusic >> >> >> >> }
[ << Keyboards ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Vocal ensemble template with automatic piano reduction ] | [ Up : Top ] | [ Adding drum parts > ] |
Percussion
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Percussion ] | [ Up : Percussion ] | [ Cow and ride bell example > ] |
Adding drum parts
Using the powerful pre-configured tools such as the \drummode
function and the DrumStaff
context, inputting drum parts is
quite easy: drums are placed at their own staff positions (with a
special clef symbol) and have note heads according to the drum.
Attaching an extra symbol to the drum or restricting the number of
lines is possible.
drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh hhc4 r4 r2 } drl = \drummode { bd4 sn8 bd bd4 << bd ss >> bd8 tommh tommh bd toml toml bd tomfh16 tomfh } timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb } \score { << \new DrumStaff \with { instrumentName = "timbales" drumStyleTable = #timbales-style \override StaffSymbol.line-count = #2 \override BarLine.bar-extent = #'(-1 . 1) } << \timb >> \new DrumStaff \with { instrumentName = "drums" } << \new DrumVoice { \stemUp \drh } \new DrumVoice { \stemDown \drl } >> >> \layout { } \midi { \tempo 4 = 120 } }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Adding drum parts ] | [ Up : Percussion ] | [ Heavily customized polymetric time signatures > ] |
Cow and ride bell example
Two different bells, entered with ’cb’ (cowbell) and ’rb’ (ridebell).
\paper { tagline = ##f } #(define mydrums '((ridebell default #f 3) (cowbell default #f -2))) \new DrumStaff \with { instrumentName = #"Different Bells" } \drummode { \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \set DrumStaff.clefPosition = 0.5 \override DrumStaff.StaffSymbol.line-positions = #'(-2 3) \override Staff.BarLine.bar-extent = #'(-1.0 . 1.5) \time 2/4 rb8 8 cb8 16 rb16-> ~ | 16 8 16 cb8 8 | }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Cow and ride bell example ] | [ Up : Percussion ] | [ High and Low woodblock example > ] |
Heavily customized polymetric time signatures
Though the polymetric time signature shown was not the most essential item here, it has been included to show the beat of this piece (which is the template of a real Balkan song!).
melody = \relative c'' { \key g \major \compoundMeter #'((3 8) (2 8) (2 8) (3 8) (2 8) (2 8) (2 8) (2 8) (3 8) (2 8) (2 8)) c8 c c d4 c8 c b c b a4 g fis8 e d c b' c d e4-^ fis8 g \break c,4. d4 c4 d4. c4 d c2 d4. e4-^ d4 c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 c4. d4 c4 d4. c4 d c2 d4. e4-^ d4 \break } drum = \new DrumStaff \drummode { \repeat volta 2 { bd4.^\markup { Drums } sn4 bd \bar ";" sn4. bd4 sn \bar ";" bd sn bd4. sn4 bd } } \new Staff \with { instrumentName = \markup { \concat { "B" \flat " Sop." } } } { \melody \drum } \paper { tagline = ##f }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Heavily customized polymetric time signatures ] | [ Up : Percussion ] | [ Vorlage für Jazz-Combo > ] |
High and Low woodblock example
Two Woodblocks, entered with ’wbh’ (high woodblock) and ’wbl’ (low woodblock). The length of the barline has been altered with an \override command otherwise it would be too short. The positions of the two stafflines also have to be explicitly defined.
\paper { tagline = ##f } % These lines define the position of the woodblocks in the stave; % if you like, you can change it or you can use special note heads % for the woodblocks. #(define mydrums '((hiwoodblock default #f 3) (lowoodblock default #f -2))) woodstaff = { % This defines a staff with only two lines. % It also defines the positions of the two lines. \override Staff.StaffSymbol.line-positions = #'(-2 3) % This is necessary; if not entered, % the barline would be too short! \override Staff.BarLine.bar-extent = #'(-1.0 . 1.5) % small correction for the clef: \set DrumStaff.clefPosition = 0.5 } \new DrumStaff { % with this you load your new drum style table \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \woodstaff \drummode { \time 2/4 wbl8 16 16 8-> 8 | wbl8 16 16-> ~ 16 16 r8 | } }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < High and Low woodblock example ] | [ Up : Percussion ] | [ Percussion beaters > ] |
Vorlage für Jazz-Combo
Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung:
Alle Instrumente sind in \key c \major
(C-Dur) notiert. Das bezieht sich
auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn
sich die Noten innerhalb eines ranspose
-Abschnitts befinden.
\header { title = "Song" subtitle = "(tune)" composer = "Me" meter = "moderato" piece = "Swing" tagline = \markup { \column { "LilyPond example file by Amelie Zapf," "Berlin 07/07/2003" } } } % To make the example display in the documentation \paper { paper-width = 130 } %#(set-global-staff-size 16) \include "english.ly" %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%% sl = { \override NoteHead.style = #'slash \hide Stem } nsl = { \revert NoteHead.style \undo \hide Stem } crOn = \override NoteHead.style = #'cross crOff = \revert NoteHead.style %% insert chord name style stuff here. jazzChords = { } %%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%% global = { \time 4/4 } Key = { \key c \major } % ############ Horns ############ % ------ Trumpet ------ trpt = \transpose c d \relative c'' { \Key c1 | c | c | } trpHarmony = \transpose c' d { \jazzChords } trumpet = { \global \clef treble << \trpt >> } % ------ Alto Saxophone ------ alto = \transpose c a \relative c' { \Key c1 | c | c | } altoHarmony = \transpose c' a { \jazzChords } altoSax = { \global \clef treble << \alto >> } % ------ Baritone Saxophone ------ bari = \transpose c a' \relative c { \Key c1 c1 \sl d4^"Solo" d d d \nsl } bariHarmony = \transpose c' a \chordmode { \jazzChords s1 s d2:maj e:m7 } bariSax = { \global \clef treble << \bari >> } % ------ Trombone ------ tbone = \relative c { \Key c1 | c | c } tboneHarmony = \chordmode { \jazzChords } trombone = { \global \clef bass << \tbone >> } % ############ Rhythm Section ############# % ------ Guitar ------ gtr = \relative c'' { \Key c1 \sl b4 b b b \nsl c1 } gtrHarmony = \chordmode { \jazzChords s1 c2:min7+ d2:maj9 } guitar = { \global \clef treble << \gtr >> } %% ------ Piano ------ rhUpper = \relative c'' { \voiceOne \Key c1 | c | c } rhLower = \relative c' { \voiceTwo \Key e1 | e | e } lhUpper = \relative c' { \voiceOne \Key g1 | g | g } lhLower = \relative c { \voiceTwo \Key c1 | c | c } PianoRH = { \clef treble \global << \new Voice = "one" \rhUpper \new Voice = "two" \rhLower >> } PianoLH = { \clef bass \global << \new Voice = "one" \lhUpper \new Voice = "two" \lhLower >> } piano = { << \new Staff = "upper" \PianoRH \new Staff = "lower" \PianoLH >> } % ------ Bass Guitar ------ Bass = \relative c { \Key c1 | c | c } bass = { \global \clef bass << \Bass >> } % ------ Drums ------ up = \drummode { \voiceOne hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> } down = \drummode { \voiceTwo bd4 s bd s bd4 s bd s bd4 s bd s } drumContents = { \global << \new DrumVoice \up \new DrumVoice \down >> } %%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%% \score { << \new StaffGroup = "horns" << \new Staff = "trumpet" \with { instrumentName = "Trumpet" } \trumpet \new Staff = "altosax" \with { instrumentName = "Alto Sax" } \altoSax \new ChordNames = "barichords" \with { instrumentName = "Trumpet" } \bariHarmony \new Staff = "barisax" \with { instrumentName = "Bari Sax" } \bariSax \new Staff = "trombone" \with { instrumentName = "Trombone" } \trombone >> \new StaffGroup = "rhythm" << \new ChordNames = "chords" \gtrHarmony \new Staff = "guitar" \with { instrumentName = "Guitar" } \guitar \new PianoStaff = "piano" \with { instrumentName = "Piano" midiInstrument = "acoustic grand" } \piano \new Staff = "bass" \with { instrumentName = "Bass" } \bass \new DrumStaff \with { instrumentName = "Drums" } \drumContents >> >> \layout { \context { \Staff \RemoveEmptyStaves } \context { \Score \override BarNumber.padding = 3 \override RehearsalMark.padding = 2 skipBars = ##t } } \midi { } }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Vorlage für Jazz-Combo ] | [ Up : Percussion ] | [ Percussion example > ] |
Percussion beaters
Graphic symbols for percussion instruments are not natively supported; however it is possible to include such symbols, either as an external EPS file or as embedded PostScript code inside a markup, as demonstrated in this example.
stick = \markup { \with-dimensions #'(0 . 5) #'(0 . 5) \postscript " 0 6 translate 0.8 -0.8 scale 0 0 0 setrgbcolor [] 0 setdash 1 setlinewidth 0 setlinejoin 0 setlinecap gsave [1 0 0 1 0 0] concat gsave [1 0 0 1 -3.5406095 -199.29342] concat gsave 0 0 0 setrgbcolor newpath 7.1434065 200.94354 moveto 7.2109628 200.90454 7.2785188 200.86554 7.3460747 200.82654 curveto 8.2056347 202.31535 9.0651946 203.80414 9.9247546 205.29295 curveto 9.8571989 205.33195 9.7896429 205.37095 9.7220864 205.40996 curveto 8.8625264 203.92115 8.0029664 202.43233 7.1434065 200.94354 curveto closepath eofill grestore gsave 0 0 0 setrgbcolor newpath 4.9646672 203.10444 moveto 5.0036707 203.03688 5.0426744 202.96933 5.0816777 202.90176 curveto 6.5704792 203.76133 8.0592809 204.6209 9.5480824 205.48045 curveto 9.5090791 205.54801 9.4700754 205.61556 9.4310717 205.68311 curveto 7.94227 204.82356 6.4534687 203.96399 4.9646672 203.10444 curveto closepath eofill grestore gsave << /ShadingType 3 /ColorSpace /DeviceRGB /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441] /Extend [true true] /Domain [0 1] /Function << /FunctionType 3 /Functions [ << /FunctionType 2 /Domain [0 1] /C0 [1 1 1] /C1 [0.72941178 0.72941178 0.72941178] /N 1 >> ] /Domain [0 1] /Bounds [ ] /Encode [ 0 1 ] >> >> newpath 7.6422017 200.76488 moveto 7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto 6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto 6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto 7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto closepath clip gsave [ 0.052859054 0.063089841 -0.020912282 0.017521108 5.7334261 189.76443 ] concat shfill grestore grestore 0 0 0 setrgbcolor [] 0 setdash 0.027282091 setlinewidth 0 setlinejoin 0 setlinecap newpath 7.6422017 200.76488 moveto 7.6505696 201.02554 7.3905363 201.24867 7.1341335 201.20075 curveto 6.8759501 201.16916 6.6949602 200.87978 6.7801462 200.63381 curveto 6.8480773 200.39155 7.1438307 200.25377 7.3728389 200.35861 curveto 7.5332399 200.42458 7.6444521 200.59122 7.6422017 200.76488 curveto closepath stroke gsave << /ShadingType 3 /ColorSpace /DeviceRGB /Coords [113.13708 207.87465 0 113.13708 207.87465 16.162441] /Extend [true true] /Domain [0 1] /Function << /FunctionType 3 /Functions [ << /FunctionType 2 /Domain [0 1] /C0 [1 1 1] /C1 [0.72941178 0.72941178 0.72941178] /N 1 >> ] /Domain [0 1] /Bounds [ ] /Encode [ 0 1 ] >> >> newpath 5.2721217 202.83181 moveto 5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto 4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto 4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto 5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto closepath clip gsave [ 0.052859054 0.063089841 -0.020912282 0.017521108 3.363346 191.83136 ] concat shfill grestore grestore 0 0 0 setrgbcolor [] 0 setdash 0.027282091 setlinewidth 0 setlinejoin 0 setlinecap newpath 5.2721217 202.83181 moveto 5.2804896 203.09247 5.0204563 203.3156 4.7640539 203.26768 curveto 4.5058701 203.23609 4.3248803 202.94671 4.4100662 202.70074 curveto 4.4779975 202.45848 4.7737511 202.3207 5.0027593 202.42554 curveto 5.1631598 202.49149 5.2743721 202.65813 5.2721217 202.83181 curveto closepath stroke grestore grestore " } \score { b1^\stick }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Percussion beaters ] | [ Up : Percussion ] | [ Printing music with different time signatures > ] |
Percussion example
A short example taken from Stravinsky’s L’histoire du Soldat.
#(define mydrums '((bassdrum default #f 4) (snare default #f -4) (tambourine default #f 0))) \paper { tagline = ##f } global = { \time 3/8 s4. \time 2/4 s2*2 \time 3/8 s4. \time 2/4 s2 } drumsA = { \context DrumVoice << { \global } { \drummode { \autoBeamOff \stemDown sn8 \stemUp tamb s8 | sn4 \stemDown sn4 | \stemUp tamb8 \stemDown sn8 \stemUp sn16 \stemDown sn \stemUp sn8 | \stemDown sn8 \stemUp tamb s8 | \stemUp sn4 s8 \stemUp tamb } } >> } drumsB = { \drummode { s4 bd8 s2*2 s4 bd8 s4 bd8 s8 } } \layout { indent = 40 \context { \DrumStaff drumStyleTable = #(alist->hash-table mydrums) } } \score { \new StaffGroup << \new DrumStaff \with { instrumentName = \markup \center-column { "Tambourine" "et" "caisse claire s. timbre" } } \drumsA \new DrumStaff \with { instrumentName = "Grosse Caisse" } \drumsB >> }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Percussion example ] | [ Up : Percussion ] | [ Tam-tam example > ] |
Printing music with different time signatures
In the following snippet, two parts have a completely different time signature, yet remain synchronized.
The bar lines can no longer be printed at the Score
level; to
allow independent bar lines in each part, the
Default_barline_engraver
and Timing_translator
are moved
from the Score
context to the Staff
context.
If bar numbers are required, the Bar_number_engraver
should also
be moved, since it relies on properties set by the
Timing_translator
; a \with
block can be used to add bar
numbers to the relevant staff.
\paper { indent = #0 ragged-right = ##t tagline = ##f } global = { \time 3/4 { s2.*3 } \bar "" \break { s2.*3 } } \layout { \context { \Score \remove "Timing_translator" \remove "Bar_number_engraver" \override SpacingSpanner.uniform-stretching = ##t \override SpacingSpanner.strict-note-spacing = ##t proportionalNotationDuration = \musicLength 64 } \context { \Staff \consists "Timing_translator" } \context { \Voice \remove "Forbid_line_break_engraver" tupletFullLength = ##t } } Bassklarinette = \new Staff \with { \consists "Bar_number_engraver" barNumberVisibility = #(every-nth-bar-number-visible 2) \override BarNumber.break-visibility = #end-of-line-invisible } << \global { \bar "|" \clef treble \time 3/8 d''4. \bar "|" \time 3/4 r8 des''2( c''8) \bar "|" \time 7/8 r4. ees''2 ~ \bar "|" \time 2/4 \tupletUp \tuplet 3/2 { ees''4 r4 d''4 ~ } \bar "|" \time 3/8 \tupletUp \tuplet 4/3 { d''4 r4 } \bar "|" \time 2/4 e''2 \bar "|" \time 3/8 es''4. \bar "|" \time 3/4 r8 d''2 r8 \bar "|" } >> Perkussion = \new StaffGroup << \new Staff << \global { \bar "|" \clef percussion \time 3/4 r4 c'2 ~ \bar "|" c'2. \bar "|" R2. \bar "|" r2 g'4 ~ \bar "|" g'2. ~ \bar "|" g'2. } >> \new Staff << \global { \bar "|" \clef percussion \time 3/4 R2. \bar "|" g'2. ~ \bar "|" g'2. \bar "|" r4 g'2 ~ \bar "|" g'2 r4 \bar "|" g'2. } >> >> \score { << \Bassklarinette \Perkussion >> }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Printing music with different time signatures ] | [ Up : Percussion ] | [ Tambourine example > ] |
Tam-tam example
A tam-tam example, entered with ’tt’
#(define mydrums '((tamtam default #f 0))) \new DrumStaff \with { instrumentName = #"Tamtam" } \drummode { \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \override Staff.StaffSymbol.line-positions = #'( 0 ) \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5) tt 1 \pp \laissezVibrer } \paper { tagline = ##f }
[ << Percussion ] | [Top][Contents] | [ Fretted strings >> ] |
[ < Tam-tam example ] | [ Up : Percussion ] | [ Fretted strings > ] |
Tambourine example
A tambourine example, entered ’tamb’
\paper { tagline = ##f } #(define mydrums '((tambourine default #f 0))) \new DrumStaff \with { instrumentName = #"Tambourine" } \drummode { \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums) \override Staff.StaffSymbol.line-positions = #'( 0 ) \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5) \time 6/8 tamb8. 16 8 8 8 8 | tamb4. 8 8 8 | % the trick with the scaled duration and the shorter rest % is neccessary for the correct ending of the trill-span! tamb2.*5/6 \startTrillSpan s8 \stopTrillSpan | }
[ << Percussion ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Tambourine example ] | [ Up : Top ] | [ Adding fingerings to a score > ] |
Fretted strings
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Fretted strings ] | [ Up : Fretted strings ] | [ Adding fingerings to tablatures > ] |
Adding fingerings to a score
Fingering instructions can be entered using a simple syntax.
\relative c'' { c4-1 d-2 f-4 e-3 }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Adding fingerings to a score ] | [ Up : Fretted strings ] | [ Adding markups in a tablature > ] |
Adding fingerings to tablatures
To add fingerings to tablatures, use a combination of \markup
and \finger
.
one = \markup { \finger 1 } two = \markup { \finger 2 } threeTwo = \markup { \override #'(baseline-skip . 2) \column { \finger 3 \finger 2 } } threeFour = \markup { \override #'(baseline-skip . 2) \column { \finger 3 \finger 4 } } \score { \new TabStaff { \tabFullNotation \stemUp e8\4^\one b\2 <g\3 e'\1>^>[ b\2 e\4] <a\3 fis'\1>^>^\threeTwo[ b\2 e\4] } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Adding fingerings to tablatures ] | [ Up : Fretted strings ] | [ Fingersatz auch innerhalb des Systems setzen > ] |
Adding markups in a tablature
By default markups does not show in a tablature.
To make them appear, simply use the command
\revert TabStaff.TextScript.stencil
%% http://lsr.di.unimi.it/LSR/Item?id=919 % by P.P.Schneider on June 2014 high = { r4 r8 <g c'> q r8 r4 } low = { c4 r4 c8 r8 g,8 b, } pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" } \score { \new TabStaff { \repeat unfold 2 << \high \\ \low \\ \pulse >> } \layout { \context { \TabStaff \clef moderntab \revert TextScript.stencil \override TextScript.font-series = #'bold \override TextScript.font-size = #-2 \override TextScript.color = #red } \context { \Score proportionalNotationDuration = \musicLength 8 } } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Adding markups in a tablature ] | [ Up : Fretted strings ] | [ Automatic Fretboards Barre > ] |
Fingersatz auch innerhalb des Systems setzen
Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems gesetzt. Das kann aber verändert werden.
\relative c' { <c-1 e-2 g-3 b-5>2 \override Fingering.staff-padding = #'() <c-1 e-2 g-3 b-5>4 g'-0 a8[-1 b]-2 g-0 r \override Fingering.add-stem-support = ##f a[-1 b]-2 g-0 r \override Fingering.add-stem-support = ##t a[-1 b]-2 g-0 r \override Fingering.add-stem-support = #only-if-beamed a[-1 b]-2 g-0 r }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Fingersatz auch innerhalb des Systems setzen ] | [ Up : Fretted strings ] | [ Changing fret orientations > ] |
Automatic Fretboards Barre
When automatic fretboards are used, barre indicators will be drawn whenever one finger is responsible for multiple strings.
If no finger indications are given in the chord from which the automatic fretboard is created, no barre indicators will be included, because there is no way to identify where barres should be placed.
\new FretBoards { <f,-1 c-3 f-4 a-2 c'-1 f'-1>1 <f, c f a c' f'>1 }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Automatic Fretboards Barre ] | [ Up : Fretted strings ] | [ Akkordglissando in Tabulaturen > ] |
Changing fret orientations
Fret diagrams can be oriented in three ways. By default the top string or fret in the different orientations will be aligned.
\include "predefined-guitar-fretboards.ly" << \chords { c1 c1 c1 } \new FretBoards { \chordmode { c1 \override FretBoard.fret-diagram-details.orientation = #'landscape c1 \override FretBoard.fret-diagram-details.orientation = #'opposing-landscape c1 } } \new Voice { c'1 c'1 c' } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Changing fret orientations ] | [ Up : Fretted strings ] | [ Akkordänderungen für Bunddiagramme > ] |
Akkordglissando in Tabulaturen
Gleiten von Akkorden kann sowohl im normalen Notensystem als auch in einer Tabulatur notiert werden. Saitennummern werden für Tabulaturen benötigt, weil die automatische Saitenberechnung unterschiedlich für Akkorde und einzelne Noten funktioniert.
myMusic = \relative c' { <c e g>1 \glissando <f a c> <cis, eis gis>1 \glissando <f a c> <cis eis gis>1 \glissando <f a c\3> } \score { << \new Staff { \clef "treble_8" \omit StringNumber \myMusic } \new TabStaff \myMusic >> } \score { << \new Staff { \clef "treble_8" \omit StringNumber \myMusic } \new TabStaff \with { \override Glissando.style = #'none } { \myMusic } >> } \paper { tagline = ##f }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Akkordglissando in Tabulaturen ] | [ Up : Fretted strings ] | [ Chords with stretched fingering for FretBoards and TabVoice > ] |
Akkordänderungen für Bunddiagramme
Bunddiagramme können definiert werden, sodass sie nur angezeigt werden, wenn der Akkord sich ändert oder eine neue Zeile anfängt.
\include "predefined-guitar-fretboards.ly" \paper { tagline = ##f } myChords = \chordmode { c1 c1 \break \set chordChanges = ##t c1 c1 \break c1 c1 } << \new ChordNames { \myChords } \new FretBoards { \myChords } \new Staff { \myChords } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Akkordänderungen für Bunddiagramme ] | [ Up : Fretted strings ] | [ Position von Fingersatz in Akkorden kontrollieren > ] |
Chords with stretched fingering for FretBoards and TabVoice
Sometimes chords with a stretched fingering are required. If not
otherwise specified the context-property maximumFretStretch
is
set to 4
, though. Resulting in a warning about "No string for
pitch ..." and the note is omitted. You may set
maximumFretStretch
to an approppriate value or explecitely
assign string-numbers to all notes of a chord.
%% The code below will print two warnings, which may be omitted by uncommenting: %#(for-each (lambda (x) (ly:expect-warning "No string for pitch")) (iota 2)) mus = { <c' bes'> <c'\2 bes'> \set maximumFretStretch = 5 <c' bes'> <c'\2 bes'\1> } << \new FretBoards \mus \new TabVoice \mus >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Chords with stretched fingering for FretBoards and TabVoice ] | [ Up : Fretted strings ] | [ Bunddiagramme anpassen > ] |
Position von Fingersatz in Akkorden kontrollieren
Die Position von Fingersatzzahlen kann exakt kontrolliert werden.
\relative c' { \set fingeringOrientations = #'(left) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(down right up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(up) <c-1 e-3 a-5>4 \set fingeringOrientations = #'(left) <c-1>2 \set fingeringOrientations = #'(down) <e-3>2 \set stringNumberOrientations = #'(up left down) <f\3 a\2 c\1>1 \set strokeFingerOrientations = #'(down right up) <c\rightHandFinger 1 e\rightHandFinger 2 c'\rightHandFinger 4 > }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Position von Fingersatz in Akkorden kontrollieren ] | [ Up : Fretted strings ] | [ Anpassung von Beschriftungs-Bunddiagrammen > ] |
Bunddiagramme anpassen
Eigenschaften von Bunddiagrammen können in
'fret-diagram-details
verändert werden. Einstellungen mit
dem \override
-Befehl werden dem FretBoards.FretBoard
-Objekt
zugewiesen. Genauso wie Voice
ist auch FretBoards
ein
Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl
weggelassen werden kann.
\include "predefined-guitar-fretboards.ly" \storePredefinedDiagram #default-fret-table \chordmode { c' } #guitar-tuning "x;1-1-(;3-2;3-3;3-4;1-1-);" % shorthand oo = #(define-music-function (grob-path value) (list? scheme?) #{ \once \override $grob-path = #value #}) << \new ChordNames { \chordmode { c1 | c | c | d } } \new FretBoards { % Set global properties of fret diagram \override FretBoards.FretBoard.size = 1.2 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \chordmode { c \oo FretBoard.size #1.0 \oo FretBoard.fret-diagram-details.barre-type #'straight \oo FretBoard.fret-diagram-details.dot-color #'black \oo FretBoard.fret-diagram-details.finger-code #'below-string c' \oo FretBoard.fret-diagram-details.barre-type #'none \oo FretBoard.fret-diagram-details.number-type #'arabic \oo FretBoard.fret-diagram-details.orientation #'landscape \oo FretBoard.fret-diagram-details.mute-string "M" \oo FretBoard.fret-diagram-details.label-dir #LEFT \oo FretBoard.fret-diagram-details.dot-color #'black c' \oo FretBoard.fret-diagram-details.finger-code #'below-string \oo FretBoard.fret-diagram-details.dot-radius #0.35 \oo FretBoard.fret-diagram-details.dot-position #0.5 \oo FretBoard.fret-diagram-details.fret-count #3 d } } \new Voice { c'1 | c' | c' | d' } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Bunddiagramme anpassen ] | [ Up : Fretted strings ] | [ Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen > ] |
Anpassung von Beschriftungs-Bunddiagrammen
Bunddiagramme können mit der Eigenschaft 'fret-diagram-details
angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden,
können Veränderungen im Voice.TextScript
-Objekt oder direkt in der
Beschriftung vorgenommen werden.
<< \chords { c1 | c | c | d } \new Voice = "mel" { \textLengthOn % Set global properties of fret diagram \override TextScript.size = 1.2 \override TextScript.fret-diagram-details.finger-code = #'in-dot \override TextScript.fret-diagram-details.dot-color = #'white %% C major for guitar, no barre, using defaults % terse style c'1^\markup { \fret-diagram-terse "x;3-3;2-2;o;1-1;o;" } %% C major for guitar, barred on third fret % verbose style % size 1.0 % roman fret label, finger labels below string, straight barre c'1^\markup { % standard size \override #'(size . 1.0) { \override #'(fret-diagram-details . ( (number-type . roman-lower) (finger-code . in-dot) (barre-type . straight))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } } %% C major for guitar, barred on third fret % verbose style % landscape orientation, arabic numbers, M for mute string % no barre, fret label down or left, small mute label font c'1^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (number-type . arabic) (label-dir . -1) (mute-string . "M") (orientation . landscape) (barre-type . none) (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } %% simple D chord % terse style % larger dots, centered dots, fewer frets % label below string d'1^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Anpassung von Beschriftungs-Bunddiagrammen ] | [ Up : Fretted strings ] | [ Faking a hammer in tablatures > ] |
Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen
Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden neben denen, die schon für die Gitarre definiert sind. Dieses Schnipsel zeigt, wie man eine neue Saitenstimmung definiert und dann eigene vordefinierte Bunddiagramme bestimmt. Das Beispiel ist für das venezualische Cuatro.
Dieses Schnipsel zeigt auch, wie Fingersatz in die Akkorde eingebunden werden kann, um als Referenzpunkt für die Akkordauswahl benutzt werden kann. Dieser Fingersatz wird im Bunddiagramm und in der Tabulatur, aber nicht in den Noten angezeigt.
Diese Bunddiagramme sind nicht transponierbar, weil sie Saiteninformationen enthalten. Das soll in der Zukunft verbessert werden.
% add FretBoards for the Cuatro % Note: This section could be put into a separate file % predefined-cuatro-fretboards.ly % and \included into each of your compositions cuatroTuning = #`(,(ly:make-pitch 0 6 0) ,(ly:make-pitch 1 3 SHARP) ,(ly:make-pitch 1 1 0) ,(ly:make-pitch 0 5 0)) dSix = { <a\4 b\1 d\3 fis\2> } dMajor = { <a\4 d\1 d\3 fis \2> } aMajSeven = { <a\4 cis\1 e\3 g\2> } dMajSeven = { <a\4 c\1 d\3 fis\2> } gMajor = { <b\4 b\1 d\3 g\2> } \storePredefinedDiagram #default-fret-table \dSix #cuatroTuning "o;o;o;o;" \storePredefinedDiagram #default-fret-table \dMajor #cuatroTuning "o;o;o;3-3;" \storePredefinedDiagram #default-fret-table \aMajSeven #cuatroTuning "o;2-2;1-1;2-3;" \storePredefinedDiagram #default-fret-table \dMajSeven #cuatroTuning "o;o;o;1-1;" \storePredefinedDiagram #default-fret-table \gMajor #cuatroTuning "2-2;o;1-1;o;" % end of potential include file /predefined-cuatro-fretboards.ly #(set-global-staff-size 16) primerosNames = \chordmode { d:6 d a:maj7 d:maj7 g } primeros = { \dSix \dMajor \aMajSeven \dMajSeven \gMajor } \score { << \new ChordNames { \set chordChanges = ##t \primerosNames } \new Staff { \new Voice \with { \remove "New_fingering_engraver" } \relative c'' { \primeros } } \new FretBoards { \set Staff.stringTunings = #cuatroTuning % \override FretBoard % #'(fret-diagram-details string-count) = 4 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \primeros } \new TabStaff \relative c'' { \set TabStaff.stringTunings = #cuatroTuning \primeros } >> \layout { \context { \Score \override SpacingSpanner.base-shortest-duration = \musicLength 16 } } \midi { } }
Faking a hammer in tablatures
A hammer in tablature can be faked with slurs.
\score { \new TabStaff { \relative c'' { \tabFullNotation c4( d) d( d) d2( c) } } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Faking a hammer in tablatures ] | [ Up : Fretted strings ] | [ Flamenco notation > ] |
Fingersatz, Saitennummern und Fingersatz für die rechte Hand
Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern und Fingersatz für die rechte Hand.
#(define RH rightHandFinger) \relative c { \clef "treble_8" <c-3\5\RH 1 >4 <e-2\4\RH 2 >4 <g-0\3\RH 3 >4 <c-1\2\RH 4 >4 }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Fingersatz, Saitennummern und Fingersatz für die rechte Hand ] | [ Up : Fretted strings ] | [ Fret diagrams explained and developed > ] |
Flamenco notation
For flamenco guitar, special notation is used:
- a golpe symbol to indicate a slap on the guitar body with the nail of the ring finger
- an arrow to indicate (the direction of) strokes
- different letters for fingering („p“: thumb, „i“: index finger, „m“: middle finger, „a“: ring finger and „x“: little finger)
- 3- and 4-finger rasgueados; stroke upwards with all fingers, ending with an up- and down using the index finger
- abanicos: strokes (in tuples) with thumb (down), little and index finger (both up). There’s also an abanico 2 where middle and ring finger are used instead of the little finger.
- alza pua: fast playing with the thumb
Most figures use arrows in combination with fingering; with abanicos and rasgueados, noteheads are printed only for the first chord.
This snippet contains some header-like code that can be copied as ‘flamenco.ly’ and included in source files.
%%%%%%% Cut here ----- Start 'flamenco.ly' % Text indicators : abanico = ^\markup\small { \italic Abanico } rasgueado = ^\markup\small { \italic Ras. } alzapua = ^\markup\small { \italic Alzapua } % Finger stroke symbols : strokeUp = \markup\combine\override #'(thickness . 1.3) \draw-line #'(0 . 2)\raise #2 \arrow-head #Y #UP ##f strokeDown = \markup\combine\arrow-head #Y #DOWN ##f \override #'(thickness . 1.3) \draw-line #'(0 . 2) % Golpe symbol : golpe = \markup { \filled-box #'(0 . 1) #'(0 . 1) #0 \hspace #-1.6 \with-color #white \filled-box #'(0.15 . 0.85) #'(0.15 . 0.85) #0 } % Strokes, fingers and golpe command : RHp = \rightHandFinger #1 RHi = \rightHandFinger #2 RHm = \rightHandFinger #3 RHa = \rightHandFinger #4 RHx = \rightHandFinger #5 RHu = \rightHandFinger \strokeUp RHd = \rightHandFinger \strokeDown RHg = \rightHandFinger \golpe % Just handy :) tupletOff = { \once \omit TupletNumber \once \omit TupletBracket } tupletsOff = { \omit TupletNumber \override TupletBracket.bracket-visibility = #'if-no-beam } tupletsOn = { \override TupletBracket.bracket-visibility = #'default \undo \omit TupletNumber } headsOff = { \hide TabNoteHead \hide NoteHead \override NoteHead.no-ledgers = ##t } headsOn = { \override TabNoteHead.transparent = ##f \override NoteHead.transparent = ##f \override NoteHead.no-ledgers = ##f } %%%%%%% Cut here ----- End 'flamenco.ly' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% part = \relative c' { \set strokeFingerOrientations = #'(up) \key a\major <a, e' a cis e\RHu\RHi>8 <a e' a cis e\RHd\RHi>8 r4 r2^\markup\golpe <a e' a cis e\RHu\RHi>8 <a e' a cis e\RHd\RHi>8 <a e' a cis e\RHu\RHi\RHg>8 <a e' a cis e\RHd\RHi>8 r2 <a e' a cis e\RHu\RHa>16\rasgueado \headsOff <a e' a cis e\RHu\RHm> <a e' a cis e\RHu\RHi> <a e' a cis e\RHd\RHi>~ \headsOn <a e' a cis e>2 r4 \tupletOff \tuplet 5/4 { <a e' a cis e\RHu\RHx>16\rasgueado \headsOff <a e' a cis e\RHu\RHa> <a e' a cis e\RHu\RHm> <a e' a cis e\RHu\RHi> <a e' a cis e\RHd\RHi>~ \headsOn } <a e' a cis e>2 r4 \tupletsOff \tuplet 3/2 { <a e' a cis e\RHd\RHp>8\abanico \headsOff <a e' a cis e\RHu\RHx> <a e' a cis e\RHu\RHi> \headsOn } \tuplet 3/2 { <a e' a cis e\RHd\RHp>8 \headsOff <a e' a cis e\RHu\RHx> <a e' a cis e\RHu\RHi> \headsOn } \tuplet 3/2 { <a e' a cis e\RHd\RHp>8 \headsOff <a e' a cis e\RHu\RHx> <a e' a cis e\RHu\RHi> \headsOn } \tuplet 3/2 { <a e' a cis e\RHd\RHp>8 \headsOff <a e' a cis e\RHu\RHx> <a e' a cis e\RHu\RHi> \headsOn } \tupletsOff \override Beam.positions = #'(2 . 2) \tuplet 3/2 { a8\RHp\alzapua <e' a\RHu\RHg> <e a\RHd> } \tuplet 3/2 { a,8\RHp <e' a\RHu\RHg> <e a\RHd> } \tuplet 3/2 { a,8\RHp <e' a\RHu\RHg> <e a\RHd> } \tuplet 3/2 { a,8\RHp <e' a\RHu\RHg> <e a\RHd> } \tupletsOn <a, e' a\RHu\RHm>1 \bar "|." } \score { \new StaffGroup << \context Staff = "part" << \clef "G_8" { \part } >> \context TabStaff { \part } >> \layout { ragged-right = ##t } } \paper { tagline = ##f }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Flamenco notation ] | [ Up : Fretted strings ] | [ Alternative Bunddiagrammtabellen > ] |
Fret diagrams explained and developed
This snippet shows many possibilities for obtaining and tweaking fret diagrams.
<< \chords { a1 a \bar "||" \break \repeat unfold 3 { c c c d d \bar "||" \break } } \new Voice { % Set global properties of fret diagram \override TextScript.size = 1.2 \override TextScript.fret-diagram-details .finger-code = #'below-string \override TextScript.fret-diagram-details .dot-color = #'black % 1 % % A chord for ukulele. a'1^\markup \override #'(fret-diagram-details . ((string-count . 4) (dot-color . white) (finger-code . in-dot))) \fret-diagram "4-2-2;3-1-1;2-o;1-o;" % 2 % % A chord for ukulele, with formatting defined in definition % string: 1.2 * size, 4 strings, 4 frets, fingerings below, % string dot radius .35 of fret spacing, dot position 0.55 of % fret spacing. a'1^\markup \override #'(fret-diagram-details . ((dot-color . white) (open-string . "o"))) \fret-diagram "s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;" %% %% These chords will be in normal orientation %% % 3 % % C major for guitar, barred on third fret: verbose style, % roman fret label, finger labels below string, straight barre. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) % 4 % % C major for guitar, barred on third fret: double barre used % to test barre function, verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) % 5 % % C major for guitar, with capo on third fret: verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) % 6 % % Simple D chord. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (string-thickness-factor . 0.3) (dot-position . 0.5) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" % 7 % % Simple D chord, large top fret thickness. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" %% %% These chords will be in landscape orientation %% \override TextScript.fret-diagram-details .orientation = #'landscape % 8 % % C major for guitar, barred on third fret: verbose style, % roman fret label, finger labels below string, straight % barre. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) % 9 % % C major for guitar, barred on third fret: Double barre % used to test barre function, verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) % 10 % % C major for guitar, with capo on third fret: verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) % 11 % % Simple D chord. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" % 12 % % Simple D chord, large top fret thickness. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" %% %% These chords will be in opposing-landscape orientation. %% \override TextScript.fret-diagram-details .orientation = #'opposing-landscape % 13 % % C major for guitar, barred on third fret: verbose style, % roman fret label, finger labels below string, straight % barre. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) % 14 % % C major for guitar, barred on third fret: double barre % used to test barre function, verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) % 15 % % C major for guitar, with capo on third fret: verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) % 16 % % Simple D chord. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" % 17 % % Simple D chord, large top fret thickness. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } >> \paper { tagline = ##f ragged-right = ##t indent = 0 system-system-spacing.basic-distance = 20 } \layout { \context { \Score \override SpacingSpanner.spacing-increment = 3 } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Fret diagrams explained and developed ] | [ Up : Fretted strings ] | [ Flageolett von Bundinstrumenten in einer Tabulatur > ] |
Alternative Bunddiagrammtabellen
Alternative Bunddiagrammtabellen können erstellt werden. Sie können benutzt werden, um alternative Bunddiagramme für einen bestimmten Akkord zu haben.
Damit eine alternative Bunddiagrammentabelle benutzt werden kann, muss die Tabelle zuerst erstellt werden. Dann werden die Bunddiagramme zur Tabelle hinzugefügt.
Die erstellte Bunddiagrammtabelle kann auch leer sein, oder sie kann aus einer existierenden Tabelle kopiert werden.
Die Tabelle, die eingesetzt wird, um vordefinierte Bunddiagramme anzuzeigen,
wird mit der Eigenschaft \predefinedDiagramTable
ausgewählt.
\include "predefined-guitar-fretboards.ly" % Make a blank new fretboard table #(define custom-fretboard-table-one (make-fretboard-table)) % Make a new fretboard table as a copy of default-fret-table #(define custom-fretboard-table-two (make-fretboard-table default-fret-table)) % Add a chord to custom-fretboard-table-one \storePredefinedDiagram #custom-fretboard-table-one \chordmode {c} #guitar-tuning "3-(;3;5;5;5;3-);" % Add a chord to custom-fretboard-table-two \storePredefinedDiagram #custom-fretboard-table-two \chordmode {c} #guitar-tuning "x;3;5;5;5;o;" << \chords { c1 | d1 | c1 | d1 | c1 | d1 | } \new FretBoards { \chordmode { \set predefinedDiagramTable = #default-fret-table c1 | d1 | \set predefinedDiagramTable = #custom-fretboard-table-one c1 | d1 | \set predefinedDiagramTable = #custom-fretboard-table-two c1 | d1 | } } \new Staff { \clef "treble_8" << \chordmode { c1 | d1 | c1 | d1 | c1 | d1 | } { s1_\markup "Default table" | s1 | s1_\markup \column {"New table" "from empty"} | s1 | s1_\markup \column {"New table" "from default"} | s1 | } >> } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Alternative Bunddiagrammtabellen ] | [ Up : Fretted strings ] | [ Guitar slides > ] |
Flageolett von Bundinstrumenten in einer Tabulatur
Flageolett für Bundinstrumente:
pinchedHarmonics = { \textSpannerDown \override TextSpanner.bound-details.left.text = \markup {\halign #-0.5 \teeny "PH" } \override TextSpanner.style = #'dashed-line \override TextSpanner.dash-period = 0.6 \override TextSpanner.bound-details.right.attach-dir = 1 \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . 1) } \override TextSpanner.bound-details.right.padding = -0.5 } harmonics = { % artificial harmonics (AH) \textLengthOn <\parenthesize b b'\harmonic>4_\markup { \teeny "AH 16" } <\parenthesize g g'\harmonic>4_\markup { \teeny "AH 17" } <\parenthesize d' d''\harmonic>2_\markup { \teeny "AH 19" } % pinched harmonics (PH) \pinchedHarmonics <a'\harmonic>2\startTextSpan <d''\harmonic>4 <e'\harmonic>4\stopTextSpan % tapped harmonics (TH) <\parenthesize g\4 g'\harmonic>4_\markup { \teeny "TH 17" } <\parenthesize a\4 a'\harmonic>4_\markup { \teeny "TH 19" } <\parenthesize c'\3 c''\harmonic>2_\markup { \teeny "TH 17" } % touch harmonics (TCH) a4( <e''\harmonic>2. )_\markup { \teeny "TCH" } } frettedStrings = { % artificial harmonics (AH) \harmonicByFret 4 g4\3 \harmonicByFret 5 d4\4 \harmonicByFret 7 g2\3 % pinched harmonics (PH) \harmonicByFret 7 d2\4 \harmonicByFret 5 d4\4 \harmonicByFret 7 a4\5 % tapped harmonics (TH) \harmonicByFret 5 d4\4 \harmonicByFret 7 d4\4 \harmonicByFret 5 g2\3 % touch harmonics (TCH) a4 \harmonicByFret 9 g2.\3 } \score { << \new Staff \with { \omit StringNumber } { \new Voice { \clef "treble_8" \harmonics } } \new TabStaff { \new TabVoice { \frettedStrings } } >> }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Flageolett von Bundinstrumenten in einer Tabulatur ] | [ Up : Fretted strings ] | [ Schlagrhythmus für Gitarren > ] |
Guitar slides
Unlike glissandos, slides may go from an imprecise point of the fretboard to a specific fret. A good way to do this is to add a hidden grace note before the note which is actually played, as demonstrated in the following example.
%% Hide fret number: useful to draw slide into/from a casual point of %% the fretboard. hideFretNumber = { \once \hide TabNoteHead \once \hide NoteHead \once \hide Stem \once \override NoteHead.no-ledgers = ##t \once \override Glissando.bound-details.left.padding = #0.3 } music= \relative c' { \grace { \hideFretNumber d8\2 \glissando s2 } g2\2 \grace { \hideFretNumber g8\2 \glissando s2 } d2 | \grace { \hideFretNumber c,8 \glissando s } f4\5^\markup \tiny { Slide into } \grace { \hideFretNumber f8 \glissando s } a4\4 \grace { \hideFretNumber e'8\3 \glissando s } b4\3^\markup \tiny { Slide from } \grace { \hideFretNumber b'8 \glissando s2 } g4 | } \score { << \new Staff { \clef "G_8" \music } \new TabStaff { \music } >> } \paper { tagline = ##f }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Guitar slides ] | [ Up : Fretted strings ] | [ Hammer on and pull off > ] |
Schlagrhythmus für Gitarren
In Gitarrennotation kann neben Melodie, Akkordbezeichnungen und Bunddiagrammen auch der Schlagrhythmus angegeben werden.
\include "predefined-guitar-fretboards.ly" << \new ChordNames { \chordmode { c1 | f | g | c } } \new FretBoards { \chordmode { c1 | f | g | c } } \new Voice \with { \consists "Pitch_squash_engraver" } { \relative c'' { \improvisationOn c4 c8 c c4 c8 c f4 f8 f f4 f8 f g4 g8 g g4 g8 g c4 c8 c c4 c8 c } } \new Voice = "melody" { \relative c'' { c2 e4 e4 f2. r4 g2. a4 e4 c2. } } \new Lyrics { \lyricsto "melody" { This is my song. I like to sing. } } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Schlagrhythmus für Gitarren ] | [ Up : Fretted strings ] | [ Hammer on and pull off using chords > ] |
Hammer on and pull off
Hammer-on and pull-off can be obtained using slurs.
\new TabStaff { \relative c' { d4( e\2) a( g) } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Hammer on and pull off ] | [ Up : Fretted strings ] | [ Hammer on and pull off using voices > ] |
Hammer on and pull off using chords
When using hammer-on or pull-off with chorded notes, only a single arc
is drawn. However „double arcs“ are possible by setting the
doubleSlurs
property to #t
.
\new TabStaff { \relative c' { % chord hammer-on and pull-off \set doubleSlurs = ##t <g' b>8( <a c> <g b>) } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Hammer on and pull off using chords ] | [ Up : Fretted strings ] | [ How to change fret diagram position > ] |
Hammer on and pull off using voices
The arc of hammer-on and pull-off is upwards in voices one and three and downwards in voices two and four:
\new TabStaff { \relative c' { << { \voiceOne g2( a) } \\ { \voiceTwo a,( b) } >> \oneVoice } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Hammer on and pull off using voices ] | [ Up : Fretted strings ] | [ Vorlage für Jazz-Combo > ] |
How to change fret diagram position
If you want to move the position of a fret diagram, for example, to avoid collision, or to place it between two notes, you have various possibilities:
1) modify #’padding or #’extra-offset values (as shown in the first snippet)
2) you can add an invisible voice and attach the fret diagrams to the invisible notes in that voice (as shown in the second example).
If you need to move the fret according with a rythmic position inside the bar (in the example, the third beat of the measure) the second example is better, because the fret is aligned with the third beat itself.
\header { tagline = ##f } harmonies = \chordmode { a8:13 % THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME \once \override ChordNames.ChordName.extra-offset = #'(10 . 0) b8:13 s2. % THIS LINE IS THE SECOND METHOD s4 s4 b4:13 } \score { << \new ChordNames \harmonies \new Staff {a8^\markup { \fret-diagram "6-x;5-0;4-2;3-0;2-0;1-2;" } % THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM \once \override TextScript.extra-offset = #'(10 . 0) b4.~^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break % HERE IS THE SECOND METHOD << { a8 b4.~ b4. a8} { s4 s4 s4^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } } >> } >> }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < How to change fret diagram position ] | [ Up : Fretted strings ] | [ Laissez vibrer ties > ] |
Vorlage für Jazz-Combo
Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung:
Alle Instrumente sind in \key c \major
(C-Dur) notiert. Das bezieht sich
auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn
sich die Noten innerhalb eines ranspose
-Abschnitts befinden.
\header { title = "Song" subtitle = "(tune)" composer = "Me" meter = "moderato" piece = "Swing" tagline = \markup { \column { "LilyPond example file by Amelie Zapf," "Berlin 07/07/2003" } } } % To make the example display in the documentation \paper { paper-width = 130 } %#(set-global-staff-size 16) \include "english.ly" %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%% sl = { \override NoteHead.style = #'slash \hide Stem } nsl = { \revert NoteHead.style \undo \hide Stem } crOn = \override NoteHead.style = #'cross crOff = \revert NoteHead.style %% insert chord name style stuff here. jazzChords = { } %%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%% global = { \time 4/4 } Key = { \key c \major } % ############ Horns ############ % ------ Trumpet ------ trpt = \transpose c d \relative c'' { \Key c1 | c | c | } trpHarmony = \transpose c' d { \jazzChords } trumpet = { \global \clef treble << \trpt >> } % ------ Alto Saxophone ------ alto = \transpose c a \relative c' { \Key c1 | c | c | } altoHarmony = \transpose c' a { \jazzChords } altoSax = { \global \clef treble << \alto >> } % ------ Baritone Saxophone ------ bari = \transpose c a' \relative c { \Key c1 c1 \sl d4^"Solo" d d d \nsl } bariHarmony = \transpose c' a \chordmode { \jazzChords s1 s d2:maj e:m7 } bariSax = { \global \clef treble << \bari >> } % ------ Trombone ------ tbone = \relative c { \Key c1 | c | c } tboneHarmony = \chordmode { \jazzChords } trombone = { \global \clef bass << \tbone >> } % ############ Rhythm Section ############# % ------ Guitar ------ gtr = \relative c'' { \Key c1 \sl b4 b b b \nsl c1 } gtrHarmony = \chordmode { \jazzChords s1 c2:min7+ d2:maj9 } guitar = { \global \clef treble << \gtr >> } %% ------ Piano ------ rhUpper = \relative c'' { \voiceOne \Key c1 | c | c } rhLower = \relative c' { \voiceTwo \Key e1 | e | e } lhUpper = \relative c' { \voiceOne \Key g1 | g | g } lhLower = \relative c { \voiceTwo \Key c1 | c | c } PianoRH = { \clef treble \global << \new Voice = "one" \rhUpper \new Voice = "two" \rhLower >> } PianoLH = { \clef bass \global << \new Voice = "one" \lhUpper \new Voice = "two" \lhLower >> } piano = { << \new Staff = "upper" \PianoRH \new Staff = "lower" \PianoLH >> } % ------ Bass Guitar ------ Bass = \relative c { \Key c1 | c | c } bass = { \global \clef bass << \Bass >> } % ------ Drums ------ up = \drummode { \voiceOne hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> } down = \drummode { \voiceTwo bd4 s bd s bd4 s bd s bd4 s bd s } drumContents = { \global << \new DrumVoice \up \new DrumVoice \down >> } %%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%% \score { << \new StaffGroup = "horns" << \new Staff = "trumpet" \with { instrumentName = "Trumpet" } \trumpet \new Staff = "altosax" \with { instrumentName = "Alto Sax" } \altoSax \new ChordNames = "barichords" \with { instrumentName = "Trumpet" } \bariHarmony \new Staff = "barisax" \with { instrumentName = "Bari Sax" } \bariSax \new Staff = "trombone" \with { instrumentName = "Trombone" } \trombone >> \new StaffGroup = "rhythm" << \new ChordNames = "chords" \gtrHarmony \new Staff = "guitar" \with { instrumentName = "Guitar" } \guitar \new PianoStaff = "piano" \with { instrumentName = "Piano" midiInstrument = "acoustic grand" } \piano \new Staff = "bass" \with { instrumentName = "Bass" } \bass \new DrumStaff \with { instrumentName = "Drums" } \drumContents >> >> \layout { \context { \Staff \RemoveEmptyStaves } \context { \Score \override BarNumber.padding = 3 \override RehearsalMark.padding = 2 skipBars = ##t } } \midi { } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Vorlage für Jazz-Combo ] | [ Up : Fretted strings ] | [ Let TabStaff print the topmost string at bottom > ] |
Laissez vibrer ties
Laissez vibrer ties have a fixed size. Their formatting can be tuned
using 'tie-configuration
.
\relative c' { <c e g>4\laissezVibrer r <c f g>\laissezVibrer r <c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8 <c d e f>4\laissezVibrer r \override LaissezVibrerTieColumn.tie-configuration = #`((-7 . ,DOWN) (-5 . ,DOWN) (-3 . ,UP) (-1 . ,UP)) <c d e f>4\laissezVibrer r }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Laissez vibrer ties ] | [ Up : Fretted strings ] | [ Letter tablature formatting > ] |
Let TabStaff print the topmost string at bottom
In tablatures usually the first string is printed topmost. If you want
to have it at the bottom change the
stringOneTopmost
-context-property. For a context-wide setting
this could be done in layout
as well.
%\layout { % \context { % \Score % stringOneTopmost = ##f % } % \context { % \TabStaff % tablatureFormat = #fret-letter-tablature-format % } %} m = { \cadenzaOn e, b, e gis! b e' \bar "||" } << \new Staff { \clef "G_8" <>_"default" \m <>_"italian (historic)"\m } \new TabStaff { \m \set Score.stringOneTopmost = ##f \set TabStaff.tablatureFormat = #fret-letter-tablature-format \m } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Let TabStaff print the topmost string at bottom ] | [ Up : Fretted strings ] | [ Referenz für Flageolett von offenen Saiten > ] |
Letter tablature formatting
Tablature can be formatted using letters instead of numbers.
music = \relative c { c4 d e f g4 a b c d4 e f g } << \new Staff { \clef "G_8" \music } \new TabStaff \with { tablatureFormat = #fret-letter-tablature-format } { \music } >>
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Letter tablature formatting ] | [ Up : Fretted strings ] | [ Positionierung von Fingersatz der rechten Hand > ] |
Referenz für Flageolett von offenen Saiten
Referenz für Flageolett von offenen Saiten:
openStringHarmonics = { \textSpannerDown \override TextSpanner.staff-padding = 3 \override TextSpanner.dash-fraction = 0.3 \override TextSpanner.dash-period = 1 %first harmonic \override TextSpanner.bound-details.left.text = \markup\small "1st harm. " \harmonicByFret 12 e,2\6\startTextSpan \harmonicByRatio #1/2 e,\6\stopTextSpan %second harmonic \override TextSpanner.bound-details.left.text = \markup\small "2nd harm. " \harmonicByFret 7 e,\6\startTextSpan \harmonicByRatio #1/3 e,\6 \harmonicByFret 19 e,\6 \harmonicByRatio #2/3 e,\6\stopTextSpan %\harmonicByFret 19 < e,\6 a,\5 d\4 > %\harmonicByRatio #2/3 < e,\6 a,\5 d\4 > %third harmonic \override TextSpanner.bound-details.left.text = \markup\small "3rd harm. " \harmonicByFret 5 e,\6\startTextSpan \harmonicByRatio #1/4 e,\6 \harmonicByFret 24 e,\6 \harmonicByRatio #3/4 e,\6\stopTextSpan \break %fourth harmonic \override TextSpanner.bound-details.left.text = \markup\small "4th harm. " \harmonicByFret 4 e,\6\startTextSpan \harmonicByRatio #1/5 e,\6 \harmonicByFret 9 e,\6 \harmonicByRatio #2/5 e,\6 \harmonicByFret 16 e,\6 \harmonicByRatio #3/5 e,\6\stopTextSpan %fifth harmonic \override TextSpanner.bound-details.left.text = \markup\small "5th harm. " \harmonicByFret 3 e,\6\startTextSpan \harmonicByRatio #1/6 e,\6\stopTextSpan \break %sixth harmonic \override TextSpanner.bound-details.left.text = \markup\small "6th harm. " \harmonicByFret 2.7 e,\6\startTextSpan \harmonicByRatio #1/7 e,\6\stopTextSpan %seventh harmonic \override TextSpanner.bound-details.left.text = \markup\small "7th harm. " \harmonicByFret 2.3 e,\6\startTextSpan \harmonicByRatio #1/8 e,\6\stopTextSpan %eighth harmonic \override TextSpanner.bound-details.left.text = \markup\small "8th harm. " \harmonicByFret 2 e,\6\startTextSpan \harmonicByRatio #1/9 e,\6\stopTextSpan } \score { << \new Staff \with { \omit StringNumber } { \new Voice { \clef "treble_8" \openStringHarmonics } } \new TabStaff { \new TabVoice { \openStringHarmonics } } >> } \paper { tagline = ##f }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Referenz für Flageolett von offenen Saiten ] | [ Up : Fretted strings ] | [ Polyphonie in einer Tabulatur > ] |
Positionierung von Fingersatz der rechten Hand
Man kann die Positionierung von Fingersatz der rechten Hand besser kontrollieren, wenn eine bestimmte Eigenschaft gesetzt wird, wie das folgende Beispiel zeigt:
#(define RH rightHandFinger) \relative c { \clef "treble_8" \set strokeFingerOrientations = #'(up down) <c\RH 1 e\RH 2 g\RH 3 c\RH 4 >4 \set strokeFingerOrientations = #'(up right down) <c\RH 1 e\RH 2 g\RH 3 c\RH 4 >4 \set strokeFingerOrientations = #'(left) <c\RH 1 e\RH 2 g\RH 3 c\RH 4 >2 \set strokeFingerOrientations = #'(right) c\RH 1 }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Positionierung von Fingersatz der rechten Hand ] | [ Up : Fretted strings ] | [ Gleiten (Glissando) in Tabulatur > ] |
Polyphonie in einer Tabulatur
Polyphonie kann in einer Tabulatur (TabStaff
) genauso wie in einem
normalen Notensystem erstellt werden.
upper = \relative c' { \time 12/8 \key e \minor \voiceOne r4. r8 e, fis g16 b g e e' b c b a g fis e } lower = \relative c { \key e \minor \voiceTwo r16 e d c b a g4 fis8 e fis g a b c } \score { << \new StaffGroup = "tab with traditional" << \new Staff = "guitar traditional" << \clef "treble_8" \new Voice = "upper" \upper \new Voice = "lower" \lower >> \new TabStaff = "guitar tab" << \new TabVoice = "upper" \upper \new TabVoice = "lower" \lower >> >> >> }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Polyphonie in einer Tabulatur ] | [ Up : Fretted strings ] | [ Hals- und Balkenverhalten in einer Tabulatur > ] |
Gleiten (Glissando) in Tabulatur
Gleiten kann sowohl in normalem Notensystem als auch in Tabulaturen notiert werden:
slides = { c'8\3(\glissando d'8\3) c'8\3\glissando d'8\3 \hideNotes \grace { g16\glissando } \unHideNotes c'4\3 \afterGrace d'4\3\glissando { \stemDown \hideNotes g16 } \unHideNotes } \score { << \new Staff { \clef "treble_8" \slides } \new TabStaff { \slides } >> \layout { \context { \Score \override Glissando.minimum-length = 4 \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods \override Glissando.thickness = 2 \omit StringNumber % or: %\override StringNumber.stencil = ##f } } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Gleiten (Glissando) in Tabulatur ] | [ Up : Fretted strings ] | [ String number extender lines > ] |
Hals- und Balkenverhalten in einer Tabulatur
Die Richtung von Hälsen wird in Tabulaturen genauso wie in normaler Notation eingestellt. Balken können horizontal eingestellt werden, wie das Beispiel zeigt.
\new TabStaff { \relative c { \tabFullNotation g16 b d g b d g b \stemDown \override Beam.concaveness = 10000 g,,16 b d g b d g b } }
[ << Fretted strings ] | [Top][Contents] | [ Unfretted strings >> ] |
[ < Hals- und Balkenverhalten in einer Tabulatur ] | [ Up : Fretted strings ] | [ Unfretted strings > ] |
String number extender lines
Make an extender line for string number indications, showing that a series of notes is supposed to be played all on the same string.
stringNumberSpanner = #(define-music-function (StringNumber) (string?) #{ \override TextSpanner.style = #'solid \override TextSpanner.font-size = #-5 \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.text = \markup { \circle \number $StringNumber } #}) \relative c { \clef "treble_8" \stringNumberSpanner "5" \textSpannerDown a8\startTextSpan b c d e f\stopTextSpan \stringNumberSpanner "4" g\startTextSpan a bes4 a g2\stopTextSpan }
[ << Fretted strings ] | [Top][Contents] | [ Winds >> ] |
[ < String number extender lines ] | [ Up : Top ] | [ Creating slurs across voices > ] |
Unfretted strings
[ << Unfretted strings ] | [Top][Contents] | [ Winds >> ] |
[ < Unfretted strings ] | [ Up : Unfretted strings ] | [ Dotted harmonics > ] |
Creating slurs across voices
In some situations, it may be necessary to create slurs between notes
from different voices. The solution is to add invisible notes to one of
the voices, using \hideNotes
.
This example is measure 235 of the Ciaconna from Bach’s 2nd Partita for solo violin, BWV 1004.
\relative c' { << { d16( a') s a s a[ s a] s a[ s a] } \\ { \slurUp bes,16[ s e]( \hideNotes a) \unHideNotes f[( \hideNotes a) \unHideNotes fis]( \hideNotes a) \unHideNotes g[( \hideNotes a) \unHideNotes gis]( \hideNotes a) } >> }
[ << Unfretted strings ] | [Top][Contents] | [ Winds >> ] |
[ < Creating slurs across voices ] | [ Up : Unfretted strings ] | [ Snap-pizzicato or Bartok pizzicato > ] |
Dotted harmonics
Artificial harmonics using \harmonic
do not show dots. To
override this behavior, set the context property harmonicDots
.
\relative c''' { \time 3/4 \key f \major \set harmonicDots = ##t <bes f'\harmonic>2. ~ <bes f'\harmonic>4. <a e'\harmonic>8( <gis dis'\harmonic> <g d'\harmonic>) <fis cis'\harmonic>2. <bes f'\harmonic>2. }
[ << Unfretted strings ] | [Top][Contents] | [ Winds >> ] |
[ < Dotted harmonics ] | [ Up : Unfretted strings ] | [ Vorlage für Streichquartett (einfach) > ] |
Snap-pizzicato or Bartok pizzicato
A snap-pizzicato (also known as „Bartok pizzicato“) is a „strong pizzicato where the string is plucked vertically by snapping and rebounds off the fingerboard of the instrument“ (Wikipedia). It is denoted by a circle with a vertical line going from the center upwards outside the circle.
\relative c' { c4\snappizzicato <c' e g>4\snappizzicato <c' e g>4^\snappizzicato <c, e g>4_\snappizzicato }
[ << Unfretted strings ] | [Top][Contents] | [ Winds >> ] |
[ < Snap-pizzicato or Bartok pizzicato ] | [ Up : Unfretted strings ] | [ Vorlage für Streichquartett mit einzelnen Stimmen > ] |
Vorlage für Streichquartett (einfach)
Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier
wird auch eine „\global
“-Variable für Taktart und
Vorzeichen benutzt.
global= { \time 4/4 \key c \major } violinOne = \new Voice \relative c'' { c2 d e1 \bar "|." } violinTwo = \new Voice \relative c'' { g2 f e1 \bar "|." } viola = \new Voice \relative c' { \clef alto e2 d c1 \bar "|." } cello = \new Voice \relative c' { \clef bass c2 b a1 \bar "|." } \score { \new StaffGroup << \new Staff \with { instrumentName = "Violin 1" } << \global \violinOne >> \new Staff \with { instrumentName = "Violin 2" } << \global \violinTwo >> \new Staff \with { instrumentName = "Viola" } << \global \viola >> \new Staff \with { instrumentName = "Cello" } << \global \cello >> >> \layout { } \midi { } }
[ << Unfretted strings ] | [Top][Contents] | [ Winds >> ] |
[ < Vorlage für Streichquartett (einfach) ] | [ Up : Unfretted strings ] | [ Winds > ] |
Vorlage für Streichquartett mit einzelnen Stimmen
Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt voneinander notieren können. Im nächsten Beispiel wird nun gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen.
Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen
sind in den Kommentaren am Anfang jeder Datei enthalten. piece.ly
enthält die Noten. Die anderen Dateien – score.ly,
vn1.ly, vn2.ly, vla.ly und
vlc.ly – erstellen daraus die entsprechenden Stimmen bzw. die
Partitur (score.ly). Mit ag
wird den Stimmen ein Name
zugewiesen, auf den zurückgegriffen werden kann.
% piece.ly % (This is the global definitions file) global= { \time 4/4 \key c \major } Violinone = \new Voice \relative c'' { c2 d e1 \bar "|." } Violintwo = \new Voice \relative c'' { g2 g e1 \bar "|." } Viola = \new Voice \relative c' { \clef alto e2 d c1 \bar "|." } Cello = \new Voice \relative c' { \clef bass c2 b a1 \bar "|." } music = { << \tag #'score \tag #'vn1 \new Staff \with { instrumentName = "Violin 1" } << \global \Violinone >> \tag #'score \tag #'vn2 \new Staff \with { instrumentName = "Violin 2" } << \global \Violintwo >> \tag #'score \tag #'vla \new Staff \with { instrumentName = "Viola" } << \global \Viola >> \tag #'score \tag #'vlc \new Staff \with { instrumentName = "Cello" } << \global \Cello >> >> } % These are the other files you need to save on your computer % score.ly % (This is the main file) % uncomment the line below when using a separate file %\include "piece.ly" #(set-global-staff-size 14) \score { \new StaffGroup \keepWithTag #'score \music \layout { } \midi { } } %{ Uncomment this block when using separate files % vn1.ly % (This is the Violin 1 part file) \include "piece.ly" \score { \keepWithTag #'vn1 \music \layout { } } % vn2.ly % (This is the Violin 2 part file) \include "piece.ly" \score { \keepWithTag #'vn2 \music \layout { } } % vla.ly % (This is the Viola part file) \include "piece.ly" \score { \keepWithTag #'vla \music \layout { } } % vlc.ly % (This is the Cello part file) \include "piece.ly" \score { \keepWithTag #'vlc \music \layout { } } %}
[ << Unfretted strings ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Vorlage für Streichquartett mit einzelnen Stimmen ] | [ Up : Top ] | [ Größe von Holzbläserdiagrammen ändern > ] |
Winds
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Winds ] | [ Up : Winds ] | [ Fingering symbols for wind instruments > ] |
Größe von Holzbläserdiagrammen ändern
Die Größe und Dicke der Holzbläserdiagramme kann geändert werden.
\relative c'' { \textLengthOn c1^\markup \woodwind-diagram #'piccolo #'() c^\markup \override #'(size . 1.5) { \woodwind-diagram #'piccolo #'() } c^\markup \override #'(thickness . 0.15) { \woodwind-diagram #'piccolo #'() } }
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Größe von Holzbläserdiagrammen ändern ] | [ Up : Winds ] | [ Flute slap notation > ] |
Fingering symbols for wind instruments
Special symbols can be achieved by combining existing glyphs, which is useful for wind instruments.
mymarkup = { \once \override TextScript.outside-staff-padding = 0 \once \override TextScript.staff-padding = 0 \once \override TextScript.padding = 0.2 \once \override TextScript.X-offset = #(lambda (g) (+ (ly:self-alignment-interface::centered-on-x-parent g) (ly:self-alignment-interface::x-aligned-on-self g))) } \relative c' { g\open \mymarkup g^\markup \combine \musicglyph "scripts.open" \musicglyph "scripts.tenuto" \mymarkup g^\markup \combine \musicglyph "scripts.open" \musicglyph "scripts.stopped" g\stopped }
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Fingering symbols for wind instruments ] | [ Up : Winds ] | [ Graphische und Text-Holzbläserdiagramme > ] |
Flute slap notation
It is possible to indicate special articulation techniques such as a
flute „tongue slap“ by replacing the note head with the appropriate
glyph. For that we can draw the accent-like note head with
\markup
.
slap = #(define-music-function (music) (ly:music?) #{ \temporary \override NoteHead.stencil = #ly:text-interface::print \temporary \override NoteHead.text = \markup \translate #'(1 . 0) \override #'(thickness . 1.4) \overlay { \draw-line #'(-1.2 . 0.4) \draw-line #'(-1.2 . -0.4) } \temporary \override NoteHead.stem-attachment = #(lambda (grob) (let* ((stem (ly:grob-object grob 'stem)) (dir (ly:grob-property stem 'direction UP)) (is-up (eqv? dir UP))) (cons dir (if is-up 0 -0.8)))) #music \revert NoteHead.stencil \revert NoteHead.text \revert NoteHead.stem-attachment #}) \relative c' { c4 \slap c d r \slap { g4 a } b r }
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Flute slap notation ] | [ Up : Winds ] | [ Recorder fingering chart > ] |
Graphische und Text-Holzbläserdiagramme
In vielen Fällen können die nicht in der mittleren Reihe befindlichen Löcher dargestellt werden, indem man die Lochbezeichnung oder graphische Zeichen benutzt.
\relative c'' { \textLengthOn c1^\markup \woodwind-diagram #'piccolo #'((cc . (one three)) (lh . (gis)) (rh . (ees))) c^\markup \override #'(graphical . #f) { \woodwind-diagram #'piccolo #'((cc . (one three)) (lh . (gis)) (rh . (ees))) } }
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Graphische und Text-Holzbläserdiagramme ] | [ Up : Winds ] | [ Liste der Löcher für Holzbläserdiagramme > ] |
Recorder fingering chart
The following example demonstrates how fingering charts for wind instruments can be realized.
% range chart for paetzold contrabass recorder centermarkup = { \once \override TextScript.self-alignment-X = #CENTER \once \override TextScript.X-offset = #(lambda (g) (+ (ly:self-alignment-interface::centered-on-x-parent g) (ly:self-alignment-interface::x-aligned-on-self g))) } \score { \new Staff \with { \remove "Time_signature_engraver" \omit Stem \omit Flag \consists "Horizontal_bracket_engraver" } { \clef bass \set Score.timing = ##f f,1*1/4 \glissando \clef violin gis'1*1/4 \stemDown a'4^\markup "1)" \centermarkup \once \override TextScript.padding = 2 bes'1*1/4_\markup \override #'(baseline-skip . 1.7) \column { \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 3 \finger 4 \finger 5 \finger 6 \finger 7 } b'1*1/4 c''4^\markup "1)" \centermarkup \once \override TextScript.padding = 2 cis''1*1/4 deh''1*1/4 \centermarkup \once \override TextScript.padding = 2 \once \override Staff.HorizontalBracket.direction = #UP e''1*1/4_\markup \override #'(baseline-skip . 1.7) \column { \fontsize #-5 \slashed-digit #0 \finger 1 \finger 2 \finger 4 \finger 5}\startGroup f''1*1/4^\markup "2)"\stopGroup } }
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Recorder fingering chart ] | [ Up : Winds ] | [ Liste der Holzbläserdiagramme > ] |
Liste der Löcher für Holzbläserdiagramme
Dieses Schnipsel erzeugt eine Liste aller möglichen Löcher und Locheinstellungen
für Holzbläserdiagramme, wie sie in der Datei
scm/define-woodwind-diagrams.scm definiert sind. Die Liste wird
in der Log-Datei angezeigt, nicht in den Noten. Wenn Ausgabe auf der Kommandozeile
gewünscht ist, muss (current-error-port)
von den Befehlen weggelassen
werden.
#(print-keys-verbose 'piccolo (current-error-port)) #(print-keys-verbose 'flute (current-error-port)) #(print-keys-verbose 'flute-b-extension (current-error-port)) #(print-keys-verbose 'tin-whistle (current-error-port)) #(print-keys-verbose 'oboe (current-error-port)) #(print-keys-verbose 'clarinet (current-error-port)) #(print-keys-verbose 'bass-clarinet (current-error-port)) #(print-keys-verbose 'low-bass-clarinet (current-error-port)) #(print-keys-verbose 'saxophone (current-error-port)) #(print-keys-verbose 'soprano-saxophone (current-error-port)) #(print-keys-verbose 'alto-saxophone (current-error-port)) #(print-keys-verbose 'tenor-saxophone (current-error-port)) #(print-keys-verbose 'baritone-saxophone (current-error-port)) #(print-keys-verbose 'bassoon (current-error-port)) #(print-keys-verbose 'contrabassoon (current-error-port)) \score {c''1}
[ << Winds ] | [Top][Contents] | [ Ancient notation >> ] |
[ < Liste der Löcher für Holzbläserdiagramme ] | [ Up : Winds ] | [ Ancient notation > ] |
Liste der Holzbläserdiagramme
Folgende Noten zeige alle Holzbläserdiagramme, die für LilyPond definiert sind.
\layout { indent = 0 } \relative c' { \textLengthOn c1^ \markup { \center-column { 'tin-whistle " " \woodwind-diagram #'tin-whistle #'() } } c1^ \markup { \center-column { 'piccolo " " \woodwind-diagram #'piccolo #'() } } c1^ \markup { \center-column { 'flute " " \woodwind-diagram #'flute #'() } } c1^\markup { \center-column { 'oboe " " \woodwind-diagram #'oboe #'() } } c1^\markup { \center-column { 'clarinet " " \woodwind-diagram #'clarinet #'() } } c1^\markup { \center-column { 'bass-clarinet " " \woodwind-diagram #'bass-clarinet #'() } } c1^\markup { \center-column { 'saxophone " " \woodwind-diagram #'saxophone #'() } } c1^\markup { \center-column { 'bassoon " " \woodwind-diagram #'bassoon #'() } } c1^\markup { \center-column { 'contrabassoon " " \woodwind-diagram #'contrabassoon #'() } } }
[ << Winds ] | [Top][Contents] | [ World music >> ] |
[ < Liste der Holzbläserdiagramme ] | [ Up : Top ] | [ Adding a figured bass above or below the notes > ] |
Ancient notation
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Ancient notation ] | [ Up : Ancient notation ] | [ Ancient fonts > ] |
Adding a figured bass above or below the notes
When writing a figured bass, you can place the figures above or below
the bass notes, by defining the
BassFigureAlignmentPositioning.direction
property (exclusively
in a Staff
context). Choices are #UP
(or #1
),
#CENTER
(or #0
) and #DOWN
(or #-1
).
This property can be changed as many times as you wish. Use
\once \override
if you don’t want the override to apply to the
whole score.
bass = { \clef bass g4 b, c d e d8 c d2 } continuo = \figuremode { <_>4 <6>4 <5/>4 \override Staff.BassFigureAlignmentPositioning.direction = #UP %\bassFigureStaffAlignmentUp < _+ >4 <6> \set Staff.useBassFigureExtenders = ##t \override Staff.BassFigureAlignmentPositioning.direction = #DOWN %\bassFigureStaffAlignmentDown <4>4. <4>8 <_+>4 } \score { << \new Staff = bassStaff \bass \context Staff = bassStaff \continuo >> }
Ancient fonts
Shown here are many of the symbols that are included in LilyPond’s ancient notation.
\paper { tagline = ##f } m = { c1 e f ges cis' \bar "||" } \score { \new VaticanaVoice { \override NoteHead.style = #'vaticana.punctum \key es \major \textMark \markup \rounded-box "Vaticana clefs, custos and note heads" \clef "vaticana-fa2" <>^"vaticana.punctum" \m \override NoteHead.style = #'vaticana.inclinatum <>^"vaticana.inclinatum" \m \override NoteHead.style = #'vaticana.quilisma <>^"vaticana.quilisma" \m \clef "vaticana-fa1" \override NoteHead.style = #'vaticana.plica <>^"vaticana.plica" \m \override NoteHead.style = #'vaticana.reverse.plica <>^"vaticana.reverse.plica" \m \override NoteHead.style = #'vaticana.punctum.cavum <>^"vaticana.punctum.cavum" \m \override NoteHead.style = #'vaticana.lpes <>^"vaticana.punctum.lpes" \m \override NoteHead.style = #'vaticana.upes <>^"vaticana.punctum.upes" \m \override NoteHead.style = #'vaticana.vupes <>^"vaticana.punctum.vupes" \m \override NoteHead.style = #'vaticana.linea.punctum <>^"vaticana.punctum.linea" \m \override NoteHead.style = #'vaticana.epiphonus <>^"vaticana.punctum.epiphonus" \m \override NoteHead.style = #'vaticana.cephalicus <>^"vaticana.punctum.cephalicus" \m \break \textMark \markup \rounded-box "Medicaea clefs, custos and note heads" \set VaticanaStaff.alterationGlyphs = #alteration-medicaea-glyph-name-alist \override VaticanaStaff.Custos.style = #'medicaea \clef "medicaea-fa2" \override NoteHead.style = #'medicaea.punctum <>^"medicaea.punctum" \m \clef "medicaea-do2" \override NoteHead.style = #'medicaea.inclinatum <>^"medicaea.inclinatum" \m \override NoteHead.style = #'medicaea.virga <>^"medicaea.virga" \m \clef "medicaea-fa1" \override NoteHead.style = #'medicaea.rvirga <>^"medicaea.rvirga" \m \break \textMark \markup \rounded-box "Hufnagel clefs, custos and note heads" \set Staff.alterationGlyphs = #alteration-hufnagel-glyph-name-alist \override VaticanaStaff.Custos.style = #'hufnagel \clef "hufnagel-fa2" \break \override NoteHead.style = #'hufnagel.punctum <>^"hufnagel.punctum" \m \clef "hufnagel-do2" \override NoteHead.style = #'hufnagel.lpes <>^"hufnagel.lpes" \m \clef "hufnagel-do-fa" \override NoteHead.style = #'hufnagel.virga <>^"hufnagel.virga" \m } \layout { indent = 0.0 \context { \Score \override TextScript.font-size = #-2 \override TextMark.break-align-symbols = #'(left-edge clef staff-bar) \override TextMark.padding = 4 \omit BarNumber } \context { \VaticanaStaff alterationGlyphs = #alteration-vaticana-glyph-name-alist \override Clef.space-alist = #(grob-transformer 'space-alist (lambda (grob orig) (acons 'custos '(extra-space . 0.7) orig))) } } }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Ancient fonts ] | [ Up : Ancient notation ] | [ Ancient time signatures > ] |
Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals
Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die Länge von Pausen an.
chant = \relative c' { \set Score.timing = ##f f4 a2 \divisioMinima g4 b a2 f2 \divisioMaior g4( f) f( g) a2 \finalis } verba = \lyricmode { Lo -- rem ip -- sum do -- lor sit a -- met } \score { \new GregorianTranscriptionStaff << \new GregorianTranscriptionVoice = "melody" \chant \new GregorianTranscriptionLyrics = "one" \lyricsto melody \verba >> }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals ] | [ Up : Ancient notation ] | [ Psalmennotation > ] |
Ancient time signatures
Time signatures may also be engraved in an old style.
{ \override Staff.TimeSignature.style = #'neomensural s1 }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Ancient time signatures ] | [ Up : Ancient notation ] | [ Custodes > ] |
Psalmennotation
Diese Form der Notation wird benutzt für die Notation von Psalmen, in denen die Strophen nicht die gleiche Länge haben.
stemOff = \hide Staff.Stem stemOn = \undo \stemOff \score { \new Staff \with { \remove "Time_signature_engraver" } { \key g \minor \cadenzaOn \stemOff a'\breve bes'4 g'4 \stemOn a'2 \section \stemOff a'\breve g'4 a'4 \stemOn f'2 \section \stemOff a'\breve^\markup { \italic flexe } \stemOn g'2 \fine } }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Psalmennotation ] | [ Up : Ancient notation ] | [ Incipit > ] |
Custodes
Custodes may be engraved in various styles.
\layout { ragged-right = ##t } \new Staff \with { \consists "Custos_engraver" } \relative c' { \override Staff.Custos.neutral-position = #4 \override Staff.Custos.style = #'hufnagel c1^"hufnagel" \break <d a' f'>1 \override Staff.Custos.style = #'medicaea c1^"medicaea" \break <d a' f'>1 \override Staff.Custos.style = #'vaticana c1^"vaticana" \break <d a' f'>1 \override Staff.Custos.style = #'mensural c1^"mensural" \break <d a' f'>1 }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Custodes ] | [ Up : Ancient notation ] | [ Mensurstriche-Layout (Taktstriche zwischen den Systemen > ] |
Incipit
When transcribing mensural music, an incipit at the beginning of the piece is useful to indicate the original key and tempo. While today musicians are used to bar lines in order to faster recognize rhythmic patterns, bar lines were not yet invented during the period of mensural music; in fact, the meter often changed after every few notes. As a compromise, bar lines are often printed between the staves rather than on the staves.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % A short excerpt from the Jubilate Deo by Orlande de Lassus %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \header { tagline = ##f } global = { \set Score.skipBars = ##t \key g \major \time 4/4 % the actual music \skip 1*8 % let finis bar go through all staves \override Staff.BarLine.transparent = ##f % finis bar \bar "|." } discantusIncipit = { \clef "neomensural-c1" \key f \major \time 2/2 c''1. } discantusNotes = { \transpose c' c'' { \clef "treble" d'2. d'4 | b e' d'2 | c'4 e'4.( d'8 c' b | a4) b a2 | b4.( c'8 d'4) c'4 | \once \hide NoteHead c'1 | b\breve | } } discantusLyrics = \lyricmode { Ju -- bi -- la -- te De -- o, om -- nis ter -- ra, __ om- "..." -us. } altusIncipit = { \clef "neomensural-c3" \key f \major \time 2/2 r1 f'1. } altusNotes = { \transpose c' c'' { \clef "treble" r2 g2. e4 fis g | a2 g4 e | fis g4.( fis16 e fis4) | g1 | \once \hide NoteHead g1 | g\breve | } } altusLyrics = \lyricmode { Ju -- bi -- la -- te De -- o, om -- nis ter -- ra, "..." -us. } tenorIncipit = { \clef "neomensural-c4" \key f \major \time 2/2 r\longa r\breve r1 c'1. } tenorNotes = { \transpose c' c' { \clef "treble_8" R1 | R1 | R1 | % two measures r2 d'2. d'4 b e' | \once \hide NoteHead e'1 | d'\breve | } } tenorLyrics = \lyricmode { Ju -- bi -- la -- te "..." -us. } bassusIncipit = { \clef "mensural-f" \key f \major \time 2/2 r\maxima f1. } bassusNotes = { \transpose c' c' { \clef "bass" R1 | R1 | R1 | R1 | g2. e4 | \once \hide NoteHead e1 | g\breve | } } bassusLyrics = \lyricmode { Ju -- bi- "..." -us. } \score { << \new StaffGroup = choirStaff << \new Voice = "discantusNotes" << \set Staff.instrumentName = "Discantus" \incipit \discantusIncipit \global \discantusNotes >> \new Lyrics \lyricsto discantusNotes { \discantusLyrics } \new Voice = "altusNotes" << \set Staff.instrumentName = "Altus" \global \incipit \altusIncipit \altusNotes >> \new Lyrics \lyricsto altusNotes { \altusLyrics } \new Voice = "tenorNotes" << \set Staff.instrumentName = "Tenor" \global \incipit \tenorIncipit \tenorNotes >> \new Lyrics \lyricsto tenorNotes { \tenorLyrics } \new Voice = "bassusNotes" << \set Staff.instrumentName = "Bassus" \global \incipit \bassusIncipit \bassusNotes >> \new Lyrics \lyricsto bassusNotes { \bassusLyrics } >> >> \layout { \context { \Score %% no bar lines in staves or lyrics \hide BarLine } %% the next two instructions keep the lyrics between the bar lines \context { \Lyrics \consists "Bar_engraver" \consists "Separating_line_group_engraver" } \context { \Voice %% no slurs \hide Slur %% Comment in the below "\remove" command to allow line %% breaking also at those bar lines where a note overlaps %% into the next measure. The command is commented out in this %% short example score, but especially for large scores, you %% will typically yield better line breaking and thus improve %% overall spacing if you comment in the following command. %%\remove "Forbid_line_break_engraver" } indent = 6\cm incipit-width = 4\cm } }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Incipit ] | [ Up : Ancient notation ] | [ Pausenstile > ] |
Mensurstriche-Layout (Taktstriche zwischen den Systemen
Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen,
sondern zwischen den Systemen gesetzt werden, kann mit einer StaffGroup
anstelle von ChoirStaff
erreicht werden. Die Taktlinien auf den
Systemen werden mit der transparent
-Eigenschaft ausgelöscht.
\layout { \context { \Staff measureBarType = "-span|" } } music = \fixed c'' { c1 d2 \section e2 f1 \fine } \new StaffGroup << \new Staff \music \new Staff \music >>
Pausenstile
Pausen können in verschiedenen Stilen dargestellt werden.
restsA = { r\maxima r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s256 s512 s1024 s1024 } restsB = { r\maxima r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r256 r512 r1024 s1024 } \new Staff \relative c { \omit Score.TimeSignature \cadenzaOn \override Staff.Rest.style = #'mensural <>^\markup \typewriter { mensural } \restsA \bar "" \break \override Staff.Rest.style = #'neomensural <>^\markup \typewriter { neomensural } \restsA \bar "" \break \override Staff.Rest.style = #'classical <>^\markup \typewriter { classical } \restsB \bar "" \break \override Staff.Rest.style = #'z <>^\markup \typewriter { z-style } \restsB \bar "" \break \override Staff.Rest.style = #'default <>^\markup \typewriter { default } \restsB \bar "" \break } \paper { indent = 0 tagline = ##f }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Pausenstile ] | [ Up : Ancient notation ] | [ Vertical line as a baroque articulation mark > ] |
Using tags to produce mensural and modern music from the same source
Using tags, it is possible to produce both mensural and modern notation
from the same music. In this snippet, a function \menrest
is
introduced, allowing mensural rests to be pitched as in the original,
but with modern rests in the standard staff position.
Tags can also be used where other differences are needed: for example
using „whole measure rests“ (R1
, R\breve
, etc.) in
modern music, but normal rests (r1
, r\breve
, etc.) in
the mensural version. Converting mensural music to its modern
equivalent is usually referred to as transcription.
\header { tagline = ##f } menrest = #(define-music-function (note) (ly:music?) #{ \tag #'mens $(make-music 'RestEvent note) \tag #'mod $(make-music 'RestEvent note 'pitch '()) #}) MenStyle = { \autoBeamOff \override NoteHead.style = #'petrucci \override Score.BarNumber.transparent = ##t \override Stem.neutral-direction = #up } finalis = \section Music = \relative c'' { \set Score.tempoHideNote = ##t \key f \major \time 4/4 g1 d'2 \menrest bes4 bes2 a2 r4 g4 fis2. \finalis } MenLyr = \lyricmode { So farre, deere life, deare life } ModLyr = \lyricmode { So far, dear life, dear life } \score { \keepWithTag #'mens { << \new MensuralStaff { \new MensuralVoice = Cantus \clef "mensural-c1" \MenStyle \Music } \new Lyrics \lyricsto Cantus \MenLyr >> } } \score { \keepWithTag #'mod { \new ChoirStaff << \new Staff { \new Voice = Sop \with { \remove "Note_heads_engraver" \consists "Completion_heads_engraver" \remove "Rest_engraver" \consists "Completion_rest_engraver" } { \shiftDurations 1 0 { \autoBeamOff \Music } } } \new Lyrics \lyricsto Sop \ModLyr >> } }
[ << Ancient notation ] | [Top][Contents] | [ World music >> ] |
[ < Using tags to produce mensural and modern music from the same source ] | [ Up : Ancient notation ] | [ World music > ] |
Vertical line as a baroque articulation mark
This short vertical line placed above the note is commonly used in baroque music. Its meaning can vary, but generally indicates notes that should be played with more „weight“. The following example demonstrates how to achieve such a notation.
upline = \tweak stencil #(lambda (grob) (grob-interpret-markup grob #{ \markup \draw-line #'(0 . 1) #})) \stopped \relative c' { a'4^\upline a( c d')_\upline }
[ << Ancient notation ] | [Top][Contents] | [ Contexts and engravers >> ] |
[ < Vertical line as a baroque articulation mark ] | [ Up : Top ] | [ Arabische Improvisation > ] |
World music
[ << World music ] | [Top][Contents] | [ Contexts and engravers >> ] |
[ < World music ] | [ Up : World music ] | [ Makam-Beispiel > ] |
Arabische Improvisation
Bei Improvisation oder taqasim, die zeitlich frei gespielt
werden, kann die Taktart ausgelassen werden und \cadenzaOn
kann eingesetzt werden. Es kann nötig sein, den Versetzungszeichenstil
anzupassen, weil sonst die Versetzungszeichen nur einmal ausgegeben
werden, da keine Taktlinien gesetzt sind. Hier ein Beispiel, wie
der Beginn einer hijaz-Improvisation aussehen könnte:
\include "arabic.ly" \relative sol' { \key re \kurd \accidentalStyle forget \cadenzaOn sol4 sol sol sol fad mib sol1 fad8 mib re4. r8 mib1 fad sol }
[ << World music ] | [Top][Contents] | [ Contexts and engravers >> ] |
[ < Arabische Improvisation ] | [ Up : World music ] | [ Printing text from right to left > ] |
Makam-Beispiel
Makam ist eine türkische Melodie, in der 1/9-Tonabstände eingesetzt werden. Sehen Sie sich die Initialisierungsdatei makam.ly für weiter Information zu Tonhöhenbezeichnungen und Alterationen an (siehe Handbuch zum Lernen 2.25.22, 4.6.3 Weitere Information zu Hinweisen, wo diese Datei gespeichert ist).
% Initialize makam settings \include "makam.ly" \relative c' { \set Staff.keyAlterations = #`((6 . ,(- KOMA)) (3 . ,BAKIYE)) c4 cc db fk gbm4 gfc gfb efk fk4 db cc c }
[ << World music ] | [Top][Contents] | [ Contexts and engravers >> ] |
[ < Makam-Beispiel ] | [ Up : World music ] | [ Turkish Makam example > ] |
Printing text from right to left
It is possible to print text from right to left in a markup object, as demonstrated here.
{ b1^\markup { \line { i n g i r u m i m u s n o c t e } } f'_\markup { \override #'(text-direction . -1) \line { i n g i r u m i m u s n o c t e } } }
[ << World music ] | [Top][Contents] | [ Contexts and engravers >> ] |
[ < Printing text from right to left ] | [ Up : World music ] | [ Contexts and engravers > ] |
Turkish Makam example
This template uses the start of a well-known Turkish Saz Semai that is familiar in the repertoire in order to illustrate some of the elements of Turkish music notation.
\paper { tagline = ##f } % Initialize makam settings \include "turkish-makam.ly" \header { title = "Hüseyni Saz Semaisi" composer = "Lavtacı Andon" } \relative { \set Staff.extraNatural = ##f \set Staff.autoBeaming = ##f \key a \huseyni \time 10/8 a'4 g'16 [fb] e8. [d16] d [c d e] c [d c8] bfc | a16 [bfc a8] bfc c16 [d c8] d16 [e d8] e4 fb8 | d4 a'8 a16 [g fb e] fb8 [g] a8. [b16] a16 [g] | g4 g16 [fb] fb8. [e16] e [g fb e] e4 r8 | }
[ << World music ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Turkish Makam example ] | [ Up : Top ] | [ Adding a figured bass above or below the notes > ] |
Contexts and engravers
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Contexts and engravers ] | [ Up : Contexts and engravers ] | [ Adding an extra staff > ] |
Adding a figured bass above or below the notes
When writing a figured bass, you can place the figures above or below
the bass notes, by defining the
BassFigureAlignmentPositioning.direction
property (exclusively
in a Staff
context). Choices are #UP
(or #1
),
#CENTER
(or #0
) and #DOWN
(or #-1
).
This property can be changed as many times as you wish. Use
\once \override
if you don’t want the override to apply to the
whole score.
bass = { \clef bass g4 b, c d e d8 c d2 } continuo = \figuremode { <_>4 <6>4 <5/>4 \override Staff.BassFigureAlignmentPositioning.direction = #UP %\bassFigureStaffAlignmentUp < _+ >4 <6> \set Staff.useBassFigureExtenders = ##t \override Staff.BassFigureAlignmentPositioning.direction = #DOWN %\bassFigureStaffAlignmentDown <4>4. <4>8 <_+>4 } \score { << \new Staff = bassStaff \bass \context Staff = bassStaff \continuo >> }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Adding a figured bass above or below the notes ] | [ Up : Contexts and engravers ] | [ Adding an extra staff at a line break > ] |
Adding an extra staff
An extra staff can be added (possibly temporarily) after the start of a piece.
\score { << \new Staff \relative c'' { c1 | c | c | c | c } \new StaffGroup \relative c'' { \new Staff { c1 | c << { c1 | d } \new Staff { \once \omit Staff.TimeSignature c1 | b } >> c1 } } >> }
Adding an extra staff at a line break
When adding a new staff at a line break, some extra space is
unfortunately added at the end of the line before the break (to fit in
a key signature change, which will never be printed anyway). The
workaround is to add a setting of
Staff.explicitKeySignatureVisibility
as is shown in the example.
\paper { tagline = ##f } \score { \new StaffGroup \relative c'' { \new Staff \key f \major c1 c^"Unwanted extra space" \break << { c1 | c } \new Staff { \key f \major \once \omit Staff.TimeSignature c1 | c } >> c1 | c^"Fixed here" \break << { c1 | c } \new Staff { \once \set Staff.explicitKeySignatureVisibility = #end-of-line-invisible \key f \major \once \omit Staff.TimeSignature c1 | c } >> } }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Adding an extra staff at a line break ] | [ Up : Contexts and engravers ] | [ Centered measure numbers > ] |
Automatically changing the stem direction of the middle note based on the melody
LilyPond can alter the stem direction of the middle note on a staff so
that it follows the melody, by adding the Melody_engraver
to the
Voice
context.
The context property suspendMelodyDecisions
may be used to turn
off this behavior locally.
\relative c'' { \time 3/4 a8 b g f b g | \set suspendMelodyDecisions = ##t a b g f b g | \unset suspendMelodyDecisions c b d c b c | } \layout { \context { \Voice \consists "Melody_engraver" \autoBeamOff } }
Centered measure numbers
Scores of large ensemble works often have bar numbers placed beneath
the system, centered horizontally on the measure’s extent. This
snippet shows how the Measure_counter_engraver
may be used to
simulate this notational practice. Here, the engraver has been added
to a Dynamics
context.
This snippet presents a legacy method: starting from LilyPond 2.23.3,
\set Score.centerBarNumbers = ##t
is enough.
\layout { \context { \Dynamics \consists #Measure_counter_engraver \override MeasureCounter.direction = #DOWN \override MeasureCounter.font-encoding = #'latin1 \override MeasureCounter.font-shape = #'italic % to control the distance of the Dynamics context from the staff: \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2 } \context { \Score \remove "Bar_number_engraver" } } pattern = \repeat unfold 7 { c'4 d' e' f' } \new StaffGroup << \new Staff { \pattern } \new Staff { \pattern } \new Dynamics { \startMeasureCount s1*7 \stopMeasureCount } >>
Changing MIDI output to one channel per voice
When outputting MIDI, the default behavior is for each staff to represent one MIDI channel, with all the voices on a staff amalgamated. This minimizes the risk of running out of MIDI channels, since there are only 16 available per track.
However, by moving the Staff_performer
to the Voice
context, each voice on a staff can have its own MIDI channel, as is
demonstrated by the following example: despite being on the same staff,
two MIDI channels are created, each with a different
midiInstrument
.
\score { \new Staff << \new Voice \relative c''' { \set midiInstrument = "flute" \voiceOne \key g \major \time 2/2 r2 g-"Flute" ~ g fis ~ fis4 g8 fis e2 ~ e4 d8 cis d2 } \new Voice \relative c'' { \set midiInstrument = "clarinet" \voiceTwo b1-"Clarinet" a2. b8 a g2. fis8 e fis2 r } >> \layout { } \midi { \context { \Staff \remove "Staff_performer" } \context { \Voice \consists "Staff_performer" } \tempo 2 = 72 } }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Changing MIDI output to one channel per voice ] | [ Up : Contexts and engravers ] | [ Psalmennotation > ] |
Changing time signatures inside a polymetric section using \scaleDurations
The measureLength
property, together with
measurePosition
, determines when a bar line is needed. However,
when using \scaleDurations
, the scaling of durations makes it
difficult to change time signatures. In this case,
measureLength
should be set manually, using the
ly:make-moment
callback. The second argument must be the same
as the second argument of \scaleDurations
.
\layout { \context { \Score \remove "Timing_translator" } \context { \Staff \consists "Timing_translator" } } << \new Staff { \scaleDurations 8/5 { \time 6/8 \set Timing.measureLength = \musicLength 1*6/5 b8 b b b b b \time 2/4 \set Timing.measureLength = \musicLength 1*4/5 b4 b } } \new Staff { \clef bass \time 2/4 c2 d e f } >>
Psalmennotation
Diese Form der Notation wird benutzt für die Notation von Psalmen, in denen die Strophen nicht die gleiche Länge haben.
stemOff = \hide Staff.Stem stemOn = \undo \stemOff \score { \new Staff \with { \remove "Time_signature_engraver" } { \key g \minor \cadenzaOn \stemOff a'\breve bes'4 g'4 \stemOn a'2 \section \stemOff a'\breve g'4 a'4 \stemOn f'2 \section \stemOff a'\breve^\markup { \italic flexe } \stemOn g'2 \fine } }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Psalmennotation ] | [ Up : Contexts and engravers ] | [ Creating custom key signatures > ] |
Creating blank staves
To create blank staves, generate empty measures then remove the
Bar_number_engraver
from the Score
context, and the
Time_signature_engraver
, Clef_engraver
and
Bar_engraver
from the Staff
context.
#(set-global-staff-size 20) \score { { \repeat unfold 12 { s1 \break } } \layout { indent = 0\in \context { \Staff \remove "Time_signature_engraver" \remove "Clef_engraver" \remove "Bar_engraver" } \context { \Score \remove "Bar_number_engraver" } } } % uncomment these lines for "letter" size %{ \paper { #(set-paper-size "letter") ragged-last-bottom = ##f line-width = 7.5\in left-margin = 0.5\in bottom-margin = 0.25\in top-margin = 0.25\in } %} % uncomment these lines for "A4" size %{ \paper { #(set-paper-size "a4") ragged-last-bottom = ##f line-width = 180 left-margin = 15 bottom-margin = 10 top-margin = 10 } %}
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Creating blank staves ] | [ Up : Contexts and engravers ] | [ Hälse über beide Systeme > ] |
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D minor with an extended range of printed flats.
\new Staff \with { \override StaffSymbol.line-count = #8 \override KeySignature.flat-positions = #'((-7 . 6)) \override KeyCancellation.flat-positions = #'((-7 . 6)) % presumably sharps are also printed in both octaves \override KeySignature.sharp-positions = #'((-6 . 7)) \override KeyCancellation.sharp-positions = #'((-6 . 7)) \override Clef.stencil = # (lambda (grob)(grob-interpret-markup grob #{ \markup\combine \musicglyph "clefs.C" \translate #'(-3 . -2) \musicglyph "clefs.F" #})) clefPosition = #3 middleCPosition = #3 middleCClefPosition = #3 } { \key d\minor f bes, f bes, }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Creating custom key signatures ] | [ Up : Contexts and engravers ] | [ Defining an engraver in Scheme: ambitus engraver > ] |
Hälse über beide Systeme
Dieses Schnipsel zeigt den Einsatz von Span_stem_engraver
und
\crossStaff
, um Hälse über Systeme hinweg automatisch zu
verbinden. Die Länge des Halses muss definiert werden, da der
variable Abstand zwischen Notenköpfen und Notensystemen automatisch
errechnet wird.
\layout { \context { \PianoStaff \consists "Span_stem_engraver" } } \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! | e'8 f' g'4 \voiceTwo % Down to lower staff \crossStaff { e'8 e'8 } e'4 | } \new Staff { \clef bass \voiceOne % Up to upper staff \crossStaff { <e g>4 e, g16 a8. c8 } d | g8 f g4 \voiceTwo g8 g g4 | } >>
Defining an engraver in Scheme: ambitus engraver
This example demonstrates how the ambitus engraver may be defined on
the user side, with a Scheme engraver. This is basically a rewrite in
Scheme of the code from lily/ambitus-engraver.cc
.
#(use-modules (oop goops)) %%% %%% Grob utilities %%% %%% These are literal rewrites of some C++ methods used by the ambitus engraver. #(define (ly:separation-item::add-conditional-item grob grob-item) "Add @var{grob-item} to the array of conditional elements of @var{grob}. Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}." (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item)) #(define (ly:accidental-placement::accidental-pitch accidental-grob) "Get the pitch from the grob cause of @var{accidental-grob}. Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}." (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause) 'pitch)) #(define (ly:accidental-placement::add-accidental grob accidental-grob) "Add @var{accidental-grob}, an @code{Accidental} grob, to the list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement} grob. Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}." (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob))) (set! (ly:grob-parent accidental-grob X) grob) (let* ((accidentals (ly:grob-object grob 'accidental-grobs)) (handle (assq (ly:pitch-notename pitch) accidentals)) (entry (if handle (cdr handle) '()))) (set! (ly:grob-object grob 'accidental-grobs) (assq-set! accidentals (ly:pitch-notename pitch) (cons accidental-grob entry)))))) %%% %%% Ambitus data structure %%% %%% The <ambitus> class holds the various grobs that are created %%% to print an ambitus: %%% - ambitus-group: the grob that groups all the components of an ambitus %%% (Ambitus grob); %%% - ambitus-line: the vertical line between the upper and lower ambitus %%% notes (AmbitusLine grob); %%% - ambitus-up-note and ambitus-down-note: the note head and accidental %%% for the lower and upper note of the ambitus (see <ambitus-note> class %%% below). %%% The other slots define the key and clef context of the engraver: %%% - start-c0: position of middle c at the beginning of the piece. It %%% is used to place the ambitus notes according to their pitch; %%% - start-key-sig: the key signature at the beginning of the piece. It %%% is used to determine if accidentals shall be printed next to ambitus %%% notes. #(define-class <ambitus> () (ambitus-group #:accessor ambitus-group) (ambitus-line #:accessor ambitus-line) (ambitus-up-note #:getter ambitus-up-note #:init-form (make <ambitus-note>)) (ambitus-down-note #:getter ambitus-down-note #:init-form (make <ambitus-note>)) (start-c0 #:accessor ambitus-start-c0 #:init-value #f) (start-key-sig #:accessor ambitus-start-key-sig #:init-value '())) %%% Accessor for the lower and upper note data of an ambitus #(define-method (ambitus-note (ambitus <ambitus>) direction) "If @var{direction} is @code{UP}, then return the upper ambitus note of @var{ambitus}, otherwise return the lower ambitus note." (if (= direction UP) (ambitus-up-note ambitus) (ambitus-down-note ambitus))) %%% The <ambitus-note> class holds the grobs that are specific to ambitus %%% (lower and upper) notes: %%% - head: an AmbitusNoteHead grob; %%% - accidental: an AmbitusAccidental grob, to be possibly printed next %%% to the ambitus note head. %%% Moreover: %%% - pitch is the absolute pitch of the note %%% - cause is the note event that causes this ambitus note, i.e. the lower %%% or upper note of the considered music sequence. #(define-class <ambitus-note> () (head #:accessor ambitus-note-head #:init-value #f) (accidental #:accessor ambitus-note-accidental #:init-value #f) (cause #:accessor ambitus-note-cause #:init-value #f) (pitch #:accessor ambitus-note-pitch #:init-value #f)) %%% %%% Ambitus engraving logics %%% %%% Rewrite of the code from @file{lily/ambitus-engraver.cc}. #(define (make-ambitus translator) "Build an ambitus object: initialize all the grobs and their relations. The Ambitus grob contain all other grobs: Ambitus |- AmbitusLine |- AmbitusNoteHead for upper note |- AmbitusAccidental for upper note |- AmbitusNoteHead for lower note |- AmbitusAccidental for lower note The parent of an accidental is the corresponding note head, and the accidental is set as the 'accidental-grob of the note head so that is printed by the function that prints notes." ;; make the ambitus object (let ((ambitus (make <ambitus>))) ;; build the Ambitus grob, which will contain all other grobs (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '())) ;; build the AmbitusLine grob (line between lower and upper note) (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '())) ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental (for-each (lambda (direction) (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '())) (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '())) (group (ambitus-group ambitus))) ;; The parent of the AmbitusAccidental grob is the ;; AmbitusNoteHead grob (set! (ly:grob-parent accidental Y) head) ;; The AmbitusAccidental grob is set as the accidental-grob ;; object of the AmbitusNoteHead. This is later used by the ;; function that prints notes. (set! (ly:grob-object head 'accidental-grob) accidental) ;; both the note head and the accidental grobs are added ;; to the main ambitus grob. (ly:axis-group-interface::add-element group head) (ly:axis-group-interface::add-element group accidental) ;; the note head and the accidental grobs are added to the ;; ambitus object (set! (ambitus-note-head (ambitus-note ambitus direction)) head) (set! (ambitus-note-accidental (ambitus-note ambitus direction)) accidental))) (list DOWN UP)) ;; The parent of the ambitus line is the lower ambitus note head (set! (ly:grob-parent (ambitus-line ambitus) X) (ambitus-note-head (ambitus-note ambitus DOWN))) ;; the ambitus line is added to the ambitus main grob (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus)) ambitus)) #(define-method (initialize-ambitus-state (ambitus <ambitus>) translator) "Initialize the state of @var{ambitus}, by getting the starting position of middle C and key signature from @var{translator}'s context." (if (not (ambitus-start-c0 ambitus)) (begin (set! (ambitus-start-c0 ambitus) (ly:context-property (ly:translator-context translator) 'middleCPosition 0)) (set! (ambitus-start-key-sig ambitus) (ly:context-property (ly:translator-context translator) 'keyAlterations))))) #(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob) "Update the upper and lower ambitus pithes of @var{ambitus}, using @var{note-grob}." ;; Get the event that caused the note-grob creation ;; and check that it is a note-event. (let ((note-event (ly:grob-property note-grob 'cause))) (if (ly:in-event-class? note-event 'note-event) ;; get the pitch from the note event (let ((pitch (ly:event-property note-event 'pitch))) ;; if this pitch is lower than the current ambitus lower ;; note pitch (or it has not been initialized yet), ;; then this pitch is the new ambitus lower pitch, ;; and conversely for upper pitch. (for-each (lambda (direction pitch-compare) (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction))) (pitch-compare pitch (ambitus-note-pitch (ambitus-note ambitus direction)))) (begin (set! (ambitus-note-pitch (ambitus-note ambitus direction)) pitch) (set! (ambitus-note-cause (ambitus-note ambitus direction)) note-event)))) (list DOWN UP) (list ly:pitch<? (lambda (p1 p2) (ly:pitch<? p2 p1)))))))) #(define-method (typeset-ambitus (ambitus <ambitus>) translator) "Typeset the ambitus: - place the lower and upper ambitus notes according to their pitch and the position of the middle C; - typeset or delete the note accidentals, according to the key signature. An accidental, if it is to be printed, is added to an AccidentalPlacement grob (a grob dedicated to the placement of accidentals near a chord); - both note heads are added to the ambitus line grob, so that a line should be printed between them." ;; check if there are lower and upper pitches (if (and (ambitus-note-pitch (ambitus-note ambitus UP)) (ambitus-note-pitch (ambitus-note ambitus DOWN))) ;; make an AccidentalPlacement grob, for placement of note accidentals (let ((accidental-placement (ly:engraver-make-grob translator 'AccidentalPlacement (ambitus-note-accidental (ambitus-note ambitus DOWN))))) ;; For lower and upper ambitus notes: (for-each (lambda (direction) (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction)))) ;; set the cause and the staff position of the ambitus note ;; according to the associated pitch (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction)) 'cause) (ambitus-note-cause (ambitus-note ambitus direction))) (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction)) 'staff-position) (+ (ambitus-start-c0 ambitus) (ly:pitch-steps pitch))) ;; determine if an accidental shall be printed for this note, ;; according to the key signature (let* ((handle (or (assoc (cons (ly:pitch-octave pitch) (ly:pitch-notename pitch)) (ambitus-start-key-sig ambitus)) (assoc (ly:pitch-notename pitch) (ambitus-start-key-sig ambitus)))) (sig-alter (if handle (cdr handle) 0))) (cond ((= (ly:pitch-alteration pitch) sig-alter) ;; the note alteration is in the key signature ;; => it does not have to be printed (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction))) (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction)) 'accidental-grob) '())) (else ;; otherwise, the accidental shall be printed (set! (ly:grob-property (ambitus-note-accidental (ambitus-note ambitus direction)) 'alteration) (ly:pitch-alteration pitch))))) ;; add the AccidentalPlacement grob to the ;; conditional items of the AmbitusNoteHead (ly:separation-item::add-conditional-item (ambitus-note-head (ambitus-note ambitus direction)) accidental-placement) ;; add the AmbitusAccidental to the list of the ;; AccidentalPlacement grob accidentals (ly:accidental-placement::add-accidental accidental-placement (ambitus-note-accidental (ambitus-note ambitus direction))) ;; add the AmbitusNoteHead grob to the AmbitusLine grob (ly:pointer-group-interface::add-grob (ambitus-line ambitus) 'note-heads (ambitus-note-head (ambitus-note ambitus direction))))) (list DOWN UP)) ;; add the AccidentalPlacement grob to the main Ambitus grob (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement)) ;; no notes ==> suicide the grobs (begin (for-each (lambda (direction) (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction))) (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction)))) (list DOWN UP)) (ly:grob-suicide! ambitus-line)))) %%% %%% Ambitus engraver definition %%% #(define ambitus-engraver (lambda (context) (let ((ambitus #f)) ;; when music is processed: make the ambitus object, if not already built (make-engraver ((process-music translator) (if (not ambitus) (set! ambitus (make-ambitus translator)))) ;; set the ambitus clef and key signature state ((stop-translation-timestep translator) (if ambitus (initialize-ambitus-state ambitus translator))) ;; when a note-head grob is built, update the ambitus notes (acknowledgers ((note-head-interface engraver grob source-engraver) (if ambitus (update-ambitus-notes ambitus grob)))) ;; finally, typeset the ambitus according to its upper and lower notes ;; (if any). ((finalize translator) (if ambitus (typeset-ambitus ambitus translator))))))) %%% %%% Example %%% \score { \new StaffGroup << \new Staff { c'4 des' e' fis' gis' } \new Staff { \clef "bass" c4 des ~ des ees b, } >> \layout { \context { \Staff \consists #ambitus-engraver } } }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Defining an engraver in Scheme: ambitus engraver ] | [ Up : Contexts and engravers ] | [ Engravers one-by-one > ] |
Displaying a whole GrandStaff system if only one of its staves is alive
In orchestral scores sometimes single or groups of instruments are
silent for a while and their staves can be removed for that time (with
\removeEmptyStaves
).
When they play again it is often preferred to show the staves of
all instruments of such a group. This can be done adding the
Keep_alive_together_engraver
in the grouper (e.g., a GrandStaff
or a StaffGroup).
In the example the violins are silent in the 2nd system and in the 3rd system. Only the first violin plays the last measure but the staff of the second violin is also displayed.
\score { << \new StaffGroup = "StaffGroup_woodwinds" << \new Staff = "Staff_flute" \with { instrumentName = "Flute" shortInstrumentName = "Fl" } \relative c' { \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break } } >> \new StaffGroup = "StaffGroup_Strings" << \new GrandStaff = "GrandStaff_violins" << \new Staff = "StaffViolinI" \with { instrumentName = "Violin I" shortInstrumentName = "Vi I" } \relative c'' { a1 \repeat unfold 7 { s1 } \repeat unfold 12 a16 a4 } \new Staff = "StaffViolinII" \with { instrumentName = "Violin II" shortInstrumentName = "Vi II" } \relative c' { e1 \repeat unfold 8 { s1 } } >> \new Staff = "Staff_cello" \with { instrumentName = "Cello" shortInstrumentName = "Ce" } \relative c { \clef bass \repeat unfold 9 { c1 }} >> >> } \paper { tagline = ##f } \layout { indent = 3.0\cm short-indent = 1.5\cm \context { \GrandStaff \consists Keep_alive_together_engraver } \context { \Staff \RemoveEmptyStaves } }
Engravers one-by-one
The notation problem, creating a certain symbol, is handled by plugins. Each plugin is called an engraver. In this example, (some) engravers are switched on one by one, in the following order:
- note heads,
- staff symbol,
- clef,
- stem,
- beams, slurs, accents,
- accidentals, bar lines, time signature and key signature.
Engravers are grouped. For example, note heads, slurs, beams, etc.,
form a Voice
context. Engravers for key signature, accidentals,
bar line, etc., form a Staff
context.
\header { tagline = ##f } topVoice = \relative c' { \key d \major es8([ g] a[ fis]) b4 b16[-. b-. b-. cis-.] d4-> } % empty staff and voice contexts MyStaff = \context { \type Engraver_group \name Staff \accepts Voice \defaultchild Voice } MyVoice = \context { \type Engraver_group \name Voice } % add note heads MyVoice = \context { \MyVoice \consists Note_heads_engraver } \score { \topVoice \layout { \context { \MyStaff } \context { \MyVoice } } } % add staff MyStaff = \context { \MyStaff \consists Staff_symbol_engraver } \score { \topVoice \layout { \context { \MyStaff } \context { \MyVoice } } } % add clef MyStaff = \context { \MyStaff \consists Clef_engraver } \score { \topVoice \layout { \context { \MyStaff } \context { \MyVoice } } } % add stems MyVoice = \context { \MyVoice \consists Stem_engraver } \score { \topVoice \layout { \context { \MyStaff } \context { \MyVoice } } } % add beams, slurs, and accents MyVoice = \context { \MyVoice \consists Beam_engraver \consists Slur_engraver \consists Script_engraver \consists Rhythmic_column_engraver } \score { \topVoice \layout { \context { \MyStaff } \context { \MyVoice } } } % add accidentals, bar, time signature, and key signature MyStaff = \context { \MyStaff \consists Accidental_engraver \consists Bar_engraver \consists Time_signature_engraver \consists Key_engraver } \score { \topVoice \layout { \context { \MyStaff } \context { \MyVoice } } }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Engravers one-by-one ] | [ Up : Contexts and engravers ] | [ Systeme schachteln > ] |
Mensurstriche-Layout (Taktstriche zwischen den Systemen
Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen,
sondern zwischen den Systemen gesetzt werden, kann mit einer StaffGroup
anstelle von ChoirStaff
erreicht werden. Die Taktlinien auf den
Systemen werden mit der transparent
-Eigenschaft ausgelöscht.
\layout { \context { \Staff measureBarType = "-span|" } } music = \fixed c'' { c1 d2 \section e2 f1 \fine } \new StaffGroup << \new Staff \music \new Staff \music >>
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Mensurstriche-Layout (Taktstriche zwischen den Systemen ] | [ Up : Contexts and engravers ] | [ Numbering groups of measures > ] |
Systeme schachteln
Die Eigenschaft systemStartDelimiterHierarchy
kann eingesetzt
werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der
Befehl \set StaffGroup.systemStartDelimiterHierarchy
nimmt eine
Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem
System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt
werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente
in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer
die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: SystemStartBar
,
SystemStartBracket
, SystemStartBrace
und
SystemStartSquare
.
\new StaffGroup \relative c'' << \override StaffGroup.SystemStartSquare.collapse-height = 4 \set StaffGroup.systemStartDelimiterHierarchy = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a (SystemStartSquare b) ) c ) d) \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } >>
Numbering groups of measures
This snippet demonstrates the use of the
Measure_counter_engraver
to number groups of successive
measures. Any stretch of measures may be numbered, whether consisting
of repetitions or not.
The engraver must be added to the appropriate context. Here, a
Staff
context is used; another possibility is a Dynamics
context.
The counter is begun with \startMeasureCount
and ended with
\stopMeasureCount
. Numbering will start by default
with 1, but this behavior may be modified by overriding the
count-from
property.
When a measure extends across a line break, the number will appear twice, the second time in parentheses.
\layout { \context { \Staff \consists #Measure_counter_engraver } } \new Staff { \startMeasureCount \repeat unfold 7 { c'4 d' e' f' } \stopMeasureCount \bar "||" g'4 f' e' d' \override Staff.MeasureCounter.count-from = #2 \startMeasureCount \repeat unfold 5 { g'4 f' e' d' } g'4 f' \bar "" \break e'4 d' \repeat unfold 7 { g'4 f' e' d' } \stopMeasureCount } \paper { tagline = ##f }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Numbering groups of measures ] | [ Up : Contexts and engravers ] | [ Entfernung von Taktnummern in einer Partitur > ] |
Print ChordNames with same root and different bass as slash and bass-note
To print subsequent ChordNames
only differing in its bass note
as slash and bass note use the here defined engraver. The behaviour may
be controlled in detail by the chordChanges
context property.
#(define Bass_changes_equal_root_engraver (lambda (ctx) "For sequential @code{ChordNames} with same root, but different bass, the root markup is dropped: D D/C D/B -> D /C /B The behaviour may be controlled by setting the @code{chordChanges} context-property." (let ((chord-pitches '()) (last-chord-pitches '()) (bass-pitch #f)) (make-engraver ((initialize this-engraver) (let ((chord-note-namer (ly:context-property ctx 'chordNoteNamer))) ;; Set 'chordNoteNamer, respect user setting if already done (ly:context-set-property! ctx 'chordNoteNamer (if (procedure? chord-note-namer) chord-note-namer note-name->markup)))) (listeners ((note-event this-engraver event) (let* ((pitch (ly:event-property event 'pitch)) (pitch-name (ly:pitch-notename pitch)) (pitch-alt (ly:pitch-alteration pitch)) (bass (ly:event-property event 'bass #f)) (inversion (ly:event-property event 'inversion #f))) ;; Collect notes of the chord ;; - to compare inversed chords we need to collect the bass note ;; as usual member of the chord, whereas an added bass must be ;; treated separate from the usual chord-notes ;; - notes are stored as pairs containing their ;; pitch-name (an integer), i.e. disregarding their octave and ;; their alteration (cond (bass (set! bass-pitch pitch)) (inversion (set! bass-pitch pitch) (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))) (else (set! chord-pitches (cons (cons pitch-name pitch-alt) chord-pitches))))))) (acknowledgers ((chord-name-interface this-engraver grob source-engraver) (let ((chord-changes (ly:context-property ctx 'chordChanges #f))) ;; If subsequent chords are equal apart from their bass, ;; reset the 'text-property. ;; Equality is done by comparing the sorted lists of this chord's ;; elements and the previous chord. Sorting is needed because ;; inverted chords may have a different order of pitches. ;; `chord-changes' needs to be true (if (and bass-pitch chord-changes (equal? (sort chord-pitches car<) (sort last-chord-pitches car<))) (ly:grob-set-property! grob 'text (make-line-markup (list (ly:context-property ctx 'slashChordSeparator) ((ly:context-property ctx 'chordNoteNamer) bass-pitch (ly:context-property ctx 'chordNameLowercaseMinor)))))) (set! last-chord-pitches chord-pitches) (set! chord-pitches '()) (set! bass-pitch #f)))) ((finalize this-engraver) (set! last-chord-pitches '())))))) myChords = \chordmode { %\germanChords \set chordChanges = ##t d2:m d:m/cis d:m/c \set chordChanges = ##f d:m/b e1:7 \set chordChanges = ##t e \break \once \set chordChanges = ##f e1/f e2/gis e/+gis e e:m/f d:m d:m/cis d:m/c \set chordChanges = ##f d:m/b } << \new ChordNames \with { \consists #Bass_changes_equal_root_engraver } \myChords \new Staff \myChords >>
Entfernung von Taktnummern in einer Partitur
Taktnummern können vollkommen aus den Noten entfernt werden, indem
man den Bar_number_engraver
aus dem Score
-Kontext
entfernt.
\layout { \context { \Score \omit BarNumber % or: %\remove "Bar_number_engraver" } } \relative c'' { c4 c c c \break c4 c c c } \paper { tagline = ##f }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Entfernung von Taktnummern in einer Partitur ] | [ Up : Contexts and engravers ] | [ Using marklines in a Frenched score > ] |
Eine eckige Klammer zu Beginn von Systemgruppen benutzen
Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer
(SystemStartSquare
) umgewandelt werden, wenn man sie explizit
im StaffGroup
- oder ChoirStaffGroup
-Kontext setzt.
\score { \new StaffGroup { << \set StaffGroup.systemStartDelimiter = #'SystemStartSquare \new Staff { c'4 d' e' f' } \new Staff { c'4 d' e' f' } >> } }
Using marklines in a Frenched score
Using MarkLine
contexts (such as in
LSR1010) in a Frenched
score can be problematic if all the staves between two MarkLine
s
are removed in one system. The Keep_alive_together_engraver
can
be used within each StaffGroup
to keep the MarkLine
alive
only as long as the other staves in the group stay alive.
bars = { \tempo "Allegro" 4=120 s1*2 \repeat unfold 5 { \mark \default s1*2 } \bar "||" \tempo "Adagio" 4=40 s1*2 \repeat unfold 8 { \mark \default s1*2 } \bar "|." } winds = \repeat unfold 120 { c''4 } trumpet = { \repeat unfold 8 g'2 R1*16 \repeat unfold 4 g'2 R1*8 } trombone = { \repeat unfold 4 c'1 R1*8 d'1 R1*17 } strings = \repeat unfold 240 { c''8 } #(set-global-staff-size 16) \paper { systems-per-page = 5 ragged-last-bottom = ##f } \layout { indent = 15\mm short-indent = 5\mm \context { \name MarkLine \type Engraver_group \consists Output_property_engraver \consists Axis_group_engraver \consists Mark_engraver \consists Metronome_mark_engraver \consists Staff_collecting_engraver \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-layer = #'any \override VerticalAxisGroup.staff-affinity = #DOWN \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = 1 keepAliveInterfaces = #'() } \context { \Staff \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-layer = ##f } \context { \StaffGroup \accepts MarkLine \consists Keep_alive_together_engraver } \context { \Score \remove Mark_engraver \remove Metronome_mark_engraver \remove Staff_collecting_engraver } } \score { << \new StaffGroup = "winds" \with { instrumentName = "Winds" shortInstrumentName = "Winds" } << \new MarkLine \bars \new Staff \winds >> \new StaffGroup = "brass" << \new MarkLine \bars \new Staff = "trumpet" \with { instrumentName = "Trumpet" shortInstrumentName = "Tpt" } \trumpet \new Staff = "trombone" \with { instrumentName = "Trombone" shortInstrumentName = "Tbn" } \trombone >> \new StaffGroup = "strings" \with { instrumentName = "Strings" shortInstrumentName = "Strings" } << \new MarkLine \bars \new Staff = "strings" { \strings } >> >> }
[ << Contexts and engravers ] | [Top][Contents] | [ Tweaks and overrides >> ] |
[ < Using marklines in a Frenched score ] | [ Up : Contexts and engravers ] | [ Sologesang und zweistimmiger Refrain > ] |
Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
In diesem Beispiel werden die Texte mit den Befehlen
alignAboveContext
und alignBelowContext
über und unter dem System angeordnet.
global = { \key c \major \time 4/4 } sopMusic = \relative c'' { c4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative c' { e4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative c' { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative c { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics \with { alignAboveContext = "women" } \lyricsto "sopranos" \sopWords \new Lyrics \with { alignBelowContext = "women" } \lyricsto "altos" \altoWords % we could remove the line about this with the line below, since % we want the alto lyrics to be below the alto Voice anyway. % \new Lyrics \lyricsto "altos" \altoWords \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics \with { alignAboveContext = "men" } \lyricsto "tenors" \tenorWords \new Lyrics \with { alignBelowContext = "men" } \lyricsto "basses" \bassWords % again, we could replace the line above this with the line below. % \new Lyrics \lyricsto "basses" \bassWords >> }
Sologesang und zweistimmiger Refrain
Diese Vorlage erstellt eine Partitur, die mit Sologesang beginnt und einen
Refrain für zwei Stimmen enthält. Sie zeigt auch die Benutzung von
Platzhalter-Pausen innerhalb der \global
-Variable, um Taktwechsel
(und andere Elemente, die für alle Stimmen gleich sind) für das gesamte
Stück zu definieren.
\header { tagline = ##f } global = { \key g \major % verse \time 3/4 s2.*2 \break % refrain \time 2/4 s2*2 \bar "|." } SoloNotes = \relative g' { \clef "treble" % verse g4 g g | b4 b b | % refrain R2*2 | } SoloLyrics = \lyricmode { One two three | four five six | } SopranoNotes = \relative c'' { \clef "treble" % verse R2.*2 | % refrain c4 c | g4 g | } SopranoLyrics = \lyricmode { la la | la la | } BassNotes = \relative c { \clef "bass" % verse R2.*2 | % refrain c4 e | d4 d | } BassLyrics = \lyricmode { dum dum | dum dum | } \score { << \new Voice = "SoloVoice" << \global \SoloNotes >> \new Lyrics \lyricsto "SoloVoice" \SoloLyrics \new ChoirStaff << \new Voice = "SopranoVoice" << \global \SopranoNotes >> \new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics \new Voice = "BassVoice" << \global \BassNotes >> \new Lyrics \lyricsto "BassVoice" \BassLyrics >> >> \layout { ragged-right = ##t \context { \Staff % these lines prevent empty staves from being printed \RemoveEmptyStaves \override VerticalAxisGroup.remove-first = ##t } } }
[ << Contexts and engravers ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Sologesang und zweistimmiger Refrain ] | [ Up : Top ] | [ Adding an ottava marking to a single voice > ] |
Tweaks and overrides
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Tweaks and overrides ] | [ Up : Tweaks and overrides ] | [ Adding links to objects > ] |
Adding an ottava marking to a single voice
If you have more than one voice on the staff, setting octavation in one
voice transposes the position of notes in all voices for the duration
of the ottava bracket. If the octavation is only intended to apply to
one voice, the Ottava_spanner_engraver
should be moved to
Voice
context.
\layout { \context { \Staff \remove Ottava_spanner_engraver } \context { \Voice \consists Ottava_spanner_engraver } } { \clef bass << { <g d'>1~ q2 <c' e'> } \\ { r2. \ottava -1 <b,,, b,,>4 ~ | q2 \ottava 0 <c e>2 } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adding an ottava marking to a single voice ] | [ Up : Tweaks and overrides ] | [ Adding markups in a tablature > ] |
Adding links to objects
To add a link to a grob stencil you can use add-link
as defined
here. It works both with \override
and \tweak
.
Drawback: point-and-click
is disturbed for the linked grobs.
Limitation: Works for PDF only.
The linked objects are colored with a separate command. Note that the links are not displayed and are not clickable from inside the LSR.
#(define (add-link url-strg) (lambda (grob) (let* ((stil (ly:grob-property grob 'stencil))) (if (ly:stencil? stil) (let* ((x-ext (ly:stencil-extent stil X)) (y-ext (ly:stencil-extent stil Y)) (url-expr `(url-link ,url-strg ,x-ext ,y-ext)) (new-stil (ly:stencil-add (ly:make-stencil url-expr x-ext y-ext) stil))) (ly:grob-set-property! grob 'stencil new-stil)))))) %%%% test %% For easier maintenance of this snippet the URL is formatted to use the %% actually used LilyPond version. %% Of course a literal URL would work as well. #(define major.minor-version (string-join (take (string-split (lilypond-version) #\.) 2) ".")) urlI = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/writing-pitches" major.minor-version) urlII = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/rhythms" major.minor-version) urlIII = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/note-heads" major.minor-version) urlIV = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/beams" major.minor-version) urlV = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/note-head-styles" major.minor-version) urlVI = #(format #f "http://lilypond.org/doc/v~a/Documentation/notation/writing-pitches" major.minor-version) \relative c' { \key cis \minor \once \override Staff.Clef.color = #green \once \override Staff.Clef.after-line-breaking = #(add-link urlI) \once \override Staff.TimeSignature.color = #green \once \override Staff.TimeSignature.after-line-breaking = #(add-link urlII) \once \override NoteHead.color = #green \once \override NoteHead.after-line-breaking = #(add-link urlIII) cis'1 \once \override Beam.color = #green \once \override Beam.after-line-breaking = #(add-link urlIV) cis8 dis e fis gis2 <gis, \tweak Accidental.color #green \tweak Accidental.after-line-breaking #(add-link urlVI) \tweak color #green \tweak after-line-breaking #(add-link urlV) \tweak style #'harmonic bis dis fis >1 <cis, cis' e> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adding links to objects ] | [ Up : Tweaks and overrides ] | [ Adding timing marks to long glissandi > ] |
Adding markups in a tablature
By default markups does not show in a tablature.
To make them appear, simply use the command
\revert TabStaff.TextScript.stencil
%% http://lsr.di.unimi.it/LSR/Item?id=919 % by P.P.Schneider on June 2014 high = { r4 r8 <g c'> q r8 r4 } low = { c4 r4 c8 r8 g,8 b, } pulse = { s8^"1" s^"&" s^"2" s^"&" s^"3" s^"&" s^"4" s^"&" } \score { \new TabStaff { \repeat unfold 2 << \high \\ \low \\ \pulse >> } \layout { \context { \TabStaff \clef moderntab \revert TextScript.stencil \override TextScript.font-series = #'bold \override TextScript.font-size = #-2 \override TextScript.color = #red } \context { \Score proportionalNotationDuration = \musicLength 8 } } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adding markups in a tablature ] | [ Up : Tweaks and overrides ] | [ Adjusting grace note spacing > ] |
Adding timing marks to long glissandi
Skipped beats in very long glissandi are sometimes indicated by timing marks, often consisting of stems without noteheads. Such stems can also be used to carry intermediate expression markings.
If the stems do not align well with the glissando, they may need to be repositioned slightly.
glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } glissandoSkipOff = { \revert NoteColumn.glissando-skip \undo \hide NoteHead \revert NoteHead.no-ledgers } \relative c'' { r8 f8\glissando \glissandoSkipOn f4 g a a8\noBeam \glissandoSkipOff a8 r8 f8\glissando \glissandoSkipOn g4 a8 \glissandoSkipOff a8 | r4 f\glissando \< \glissandoSkipOn a4\f \> \glissandoSkipOff b8\! r | }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adding timing marks to long glissandi ] | [ Up : Tweaks and overrides ] | [ Adjusting lyrics vertical spacing > ] |
Adjusting grace note spacing
The space given to grace notes can be adjusted using the
spacing-increment
property of Score.GraceSpacing
.
graceNotes = { \grace { c4 c8 c16 c32 } c8 } \relative c'' { c8 \graceNotes \override Score.GraceSpacing.spacing-increment = #2.0 \graceNotes \revert Score.GraceSpacing.spacing-increment \graceNotes }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adjusting grace note spacing ] | [ Up : Tweaks and overrides ] | [ Adjusting slur positions vertically > ] |
Adjusting lyrics vertical spacing
This snippet shows how to bring the lyrics line closer to the staff.
% Default layout: << \new Staff \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } \new Staff { \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } } % Reducing the minimum space below the staff and above the lyrics: \new Lyrics \with { \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) } \lyricsto melody { aa aa aa aa aa aa aa aa aa } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adjusting lyrics vertical spacing ] | [ Up : Tweaks and overrides ] | [ Altering the length of beamed stems > ] |
Adjusting slur positions vertically
Using \override Slur.positions
it is possible to set the
vertical position of the start and end points of a slur to absolute
values (or rather, forcing LilyPond’s slur algorithm to consider these
values as desired). In many cases, this means a lot of trial and error
until good values are found. You probably have tried the
\offset
command next just to find out that it doesn’t work for
slurs, emitting a warning instead.
The code in this snippet allows you to tweak the vertical start and end
positions by specifying relative changes, similar to
\offset
.
Syntax: \offsetPositions #'(dy1 . dy2)
offsetPositions = #(define-music-function (offsets) (number-pair?) #{ \once \override Slur.control-points = #(lambda (grob) (match-let ((((_ . y1) _ _ (_ . y2)) (ly:slur::calc-control-points grob)) ((off1 . off2) offsets)) (set! (ly:grob-property grob 'positions) (cons (+ y1 off1) (+ y2 off2))) (ly:slur::calc-control-points grob))) #}) \relative c'' { c4(^"default" c, d2) \offsetPositions #'(0 . 1) c'4(^"(0 . 1)" c, d2) \offsetPositions #'(0 . 2) c'4(^"(0 . 2)" c, d2) \bar "||" g4(^"default" a d'2) \offsetPositions #'(1 . 0) g,,4(^"(1 . 0)" a d'2) \offsetPositions #'(2 . 0) g,,4(^"(2 . 0)" a d'2) }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Adjusting slur positions vertically ] | [ Up : Tweaks and overrides ] | [ Alternative Taktnummerierung > ] |
Altering the length of beamed stems
Stem lengths on beamed notes can be varied by overriding the
beamed-lengths
property of the details
of the
Stem
. If a single value is used as an argument, the length
applies to all stems. When multiple arguments are used, the first
applies to eighth notes, the second to sixteenth notes and so on. The
final argument also applies to all notes shorter than the note length
of the final argument. Non-integer arguments may also be used.
\relative c'' { \override Stem.details.beamed-lengths = #'(2) a8[ a] a16[ a] a32[ a] \override Stem.details.beamed-lengths = #'(8 10 12) a8[ a] a16[ a] a32[ a] r8 \override Stem.details.beamed-lengths = #'(8) a8[ a] \override Stem.details.beamed-lengths = #'(8.5) a8[ a] \revert Stem.details.beamed-lengths a8[ a] a16[ a] a32[ a] r16 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Altering the length of beamed stems ] | [ Up : Tweaks and overrides ] | [ Analysis brackets above the staff > ] |
Alternative Taktnummerierung
Zwei alternative Methoden können eingestellt werden, die die Taktnummerierung beeinflussen, insbesondere bei Wiederholungen.
music = \relative c' { \repeat volta 3 { c4 d e f | \alternative { \volta 1 { c4 d e f | c2 d \break } \volta 2 { f4 g a b | f4 g a b | f2 a | \break } \volta 3 { c4 d e f | c2 d } } } c1 \bar "|." } \markup "default" { \music } \markup \typewriter "'numbers" { \set Score.alternativeNumberingStyle = #'numbers \music } \markup \typewriter "'numbers-with-letters" { \set Score.alternativeNumberingStyle = #'numbers-with-letters \music } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Alternative Taktnummerierung ] | [ Up : Tweaks and overrides ] | [ Analysis brackets with labels > ] |
Analysis brackets above the staff
Simple horizontal analysis brackets are added below the staff by default. The following example shows a way to place them above the staff instead.
\layout { \context { \Voice \consists "Horizontal_bracket_engraver" } } \relative c'' { \once \override HorizontalBracket.direction = #UP c2\startGroup d2\stopGroup }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Analysis brackets above the staff ] | [ Up : Tweaks and overrides ] | [ Asymmetric slurs > ] |
Analysis brackets with labels
Text markup may be added to analysis brackets through the text
property of the HorizontalBracketText
grob. Adding different
texts to brackets beginning at the same time requires the
\tweak
command.
Bracket text will be parenthesized after a line break.
\paper { tagline = ##f } \layout { \context { \Voice \consists "Horizontal_bracket_engraver" \override HorizontalBracket.direction = #UP } } { \once\override HorizontalBracketText.text = "a" c''\startGroup d''\stopGroup \once\override HorizontalBracketText.text = "a'" e''\startGroup d''\stopGroup | c''-\tweak HorizontalBracketText.text \markup \bold \huge "b" \startGroup -\tweak HorizontalBracketText.text "a" \startGroup d''\stopGroup e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup\stopGroup | c''-\tweak HorizontalBracketText.text foo \startGroup d'' e'' f'' | \break g'' a'' b'' c'''\stopGroup }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Analysis brackets with labels ] | [ Up : Tweaks and overrides ] | [ Breaking vertical alignment of dynamics and textscripts > ] |
Asymmetric slurs
Slurs can be made asymmetric to match an asymmetric pattern of notes better.
slurNotes = { d,8( a' d f a f' d, a) } \relative c' { \stemDown \slurUp \slurNotes \once \override Slur.eccentricity = #3.0 \slurNotes }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Asymmetric slurs ] | [ Up : Tweaks and overrides ] | [ Caesura ("railtracks") with fermata > ] |
Breaking vertical alignment of dynamics and textscripts
By default, LilyPond uses DynamicLineSpanner
grobs to vertically
align successive dynamic objects like hairpins and dynamic
text. However, this is not always wanted. By inserting
\breakDynamicSpan
, which ends the alignment spanner
prematurely, this vertical alignment can be avoided.
{ g1\< | e''\f\> | c'\p } { g1\< | e''\breakDynamicSpan\f\> | c'\p } \paper { tagline = ##f }
Caesura ("railtracks") with fermata
A caesura is sometimes denoted by a double „railtracks“ breath mark with a fermata sign positioned above. This snippet shows an optically pleasing combination of railtracks and fermata.
\relative c'' { c2. % construct the symbol \override BreathingSign.text = \markup { \override #'(direction . 1) \override #'(baseline-skip . 1.8) \dir-column { \translate #'(0.155 . 0) \center-align \musicglyph "scripts.caesura.curved" \center-align \musicglyph "scripts.ufermata" } } \breathe c4 % set the breath mark back to normal \revert BreathingSign.text c2. \breathe c4 \bar "|." }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Caesura ("railtracks") with fermata ] | [ Up : Tweaks and overrides ] | [ Changing beam thickness and spacing > ] |
Changing a single note’s size in a chord
Individual note heads in a chord can be modified with the
\tweak
command inside a chord, by altering the font-size
property.
Inside the chord (within the brackets < >
), before the note to
be altered, place the \tweak
command, followed by
font-size
and define the proper size like #-2
(a tiny
note head).
\relative c' { <\tweak font-size #+2 c e g c \tweak font-size #-2 e>1 ^\markup { A tiny e }_\markup { A big c } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Changing a single note’s size in a chord ] | [ Up : Tweaks and overrides ] | [ Die Erscheinung von Pausentakten ändern > ] |
Changing beam thickness and spacing
To make beams thicker or thinner alter the Beam.beam-thickness
property. To adjust the spacing between beams alter the
Beam.length-fraction
property.
\relative f' { \time 1/8 \override Beam.beam-thickness = #0.4 \override Beam.length-fraction = #0.8 c32 c c c \revert Beam.beam-thickness % 0.48 is default thickness \revert Beam.length-fraction % 1.0 is default spacing c32 c c c \override Beam.beam-thickness = #0.6 \override Beam.length-fraction = #1.3 c32 c c c }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Changing beam thickness and spacing ] | [ Up : Tweaks and overrides ] | [ Changing properties for individual grobs > ] |
Die Erscheinung von Pausentakten ändern
Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa-
und Brevispausen (auch Kirchenpausen genannt) gesetzt, bei mehr Takten
wird eine Line mit der Taktanzahl ausgegeben. Der vorgegebene Wert von
zehn kann geändert werden, indem man die expand-limit
-Eigenschaft
setzt:
\relative c'' { \compressMMRests { R1*2 | R1*5 | R1*9 \override MultiMeasureRest.expand-limit = 3 R1*2 | R1*5 | R1*9 } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Die Erscheinung von Pausentakten ändern ] | [ Up : Tweaks and overrides ] | [ Text und Strecker-Stile für Dynamik-Texte ändern > ] |
Changing properties for individual grobs
The \applyOutput
command allows the tuning of any layout
object, in any context. It requires a Scheme function with three
arguments.
#(define (mc-squared grob grob-origin context) (let ((sp (ly:grob-property grob 'staff-position))) (ly:grob-set-property! grob 'stencil (grob-interpret-markup grob #{ \markup \lower #0.5 #(case sp ((-5) "m") ((-3) "c ") ((-2) #{ \markup \teeny \bold 2 #}) (else "bla")) #})))) \relative c' { <d f g b>2 \applyOutput Voice.NoteHead #mc-squared <d f g b>2 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Changing properties for individual grobs ] | [ Up : Tweaks and overrides ] | [ Changing the default text font family > ] |
Text und Strecker-Stile für Dynamik-Texte ändern
Der Text, der für Crescendo und Decrescendo gesetzt wird, kann geändert
werden, indem man die Eigenschaften crescendoText
und
decrescendoText
verändert. Der Stil des Streckers kann auch
geändert werden, indem die 'style
-Eigenschaft des
DynamicTextSpanner
beeinflusst wird. Der Standardwert ist
'hairpin
, andere Möglichkeiten sind 'line
, 'dashed-line
und 'dotted-line
.
\relative c'' { \set crescendoText = \markup { \italic { cresc. poco } } \set crescendoSpanner = #'text \override DynamicTextSpanner.style = #'dotted-line a2\< a a2 a a2 a a2 a\mf }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Text und Strecker-Stile für Dynamik-Texte ändern ] | [ Up : Tweaks and overrides ] | [ Changing the staff size > ] |
Changing the default text font family
The default font families for text can be overridden.
%{ You may have to install additional fonts. Red Hat Fedora dejavu-fonts-all Debian GNU/Linux, Ubuntu fonts-dejavu-core fonts-dejavu-extra %} \paper { %{ run lilypond -dshow-available-fonts to show all fonts available in the process log. %} property-defaults.fonts.serif = "DejaVu Serif" property-defaults.fonts.sans = "DejaVu Sans" property-defaults.fonts.typewriter = "DejaVu Sans Mono" } { g'''4^\markup { DejaVu Serif: \bold bold \italic italic \italic \bold { bold italic } } g4_\markup { \override #'(font-family . sans) { DejaVu Sans: \bold bold \italic italic \italic \bold { bold italic } } } g''2^\markup { \override #'(font-family . typewriter) { DejaVu Sans Mono: \bold bold \italic italic \italic \bold { bold italic } } } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Changing the default text font family ] | [ Up : Tweaks and overrides ] | [ Das Tempo ohne Metronom-Angabe verändern > ] |
Changing the staff size
Though the simplest way to resize staves is to use
#(set-global-staff-size xx)
, an individual staff’s size can be
changed by scaling the properties 'staff-space
and
fontSize
.
<< \new Staff { \relative c'' { \dynamicDown c8\ff c c c c c c c } } \new Staff \with { fontSize = #-3 \override StaffSymbol.staff-space = #(magstep -3) } { \clef bass c8 c c c c\f c c c } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Changing the staff size ] | [ Up : Tweaks and overrides ] | [ Changing the text for sustain markings > ] |
Das Tempo ohne Metronom-Angabe verändern
Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden:
\score { \new Staff \relative c' { \tempo 4 = 160 c4 e g b c4 b d c \set Score.tempoHideNote = ##t \tempo 4 = 96 d,4 fis a cis d4 cis e d } \layout { } \midi { } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Das Tempo ohne Metronom-Angabe verändern ] | [ Up : Tweaks and overrides ] | [ Controlling spanner visibility after a line break > ] |
Changing the text for sustain markings
Staff.pedalSustainStrings
can be used to set the text used for
pedal down and up. Note that the only valid strings are those found in
the list of pedal glyphs - the values used this snippet constitute an
exhaustive list.
sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff } \relative c' { \sustainNotes \set Staff.pedalSustainStrings = #'("P" "P-" "-") \sustainNotes \set Staff.pedalSustainStrings = #'("d" "de" "e") \sustainNotes \set Staff.pedalSustainStrings = #'("M" "M-" "-") \sustainNotes \set Staff.pedalSustainStrings = #'("Ped" "*Ped" "*") \sustainNotes }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Changing the text for sustain markings ] | [ Up : Tweaks and overrides ] | [ Controlling the appearance of tremolo slashes > ] |
Controlling spanner visibility after a line break
The visibility of spanners which end on the first note following a line
break is controlled by the after-line-breaking
callback
ly:spanner::kill-zero-spanned-time
.
For objects such as glissandos and hairpins, the default behaviour is to hide the spanner after a break; disabling the callback will allow the left-broken span to be shown.
Conversely, spanners which are usually visible, such as text spans, can be hidden by enabling the callback.
\paper { ragged-right = ##t tagline = ##f } \relative c'' { \override Hairpin.to-barline = ##f \override Glissando.breakable = ##t % show hairpin \override Hairpin.after-line-breaking = ##t % hide text span \override TextSpanner.after-line-breaking = #ly:spanner::kill-zero-spanned-time e2\<\startTextSpan % show glissando \override Glissando.after-line-breaking = ##t f2\glissando \break f,1\!\stopTextSpan }
Controlling the appearance of tremolo slashes
Using various properties of the StemTremolo
grob it is possible
to control the appearance of tremolo slashes.
- Property
slope
sets the slope for tremolo slashes. - Property
shape
determines whether tremolo slashes look like rectangles (valuerectangle
) or like very small beams (valuebeam-like
). - Property
style
sets both the slope and the shape depending on whether the note has flags, beams, or only a plain stem. This is in contrast to the previous two properties, which change the slope and shape unconditionally. There are two styles defined.-
default
: slashes for down-stem flags are longer and more sloped than slashes for up-stem flags; slashes on beamed notes have a rectangular shape and are parallel to the beam. -
constant
: all slashes are beam-like and have the same slope except for down-stem flags.
-
music = { a''4:32 a': e''8: \noBeam e': a'':[ a':] f':[ g':] d':[ d':] } \new Staff { <>^\markup "default" \music } \new Staff { <>^\markup \typewriter "style = #'constant" \override StemTremolo.style = #'constant \music } \new Staff { <>^\markup \typewriter "shape = #'rectangle" \override StemTremolo.shape = #'rectangle \music } \new Staff { <>^\markup \typewriter "shape = #'beam-like" \override StemTremolo.shape = #'beam-like \music } \new Staff { <>^\markup \typewriter "slope = -0.2" \override StemTremolo.slope = -0.2 \music } \paper { indent = 0 tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Controlling the appearance of tremolo slashes ] | [ Up : Tweaks and overrides ] | [ Controlling tuplet bracket visibility > ] |
Die vertikale Anordnung von Beschriftungen kontrollieren
Die vertikale Anordnung von Beschriftungen wird mit der
'script-priority
-Eigenschaft kontrolliert. Um so kleiner die
Zahl, umso näher wird die Beschriftung in Bezug auf die Note gesetzt. In
diesem Beispiel hat das TextScript
-Objekt (das Kreuz) zuerst
die niedrigste Priorität, wird also auch am niedrigsten in dem ersten
Beispiel gesetzt. Im zweiten Fall hat der Praller (das Script
)
die niedrigste Priorität, darum wird er am nächsten zum System gesetzt.
Wenn zwei Objekte die gleiche Priorität haben, wird ihre Reihenfolge
anhand ihres Auftretens in der Quelldatei entschieden.
\relative c''' { \once \override TextScript.script-priority = -100 a2^\prall^\markup { \sharp } \once \override Script.script-priority = -100 a2^\prall^\markup { \sharp } \set fingeringOrientations = #'(up) <c-2 a-1>2 <a-1 c\tweak script-priority -100 -2>2 }
Controlling tuplet bracket visibility
The default behavior of tuplet-bracket visibility is to print a bracket unless there is a beam of the same length as the tuplet.
To control the visibility of tuplet brackets, set the property
bracket-visibility
to either #t
(always print a bracket),
if-no-beam
(only print a bracket if there is no beam) or
#f
(never print a bracket). The latter is in fact equivalent to
omitting the TupletBracket
object altogether from the printed
output.
music = \relative c'' { \tuplet 3/2 { c16[ d e } f8] \tuplet 3/2 { c8 d e } \tuplet 3/2 { c4 d e } } \new Voice { \relative c' { \override Score.TextMark.non-musical = ##f \textMark "default" \music \override TupletBracket.bracket-visibility = #'if-no-beam \textMark \markup \typewriter "'if-no-beam" \music \override TupletBracket.bracket-visibility = ##t \textMark \markup \typewriter "#t" \music \override TupletBracket.bracket-visibility = ##f \textMark \markup \typewriter "#f" \music \omit TupletBracket \textMark \markup \typewriter "omit" \music } } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Controlling tuplet bracket visibility ] | [ Up : Tweaks and overrides ] | [ Creating custom key signatures > ] |
Einen Doppelschlag mit Vorhalt erstellen
Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das
Vorzeichen benutzt, erfordert einige Einstellungsänderungen. Die
outside-staff-priority
-Eigenschaft muss auf falsch (#f
)
gesetzt werden, weil sie sonst über die Eigenschaft
avoid-slur property
dominieren würde. Der Wert von halign
wird benutzt, um den Doppelschlag horizontal zu positionieren.
\relative c'' { \after 2*2/3 \turn c2( d4) r | \after 4 \turn c4.( d8) \after 4 { \once \set suggestAccidentals = ##t \once \override AccidentalSuggestion.outside-staff-priority = ##f \once \override AccidentalSuggestion.avoid-slur = #'inside \once \override AccidentalSuggestion.font-size = -3 \once \override AccidentalSuggestion.script-priority = -1 \once \hideNotes cis8\turn \noBeam } d4.( e8) }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Einen Doppelschlag mit Vorhalt erstellen ] | [ Up : Tweaks and overrides ] | [ Creating double-digit fingerings > ] |
Creating custom key signatures
LilyPond supports custom key signatures. In this example, print for D minor with an extended range of printed flats.
\new Staff \with { \override StaffSymbol.line-count = #8 \override KeySignature.flat-positions = #'((-7 . 6)) \override KeyCancellation.flat-positions = #'((-7 . 6)) % presumably sharps are also printed in both octaves \override KeySignature.sharp-positions = #'((-6 . 7)) \override KeyCancellation.sharp-positions = #'((-6 . 7)) \override Clef.stencil = # (lambda (grob)(grob-interpret-markup grob #{ \markup\combine \musicglyph "clefs.C" \translate #'(-3 . -2) \musicglyph "clefs.F" #})) clefPosition = #3 middleCPosition = #3 middleCClefPosition = #3 } { \key d\minor f bes, f bes, }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Creating custom key signatures ] | [ Up : Tweaks and overrides ] | [ Creating text spanners > ] |
Creating double-digit fingerings
Creating fingerings larger than 5 is possible.
\relative c' { c1-10 c1-50 c1-36 c1-29 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Creating double-digit fingerings ] | [ Up : Tweaks and overrides ] | [ Cross-staff chords - beaming problems workaround > ] |
Creating text spanners
The \startTextSpan
and \stopTextSpan
commands allow the
creation of text spanners as easily as pedal indications or
octavations. Override some properties of the TextSpanner
object
to modify its output.
\paper { ragged-right = ##f } \relative c'' { \override TextSpanner.bound-details.left.text = #"bla" \override TextSpanner.bound-details.right.text = #"blu" a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'line \once \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER a4 \startTextSpan b4 c a4 \stopTextSpan \override TextSpanner.style = #'dashed-line \override TextSpanner.bound-details.left.text = \markup { \draw-line #'(0 . 1) } \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -2) } \once \override TextSpanner.bound-details.right.padding = #-2 a4 \startTextSpan b4 c a4 \stopTextSpan \set Staff.middleCPosition = #-13 \override TextSpanner.dash-period = #10 \override TextSpanner.dash-fraction = #0.5 \override TextSpanner.thickness = #10 a4 \startTextSpan b4 c a4 \stopTextSpan }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Creating text spanners ] | [ Up : Tweaks and overrides ] | [ Hälse über beide Systeme > ] |
Cross-staff chords - beaming problems workaround
Sometimes it is better to use stems from the upper staff for creating
cross-staff chords, because no problems with automatic beam collision
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn’t detect collisions
between staves using
\override Staff.Beam.collision-voice-only = ##t
\new PianoStaff << \new Staff = up \relative c' { << { r4 \override Stem.cross-staff = ##t \override Stem.length = #19 % this is in half-spaces, % so it makes stems 9.5 staffspaces long \override Stem.Y-offset = #-6 % stems are normally lengthened % upwards, so here we must lower the stem by the amount % equal to the lengthening - in this case (19 - 7) / 2 % (7 is default stem length) e e e } { s4 \change Staff = "bottom" \override NoteColumn.ignore-collision = ##t c, c c } >> } \new Staff = bottom \relative c' { \clef bass \voiceOne g8 a g a g a g a } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Cross-staff chords - beaming problems workaround ] | [ Up : Tweaks and overrides ] | [ Custodes > ] |
Hälse über beide Systeme
Dieses Schnipsel zeigt den Einsatz von Span_stem_engraver
und
\crossStaff
, um Hälse über Systeme hinweg automatisch zu
verbinden. Die Länge des Halses muss definiert werden, da der
variable Abstand zwischen Notenköpfen und Notensystemen automatisch
errechnet wird.
\layout { \context { \PianoStaff \consists "Span_stem_engraver" } } \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! | e'8 f' g'4 \voiceTwo % Down to lower staff \crossStaff { e'8 e'8 } e'4 | } \new Staff { \clef bass \voiceOne % Up to upper staff \crossStaff { <e g>4 e, g16 a8. c8 } d | g8 f g4 \voiceTwo g8 g g4 | } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Hälse über beide Systeme ] | [ Up : Tweaks and overrides ] | [ Bunddiagramme anpassen > ] |
Custodes
Custodes may be engraved in various styles.
\layout { ragged-right = ##t } \new Staff \with { \consists "Custos_engraver" } \relative c' { \override Staff.Custos.neutral-position = #4 \override Staff.Custos.style = #'hufnagel c1^"hufnagel" \break <d a' f'>1 \override Staff.Custos.style = #'medicaea c1^"medicaea" \break <d a' f'>1 \override Staff.Custos.style = #'vaticana c1^"vaticana" \break <d a' f'>1 \override Staff.Custos.style = #'mensural c1^"mensural" \break <d a' f'>1 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Custodes ] | [ Up : Tweaks and overrides ] | [ Anpassung von Beschriftungs-Bunddiagrammen > ] |
Bunddiagramme anpassen
Eigenschaften von Bunddiagrammen können in
'fret-diagram-details
verändert werden. Einstellungen mit
dem \override
-Befehl werden dem FretBoards.FretBoard
-Objekt
zugewiesen. Genauso wie Voice
ist auch FretBoards
ein
Kontext der niedrigsten Ebene, weshalb der Kontext auch in dem Befehl
weggelassen werden kann.
\include "predefined-guitar-fretboards.ly" \storePredefinedDiagram #default-fret-table \chordmode { c' } #guitar-tuning "x;1-1-(;3-2;3-3;3-4;1-1-);" % shorthand oo = #(define-music-function (grob-path value) (list? scheme?) #{ \once \override $grob-path = #value #}) << \new ChordNames { \chordmode { c1 | c | c | d } } \new FretBoards { % Set global properties of fret diagram \override FretBoards.FretBoard.size = 1.2 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \chordmode { c \oo FretBoard.size #1.0 \oo FretBoard.fret-diagram-details.barre-type #'straight \oo FretBoard.fret-diagram-details.dot-color #'black \oo FretBoard.fret-diagram-details.finger-code #'below-string c' \oo FretBoard.fret-diagram-details.barre-type #'none \oo FretBoard.fret-diagram-details.number-type #'arabic \oo FretBoard.fret-diagram-details.orientation #'landscape \oo FretBoard.fret-diagram-details.mute-string "M" \oo FretBoard.fret-diagram-details.label-dir #LEFT \oo FretBoard.fret-diagram-details.dot-color #'black c' \oo FretBoard.fret-diagram-details.finger-code #'below-string \oo FretBoard.fret-diagram-details.dot-radius #0.35 \oo FretBoard.fret-diagram-details.dot-position #0.5 \oo FretBoard.fret-diagram-details.fret-count #3 d } } \new Voice { c'1 | c' | c' | d' } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Bunddiagramme anpassen ] | [ Up : Tweaks and overrides ] | [ Klammer anzeigen, wenn nur ein System gesetzt wird > ] |
Anpassung von Beschriftungs-Bunddiagrammen
Bunddiagramme können mit der Eigenschaft 'fret-diagram-details
angepasst werden. Bunddiagramme, die als Textbeschriftung eingefügt werden,
können Veränderungen im Voice.TextScript
-Objekt oder direkt in der
Beschriftung vorgenommen werden.
<< \chords { c1 | c | c | d } \new Voice = "mel" { \textLengthOn % Set global properties of fret diagram \override TextScript.size = 1.2 \override TextScript.fret-diagram-details.finger-code = #'in-dot \override TextScript.fret-diagram-details.dot-color = #'white %% C major for guitar, no barre, using defaults % terse style c'1^\markup { \fret-diagram-terse "x;3-3;2-2;o;1-1;o;" } %% C major for guitar, barred on third fret % verbose style % size 1.0 % roman fret label, finger labels below string, straight barre c'1^\markup { % standard size \override #'(size . 1.0) { \override #'(fret-diagram-details . ( (number-type . roman-lower) (finger-code . in-dot) (barre-type . straight))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } } %% C major for guitar, barred on third fret % verbose style % landscape orientation, arabic numbers, M for mute string % no barre, fret label down or left, small mute label font c'1^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (number-type . arabic) (label-dir . -1) (mute-string . "M") (orientation . landscape) (barre-type . none) (xo-font-magnification . 0.4) (xo-padding . 0.3))) { \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) } } %% simple D chord % terse style % larger dots, centered dots, fewer frets % label below string d'1^\markup { \override #'(fret-diagram-details . ( (finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) { \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } } } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Anpassung von Beschriftungs-Bunddiagrammen ] | [ Up : Tweaks and overrides ] | [ Displaying grob ancestry > ] |
Klammer anzeigen, wenn nur ein System gesetzt wird
Wenn nur ein System einer Systemgruppe vom Typ ChoirStaff
oder
StaffGroup
angezeigt wird, wird die Klammer zu Beginn normalerweise
nicht gesetzt. Das kann verändert werden, indem man die entsprechende
Eigenschaft verändert.
Bei Systemen wie PianoStaff
und GrandStaff
, die mit einer
geschweiften Klammer beginne, muss eine andere Eigenschaft verändert werden,
wie das zweite Beispiel zeigt.
\score { \new StaffGroup << % Must be lower than the actual number of staff lines \override StaffGroup.SystemStartBracket.collapse-height = 4 \override Score.SystemStartBar.collapse-height = 4 \new Staff { c'1 } >> } \score { \new PianoStaff << \override PianoStaff.SystemStartBrace.collapse-height = 4 \override Score.SystemStartBar.collapse-height = 4 \new Staff { c'1 } >> } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Klammer anzeigen, wenn nur ein System gesetzt wird ] | [ Up : Tweaks and overrides ] | [ Dotted harmonics > ] |
Displaying grob ancestry
When working with grob callbacks, it can be helpful to understand a grob’s ancestry. Most grobs have parents which influence the positioning of the grob. X- and Y-parents influence the horizontal and vertical positions for the grob, respectively. Additionally, each parent may have parents of its own.
Unfortunately, there are several aspects of a grob’s ancestry that can lead to confusion:
- The types of parents a grob has may depend on context.
- For some grobs, the X- and Y-parents are the same.
- A particular ancestor may be related to a grob in multiple ways.
- The concept of generations is misleading.
For example, the System
grob can be both parent (on the Y-side)
and grandparent (twice on the X-side) to a VerticalAlignment
grob.
This macro prints (to the console) a textual representation of a grob’s ancestry.
When called this way:
{ \once \override NoteHead.before-line-breaking = #display-ancestry c }
The following output is generated:
NoteHead X,Y: NoteColumn X: PaperColumn X,Y: System Y: VerticalAxisGroup X: NonMusicalPaperColumn X,Y: System Y: VerticalAlignment X: NonMusicalPaperColumn X,Y: System Y: System
%% http://lsr.di.unimi.it/LSR/Item?id=622 #(define (get-ancestry grob) (if (not (null? (ly:grob-parent grob X))) (list (grob::name grob) (get-ancestry (ly:grob-parent grob X)) (get-ancestry (ly:grob-parent grob Y))) (grob::name grob))) #(define (format-ancestry lst padding) (string-append (symbol->string (car lst)) "\n" (let ((X-ancestry (if (list? (cadr lst)) (format-ancestry (cadr lst) (+ padding 3)) (symbol->string (cadr lst)))) (Y-ancestry (if (list? (caddr lst)) (format-ancestry (caddr lst) (+ padding 3)) (symbol->string (caddr lst))))) (if (equal? X-ancestry Y-ancestry) (string-append (format #f "~&") (make-string padding #\space) "X,Y: " (if (list? (cadr lst)) (format-ancestry (cadr lst) (+ padding 5)) (symbol->string (cadr lst)))) (string-append (format #f "~&") (make-string padding #\space) "X: " X-ancestry "\n" (make-string padding #\space) "Y: " Y-ancestry (format #f "~&")))) (format #f "~&"))) #(define (display-ancestry grob) (format (current-error-port) "~3&~a~2%~a~&" (make-string 36 #\-) (if (ly:grob? grob) (format-ancestry (get-ancestry grob) 0) (format #f "~a is not a grob" grob)))) \relative c' { \once \override NoteHead.before-line-breaking = #display-ancestry f4 \once \override Accidental.before-line-breaking = #display-ancestry \once \override Arpeggio.before-line-breaking = #display-ancestry <f as c>4\arpeggio }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Displaying grob ancestry ] | [ Up : Tweaks and overrides ] | [ Drawing boxes around grobs > ] |
Dotted harmonics
Artificial harmonics using \harmonic
do not show dots. To
override this behavior, set the context property harmonicDots
.
\relative c''' { \time 3/4 \key f \major \set harmonicDots = ##t <bes f'\harmonic>2. ~ <bes f'\harmonic>4. <a e'\harmonic>8( <gis dis'\harmonic> <g d'\harmonic>) <fis cis'\harmonic>2. <bes f'\harmonic>2. }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Dotted harmonics ] | [ Up : Tweaks and overrides ] | [ Drawing circles around various objects > ] |
Drawing boxes around grobs
The print-function
can be overridden to draw a box around an
arbitrary grob.
\relative c'' { \override TextScript.stencil = #(make-stencil-boxer 0.1 0.3 ly:text-interface::print) c'4^"foo" \override Stem.stencil = #(make-stencil-boxer 0.05 0.25 ly:stem::print) \override Score.RehearsalMark.stencil = #(make-stencil-boxer 0.15 0.3 ly:text-interface::print) b8 \revert Stem.stencil \revert Flag.stencil c4. c4 \mark \default c1 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Drawing boxes around grobs ] | [ Up : Tweaks and overrides ] | [ Eigene Dynamiktextspanner nachgestellt > ] |
Drawing circles around various objects
The \circle
markup command draws circles around various
objects, for example fingering indications. For other objects,
specific tweaks may be required: this example demonstrates two
strategies for rehearsal marks and measure numbers.
\relative c' { c1 \set Score.rehearsalMarkFormatter = #(lambda (mark context) (make-circle-markup (format-mark-numbers mark context))) \mark \default c2 d^\markup { \override #'(thickness . 3) { \circle \finger 2 } } \override Score.BarNumber.break-visibility = #all-visible \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Drawing circles around various objects ] | [ Up : Tweaks and overrides ] | [ Dynamiktextstrecker nachgestellt > ] |
Eigene Dynamiktextspanner nachgestellt
Die Nachstellung funktioniert für eigene Crescendo-Textstrecker. Die Strecker sollten an der ersten Note eines Taktes beginnen. Man muss -\mycresc benutzen, sonst wird der Beginn des Streckers der nächsten Note zugewiesen.
% Two functions for (de)crescendo spanners where you can explicitly % give the spanner text. mycresc = #(define-music-function (mymarkup) (markup?) (make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text mymarkup)) mydecresc = #(define-music-function (mymarkup) (markup?) (make-music 'DecrescendoEvent 'span-direction START 'span-type 'text 'span-text mymarkup)) \relative c' { c4-\mycresc "custom cresc" c4 c4 c4 | c4 c4 c4 c4 | c4-\mydecresc "custom decresc" c4 c4 c4 | c4 c4\! c4 c4 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Eigene Dynamiktextspanner nachgestellt ] | [ Up : Tweaks and overrides ] | [ Extending a TrillSpanner > ] |
Dynamiktextstrecker nachgestellt
Die \cresc, \dim und \decresc Strecker können umdefiniert werden, um nachgestellt zu funktionieren und einen Textstrecker zu produzieren. Eigene Strecker können auch einfach definiert werden. Klammer- und Textcrescendi können einfach vermischt werden. \< und \> erstellen normalerweise Klammern, \cresc usw. dagegen normalerweise Textspanner.
% Some sample text dynamic spanners, to be used as postfix operators crpoco = #(make-music 'CrescendoEvent 'span-direction START 'span-type 'text 'span-text "cresc. poco a poco") \relative c' { c4\cresc d4 e4 f4 | g4 a4\! b4\crpoco c4 | c4 d4 e4 f4 | g4 a4\! b4\< c4 | g4\dim a4 b4\decresc c4\! }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Dynamiktextstrecker nachgestellt ] | [ Up : Tweaks and overrides ] | [ Extending glissandi across repeats > ] |
Extending a TrillSpanner
For TrillSpanner
, the minimum-length
property becomes
effective only if the set-spacing-rods
procedure is called
explicitly.
To do this, the springs-and-rods
property should be set to
ly:spanner::set-spacing-rods
.
\relative c' { \key c\minor \time 2/4 c16( as') c,-. des-. \once\override TrillSpanner.minimum-length = #15 \once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods \afterGrace es4 \startTrillSpan { d16[( \stopTrillSpan es)] } c( c' g es c g' es d \hideNotes c8) }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Extending a TrillSpanner ] | [ Up : Tweaks and overrides ] | [ Fine-tuning pedal brackets > ] |
Extending glissandi across repeats
A glissando which extends into several \alternative
blocks can
be simulated by adding a hidden grace note with a glissando at the
start of each \alternative
block. The grace note should be at
the same pitch as the note which starts the initial glissando. This is
implemented here with a music function which takes the pitch of the
grace note as its argument.
Note that in polyphonic music the grace note must be matched with corresponding grace notes in all other voices.
repeatGliss = #(define-music-function (grace) (ly:pitch?) #{ % the next two lines ensure the glissando is long enough % to be visible \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods \once \override Glissando.minimum-length = 3.5 \once \hideNotes \grace $grace \glissando #}) \score { \relative c'' { \repeat volta 3 { c4 d e f\glissando } \alternative { { g2 d } { \repeatGliss f g2 e } { \repeatGliss f e2 d } } } } music = \relative c' { \voiceOne \repeat volta 2 { g a b c\glissando } \alternative { { d1 } { \repeatGliss c \once \omit StringNumber e1\2 } } } \score { \new StaffGroup << \new Staff << \new Voice { \clef "G_8" \music } >> \new TabStaff << \new TabVoice { \clef "moderntab" \music } >> >> } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Extending glissandi across repeats ] | [ Up : Tweaks and overrides ] | [ Flat Ties > ] |
Fine-tuning pedal brackets
The appearance of pedal brackets may be altered in different ways.
\paper { ragged-right = ##f } \relative c'' { c2\sostenutoOn c c2\sostenutoOff c \once \override Staff.PianoPedalBracket.shorten-pair = #'(-7 . -2) c2\sostenutoOn c c2\sostenutoOff c \once \override Staff.PianoPedalBracket.edge-height = #'(0 . 3) c2\sostenutoOn c c2\sostenutoOff c }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Fine-tuning pedal brackets ] | [ Up : Tweaks and overrides ] | [ Force a cancellation natural before accidentals > ] |
Flat Ties
The function takes the default Tie.stencil
as an argument,
calculating the result relying on the extents of this default.
Further tweaking is possible by overriding
Tie.details.height-limit
or with \shape
. It’s also
possible to change the custom-definition on the fly.
%% http://lsr.di.unimi.it/LSR/Item?id=1031 #(define ((flared-tie coords) grob) (define (pair-to-list pair) (list (car pair) (cdr pair))) (define (normalize-coords goods x y dir) (map (lambda (coord) ;(coord-scale coord (cons x (* y dir))) (cons (* x (car coord)) (* y dir (cdr coord)))) goods)) (define (my-c-p-s points thick) (make-connected-path-stencil points thick 1.0 1.0 #f #f)) ;; outer let to trigger suicide (let ((sten (ly:tie::print grob))) (if (grob::is-live? grob) (let* ((layout (ly:grob-layout grob)) (line-thickness (ly:output-def-lookup layout 'line-thickness)) (thickness (ly:grob-property grob 'thickness 0.1)) (used-thick (* line-thickness thickness)) (dir (ly:grob-property grob 'direction)) (xex (ly:stencil-extent sten X)) (yex (ly:stencil-extent sten Y)) (lenx (interval-length xex)) (leny (interval-length yex)) (xtrans (car xex)) (ytrans (if (> dir 0)(car yex) (cdr yex))) (uplist (map pair-to-list (normalize-coords coords lenx (* leny 2) dir)))) (ly:stencil-translate (my-c-p-s uplist used-thick) (cons xtrans ytrans))) '()))) #(define flare-tie (flared-tie '((0 . 0)(0.1 . 0.2) (0.9 . 0.2) (1.0 . 0.0)))) \layout { \context { \Voice \override Tie.stencil = #flare-tie } } \paper { ragged-right = ##f tagline = ##f } \relative c' { a4~a \override Tie.height-limit = 4 a'4~a a'4~a <a,, c e a c e a c e>~ q \break a'4~a \once \override Tie.details.height-limit = 14 a4~a \break a4~a \once \override Tie.details.height-limit = 0.5 a4~a \break a4~a \shape #'((0 . 0) (0 . 0.4) (0 . 0.4) (0 . 0)) Tie a4~a \break a4~a \once \override Tie.stencil = #(flared-tie '((0 . 0)(0.1 . 0.4) (0.9 . 0.4) (1.0 . 0.0))) a4~a a4~a \once \override Tie.stencil = #(flared-tie '((0 . 0)(0.06 . 0.1) (0.94 . 0.1) (1.0 . 0.0))) a4~a }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Flat Ties ] | [ Up : Tweaks and overrides ] | [ Horizontale Verschiebung von Noten erzwingen > ] |
Force a cancellation natural before accidentals
The following example shows how to force a natural sign before an accidental.
\relative c' { \key es \major bes c des \tweak Accidental.restore-first ##t eis }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Force a cancellation natural before accidentals ] | [ Up : Tweaks and overrides ] | [ Fret diagrams explained and developed > ] |
Horizontale Verschiebung von Noten erzwingen
Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere Position manuell eingestellt werden. Die Einheiten hier sind Notenlinienzwischenräume.
\relative c' << { <d g>2 <d g> } \\ { <b f'>2 \once \override NoteColumn.force-hshift = 1.7 <b f'>2 } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Horizontale Verschiebung von Noten erzwingen ] | [ Up : Tweaks and overrides ] | [ Generating custom flags > ] |
Fret diagrams explained and developed
This snippet shows many possibilities for obtaining and tweaking fret diagrams.
<< \chords { a1 a \bar "||" \break \repeat unfold 3 { c c c d d \bar "||" \break } } \new Voice { % Set global properties of fret diagram \override TextScript.size = 1.2 \override TextScript.fret-diagram-details .finger-code = #'below-string \override TextScript.fret-diagram-details .dot-color = #'black % 1 % % A chord for ukulele. a'1^\markup \override #'(fret-diagram-details . ((string-count . 4) (dot-color . white) (finger-code . in-dot))) \fret-diagram "4-2-2;3-1-1;2-o;1-o;" % 2 % % A chord for ukulele, with formatting defined in definition % string: 1.2 * size, 4 strings, 4 frets, fingerings below, % string dot radius .35 of fret spacing, dot position 0.55 of % fret spacing. a'1^\markup \override #'(fret-diagram-details . ((dot-color . white) (open-string . "o"))) \fret-diagram "s:1.2;w:4;h:3;f:2;d:0.35;p:0.55;4-2-2;3-1-1;2-o;1-o;" %% %% These chords will be in normal orientation %% % 3 % % C major for guitar, barred on third fret: verbose style, % roman fret label, finger labels below string, straight barre. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) % 4 % % C major for guitar, barred on third fret: double barre used % to test barre function, verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) % 5 % % C major for guitar, with capo on third fret: verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) % 6 % % Simple D chord. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (string-thickness-factor . 0.3) (dot-position . 0.5) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" % 7 % % Simple D chord, large top fret thickness. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" %% %% These chords will be in landscape orientation %% \override TextScript.fret-diagram-details .orientation = #'landscape % 8 % % C major for guitar, barred on third fret: verbose style, % roman fret label, finger labels below string, straight % barre. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) % 9 % % C major for guitar, barred on third fret: Double barre % used to test barre function, verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) % 10 % % C major for guitar, with capo on third fret: verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) % 11 % % Simple D chord. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" % 12 % % Simple D chord, large top fret thickness. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" %% %% These chords will be in opposing-landscape orientation. %% \override TextScript.fret-diagram-details .orientation = #'opposing-landscape % 13 % % C major for guitar, barred on third fret: verbose style, % roman fret label, finger labels below string, straight % barre. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-lower) (finger-code . below-string) (barre-type . straight))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 5 1 3)) % 14 % % C major for guitar, barred on third fret: double barre % used to test barre function, verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . arabic) (dot-label-font-mag . 0.9) (finger-code . in-dot) (fret-label-font-mag . 0.6) (fret-label-vertical-offset . 0) (label-dir . -1) (mute-string . "M") (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (place-fret 5 3 1) (place-fret 4 5 2) (place-fret 3 5 3) (place-fret 2 5 4) (place-fret 1 3 1) (barre 4 2 5) (barre 5 1 3)) % 15 % % C major for guitar, with capo on third fret: verbose style. c'1^\markup % 110% of default size \override #'(size . 1.1) \override #'(fret-diagram-details . ((number-type . roman-upper) (dot-label-font-mag . 0.9) (finger-code . none) (fret-label-vertical-offset . 0.5) (xo-font-magnification . 0.4) (xo-padding . 0.3))) \fret-diagram-verbose #'((mute 6) (capo 3) (open 5) (place-fret 4 5 1) (place-fret 3 5 2) (place-fret 2 5 3) (open 1)) % 16 % % Simple D chord. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" % 17 % % Simple D chord, large top fret thickness. d'1^\markup \override #'(fret-diagram-details . ((finger-code . below-string) (dot-radius . 0.35) (dot-position . 0.5) (top-fret-thickness . 7) (fret-count . 3))) \fret-diagram-terse "x;x;o;2-1;3-2;2-3;" } >> \paper { tagline = ##f ragged-right = ##t indent = 0 system-system-spacing.basic-distance = 20 } \layout { \context { \Score \override SpacingSpanner.spacing-increment = 3 } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Fret diagrams explained and developed ] | [ Up : Tweaks and overrides ] | [ Glissando kann Grobs überspringen > ] |
Generating custom flags
The stencil
property of the Flag
grob can be set to a
custom scheme function to generate the glyph for the flag.
#(define-public (weight-flag grob) (let* ((stem-grob (ly:grob-parent grob X)) (log (- (ly:grob-property stem-grob 'duration-log) 2)) (is-up? (eqv? (ly:grob-property stem-grob 'direction) UP)) (yext (if is-up? (cons (* log -0.8) 0) (cons 0 (* log 0.8)))) (flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext)) (stroke-style (ly:grob-property grob 'stroke-style)) (stroke-stencil (if (equal? stroke-style "grace") (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) empty-stencil))) (ly:stencil-add flag-stencil stroke-stencil))) % Create a flag stencil by looking up the glyph from the font #(define (inverted-flag grob) (let* ((stem-grob (ly:grob-parent grob X)) (dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u")) (flag (retrieve-glyph-flag "" dir "" grob)) (line-thickness (ly:staff-symbol-line-thickness grob)) (stem-thickness (ly:grob-property stem-grob 'thickness)) (stem-width (* line-thickness stem-thickness)) (stroke-style (ly:grob-property grob 'stroke-style)) (stencil (if (null? stroke-style) flag (add-stroke-glyph flag stem-grob dir stroke-style ""))) (rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0))) (ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0)))) snippetexamplenotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 } { \time 1/4 \textMark "Normal flags" \snippetexamplenotes \textMark "Custom flag: inverted" \override Flag.stencil = #inverted-flag \snippetexamplenotes \textMark "Custom flag: weight" \override Flag.stencil = #weight-flag \snippetexamplenotes \textMark "Revert to normal" \revert Flag.stencil \snippetexamplenotes }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Generating custom flags ] | [ Up : Tweaks and overrides ] | [ Hairpins with different line styles > ] |
Glissando kann Grobs überspringen
NoteColumn
-Grobs können bei Glissandos übersprungen werden.
\relative c' { a2 \glissando \once \override NoteColumn.glissando-skip = ##t f''4 d, }
Hairpins with different line styles
Hairpins can take any style from line-interface
- dashed-line,
dotted-line, line, trill or zigzag.
\relative c' { c2\< c\! \override Hairpin.style = #'dashed-line c2\< c\! \override Hairpin.style = #'dotted-line c2\< c\! \override Hairpin.style = #'line c2\< c\! \override Hairpin.style = #'trill c2\< c\! \override Hairpin.style = #'zigzag c2\< c\! \revert Hairpin.style c2\< c\! }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Hairpins with different line styles ] | [ Up : Tweaks and overrides ] | [ How to change fret diagram position > ] |
Horizontally aligning custom dynamics (e.g. "sempre pp", "piu f", "subito p")
Some dynamic expressions involve additional text, like „sempre pp“. Since dynamics are usually centered under the note, the \pp would be displayed way after the note it applies to.
To correctly align the „sempre pp“ horizontally so that it is aligned as if it were only the \pp, there are several approaches:
- Simply use
\once\override DynamicText.X-offset = #-9.2
before the note with the dynamics to manually shift it to the correct position. Drawback: This has to be done manually each time you use that dynamic markup... - Add some padding (
#:hspace 7.1
) into the definition of your custom dynamic mark so that after LilyPond center-aligns it, it is already correctly aligned. Drawback: The padding really takes up that space and does not allow any other markup or dynamics to be shown in that position. - Shift the dynamic script
\once\override ... .X-offset = ...
. Drawback:\once\override
is needed for every invocation! - Set the dimensions of the additional text to 0 (using
#:with-dimensions '(0 . 0) '(0 . 0)
). Drawback: For LilyPond, „sempre“ has no extent now. This means it might put other stuff there, causing collisions (which are not detected by LilyPond’s collision detection algorithm!). There also seems to be some spacing, so it is not exactly the same alignment as without the additional text. - Add an explicit shift directly inside the scheme function for the dynamic script.
- Set an explicit alignment inside the dynamic script. By default, this
won’t have any effect, only if one sets
X-offset
! Drawback: One needs to setDynamicText.X-offset
, which will apply to all dynamic texts! Also, it is aligned at the right edge of the additional text, not at the center of \pp.
\paper { ragged-right = ##f indent = 2.5\cm tagline = ##f } % Solution 1: Using a simple markup with a particular halign value % Drawback: It's a markup, not a dynamic command, so \dynamicDown % etc. will have no effect semppMarkup = \markup { \halign #1.4 \italic "sempre" \dynamic "pp" } % Solution 2: Using a dynamic script & shifting with % \once \override ...X-offset = .. % Drawback: \once \override needed for every invocation semppK = #(make-dynamic-script (markup #:line (#:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 3: Padding the dynamic script so the center-alignment % puts it at the correct position % Drawback: the padding really reserves the space, nothing else can be there semppT = #(make-dynamic-script (markup #:line (#:normal-text #:italic "sempre" #:dynamic "pp" #:hspace 7.1))) % Solution 4: Dynamic, setting the dimensions of the additional text to 0 % Drawback: To lilypond "sempre" has no extent, so it might put % other stuff there => collisions % Drawback: Also, there seems to be some spacing, so it's not exactly the % same alignment as without the additional text semppM = #(make-dynamic-script (markup #:line (#:with-dimensions '(0 . 0) '(0 . 0) #:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 5: Dynamic with explicit shifting inside the scheme function semppG = #(make-dynamic-script (markup #:hspace 0 #:translate '(-18.85 . 0) #:line (#:normal-text #:italic "sempre" #:dynamic "pp"))) % Solution 6: Dynamic with explicit alignment. This has only effect % if one sets X-offset! % Drawback: One needs to set DynamicText.X-offset! % Drawback: Aligned at the right edge of the additional text, % not at the center of pp semppMII = #(make-dynamic-script (markup #:line (#:right-align #:normal-text #:italic "sempre" #:dynamic "pp"))) \new StaffGroup << \new Staff = "s" \with { instrumentName = \markup \column { Normal } } << \relative c'' { \key es \major c4\pp c\p c c | c\ff c c\pp c } >> \new Staff = "sMarkup" \with { instrumentName = \markup \column { Normal markup } } << \relative c'' { \key es \major c4-\semppMarkup c\p c c | c\ff c c-\semppMarkup c } >> \new Staff = "sK" \with { instrumentName = \markup \column { Explicit shifting } } << \relative c'' { \key es \major \once \override DynamicText.X-offset = #-9.2 c4\semppK c\p c c c4\ff c \once \override DynamicText.X-offset = #-9.2 c4\semppK c } >> \new Staff = "sT" \with { instrumentName = \markup \column { Right padding } } << \relative c'' { \key es \major c4\semppT c\p c c | c\ff c c\semppT c } >> \new Staff = "sM" \with { instrumentName = \markup \column { Set dimension "to zero" } } << \relative c'' { \key es \major c4\semppM c\p c c | c\ff c c\semppM c } >> \new Staff = "sG" \with { instrumentName = \markup \column { Shift inside dynamics} } << \relative c'' { \key es \major c4\semppG c\p c c | c\ff c c\semppG c } >> \new Staff = "sMII" \with { instrumentName = \markup \column { Alignment inside dynamics } } << \relative c'' { \key es \major % Setting to ##f (false) gives the same result \override DynamicText.X-offset = #0 c4\semppMII c\p c c | c\ff c c\semppMII c } >> >> \layout { \override Staff.InstrumentName.self-alignment-X = #LEFT }
How to change fret diagram position
If you want to move the position of a fret diagram, for example, to avoid collision, or to place it between two notes, you have various possibilities:
1) modify #’padding or #’extra-offset values (as shown in the first snippet)
2) you can add an invisible voice and attach the fret diagrams to the invisible notes in that voice (as shown in the second example).
If you need to move the fret according with a rythmic position inside the bar (in the example, the third beat of the measure) the second example is better, because the fret is aligned with the third beat itself.
\header { tagline = ##f } harmonies = \chordmode { a8:13 % THE FOLLOWING IS THE COMMAND TO MOVE THE CHORD NAME \once \override ChordNames.ChordName.extra-offset = #'(10 . 0) b8:13 s2. % THIS LINE IS THE SECOND METHOD s4 s4 b4:13 } \score { << \new ChordNames \harmonies \new Staff {a8^\markup { \fret-diagram "6-x;5-0;4-2;3-0;2-0;1-2;" } % THE FOLLOWING IS THE COMMAND TO MOVE THE FRET DIAGRAM \once \override TextScript.extra-offset = #'(10 . 0) b4.~^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break % HERE IS THE SECOND METHOD << { a8 b4.~ b4. a8} { s4 s4 s4^\markup { \fret-diagram "6-x;5-2;4-4;3-2;2-2;1-4;" } } >> } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < How to change fret diagram position ] | [ Up : Tweaks and overrides ] | [ Keep change clefs full sized > ] |
Eine Zäsur einfügen
Zäsurzeichen können erstellt werden, indem die 'text
-Eigenschaft
des BreathingSign
-Objektes verändert wird. Ein gekrümmtes
Zäsurzeichen ist auch möglich.
\relative c'' { \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.straight" } c8 e4. \breathe g8. e16 c4 \override BreathingSign.text = \markup { \musicglyph "scripts.caesura.curved" } g8 e'4. \breathe g8. e16 c4 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Eine Zäsur einfügen ] | [ Up : Tweaks and overrides ] | [ Line arrows > ] |
Keep change clefs full sized
When a clef is changed, the clef sign displayed is smaller than the
initial clef. This can be overridden with full-size-change
.
\relative c' { \clef "treble" c1 \clef "bass" c1 \clef "treble" c1 \override Staff.Clef.full-size-change = ##t \clef "bass" c1 \clef "treble" c1 \revert Staff.Clef.full-size-change \clef "bass" c1 \clef "treble" c1 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Keep change clefs full sized ] | [ Up : Tweaks and overrides ] | [ Making an object invisible with the ’transparent property > ] |
Line arrows
Arrows can be applied to text-spanners and line-spanners (such as the Glissando).
\relative c'' { \override TextSpanner.bound-padding = #1.0 \override TextSpanner.style = #'line \override TextSpanner.bound-details.right.arrow = ##t \override TextSpanner.bound-details.left.text = #"fof" \override TextSpanner.bound-details.right.text = #"gag" \override TextSpanner.bound-details.right.padding = #0.6 \override TextSpanner.bound-details.right.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override Glissando.bound-details.right.arrow = ##t \override Glissando.arrow-length = #0.5 \override Glissando.arrow-width = #0.25 a8\startTextSpan gis a4 b\glissando b, g'4 c\stopTextSpan c2 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Line arrows ] | [ Up : Tweaks and overrides ] | [ Making glissandi breakable > ] |
Making an object invisible with the ’transparent property
Setting the transparent
property will cause an object to be
printed in „invisible ink“: the object is not printed, but all its
other behavior is retained. The object still takes up space, it takes
part in collisions, and slurs, ties and beams can be attached to it.
This snippet demonstrates how to connect different voices using ties. Normally, ties only connect two notes in the same voice. By introducing a tie in a different voice, and blanking the first up-stem in that voice, the tie appears to cross voices.
\relative { \time 2/4 << { \once \hide Stem \once \override Stem.length = #8 b'8 ~ 8\noBeam \once \hide Stem \once \override Stem.length = #8 g8 ~ 8\noBeam } \\ { b8 g g e } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Making an object invisible with the ’transparent property ] | [ Up : Tweaks and overrides ] | [ Manually controlling beam positions > ] |
Making glissandi breakable
Setting the breakable
property to #t
in combination with
after-line-breaking
allows a glissando to break if it occurs at
a line break:
\paper { tagline = ##f } glissandoSkipOn = { \override NoteColumn.glissando-skip = ##t \hide NoteHead \override NoteHead.no-ledgers = ##t } \relative c'' { \override Glissando.breakable = ##t \override Glissando.after-line-breaking = ##t f1\glissando | \break a4 r2. | f1\glissando \once \glissandoSkipOn \break a2 a4 r4 | }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Making glissandi breakable ] | [ Up : Tweaks and overrides ] | [ Measure-centered bar numbers > ] |
Manually controlling beam positions
Beam positions may be controlled manually, by overriding the
positions
setting of the Beam
grob.
\relative c' { \time 2/4 % from upper staff-line (position 2) to center (position 0) \override Beam.positions = #'(2 . 0) c8 c % from center to one above center (position 1) \override Beam.positions = #'(0 . 1) c8 c }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Manually controlling beam positions ] | [ Up : Tweaks and overrides ] | [ Mensurstriche-Layout (Taktstriche zwischen den Systemen > ] |
Measure-centered bar numbers
For film scores, a common convention is to center bar numbers within
their measure. This is achieved through setting the
centerBarNumbers
context property to true. When this is used,
the type of the bar number grobs is CenteredBarNumber
rather
than BarNumber
.
This example demonstrates a number of settings: the centered bar numbers are boxed and placed below the staves.
\layout { \context { \Score centerBarNumbers = ##t barNumberVisibility = #all-bar-numbers-visible \override CenteredBarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) \override CenteredBarNumberLineSpanner.direction = #DOWN } } \new StaffGroup << \new Staff \relative c' { d4-. f8( e d4) bes'-> | d,-. f8( e d4) cis'-> | g-. f8( d e4) g-> | a,1-> | } \new Staff \relative c { \clef bass d4 f8 e d2~ | 4 f8 e d2~ | 4 4 2 | a1 | } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Measure-centered bar numbers ] | [ Up : Tweaks and overrides ] | [ Modifying the Ottava spanner slope > ] |
Mensurstriche-Layout (Taktstriche zwischen den Systemen
Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen,
sondern zwischen den Systemen gesetzt werden, kann mit einer StaffGroup
anstelle von ChoirStaff
erreicht werden. Die Taktlinien auf den
Systemen werden mit der transparent
-Eigenschaft ausgelöscht.
\layout { \context { \Staff measureBarType = "-span|" } } music = \fixed c'' { c1 d2 \section e2 f1 \fine } \new StaffGroup << \new Staff \music \new Staff \music >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Mensurstriche-Layout (Taktstriche zwischen den Systemen ] | [ Up : Tweaks and overrides ] | [ Moving dotted notes in polyphony > ] |
Modifying the Ottava spanner slope
It is possible to change the slope of the Ottava spanner.
\relative c'' { \override Staff.OttavaBracket.stencil = #ly:line-spanner::print \override Staff.OttavaBracket.bound-details = #`((left . ((Y . 0) (attach-dir . ,LEFT) (padding . 0) (stencil-align-dir-y . ,CENTER))) (right . ((Y . 5.0) ; Change the number here (padding . 0) (attach-dir . ,RIGHT) (text . ,(make-draw-dashed-line-markup (cons 0 -1.2)))))) \override Staff.OttavaBracket.left-bound-info = #ly:horizontal-line-spanner::calc-left-bound-info-and-text \override Staff.OttavaBracket.right-bound-info = #ly:horizontal-line-spanner::calc-right-bound-info \ottava 1 c1 c'''1 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Modifying the Ottava spanner slope ] | [ Up : Tweaks and overrides ] | [ Moving slur positions vertically > ] |
Moving dotted notes in polyphony
When a dotted note in the upper voice is moved to avoid a collision
with a note in another voice, the default is to move the upper note to
the right. This behaviour can be over-ridden by using the
prefer-dotted-right
property of NoteCollision
.
\new Staff \relative c' << { f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##f f2. f4 \override Staff.NoteCollision.prefer-dotted-right = ##t f2. f4 } \\ { e4 e e e e e e e e e e e } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Moving dotted notes in polyphony ] | [ Up : Tweaks and overrides ] | [ Systeme schachteln > ] |
Moving slur positions vertically
The vertical position of a slur can be adjusted using the
positions
property of Slur
. The property has 2
parameters, the first referring to the left end of the slur and the
second to the right. The values of the parameters are not used by
LilyPond to make an exact movement of the slur - instead it selects
what placement of the slur looks best, taking into account the
parameter values. Positive values move the slur up, and are
appropriate for notes with stems down. Negative values move downward
slurs further down.
\relative c' { \stemDown e4( a) \override Slur.positions = #'(1 . 1) e4( a) \override Slur.positions = #'(2 . 2) e4( a) \override Slur.positions = #'(3 . 3) e4( a) \override Slur.positions = #'(4 . 4) e4( a) \override Slur.positions = #'(5 . 5) e4( a) \override Slur.positions = #'(0 . 5) e4( a) \override Slur.positions = #'(5 . 0) e4( a) \stemUp \override Slur.positions = #'(-5 . -5) e4( a) \stemDown \revert Slur.positions e4( a) }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Moving slur positions vertically ] | [ Up : Tweaks and overrides ] | [ Overriding articulations by type > ] |
Systeme schachteln
Die Eigenschaft systemStartDelimiterHierarchy
kann eingesetzt
werden, um komplizierte geschachtelte Systemklammern zu erstellen. Der
Befehl \set StaffGroup.systemStartDelimiterHierarchy
nimmt eine
Liste mit der Anzahl der Systeme, die ausgegeben werden, auf. Vor jedem
System kann eine Systemanfangsklammer angegeben werden. Sie muss in Klammern eingefügt
werden und umfasst so viele Systeme, wie die Klammer einschließt. Elemente
in der Liste können ausgelassen werden, aber die erste Klammer umfasst immer
die gesamte Gruppe. Die Möglichkeiten der Anfangsklammer sind: SystemStartBar
,
SystemStartBracket
, SystemStartBrace
und
SystemStartSquare
.
\new StaffGroup \relative c'' << \override StaffGroup.SystemStartSquare.collapse-height = 4 \set StaffGroup.systemStartDelimiterHierarchy = #'(SystemStartSquare (SystemStartBrace (SystemStartBracket a (SystemStartSquare b) ) c ) d) \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } \new Staff { c1 } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Systeme schachteln ] | [ Up : Tweaks and overrides ] | [ Sichtbarkeit von Prozent-Wiederholungen > ] |
Overriding articulations by type
Sometimes you may want to affect a single articulation-type. Although
it is always possible to use \tweak
, it might become tedious to
do so for every single sign of a whole score. The following shows how
to tweak articulations with a list of custom settings. One use-case
might be to create a style sheet.
With 2.16.2 and above it is possible to put the proposed function,
\customScripts
, into a \layout
-block.
% Code by David Nalesnik and Thomas Morley #(define (custom-script-tweaks ls) (lambda (grob) (let* ((type (ly:event-property (ly:grob-property grob 'cause) 'articulation-type)) (tweaks (assoc-ref ls type))) (if tweaks (for-each (lambda (x) (ly:grob-set-property! grob (car x) (cdr x))) tweaks))))) customScripts = #(define-music-function (settings) (list?) #{ \override Script.before-line-breaking = #(custom-script-tweaks settings) #}) revertCustomScripts = \revert Script.before-line-breaking %%%%%%%%%%%%% % Example: %%%%%%%%%%%%% % Predefine a list of desired tweaks. #(define my-settings-1 '( (staccato . ((color . (1 0 0)) (padding . 0.5))) (accent . ((font-size . 0) (color . (1 0 0)))) (tenuto . ((rotation . (45 0 0)) (padding . 2) (font-size . 10))) (staccatissimo . ((padding . 1) (color . (1 0 0)))) (segno . ((font-size . 0) (color . (1 0 0)))) )) #(define my-settings-2 '( (staccato . ((color . (0 1 0)))) (accent . ((font-size . 4) (color . (0 1 0)) (padding . 1.5))) (tenuto . ((font-size . 10))) (staccatissimo . ((padding . 2) (color . (0 1 0)))) (coda . ((color . (0 1 0)) (padding . 1))) )) one = \relative c'' { f1-- \customScripts #my-settings-1 f-. f-! f-> f-- f-!\segno \revertCustomScripts f-> f-. } two = \relative c' { f1-- \customScripts #my-settings-2 f-. f-! f-> f---> f-! f-> f-.\coda } \new Staff << \new Voice { \voiceOne \one } \new Voice { \voiceTwo \two } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Overriding articulations by type ] | [ Up : Tweaks and overrides ] | [ Positioning arpeggios > ] |
Sichtbarkeit von Prozent-Wiederholungen
Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt
werden, indem man die Eigenschaft repeatCountVisibility
beeinflusst.
\relative c'' { \set countPercentRepeats = ##t \set repeatCountVisibility = #(every-nth-repeat-count-visible 5) \repeat percent 10 { c1 } \break \set repeatCountVisibility = #(every-nth-repeat-count-visible 2) \repeat percent 6 { c1 d1 } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Sichtbarkeit von Prozent-Wiederholungen ] | [ Up : Tweaks and overrides ] | [ Positionierung von Ganztaktpausen > ] |
Positioning arpeggios
If you need to extend or shorten an arpeggio, you can modify the upper and lower start positions independently.
\relative c' { <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(-5 . 0) <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(0 . 5) <c e g b>1\arpeggio \once \override Arpeggio.positions = #'(-5 . 5) <c e g b>1\arpeggio }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Positioning arpeggios ] | [ Up : Tweaks and overrides ] | [ Textbeschriftung innerhalb von Bögen positionieren > ] |
Positionierung von Ganztaktpausen
Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die vertikale Position von Ganztaktpausen zu beeinflussen, indem man sie an eine Tonhöhe anhängt. In polyphoner Notation wird aber dennoch die Position der Pausen von geraden und ungeraden Stimmen voneinander unterschieden. Die Position von Ganztaktpausen kann wie folgt verändert werden:
\relative c'' { % Multi-measure rests by default are set under the fourth line R1 % They can be moved using an override \override MultiMeasureRest.staff-position = -2 R1 \override MultiMeasureRest.staff-position = 0 R1 \override MultiMeasureRest.staff-position = 2 R1 \override MultiMeasureRest.staff-position = 3 R1 \override MultiMeasureRest.staff-position = 6 R1 \revert MultiMeasureRest.staff-position \break % In two Voices, odd-numbered voices are under the top line << { R1 } \\ { a1 } >> % Even-numbered voices are under the bottom line << { a1 } \\ { R1 } >> % Multi-measure rests in both voices remain separate << { R1 } \\ { R1 } >> % Separating multi-measure rests in more than two voices % requires an override << { R1 } \\ { R1 } \\ \once \override MultiMeasureRest.staff-position = 0 { R1 } >> % Using compressed bars in multiple voices requires another override % in all voices to avoid multiple instances being printed \compressMMRests << \revert MultiMeasureRest.direction { R1*3 } \\ \revert MultiMeasureRest.direction { R1*3 } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Positionierung von Ganztaktpausen ] | [ Up : Tweaks and overrides ] | [ Setzen von Taktnummern in Kästen oder Kreisen > ] |
Textbeschriftung innerhalb von Bögen positionieren
Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die
outside-staff-priority
-Eigenschaft auf falsch gesetzt wird.
\relative c'' { \override TextScript.avoid-slur = #'inside \override TextScript.outside-staff-priority = ##f c2(^\markup { \halign #-10 \natural } d4.) c8 }
Setzen von Taktnummern in Kästen oder Kreisen
Taktnummern können auch in Boxen oder Kreisen gesetzt werden.
\relative c' { % Prevent bar numbers at the end of a line and permit them elsewhere \override Score.BarNumber.break-visibility = #end-of-line-invisible \set Score.barNumberVisibility = #(every-nth-bar-number-visible 4) % Increase the size of the bar number by 2 \override Score.BarNumber.font-size = 2 % Draw a box round the following bar number(s) \override Score.BarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) \repeat unfold 5 { c1 } % Draw a circle round the following bar number(s) \override Score.BarNumber.stencil = #(make-stencil-circler 0.1 0.25 ly:text-interface::print) \repeat unfold 4 { c1 } \bar "|." }
Metronom- und Übungszeichen unter das System setzen
Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben.
Um sie unter das System zu setzen, muss die direction
-Eigenschaft
von MetronomeMark
oder RehearsalMark
entsprechend verändert werden.
\layout { indent = 0 ragged-right = ##f } { % Metronome marks below the staff \override Score.MetronomeMark.direction = #DOWN \tempo 8. = 120 c''1 % Rehearsal marks below the staff \override Score.RehearsalMark.direction = #DOWN \mark \default c''1 }
Printing note names with and without an octave marker
The NoteNames
context can be used to print the text value of
notes. The printOctaveNames
property turns on or off the
representation of the octave of the note.
scale = \relative c' { a4 b c d e4 f g a } \new Staff { << \scale \context NoteNames { \set printOctaveNames = ##f \scale } >> R1 << \scale \context NoteNames { \set printOctaveNames = ##t \scale } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Printing note names with and without an octave marker ] | [ Up : Tweaks and overrides ] | [ Proportional strict notespacing > ] |
Printing tuplet brackets on the note head side
Whichever option you choose for controlling the tuplet bracket
visibility, it will show or hide the tuplet bracket irrespectively of
tuplet bracket placement (stem side or note head side). However, when
placing the tuplet bracket on the note head side some authors recommend
always printing the tuplet bracket. The option
visible-over-note-heads
can be used to achieve this.
music = \relative c'' { \tupletNeutral \tuplet 3/2 { c16[ d e } f8] \tupletUp \tuplet 3/2 { c8 d e } } \new Voice { \relative c' { \time 2/4 \override TupletBracket.visible-over-note-heads = ##t \override Score.TextMark.non-musical = ##f { \textMark \markup "default" \music } \override TupletBracket.bracket-visibility = #'if-no-beam { \textMark \markup \typewriter "'if-no-beam" \music } } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Printing tuplet brackets on the note head side ] | [ Up : Tweaks and overrides ] | [ Removing brace on first line of piano score > ] |
Proportional strict notespacing
If strict-note-spacing
is set spacing of notes is not influenced
by bars or clefs within a system. Rather, they are placed just before
the note that occurs at the same time. This may cause collisions.
\relative c'' << \override Score.SpacingSpanner.strict-note-spacing = ##t \set Score.proportionalNotationDuration = \musicLength 16 \new Staff { c8[ c \clef alto c c \grace { d16 } c8 c] c4 c2 \grace { c16[ c16] } c2 } \new Staff { c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4 c1 } >>
Removing brace on first line of piano score
This snippet removes the first brace from a PianoStaff
or a
GrandStaff
, together with the clefs.
It may be useful when cutting and pasting the engraved image into existing music.
It uses \alterBroken
.
someMusic = { \once \override Staff.Clef.stencil = ##f \once \override Staff.TimeSignature.stencil = ##f \repeat unfold 3 c1 \break \repeat unfold 5 c1 \break \repeat unfold 5 c1 } \score { \new PianoStaff << \new Staff = "right" \relative c'' \someMusic \new Staff = "left" \relative c' { \clef F \someMusic } >> \layout { indent=75 \context { \PianoStaff \alterBroken transparent #'(#t) SystemStartBrace } } } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Removing brace on first line of piano score ] | [ Up : Tweaks and overrides ] | [ Die erste leere Notenzeile auch entfernen > ] |
Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff
By default, bar lines in StaffGroup, PianoStaff, or GrandStaff groups are connected between the staves, i.e. a SpanBar is printed. This behaviour can be overridden on a staff-by-staff basis.
\relative c' { \new StaffGroup << \new Staff { e1 | e \once \override Staff.BarLine.allow-span-bar = ##f e1 | e | e } \new Staff { c1 | c | c \once \override Staff.BarLine.allow-span-bar = ##f c1 | c } \new Staff { a1 | a | a | a | a } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff ] | [ Up : Tweaks and overrides ] | [ Pausenstile > ] |
Die erste leere Notenzeile auch entfernen
Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur
entfernt werden, indem die Eigenschaft remove-first
der
VerticalAxisGroup
-Eigenschaft eingesetzt wird. Das kann
man global in einer \layout
-Umgebung oder lokal in dem
bestimmten Notensystem machen, das entfernt werden soll. In letzterem
Fall muss man den Kontext angeben.
Das untere Notensystem der zweiten Systemgruppe wird nicht entfernt, weil in die Einstellungen in dem Schnipsel nur für das eine Notensystem gültig sind.
\layout { \context { \Staff \RemoveEmptyStaves % To use the setting globally, uncomment the following line: % \override VerticalAxisGroup.remove-first = ##t } } \new StaffGroup << \new Staff \relative c' { e4 f g a \break c1 } \new Staff { % To use the setting globally, comment this line, % uncomment the line in the \layout block above \override Staff.VerticalAxisGroup.remove-first = ##t R1 \break R } >> \new StaffGroup << \new Staff \relative c' { e4 f g a \break c1 } \new Staff { R1 \break R } >> \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Die erste leere Notenzeile auch entfernen ] | [ Up : Tweaks and overrides ] | [ Rhythmic slashes > ] |
Pausenstile
Pausen können in verschiedenen Stilen dargestellt werden.
restsA = { r\maxima r\longa r\breve r1 r2 r4 r8 r16 s32 s64 s128 s256 s512 s1024 s1024 } restsB = { r\maxima r\longa r\breve r1 r2 r4 r8 r16 r32 r64 r128 r256 r512 r1024 s1024 } \new Staff \relative c { \omit Score.TimeSignature \cadenzaOn \override Staff.Rest.style = #'mensural <>^\markup \typewriter { mensural } \restsA \bar "" \break \override Staff.Rest.style = #'neomensural <>^\markup \typewriter { neomensural } \restsA \bar "" \break \override Staff.Rest.style = #'classical <>^\markup \typewriter { classical } \restsB \bar "" \break \override Staff.Rest.style = #'z <>^\markup \typewriter { z-style } \restsB \bar "" \break \override Staff.Rest.style = #'default <>^\markup \typewriter { default } \restsB \bar "" \break } \paper { indent = 0 tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Pausenstile ] | [ Up : Tweaks and overrides ] | [ Separating key cancellations from key signature changes > ] |
Rhythmic slashes
In „simple“ lead-sheets, sometimes no actual notes are written, instead only „rhythmic patterns“ and chords above the measures are notated giving the structure of a song. Such a feature is for example useful while creating/transcribing the structure of a song and also when sharing lead sheets with guitarists or jazz musicians.
startPat = { \improvisationOn \omit Stem } stopPat = { \improvisationOff \undo \omit Stem } \new Voice \with { \consists Pitch_squash_engraver } { c'4 d' e' f' | \startPat 4 4 4 4 | \stopPat f'4 e' d' c' }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Rhythmic slashes ] | [ Up : Tweaks and overrides ] | [ Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen > ] |
Separating key cancellations from key signature changes
By default, the accidentals used for key cancellations are placed
adjacent to those for key signature changes. This behavior can be
changed by overriding the break-align-orders
property of the
BreakAlignment
grob.
The value of break-align-orders
is a vector of length 3,
with quoted lists of breakable items as elements. Each list describes
the default order of prefatory matter at the end, in the middle, and at
the beginning of a line, respectively. We are only interested in
changing the behaviour in the middle of a line.
If you look up the definition of break-align-orders
in
LilyPond’s Internal Reference (see the
BreakAlignment
grob), you get the following order in the second element:
... staff-bar key-cancellation key-signature ...
We want to change that, moving key-cancellation
before
staff-bar
. To make this happen we use the
grob-transformer
function, which gives us access to the original
vector as the second argument of the lambda function, here called
orig (we don’t need the first argument,
grob). We return a new vector, with unchanged first and
last elements. For the middle element, we first remove
key-cancellation
from the list, then adding it again before
staff-bar
.
#(define (insert-before where what lst) (cond ((null? lst) ; If the list is empty, (list what)) ; return a single-element list. ((eq? where (car lst)) ; If we find symbol `where`, (cons what lst)) ; insert `what` before curr. position. (else ; Otherwise keep building the list by (cons (car lst) ; adding the current element and ; recursing with the next element. (insert-before where what (cdr lst)))))) cancellationFirst = \override Score.BreakAlignment.break-align-orders = #(grob-transformer 'break-align-orders (lambda (grob orig) (let* ((middle (vector-ref orig 1)) (middle (delq 'key-cancellation middle)) (middle (insert-before 'staff-bar 'key-cancellation middle))) (vector ;; end of line (vector-ref orig 0) ;; middle of line middle ;; beginning of line (vector-ref orig 2))))) music = { \key es \major d'1 \bar "||" \key a \major d'1 } { <>^\markup "default" \music } { <>^\markup "cancellation first" \cancellationFirst \music } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Separating key cancellations from key signature changes ] | [ Up : Tweaks and overrides ] | [ Setting system separators > ] |
Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen
Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note
eines Taktes ist, wird die Klammer an der vorhergehenden Taktlinie
beendet. Dieses Verhalten kann auch mit der Eigenschaft
'to-barline
geändert werden:
\relative c'' { e4\< e2. e1\! \override Hairpin.to-barline = ##f e4\< e2. e1\! }
Setting system separators
System separators can be inserted between systems. Any markup can be
used, but \slashSeparator
has been provided as a sensible
default.
\paper { system-separator-markup = \slashSeparator line-width = 120 tagline = ##f } notes = \relative c' { c1 | c \break c1 | c \break c1 | c } \book { \score { \new GrandStaff << \new Staff \notes \new Staff \notes >> } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Setting system separators ] | [ Up : Tweaks and overrides ] | [ Showing the same articulation above and below a note or chord > ] |
Shape individual ties in chords
To shape individual ties in chords use the method demonstrated below.
\paper { tagline = ##f } \markup "Chords can be tied note by note" { <c'~ e'~ g'~ c''~>2 q } \markup \wordwrap { Affecting those ties with "\\shape" will not succeed, because TieColumn positions them on its own behalf and more or less ignores the "\\shape-input". You may surpress this by setting 'positioning-done true. Alas, 'positioning-done is an internal property, setting it true means: all positioning is done, don't do anything further. So you better take care you really did. See the example below where this is missed: All directions are down and the thickness is not accurate: } { <c'~ e'~ g'~ c''~>2 \once \override TieColumn.positioning-done = ##t q } \markup "To cure that, enter ties with explicit direction-modifiers" { <c'_~ e'_~ g'_~ c''^~>2 \once \override TieColumn.positioning-done = ##t q } \markup "Now you can use \\shape for each tie as usual" { <c'-\shape #'((0 . 0) (0 . -10) (0 . -10) (0 . 0)) _~ e'-\shape #'((0 . 0) (0 . -5) (0 . -5) (0 . 0)) _~ g'-\shape #'((0 . 0) (0 . -2) (0 . -2) (0 . 0)) _~ c''-\shape #'((0 . 0) (0 . 5) (0 . 5) (0 . 0)) ^~ >2 \once \override TieColumn.positioning-done = ##t q } \markup "This works at line break as well." { <c'-\shape #'(((0 . 0) (0 . -10) (0 . -10) (0 . 0)) ((0 . 0) (0 . -10) (0 . -10) (0 . 0))) _~ e'-\shape #'(((0 . 0) (0 . -5) (0 . -5) (0 . 0)) ((0 . 0) (0 . -5) (0 . -5) (0 . 0))) _~ g'-\shape #'(((0 . 0) (0 . -2) (0 . -2) (0 . 0)) ((0 . 0) (0 . -2) (0 . -2) (0 . 0))) _~ c''-\shape #'(((0 . 0) (0 . 5) (0 . 5) (0 . 0)) ((0 . 0) (0 . 5) (0 . 5) (0 . 0))) ^~ >2 \break \once \override TieColumn.positioning-done = ##t q } \markup "Same with tieWaitForNote" { \set tieWaitForNote = ##t c'4-\shape #'((0 . 0) (0 . -10) (0 . -10) (0 . 0)) _~ e'-\shape #'((0 . 0) (0 . -5) (0 . -5) (0 . 0)) _~ g'-\shape #'((0 . 0) (0 . -2) (0 . -2) (0 . 0)) _~ c''-\shape #'((0 . 0) (0 . 5) (0 . 5) (0 . 0)) ^~ \once \override TieColumn.positioning-done = ##t <c' e' g' c''>1 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Shape individual ties in chords ] | [ Up : Tweaks and overrides ] | [ String number extender lines > ] |
Showing the same articulation above and below a note or chord
By default, LilyPond does not allow the same articulation (e.g., an
accent, a fermata, a flageolet, etc.) to be displayed above and below a
note. For example, c4_\fermata^\fermata
only shows a fermata
below. The fermata above gets simply ignored.
However, one can stick scripts (just like fingerings) inside a chord,
which means it is possible to have as many articulations as desired.
This approach has the advantage that it ignores the stem and positions
the articulation relative to the note head. This can be seen in the
case of the flageolets in the snippet. To mimic the behaviour of
scripts outside a chord, 'add-stem-support
would be required.
The solution is thus to write the note as a chord and add the
articulations inside of <...>
, using the direction modifiers
^
and _
as appropriate.
\relative c' { <>^"Wrong" c2_\fermata^\fermata % The second fermata is ignored! <e d'>2^\flageolet_\flageolet \stopStaff s1 \startStaff <>^"Works if written inside a chord" <e_\flageolet d'^\flageolet>2 <e_\flageolet d'^\flageolet>2 <e_\flageolet^\flageolet>2 <e_\fermata^\fermata>2 }
String number extender lines
Make an extender line for string number indications, showing that a series of notes is supposed to be played all on the same string.
stringNumberSpanner = #(define-music-function (StringNumber) (string?) #{ \override TextSpanner.style = #'solid \override TextSpanner.font-size = #-5 \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER \override TextSpanner.bound-details.left.text = \markup { \circle \number $StringNumber } #}) \relative c { \clef "treble_8" \stringNumberSpanner "5" \textSpannerDown a8\startTextSpan b c d e f\stopTextSpan \stringNumberSpanner "4" g\startTextSpan a bes4 a g2\stopTextSpan }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < String number extender lines ] | [ Up : Tweaks and overrides ] | [ Time signature in brackets > ] |
Suppressing warnings for clashing note columns
If notes from two voices with stems in the same direction are placed at
the same position, and both voices have no shift or the same shift
specified, the error message ‘warning: ignoring too many clashing
note columns’ will appear when compiling the LilyPond file. This
message can be suppressed by setting the 'ignore-collision
property of the NoteColumn
object to #t
. Please note that
this does not just suppress warnings but stops LilyPond trying to
resolve collisions at all and so may have unintended results unless
used with care.
ignore = \override NoteColumn.ignore-collision = ##t \relative c' { \new Staff << \new Voice { \ignore \stemDown f2 g } \new Voice { c2 \stemDown c, } >> }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Suppressing warnings for clashing note columns ] | [ Up : Tweaks and overrides ] | [ Time signature in parentheses > ] |
Time signature in brackets
The time signature can be enclosed within brackets.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1)) \time 2/4 a4 b8 c }
Time signature in parentheses
Enclose the time signature in parentheses.
\relative c'' { \override Staff.TimeSignature.stencil = #(lambda (grob) (parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1)) \time 2/4 a4 b8 c }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Time signature in parentheses ] | [ Up : Tweaks and overrides ] | [ Tuplet bracket and change staff > ] |
Time signature printing only the numerator as a number (instead of the fraction)
Sometimes, a time signature should not print the whole fraction (for
example, 7/4), but only the numerator (digit 7 in this case). This
can be easily done by using
\override Staff.TimeSignature.style = #'single-number
to change
the style permanently. By using
\revert Staff.TimeSignature.style
, this setting can be
reversed. To apply the single-number style to only one time signature,
use the \override
command and prefix it with a \once
.
\relative c'' { \time 3/4 c4 c c % Change the style permanently \override Staff.TimeSignature.style = #'single-number \time 2/4 c4 c \time 3/4 c4 c c % Revert to default style: \revert Staff.TimeSignature.style \time 2/4 c4 c % single-number style only for the next time signature \once \override Staff.TimeSignature.style = #'single-number \time 5/4 c4 c c c c \time 2/4 c4 c }
Tuplet bracket and change staff
This snippet shows how to set a tuplet starting in a lower staff and finishing in the upper one.
aigues = \relative c' { \time 6/8 s4. \stemDown c16[ bes' e] \stemUp g c e \stemDown g8 } basses = \relative c { \time 3/4 \clef F \tweak positions #'(4.5 . 9.5) \tweak edge-height #'(1 . -1) \tuplet 7/6 { c16[ bes' e] \change Staff = md \stemUp g[ c e g] } s4.s8 } \new PianoStaff \with { \omit TimeSignature } << \new Staff = md \aigues \new Staff = mg \basses >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Tuplet bracket and change staff ] | [ Up : Tweaks and overrides ] | [ Veränderung des Layouts von Verzierungen innerhalb der Noten > ] |
Eigenschaften des Schlüssels optimieren
Der Befehl \clef "treble_8"
ist gleichbedeutend mit einem
expliziten Setzen der Eigenschaften von clefGlyph
,
clefPosition
(welche die vertikale Position des Schlüssels bestimmt),
middleCPosition
und clefTransposition
. Ein Schlüssel wird
ausgegeben, wenn eine der Eigenschaften außer middleCPosition
sich
ändert.
Eine Änderung des Schriftzeichens (Glyph), der Schlüsselposition oder der
Oktavierung selber ändert noch nicht die Position der darauf folgenden Noten
auf dem System: das geschieht nur, wenn auch die Position des
eingestrichenen C (middleCPosition) angegeben wird. Die
Positionsparameter sind relativ zur Mittellinie des Systems, dabei versetzen
positive Zahlen die Position nach oben, jeweils eine Zahl für jede Linie
plus Zwischenraum. Der clefTransposition
-Wert ist normalerweise auf 7,
-7, 15 oder -15 gesetzt, aber auch andere Werte sind gültig.
Wenn ein Schlüsselwechsel an einem Zeilenwechsel geschieht, wird das neue
Symbol sowohl am Ende der alten Zeilen als auch am Anfang der neuen Zeile
ausgegeben. Wenn der Warnungs-Schlüssel am Ende der alten Zeile nicht
erforderlich ist, kann er unterdrückt werden, indem die
explicitClefVisibility
-Eigenschaft des Staff
-Kontextes auf den
Wert end-of-line-invisible
gesetzt wird. Das Standardverhalten kann
mit \unset Staff.explicitClefVisibility
wieder hergestellt werden.
Die folgenden Beispiele zeigen die Möglichkeiten, wenn man diese Eigenschaften manuell setzt. Auf der ersten Zeile erhalten die manuellen Änderungen die ursprüngliche relative Positionierung von Schlüssel und Noten, auf der zweiten Zeile nicht.
{ % The default treble clef \key f \major c'1 % The standard bass clef \set Staff.clefGlyph = "clefs.F" \set Staff.clefPosition = 2 \set Staff.middleCPosition = 6 \set Staff.middleCClefPosition = 6 \key g \major c'1 % The baritone clef \set Staff.clefGlyph = "clefs.C" \set Staff.clefPosition = 4 \set Staff.middleCPosition = 4 \set Staff.middleCClefPosition = 4 \key f \major c'1 % The standard choral tenor clef \set Staff.clefGlyph = "clefs.G" \set Staff.clefPosition = -2 \set Staff.clefTransposition = -7 \set Staff.middleCPosition = 1 \set Staff.middleCClefPosition = 1 \key f \major c'1 % A non-standard clef \set Staff.clefPosition = 0 \set Staff.clefTransposition = 0 \set Staff.middleCPosition = -4 \set Staff.middleCClefPosition = -4 \key g \major c'1 \break % The following clef changes do not preserve % the normal relationship between notes, key signatures % and clefs: \set Staff.clefGlyph = "clefs.F" \set Staff.clefPosition = 2 c'1 \set Staff.clefGlyph = "clefs.G" c'1 \set Staff.clefGlyph = "clefs.C" c'1 \set Staff.clefTransposition = 7 c'1 \set Staff.clefTransposition = 0 \set Staff.clefPosition = 0 c'1 % Return to the normal clef: \set Staff.middleCPosition = 0 c'1 } \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Eigenschaften des Schlüssels optimieren ] | [ Up : Tweaks and overrides ] | [ Using alternative flag styles > ] |
Veränderung des Layouts von Verzierungen innerhalb der Noten
Das Layout von Verzierungsausdrücken kann in der Musik verändert
werden mit den Funktionen add-grace-property
und
remove-grace-property
. Das folgende Beispiel definiert
die Richtung von Hälsen (Stem) für diese Verzierung, sodass die
Hälse nicht immer nach unten zeigen, und ändert den Standardnotenkopf
in ein Kreuz.
\relative c'' { \new Staff { $(remove-grace-property 'Voice 'Stem 'direction) $(add-grace-property 'Voice 'NoteHead 'style 'cross) \new Voice { \acciaccatura { f16 } g4 \grace { d16 e } f4 \appoggiatura { f,32 g a } e2 } } }
Using alternative flag styles
Alternative shapes for flags on eighth and shorter notes can be displayed by
overriding the stencil
property of Flag
. LilyPond provides
the following functions: modern-straight-flag
,
old-straight-flag
, and flat-flag
. Use \revert
to
restore the default shape.
To get stacked (i.e., vertically more compact) flags, call the command
\flagStyleStacked
, which can be reset with
\flagStyleDefault
.
Overriding the Flag
stencil does not change how flag elements are
positioned vertically. This is especially noticeable for flat flags:
LilyPond doesn’t dynamically adjust the vertical gaps between flag elements
in the same way as it does for beams. A possible solution to harmonize the
appearance is to replace flat flags with half beams, as shown in the second
staff; however, this can’t be done automatically. In the code of this
snippet, such half beams are entered with @
as a prefix, for example
@c8
.
Be aware that half beams are not Flag
grobs. This means in
particular that modifying Flag
properties won’t have any effect on
them (you have to use Beam
properties instead), and properties for
their associated Stem
grob will also behave beam-like.
"@" = #(define-music-function (music) (ly:music?) #{ \set stemLeftBeamCount = 0 $music [] #}) testnotes = { \autoBeamOff c8 d16 e''32 f64 \acciaccatura { g,,,8 } a128 b } \relative c' { \override TextScript.staff-padding = 6 \time 1/4 <>^"default" \testnotes \override Flag.stencil = #modern-straight-flag <>_"modern straight" \testnotes \override Flag.stencil = #old-straight-flag <>^"old straight" \testnotes \override Flag.stencil = #flat-flag <>_"flat" \testnotes \revert Flag.stencil \flagStyleStacked <>^"stacked" \testnotes \flagStyleDefault <>_"default" \testnotes } \relative c' { \time 3/4 \override Flag.stencil = #flat-flag <>^"flat" c8 c[ c] d16 d[ d] e''32 e[ e] f64 f[ f] \acciaccatura { g,,,8 } a128 a[ a a a a] <>^"beam-like" @c8 c[ c] @d16 d[ d] @e''32 e[ e] @f64 f[ f] \acciaccatura { g,,,8 } @a128 a[ a a a a] } \layout { indent = 0 \context { \Score \override NonMusicalPaperColumn.line-break-permission = ##f } }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Using alternative flag styles ] | [ Up : Tweaks and overrides ] | [ Using PostScript to generate special note head shapes > ] |
Using ly:grob-object to access grobs with \tweak
Some grobs can be accessed “laterally” from within another grob’s callback. These are usually listed as “layout objects” in the “Internal properties” section of a grob-interface. The function ly:grob-object is used to access these grobs.
Demonstrated below are some ways of accessing grobs from within a
NoteHead callback, but the technique is not limited to NoteHeads.
However, the NoteHead callback is particularly important, since it is
the implicit callback used by the \tweak
command.
The example function defined below ("display-grobs") is probably not that useful, but it demonstrates that the grobs are indeed being accessed.
Example console output:
#<Grob Accidental >
()
#<Grob Stem >
#(define (notehead-get-accidental notehead) ;; notehead is grob (ly:grob-object notehead 'accidental-grob)) #(define (notehead-get-arpeggio notehead) ;; notehead is grob (let ((notecolumn (notehead-get-notecolumn notehead))) (ly:grob-object notecolumn 'arpeggio))) #(define (notehead-get-notecolumn notehead) ;; notehead is grob (ly:grob-parent notehead X)) #(define (notehead-get-stem notehead) ;; notehead is grob (let ((notecolumn (notehead-get-notecolumn notehead))) (ly:grob-object notecolumn 'stem))) #(define (display-grobs notehead) ;; notehead is grob (let ((accidental (notehead-get-accidental notehead)) (arpeggio (notehead-get-arpeggio notehead)) (stem (notehead-get-stem notehead))) (format (current-error-port) "~2&~a\n" (make-string 20 #\-)) (for-each (lambda (x) (format (current-error-port) "~a\n" x)) (list accidental arpeggio stem)))) \relative c' { %% display grobs for each note head: %\override NoteHead.before-line-breaking = #display-grobs <c %% or just for one: \tweak before-line-breaking #display-grobs es g>1\arpeggio }
Using PostScript to generate special note head shapes
When a note head with a special shape cannot easily be generated with graphic markup, PostScript code can be used to generate the shape. This example shows how a parallelogram-shaped note head is generated.
%% Updaters remark: %% For unkown reasons this snippet returns a gs-error, but only, if compiled %% with multiple others like: lilypond *.ly %% Thus changing to a path-stencil. %% TODO description needs to get adjusted --harm parallelogram = #(ly:make-stencil '(path 0.1 (rmoveto 0 0.25 lineto 1.3125 0.75 lineto 1.3125 -0.25 lineto 0 -0.75) round round #t) (cons 0 1.3125) (cons -.75 .75)) myNoteHeads = \override NoteHead.stencil = \parallelogram normalNoteHeads = \revert NoteHead.stencil \relative c'' { \myNoteHeads g4 d' \normalNoteHeads <f, \tweak stencil \parallelogram b e>4 d }
Using the \tweak command to tweak individual grobs
With the \tweak
command, every grob can be tuned
directly. Here are some examples of available tweaks.
\relative c' { \time 2/4 \set fingeringOrientations = #'(right) < \tweak font-size #3 c \tweak color #red d-\tweak font-size #8 -4 \tweak style #'cross g \tweak duration-log #2 a >2 }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Using the \tweak command to tweak individual grobs ] | [ Up : Tweaks and overrides ] | [ Gesangstext und Ossia vertikal ausrichten > ] |
Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen
Indem man die 'Y-extent
-Eigenschaft auf einen passenden Wert setzt,
können alle DynamicLineSpanner
-Objekte (Crescendo-Klammern und
Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer
wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden.
Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz
sieht ansprechender aus.
Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer Grundlinie auszurichten.
music = \relative c' { a'2\p b\f e4\p f\f\> g, b\p c2^\markup { \huge gorgeous } c^\markup { \huge fantastic } } { \music \break \override DynamicLineSpanner.staff-padding = 3 \textLengthOn \override TextScript.staff-padding = 1 \music } \paper { tagline = ##f }
Gesangstext und Ossia vertikal ausrichten
Dieser Schnipsel zeigt, wie man die Kontexteigenschaften
alignBelowContext
und alignAboveContext
benutzen kann, um
die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren.
\relative c' << \new Staff = "1" { c4 c s2 } \new Staff = "2" { c4 c s2 } \new Staff = "3" { c4 c s2 } { \skip 2 << \lyrics { \set alignBelowContext = "1" lyrics4 below } \new Staff \with { alignAboveContext = "3" fontSize = -2 \override StaffSymbol.staff-space = #(magstep -2) \remove "Time_signature_engraver" } { \tuplet 6/4 { \override TextScript.padding = 3 c8[^"ossia above" d e d e f] } } >> } >> \paper { ragged-right = ##t }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Gesangstext und Ossia vertikal ausrichten ] | [ Up : Tweaks and overrides ] | [ Vertically centering paired figured bass extenders > ] |
Vertically aligning stanza numbers of different staves
It can happen that stanza numbers don’t align vertically if the verses
are attached to different staves. To fix that, override the
self-alignment-X
property of the LyricText
grob.
\markup { default behavior } << \new Staff { b b b b } \lyrics { \set stanza = "3." a a a a } \new Staff { b b b b } \lyrics { \set stanza = "1." aaaaaaaaaa a a a } \lyrics { \set stanza = "2." a a a a } >> \markup \vspace #1 \markup { using \typewriter "self-alignment-X = #LEFT" } << \new Staff { b b b b } \new Lyrics \lyricmode { \set stanza = "3." a a a a } \new Staff { b b b b } \new Lyrics \lyricmode { \set stanza = "1." \once \override LyricText.self-alignment-X = #LEFT aaaaaaaaaa a a a } \new Lyrics \lyricmode { \set stanza = "2." a a a a } >> \paper { tagline = ##f }
[ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] |
[ < Vertically aligning stanza numbers of different staves ] | [ Up : Tweaks and overrides ] | [ Paper and layout > ] |
Vertically centering paired figured bass extenders
Where figured bass extender lines are being used by setting
useBassFigureExtenders
to true, pairs of congruent figured bass
extender lines are vertically centered if
figuredBassCenterContinuations
is set to true.
<< \relative c' { c8 c b b a a c16 c b b c8 c b b a a c16 c b b c8 c b b a a c c b b } \figures { \set useBassFigureExtenders = ##t <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>16 r \set figuredBassCenterContinuations = ##t <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>16 r \set figuredBassCenterContinuations = ##f <6+ 4 3>4 <6 4 3>8 r <6+ 4 3>4 <6 4 3>8 <4 3+>8 } >>
[ << Tweaks and overrides ] | [Top][Contents] | [ Titles >> ] |
[ < Vertically centering paired figured bass extenders ] | [ Up : Top ] | [ Aligning and centering instrument names > ] |
Paper and layout
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Paper and layout ] | [ Up : Paper and layout ] | [ Arranging separate lyrics on a single line > ] |
Aligning and centering instrument names
The horizontal alignment of instrument names is tweaked by changing the
Staff.InstrumentName.self-alignment-X
property. The
\layout
variables indent
and short-indent
define
the space in which the instrument names are aligned before the first
and the following systems, respectively.
\paper { left-margin = 3\cm } \score { \new StaffGroup << \new Staff \with { \override InstrumentName.self-alignment-X = #LEFT instrumentName = \markup \left-column { "Left aligned" "instrument name" } shortInstrumentName = "Left" } { c''1 \break c''1 } \new Staff \with { \override InstrumentName.self-alignment-X = #CENTER instrumentName = \markup \center-column { Centered "instrument name" } shortInstrumentName = "Centered" } { g'1 g'1} \new Staff \with { \override InstrumentName.self-alignment-X = #RIGHT instrumentName = \markup \right-column { "Right aligned" "instrument name" } shortInstrumentName = "Right" } { e'1 e'1 } >> \layout { ragged-right = ##t indent = 4\cm short-indent = 2\cm } }
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Aligning and centering instrument names ] | [ Up : Paper and layout ] | [ Book parts > ] |
Arranging separate lyrics on a single line
Sometimes you may want to put lyrics for different performers on a
single line: where there is rapidly alternating text, for
example. This snippet shows how this can be done with
\override VerticalAxisGroup.nonstaff-nonstaff-spacing.minimum-distance = ##f
.
\header { tagline = ##f } \layout { \context { \Lyrics \override VerticalAxisGroup .nonstaff-nonstaff-spacing .minimum-distance = ##f } } aliceSings = \markup { \smallCaps "Alice" } eveSings = \markup { \smallCaps "Eve" } << \new Staff << \new Voice = "alice" { f'4^\aliceSings g' r2 | s1 | f'4^\aliceSings g' r2 | s1 | \break % ... \voiceOne s2 a'8^\aliceSings a' b'4 | \oneVoice g'1 } \new Voice = "eve" { s1 | a'2^\eveSings g' | s1 | a'2^\eveSings g' % ... \voiceTwo f'4^\eveSings a'8 g' f'4 e' | \oneVoice s1 } >> \new Lyrics \lyricsto "alice" { may -- be sec -- ond % ... Shut up, you fool! } \new Lyrics \lyricsto "eve" { that the words are % ... …and then I was like– } >>
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Arranging separate lyrics on a single line ] | [ Up : Paper and layout ] | [ Changing the staff size > ] |
Book parts
\bookpart
can be used to split a book into several parts. Each
part last page can be affected by ragged-last-bottom
. Header and
footer markups can detect a part last page, and make the difference
with the book last page.
#(set-default-paper-size "a6") \book { %% book paper, which is inherited by all children bookparts \paper { ragged-last-bottom = ##t %% Page footer: add a different part-tagline at part last page oddFooterMarkup = \markup { \column { \fill-line { %% Copyright header field only on book first page. \if \on-first-page \fromproperty #'header:copyright } \fill-line { %% Part tagline header field only on each part last page. \if \on-last-page-of-part \fromproperty #'header:parttagline } \fill-line { %% Tagline header field only on book last page. \if \on-last-page \fromproperty #'header:tagline } } } } %% book header, which is inherited by the first bookpart \header { title = "Book title" copyright = "Copyright line on book first page" parttagline = "Part tagline" tagline = "Book tagline" } \bookpart { %% a different page breaking function may be used on each part \paper { page-breaking = #ly:minimal-breaking } \header { subtitle = "First part" } \markup { The first book part } \markup { a page break } \pageBreak \markup { first part last page } \markup \wordwrap { with ragged-last-bottom (see the space below this text) } } \bookpart { \header { subtitle = "Second part" } { c'4 } } }
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Book parts ] | [ Up : Paper and layout ] | [ Clip systems > ] |
Changing the staff size
Though the simplest way to resize staves is to use
#(set-global-staff-size xx)
, an individual staff’s size can be
changed by scaling the properties 'staff-space
and
fontSize
.
<< \new Staff { \relative c'' { \dynamicDown c8\ff c c c c c c c } } \new Staff \with { fontSize = #-3 \override StaffSymbol.staff-space = #(magstep -3) } { \clef bass c8 c c c c\f c c c } >>
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Changing the staff size ] | [ Up : Paper and layout ] | [ Creating blank staves > ] |
Clip systems
This code shows how to clip (extract) snippets from a full score.
This file needs to be run separately with -dclip-systems
; the
snippets page may not adequately show the results. The result will be
files named
‘base-from-start-to-end[-count].eps’.
If system starts and ends are included, they include extents of the System grob, e.g., instrument names.
Grace notes at the end point of the region are not included.
Regions can span multiple systems. In this case, multiple EPS files are generated.
#(ly:set-option 'clip-systems) #(ly:set-option 'separate-page-formats "ps") #(define output-suffix "1") origScore = \score { \relative c' { \new Staff \with { instrumentName = "Instrument" } c1 d1 \grace c16 e1 \key d \major f1 \break \clef bass g,1 fis1 } } \book { \score { \origScore \layout { % Each clip-region is a (START . END) pair % where both are rhythmic-locations. % (make-rhythmic-locations BAR-NUMBER NUM DEN) % means NUM/DEN whole-notes into bar numbered BAR-NUMBER clip-regions = #(list (cons (make-rhythmic-location 2 0 1) (make-rhythmic-location 4 0 1)) (cons (make-rhythmic-location 0 0 1) (make-rhythmic-location 4 0 1)) (cons (make-rhythmic-location 0 0 1) (make-rhythmic-location 6 0 1)) ) } } } #(ly:set-option 'clip-systems #f) #(ly:set-option 'separate-page-formats #f) #(define output-suffix #f) \book { \score { \origScore } \markup { \bold \fontsize #6 clips } \score { \lyrics { \markup { from-2.0.1-to-4.0.1-clip.eps } \markup { \epsfile #X #30.0 #(format #f "~a-1-from-2.0.1-to-4.0.1-clip.eps" (ly:parser-output-name)) } } } }
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Clip systems ] | [ Up : Paper and layout ] | [ Demonstrating all headers > ] |
Creating blank staves
To create blank staves, generate empty measures then remove the
Bar_number_engraver
from the Score
context, and the
Time_signature_engraver
, Clef_engraver
and
Bar_engraver
from the Staff
context.
#(set-global-staff-size 20) \score { { \repeat unfold 12 { s1 \break } } \layout { indent = 0\in \context { \Staff \remove "Time_signature_engraver" \remove "Clef_engraver" \remove "Bar_engraver" } \context { \Score \remove "Bar_number_engraver" } } } % uncomment these lines for "letter" size %{ \paper { #(set-paper-size "letter") ragged-last-bottom = ##f line-width = 7.5\in left-margin = 0.5\in bottom-margin = 0.25\in top-margin = 0.25\in } %} % uncomment these lines for "A4" size %{ \paper { #(set-paper-size "a4") ragged-last-bottom = ##f line-width = 180 left-margin = 15 bottom-margin = 10 top-margin = 10 } %}
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Creating blank staves ] | [ Up : Paper and layout ] | [ Setting system separators > ] |
Demonstrating all headers
All header fields with special meanings.
\header { copyright = "copyright" title = "title" subtitle = "subtitle" composer = "composer" arranger = "arranger" instrument = "instrument" meter = "meter" opus = "opus" piece = "piece" poet = "poet" texidoc = "All header fields with special meanings." copyright = "public domain" enteredby = "jcn" source = "urtext" } \layout { ragged-right = ##f } \score { \relative c'' { c1 | c | c | c } } \score { \relative c'' { c1 | c | c | c } \header { title = "localtitle" subtitle = "localsubtitle" composer = "localcomposer" arranger = "localarranger" instrument = "localinstrument" metre = "localmetre" opus = "localopus" piece = "localpiece" poet = "localpoet" copyright = "localcopyright" } }
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Demonstrating all headers ] | [ Up : Paper and layout ] | [ Table of contents > ] |
Setting system separators
System separators can be inserted between systems. Any markup can be
used, but \slashSeparator
has been provided as a sensible
default.
\paper { system-separator-markup = \slashSeparator line-width = 120 tagline = ##f } notes = \relative c' { c1 | c \break c1 | c \break c1 | c } \book { \score { \new GrandStaff << \new Staff \notes \new Staff \notes >> } }
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Setting system separators ] | [ Up : Paper and layout ] | [ Vertically aligned StaffGroups without connecting SystemStartBar > ] |
Table of contents
A table of contents is included using
\markuplist \table-of-contents
. The TOC items are added with
the \tocItem
command.
#(set-default-paper-size "a6") \book { \markuplist \table-of-contents \pageBreak \tocItem \markup { The first score } \score { { c'1 \pageBreak \mark \default \tocItem \markup { Mark A } d'1 } } \pageBreak \tocItem \markup { The second score } \score { { e'1 } \header { piece = "Second score" } } }
[ << Paper and layout ] | [Top][Contents] | [ Titles >> ] |
[ < Table of contents ] | [ Up : Paper and layout ] | [ Titles > ] |
Vertically aligned StaffGroups without connecting SystemStartBar
This snippet shows how to achieve vertically aligned StaffGroups
with a SystemStartBar
for each StaffGroup
, but without
connecting them.
#(set-global-staff-size 18) \header { tagline = ##f } \paper { indent = 0 ragged-right = ##f print-all-headers = ##t } \layout { \context { \StaffGroup \consists Text_mark_engraver \consists Staff_collecting_engraver systemStartDelimiterHierarchy = #'(SystemStartBrace (SystemStartBracket a b)) } \context { \Score \remove Text_mark_engraver \remove Staff_collecting_engraver \override SystemStartBrace.style = #'bar-line \omit SystemStartBar \override SystemStartBrace.padding = #-0.1 \override SystemStartBrace.thickness = #1.6 \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #15 } } %%%% EXAMPLE txt = \lyricmode { Wer4 nur den lie -- ben Gott läßt wal2 -- ten4 und4 hof -- fet auf ihn al -- le Zeit2. } % First StaffGroup "exercise" eI = \relative c' { \textMark \markup { \bold Teacher: This is a simple setting of the choral. Please improve it. } \key a \minor \time 4/4 \voiceOne \partial 4 e4 a b c b a b gis2 e4\fermata g! g f e a a gis a2.\fermata \bar ":|." } eII = \relative c' { \key a \minor \time 4/4 \voiceTwo \partial 4 c4 e e e gis a f e2 b4 b d d c c d d c2. \bar ":|." } eIII = \relative c' { \key a \minor \time 4/4 \clef bass \voiceOne \partial 4 a4 c b a b c d b2 gis4 g g b c a f e e2. } eIV = \relative c' { \key a \minor \time 4/4 \clef bass \voiceTwo \partial 4 a,4 a' gis a e a, d e2 e,4\fermata e' b g c f d e a,2.\fermata \bar ":|." } exercise = \new StaffGroup = "exercise" << \new Staff << \new Voice \eI \new Voice \eII >> \new Lyrics \txt \new Staff << \new Voice \eIII \new Voice \eIV >> >> % Second StaffGroup "simple Bach" sbI = \relative c' { \textMark \markup { \bold" Pupil:" Here's my version! } \key a \minor \time 4/4 \voiceOne \partial 4 e4 a b c b a b gis2 e4\fermata g! g f e a a gis a2.\fermata \bar ":|." } sbII = \relative c' { \key a \minor \time 4/4 \voiceTwo \partial 4 c8 d e4 e e8 f g4 f f e2 b4 b8 c d4 d e8 d c4 b8 c d4 c2. \bar ":|." } sbIII = \relative c' { \key a \minor \time 4/4 \clef bass \voiceOne \partial 4 a8 b c4 b a b8 c d4 d8 c b2 gis4 g g8 a b4 b a8 g f4 e e2. } sbIV = \relative c' { \key a \minor \time 4/4 \clef bass \voiceTwo \partial 4 a,4 a' gis a e f8 e d4 e2 e,4\fermata e' b a8 g c4 f8 e d4 e a,2.\fermata \bar ":|." } simpleBach = \new StaffGroup = "simple Bach" << \new Staff << \new Voice \sbI \new Voice \sbII >> \new Lyrics \txt \new Staff << \new Voice \sbIII \new Voice \sbIV >> >> % Third StaffGroup "chromatic Bach" cbI = \relative c' { \textMark \markup { \bold "Teacher:" \column { "Well, you simply copied and transposed a version of J.S.Bach." "Do you know this one?" } } \key a \minor \time 4/4 \voiceOne \partial 4 e4 a b c b a b gis4. fis8 e4\fermata g! g f e a a8 b gis4 a2.\fermata \bar ":|." } cbII = \relative c' { \key a \minor \time 4/4 \voiceTwo \partial 4 c8 d e4 e e8 fis gis4 a8 g! f!4 e2 b4 e e d d8[ cis] d dis e fis e4 e2. \bar ":|." } cbIII = \relative c' { \key a \minor \time 4/4 \clef bass \voiceOne \partial 4 a8 b c[ b] a gis8 a4 d, e8[ e'] d c b4. a8 gis4 b c d8 c b[ a] a b c b b c16 d c2. } cbIV = \relative c' { \key a \minor \time 4/4 \clef bass \voiceTwo \partial 4 a4 c, e a, b c d e2 e4\fermata e a b8 c gis[ g] fis f e dis e4 a,2.\fermata \bar ":|." } chromaticBach = \new StaffGroup = "chromatic Bach" << \new Staff << \new Voice \cbI \new Voice \cbII >> \new Lyrics \txt \new Staff << \new Voice \cbIII \new Voice \cbIV >> >> % Score \score { << \exercise \simpleBach \chromaticBach >> \header { title = \markup \column { \combine \null \vspace #1 "Exercise: Improve the given choral" " " } } \layout { \context { \Lyrics \override LyricText.X-offset = #-1 } } }
[ << Paper and layout ] | [Top][Contents] | [ Spacing >> ] |
[ < Vertically aligned StaffGroups without connecting SystemStartBar ] | [ Up : Top ] | [ Adding the current date to a score > ] |
Titles
[ << Titles ] | [Top][Contents] | [ Spacing >> ] |
[ < Titles ] | [ Up : Titles ] | [ Aligning and centering instrument names > ] |
Adding the current date to a score
With a little Scheme code, the current date can easily be added to a score.
\paper { tagline = ##f } % first, define a variable to hold the formatted date: date = #(strftime "%d-%m-%Y" (localtime (current-time))) % use it in the title block: \header { title = "Including the date!" subtitle = \date } \score { \relative c'' { c4 c c c } } % and use it in a \markup block: \markup { \date }
[ << Titles ] | [Top][Contents] | [ Spacing >> ] |
[ < Adding the current date to a score ] | [ Up : Titles ] | [ Demonstrating all headers > ] |
Aligning and centering instrument names
The horizontal alignment of instrument names is tweaked by changing the
Staff.InstrumentName.self-alignment-X
property. The
\layout
variables indent
and short-indent
define
the space in which the instrument names are aligned before the first
and the following systems, respectively.
\paper { left-margin = 3\cm } \score { \new StaffGroup << \new Staff \with { \override InstrumentName.self-alignment-X = #LEFT instrumentName = \markup \left-column { "Left aligned" "instrument name" } shortInstrumentName = "Left" } { c''1 \break c''1 } \new Staff \with { \override InstrumentName.self-alignment-X = #CENTER instrumentName = \markup \center-column { Centered "instrument name" } shortInstrumentName = "Centered" } { g'1 g'1} \new Staff \with { \override InstrumentName.self-alignment-X = #RIGHT instrumentName = \markup \right-column { "Right aligned" "instrument name" } shortInstrumentName = "Right" } { e'1 e'1 } >> \layout { ragged-right = ##t indent = 4\cm short-indent = 2\cm } }
[ << Titles ] | [Top][Contents] | [ Spacing >> ] |
[ < Aligning and centering instrument names ] | [ Up : Titles ] | [ Outputting the version number > ] |
Demonstrating all headers
All header fields with special meanings.
\header { copyright = "copyright" title = "title" subtitle = "subtitle" composer = "composer" arranger = "arranger" instrument = "instrument" meter = "meter" opus = "opus" piece = "piece" poet = "poet" texidoc = "All header fields with special meanings." copyright = "public domain" enteredby = "jcn" source = "urtext" } \layout { ragged-right = ##f } \score { \relative c'' { c1 | c | c | c } } \score { \relative c'' { c1 | c | c | c } \header { title = "localtitle" subtitle = "localsubtitle" composer = "localcomposer" arranger = "localarranger" instrument = "localinstrument" metre = "localmetre" opus = "localopus" piece = "localpiece" poet = "localpoet" copyright = "localcopyright" } }
[ << Titles ] | [Top][Contents] | [ Spacing >> ] |
[ < Demonstrating all headers ] | [ Up : Titles ] | [ Spacing > ] |
Outputting the version number
It is possible to print the version number of LilyPond in markup.
\markup { Processed with LilyPond version #(lilypond-version) }
[ << Titles ] | [Top][Contents] | [ MIDI >> ] |
[ < Outputting the version number ] | [ Up : Top ] | [ Adjusting lyrics vertical spacing > ] |
Spacing
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Spacing ] | [ Up : Spacing ] | [ Fingersatz auch innerhalb des Systems setzen > ] |
Adjusting lyrics vertical spacing
This snippet shows how to bring the lyrics line closer to the staff.
% Default layout: << \new Staff \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } \new Lyrics \lyricsto melody { aa aa aa aa aa aa aa aa aa } \new Staff { \new Voice = melody \relative c' { c4 d e f g4 f e d c1 } } % Reducing the minimum space below the staff and above the lyrics: \new Lyrics \with { \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #'((basic-distance . 1)) } \lyricsto melody { aa aa aa aa aa aa aa aa aa } >>
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Adjusting lyrics vertical spacing ] | [ Up : Spacing ] | [ Breaking vertical alignment of dynamics and textscripts > ] |
Fingersatz auch innerhalb des Systems setzen
Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems gesetzt. Das kann aber verändert werden.
\relative c' { <c-1 e-2 g-3 b-5>2 \override Fingering.staff-padding = #'() <c-1 e-2 g-3 b-5>4 g'-0 a8[-1 b]-2 g-0 r \override Fingering.add-stem-support = ##f a[-1 b]-2 g-0 r \override Fingering.add-stem-support = ##t a[-1 b]-2 g-0 r \override Fingering.add-stem-support = #only-if-beamed a[-1 b]-2 g-0 r }
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Fingersatz auch innerhalb des Systems setzen ] | [ Up : Spacing ] | [ Page label > ] |
Breaking vertical alignment of dynamics and textscripts
By default, LilyPond uses DynamicLineSpanner
grobs to vertically
align successive dynamic objects like hairpins and dynamic
text. However, this is not always wanted. By inserting
\breakDynamicSpan
, which ends the alignment spanner
prematurely, this vertical alignment can be avoided.
{ g1\< | e''\f\> | c'\p } { g1\< | e''\breakDynamicSpan\f\> | c'\p } \paper { tagline = ##f }
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Breaking vertical alignment of dynamics and textscripts ] | [ Up : Spacing ] | [ Proportional strict notespacing > ] |
Page label
Page labels may be placed inside music or at top-level, and referred to in markups.
\label license \markup "This snippet is available under the Creative Commons Public Domain Dedication license." { \repeat volta 2 { \label startRepeat \repeat unfold 20 { c'2 2 } \pageBreak 2 2 } \textEndMark \markup { \with-link #'startRepeat \line { To page \page-ref #'startRepeat "0" "?" } } } \markup { See page \page-ref #'license "0" "?" for licensing information. }
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Page label ] | [ Up : Spacing ] | [ Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen > ] |
Proportional strict notespacing
If strict-note-spacing
is set spacing of notes is not influenced
by bars or clefs within a system. Rather, they are placed just before
the note that occurs at the same time. This may cause collisions.
\relative c'' << \override Score.SpacingSpanner.strict-note-spacing = ##t \set Score.proportionalNotationDuration = \musicLength 16 \new Staff { c8[ c \clef alto c c \grace { d16 } c8 c] c4 c2 \grace { c16[ c16] } c2 } \new Staff { c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4 c1 } >>
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Proportional strict notespacing ] | [ Up : Spacing ] | [ Gesangstext und Ossia vertikal ausrichten > ] |
Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen
Indem man die 'Y-extent
-Eigenschaft auf einen passenden Wert setzt,
können alle DynamicLineSpanner
-Objekte (Crescendo-Klammern und
Dynamik-Texte) (hairpins and dynamic texts) unabhängig von ihrer
wirklichen Ausdehnung an einem gemeinsamen Referenzpunkt ausgerichtet werden.
Auf diese Weise ist jedes Element vertikal ausgerichtet und der Notensatz
sieht ansprechender aus.
Die gleiche Idee wird benutzt, um Textbeschriftungen an ihrer Grundlinie auszurichten.
music = \relative c' { a'2\p b\f e4\p f\f\> g, b\p c2^\markup { \huge gorgeous } c^\markup { \huge fantastic } } { \music \break \override DynamicLineSpanner.staff-padding = 3 \textLengthOn \override TextScript.staff-padding = 1 \music } \paper { tagline = ##f }
[ << Spacing ] | [Top][Contents] | [ MIDI >> ] |
[ < Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen ] | [ Up : Spacing ] | [ MIDI > ] |
Gesangstext und Ossia vertikal ausrichten
Dieser Schnipsel zeigt, wie man die Kontexteigenschaften
alignBelowContext
und alignAboveContext
benutzen kann, um
die Positionierung von Gesangstext und Ossia-Abschnitten zu kontrollieren.
\relative c' << \new Staff = "1" { c4 c s2 } \new Staff = "2" { c4 c s2 } \new Staff = "3" { c4 c s2 } { \skip 2 << \lyrics { \set alignBelowContext = "1" lyrics4 below } \new Staff \with { alignAboveContext = "3" fontSize = -2 \override StaffSymbol.staff-space = #(magstep -2) \remove "Time_signature_engraver" } { \tuplet 6/4 { \override TextScript.padding = 3 c8[^"ossia above" d e d e f] } } >> } >> \paper { ragged-right = ##t }
[ << Spacing ] | [Top][Contents] | [ Templates >> ] |
[ < Gesangstext und Ossia vertikal ausrichten ] | [ Up : Top ] | [ Changing MIDI output to one channel per voice > ] |
MIDI
[ << MIDI ] | [Top][Contents] | [ Templates >> ] |
[ < MIDI ] | [ Up : MIDI ] | [ Das Tempo ohne Metronom-Angabe verändern > ] |
Changing MIDI output to one channel per voice
When outputting MIDI, the default behavior is for each staff to represent one MIDI channel, with all the voices on a staff amalgamated. This minimizes the risk of running out of MIDI channels, since there are only 16 available per track.
However, by moving the Staff_performer
to the Voice
context, each voice on a staff can have its own MIDI channel, as is
demonstrated by the following example: despite being on the same staff,
two MIDI channels are created, each with a different
midiInstrument
.
\score { \new Staff << \new Voice \relative c''' { \set midiInstrument = "flute" \voiceOne \key g \major \time 2/2 r2 g-"Flute" ~ g fis ~ fis4 g8 fis e2 ~ e4 d8 cis d2 } \new Voice \relative c'' { \set midiInstrument = "clarinet" \voiceTwo b1-"Clarinet" a2. b8 a g2. fis8 e fis2 r } >> \layout { } \midi { \context { \Staff \remove "Staff_performer" } \context { \Voice \consists "Staff_performer" } \tempo 2 = 72 } }
[ << MIDI ] | [Top][Contents] | [ Templates >> ] |
[ < Changing MIDI output to one channel per voice ] | [ Up : MIDI ] | [ Creating custom dynamics in MIDI output > ] |
Das Tempo ohne Metronom-Angabe verändern
Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den Noten auszugeben, kann die Metronombezeichnung unsichtbar gemacht werden:
\score { \new Staff \relative c' { \tempo 4 = 160 c4 e g b c4 b d c \set Score.tempoHideNote = ##t \tempo 4 = 96 d,4 fis a cis d4 cis e d } \layout { } \midi { } }
[ << MIDI ] | [Top][Contents] | [ Templates >> ] |
[ < Das Tempo ohne Metronom-Angabe verändern ] | [ Up : MIDI ] | [ Demo MidiInstruments > ] |
Creating custom dynamics in MIDI output
The following example shows how to create a dynamic marking, not included in the default list, and assign a specific value to it so that it affects MIDI output.
The dynamic mark \rfz
gets value 0.9
.
#(define (myDynamics dynamic) (if (equal? dynamic "rfz") 0.9 (default-dynamic-absolute-volume dynamic))) \score { \new Staff { \set Staff.midiInstrument = "cello" \set Score.dynamicAbsoluteVolumeFunction = #myDynamics \new Voice { \relative { a'4\pp b c-\rfz } } } \layout {} \midi {} }
[ << MIDI ] | [Top][Contents] | [ Templates >> ] |
[ < Creating custom dynamics in MIDI output ] | [ Up : MIDI ] | [ Replacing default MIDI instrument equalization > ] |
Demo MidiInstruments
Problem: How to know which midiInstrument
would be best for your
composition?
Solution: A LilyPond demo file.
\header { title = "Demo of all midi sounds" arranger = "Myself " } melody = \relative c' { \tempo 4 = 150 c4.\mf g c16 b' c d e16 d e f g4 g'4 r R1 } \score { \new Voice \melody \layout { } } \score { \new Voice { r\mf % 1-8 keyboard \set Staff.midiInstrument = "acoustic grand" \melody \set Staff.midiInstrument = "bright acoustic" \melody \set Staff.midiInstrument = "electric grand" \melody \set Staff.midiInstrument = "honky-tonk" \melody \set Staff.midiInstrument = "electric piano 1" \melody \set Staff.midiInstrument = "electric piano 2" \melody \set Staff.midiInstrument = "harpsichord" \melody \set Staff.midiInstrument = "clav" \melody % 9-16 chrom percussion \set Staff.midiInstrument = "celesta" \melody \set Staff.midiInstrument = "glockenspiel" \melody \set Staff.midiInstrument = "music box" \melody \set Staff.midiInstrument = "vibraphone" \melody \set Staff.midiInstrument = "marimba" \melody \set Staff.midiInstrument = "xylophone" \melody \set Staff.midiInstrument = "tubular bells" \melody \set Staff.midiInstrument = "dulcimer" \melody % 17-24 organ \set Staff.midiInstrument = "drawbar organ" \melody \set Staff.midiInstrument = "percussive organ" \melody \set Staff.midiInstrument = "rock organ" \melody \set Staff.midiInstrument = "church organ" \melody \set Staff.midiInstrument = "reed organ" \melody \set Staff.midiInstrument = "accordion" \melody \set Staff.midiInstrument = "harmonica" \melody \set Staff.midiInstrument = "concertina" \melody % 25-32 guitar \set Staff.midiInstrument = "acoustic guitar (nylon)" \melody \set Staff.midiInstrument = "acoustic guitar (steel)" \melody \set Staff.midiInstrument = "electric guitar (jazz)" \melody \set Staff.midiInstrument = "electric guitar (clean)" \melody \set Staff.midiInstrument = "electric guitar (muted)" \melody \set Staff.midiInstrument = "overdriven guitar" \melody \set Staff.midiInstrument = "distorted guitar" \melody \set Staff.midiInstrument = "guitar harmonics" \melody % 33-40 bass \set Staff.midiInstrument = "acoustic bass" \melody \set Staff.midiInstrument = "electric bass (finger)" \melody \set Staff.midiInstrument = "electric bass (pick)" \melody \set Staff.midiInstrument = "fretless bass" \melody \set Staff.midiInstrument = "slap bass 1" \melody \set Staff.midiInstrument = "slap bass 2" \melody \set Staff.midiInstrument = "synth bass 1" \melody \set Staff.midiInstrument = "synth bass 2" \melody % 41-48 strings \set Staff.midiInstrument = "violin" \melody \set Staff.midiInstrument = "viola" \melody \set Staff.midiInstrument = "cello" \melody \set Staff.midiInstrument = "contrabass" \melody \set Staff.midiInstrument = "tremolo strings" \melody \set Staff.midiInstrument = "pizzicato strings" \melody \set Staff.midiInstrument = "orchestral harp" \melody \set Staff.midiInstrument = "timpani" \melody % 49-56 ensemble \set Staff.midiInstrument = "string ensemble 1" \melody \set Staff.midiInstrument = "string ensemble 2" \melody \set Staff.midiInstrument = "synthstrings 1" \melody \set Staff.midiInstrument = "synthstrings 2" \melody \set Staff.midiInstrument = "choir aahs" \melody \set Staff.midiInstrument = "voice oohs" \melody \set Staff.midiInstrument = "synth voice" \melody \set Staff.midiInstrument = "orchestra hit" \melody % 57-64 brass \set Staff.midiInstrument = "trumpet" \melody \set Staff.midiInstrument = "trombone" \melody \set Staff.midiInstrument = "tuba" \melody \set Staff.midiInstrument = "muted trumpet" \melody \set Staff.midiInstrument = "french horn" \melody \set Staff.midiInstrument = "brass section" \melody \set Staff.midiInstrument = "synthbrass 1" \melody \set Staff.midiInstrument = "synthbrass 2" \melody % 65-72 reed \set Staff.midiInstrument = "soprano sax" \melody \set Staff.midiInstrument = "alto sax" \melody \set Staff.midiInstrument = "tenor sax" \melody \set Staff.midiInstrument = "baritone sax" \melody \set Staff.midiInstrument = "oboe" \melody \set Staff.midiInstrument = "english horn" \melody \set Staff.midiInstrument = "bassoon" \melody \set Staff.midiInstrument = "clarinet" \melody % 73-80 pipe \set Staff.midiInstrument = "piccolo" \melody \set Staff.midiInstrument = "flute" \melody \set Staff.midiInstrument = "recorder" \melody \set Staff.midiInstrument = "pan flute" \melody \set Staff.midiInstrument = "blown bottle" \melody \set Staff.midiInstrument = "shakuhachi" \melody \set Staff.midiInstrument = "whistle" \melody \set Staff.midiInstrument = "ocarina" \melody % 81-88 synth lead \set Staff.midiInstrument = "lead 1 (square)" \melody \set Staff.midiInstrument = "lead 2 (sawtooth)" \melody \set Staff.midiInstrument = "lead 3 (calliope)" \melody \set Staff.midiInstrument = "lead 4 (chiff)" \melody \set Staff.midiInstrument = "lead 5 (charang)" \melody \set Staff.midiInstrument = "lead 6 (voice)" \melody \set Staff.midiInstrument = "lead 7 (fifths)" \melody \set Staff.midiInstrument = "lead 8 (bass+lead)" \melody % 89-96 synth pad \set Staff.midiInstrument = "pad 1 (new age)" \melody \set Staff.midiInstrument = "pad 2 (warm)" \melody \set Staff.midiInstrument = "pad 3 (polysynth)" \melody \set Staff.midiInstrument = "pad 4 (choir)" \melody \set Staff.midiInstrument = "pad 5 (bowed)" \melody \set Staff.midiInstrument = "pad 6 (metallic)" \melody \set Staff.midiInstrument = "pad 7 (halo)" \melody \set Staff.midiInstrument = "pad 8 (sweep)" \melody % 97-104 synth effects \set Staff.midiInstrument = "fx 1 (rain)" \melody \set Staff.midiInstrument = "fx 2 (soundtrack)" \melody \set Staff.midiInstrument = "fx 3 (crystal)" \melody \set Staff.midiInstrument = "fx 4 (atmosphere)" \melody \set Staff.midiInstrument = "fx 5 (brightness)" \melody \set Staff.midiInstrument = "fx 6 (goblins)" \melody \set Staff.midiInstrument = "fx 7 (echoes)" \melody \set Staff.midiInstrument = "fx 8 (sci-fi)" \melody % 105-112 ethnic \set Staff.midiInstrument = "sitar" \melody \set Staff.midiInstrument = "banjo" \melody \set Staff.midiInstrument = "shamisen" \melody \set Staff.midiInstrument = "koto" \melody \set Staff.midiInstrument = "kalimba" \melody \set Staff.midiInstrument = "bagpipe" \melody \set Staff.midiInstrument = "fiddle" \melody \set Staff.midiInstrument = "shanai" \melody % 113-120 percussive \set Staff.midiInstrument = "tinkle bell" \melody \set Staff.midiInstrument = "agogo" \melody \set Staff.midiInstrument = "steel drums" \melody \set Staff.midiInstrument = "woodblock" \melody \set Staff.midiInstrument = "taiko drum" \melody \set Staff.midiInstrument = "melodic tom" \melody \set Staff.midiInstrument = "synth drum" \melody \set Staff.midiInstrument = "reverse cymbal" \melody % 121-128 sound effects \set Staff.midiInstrument = "guitar fret noise" \melody \set Staff.midiInstrument = "breath noise" \melody \set Staff.midiInstrument = "seashore" \melody \set Staff.midiInstrument = "bird tweet" \melody \set Staff.midiInstrument = "telephone ring" \melody \set Staff.midiInstrument = "helicopter" \melody \set Staff.midiInstrument = "applause" \melody \set Staff.midiInstrument = "gunshot" \melody } \midi { } } \paper { tagline = ##f }
[ << MIDI ] | [Top][Contents] | [ Templates >> ] |
[ < Demo MidiInstruments ] | [ Up : MIDI ] | [ Templates > ] |
Replacing default MIDI instrument equalization
The default MIDI instrument equalizer can be replaced by setting the
instrumentEqualizer
property in the Score
context to a
user-defined Scheme procedure that uses a MIDI instrument name as its
argument along with a pair of fractions indicating the minimum and
maximum volumes respectively to be applied to that specific instrument.
The following example sets the minimum and maximum volumes for flute and clarinet respectively."
#(define my-instrument-equalizer-alist '()) #(set! my-instrument-equalizer-alist (append '( ("flute" . (0.7 . 0.9)) ("clarinet" . (0.3 . 0.6))) my-instrument-equalizer-alist)) #(define (my-instrument-equalizer s) (let ((entry (assoc s my-instrument-equalizer-alist))) (if entry (cdr entry)))) \score { << \new Staff { \key g \major \time 2/2 \set Score.instrumentEqualizer = #my-instrument-equalizer \set Staff.midiInstrument = "flute" \new Voice \relative { r2 g''\mp g fis~ 4 g8 fis e2~ 4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = "clarinet" \new Voice \relative { b'1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout { } \midi { } }
[ << MIDI ] | [Top][Contents] | [ >> ] |
[ < Replacing default MIDI instrument equalization ] | [ Up : Top ] | [ Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals > ] |
Templates
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Templates ] | [ Up : Templates ] | [ Vorlage für anglikanischen Psalm > ] |
Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals
Dieses Beispiel zeigt eine moderne Transkription des Gregorianischen Chorals. Hier gibt es keine Takte, keine Notenhälse und es werden nur halbe und Viertelnoten verwendet. Zusätzliche Zeichen zeigen die Länge von Pausen an.
chant = \relative c' { \set Score.timing = ##f f4 a2 \divisioMinima g4 b a2 f2 \divisioMaior g4( f) f( g) a2 \finalis } verba = \lyricmode { Lo -- rem ip -- sum do -- lor sit a -- met } \score { \new GregorianTranscriptionStaff << \new GregorianTranscriptionVoice = "melody" \chant \new GregorianTranscriptionLyrics = "one" \lyricsto melody \verba >> }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals ] | [ Up : Templates ] | [ Hymnus-Vorlage > ] |
Vorlage für anglikanischen Psalm
Diese Vorlage zeigt eine Art, anglikanische Psalmengesänge zu setzen. Hier wird auch gezeigt, wie Strophen als einfacher Text unter den Noten hinzugefügt werden können. Zwei Strophen sind in unterschiedlicher Weise notiert um mehr Möglichkeiten darzustellen.
\paper { tagline = ##f } SopranoMusic = \relative g' { g1 | c2 b | a1 | \bar "||" a1 | d2 c | c b | c1 | \bar "||" } AltoMusic = \relative c' { e1 | g2 g | f1 | f1 | f2 e | d d | e1 | } TenorMusic = \relative a { c1 | c2 c | c1 | d1 | g,2 g | g g | g1 | } BassMusic = \relative c { c1 | e2 e | f1 | d1 | b2 c | g' g | c,1 | } global = { \time 2/2 } dot = \markup { \raise #0.7 \musicglyph "dots.dot" } tick = \markup { \raise #1 \fontsize #-5 \musicglyph "scripts.rvarcomma" } % Use markup to center the chant on the page \markup { \fill-line { \score { % centered << \new ChoirStaff << \new Staff << \global \clef "treble" \new Voice = "Soprano" << \voiceOne \SopranoMusic >> \new Voice = "Alto" << \voiceTwo \AltoMusic >> >> \new Staff << \clef "bass" \global \new Voice = "Tenor" << \voiceOne \TenorMusic >> \new Voice = "Bass" << \voiceTwo \BassMusic >> >> >> >> \layout { \context { \Score \override SpacingSpanner.base-shortest-duration = \musicLength 2 } \context { \Staff \remove "Time_signature_engraver" } } } % End score } } % End markup \markup { \fill-line { \column { \left-align { \null \null \null \line { \fontsize #5 O \fontsize #3 come let us \bold sing | unto \dot the | Lord : let } \line { us heartily \concat { re \bold joice } in the | strength of | our } \line { sal | vation. } \null \line { \hspace #2.5 8. Today if ye will hear his voice * } \line { \concat { \bold hard en } \tick not your \tick hearts : as in the pro- } \line { vocation * and as in the \bold day of tempt- \tick } \line { -ation \tick in the \tick wilderness. } } } } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für anglikanischen Psalm ] | [ Up : Templates ] | [ Vorlage für Jazz-Combo > ] |
Hymnus-Vorlage
Dieses Beispiel zeigt eine Möglichkeit, eine Hymnusmelodie zu setzen, in der jede Zeile mit einem Auftakt beginnt und einem unvollständigen Takt abschließt. Es zeigt auch, wie man die Strophen als allein stehenden Text unter die Noten hinzufügt.
Timeline = { \time 4/4 \tempo 4=96 \partial 2 s2 | s1 | s2 \breathe s2 | s1 | s2 \caesura \break s2 | s1 | s2 \breathe s2 | s1 | s2 \fine } SopranoMusic = \relative g' { g4 g | g g g g | g g g g | g g g g | g2 g4 g | g g g g | g g g g | g g g g | g2 } AltoMusic = \relative c' { d4 d | d d d d | d d d d | d d d d | d2 d4 d | d d d d | d d d d | d d d d | d2 } TenorMusic = \relative a { b4 b | b b b b | b b b b | b b b b | b2 b4 b | b b b b | b b b b | b b b b | b2 } BassMusic = \relative g { g4 g | g g g g | g g g g | g g g g | g2 g4 g | g g g g | g g g g | g g g g | g2 } global = { \key g \major } \score { % Start score << \new PianoStaff << % Start pianostaff \new Staff << % Start Staff = RH \global \clef "treble" \new Voice = "Soprano" << % Start Voice = "Soprano" \Timeline \voiceOne \SopranoMusic >> % End Voice = "Soprano" \new Voice = "Alto" << % Start Voice = "Alto" \Timeline \voiceTwo \AltoMusic >> % End Voice = "Alto" >> % End Staff = RH \new Staff << % Start Staff = LH \global \clef "bass" \new Voice = "Tenor" << % Start Voice = "Tenor" \Timeline \voiceOne \TenorMusic >> % End Voice = "Tenor" \new Voice = "Bass" << % Start Voice = "Bass" \Timeline \voiceTwo \BassMusic >> % End Voice = "Bass" >> % End Staff = LH >> % End pianostaff >> } % End score \markup { \fill-line { "" { \column { \left-align { "This is line one of the first verse" "This is line two of the same" "And here's line three of the first verse" "And the last line of the same" } } } "" } } \layout { \context { \Score caesuraType = #'((bar-line . "||")) fineBarType = "||" } } \paper { % Start paper block indent = 0 % don't indent first system line-width = 130 % shorten line length to suit music tagline = ##f % Don't print tag line, can be removed } % End paper block
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Hymnus-Vorlage ] | [ Up : Templates ] | [ Orchester, Chor und Klavier > ] |
Vorlage für Jazz-Combo
Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung:
Alle Instrumente sind in \key c \major
(C-Dur) notiert. Das bezieht sich
auf die klingende Musik: LilyPond transponiert die Tonart automatisch, wenn
sich die Noten innerhalb eines ranspose
-Abschnitts befinden.
\header { title = "Song" subtitle = "(tune)" composer = "Me" meter = "moderato" piece = "Swing" tagline = \markup { \column { "LilyPond example file by Amelie Zapf," "Berlin 07/07/2003" } } } % To make the example display in the documentation \paper { paper-width = 130 } %#(set-global-staff-size 16) \include "english.ly" %%%%%%%%%%%% Some macros %%%%%%%%%%%%%%%%%%% sl = { \override NoteHead.style = #'slash \hide Stem } nsl = { \revert NoteHead.style \undo \hide Stem } crOn = \override NoteHead.style = #'cross crOff = \revert NoteHead.style %% insert chord name style stuff here. jazzChords = { } %%%%%%%%%%%% Keys'n'thangs %%%%%%%%%%%%%%%%% global = { \time 4/4 } Key = { \key c \major } % ############ Horns ############ % ------ Trumpet ------ trpt = \transpose c d \relative c'' { \Key c1 | c | c | } trpHarmony = \transpose c' d { \jazzChords } trumpet = { \global \clef treble << \trpt >> } % ------ Alto Saxophone ------ alto = \transpose c a \relative c' { \Key c1 | c | c | } altoHarmony = \transpose c' a { \jazzChords } altoSax = { \global \clef treble << \alto >> } % ------ Baritone Saxophone ------ bari = \transpose c a' \relative c { \Key c1 c1 \sl d4^"Solo" d d d \nsl } bariHarmony = \transpose c' a \chordmode { \jazzChords s1 s d2:maj e:m7 } bariSax = { \global \clef treble << \bari >> } % ------ Trombone ------ tbone = \relative c { \Key c1 | c | c } tboneHarmony = \chordmode { \jazzChords } trombone = { \global \clef bass << \tbone >> } % ############ Rhythm Section ############# % ------ Guitar ------ gtr = \relative c'' { \Key c1 \sl b4 b b b \nsl c1 } gtrHarmony = \chordmode { \jazzChords s1 c2:min7+ d2:maj9 } guitar = { \global \clef treble << \gtr >> } %% ------ Piano ------ rhUpper = \relative c'' { \voiceOne \Key c1 | c | c } rhLower = \relative c' { \voiceTwo \Key e1 | e | e } lhUpper = \relative c' { \voiceOne \Key g1 | g | g } lhLower = \relative c { \voiceTwo \Key c1 | c | c } PianoRH = { \clef treble \global << \new Voice = "one" \rhUpper \new Voice = "two" \rhLower >> } PianoLH = { \clef bass \global << \new Voice = "one" \lhUpper \new Voice = "two" \lhLower >> } piano = { << \new Staff = "upper" \PianoRH \new Staff = "lower" \PianoLH >> } % ------ Bass Guitar ------ Bass = \relative c { \Key c1 | c | c } bass = { \global \clef bass << \Bass >> } % ------ Drums ------ up = \drummode { \voiceOne hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> hh4 <hh sn> hh <hh sn> } down = \drummode { \voiceTwo bd4 s bd s bd4 s bd s bd4 s bd s } drumContents = { \global << \new DrumVoice \up \new DrumVoice \down >> } %%%%%%%%% It All Goes Together Here %%%%%%%%%%%%%%%%%%%%%% \score { << \new StaffGroup = "horns" << \new Staff = "trumpet" \with { instrumentName = "Trumpet" } \trumpet \new Staff = "altosax" \with { instrumentName = "Alto Sax" } \altoSax \new ChordNames = "barichords" \with { instrumentName = "Trumpet" } \bariHarmony \new Staff = "barisax" \with { instrumentName = "Bari Sax" } \bariSax \new Staff = "trombone" \with { instrumentName = "Trombone" } \trombone >> \new StaffGroup = "rhythm" << \new ChordNames = "chords" \gtrHarmony \new Staff = "guitar" \with { instrumentName = "Guitar" } \guitar \new PianoStaff = "piano" \with { instrumentName = "Piano" midiInstrument = "acoustic grand" } \piano \new Staff = "bass" \with { instrumentName = "Bass" } \bass \new DrumStaff \with { instrumentName = "Drums" } \drumContents >> >> \layout { \context { \Staff \RemoveEmptyStaves } \context { \Score \override BarNumber.padding = 3 \override RehearsalMark.padding = 2 skipBars = ##t } } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Jazz-Combo ] | [ Up : Templates ] | [ Vorlage für einfache Klaviernotation > ] |
Orchester, Chor und Klavier
Diese Vorlage zeigt die Benutzung von geschachtelten
StaffGroup
- und GrandStaff
-Kontexte, um
Instrumente in Untergruppen zu unterteilen, und die
Benutzung von \transpose
für transponierende
Instrumente. Alle Noten werden in C geschrieben. Noten
können in C eingegeben werden, oder auch in der Tonart
des Instrumentes: dann müssen sie zuerst nach C transponiert
werden, bevor sie einer Variable zugewiesen werden.
#(set-global-staff-size 17) \paper { indent = 3.0\cm % add space for instrumentName short-indent = 1.5\cm % add less space for shortInstrumentName } \header { tagline = ##f } fluteMusic = \relative c' { \key g \major g'1 b } % Pitches as written on a manuscript for Clarinet in A % are transposed to concert pitch. clarinetMusic = \transpose c' a \relative c'' { \key bes \major bes1 d } trumpetMusic = \relative c { \key g \major g''1 b } % Key signature is often omitted for horns hornMusic = \transpose c' f \relative c { d'1 fis } percussionMusic = \relative c { \key g \major g1 b } sopranoMusic = \relative c'' { \key g \major g'1 b } sopranoLyrics = \lyricmode { Lyr -- ics } altoIMusic = \relative c' { \key g \major g'1 b } altoIIMusic = \relative c' { \key g \major g'1 b } altoILyrics = \sopranoLyrics altoIILyrics = \lyricmode { Ah -- ah } tenorMusic = \relative c' { \clef "treble_8" \key g \major g1 b } tenorLyrics = \sopranoLyrics pianoRHMusic = \relative c { \key g \major g''1 b } pianoLHMusic = \relative c { \clef bass \key g \major g1 b } violinIMusic = \relative c' { \key g \major g'1 b } violinIIMusic = \relative c' { \key g \major g'1 b } violaMusic = \relative c { \clef alto \key g \major g'1 b } celloMusic = \relative c { \clef bass \key g \major g1 b } bassMusic = \relative c { \clef "bass_8" \key g \major g,1 b } \score { << \new StaffGroup = "StaffGroup_woodwinds" << \new Staff = "Staff_flute" \with { instrumentName = "Flute" } \fluteMusic \new Staff = "Staff_clarinet" \with { instrumentName = \markup { \concat { "Clarinet in B" \flat } } } % Declare that written Middle C in the music % to follow sounds a concert B flat, for % output using sounded pitches such as MIDI. %\transposition bes % Print music for a B-flat clarinet \transpose bes c' \clarinetMusic >> \new StaffGroup = "StaffGroup_brass" << \new Staff = "Staff_hornI" \with { instrumentName = "Horn in F" } % \transposition f \transpose f c' \hornMusic \new Staff = "Staff_trumpet" \with { instrumentName = "Trumpet in C" } \trumpetMusic >> \new RhythmicStaff = "RhythmicStaff_percussion" \with { instrumentName = "Percussion" } << \percussionMusic >> \new PianoStaff \with { instrumentName = "Piano" } << \new Staff { \pianoRHMusic } \new Staff { \pianoLHMusic } >> \new ChoirStaff = "ChoirStaff_choir" << \new Staff = "Staff_soprano" \with { instrumentName = "Soprano" } \new Voice = "soprano" \sopranoMusic \new Lyrics \lyricsto "soprano" { \sopranoLyrics } \new GrandStaff = "GrandStaff_altos" \with { \accepts Lyrics } << \new Staff = "Staff_altoI" \with { instrumentName = "Alto I" } \new Voice = "altoI" \altoIMusic \new Lyrics \lyricsto "altoI" { \altoILyrics } \new Staff = "Staff_altoII" \with { instrumentName = "Alto II" } \new Voice = "altoII" \altoIIMusic \new Lyrics \lyricsto "altoII" { \altoIILyrics } >> \new Staff = "Staff_tenor" \with { instrumentName = "Tenor" } \new Voice = "tenor" \tenorMusic \new Lyrics \lyricsto "tenor" { \tenorLyrics } >> \new StaffGroup = "StaffGroup_strings" << \new GrandStaff = "GrandStaff_violins" << \new Staff = "Staff_violinI" \with { instrumentName = "Violin I" } \violinIMusic \new Staff = "Staff_violinII" \with { instrumentName = "Violin II" } \violinIIMusic >> \new Staff = "Staff_viola" \with { instrumentName = "Viola" } \violaMusic \new Staff = "Staff_cello" \with { instrumentName = "Cello" } \celloMusic \new Staff = "Staff_bass" \with { instrumentName = "Double Bass" } \bassMusic >> >> \layout { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Orchester, Chor und Klavier ] | [ Up : Templates ] | [ Piano template with centered lyrics > ] |
Vorlage für einfache Klaviernotation
Hier ein einfaches Klaviersystem.
upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } \score { \new PianoStaff \with { instrumentName = "Piano" } << \new Staff = "upper" \upper \new Staff = "lower" \lower >> \layout { } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für einfache Klaviernotation ] | [ Up : Templates ] | [ Vorlage für Klavier und Gesangsstimme > ] |
Piano template with centered lyrics
Anstatt ein eigenes System für Melodie und Text zu schreiben, können Sie den Text auch zwischen die beiden Klaviersysteme schreiben (und damit das zusätzliche System für die Gesangstimme auslassen).
upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } text = \lyricmode { Aaa Bee Cee Dee } \score { \new PianoStaff << \new Staff = upper { \new Voice = "singer" \upper } \new Lyrics \lyricsto "singer" \text \new Staff = lower { \lower } >> \layout { } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Piano template with centered lyrics ] | [ Up : Templates ] | [ SATB-Chorvorlage auf vier Systemen > ] |
Vorlage für Klavier und Gesangsstimme
Das nächste Beispiel ist typisch für ein Lied: Im oberen System die Melodie mit Text, darunter Klavierbegleitung.
melody = \relative c'' { \clef treble \key c \major \time 4/4 a b c d } text = \lyricmode { Aaa Bee Cee Dee } upper = \relative c'' { \clef treble \key c \major \time 4/4 a4 b c d } lower = \relative c { \clef bass \key c \major \time 4/4 a2 c } \score { << \new Voice = "mel" { \autoBeamOff \melody } \new Lyrics \lyricsto mel \text \new PianoStaff << \new Staff = "upper" \upper \new Staff = "lower" \lower >> >> \layout { \context { \Staff \RemoveEmptyStaves } } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Klavier und Gesangsstimme ] | [ Up : Templates ] | [ Score for diatonic accordion > ] |
SATB-Chorvorlage auf vier Systemen
SATB-Chorvorlage auf vier Systemen
global = { \key c \major \time 4/4 \dynamicUp } sopranonotes = \relative c'' { c2 \p \< d c d \f } sopranowords = \lyricmode { do do do do } altonotes = \relative c'' { c2\p d c d } altowords = \lyricmode { re re re re } tenornotes = { \clef "G_8" c2\mp d c d } tenorwords = \lyricmode { mi mi mi mi } bassnotes = { \clef bass c2\mf d c d } basswords = \lyricmode { mi mi mi mi } \score { \new ChoirStaff << \new Staff << \new Voice = "soprano" << \global \sopranonotes >> \new Lyrics \lyricsto "soprano" \sopranowords >> \new Staff << \new Voice = "alto" << \global \altonotes >> \new Lyrics \lyricsto "alto" \altowords >> \new Staff << \new Voice = "tenor" << \global \tenornotes >> \new Lyrics \lyricsto "tenor" \tenorwords >> \new Staff << \new Voice = "bass" << \global \bassnotes >> \new Lyrics \lyricsto "bass" \basswords >> >> }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < SATB-Chorvorlage auf vier Systemen ] | [ Up : Templates ] | [ Vorlage für eine Notenzeile mit Noten, Text und Akkorden > ] |
Score for diatonic accordion
A template to write a score for a diatonic accordion.
- There is a horizontal staff indicating if the accordion must be pushed (thick line) or pulled (thin line).
- There is a small rhythmic staff with lyrics that describes the bass buttons to press. The bar lines are made from gridlines.
- The tabulator staff for diatonic accordions shows the geographic position of the buttons and not (as for every other instrument) the pitch of the notes; the keys on the melody side of the accordion are placed in three columns and about 12 rows.
In the tabulator staff notation the outermost column is described with notes between lines, the innermost column is described with notes between lines and a cross as accidental, and the middle column is described with notes on a line, whereby the row in the middle is represented on the middle line in the staff.
Some words to transpose piano notes to the diatonic accordion:
- Every diatonic accordion is built for some keys only (for example, for
the keys of C major and F major), so it is important to transpose a
piano melody to match one of these keys. Transpose the source code, not
only the output because this code is required later on to translate it
once more to the tabulator staff. This can be done with the command
displayLilyMusic
. - You have to alternate the push- and pull-direction of the accordion regularly. If the player has a too long part to pull the accordion gets broken. On the other hand, some harmonies are only available in one direction. Considering this, decide which parts of the melody are the push-parts and which the pull-parts.
- For each pull- or push-part translate the piano notes to the according tabulature representation.
verse = \lyricmode { Wie gross bist du! Wie gross bist du! } harmonies = \new ChordNames \chordmode { \germanChords \set chordChanges = ##t bes8 bes8 bes8 es2 f bes1 } NoStem = { \hide Stem } NoNoteHead = \hide NoteHead ZeroBeam = \override Beam.positions = #'(0 . 0) staffTabLine = \new Staff \with { \remove "Time_signature_engraver" \remove "Clef_engraver" } { \override Staff.StaffSymbol.line-positions = #'(0) % Shows one horizontal line. The vertical line % (simulating a bar-line) is simulated with a gridline \set Staff.midiInstrument = #"choir aahs" \key c \major \relative c'' { % disable the following line to see the noteheads while writing the song \NoNoteHead \override NoteHead.no-ledgers = ##t % The beam between 8th-notes is used to draw the push-line %How to fast write the push-lines: % 1. write repeatedly 'c c c c c c c c |' for the whole length of the song % 2. uncomment the line \NoNoteHead % 3. compile % 4. Mark the positions on which push/pull changes. % In the score-picture click on the position % the push- or pull-part starts % (on the noteHead, the cursor will change to a hand-icon). % The cursor in the source code will jump just at this position. % a) If a push-part starts there, replace the 'c' by an 'e[' % b) If a pull-part starts there, replace the 'c' by an 's' % 5. Switch into 'overwrite-mode' by pressing the 'ins' key. % 6. For the pull-parts overwrite the 'c' with 's' % 7. For every push-part replace the last 'c' with 'e]' % 8. Switch into 'insert-mode' again % 9. At last it should look like e.g. % (s s e[ c | c c c c c c c c | c c c c c c e] s s) % 10. re-enable the line \NoNoteHead \autoBeamOff \ZeroBeam s8 s s e[ c c c c c c e] | s s s s s } } % Accordion melody in tabulator score % 1. Place a copy of the piano melody below % 2. Separate piano melody into pull- and push-parts % according to the staffTabLine you've already made % 3. For each line: Double the line. Remark the 1st one % (Keeps unchanged as reference) and then change the second % line using the transformation paper % or the macros 'conv2diaton push.bsh' and 'conv2diaton pull.bsh' % Tips: % - In jEdit Search & Replace mark the Option 'Keep Dialog' AccordionTabTwoCBesDur = { % pull 1 %<f' bes'>8 <f' a'>8 <d' bes'>8 | <g'' a''>8 <g'' b''>8 <e'' a''>8 | % push 2 %<g' c''>4 <f' d''> <g' ees''> <f' a'> | <g'' a''>4 <d'' eisis''> <g'' bisis''> <d'' f''> | % pull 3 % <f' bes'>2 r8 } <g'' a''>2 r8 } AccordionTab= { \dynamicUp % 1. Place a copy of the piano melody above % 2. Separate piano melody into pull- and push-parts % according to the staffTabLine you've already made % 3. For each line: Double the line. Remark the 1st one % (Keeps unchanged as reference) and then % change the second line using the transformation paper % Tips: % - In jEdit Search & Replace mark the Option 'Keep Dialog' % - \AccordionTabTwoCBesDur } \header { tagline = ##f } \layout { \context { \Score % The vertical line (simulating a bar-line) in % the staffBassRhythm is a gridline \consists "Grid_line_span_engraver" } \context { \Staff \consists "Grid_point_engraver" gridInterval = \musicLength 4*4 % 4/4 - tact. How many beats per bar % The following line has to be adjusted O-F-T-E-N. \override GridPoint.Y-extent = #'(-2 . -21) } \context { \ChoirStaff \remove "System_start_delimiter_engraver" } } staffVoice = \new Staff = astaffvoice { \time 4/4 \set Staff.instrumentName = "Voice" \set Staff.midiInstrument = "voice oohs" \key bes \major \partial 8*3 \clef treble { \context Voice = "melodyVoi" { <f' bes'>8 <f' a'>8 <d' bes'>8 | <g' c''>4 <f' d''> <g' es''> <f' a'> | <f' bes'>2 r8 } \bar "|." } } staffAccordionMel = \new Staff \with { \remove "Clef_engraver" } { \accidentalStyle forget %Set the accidentals (Vorzeichen) for each note, %do not remember them for the rest of the measure. \time 4/4 \set Staff.instrumentName="Accordion" \set Staff.midiInstrument="voice oohs" \key c \major \clef treble { \AccordionTab \bar "|." } } AltOn = #(define-music-function (mag) (number?) #{ \override Stem.length = #(* 7.0 mag) \override NoteHead.font-size = #(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #}) AltOff = { \revert Stem.length \revert NoteHead.font-size } BassRhythm = {s4 s8 | c2 c2 | c2 s8 } LyricBassRhythmI= \lyricmode { c b | c } staffBassRhythm = \new Staff = staffbass \with { \remove "Clef_engraver" } { % This is not a RhythmicStaff because it must be possible to append lyrics. \override Score.GridLine.extra-offset = #'( 13.0 . 0.0 ) % x.y \override Staff.StaffSymbol.line-positions = #'( 0 ) % Shows one horizontal line. The vertical line % (simulating a bar-line) is simulated by a grid % Search for 'grid' in this page to find all related functions \time 4/4 { \context Voice = "VoiceBassRhythm" \stemDown \AltOn #0.6 \relative c'' { \BassRhythm } \AltOff \bar "|." } } \score { \new ChoirStaff << \harmonies \staffVoice \context Lyrics = "lmelodyVoi" \with { alignBelowContext = astaffvoice } \lyricsto melodyVoi \verse \staffAccordionMel \staffTabLine \staffBassRhythm \context Lyrics = "lBassRhythmAboveI" \with { alignAboveContext = staffbass } \lyricsto VoiceBassRhythm \LyricBassRhythmI >> }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Score for diatonic accordion ] | [ Up : Templates ] | [ Single staff template with notes, lyrics, chords and frets > ] |
Vorlage für eine Notenzeile mit Noten, Text und Akkorden
Mit diesem Beispiel können Sie einen Song mit Melodie, Text und Akkorden schreiben.
melody = \relative c' { \clef treble \key c \major \time 4/4 a4 b c d } text = \lyricmode { Aaa Bee Cee Dee } harmonies = \chordmode { a2 c } \score { << \new ChordNames { \set chordChanges = ##t \harmonies } \new Voice = "one" { \autoBeamOff \melody } \new Lyrics \lyricsto "one" \text >> \layout { } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für eine Notenzeile mit Noten, Text und Akkorden ] | [ Up : Templates ] | [ Vorlage für eine Notenzeile mit Akkorden > ] |
Single staff template with notes, lyrics, chords and frets
Here is a simple lead sheet template with melody, lyrics, chords and fret diagrams.
verseI = \lyricmode { \set stanza = #"1." This is the first verse } verseII = \lyricmode { \set stanza = #"2." This is the second verse. } theChords = \chordmode { % insert chords for chordnames and fretboards here c2 g4 c } staffMelody = \relative c' { \key c \major \clef treble % Type notes for melody here c4 d8 e f4 g \bar "|." } \score { << \context ChordNames { \theChords } \context FretBoards { \theChords } \new Staff { \context Voice = "voiceMelody" { \staffMelody } } \new Lyrics = "lyricsI" { \lyricsto "voiceMelody" \verseI } \new Lyrics = "lyricsII" { \lyricsto "voiceMelody" \verseII } >> \layout { } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Single staff template with notes, lyrics, chords and frets ] | [ Up : Templates ] | [ Vorlage für ein Notensystem mit Noten und Gesangstext > ] |
Vorlage für eine Notenzeile mit Akkorden
Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist das richtige Beispiel für Sie!
melody = \relative c' { \clef treble \key c \major \time 4/4 f4 e8[ c] d4 g a2 ~ a } harmonies = \chordmode { c4:m f:min7 g:maj c:aug d2:dim b4:5 e:sus } \score { << \new ChordNames { \set chordChanges = ##t \harmonies } \new Staff \melody >> \layout{ } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für eine Notenzeile mit Akkorden ] | [ Up : Templates ] | [ Vorlage für ein Notensystem > ] |
Vorlage für ein Notensystem mit Noten und Gesangstext
Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren
Sie es in Ihre Datei, fügen Sie Noten und Text hinzu und übersetzen
Sie es mit LilyPond. In dem Beispiel wird die automatische
Balkenverbindung ausgeschaltet (mit dem Befehl \autoBeamOff
),
wie es für Vokalmusik üblich ist.
Wenn Sie die Balken wieder einschalten wollen, müssen Sie die
entsprechende Zeile entweder ändern oder auskommentieren.
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 { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für ein Notensystem mit Noten und Gesangstext ] | [ Up : Templates ] | [ Vorlage für Streichquartett (einfach) > ] |
Vorlage für ein Notensystem
Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein Soloinstrument oder ein Melodiefragment. Kopieren Sie es und fügen Sie es in Ihre Datei ein, schreiben Sie die Noten hinzu, und Sie haben eine vollständige Notationsdatei.
melody = \relative c' { \clef treble \key c \major \time 4/4 a4 b c d } \score { \new Staff \melody \layout { } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für ein Notensystem ] | [ Up : Templates ] | [ Vorlage für Streichquartett mit einzelnen Stimmen > ] |
Vorlage für Streichquartett (einfach)
Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier
wird auch eine „\global
“-Variable für Taktart und
Vorzeichen benutzt.
global= { \time 4/4 \key c \major } violinOne = \new Voice \relative c'' { c2 d e1 \bar "|." } violinTwo = \new Voice \relative c'' { g2 f e1 \bar "|." } viola = \new Voice \relative c' { \clef alto e2 d c1 \bar "|." } cello = \new Voice \relative c' { \clef bass c2 b a1 \bar "|." } \score { \new StaffGroup << \new Staff \with { instrumentName = "Violin 1" } << \global \violinOne >> \new Staff \with { instrumentName = "Violin 2" } << \global \violinTwo >> \new Staff \with { instrumentName = "Viola" } << \global \viola >> \new Staff \with { instrumentName = "Cello" } << \global \cello >> >> \layout { } \midi { } }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Streichquartett (einfach) ] | [ Up : Templates ] | [ Vorlage für Vokalensemble > ] |
Vorlage für Streichquartett mit einzelnen Stimmen
Mit diesem Beispiel können Sie ein schönes Streichquartett notieren, aber wie gehen Sie vor, wenn Sie Stimmen brauchen? Das Beispiel oben hat gezeigt, wie Sie mit Variablen einzelne Abschnitte getrennt voneinander notieren können. Im nächsten Beispiel wird nun gezeigt, wie Sie mit diesen Variablen einzelne Stimmen erstellen.
Sie müssen das Beispiel in einzelne Dateien aufteilen; die Dateinamen
sind in den Kommentaren am Anfang jeder Datei enthalten. piece.ly
enthält die Noten. Die anderen Dateien – score.ly,
vn1.ly, vn2.ly, vla.ly und
vlc.ly – erstellen daraus die entsprechenden Stimmen bzw. die
Partitur (score.ly). Mit ag
wird den Stimmen ein Name
zugewiesen, auf den zurückgegriffen werden kann.
% piece.ly % (This is the global definitions file) global= { \time 4/4 \key c \major } Violinone = \new Voice \relative c'' { c2 d e1 \bar "|." } Violintwo = \new Voice \relative c'' { g2 g e1 \bar "|." } Viola = \new Voice \relative c' { \clef alto e2 d c1 \bar "|." } Cello = \new Voice \relative c' { \clef bass c2 b a1 \bar "|." } music = { << \tag #'score \tag #'vn1 \new Staff \with { instrumentName = "Violin 1" } << \global \Violinone >> \tag #'score \tag #'vn2 \new Staff \with { instrumentName = "Violin 2" } << \global \Violintwo >> \tag #'score \tag #'vla \new Staff \with { instrumentName = "Viola" } << \global \Viola >> \tag #'score \tag #'vlc \new Staff \with { instrumentName = "Cello" } << \global \Cello >> >> } % These are the other files you need to save on your computer % score.ly % (This is the main file) % uncomment the line below when using a separate file %\include "piece.ly" #(set-global-staff-size 14) \score { \new StaffGroup \keepWithTag #'score \music \layout { } \midi { } } %{ Uncomment this block when using separate files % vn1.ly % (This is the Violin 1 part file) \include "piece.ly" \score { \keepWithTag #'vn1 \music \layout { } } % vn2.ly % (This is the Violin 2 part file) \include "piece.ly" \score { \keepWithTag #'vn2 \music \layout { } } % vla.ly % (This is the Viola part file) \include "piece.ly" \score { \keepWithTag #'vla \music \layout { } } % vlc.ly % (This is the Cello part file) \include "piece.ly" \score { \keepWithTag #'vlc \music \layout { } } %}
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Streichquartett mit einzelnen Stimmen ] | [ Up : Templates ] | [ Vocal ensemble template with automatic piano reduction > ] |
Vorlage für Vokalensemble
Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen, die in allen Stimmen eingefügt wird. Taktart und Vorzeichen etwa sind fast immer gleich in allen Stimmen.
\paper { top-system-spacing.basic-distance = 10 score-system-spacing.basic-distance = 20 system-system-spacing.basic-distance = 20 last-bottom-spacing.basic-distance = 10 } global = { \key c \major \time 4/4 } sopMusic = \relative { c''4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative { e'4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Lyrics = "sopranos" \with { % this is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics = "altos" \new Lyrics = "tenors" \with { % this is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics = "basses" \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords \context Lyrics = "altos" \lyricsto "altos" \altoWords \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords \context Lyrics = "basses" \lyricsto "basses" \bassWords >> }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Vokalensemble ] | [ Up : Templates ] | [ Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System > ] |
Vocal ensemble template with automatic piano reduction
In diesem Beispiel wird ein automatischer Klavierauszug zu der Chorpartitur hinzugefügt. Das zeigt eine der Stärken von LilyPond – man kann eine Variable mehr als einmal benutzen. Wenn Sie irgendeine Änderung an einer Chorstimme vornehmen, (etwa tenorMusic), verändert sich auch der Klavierauszug entsprechend.
\paper { top-system-spacing.basic-distance = 10 score-system-spacing.basic-distance = 20 system-system-spacing.basic-distance = 20 last-bottom-spacing.basic-distance = 10 } global = { \key c \major \time 4/4 } sopMusic = \relative { c''4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative { e'4 f d e } altoWords =\lyricmode { ha ha ha ha } tenorMusic = \relative { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { << \new ChoirStaff << \new Lyrics = "sopranos" \with { % This is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics = "altos" \new Lyrics = "tenors" \with { % This is needed for lyrics above a staff \override VerticalAxisGroup.staff-affinity = #DOWN } \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics = "basses" \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords \context Lyrics = "altos" \lyricsto "altos" \altoWords \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords \context Lyrics = "basses" \lyricsto "basses" \bassWords >> \new PianoStaff << \new Staff << \set Staff.printPartCombineTexts = ##f \partCombine << \global \sopMusic >> << \global \altoMusic >> >> \new Staff << \clef bass \set Staff.printPartCombineTexts = ##f \partCombine << \global \tenorMusic >> << \global \bassMusic >> >> >> >> }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vocal ensemble template with automatic piano reduction ] | [ Up : Templates ] | [ Sologesang und zweistimmiger Refrain > ] |
Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
In diesem Beispiel werden die Texte mit den Befehlen
alignAboveContext
und alignBelowContext
über und unter dem System angeordnet.
global = { \key c \major \time 4/4 } sopMusic = \relative c'' { c4 c c8[( b)] c4 } sopWords = \lyricmode { hi hi hi hi } altoMusic = \relative c' { e4 f d e } altoWords = \lyricmode { ha ha ha ha } tenorMusic = \relative c' { g4 a f g } tenorWords = \lyricmode { hu hu hu hu } bassMusic = \relative c { c4 c g c } bassWords = \lyricmode { ho ho ho ho } \score { \new ChoirStaff << \new Staff = "women" << \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> } \new Voice = "altos" { \voiceTwo << \global \altoMusic >> } >> \new Lyrics \with { alignAboveContext = "women" } \lyricsto "sopranos" \sopWords \new Lyrics \with { alignBelowContext = "women" } \lyricsto "altos" \altoWords % we could remove the line about this with the line below, since % we want the alto lyrics to be below the alto Voice anyway. % \new Lyrics \lyricsto "altos" \altoWords \new Staff = "men" << \clef bass \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> } \new Voice = "basses" { \voiceTwo << \global \bassMusic >> } >> \new Lyrics \with { alignAboveContext = "men" } \lyricsto "tenors" \tenorWords \new Lyrics \with { alignBelowContext = "men" } \lyricsto "basses" \bassWords % again, we could replace the line above this with the line below. % \new Lyrics \lyricsto "basses" \bassWords >> }
[ << Templates ] | [Top][Contents] | [ >> ] |
[ < Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System ] | [ Up : Templates ] | [ > ] |
Sologesang und zweistimmiger Refrain
Diese Vorlage erstellt eine Partitur, die mit Sologesang beginnt und einen
Refrain für zwei Stimmen enthält. Sie zeigt auch die Benutzung von
Platzhalter-Pausen innerhalb der \global
-Variable, um Taktwechsel
(und andere Elemente, die für alle Stimmen gleich sind) für das gesamte
Stück zu definieren.
\header { tagline = ##f } global = { \key g \major % verse \time 3/4 s2.*2 \break % refrain \time 2/4 s2*2 \bar "|." } SoloNotes = \relative g' { \clef "treble" % verse g4 g g | b4 b b | % refrain R2*2 | } SoloLyrics = \lyricmode { One two three | four five six | } SopranoNotes = \relative c'' { \clef "treble" % verse R2.*2 | % refrain c4 c | g4 g | } SopranoLyrics = \lyricmode { la la | la la | } BassNotes = \relative c { \clef "bass" % verse R2.*2 | % refrain c4 e | d4 d | } BassLyrics = \lyricmode { dum dum | dum dum | } \score { << \new Voice = "SoloVoice" << \global \SoloNotes >> \new Lyrics \lyricsto "SoloVoice" \SoloLyrics \new ChoirStaff << \new Voice = "SopranoVoice" << \global \SopranoNotes >> \new Lyrics \lyricsto "SopranoVoice" \SopranoLyrics \new Voice = "BassVoice" << \global \BassNotes >> \new Lyrics \lyricsto "BassVoice" \BassLyrics >> >> \layout { ragged-right = ##t \context { \Staff % these lines prevent empty staves from being printed \RemoveEmptyStaves \override VerticalAxisGroup.remove-first = ##t } } }
[Top][Contents] |
Table of Contents
- Pitches
- Ambitus pro Stimme hinzufügen
- Adding an ottava marking to a single voice
- Aiken head thin variant noteheads
- Altering the length of beamed stems
- Ambitus
- Ambitus after key signature
- Ambitus mit vielen Stimmen
- Notenkopfstile basierend auf der Tonleiterstufe erstellen
- Automatically changing the stem direction of the middle note based on the melody
- Changing ottava text
- Changing the ambitus gap
- Changing the interval of lines on the stave
- Clefs can be transposed by arbitrary amounts
- Coloring notes depending on their pitch
- Creating a sequence of notes on various pitches
- Creating custom key signatures
- Direction of merged ’fa’ shape note heads
- Force a cancellation natural before accidentals
- Forcing a clef symbol to be displayed
- Generating random notes
- Hiding accidentals on tied notes at the start of a new system
- Keep change clefs full sized
- Makam-Beispiel
- Modifying the Ottava spanner slope
- Untypische Tonarten
- Numbers as easy note heads
- Orchester, Chor und Klavier
- Verhindern, dass zusätzliche Auflösungszeichen automatisch
- Auflösungzeichen nicht setzen, wenn die Tonart wechselt
- Eine Stimme mit Transposition zitieren
- Separating key cancellations from key signature changes
- Noten mit minimaler Anzahl an Versetzungszeichen transponieren.
- Turkish Makam example
- Eigenschaften des Schlüssels optimieren
- Using autochange with more than one voice
- Rhythms
- Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms
- Adding drum parts
- Adjusting grace note spacing
- Taktnummern ausrichten
- Alternative breve notes
- Appoggiatura or grace note before a bar line
- Automatic beam subdivisions
- Automatically change durations
- Balkenenden auf Score-Ebene
- Beam nibs
- Balken über Zeilenumbrüche
- Balken für weit auseinander liegende Noten ändern
- Die Erscheinung von Pausentakten ändern
- Changing the number of augmentation dots per note
- Das Tempo ohne Metronom-Angabe verändern
- Die Zahl der N-tole verändern
- Changing time signatures inside a polymetric section using \scaleDurations
- Psalmennotation
- Zusammengesetzte Taktarten
- Dirigierzeichen, Taktgruppenzeichen
- Consistently left-aligned bar numbers
- Controlling tuplet bracket visibility
- Cow and ride bell example
- Eine Metronombezeichnung als Textbeschriftung erstellen
- Bindebögen manuell setzen
- Engraving tremolos with floating beams
- Entering several tuplets using only one \tuplet command
- Forcing rehearsal marks to start from a given letter or number
- Generating custom flags
- Schlagrhythmus für Gitarren
- Heavily customized polymetric time signatures
- High and Low woodblock example
- Making an object invisible with the ’transparent property
- Legatobögen mit kompliziertem Strichelmuster
- Manually controlling beam positions
- Merging multi-measure rests in a polyphonic part
- Modifying tuplet bracket length
- Moving dotted notes in polyphony
- Multi-measure rest length control
- Textbeschriftung und Mehrtaktpausen
- Nicht-standard-N-tolennummern
- Numbering single measure rests
- Partcombine and \autoBeamOff
- Percussion example
- Zeilenumbrüche bei N-tolen mit Balken erlauben
- Positioning grace note beams at the height of normal note beams
- Positionierung von Verzierungen mit verschiebbarem Platz
- Positionierung von Ganztaktpausen
- Positioning opposing fermatas on a bar line
- Preventing final mark from removing final tuplet
- Setzen der Taktnummern in regelmäßigen Intervallen
- Printing bar numbers for broken measures
- Setzen von Taktnummern in Kästen oder Kreisen
- Printing bar numbers using modulo-bar-number-visible
- Printing bar numbers with changing regular intervals
- Metronom- und Übungszeichen unter das System setzen
- Printing music with different time signatures
- Setzen der Taktnummer für den ersten Takt
- Printing tuplet brackets on the note head side
- Globale Umdefinition von Verzierungsnoten
- Entfernung von Taktnummern in einer Partitur
- Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff
- Pausenstile
- Standard-Balkenwerte rückgängig machen
- Rhythmic slashes
- Skips in lyric mode
- Skips in lyric mode (2)
- Stemlets
- Bebalkung nach Taktschlag
- Subdividing beams
- Tam-tam example
- Tambourine example
- Three-sided box
- Time signature in brackets
- Time signature in parentheses
- Time signature printing only the numerator as a number (instead of the fraction)
- Veränderung des Layouts von Verzierungen innerhalb der Noten
- User defined time signatures
- Using alternative flag styles
- Using grace note slashes with normal heads
- Überbindungen für Arpeggio benutzen
- Expressive marks
- Adding beams, slurs, ties etc. when using tuplet and non-tuplet rhythms
- Adding parentheses around an expressive mark or chordal note
- Adding timing marks to long glissandi
- Adjusting slur positions vertically
- Das Aussehen von unbestimmten Glissandi anpassen
- Aligning the ends of hairpins to NoteColumn directions
- Alternative breve notes
- Asymmetric slurs
- Breathing signs
- Broken Crescendo Hairpin
- Caesura ("railtracks") with fermata
- Center text below hairpin dynamics
- Text und Strecker-Stile für Dynamik-Texte ändern
- Changing the appearance of a slur from solid to dotted or dashed
- Das Atemzeichen-Symbol verändern
- Changing the number of augmentation dots per note
- Combining dynamics with markup texts
- Moderne Glissandi
- Controlling spanner visibility after a line break
- Die vertikale Anordnung von Beschriftungen kontrollieren
- Einen Doppelschlag mit Vorhalt erstellen
- Arpeggios zwischen unterschiedlichen Stimmen erzeugen
- Arpeggio über mehrere Systeme in anderen Kontexten
- Arpeggio zwischen Systemen in einem Klaviersystem erstellen
- Creating double-digit fingerings
- Creating "real" parenthesized dynamics
- Creating slurs across voices
- Creating text spanners
- Eigene Dynamiktextspanner nachgestellt
- Dynamiktextstrecker nachgestellt
- Glissando kann Grobs überspringen
- Hairpins with different line styles
- Crescendo-Linien von Dynamik-Texten unterdrücken
- Horizontally aligning custom dynamics (e.g. "sempre pp", "piu f", "subito p")
- Eine Zäsur einfügen
- Laissez vibrer ties
- Line arrows
- Legatobögen mit kompliziertem Strichelmuster
- Die Standardwerte der Abkürzungen von Artikulationen verändern
- Moving slur positions vertically
- Moving the ends of hairpins
- Positioning arpeggios
- Textbeschriftung innerhalb von Bögen positionieren
- Printing hairpins in various styles
- Crescendo Klammern al niente schreiben
- Metronom- und Übungszeichen unter das System setzen
- Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen
- Die Mindestlänge von Crescendo-Klammern bestimmen
- Showing the same articulation above and below a note or chord
- Snap-pizzicato or Bartok pizzicato
- Using a tick as the breath mark symbol
- Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen
- Doppelte Bögen für Legato-Akkorde benutzen
- Using the whiteout property
- Vertical line as a baroque articulation mark
- Vertically aligning dynamics across multiple notes
- Repeats
- Volta-Klammern zu zusätzlichen Systemen hinzufügen
- Centered measure numbers
- Changing the default bar lines
- Controlling the appearance of tremolo slashes
- Cross-staff tremolos
- Engraving tremolos with floating beams
- Isolierte Prozentwiederholungen
- Measure counter
- Numbering groups of measures
- Sichtbarkeit von Prozent-Wiederholungen
- Prozent-Wiederholungen zählen
- Positioning segno and coda (with line break)
- Setting the double repeat default for volte
- Volta-Klammern verkürzen
- Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole
- Volta multi staff
- Volta text markup using repeatCommands
- Simultaneous notes
- Zusätzliche Stimmen, um Zusammenstöße zu vermeiden
- Changing \partCombine texts
- Changing a single note’s size in a chord
- Clusters
- Zwei Stimmen auf einem System kombinieren
- Displaying complex chords
- Horizontale Verschiebung von Noten erzwingen
- Making an object invisible with the ’transparent property
- Moving dotted notes in polyphony
- Suppressing warnings for clashing note columns
- Two \partCombine pairs on one staff
- Staff notation
- Ambitus pro Stimme hinzufügen
- Adding an extra staff
- Adding an extra staff at a line break
- Adding indicators to staves which get split after a break
- Orchesterstichnoten zu einem Klavierauszug hinzufügen
- Adding timing marks to long glissandi
- Alternative Taktnummerierung
- Ambitus after key signature
- Centered measure numbers
- Changing the default bar lines
- Changing the number of lines in a staff
- Changing the staff size
- Creating blank staves
- Creating custom key signatures
- Creating double-digit fingerings
- Hälse über beide Systeme
- Klammer anzeigen, wenn nur ein System gesetzt wird
- Extending a TrillSpanner
- Extending glissandi across repeats
- Flat Ties
- Forcing measure width to adapt to MetronomeMark’s width
- Glissando kann Grobs überspringen
- Incipit
- Inserting score fragments above a staff, as markups
- Let TabStaff print the topmost string at bottom
- Letter tablature formatting
- Making glissandi breakable
- Eine Linie des Notensystems dicker als die anderen machen
- Measure counter
- Mensurstriche-Layout (Taktstriche zwischen den Systemen
- Modifying the Ottava spanner slope
- Systeme schachteln
- Untypische Tonarten
- Numbering groups of measures
- Orchester, Chor und Klavier
- Print ChordNames with same root and different bass as slash and bass-note
- Putting lyrics inside the staff
- Eine andere Stimme zitieren
- Eine Stimme mit Transposition zitieren
- Removing brace on first line of piano score
- Die erste leere Notenzeile auch entfernen
- Setting system separators
- Shape individual ties in chords
- Tick bar lines
- Time signature in brackets
- Time signature in parentheses
- Eigenschaften des Schlüssels optimieren
- Two \partCombine pairs on one staff
- Eine eckige Klammer zu Beginn von Systemgruppen benutzen
- Using autochange with more than one voice
- Using marklines in a Frenched score
- Vertically aligned StaffGroups without connecting SystemStartBar
- Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole
- Volta multi staff
- Editorial annotations
- Adding fingerings to a score
- Adding links to objects
- Adding markups in a tablature
- Fingersatz auch innerhalb des Systems setzen
- Alternative Taktnummerierung
- Analysis brackets above the staff
- Analysis brackets with labels
- Notenkopfstile basierend auf der Tonleiterstufe erstellen
- Blanking staff lines using the \whiteout command
- Changing a single note’s size in a chord
- Changing the appearance of a slur from solid to dotted or dashed
- Coloring notes depending on their pitch
- Position von Fingersatz in Akkorden kontrollieren
- Einen Doppelschlag mit Vorhalt erstellen
- Creating blank staves
- Creating double-digit fingerings
- Standardrichtung für Hälse auf der Mittellinie
- Different font size settings for instrumentName and shortInstrumentName
- Drawing boxes around grobs
- Drawing circles around note heads
- Drawing circles around various objects
- Embedding native PostScript in a \markup block
- Gitternetzlinien: Aussehen verändern
- Grid lines: emphasizing rhythms and notes synchronization
- Hammer on and pull off
- Hammer on and pull off using chords
- Hammer on and pull off using voices
- Eine Linie des Notensystems dicker als die anderen machen
- Marking notes of spoken parts with a cross on the stem (Sprechstimme)
- Measure counter
- Measure spanner
- Numbering groups of measures
- Positioning fingering indications precisely
- Textbeschriftung innerhalb von Bögen positionieren
- Printing text from right to left
- String number extender lines
- Using PostScript to generate special note head shapes
- Using the whiteout property
- Text
- [OBSOLETE] Adding a QR code
- Adding markups in a tablature
- Adding the current date to a score
- Adjusting lyrics vertical spacing
- Aligning and centering instrument names
- Aligning syllables with melisma
- Blanking staff lines using the \whiteout command
- Center text below hairpin dynamics
- Changing ottava text
- Changing the default text font family
- Combining dynamics with markup texts
- Zwei Stimmen auf einem System kombinieren
- Creating "real" parenthesized dynamics
- Creating text spanners
- Demonstrating all headers
- Embedding native PostScript in a \markup block
- Silben im Gesangstext formatieren
- How to put ties between syllables in lyrics
- Ausrichtung von Gesangstext
- Markup list
- Textbeschriftung und Mehrtaktpausen
- Of the ubiquity of markup objects
- Outputting the version number
- Piano template with centered lyrics
- Printing bar numbers with changing regular intervals
- Zeichen über jedem System ausgeben
- Printing text from right to left
- Putting lyrics inside the staff
- Isolierter Text in zwei Spalten
- String number extender lines
- Three-sided box
- UTF-8
- Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
- Volta text markup using repeatCommands
- Vocal music
- Ambitus pro Stimme hinzufügen
- Adding indicators to staves which get split after a break
- Orchesterstichnoten zu einem Klavierauszug hinzufügen
- Adjusting lyrics vertical spacing
- Aligning syllables with melisma
- Ambitus
- Ambitus after key signature
- Ambitus mit vielen Stimmen
- Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals
- Vorlage für anglikanischen Psalm
- Arranging separate lyrics on a single line
- Changing stanza fonts
- Psalmennotation
- Forcing hyphens to be shown
- Silben im Gesangstext formatieren
- How to put ties between syllables in lyrics
- Hymnus-Vorlage
- Ausrichtung von Gesangstext
- Marking notes of spoken parts with a cross on the stem (Sprechstimme)
- Platzverteilung von Gesangstext wie in 2.12 für neuere Versionen
- Orchester, Chor und Klavier
- Vorlage für Klavier und Gesangsstimme
- Putting lyrics inside the staff
- SATB-Chorvorlage auf vier Systemen
- Vorlage für eine Notenzeile mit Noten, Text und Akkorden
- Single staff template with notes, lyrics, chords and frets
- Vorlage für ein Notensystem mit Noten und Gesangstext
- Skips in lyric mode
- Skips in lyric mode (2)
- Arpeggio-Klammern benutzen, um geteilte Stimmen besser sichtbar zu machen
- Using tags to produce mensural and modern music from the same source
- Gesangstext und Ossia vertikal ausrichten
- Vertically aligning stanza numbers of different staves
- Vertically centered common lyrics
- Vorlage für Vokalensemble
- Vocal ensemble template with automatic piano reduction
- Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
- Sologesang und zweistimmiger Refrain
- Chords
- Adding a figured bass above or below the notes
- Tatkstriche in einen ChordNames-Kontext hinzufügen
- Adjusting figured bass alteration glyphs
- Akkordsymboltrenner verändern
- Changing the chord names to German or semi-German notation
- Positionen von Generalbass-Alterationszeichen verändern
- Akkordsymbolausnahmen
- Akkordbezeichnung maj7
- Chord names alternative
- Chords with stretched fingering for FretBoards and TabVoice
- Clusters
- Position von Fingersatz in Akkorden kontrollieren
- Cross-staff chords - beaming problems workaround
- Customizing the chord grid style
- Customizing the no-chord symbol
- Displaying complex chords
- Manually break figured bass extenders for only some numbers
- Print ChordNames with same root and different bass as slash and bass-note
- Akkordsymbole bei Wechsel anzeigen
- Ein einfaches Liedblatt
- Vorlage für eine Notenzeile mit Noten, Text und Akkorden
- Single staff template with notes, lyrics, chords and frets
- Vorlage für eine Notenzeile mit Akkorden
- Vertically centering paired figured bass extenders
- Wiederholungs-(Volta-)Klammern unterhalb der Akkordsymbole
- Keyboards
- Symbole für Akkordeon-Diskantregister
- Accordion register symbols
- Changing the text for sustain markings
- Clusters
- Position von Fingersatz in Akkorden kontrollieren
- Creating slurs across voices
- Cross-staff chords - beaming problems workaround
- Cross-staff tremolos
- Fine-tuning pedal brackets
- Akkorde auf zwei Systemen mit Arpeggioklammern anzeigen
- Vorlage für Jazz-Combo
- Laissez vibrer ties
- Vorlage für einfache Klaviernotation
- Piano template with centered lyrics
- Vorlage für Klavier und Gesangsstimme
- Removing brace on first line of piano score
- Using autochange with more than one voice
- Vocal ensemble template with automatic piano reduction
- Percussion
- Fretted strings
- Adding fingerings to a score
- Adding fingerings to tablatures
- Adding markups in a tablature
- Fingersatz auch innerhalb des Systems setzen
- Automatic Fretboards Barre
- Changing fret orientations
- Akkordglissando in Tabulaturen
- Akkordänderungen für Bunddiagramme
- Chords with stretched fingering for FretBoards and TabVoice
- Position von Fingersatz in Akkorden kontrollieren
- Bunddiagramme anpassen
- Anpassung von Beschriftungs-Bunddiagrammen
- Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen
- Faking a hammer in tablatures
- Fingersatz, Saitennummern und Fingersatz für die rechte Hand
- Flamenco notation
- Fret diagrams explained and developed
- Alternative Bunddiagrammtabellen
- Flageolett von Bundinstrumenten in einer Tabulatur
- Guitar slides
- Schlagrhythmus für Gitarren
- Hammer on and pull off
- Hammer on and pull off using chords
- Hammer on and pull off using voices
- How to change fret diagram position
- Vorlage für Jazz-Combo
- Laissez vibrer ties
- Let TabStaff print the topmost string at bottom
- Letter tablature formatting
- Referenz für Flageolett von offenen Saiten
- Positionierung von Fingersatz der rechten Hand
- Polyphonie in einer Tabulatur
- Gleiten (Glissando) in Tabulatur
- Hals- und Balkenverhalten in einer Tabulatur
- String number extender lines
- Unfretted strings
- Winds
- Ancient notation
- Adding a figured bass above or below the notes
- Ancient fonts
- Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals
- Ancient time signatures
- Psalmennotation
- Custodes
- Incipit
- Mensurstriche-Layout (Taktstriche zwischen den Systemen
- Pausenstile
- Using tags to produce mensural and modern music from the same source
- Vertical line as a baroque articulation mark
- World music
- Contexts and engravers
- Adding a figured bass above or below the notes
- Adding an extra staff
- Adding an extra staff at a line break
- Automatically changing the stem direction of the middle note based on the melody
- Centered measure numbers
- Changing MIDI output to one channel per voice
- Changing time signatures inside a polymetric section using \scaleDurations
- Psalmennotation
- Creating blank staves
- Creating custom key signatures
- Hälse über beide Systeme
- Defining an engraver in Scheme: ambitus engraver
- Displaying a whole GrandStaff system if only one of its staves is alive
- Engravers one-by-one
- Mensurstriche-Layout (Taktstriche zwischen den Systemen
- Systeme schachteln
- Numbering groups of measures
- Print ChordNames with same root and different bass as slash and bass-note
- Entfernung von Taktnummern in einer Partitur
- Eine eckige Klammer zu Beginn von Systemgruppen benutzen
- Using marklines in a Frenched score
- Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
- Sologesang und zweistimmiger Refrain
- Tweaks and overrides
- Adding an ottava marking to a single voice
- Adding links to objects
- Adding markups in a tablature
- Adding timing marks to long glissandi
- Adjusting grace note spacing
- Adjusting lyrics vertical spacing
- Adjusting slur positions vertically
- Altering the length of beamed stems
- Alternative Taktnummerierung
- Analysis brackets above the staff
- Analysis brackets with labels
- Asymmetric slurs
- Breaking vertical alignment of dynamics and textscripts
- Caesura ("railtracks") with fermata
- Changing a single note’s size in a chord
- Changing beam thickness and spacing
- Die Erscheinung von Pausentakten ändern
- Changing properties for individual grobs
- Text und Strecker-Stile für Dynamik-Texte ändern
- Changing the default text font family
- Changing the staff size
- Das Tempo ohne Metronom-Angabe verändern
- Changing the text for sustain markings
- Controlling spanner visibility after a line break
- Controlling the appearance of tremolo slashes
- Die vertikale Anordnung von Beschriftungen kontrollieren
- Controlling tuplet bracket visibility
- Einen Doppelschlag mit Vorhalt erstellen
- Creating custom key signatures
- Creating double-digit fingerings
- Creating text spanners
- Cross-staff chords - beaming problems workaround
- Hälse über beide Systeme
- Custodes
- Bunddiagramme anpassen
- Anpassung von Beschriftungs-Bunddiagrammen
- Klammer anzeigen, wenn nur ein System gesetzt wird
- Displaying grob ancestry
- Dotted harmonics
- Drawing boxes around grobs
- Drawing circles around various objects
- Eigene Dynamiktextspanner nachgestellt
- Dynamiktextstrecker nachgestellt
- Extending a TrillSpanner
- Extending glissandi across repeats
- Fine-tuning pedal brackets
- Flat Ties
- Force a cancellation natural before accidentals
- Horizontale Verschiebung von Noten erzwingen
- Fret diagrams explained and developed
- Generating custom flags
- Glissando kann Grobs überspringen
- Hairpins with different line styles
- Horizontally aligning custom dynamics (e.g. "sempre pp", "piu f", "subito p")
- How to change fret diagram position
- Eine Zäsur einfügen
- Keep change clefs full sized
- Line arrows
- Making an object invisible with the ’transparent property
- Making glissandi breakable
- Manually controlling beam positions
- Measure-centered bar numbers
- Mensurstriche-Layout (Taktstriche zwischen den Systemen
- Modifying the Ottava spanner slope
- Moving dotted notes in polyphony
- Moving slur positions vertically
- Systeme schachteln
- Overriding articulations by type
- Sichtbarkeit von Prozent-Wiederholungen
- Positioning arpeggios
- Positionierung von Ganztaktpausen
- Textbeschriftung innerhalb von Bögen positionieren
- Setzen von Taktnummern in Kästen oder Kreisen
- Metronom- und Übungszeichen unter das System setzen
- Printing note names with and without an octave marker
- Printing tuplet brackets on the note head side
- Proportional strict notespacing
- Removing brace on first line of piano score
- Removing connecting bar lines on StaffGroup, PianoStaff, or GrandStaff
- Die erste leere Notenzeile auch entfernen
- Pausenstile
- Rhythmic slashes
- Separating key cancellations from key signature changes
- Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen
- Setting system separators
- Shape individual ties in chords
- Showing the same articulation above and below a note or chord
- String number extender lines
- Suppressing warnings for clashing note columns
- Time signature in brackets
- Time signature in parentheses
- Time signature printing only the numerator as a number (instead of the fraction)
- Tuplet bracket and change staff
- Eigenschaften des Schlüssels optimieren
- Veränderung des Layouts von Verzierungen innerhalb der Noten
- Using alternative flag styles
- Using ly:grob-object to access grobs with \tweak
- Using PostScript to generate special note head shapes
- Using the \tweak command to tweak individual grobs
- Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen
- Gesangstext und Ossia vertikal ausrichten
- Vertically aligning stanza numbers of different staves
- Vertically centering paired figured bass extenders
- Paper and layout
- Titles
- Spacing
- MIDI
- Templates
- Vorlage für Alte Notation – moderne Transkription des gregorianischen Chorals
- Vorlage für anglikanischen Psalm
- Hymnus-Vorlage
- Vorlage für Jazz-Combo
- Orchester, Chor und Klavier
- Vorlage für einfache Klaviernotation
- Piano template with centered lyrics
- Vorlage für Klavier und Gesangsstimme
- SATB-Chorvorlage auf vier Systemen
- Score for diatonic accordion
- Vorlage für eine Notenzeile mit Noten, Text und Akkorden
- Single staff template with notes, lyrics, chords and frets
- Vorlage für eine Notenzeile mit Akkorden
- Vorlage für ein Notensystem mit Noten und Gesangstext
- Vorlage für ein Notensystem
- Vorlage für Streichquartett (einfach)
- Vorlage für Streichquartett mit einzelnen Stimmen
- Vorlage für Vokalensemble
- Vocal ensemble template with automatic piano reduction
- Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System
- Sologesang und zweistimmiger Refrain