]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4528/1 Add ly/ssaattbb.ly built-in template
authorTrevor Daniels <t.daniels@treda.co.uk>
Sat, 1 Aug 2015 20:27:40 +0000 (21:27 +0100)
committerTrevor Daniels <t.daniels@treda.co.uk>
Sat, 8 Aug 2015 10:26:02 +0000 (11:26 +0100)
ly/ssaattbb.ly [new file with mode: 0644]

diff --git a/ly/ssaattbb.ly b/ly/ssaattbb.ly
new file mode 100644 (file)
index 0000000..9efd6c1
--- /dev/null
@@ -0,0 +1,318 @@
+
+\version "2.19.25"
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%                                                %%
+%%          Accompanied Divided Choir             %%
+%%                                                %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%{
+  This file may be \include'd in a score to provide the
+  context structure for a score arrangement consisting
+  of the following staves, although normally only a subset
+  of these staves would be used in any one score.
+
+  Solo Staff (outside Choir grouping)
+  Descant Staff (within Choir grouping)
+  Women Staff (single voice on one staff)
+  First and Second Soprano (optionally on two Staves or one Staff)
+  Soprano and Alto (optionally on two Staves or one Staff)
+  First and Second Alto (optionally on two Staves or one Staff)
+  First and Second Tenor (optionally on two Staves or one Staff)
+  Tenor and Bass (optionally on two Staves or one Staff)
+  First and Second Bass (optionally on two Staves or one Staff)
+  Men Staff (single voice on one staff)
+  Piano Staff
+
+  It is intended primarily to hide the complexity of the context
+  structure from newcomers to LilyPond, but is also useful as a
+  shorthand for seasoned users.  It is intended to facilitate the
+  setting of pieces in which different groupings of voices appear
+  at different times.  All that is necessary is to populate the
+  appropriate variables with music for the relevant sections and
+  with rests elsewhere, with sections separated by line breaks.
+
+  Usage:
+
+  ssaattbb.ly should be included at the *end* of the input file. Before
+  it are placed the required music and lyrics by redefining specific
+  variables, like this:
+
+  \paper { ... }
+  \header { ... }
+  Key = { ... }
+  Time = { ... }
+  SopranoOneMusic = \relative { ... }
+  SopranoOneLyrics = \lyricmode { ... }
+  SopranoTwoMusic = \relative { ... }
+  SopranoTwoLyrics = \lyricmode { ... }
+  AltoOneMusic = \relative { ... }
+  AltoOneLyrics = \lyricmode { ... }
+  AltoTwoMusic = \relative { ... }
+  AltoTwoLyrics = \lyricmode { ... }
+  TenorOneMusic = \relative { ... }
+  TenorOneLyrics = \lyricmode { ... }
+  TenorTwoMusic = \relative { ... }
+  TenorTwoLyrics = \lyricmode { ... }
+  BassOneMusic = \relative { ... }
+  BassOneLyrics = \lyricmode { ... }
+  BassTwoMusic = \relative { ... }
+  BassTwoLyrics = \lyricmode { ... }
+  PianoRHMusic = \relative { ... }
+  PianoDynamics = { ... }
+  PianoLHMusic = \relative { ... }
+  TwoVoicesPerStaff = ##f (applies to all staves)
+  \include "ssaattbb.ly"
+
+  In addition, if there are sections in which two or more parts
+  are in unison, the following variables may also be defined:
+
+  WomenMusic = \relative { ... }
+  WomenLyrics = \lyricmode { ... }
+  SopranoMusic = \relative { ... }
+  SopranoLyrics = \lyricmode { ... }
+  AltoMusic = \relative { ... }
+  AltoLyrics = \lyricmode { ... }
+  TenorMusic = \relative { ... }
+  TenorLyrics = \lyricmode { ... }
+  BassMusic = \relative { ... }
+  BassLyrics = \lyricmode { ... }
+  MenMusic = \relative { ... }
+  MenLyrics = \lyricmode { ... }
+
+  All of the definitions are optional. Staves with no music will be
+  omitted from the output.
+
+  If TwoVoicesPerStaff is #f, music of the various voices may be
+  placed individually on one or two staves according to the
+  following variables, all of which default to #f:
+
+  WomenTwoVoicesPerStaff
+  SopranoTwoVoicesPerStaff
+  AltoTwoVoicesPerStaff
+  TenorTwoVoicesPerStaff
+  BassTwoVoicesPerStaff
+  MenTwoVoicesPerStaff
+
+  Other variables, such as the instrumentName, shortInstrumentName
+  and MidiInstrument can also be changed by defining variables like
+  AltoInstrumentName, BassMidiInstrument, etc.  The prefixes for staves
+  containing two divided voices are WomenDivided and MenDivided, etc
+  hence the corresponding variables would be WomenDividedInstrumentName,
+  etc.
+
+  The key is defined in the variable Key, and the structure of time
+  and repeats in the variable Time, using spacer rests.
+
+  A \layout block may be defined in the variable Layout.  There is
+  no default \header block and no default \paper block.
+
+  Music may be tagged with #'print or #'play to be included only in
+  the printed score or in the MIDI file respectively.
+
+%}
+
+\include "vocal-tkit.ly"
+\include "piano-tkit.ly"
+
+#(define ssaattbb-voice-prefixes
+   ;; These define the permitted prefixes to various names.
+   ;; They are combined with a fixed set of postfixes to form
+   ;; names such as AltoMusic, BassInstrumentName, etc.
+   ;; These names may be redefined.
+   '("Alto"
+     "AltoOne"
+     "AltoTwo"
+     "AltoDivided"
+     "Bass"
+     "BassOne"
+     "BassTwo"
+     "BassDivided"
+     "Descant"
+     "Men"
+     "MenDivided"
+     "Piano"
+     "PianoLH"
+     "PianoRH"
+     "Solo"
+     "Soprano"
+     "SopranoOne"
+     "SopranoTwo"
+     "SopranoDivided"
+     "Tenor"
+     "TenorOne"
+     "TenorTwo"
+     "TenorDivided"
+     "Women"
+     "WomenDivided"))
+
+#(define ssaattbb-lyrics-postfixes
+   ;; These define the permitted postfixes to the names of lyrics.
+   ;; They are combined with the prefixes to form names like
+   ;; AltoLyrics, etc.
+   ;; These names may be redefined or extended.
+  '("Lyrics"
+    "LyricsOne"
+    "LyricsTwo"
+    "LyricsThree"
+    "LyricsFour"))
+
+#(define ssaattbb-lyrics-variable-names
+   ;; These define the names which may be used to specify stanzas
+   ;; which go between the two two-voice staves when TwoVoicesPerStaff
+   ;; is set to #t.  They may be redefined or extended.
+  '("VerseOne"
+    "VerseTwo"
+    "VerseThree"
+    "VerseFour"
+    "VerseFive"
+    "VerseSix"
+    "VerseSeven"
+    "VerseEight"
+    "VerseNine"))
+
+%% make the above definitions available
+#(set-music-definitions!
+  ssaattbb-voice-prefixes
+  ssaattbb-lyrics-postfixes
+  ssaattbb-lyrics-variable-names)
+
+#(define ssaattbb-variable-names
+; Define names which are in addition to the base variable names
+; of Time, Layout, Key, PianoDynamics and TwoVoicesPerStaff
+   '("AltoTwoVoicesPerStaff"
+     "BassTwoVoicesPerStaff"
+     "MenTwoVoicesPerStaff"
+     "SopranoTwoVoicesPerStaff"
+     "TenorTwoVoicesPerStaff"
+     "WomenTwoVoicesPerStaff"))
+
+%% and make them available
+#(define-missing-variables! ssaattbb-variable-names)
+
+#(if TwoVoicesPerStaff
+ ; Set all staves to contain two voices
+     (begin
+      (set! AltoTwoVoicesPerStaff #t)
+      (set! BassTwoVoicesPerStaff #t)
+      (set! MenTwoVoicesPerStaff #t)
+      (set! SopranoTwoVoicesPerStaff #t)
+      (set! TenorTwoVoicesPerStaff #t)
+      (set! WomenTwoVoicesPerStaff #t)))
+
+#(define (set-default-instr-names! voice)
+; If the several instrument names and short instrument
+; names have not been defined by the user, set them to
+; the defaults "Soprano 1" and "S 1" etc with the same names
+; in a column for the divided staves"
+   (define (make-sym str1 str2)
+     (string->symbol (string-append str1 str2)))
+
+   (if (not (make-id voice "OneInstrumentName"))
+       (ly:parser-define!
+         (make-sym voice "OneInstrumentName")
+          (string-append voice " 1")))
+   (if (not (make-id voice "TwoInstrumentName"))
+       (ly:parser-define!
+         (make-sym voice "TwoInstrumentName")
+          (string-append voice " 2")))
+   (if (not (make-id voice "DividedInstrumentName"))
+       (ly:parser-define!
+         (make-sym voice "DividedInstrumentName")
+         #{ \markup \right-column \smallCaps {
+           #(if (make-id voice "OneMusic")
+                  (make-id voice "OneInstrumentName") "")
+           #(if (make-id voice "TwoMusic")
+                (make-id voice "TwoInstrumentName") "") } #} ))
+   (if (not (make-id voice "OneShortInstrumentName"))
+       (ly:parser-define!
+         (make-sym voice "OneShortInstrumentName")
+         (string-append (substring voice 0 1) " 1")))
+   (if (not (make-id voice "TwoShortInstrumentName"))
+       (ly:parser-define!
+         (make-sym voice "TwoShortInstrumentName")
+         (string-append (substring voice 0 1) " 2")))
+   (if (not (make-id voice "DividedShortInstrumentName"))
+       (ly:parser-define!
+         (make-sym voice "DividedShortInstrumentName")
+         #{ \markup \right-column \smallCaps {
+           #(if (make-id voice "OneMusic")
+                (make-id voice "OneShortInstrumentName") "")
+           #(if (make-id voice "TwoMusic")
+                (make-id voice "TwoShortInstrumentName") "") } #} )))
+
+#(set-default-instr-names! "Soprano")
+#(set-default-instr-names! "Alto")
+#(set-default-instr-names! "Tenor")
+#(set-default-instr-names! "Bass")
+
+SSAATTBB =
+<<
+  \make-one-voice-vocal-staff "Solo" "treble"
+  \new ChoirStaff
+  <<
+    \make-one-voice-vocal-staff "Descant" "treble"
+    \make-one-voice-vocal-staff "Women" "treble"
+    #(if SopranoTwoVoicesPerStaff
+         #{ \make-two-voice-vocal-staff "SopranoDivided" "treble" "SopranoOne" "SopranoTwo" #}
+         #{ << \make-one-voice-vocal-staff "SopranoOne" "treble"
+               \make-one-voice-vocal-staff "SopranoTwo" "treble" >> #} )
+    #(if WomenTwoVoicesPerStaff
+         #{ \make-two-voice-vocal-staff "WomenDivided" "treble" "Soprano" "Alto" #}
+         #{ << \make-one-voice-vocal-staff "Soprano" "treble"
+               \make-one-voice-vocal-staff "Alto" "treble" >> #} )
+    #(if AltoTwoVoicesPerStaff
+         #{ \make-two-voice-vocal-staff "AltoDivided" "treble" "AltoOne" "AltoTwo" #}
+         #{ << \make-one-voice-vocal-staff "AltoOne" "treble"
+               \make-one-voice-vocal-staff "AltoTwo" "treble" >> #} )
+    #(if TenorTwoVoicesPerStaff
+         #{ \make-two-voice-vocal-staff "TenorDivided" "treble_8" "TenorOne" "TenorTwo" #}
+         #{ << \make-one-voice-vocal-staff "TenorOne" "treble_8"
+               \make-one-voice-vocal-staff "TenorTwo" "treble_8" >> #} )
+    #(if MenTwoVoicesPerStaff
+         #{ \make-two-voice-vocal-staff "MenDivided" "bass" "Tenor" "Bass" #}
+         #{ << \make-one-voice-vocal-staff "Tenor" "treble_8"
+               \make-one-voice-vocal-staff "Bass" "bass" >> #} )
+    #(if BassTwoVoicesPerStaff
+         #{ \make-two-voice-vocal-staff "BassDivided" "bass" "BassOne" "BassTwo" #}
+         #{ << \make-one-voice-vocal-staff "BassOne" "bass"
+               \make-one-voice-vocal-staff "BassTwo" "bass" >> #} )
+    \make-one-voice-vocal-staff "Men" "bass"
+  >>
+>>
+
+Piano = \make-pianostaff
+
+\tagGroup #'(print play)
+
+\layout {
+  \context {
+    \Staff
+    \override VerticalAxisGroup.remove-empty = ##t
+    \override VerticalAxisGroup.remove-first = ##t
+  }
+}
+
+\score {
+  \keepWithTag #'print
+  #(if have-music
+       #{ << \SSAATTBB \Piano >> #}
+       #{ { } #} )
+  \layout { $(if Layout Layout) }
+}
+
+
+\score {
+  \keepWithTag #'play
+  #(if have-music
+       #{ << \SSAATTBB \Piano >> #}
+       #{ { } #} )
+  \midi {
+    \context {
+      \Score
+      midiChannelMapping = #'instrument
+    }
+  }
+}