This chapter explains how to use notation for specific instruments.
@menu
-* Rhythmic music::
* Piano music::
+* Chord names::
* Vocal music::
-* Other instrument specific notation::
+* Rhythmic music::
* Tablatures::
-* Popular music::
* Ancient notation::
+* Other instrument specific notation::
@end menu
-@node Rhythmic music
-@section Rhythmic music
-Rhythmic music is primarily used for percussion and drum notation, but it can
-also be used to show the rhythms of melodies.
+@node Piano music
+@section Piano music
+
+Piano staves are two normal staves coupled with a brace. The staves
+are largely independent, but sometimes voices can cross between the
+two staves. The same notation is also used for harps and other key
+@c Is this `harp' or `harpsichord'?
+@c both. -gp
+instruments. The @internalsref{PianoStaff} is especially built to
+handle this cross-staffing behavior. In this section we discuss the
+@internalsref{PianoStaff} and some other pianistic peculiarities.
+
@menu
-* Showing melody rhythms::
-* Entering percussion::
-* Percussion staves::
+* Automatic staff changes::
+* Manual staff switches::
+* Pedals::
+* Staff switch lines::
+* Cross staff stems::
@end menu
+@refbugs
-@node Showing melody rhythms
-@subsection Showing melody rhythms
+Dynamics are not centered, but workarounds do exist. See the
+``piano centered dynamics'' template in @ref{Piano templates}.
-Sometimes you might want to show only the rhythm of a melody. This
-can be done with the rhythmic staff. All pitches of notes on such a
-staff are squashed, and the staff itself has a single line
+@cindex cross staff stem
+@cindex stem, cross staff
+@cindex distance between staves in piano music
-@lilypond[quote,raggedright,fragment,relative=1,verbatim]
-\context RhythmicStaff {
- \time 4/4
- c4 e8 f g2 | r4 g r2 | g1:32 | r1 |
-}
-@end lilypond
+The distance between the two staves is the same for all systems in the
+score. It is possible to override this per system, but it does require
+an arcane command incantation. See
+@inputfileref{input/@/test,piano@/-staff@/-distance@/.ly}.
-@seealso
-Program reference: @internalsref{RhythmicStaff}.
+@node Automatic staff changes
+@subsection Automatic staff changes
+@cindex Automatic staff changes
-Examples: @inputfileref{input/@/regression,rhythmic@/-staff@/.ly}.
+Voices can be made to switch automatically between the top and the bottom
+staff. The syntax for this is
+@quotation
+@example
+\autochange @dots{}@var{music}@dots{}
+@end example
+@end quotation
-@node Entering percussion
-@subsection Entering percussion
+@noindent
+This will create two staves inside the current PianoStaff, called
+@code{up} and @code{down}. The lower staff will be in bass clef by
+default.
-@cindex percussion
-@cindex drums
+A @code{\relative} section that is outside of @code{\autochange} has
+no effect on the pitches of @var{music}, so, if necessary, put
+@code{\relative} inside @code{\autochange} like
+@quotation
+@example
+\autochange \relative @dots{} @dots{}
+@end example
+@end quotation
-Percussion notes may be entered in @code{\drummode} mode, which is
-similar to the standard mode for entering notes. Each piece of
-percussion has a full name and an abbreviated name, and both can be used
-in input files
-@lilypond[quote,raggedright,verbatim]
-\drums {
- hihat hh bassdrum bd
-}
+The autochanger switches on basis of the pitch (middle C is the turning
+point), and it looks ahead skipping over rests to switch in
+advance. Here is a practical example
+
+@lilypond[quote,verbatim,raggedright]
+\context PianoStaff
+ \autochange \relative c'
+ {
+ g4 a b c d r4 a g
+ }
@end lilypond
-The complete list of drum names is in the init file
-@file{ly/@/drumpitch@/-init@/.ly}.
-@c TODO: properly document this.
@seealso
-Program reference: @internalsref{DrumNoteEvent}.
-
-@node Percussion staves
-@subsection Percussion staves
-@cindex percussion
-@cindex drums
+In this manual: @ref{Manual staff switches}.
-A percussion part for more than one instrument typically uses a
-multiline staff where each position in the staff refers to one piece
-of percussion.
+Program reference: @internalsref{AutoChangeMusic}.
-To typeset the music, the notes must be interpreted in a
-@internalsref{DrumStaff} and @internalsref{DrumVoice} contexts
-@lilypond[quote,raggedright,verbatim]
-up = \drummode { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat }
-down = \drummode { bassdrum4 snare8 bd r bd sn4 }
- \new DrumStaff <<
- \new DrumVoice { \voiceOne \up }
- \new DrumVoice { \voiceTwo \down }
- >>
-@end lilypond
+@refbugs
-The above example shows verbose polyphonic notation. The short
-polyphonic notation, described in @ref{Polyphony}, can also be used if
-the @internalsref{DrumVoices} are instantiated by hand first. For example,
+The staff switches may not end up in optimal places. For high
+quality output, staff switches should be specified manually.
-@lilypond[quote,raggedright,fragment,verbatim]
-\new DrumStaff <<
- \context DrumVoice = "1" { s1 *2 }
- \context DrumVoice = "2" { s1 *2 }
- \drummode {
- bd4 sn4 bd4 sn4
- <<
- { \repeat unfold 16 hh16 }
- \\
- { bd4 sn4 bd4 sn4 }
- >>
- }
->>
-@end lilypond
+@code{\autochange} cannot be inside @code{\times}.
-There are also other layout possibilities. To use these, set the
-property @code{drumStyleTable} in context @internalsref{DrumVoice}.
-The following variables have been predefined
+Internally, the @code{\partcombine} interprets both arguments as
+@code{Voice}s named @code{one} and @code{two}, and then decides when
+the parts can be combined. Consequently, if the arguments switch to
+differently named @internalsref{Voice} contexts, the events in those
+will be ignored.
-@table @code
-@item drums-style
-This is the default. It typesets a typical drum kit on a five-line staff
-@lilypond[quote,linewidth=10.0\cm]
-nam = \lyricmode {
- cymc cyms cymr hh hhc hho hhho hhp
- cb hc bd sn ss tomh tommh tomml toml tomfh tomfl }
-mus = \drummode {
- cymc cyms cymr hh hhc hho hhho hhp \break
- cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 }
-\score {
- << \new DrumStaff \with {
- \remove Bar_engraver
- \remove Time_signature_engraver
- \override Stem #'transparent = ##t
- \override Stem #'Y-extent-callback = ##f
- minimumVerticalExtent = #'(-4.0 . 5.0)
- } \mus
- \context Lyrics \nam
- >>
- \layout {
- \context {
- \Score
- \override LyricText #'font-family = #'typewriter
- \override BarNumber #'transparent =##T
- }
- }
-}
-@end lilypond
+@node Manual staff switches
+@subsection Manual staff switches
-The drum scheme supports six different toms. When there are fewer toms,
-simply select the toms that produce the desired result, i.e., to get toms
-on the three middle lines you use @code{tommh}, @code{tomml}, and
-@code{tomfh}.
+@cindex manual staff switches
+@cindex staff switch, manual
-@item timbales-style
-This typesets timbales on a two line staff
+Voices can be switched between staves manually, using the command
+@example
+\change Staff = @var{staffname} @var{music}
+@end example
-@lilypond[quote,raggedright]
-nam = \lyricmode { timh ssh timl ssl cb }
-mus = \drummode { timh ssh timl ssl cb s16 }
+@noindent
+The string @var{staffname} is the name of the staff. It switches the
+current voice from its current staff to the Staff called
+@var{staffname}. Typically @var{staffname} is @code{"up"} or
+@code{"down"}. The @context{Staff} referred to must already exist, so
+usually the setup for a score will start with a setup of the staves,
+@example
<<
- \context DrumStaff \with {
- \remove Bar_engraver
- \remove Time_signature_engraver
- \override Stem #'transparent = ##t
- \override Stem #'Y-extent-callback = ##f
- \override StaffSymbol #'line-count = #2
- \override StaffSymbol #'staff-space = #2
- minimumVerticalExtent = #'(-3.0 . 4.0)
- drumStyleTable = #timbales-style
- } \mus
- \context Lyrics {
- \override LyricText #'font-family = #'typewriter
- \nam
- }
+ \context Staff = up @{
+ \skip 1 * 10 % @emph{keep staff alive}
+ @}
+ \context Staff = down @{
+ \skip 1 * 10 % @emph{idem}
+ @}
>>
-@end lilypond
+@end example
-@item congas-style
-This typesets congas on a two line staff
-@lilypond[quote,raggedright]
-nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl }
-mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
+and the @context{Voice} is inserted afterwards
-<<
- \context DrumStaff \with {
- \remove Bar_engraver
- \remove Time_signature_engraver
- drumStyleTable = #congas-style
- \override StaffSymbol #'line-count = #2
+@example
+\context Staff = down
+ \new Voice @{ @dots{} \change Staff = up @dots{} @}
+@end example
- %% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Stem #'Y-extent-callback = ##f
- } \mus
- \context Lyrics {
- \override LyricText #'font-family = #'typewriter
- \nam
- }
->>
-@end lilypond
-@item bongos-style
-This typesets bongos on a two line staff
-
-@lilypond[quote,raggedright]
-nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl }
-mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
-
-<<
- \context DrumStaff\with {
- \remove Bar_engraver
- \remove Time_signature_engraver
- \override StaffSymbol #'line-count = #2
- drumStyleTable = #bongos-style
-
- %% this sucks; it will lengthen stems.
- \override StaffSymbol #'staff-space = #2
- \override Stem #'transparent = ##t
- \override Stem #'Y-extent-callback = ##f
- } \mus
- \context Lyrics {
- \override LyricText #'font-family = #'typewriter
- \nam
- }
->>
-@end lilypond
-
-@item percussion-style
-To typeset all kinds of simple percussion on one line staves.
-
-@lilypond[quote,raggedright]
-nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc }
-mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
-
-<<
- \context DrumStaff\with{
- \remove Bar_engraver
- drumStyleTable = #percussion-style
- \override StaffSymbol #'line-count = #1
- \remove Time_signature_engraver
- \override Stem #'transparent = ##t
- \override Stem #'Y-extent-callback = ##f
- } \mus
- \context Lyrics {
- \override LyricText #'font-family = #'typewriter
- \nam
- }
->>
-@end lilypond
-@end table
-
-If you do not like any of the predefined lists you can define your own
-list at the top of your file
-
-@lilypond[quote,raggedright,verbatim]
-#(define mydrums '(
- (bassdrum default #f -1)
- (snare default #f 0)
- (hihat cross #f 1)
- (pedalhihat xcircle "stopped" 2)
- (lowtom diamond #f 3)))
-up = \drummode { hh8 hh hh hh hhp4 hhp }
-down = \drummode { bd4 sn bd toml8 toml }
-
-\new DrumStaff <<
- \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
- \new DrumVoice { \voiceOne \up }
- \new DrumVoice { \voiceTwo \down }
->>
-@end lilypond
-
-
-@seealso
-
-Init files: @file{ly/@/drumpitch@/-init@/.ly}.
-
-Program reference: @internalsref{DrumStaff}, @internalsref{DrumVoice}.
-
-@refbugs
-
-Because general MIDI does not contain rim shots, the sidestick is used
-for this purpose instead.
-
-
-@node Piano music
-@section Piano music
-
-Piano staves are two normal staves coupled with a brace. The staves
-are largely independent, but sometimes voices can cross between the
-two staves. The same notation is also used for harps and other key
-@c Is this `harp' or `harpsichord'?
-instruments. The @internalsref{PianoStaff} is especially built to
-handle this cross-staffing behavior. In this section we discuss the
-@internalsref{PianoStaff} and some other pianistic peculiarities.
-
-
-@menu
-* Automatic staff changes::
-* Manual staff switches::
-* Pedals::
-* Staff switch lines::
-* Cross staff stems::
-@end menu
-
-@refbugs
-
-Dynamics are not centered, but workarounds do exist. See the
-``piano centered dynamics'' template in @ref{Piano templates}.
-
-@cindex cross staff stem
-@cindex stem, cross staff
-@cindex distance between staves in piano music
-
-The distance between the two staves is the same for all systems in the
-score. It is possible to override this per system, but it does require
-an arcane command incantation. See
-@inputfileref{input/@/test,piano@/-staff@/-distance@/.ly}.
-
-
-@node Automatic staff changes
-@subsection Automatic staff changes
-@cindex Automatic staff changes
-
-Voices can be made to switch automatically between the top and the bottom
-staff. The syntax for this is
-
-@quotation
-@example
-\autochange @dots{}@var{music}@dots{}
-@end example
-@end quotation
-
-@noindent
-This will create two staves inside the current PianoStaff, called
-@code{up} and @code{down}. The lower staff will be in bass clef by
-default.
-
-A @code{\relative} section that is outside of @code{\autochange} has
-no effect on the pitches of @var{music}, so, if necessary, put
-@code{\relative} inside @code{\autochange} like
-
-@quotation
-@example
-\autochange \relative @dots{} @dots{}
-@end example
-@end quotation
-
-
-The autochanger switches on basis of the pitch (middle C is the turning
-point), and it looks ahead skipping over rests to switch in
-advance. Here is a practical example
-
-@lilypond[quote,verbatim,raggedright]
-\context PianoStaff
- \autochange \relative c'
- {
- g4 a b c d r4 a g
- }
-@end lilypond
-
-
-@seealso
-
-In this manual: @ref{Manual staff switches}.
-
-Program reference: @internalsref{AutoChangeMusic}.
-
-
-
-@refbugs
-
-The staff switches may not end up in optimal places. For high
-quality output, staff switches should be specified manually.
-
-
-@code{\autochange} cannot be inside @code{\times}.
-
-Internally, the @code{\partcombine} interprets both arguments as
-@code{Voice}s named @code{one} and @code{two}, and then decides when
-the parts can be combined. Consequently, if the arguments switch to
-differently named @internalsref{Voice} contexts, the events in those
-will be ignored.
-
-
-@node Manual staff switches
-@subsection Manual staff switches
-
-@cindex manual staff switches
-@cindex staff switch, manual
-
-Voices can be switched between staves manually, using the command
-@example
-\change Staff = @var{staffname} @var{music}
-@end example
-
-@noindent
-The string @var{staffname} is the name of the staff. It switches the
-current voice from its current staff to the Staff called
-@var{staffname}. Typically @var{staffname} is @code{"up"} or
-@code{"down"}. The @context{Staff} referred to must already exist, so
-usually the setup for a score will start with a setup of the staves,
-
-@example
-<<
- \context Staff = up @{
- \skip 1 * 10 % @emph{keep staff alive}
- @}
- \context Staff = down @{
- \skip 1 * 10 % @emph{idem}
- @}
->>
-@end example
-
-
-and the @context{Voice} is inserted afterwards
-
-@example
-\context Staff = down
- \new Voice @{ @dots{} \change Staff = up @dots{} @}
-@end example
-
-
-@node Pedals
-@subsection Pedals
-@cindex Pedals
+@node Pedals
+@subsection Pedals
+@cindex Pedals
Pianos have pedals that alter the way sound is produced. Generally, a
piano has three pedals, sustain, una corda, and sostenuto.
@end lilypond
-@node Vocal music
-@section Vocal music
-
-There are three different issues when printing vocal music
+@node Chord names
+@section Chord names
-@itemize @bullet
-@item
-Song texts must be entered as text, not notes. For example, the
-input@tie{}@code{d} should be interpreted as a one letter syllable, not the
-note@tie{}D.
+@menu
+* Printing chord names::
+* Chords mode::
+* Printing chord names::
+@end menu
-@item
-Song texts must be printed as text, not as notes.
-@item
-Song texts must be aligned with the notes of their melody.
-@end itemize
+@c awkward name; awkward section name.
+@c still, the Basic "chords" seems like a good name... :(
+@node Printing chord names
+@subsection Printing chord names
+@cindex Chord names
-The simplest solution for printing music uses the @code{\addlyrics}
-function to solve all these problems at once. However, these
-three functions can be controlled separately, which is necessary
-for complex vocal music.
+LilyPond has support for printing chord names. Chords may be entered
+in musical chord notation, i.e., @code{< .. >}, but they can also be
+entered by name. Internally, the chords are represented as a set of
+pitches, so they can be transposed
-@menu
-* Setting simple songs::
-* Entering lyrics::
-* Hyphens and extenders::
-* The Lyrics context::
-* Flexibility in alignment::
-* More stanzas::
-* Ambitus::
-* Other vocal issues::
-@end menu
-
-@node Setting simple songs
-@subsection Setting simple songs
-
-The easiest way to add lyrics to a melody is to append
-@cindex \addlyrics
-@example
-\addlyrics @{ @var{the lyrics} @}
-@end example
-
-@noindent
-to a melody. Here is an example,
+@lilypond[quote,raggedright,verbatim,raggedright]
+twoWays = \transpose c c' {
+ \chordmode {
+ c1 f:sus4 bes/f
+ }
+ <c e g>
+ <f bes c'>
+ <f bes d'>
+}
-@lilypond[raggedright,verbatim,fragment,quote]
-\time 3/4
-\relative { c2 e4 g2. }
-\addlyrics { play the game }
+<< \context ChordNames \twoWays
+ \context Voice \twoWays >>
@end lilypond
-More stanzas can be added by adding more
-@code{\addlyrics} sections
+This example also shows that the chord printing routines do not try to
+be intelligent. The last chord (@code{f bes d}) is not interpreted as
+an inversion.
-@lilypond[raggedright,verbatim,fragment,quote]
-\time 3/4
-\relative { c2 e4 g2. }
-\addlyrics { play the game }
-\addlyrics { speel het spel }
-\addlyrics { joue le jeu }
-@end lilypond
-@c TODO - this isn't such a great place for this note, but I can't
-@c find a better place without rearranging a lot of lyric stuff.
-@c It's yet another thing to look at post-3.0.
+@node Chords mode
+@subsection Chords mode
+@cindex Chords mode
-The @code{\addlyrics} command is actually just a convienient way
-to write a more complicated LilyPond structure that sets up the
-lyrics. You should use @code{\addlyrics} unless you need to do
-fancy things, in which case you should investigate
-@code{\lyricsto} or @code{\lyricmode}.
+In chord mode sets of pitches (chords) are entered with normal note
+names. A chord is entered by the root, which is entered like a
+normal pitch
-@example
-@{ MUSIC @}
-\addlyrics @{ LYRICS @}
-@end example
+@lilypond[quote,raggedright,fragment,verbatim]
+\chordmode { es4. d8 c2 }
+@end lilypond
@noindent
-is the same as
-
-@example
-\context Voice = blah @{ music @}
-\lyricsto "blah" \new lyrics @{ LYRICS @}
-@end example
-
-@refbugs
+The mode is introduced by the keyword @code{\chordmode}.
-@code{\addlyrics} cannot handle polyphony.
+@cindex chord entry
+@cindex chord mode
+Other chords may be entered by suffixing a colon and introducing a
+modifier (which may include a number if desired)
+@lilypond[quote,fragment,verbatim]
+\chordmode { e1:m e1:7 e1:m7 }
+@end lilypond
+The first number following the root is taken to be the `type' of the
+chord, thirds are added to the root until it reaches the specified
+number
+@lilypond[quote,fragment,verbatim]
+\chordmode { c:3 c:5 c:6 c:7 c:8 c:9 c:10 c:11 }
+@end lilypond
-@node Entering lyrics
-@subsection Entering lyrics
+@cindex root of chord
+@cindex additions, in chords
+@cindex removals, in chords
+More complex chords may also be constructed adding separate steps
+to a chord. Additions are added after the number following
+the colon and are separated by dots
+@lilypond[quote,verbatim,fragment]
+\chordmode { c:5.6 c:3.7.8 c:3.6.13 }
+@end lilypond
+Chord steps can be altered by suffixing a @code{-} or @code{+} sign
+to the number
+@lilypond[quote,verbatim,fragment]
+\chordmode { c:7+ c:5+.3- c:3-.5-.7- }
+@end lilypond
+Removals are specified similarly and are introduced by a caret. They
+must come after the additions
+@lilypond[quote,verbatim,fragment]
+\chordmode { c^3 c:7^5 c:9^3.5 }
+@end lilypond
-@cindex lyrics
-@cindex @code{\lyricmode}
-@cindex punctuation
+Modifiers can be used to change pitches. The following modifiers are
+supported
-Lyrics are entered in a special input mode. This mode is introduced
-by the keyword @code{\lyricmode}, or by using @code{addlyrics} or
-@code{lyricsto}. In this mode you can enter lyrics,
-with punctuation and accents, and the input @code{d} is not parsed as
-a pitch, but rather as a one letter syllable. Syllables are entered
-like notes, but with pitches replaced by text. For example,
-@example
-\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @}
-@end example
+@table @code
+@item m
+The minor chord. This modifier lowers the 3rd and (if present) the 7th step.
+@item dim
+The diminished chord. This modifier lowers the 3rd, 5th and (if present)
+the 7th step.
-A word lyrics mode begins with an alphabetic character, and ends with
-any space or digit. The following characters can be any character
-that is not a digit or white space. One important consequence of this
-is that a word can end with @code{@}}. The following example is
-usually a mistake in the input file. The syllable includes a @code{@}}, so the
-opening brace is not balanced
-@example
-\lyricmode @{ twinkle@}
-@end example
+@item aug
+The augmented chord. This modifier raises the 5th step.
-@cindex @code{\property}, in @code{\lyricmode}
-@noindent
-Similarly, a period which follows an alphabetic sequence is included in
-the resulting string. As a consequence, spaces must be inserted around
-property commands
-@example
-\override Score . LyricText #'font-shape = #'italic
-@end example
+@item maj
+The major 7th chord. This modifier raises the 7th step if present.
-@cindex @code{_}
-@cindex spaces, in lyrics
-@cindex quotes, in lyrics
+@item sus
+The suspended 4th or 2nd. This modifier removes the 3rd
+step. Append either @code{2} or @code{4} to add the 2nd or 4th step to
+the chord.
+@end table
-Any @code{_} character that appears in an unquoted word is converted
-to a space. This provides a mechanism for introducing spaces into words
-without using quotes. Quoted words can also be used in Lyrics mode to
-specify words that cannot be written with the above rules. The
-following example incorporates double quotes
+Modifiers can be mixed with additions
+@lilypond[quote,verbatim,fragment]
+ \chordmode { c:sus4 c:7sus4 c:dim7 c:m6 }
+@end lilypond
-@example
-\lyricmode @{ He said: "\"Let" my peo ple "go\"" @}
-@end example
+@cindex modifiers, in chords.
+@cindex @code{aug}
+@cindex @code{dim}
+@cindex @code{maj}
+@cindex @code{sus}
+@cindex @code{m}
-This example is slightly academic, since it gives better looking
-results using single quotes, @code{``} and @code{''}
-@example
-\lyricmode @{ He said: ``Let my peo ple go'' @}
-@end example
+Since an unaltered 11 does not sound good when combined with an
+unaltered 3, the 11 is removed in this case (unless it is added
+explicitly)
+@lilypond[quote,raggedright,fragment,verbatim]
+\chordmode { c:13 c:13.11 c:m13 }
+@end lilypond
+@cindex @code{/}
-The full definition of a word start in Lyrics mode is somewhat more
-complex.
+An inversion (putting one pitch of the chord on the bottom), as well
+as bass notes, can be specified by appending
+@code{/}@var{pitch} to the chord
+@lilypond[quote,raggedright,fragment,verbatim]
+\chordmode { c1 c/g c/f }
+@end lilypond
+@cindex @code{/+}
-A word in Lyrics mode begins with: an alphabetic character, @code{_},
-@code{?}, @code{!}, @code{:}, @code{'}, the control characters @code{^A}
-through @code{^F}, @code{^Q} through @code{^W}, @code{^Y}, @code{^^},
-any 8-bit character with ASCII code over 127, or a two-character
-combination of a backslash followed by one of @code{`}, @code{'},
-@code{"}, or @code{^}.
+A bass note can be added instead transposed out of the chord,
+by using @code{/+}@var{pitch}.
+@lilypond[quote,raggedright,fragment,verbatim]
+\chordmode { c1 c/+g c/+f }
+@end lilypond
+Chords is a mode similar to @code{\lyricmode}, etc. Most
+of the commands continue to work, for example, @code{r} and
+@code{\skip} can be used to insert rests and spaces, and property
+commands may be used to change various settings.
-@seealso
-Program reference: events @internalsref{LyricEvent}, and
-@internalsref{LyricText}.
@refbugs
-The definition of lyrics mode is too complex.
+Each step can only be present in a chord once. The following
+simply produces the augmented chord, since @code{5+} is interpreted
+last
+@cindex clusters
+@lilypond[quote,raggedright,verbatim,fragment]
+\chordmode { c:5.5-.5+ }
+@end lilypond
-@node Hyphens and extenders
-@subsection Hyphens and extenders
-@cindex hyphens
+@node Printing chord names
+@subsection Printing chord names
-Centered hyphens are entered as `@code{-}@code{-}' between syllables.
-The hyphen will have variable length depending on the space between
-the syllables and it will be centered between the syllables.
+@cindex printing chord names
+@cindex chord names
+@cindex chords
-@cindex melisma
-@cindex extender
+For displaying printed chord names, use the @internalsref{ChordNames} context.
+The chords may be entered either using the notation
+described above, or directly using @code{<} and @code{>}
-When a lyric is sung over many notes (this is called a melisma), this is
-indicated with a horizontal line centered between a syllable and the
-next one. Such a line is called an extender line, and it is entered as
-@code{__}.
+@lilypond[quote,verbatim,raggedright]
+harmonies = {
+ \chordmode {a1 b c} <d' f' a'> <e' g' b'>
+}
+<<
+ \context ChordNames \harmonies
+ \context Staff \harmonies
+>>
+@end lilypond
-@ignore
-FIXME: check that this compiles and displays correctly. I don't want
-to commit this part blindly.
-
-In tighly engraved music, hyphens can be removed. In some languages
-(e.g. German and Hungarian), hyphens should not disappear, since
-spelling depends on hyphenation. For that purpose, hyphens can be
-forced to remain by overriding @code{minimum-length} of
-the @code{LyricHyphen} grob.
-
-(code from 2.2)
-\score {
-<< \notes \new Staff \relative c'' { \time 1/4 c16[ c c c]
-\time 1/4
-c16[ c c c]
-\time 1/4
-c16[ c c c]
+You can make the chord changes stand out by setting
+@internalsref{ChordNames}.@code{chordChanges} to true. This will only
+display chord names when there is a change in the chords scheme and at
+the start of a new line
+@lilypond[quote,verbatim,raggedright]
+harmonies = \chordmode {
+ c1:m c:m \break c:m c:m d
}
- \lyrics \new Lyrics \with {
- % Otherwise lyrics are so far apart that hyphens don't disappear
- \override SeparationItem #'padding = #0.0
- }{ bla -- bla -- bla -- bla --
- bla -- bla -- bla -- bla --
-
- \override LyricHyphen #'minimum-length = #0.7
- \override LyricHyphen #'spacing-procedure =
- #Hyphen_spanner::set_spacing_rods
+<<
+ \context ChordNames {
+ \set chordChanges = ##t
+ \harmonies }
+ \context Staff \transpose c c' \harmonies
+>>
+@end lilypond
- bla -- bla -- bla -- bla
- }>>
- \paper {
- indent = 0.0 \cm
- linewidth = 3.4 \cm
+The previous examples all show chords over a staff. This is not
+necessary. Chords may also be printed separately. It may be necessary
+to add @internalsref{Volta_engraver} and @internalsref{Bar_engraver}
+for showing repeats.
- \context {
- \StaffContext \remove "Time_signature_engraver"
- }
-
- }
-
+@lilypond[raggedright,verbatim]
+\new ChordNames \with {
+ \override BarLine #'bar-size = #4
+ voltaOnThisStaff = ##t
+ \consists Bar_engraver
+ \consists "Volta_engraver"
}
-@end ignore
-
-
-@seealso
-
-Program reference: @internalsref{HyphenEvent},
-@internalsref{ExtenderEvent}, @internalsref{LyricHyphen}, and
-@internalsref{LyricExtender}
-
-
-
-@node The Lyrics context
-@subsection The Lyrics context
+\repeat volta 2 \chordmode {
+ f1:maj f:7 bes:7
+ c:maj
+} \alternative {
+ es e
+}
+@end lilypond
-Lyrics are printed by interpreting them in a @internalsref{Lyrics} context
-@example
-\context Lyrics \lyricmode @dots{}
-@end example
+The default chord name layout is a system for Jazz music, proposed by
+Klaus Ignatzek (see @ref{Literature list}). It can be tuned through the
+following properties
-@cindex automatic syllable durations
-@cindex @code{\lyricsto}
-@cindex lyrics and melodies
+@table @code
+@cindex @code{chordNameExceptions}
+@item chordNameExceptions
+This is a list that contains the chords that have special formatting.
-This will place the lyrics according to the durations that were
-entered. The lyrics can also be aligned under a given melody
-automatically. In this case, it is no longer necessary to enter the
-correct duration for each syllable. This is achieved by combining the
-melody and the lyrics with the @code{\lyricsto} expression
+The exceptions list should be encoded as
@example
-\lyricsto @var{name} \new Lyrics @dots{}
+@{ <c f g bes>1 \markup @{ \super "7" "wahh" @} @}
@end example
-This aligns the lyrics to the
-notes of the @internalsref{Voice} context called @var{name}, which has
-to exist. Therefore, normally the @code{Voice} is specified first, and
-then the lyrics are specified with @code{\lyricsto}. The command
-@code{\lyricsto} switches to @code{\lyricmode} mode automatically, so the
-@code{\lyricmode} keyword may be omitted.
-
-For different or more complex orderings, the best way is to setup the
-hierarchy of staves and lyrics first, e.g.,
+To get this information into @code{chordNameExceptions} takes a little
+manoeuvring. The following code transforms @code{chExceptionMusic}
+(which is a sequential music) into a list of exceptions.
@example
-\context ChoirStaff <<
- \context Lyrics = sopranoLyrics @{ s1 @}
- \context Voice = soprano @{ @emph{music} @}
- \context Lyrics = tenorLyrics @{ s1 @}
- \context Voice = tenor @{ @emph{music} @}
->>
+(sequential-music-to-chord-exceptions chExceptionMusic #t)
@end example
-and then combine the appropriate melodies and lyric lines
+Then,
@example
-\lyricsto "soprano" \context Lyrics = sopranoLyrics
- @emph{the lyrics}
+(append
+ (sequential-music-to-chord-exceptions chExceptionMusic #t)
+ ignatzekExceptions)
@end example
+adds the new exceptions to the default ones, which are defined in
+@file{ly/@/chord@/-modifier@/-init@/.ly}.
-@noindent
-The final input would resemble
-
-@example
-<<\context ChoirStaff << @emph{setup the music} >>
- \lyricsto "soprano" @emph{etc}
- \lyricsto "alto" @emph{etc}
- @emph{etc}
->>
-@end example
+For an example of tuning this property, see also
+@inputfileref{input/@/regression,chord@/-name@/-exceptions@/.ly}.
+@cindex exceptions, chord names.
-The @code{\lyricsto} command detects melismata: it only puts one
-syllable under a tied or slurred group of notes. If you want to force
-an unslurred group of notes to be a melisma, insert @code{\melisma}
-after the first note of the group, and @code{\melismaEnd} after the
-last one, e.g.,
+@cindex @code{majorSevenSymbol}
+@item majorSevenSymbol
+This property contains the markup object used for the 7th step, when
+it is major. Predefined options are @code{whiteTriangleMarkup} and
+@code{blackTriangleMarkup}. See
+@inputfileref{input/@/regression,chord@/-name@/-major7@/.ly} for an example.
-@lilypond[quote,relative=2,raggedright,fragment,verbatim]
-<<
- \context Voice = "lala" {
- \time 3/4
- f4 g8
- \melisma
- f e f
- \melismaEnd
- e2
- }
- \lyricsto "lala" \new Lyrics {
- la di __ daah
- }
->>
+@cindex @code{chordNameSeparator}
+@item chordNameSeparator
+Different parts of a chord name are normally separated by a
+slash. By setting @code{chordNameSeparator}, you can specify other
+separators, e.g.,
+@lilypond[quote,raggedright,fragment,verbatim]
+\context ChordNames \chordmode {
+ c:7sus4
+ \set chordNameSeparator
+ = \markup { \typewriter "|" }
+ c:7sus4
+}
@end lilypond
-In addition, notes are considered a melisma if they are manually
-beamed, and automatic beaming (see @ref{Setting automatic beam
-behavior}) is switched off.
+@cindex @code{chordRootNamer}
+@item chordRootNamer
+The root of a chord is usually printed as a letter with an optional
+alteration. The transformation from pitch to letter is done by this
+function. Special note names (for example, the German ``H'' for a
+B-chord) can be produced by storing a new function in this property.
-@ignore
+@cindex @code{chordNoteNamer}
+@item chordNoteNamer
+The default is to print single pitch, e.g., the bass note, using the
+@code{chordRootNamer}. The @code{chordNoteNamer} property can be set
+to a specialized function to change this behavior. For example, the
+base can be printed in lower case.
-@c nonformation:
+@end table
-The criteria for deciding melismata can
-be tuned with the property @code{melismaBusyProperties}. See
-@internalsref{Melisma_translator} in the program reference for more
-information.
+The predefined variables @code{\germanChords},
+@code{\semiGermanChords} set these variables. The effect is
+demonstrated here,
-@end ignore
+@lilypondfile[raggedright]{chord-names-german.ly}
-Lyrics can also be entered without @code{\lyricsto}. In this case the
-duration of each syllable must be entered explicitly, for example,
+There are also two other chord name schemes implemented: an alternate
+Jazz chord notation, and a systematic scheme called Banter chords. The
+alternate Jazz notation is also shown on the chart in @ref{Chord name
+chart}. Turning on these styles is described in the input file
+@inputfileref{input/@/test,chord@/-names@/-jazz@/.ly}.
-@example
-play2 the4 game2.
-sink2 or4 swim2.
-@end example
+@cindex Banter
+@cindex jazz chords
+@cindex chords, jazz
-The alignment to a melody can be specified with the
-@code{associatedVoice} property,
-@example
-\set associatedVoice = #"lala"
-@end example
+@refcommands
-@noindent
-The value of the property (here: @code{"lala"}) should be the name of
-a @internalsref{Voice} context. Without this setting, extender lines
-will not be formatted properly.
+@cindex @code{\germanChords}
+@code{\germanChords},
+@cindex @code{\semiGermanChords}
+@code{\semiGermanChords}.
-Here is an example demonstrating manual lyric durations,
-@lilypond[relative=1,raggedright,verbatim,fragment,quote]
-<< \context Voice = melody {
- \time 3/4
- c2 e4 g2.
- }
- \new Lyrics \lyricmode {
- \set associatedVoice = #"melody"
- play2 the4 game2.
- } >>
-@end lilypond
-@cindex SATB
-@cindex choral score
-A complete example of a SATB score setup is in section
-@ref{Vocal ensembles}.
+@seealso
+Examples: @inputfileref{input/@/regression,chord@/-name@/-major7@/.ly},
+@inputfileref{input/@/regression,chord@/-name@/-exceptions@/.ly},
+@inputfileref{input/@/test,chord@/-names@/-jazz@/.ly}.
-@refcommands
-@code{\melisma}, @code{\melismaEnd}
-@cindex @code{\melismaEnd}
-@cindex @code{\melisma}
+Init files: @file{scm/@/chords@/-ignatzek@/.scm}, and
+@file{scm/@/chord@/-entry@/.scm}.
-@seealso
-Program reference: @internalsref{LyricCombineMusic},
-@internalsref{Lyrics}, @internalsref{Melisma_translator}.
+@refbugs
+Chord names are determined solely from the list of pitches. Chord
+inversions are not identified, and neither are added bass notes. This
+may result in strange chord names when chords are entered with the
+@code{< .. >} syntax.
-@inputfileref{input/@/regression,lyric@/-combine@/-new@/.ly}.
-@c TODO: make separate section for melismata
-@refbugs
+@node Vocal music
+@section Vocal music
-Melismata are not detected automatically, and extender lines must be
-inserted by hand.
+There are three different issues when printing vocal music
+@itemize @bullet
+@item
+Song texts must be entered as text, not notes. For example, the
+input@tie{}@code{d} should be interpreted as a one letter syllable, not the
+note@tie{}D.
-@c TODO: document \new Staff << Voice \lyricsto >> bug
+@item
+Song texts must be printed as text, not as notes.
-@node Flexibility in alignment
-@subsection Flexibility in alignment
+@item
+Song texts must be aligned with the notes of their melody.
+@end itemize
+The simplest solution for printing music uses the @code{\addlyrics}
+function to solve all these problems at once. However, these
+three functions can be controlled separately, which is necessary
+for complex vocal music.
-Often, different stanzas of one song are put to one melody in slightly
-differing ways. Such variations can still be captured with
-@code{\lyricsto}.
-One possibility is that the text has a melisma in one stanza, but
-multiple syllables in another one. One solution is to make the faster
-voice ignore the melisma. This is done by setting
-@code{ignoreMelismata} in the Lyrics context.
+@menu
+* Setting simple songs::
+* Entering lyrics::
+* Hyphens and extenders::
+* The Lyrics context::
+* Flexibility in alignment::
+* More stanzas::
+* Ambitus::
+* Other vocal issues::
+@end menu
-There has one tricky aspect. The setting for @code{ignoreMelismata}
-must be set one syllable @emph{before} the non-melismatic syllable
-in the text, as shown here,
+@node Setting simple songs
+@subsection Setting simple songs
-@lilypond[verbatim,raggedright,quote]
-<<
- \relative \context Voice = "lahlah" {
- \set Staff.autoBeaming = ##f
- c4
- \slurDotted
- f8.[( g16])
- a4
- }
- \new Lyrics \lyricsto "lahlah" {
- more slow -- ly
- }
- \new Lyrics \lyricsto "lahlah" {
- \set ignoreMelismata = ##t % applies to "fas"
- go fas -- ter
- \unset ignoreMelismata
- still
- }
->>
-@end lilypond
+The easiest way to add lyrics to a melody is to append
+@cindex \addlyrics
+@example
+\addlyrics @{ @var{the lyrics} @}
+@end example
+@noindent
+to a melody. Here is an example,
-The @code{ignoreMelismata} applies to the syllable ``fas'', so it
-should be entered before ``go''.
+@lilypond[raggedright,verbatim,fragment,quote]
+\time 3/4
+\relative { c2 e4 g2. }
+\addlyrics { play the game }
+@end lilypond
-The reverse is also possible: making a lyric line slower than the
-standard. This can be achieved by insert @code{\skip}s into the
-lyrics. For every @code{\skip}, the text will be delayed another note.
-For example,
+More stanzas can be added by adding more
+@code{\addlyrics} sections
-@lilypond[verbatim,raggedright,quote]
-\relative { c c g' }
-\addlyrics {
- twin -- \skip 4
- kle
-}
+@lilypond[raggedright,verbatim,fragment,quote]
+\time 3/4
+\relative { c2 e4 g2. }
+\addlyrics { play the game }
+\addlyrics { speel het spel }
+\addlyrics { joue le jeu }
@end lilypond
-More complex variations in text underlay are possible. It is possible
-to switch the melody for a line of lyrics during the text. This is
-done by setting the @code{associatedVoice} property. In the example
+@c TODO - this isn't such a great place for this note, but I can't
+@c find a better place without rearranging a lot of lyric stuff.
+@c It's yet another thing to look at post-3.0.
-@lilypond[raggedright,quote]
-<<
- \relative \context Voice = "lahlah" {
- \set Staff.autoBeaming = ##f
- c4
- <<
- \context Voice = alternative {
- \voiceOne
- \times 2/3 {
- % show associations clearly.
- \override NoteColumn #'force-hshift = #-3
- f8 f g
- }
- }
- {
- \voiceTwo
- f8.[ g16]
- \oneVoice
- } >>
- a8( b) c
- }
- \new Lyrics \lyricsto "lahlah" {
- Ju -- ras -- sic Park
- }
- \new Lyrics \lyricsto "lahlah" {
- % Tricky: need to set associatedVoice
- % one syllable too soon!
- \set associatedVoice = alternative % applies to "ran"
- Ty --
- ran --
- no --
- \set associatedVoice = lahlah % applies to "rus"
- sau -- rus Rex
- } >>
-@end lilypond
+The @code{\addlyrics} command is actually just a convienient way
+to write a more complicated LilyPond structure that sets up the
+lyrics. You should use @code{\addlyrics} unless you need to do
+fancy things, in which case you should investigate
+@code{\lyricsto} or @code{\lyricmode}.
+
+@example
+@{ MUSIC @}
+\addlyrics @{ LYRICS @}
+@end example
@noindent
-the text for the first stanza is set to a melody called ``lahlah'',
+is the same as
@example
-\new Lyrics \lyricsto "lahlah" @{
- Ju -- ras -- sic Park
-@}
+\context Voice = blah @{ music @}
+\lyricsto "blah" \new lyrics @{ LYRICS @}
@end example
+@refbugs
+
+@code{\addlyrics} cannot handle polyphony.
-The second stanza initially is set to the @code{lahlah} context, but
-for the syllable ``ran'', it switches to a different melody.
-This is achieved with
+
+@node Entering lyrics
+@subsection Entering lyrics
+
+
+@cindex lyrics
+@cindex @code{\lyricmode}
+@cindex punctuation
+
+Lyrics are entered in a special input mode. This mode is introduced
+by the keyword @code{\lyricmode}, or by using @code{addlyrics} or
+@code{lyricsto}. In this mode you can enter lyrics,
+with punctuation and accents, and the input @code{d} is not parsed as
+a pitch, but rather as a one letter syllable. Syllables are entered
+like notes, but with pitches replaced by text. For example,
@example
-\set associatedVoice = alternative
+\lyricmode @{ Twin-4 kle4 twin- kle litt- le star2 @}
@end example
-@noindent
-Here, @code{alternative} is the name of the @code{Voice} context
-containing the triplet.
-
-Again, the command must be one syllable too early, before ``Ty'' in
-this case.
+A word lyrics mode begins with an alphabetic character, and ends with
+any space or digit. The following characters can be any character
+that is not a digit or white space. One important consequence of this
+is that a word can end with @code{@}}. The following example is
+usually a mistake in the input file. The syllable includes a @code{@}}, so the
+opening brace is not balanced
@example
-\new Lyrics \lyricsto "lahlah" @{
- \set associatedVoice = alternative % applies to "ran"
- Ty --
- ran --
- no --
- \set associatedVoice = lahlah % applies to "rus"
- sau -- rus Rex
-@}
+\lyricmode @{ twinkle@}
@end example
+@cindex @code{\property}, in @code{\lyricmode}
@noindent
-The underlay is switched back to the starting situation by assigning
-@code{lahlah} to @code{associatedVoice}.
+Similarly, a period which follows an alphabetic sequence is included in
+the resulting string. As a consequence, spaces must be inserted around
+property commands
+@example
+\override Score . LyricText #'font-shape = #'italic
+@end example
+@cindex @code{_}
+@cindex spaces, in lyrics
+@cindex quotes, in lyrics
+Any @code{_} character that appears in an unquoted word is converted
+to a space. This provides a mechanism for introducing spaces into words
+without using quotes. Quoted words can also be used in Lyrics mode to
+specify words that cannot be written with the above rules. The
+following example incorporates double quotes
+@example
+\lyricmode @{ He said: "\"Let" my peo ple "go\"" @}
+@end example
-@node More stanzas
-@subsection More stanzas
+This example is slightly academic, since it gives better looking
+results using single quotes, @code{``} and @code{''}
+@example
+\lyricmode @{ He said: ``Let my peo ple go'' @}
+@end example
-@cindex phrasing, in lyrics
+The full definition of a word start in Lyrics mode is somewhat more
+complex.
-@cindex stanza number
-@cindex singer's names
-@cindex name of singer
+A word in Lyrics mode begins with: an alphabetic character, @code{_},
+@code{?}, @code{!}, @code{:}, @code{'}, the control characters @code{^A}
+through @code{^F}, @code{^Q} through @code{^W}, @code{^Y}, @code{^^},
+any 8-bit character with ASCII code over 127, or a two-character
+combination of a backslash followed by one of @code{`}, @code{'},
+@code{"}, or @code{^}.
-Stanza numbers can be added by setting @code{stanza}, e.g.,
-@lilypond[quote,raggedright,verbatim,relative=2,fragment]
-\new Voice {
- \time 3/4 g2 e4 a2 f4 g2.
-} \addlyrics {
- \set stanza = "1. "
- Hi, my name is Bert.
-} \addlyrics {
- \set stanza = "2. "
- Oh, che -- ri, je t'aime
-}
-@end lilypond
-
-These numbers are put just before the start of first syllable.
-Names of singers can also be added. They are printed at the start of
-the line, just like instrument names. They are created by setting
-@code{vocalName}. A short version may be entered as @code{vocNam}.
+@seealso
+Program reference: events @internalsref{LyricEvent}, and
+@internalsref{LyricText}.
-@lilypond[fragment,raggedright,quote,verbatim,relative=2]
-\new Voice {
- \time 3/4 g2 e4 a2 f4 g2.
-} \addlyrics {
- \set vocalName = "Bert "
- Hi, my name is Bert.
-} \addlyrics {
- \set vocalName = "Ernie "
- Oh, che -- ri, je t'aime
-}
-@end lilypond
+@refbugs
-@seealso
+The definition of lyrics mode is too complex.
-Program reference: Layout objects @internalsref{LyricText} and
-@internalsref{VocalName}. Music expressions
-@internalsref{LyricEvent}.
+@node Hyphens and extenders
+@subsection Hyphens and extenders
+@cindex hyphens
+Centered hyphens are entered as `@code{-}@code{-}' between syllables.
+The hyphen will have variable length depending on the space between
+the syllables and it will be centered between the syllables.
-@node Ambitus
-@subsection Ambitus
-@cindex ambitus
+@cindex melisma
+@cindex extender
-The term @emph{ambitus} denotes a range of pitches for a given voice
-in a part of music. It may also denote the pitch range that a musical
-instrument is capable of playing. Ambits are printed on vocal parts,
-so performers can easily determine it meets their capabilities.
+When a lyric is sung over many notes (this is called a melisma), this is
+indicated with a horizontal line centered between a syllable and the
+next one. Such a line is called an extender line, and it is entered as
+@code{__}.
-Ambits are denoted at the beginning of a piece near the initial clef.
-The range is graphically specified by two note heads that represent the
-minimum and maximum pitch. To print such ambits, add the
-@internalsref{Ambitus_engraver} to the @internalsref{Voice} context,
-for example,
+@ignore
+FIXME: check that this compiles and displays correctly. I don't want
+to commit this part blindly.
-@example
-\layout @{
- \context @{
- \Voice
- \consists Ambitus_engraver
- @}
-@}
-@end example
+In tighly engraved music, hyphens can be removed. In some languages
+(e.g. German and Hungarian), hyphens should not disappear, since
+spelling depends on hyphenation. For that purpose, hyphens can be
+forced to remain by overriding @code{minimum-length} of
+the @code{LyricHyphen} grob.
-This results in the following output
+(code from 2.2)
+\score {
+<< \notes \new Staff \relative c'' { \time 1/4 c16[ c c c]
+\time 1/4
+c16[ c c c]
+\time 1/4
+c16[ c c c]
-@lilypond[quote,raggedright]
-\layout {
- \context {
- \Staff
- \consists Ambitus_engraver
- }
}
+ \lyrics \new Lyrics \with {
+ % Otherwise lyrics are so far apart that hyphens don't disappear
+ \override SeparationItem #'padding = #0.0
+ }{ bla -- bla -- bla -- bla --
+ bla -- bla -- bla -- bla --
-\relative \new Staff {
- as'' c e2 cis,2
-}
-@end lilypond
+ \override LyricHyphen #'minimum-length = #0.7
+ \override LyricHyphen #'spacing-procedure =
+ #Hyphen_spanner::set_spacing_rods
-If you have multiple voices in a single staff and you want a single
-ambitus per staff rather than per each voice, add the
-@internalsref{Ambitus_engraver} to the @internalsref{Staff} context
-rather than to the @internalsref{Voice} context. Here is an example,
+ bla -- bla -- bla -- bla
+ }>>
+ \paper {
+ indent = 0.0 \cm
+ linewidth = 3.4 \cm
-@lilypond[verbatim,raggedright,quote]
-\new Staff \with {
- \consists "Ambitus_engraver"
+ \context {
+ \StaffContext \remove "Time_signature_engraver"
+ }
+
+ }
+
}
-<<
- \new Voice \with {
- \remove "Ambitus_engraver"
- } \relative c'' {
- \override Ambitus #'X-offset-callbacks
- = #(list (lambda (grob axis) -1.0))
- \voiceOne
- c4 a d e f2
- }
- \new Voice \with {
- \remove "Ambitus_engraver"
- } \relative c' {
- \voiceTwo
- es4 f g as b2
- }
->>
-@end lilypond
-
-@noindent
-This example uses one advanced feature,
-
-@example
-\override Ambitus #'X-offset-callbacks
- = #(list (lambda (grob axis) -1.0))
-@end example
+@end ignore
-@noindent
-This code moves the ambitus to the left. The same effect could have
-been achieved with @code{extra-offset}, but then the formatting system
-would not reserve space for the moved object.
@seealso
-Program reference: @internalsref{Ambitus},
-@internalsref{AmbitusLine}, @internalsref{AmbitusNoteHead},
-@internalsref{AmbitusAccidental}.
+Program reference: @internalsref{HyphenEvent},
+@internalsref{ExtenderEvent}, @internalsref{LyricHyphen}, and
+@internalsref{LyricExtender}
-Examples: @inputfileref{input/@/regression,ambitus@/.ly}.
-@refbugs
-There is no collision handling in the case of multiple per-voice
-ambitus.
+@node The Lyrics context
+@subsection The Lyrics context
-@node Other vocal issues
-@subsection Other vocal issue
-@ignore
-yeah, I'm giving up somewhat by stuffing a bunch of things in
-here. But at least they're in the manual now; it's easier to
-move them around in the manual once they're already here.
+Lyrics are printed by interpreting them in a @internalsref{Lyrics} context
+@example
+\context Lyrics \lyricmode @dots{}
+@end example
-Besides, if users complain about everything stuffed in here, I
-can ask them for specific instructions about where to move these
-examples, and that might get them more involved in the docs. -gp
-@end ignore
+@cindex automatic syllable durations
+@cindex @code{\lyricsto}
+@cindex lyrics and melodies
-You can display alternate (or divisi) lyrics by naming voice
-contexts and attaching lyrics to those specific contexts.
+This will place the lyrics according to the durations that were
+entered. The lyrics can also be aligned under a given melody
+automatically. In this case, it is no longer necessary to enter the
+correct duration for each syllable. This is achieved by combining the
+melody and the lyrics with the @code{\lyricsto} expression
+@example
+\lyricsto @var{name} \new Lyrics @dots{}
+@end example
-@lilypond[verbatim,raggedright,quote]
-\score{ <<
- \context Voice = "melody" {
- \relative c' {
- c4
- <<
- { \voiceOne c8 e }
- \context Voice = splitpart { \voiceTwo c4 }
- >>
- \oneVoice c4 c | c
- }
- }
- \new Lyrics \lyricsto "melody" { we shall not o- ver- come }
- \new Lyrics \lyricsto "splitpart" { shall }
->> }
-@end lilypond
+This aligns the lyrics to the
+notes of the @internalsref{Voice} context called @var{name}, which has
+to exist. Therefore, normally the @code{Voice} is specified first, and
+then the lyrics are specified with @code{\lyricsto}. The command
+@code{\lyricsto} switches to @code{\lyricmode} mode automatically, so the
+@code{\lyricmode} keyword may be omitted.
+For different or more complex orderings, the best way is to setup the
+hierarchy of staves and lyrics first, e.g.,
+@example
+\context ChoirStaff <<
+ \context Lyrics = sopranoLyrics @{ s1 @}
+ \context Voice = soprano @{ @emph{music} @}
+ \context Lyrics = tenorLyrics @{ s1 @}
+ \context Voice = tenor @{ @emph{music} @}
+>>
+@end example
+and then combine the appropriate melodies and lyric lines
+@example
+\lyricsto "soprano" \context Lyrics = sopranoLyrics
+ @emph{the lyrics}
+@end example
-You can use this trick to display different lyrics for a repeated
-section.
+@noindent
+The final input would resemble
-@lilypond[verbatim,raggedright,quote]
-\score{ <<
- \context Voice = melody \relative c' {
- c2 e | g e | c1 |
- \context Voice = verse \repeat volta 2 {c4 d e f | g1 | }
- a2 b | c1}
- \lyricsto melody \context Lyrics = mainlyrics \lyricmode {
- do mi sol mi do
- la si do }
- \lyricsto verse \context Lyrics = mainlyrics \lyricmode {
- do re mi fa sol }
- \lyricsto verse \context Lyrics = repeatlyrics \lyricmode {
- dodo rere mimi fafa solsol }
+@example
+<<\context ChoirStaff << @emph{setup the music} >>
+ \lyricsto "soprano" @emph{etc}
+ \lyricsto "alto" @emph{etc}
+ @emph{etc}
>>
-}
-@end lilypond
-
+@end example
-@node Other instrument specific notation
-@section Other instrument specific notation
-This section includes extra information for writing string music, and may
-include extra information for other instruments in the future.
+The @code{\lyricsto} command detects melismata: it only puts one
+syllable under a tied or slurred group of notes. If you want to force
+an unslurred group of notes to be a melisma, insert @code{\melisma}
+after the first note of the group, and @code{\melismaEnd} after the
+last one, e.g.,
-@menu
-* Harmonic notes::
-@end menu
-
-@node Harmonic notes
-@subsection Harmonic notes
-
-@cindex artificial harmonics
-@cindex harmonics
-
-Artificial harmonics are notated with a different notehead style. They
-are entered by marking the harmonic pitch with @code{\harmonic}.
-
-@lilypond[raggedright,verbatim,quote,fragment]
-<c' g'\harmonic>4
+@lilypond[quote,relative=2,raggedright,fragment,verbatim]
+<<
+ \context Voice = "lala" {
+ \time 3/4
+ f4 g8
+ \melisma
+ f e f
+ \melismaEnd
+ e2
+ }
+ \lyricsto "lala" \new Lyrics {
+ la di __ daah
+ }
+>>
@end lilypond
+In addition, notes are considered a melisma if they are manually
+beamed, and automatic beaming (see @ref{Setting automatic beam
+behavior}) is switched off.
-@node Tablatures
-@section Tablatures
+@ignore
-@cindex tablature
-@cindex guitar tablature
+@c nonformation:
-Tablature notation is used for notating music for plucked string
-instruments. Pitches are not denoted with note heads, but by
-indicating on which string and fret a note must be played. LilyPond
-offers limited support for tablature.
+The criteria for deciding melismata can
+be tuned with the property @code{melismaBusyProperties}. See
+@internalsref{Melisma_translator} in the program reference for more
+information.
-@menu
-* Tablatures basic::
-* Non-guitar tablatures::
-@end menu
+@end ignore
-@node Tablatures basic
-@subsection Tablatures basic
-@cindex Tablatures basic
+Lyrics can also be entered without @code{\lyricsto}. In this case the
+duration of each syllable must be entered explicitly, for example,
-The string number associated to a note is given as a backslash
-followed by a number, e.g., @code{c4\3} for a C quarter on the third
-string. By default, string 1 is the highest one, and the tuning
-defaults to the standard guitar tuning (with 6 strings). The notes
-are printed as tablature, by using @internalsref{TabStaff} and
-@internalsref{TabVoice} contexts
+@example
+play2 the4 game2.
+sink2 or4 swim2.
+@end example
-@lilypond[quote,raggedright,fragment,verbatim]
-\context TabStaff {
- a,4\5 c'\2 a\3 e'\1
- e\4 c'\2 a\3 e'\1
-}
-@end lilypond
+The alignment to a melody can be specified with the
+@code{associatedVoice} property,
-@cindex @code{minimumFret}
-@cindex fret
+@example
+\set associatedVoice = #"lala"
+@end example
-When no string is specified, the first string that does not give a
-fret number less than @code{minimumFret} is selected. The default
-value for @code{minimumFret} is 0
+@noindent
+The value of the property (here: @code{"lala"}) should be the name of
+a @internalsref{Voice} context. Without this setting, extender lines
+will not be formatted properly.
+Here is an example demonstrating manual lyric durations,
-@example
-e16 fis gis a b4
-\set TabStaff.minimumFret = #8
-e16 fis gis a b4
-@end example
-@lilypond[quote,raggedright]
-frag = {
- \key e \major
- e16 fis gis a b4
- \set TabStaff.minimumFret = #8
- e16 fis gis a b4
-}
- \context StaffGroup <<
- \context Staff { \clef "G_8" \frag }
- \context TabStaff { \frag }
- >>
+@lilypond[relative=1,raggedright,verbatim,fragment,quote]
+<< \context Voice = melody {
+ \time 3/4
+ c2 e4 g2.
+ }
+ \new Lyrics \lyricmode {
+ \set associatedVoice = #"melody"
+ play2 the4 game2.
+ } >>
@end lilypond
-@seealso
+@cindex SATB
+@cindex choral score
-Program reference: @internalsref{TabStaff}, @internalsref{TabVoice}, and
-@internalsref{StringNumberEvent}.
+A complete example of a SATB score setup is in section
+@ref{Vocal ensembles}.
-@refbugs
-Chords are not handled in a special way, and hence the automatic
-string selector may easily select the same string to two notes in a
-chord.
+@refcommands
+@code{\melisma}, @code{\melismaEnd}
+@cindex @code{\melismaEnd}
+@cindex @code{\melisma}
-@node Non-guitar tablatures
-@subsection Non-guitar tablatures
-@cindex Non-guitar tablatures
+@seealso
-You can change the number of strings, by setting the number of lines
-in the @internalsref{TabStaff}.
+Program reference: @internalsref{LyricCombineMusic},
+@internalsref{Lyrics}, @internalsref{Melisma_translator}.
-You can change the tuning of the strings. A string tuning is given as
-a Scheme list with one integer number for each string, the number
-being the pitch (measured in semitones relative to middle C) of an
-open string. The numbers specified for @code{stringTuning} are the
-numbers of semitones to subtract or add, starting the specified pitch
-by default middle C, in string order. In the next example,
-@code{stringTunings} is set for the pitches e, a, d, and g
-@lilypond[quote,raggedright,fragment,verbatim]
-\context TabStaff <<
- \set TabStaff.stringTunings = #'(-5 -10 -15 -20)
- {
- a,4 c' a e' e c' a e'
- }
->>
-@end lilypond
+@inputfileref{input/@/regression,lyric@/-combine@/-new@/.ly}.
+@c TODO: make separate section for melismata
@refbugs
-No guitar special effects have been implemented.
-
-@seealso
-
-Program reference: @internalsref{Tab_note_heads_engraver}.
+Melismata are not detected automatically, and extender lines must be
+inserted by hand.
-@node Popular music
-@section Popular music
+@c TODO: document \new Staff << Voice \lyricsto >> bug
-This section discusses issues that arise when writing popular music.
+@node Flexibility in alignment
+@subsection Flexibility in alignment
-@menu
-* Chord names::
-* Chords mode::
-* Printing chord names::
-* Fret diagrams::
-@end menu
-@node Chord names
-@subsection Chord names
-@cindex Chords
+Often, different stanzas of one song are put to one melody in slightly
+differing ways. Such variations can still be captured with
+@code{\lyricsto}.
-LilyPond has support for printing chord names. Chords may be entered
-in musical chord notation, i.e., @code{< .. >}, but they can also be
-entered by name. Internally, the chords are represented as a set of
-pitches, so they can be transposed
+One possibility is that the text has a melisma in one stanza, but
+multiple syllables in another one. One solution is to make the faster
+voice ignore the melisma. This is done by setting
+@code{ignoreMelismata} in the Lyrics context.
+There has one tricky aspect. The setting for @code{ignoreMelismata}
+must be set one syllable @emph{before} the non-melismatic syllable
+in the text, as shown here,
-@lilypond[quote,raggedright,verbatim,raggedright]
-twoWays = \transpose c c' {
- \chordmode {
- c1 f:sus4 bes/f
+@lilypond[verbatim,raggedright,quote]
+<<
+ \relative \context Voice = "lahlah" {
+ \set Staff.autoBeaming = ##f
+ c4
+ \slurDotted
+ f8.[( g16])
+ a4
}
- <c e g>
- <f bes c'>
- <f bes d'>
-}
-
-<< \context ChordNames \twoWays
- \context Voice \twoWays >>
+ \new Lyrics \lyricsto "lahlah" {
+ more slow -- ly
+ }
+ \new Lyrics \lyricsto "lahlah" {
+ \set ignoreMelismata = ##t % applies to "fas"
+ go fas -- ter
+ \unset ignoreMelismata
+ still
+ }
+>>
@end lilypond
-This example also shows that the chord printing routines do not try to
-be intelligent. The last chord (@code{f bes d}) is not interpreted as
-an inversion.
-
-@node Chords mode
-@subsection Chords mode
-@cindex Chords mode
-
-In chord mode sets of pitches (chords) are entered with normal note
-names. A chord is entered by the root, which is entered like a
-normal pitch
-
-@lilypond[quote,raggedright,fragment,verbatim]
-\chordmode { es4. d8 c2 }
-@end lilypond
-
-@noindent
-The mode is introduced by the keyword @code{\chordmode}.
+The @code{ignoreMelismata} applies to the syllable ``fas'', so it
+should be entered before ``go''.
-@cindex chord entry
-@cindex chord mode
+The reverse is also possible: making a lyric line slower than the
+standard. This can be achieved by insert @code{\skip}s into the
+lyrics. For every @code{\skip}, the text will be delayed another note.
+For example,
-Other chords may be entered by suffixing a colon and introducing a
-modifier (which may include a number if desired)
-@lilypond[quote,fragment,verbatim]
-\chordmode { e1:m e1:7 e1:m7 }
-@end lilypond
-The first number following the root is taken to be the `type' of the
-chord, thirds are added to the root until it reaches the specified
-number
-@lilypond[quote,fragment,verbatim]
-\chordmode { c:3 c:5 c:6 c:7 c:8 c:9 c:10 c:11 }
+@lilypond[verbatim,raggedright,quote]
+\relative { c c g' }
+\addlyrics {
+ twin -- \skip 4
+ kle
+}
@end lilypond
-@cindex root of chord
-@cindex additions, in chords
-@cindex removals, in chords
+More complex variations in text underlay are possible. It is possible
+to switch the melody for a line of lyrics during the text. This is
+done by setting the @code{associatedVoice} property. In the example
-More complex chords may also be constructed adding separate steps
-to a chord. Additions are added after the number following
-the colon and are separated by dots
-@lilypond[quote,verbatim,fragment]
-\chordmode { c:5.6 c:3.7.8 c:3.6.13 }
+@lilypond[raggedright,quote]
+<<
+ \relative \context Voice = "lahlah" {
+ \set Staff.autoBeaming = ##f
+ c4
+ <<
+ \context Voice = alternative {
+ \voiceOne
+ \times 2/3 {
+ % show associations clearly.
+ \override NoteColumn #'force-hshift = #-3
+ f8 f g
+ }
+ }
+ {
+ \voiceTwo
+ f8.[ g16]
+ \oneVoice
+ } >>
+ a8( b) c
+ }
+ \new Lyrics \lyricsto "lahlah" {
+ Ju -- ras -- sic Park
+ }
+ \new Lyrics \lyricsto "lahlah" {
+ % Tricky: need to set associatedVoice
+ % one syllable too soon!
+ \set associatedVoice = alternative % applies to "ran"
+ Ty --
+ ran --
+ no --
+ \set associatedVoice = lahlah % applies to "rus"
+ sau -- rus Rex
+ } >>
@end lilypond
-Chord steps can be altered by suffixing a @code{-} or @code{+} sign
-to the number
-@lilypond[quote,verbatim,fragment]
-\chordmode { c:7+ c:5+.3- c:3-.5-.7- }
+
+@noindent
+the text for the first stanza is set to a melody called ``lahlah'',
+
+@example
+\new Lyrics \lyricsto "lahlah" @{
+ Ju -- ras -- sic Park
+@}
+@end example
+
+
+The second stanza initially is set to the @code{lahlah} context, but
+for the syllable ``ran'', it switches to a different melody.
+This is achieved with
+@example
+\set associatedVoice = alternative
+@end example
+
+@noindent
+Here, @code{alternative} is the name of the @code{Voice} context
+containing the triplet.
+
+Again, the command must be one syllable too early, before ``Ty'' in
+this case.
+
+@example
+\new Lyrics \lyricsto "lahlah" @{
+ \set associatedVoice = alternative % applies to "ran"
+ Ty --
+ ran --
+ no --
+ \set associatedVoice = lahlah % applies to "rus"
+ sau -- rus Rex
+@}
+@end example
+
+@noindent
+The underlay is switched back to the starting situation by assigning
+@code{lahlah} to @code{associatedVoice}.
+
+
+
+
+@node More stanzas
+@subsection More stanzas
+
+@cindex phrasing, in lyrics
+
+
+@cindex stanza number
+@cindex singer's names
+@cindex name of singer
+
+Stanza numbers can be added by setting @code{stanza}, e.g.,
+
+@lilypond[quote,raggedright,verbatim,relative=2,fragment]
+\new Voice {
+ \time 3/4 g2 e4 a2 f4 g2.
+} \addlyrics {
+ \set stanza = "1. "
+ Hi, my name is Bert.
+} \addlyrics {
+ \set stanza = "2. "
+ Oh, che -- ri, je t'aime
+}
@end lilypond
-Removals are specified similarly and are introduced by a caret. They
-must come after the additions
-@lilypond[quote,verbatim,fragment]
-\chordmode { c^3 c:7^5 c:9^3.5 }
+
+These numbers are put just before the start of first syllable.
+
+Names of singers can also be added. They are printed at the start of
+the line, just like instrument names. They are created by setting
+@code{vocalName}. A short version may be entered as @code{vocNam}.
+
+
+@lilypond[fragment,raggedright,quote,verbatim,relative=2]
+\new Voice {
+ \time 3/4 g2 e4 a2 f4 g2.
+} \addlyrics {
+ \set vocalName = "Bert "
+ Hi, my name is Bert.
+} \addlyrics {
+ \set vocalName = "Ernie "
+ Oh, che -- ri, je t'aime
+}
+@end lilypond
+
+@seealso
+
+Program reference: Layout objects @internalsref{LyricText} and
+@internalsref{VocalName}. Music expressions
+@internalsref{LyricEvent}.
+
+
+
+@node Ambitus
+@subsection Ambitus
+@cindex ambitus
+
+The term @emph{ambitus} denotes a range of pitches for a given voice
+in a part of music. It may also denote the pitch range that a musical
+instrument is capable of playing. Ambits are printed on vocal parts,
+so performers can easily determine it meets their capabilities.
+
+Ambits are denoted at the beginning of a piece near the initial clef.
+The range is graphically specified by two note heads that represent the
+minimum and maximum pitch. To print such ambits, add the
+@internalsref{Ambitus_engraver} to the @internalsref{Voice} context,
+for example,
+
+@example
+\layout @{
+ \context @{
+ \Voice
+ \consists Ambitus_engraver
+ @}
+@}
+@end example
+
+This results in the following output
+
+@lilypond[quote,raggedright]
+\layout {
+ \context {
+ \Staff
+ \consists Ambitus_engraver
+ }
+}
+
+\relative \new Staff {
+ as'' c e2 cis,2
+}
+@end lilypond
+
+If you have multiple voices in a single staff and you want a single
+ambitus per staff rather than per each voice, add the
+@internalsref{Ambitus_engraver} to the @internalsref{Staff} context
+rather than to the @internalsref{Voice} context. Here is an example,
+
+@lilypond[verbatim,raggedright,quote]
+\new Staff \with {
+ \consists "Ambitus_engraver"
+}
+<<
+ \new Voice \with {
+ \remove "Ambitus_engraver"
+ } \relative c'' {
+ \override Ambitus #'X-offset-callbacks
+ = #(list (lambda (grob axis) -1.0))
+ \voiceOne
+ c4 a d e f2
+ }
+ \new Voice \with {
+ \remove "Ambitus_engraver"
+ } \relative c' {
+ \voiceTwo
+ es4 f g as b2
+ }
+>>
+@end lilypond
+
+@noindent
+This example uses one advanced feature,
+
+@example
+\override Ambitus #'X-offset-callbacks
+ = #(list (lambda (grob axis) -1.0))
+@end example
+
+@noindent
+This code moves the ambitus to the left. The same effect could have
+been achieved with @code{extra-offset}, but then the formatting system
+would not reserve space for the moved object.
+
+@seealso
+
+Program reference: @internalsref{Ambitus},
+@internalsref{AmbitusLine}, @internalsref{AmbitusNoteHead},
+@internalsref{AmbitusAccidental}.
+
+Examples: @inputfileref{input/@/regression,ambitus@/.ly}.
+
+@refbugs
+
+There is no collision handling in the case of multiple per-voice
+ambitus.
+
+@node Other vocal issues
+@subsection Other vocal issue
+
+@ignore
+yeah, I'm giving up somewhat by stuffing a bunch of things in
+here. But at least they're in the manual now; it's easier to
+move them around in the manual once they're already here.
+
+Besides, if users complain about everything stuffed in here, I
+can ask them for specific instructions about where to move these
+examples, and that might get them more involved in the docs. -gp
+@end ignore
+
+You can display alternate (or divisi) lyrics by naming voice
+contexts and attaching lyrics to those specific contexts.
+
+@lilypond[verbatim,raggedright,quote]
+\score{ <<
+ \context Voice = "melody" {
+ \relative c' {
+ c4
+ <<
+ { \voiceOne c8 e }
+ \context Voice = splitpart { \voiceTwo c4 }
+ >>
+ \oneVoice c4 c | c
+ }
+ }
+ \new Lyrics \lyricsto "melody" { we shall not o- ver- come }
+ \new Lyrics \lyricsto "splitpart" { shall }
+>> }
+@end lilypond
+
+
+You can use this trick to display different lyrics for a repeated
+section.
+
+@lilypond[verbatim,raggedright,quote]
+\score{ <<
+ \context Voice = melody \relative c' {
+ c2 e | g e | c1 |
+ \context Voice = verse \repeat volta 2 {c4 d e f | g1 | }
+ a2 b | c1}
+ \lyricsto melody \context Lyrics = mainlyrics \lyricmode {
+ do mi sol mi do
+ la si do }
+ \lyricsto verse \context Lyrics = mainlyrics \lyricmode {
+ do re mi fa sol }
+ \lyricsto verse \context Lyrics = repeatlyrics \lyricmode {
+ dodo rere mimi fafa solsol }
+>>
+}
+@end lilypond
+
+
+To notate ``parlato'' (spoken without pitch but still with
+rhythm) sections,
+
+@lilypond[raggedright,verbatim,quote,fragment,relative=2]
+c4 d
+\override NoteHead #'style = #'cross
+e f
+\revert NoteHead #'style
+e d
+@end lilypond
+
+
+@node Rhythmic music
+@section Rhythmic music
+
+Rhythmic music is primarily used for percussion and drum notation, but it can
+also be used to show the rhythms of melodies.
+
+@menu
+* Showing melody rhythms::
+* Entering percussion::
+* Percussion staves::
+@end menu
+
+
+@node Showing melody rhythms
+@subsection Showing melody rhythms
+
+Sometimes you might want to show only the rhythm of a melody. This
+can be done with the rhythmic staff. All pitches of notes on such a
+staff are squashed, and the staff itself has a single line
+
+@lilypond[quote,raggedright,fragment,relative=1,verbatim]
+\context RhythmicStaff {
+ \time 4/4
+ c4 e8 f g2 | r4 g r2 | g1:32 | r1 |
+}
@end lilypond
-Modifiers can be used to change pitches. The following modifiers are
-supported
+@seealso
-@table @code
-@item m
-The minor chord. This modifier lowers the 3rd and (if present) the 7th step.
+Program reference: @internalsref{RhythmicStaff}.
-@item dim
-The diminished chord. This modifier lowers the 3rd, 5th and (if present)
-the 7th step.
+Examples: @inputfileref{input/@/regression,rhythmic@/-staff@/.ly}.
-@item aug
-The augmented chord. This modifier raises the 5th step.
-@item maj
-The major 7th chord. This modifier raises the 7th step if present.
+@node Entering percussion
+@subsection Entering percussion
-@item sus
-The suspended 4th or 2nd. This modifier removes the 3rd
-step. Append either @code{2} or @code{4} to add the 2nd or 4th step to
-the chord.
-@end table
+@cindex percussion
+@cindex drums
-Modifiers can be mixed with additions
-@lilypond[quote,verbatim,fragment]
- \chordmode { c:sus4 c:7sus4 c:dim7 c:m6 }
+
+Percussion notes may be entered in @code{\drummode} mode, which is
+similar to the standard mode for entering notes. Each piece of
+percussion has a full name and an abbreviated name, and both can be used
+in input files
+
+@lilypond[quote,raggedright,verbatim]
+\drums {
+ hihat hh bassdrum bd
+}
@end lilypond
-@cindex modifiers, in chords.
-@cindex @code{aug}
-@cindex @code{dim}
-@cindex @code{maj}
-@cindex @code{sus}
-@cindex @code{m}
+The complete list of drum names is in the init file
+@file{ly/@/drumpitch@/-init@/.ly}.
+@c TODO: properly document this.
-Since an unaltered 11 does not sound good when combined with an
-unaltered 3, the 11 is removed in this case (unless it is added
-explicitly)
-@lilypond[quote,raggedright,fragment,verbatim]
-\chordmode { c:13 c:13.11 c:m13 }
+@seealso
+
+Program reference: @internalsref{DrumNoteEvent}.
+
+@node Percussion staves
+@subsection Percussion staves
+@cindex percussion
+@cindex drums
+
+A percussion part for more than one instrument typically uses a
+multiline staff where each position in the staff refers to one piece
+of percussion.
+
+
+To typeset the music, the notes must be interpreted in a
+@internalsref{DrumStaff} and @internalsref{DrumVoice} contexts
+
+@lilypond[quote,raggedright,verbatim]
+up = \drummode { crashcymbal4 hihat8 halfopenhihat hh hh hh openhihat }
+down = \drummode { bassdrum4 snare8 bd r bd sn4 }
+ \new DrumStaff <<
+ \new DrumVoice { \voiceOne \up }
+ \new DrumVoice { \voiceTwo \down }
+ >>
@end lilypond
-@cindex @code{/}
+The above example shows verbose polyphonic notation. The short
+polyphonic notation, described in @ref{Polyphony}, can also be used if
+the @internalsref{DrumVoices} are instantiated by hand first. For example,
-An inversion (putting one pitch of the chord on the bottom), as well
-as bass notes, can be specified by appending
-@code{/}@var{pitch} to the chord
@lilypond[quote,raggedright,fragment,verbatim]
-\chordmode { c1 c/g c/f }
+\new DrumStaff <<
+ \context DrumVoice = "1" { s1 *2 }
+ \context DrumVoice = "2" { s1 *2 }
+ \drummode {
+ bd4 sn4 bd4 sn4
+ <<
+ { \repeat unfold 16 hh16 }
+ \\
+ { bd4 sn4 bd4 sn4 }
+ >>
+ }
+>>
@end lilypond
-@cindex @code{/+}
-A bass note can be added instead transposed out of the chord,
-by using @code{/+}@var{pitch}.
-@lilypond[quote,raggedright,fragment,verbatim]
-\chordmode { c1 c/+g c/+f }
+There are also other layout possibilities. To use these, set the
+property @code{drumStyleTable} in context @internalsref{DrumVoice}.
+The following variables have been predefined
+
+@table @code
+@item drums-style
+This is the default. It typesets a typical drum kit on a five-line staff
+
+@lilypond[quote,linewidth=10.0\cm]
+nam = \lyricmode {
+ cymc cyms cymr hh hhc hho hhho hhp
+ cb hc bd sn ss tomh tommh tomml toml tomfh tomfl }
+mus = \drummode {
+ cymc cyms cymr hh hhc hho hhho hhp \break
+ cb hc bd sn ss tomh tommh tomml toml tomfh tomfl s16 }
+\score {
+ << \new DrumStaff \with {
+ \remove Bar_engraver
+ \remove Time_signature_engraver
+ \override Stem #'transparent = ##t
+ \override Stem #'Y-extent-callback = ##f
+ minimumVerticalExtent = #'(-4.0 . 5.0)
+ } \mus
+ \context Lyrics \nam
+ >>
+ \layout {
+ \context {
+ \Score
+ \override LyricText #'font-family = #'typewriter
+ \override BarNumber #'transparent =##T
+ }
+ }
+}
@end lilypond
-Chords is a mode similar to @code{\lyricmode}, etc. Most
-of the commands continue to work, for example, @code{r} and
-@code{\skip} can be used to insert rests and spaces, and property
-commands may be used to change various settings.
+The drum scheme supports six different toms. When there are fewer toms,
+simply select the toms that produce the desired result, i.e., to get toms
+on the three middle lines you use @code{tommh}, @code{tomml}, and
+@code{tomfh}.
+
+@item timbales-style
+This typesets timbales on a two line staff
+@lilypond[quote,raggedright]
+nam = \lyricmode { timh ssh timl ssl cb }
+mus = \drummode { timh ssh timl ssl cb s16 }
+<<
+ \context DrumStaff \with {
+ \remove Bar_engraver
+ \remove Time_signature_engraver
+ \override Stem #'transparent = ##t
+ \override Stem #'Y-extent-callback = ##f
+ \override StaffSymbol #'line-count = #2
+ \override StaffSymbol #'staff-space = #2
+ minimumVerticalExtent = #'(-3.0 . 4.0)
+ drumStyleTable = #timbales-style
+ } \mus
+ \context Lyrics {
+ \override LyricText #'font-family = #'typewriter
+ \nam
+ }
+>>
+@end lilypond
-@refbugs
+@item congas-style
+This typesets congas on a two line staff
-Each step can only be present in a chord once. The following
-simply produces the augmented chord, since @code{5+} is interpreted
-last
-@cindex clusters
-@lilypond[quote,raggedright,verbatim,fragment]
-\chordmode { c:5.5-.5+ }
+@lilypond[quote,raggedright]
+nam = \lyricmode { cgh cgho cghm ssh cgl cglo cglm ssl }
+mus = \drummode { cgh cgho cghm ssh cgl cglo cglm ssl s16 }
+
+<<
+ \context DrumStaff \with {
+ \remove Bar_engraver
+ \remove Time_signature_engraver
+ drumStyleTable = #congas-style
+ \override StaffSymbol #'line-count = #2
+
+ %% this sucks; it will lengthen stems.
+ \override StaffSymbol #'staff-space = #2
+ \override Stem #'transparent = ##t
+ \override Stem #'Y-extent-callback = ##f
+ } \mus
+ \context Lyrics {
+ \override LyricText #'font-family = #'typewriter
+ \nam
+ }
+>>
@end lilypond
+@item bongos-style
+This typesets bongos on a two line staff
-@node Printing chord names
-@subsection Printing chord names
+@lilypond[quote,raggedright]
+nam = \lyricmode { boh boho bohm ssh bol bolo bolm ssl }
+mus = \drummode { boh boho bohm ssh bol bolo bolm ssl s16 }
-@cindex printing chord names
-@cindex chord names
-@cindex chords
+<<
+ \context DrumStaff\with {
+ \remove Bar_engraver
+ \remove Time_signature_engraver
+ \override StaffSymbol #'line-count = #2
+ drumStyleTable = #bongos-style
-For displaying printed chord names, use the @internalsref{ChordNames} context.
-The chords may be entered either using the notation
-described above, or directly using @code{<} and @code{>}
+ %% this sucks; it will lengthen stems.
+ \override StaffSymbol #'staff-space = #2
+ \override Stem #'transparent = ##t
+ \override Stem #'Y-extent-callback = ##f
+ } \mus
+ \context Lyrics {
+ \override LyricText #'font-family = #'typewriter
+ \nam
+ }
+>>
+@end lilypond
+
+@item percussion-style
+To typeset all kinds of simple percussion on one line staves.
+
+@lilypond[quote,raggedright]
+nam = \lyricmode { tri trio trim gui guis guil cb cl tamb cab mar hc }
+mus = \drummode { tri trio trim gui guis guil cb cl tamb cab mar hc s16 }
-@lilypond[quote,verbatim,raggedright]
-harmonies = {
- \chordmode {a1 b c} <d' f' a'> <e' g' b'>
-}
<<
- \context ChordNames \harmonies
- \context Staff \harmonies
+ \context DrumStaff\with{
+ \remove Bar_engraver
+ drumStyleTable = #percussion-style
+ \override StaffSymbol #'line-count = #1
+ \remove Time_signature_engraver
+ \override Stem #'transparent = ##t
+ \override Stem #'Y-extent-callback = ##f
+ } \mus
+ \context Lyrics {
+ \override LyricText #'font-family = #'typewriter
+ \nam
+ }
>>
@end lilypond
+@end table
-You can make the chord changes stand out by setting
-@internalsref{ChordNames}.@code{chordChanges} to true. This will only
-display chord names when there is a change in the chords scheme and at
-the start of a new line
+If you do not like any of the predefined lists you can define your own
+list at the top of your file
-@lilypond[quote,verbatim,raggedright]
-harmonies = \chordmode {
- c1:m c:m \break c:m c:m d
-}
-<<
- \context ChordNames {
- \set chordChanges = ##t
- \harmonies }
- \context Staff \transpose c c' \harmonies
+@lilypond[quote,raggedright,verbatim]
+#(define mydrums '(
+ (bassdrum default #f -1)
+ (snare default #f 0)
+ (hihat cross #f 1)
+ (pedalhihat xcircle "stopped" 2)
+ (lowtom diamond #f 3)))
+up = \drummode { hh8 hh hh hh hhp4 hhp }
+down = \drummode { bd4 sn bd toml8 toml }
+
+\new DrumStaff <<
+ \set DrumStaff.drumStyleTable = #(alist->hash-table mydrums)
+ \new DrumVoice { \voiceOne \up }
+ \new DrumVoice { \voiceTwo \down }
>>
@end lilypond
-The previous examples all show chords over a staff. This is not
-necessary. Chords may also be printed separately. It may be necessary
-to add @internalsref{Volta_engraver} and @internalsref{Bar_engraver}
-for showing repeats.
-@lilypond[raggedright,verbatim]
-\new ChordNames \with {
- \override BarLine #'bar-size = #4
- voltaOnThisStaff = ##t
- \consists Bar_engraver
- \consists "Volta_engraver"
-}
-\repeat volta 2 \chordmode {
- f1:maj f:7 bes:7
- c:maj
-} \alternative {
- es e
-}
-@end lilypond
+@seealso
+Init files: @file{ly/@/drumpitch@/-init@/.ly}.
-The default chord name layout is a system for Jazz music, proposed by
-Klaus Ignatzek (see @ref{Literature list}). It can be tuned through the
-following properties
+Program reference: @internalsref{DrumStaff}, @internalsref{DrumVoice}.
-@table @code
-@cindex @code{chordNameExceptions}
-@item chordNameExceptions
-This is a list that contains the chords that have special formatting.
+@refbugs
-The exceptions list should be encoded as
-@example
-@{ <c f g bes>1 \markup @{ \super "7" "wahh" @} @}
-@end example
+Because general MIDI does not contain rim shots, the sidestick is used
+for this purpose instead.
-To get this information into @code{chordNameExceptions} takes a little
-manoeuvring. The following code transforms @code{chExceptionMusic}
-(which is a sequential music) into a list of exceptions.
-@example
-(sequential-music-to-chord-exceptions chExceptionMusic #t)
-@end example
-Then,
-@example
-(append
- (sequential-music-to-chord-exceptions chExceptionMusic #t)
- ignatzekExceptions)
-@end example
-adds the new exceptions to the default ones, which are defined in
-@file{ly/@/chord@/-modifier@/-init@/.ly}.
-For an example of tuning this property, see also
-@inputfileref{input/@/regression,chord@/-name@/-exceptions@/.ly}.
-@cindex exceptions, chord names.
-@cindex @code{majorSevenSymbol}
-@item majorSevenSymbol
-This property contains the markup object used for the 7th step, when
-it is major. Predefined options are @code{whiteTriangleMarkup} and
-@code{blackTriangleMarkup}. See
-@inputfileref{input/@/regression,chord@/-name@/-major7@/.ly} for an example.
+@node Tablatures
+@section Tablatures
-@cindex @code{chordNameSeparator}
-@item chordNameSeparator
-Different parts of a chord name are normally separated by a
-slash. By setting @code{chordNameSeparator}, you can specify other
-separators, e.g.,
-@lilypond[quote,raggedright,fragment,verbatim]
-\context ChordNames \chordmode {
- c:7sus4
- \set chordNameSeparator
- = \markup { \typewriter "|" }
- c:7sus4
-}
-@end lilypond
+@cindex tablature
+@cindex guitar tablature
-@cindex @code{chordRootNamer}
-@item chordRootNamer
-The root of a chord is usually printed as a letter with an optional
-alteration. The transformation from pitch to letter is done by this
-function. Special note names (for example, the German ``H'' for a
-B-chord) can be produced by storing a new function in this property.
+Tablature notation is used for notating music for plucked string
+instruments. Pitches are not denoted with note heads, but by
+indicating on which string and fret a note must be played. LilyPond
+offers limited support for tablature.
-@cindex @code{chordNoteNamer}
-@item chordNoteNamer
-The default is to print single pitch, e.g., the bass note, using the
-@code{chordRootNamer}. The @code{chordNoteNamer} property can be set
-to a specialized function to change this behavior. For example, the
-base can be printed in lower case.
+@menu
+* Tablatures basic::
+* Non-guitar tablatures::
+* Fret diagrams::
+@end menu
-@end table
+@node Tablatures basic
+@subsection Tablatures basic
+@cindex Tablatures basic
-The predefined variables @code{\germanChords},
-@code{\semiGermanChords} set these variables. The effect is
-demonstrated here,
+The string number associated to a note is given as a backslash
+followed by a number, e.g., @code{c4\3} for a C quarter on the third
+string. By default, string 1 is the highest one, and the tuning
+defaults to the standard guitar tuning (with 6 strings). The notes
+are printed as tablature, by using @internalsref{TabStaff} and
+@internalsref{TabVoice} contexts
-@lilypondfile[raggedright]{chord-names-german.ly}
+@lilypond[quote,raggedright,fragment,verbatim]
+\context TabStaff {
+ a,4\5 c'\2 a\3 e'\1
+ e\4 c'\2 a\3 e'\1
+}
+@end lilypond
-There are also two other chord name schemes implemented: an alternate
-Jazz chord notation, and a systematic scheme called Banter chords. The
-alternate Jazz notation is also shown on the chart in @ref{Chord name
-chart}. Turning on these styles is described in the input file
-@inputfileref{input/@/test,chord@/-names@/-jazz@/.ly}.
+@cindex @code{minimumFret}
+@cindex fret
-@cindex Banter
-@cindex jazz chords
-@cindex chords, jazz
+When no string is specified, the first string that does not give a
+fret number less than @code{minimumFret} is selected. The default
+value for @code{minimumFret} is 0
-@refcommands
+@example
+e16 fis gis a b4
+\set TabStaff.minimumFret = #8
+e16 fis gis a b4
+@end example
+@lilypond[quote,raggedright]
+frag = {
+ \key e \major
+ e16 fis gis a b4
+ \set TabStaff.minimumFret = #8
+ e16 fis gis a b4
+}
+ \context StaffGroup <<
+ \context Staff { \clef "G_8" \frag }
+ \context TabStaff { \frag }
+ >>
+@end lilypond
-@cindex @code{\germanChords}
-@code{\germanChords},
-@cindex @code{\semiGermanChords}
-@code{\semiGermanChords}.
+@seealso
+Program reference: @internalsref{TabStaff}, @internalsref{TabVoice}, and
+@internalsref{StringNumberEvent}.
+@refbugs
+Chords are not handled in a special way, and hence the automatic
+string selector may easily select the same string to two notes in a
+chord.
-@seealso
-Examples: @inputfileref{input/@/regression,chord@/-name@/-major7@/.ly},
-@inputfileref{input/@/regression,chord@/-name@/-exceptions@/.ly},
-@inputfileref{input/@/test,chord@/-names@/-jazz@/.ly}.
+@node Non-guitar tablatures
+@subsection Non-guitar tablatures
+@cindex Non-guitar tablatures
+You can change the number of strings, by setting the number of lines
+in the @internalsref{TabStaff}.
-Init files: @file{scm/@/chords@/-ignatzek@/.scm}, and
-@file{scm/@/chord@/-entry@/.scm}.
+You can change the tuning of the strings. A string tuning is given as
+a Scheme list with one integer number for each string, the number
+being the pitch (measured in semitones relative to middle C) of an
+open string. The numbers specified for @code{stringTuning} are the
+numbers of semitones to subtract or add, starting the specified pitch
+by default middle C, in string order. In the next example,
+@code{stringTunings} is set for the pitches e, a, d, and g
+@lilypond[quote,raggedright,fragment,verbatim]
+\context TabStaff <<
+ \set TabStaff.stringTunings = #'(-5 -10 -15 -20)
+ {
+ a,4 c' a e' e c' a e'
+ }
+>>
+@end lilypond
@refbugs
-Chord names are determined solely from the list of pitches. Chord
-inversions are not identified, and neither are added bass notes. This
-may result in strange chord names when chords are entered with the
-@code{< .. >} syntax.
+No guitar special effects have been implemented.
+
+@seealso
+
+Program reference: @internalsref{Tab_note_heads_engraver}.
@node Fret diagrams
Slash notation for alterations is not supported.
+
+@node Other instrument specific notation
+@section Other instrument specific notation
+
+This section includes extra information for writing for instruments.
+
+@menu
+* Artificial harmonics (strings)::
+* Stopped notes (guitar)::
+@end menu
+
+@node Artificial harmonics (strings)
+@subsection Artificial harmonics (strings)
+
+@cindex artificial harmonics
+
+Artificial harmonics are notated with a different notehead style. They
+are entered by marking the harmonic pitch with @code{\harmonic}.
+
+@lilypond[raggedright,verbatim,quote,fragment,relative=1]
+<c g'\harmonic>4
+@end lilypond
+
+
+@node Stopped notes (guitar)
+@subsection Stopped notes (guitar)
+
+Stopped (X) note heads are used in guitar music to signal a place where the
+guitarist must play a certain note or chord, with its fingers just
+touching the strings instead of fully pressing them. This gives the sound a
+percussive noise-like sound that still maintains part of the original pitch.
+
+Finger stopped technique is extremely important for rhythm and rock-heavy
+metal guitarists; the former often uses barré based stopped chords to
+intermix harmony with rythm, the latters use finger stopping to mute power
+chords, or charge them with more expression in close-tied power chord stums.
+
+It is also used (even if rarely) in classic guitar music, generally in the
+melodic line, to provide some rithmic pattern right in the melody.
+
+@lilypond[raggedright,verbatim,quote,fragment,relative=2]
+c4 d
+\override NoteHead #'style = #'cross
+e f
+\revert NoteHead #'style
+e d
+@end lilypond
+
+