From: Trevor Daniels Date: Sat, 1 Aug 2015 20:27:40 +0000 (+0100) Subject: Issue 4528/1 Add ly/ssaattbb.ly built-in template X-Git-Tag: release/2.19.25-1~7 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=294da7e0401eb017dfb7f23a68e5b26b04cefb5a;p=lilypond.git Issue 4528/1 Add ly/ssaattbb.ly built-in template --- diff --git a/ly/ssaattbb.ly b/ly/ssaattbb.ly new file mode 100644 index 0000000000..9efd6c1bbe --- /dev/null +++ b/ly/ssaattbb.ly @@ -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 + } + } +}