X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ly%2Fsatb.ly;h=a8ae1347acdb6706b54ab9997ebf677da057a5a6;hb=af709b0a29faa38843c480d03a1d490b2a03c20e;hp=19257c5b697d2527e68571012eadb7fae7117b02;hpb=22ea3eb6b78a50784ae02c3f29060e1c093262a4;p=lilypond.git diff --git a/ly/satb.ly b/ly/satb.ly index 19257c5b69..a8ae1347ac 100644 --- a/ly/satb.ly +++ b/ly/satb.ly @@ -1,3 +1,5 @@ +%\version "2.19.17" + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% Accompanied Choir with Multiple Verses %% @@ -27,8 +29,10 @@ \paper { ... } \header { ... } + TwoVoicesPerStaff = ##f or ##t Key = { ... } Time = { ... } + Layout = \layout { ... } DescantMusic = \relative { ... } DescantLyrics = \lyricmode { ... } SopranoMusic = \relative { ... } @@ -46,7 +50,6 @@ PianoRHMusic = \relative { ... } PianoDynamics = { ... } PianoLHMusic = \relative { ... } - TwoVoicesPerStaff = ##f \include "satb.ly" All of the definitions are optional. Staves with no music will be @@ -64,93 +67,123 @@ %} -#(defmacro defaulting (name . default) - (if (defined? name) name (if (pair? default) (car default) '#{#}))) +#(defmacro satb-defaulting (name . default) + (if (defined? name) name (if (pair? default) (car default) *unspecified*))) -#(define (sym . strings) (string->symbol (apply string-append strings))) +#(define (satb-sym . strings) (string->symbol (apply string-append strings))) -#(defmacro short-name (part) +#(defmacro satb-short-name (part) "Use PartShortInstrumentName, or the first letter of PartInstrumentName or its default." - (if (defined? (sym part "Music")) - (let ((sname (sym part "ShortInstrumentName"))) + (if (defined? (satb-sym part "Music")) + (let ((sname (satb-sym part "ShortInstrumentName"))) (if (defined? sname) sname - `(substring (defaulting ,(sym part "InstrumentName") ,part) - 0 1))) + `(substring (satb-defaulting ,(satb-sym part "InstrumentName") ,part) + 0 1))) "")) -#(defmacro lyrics-if-defined (name voice . optionals) - (let ((above (if (pair? optionals) (car optionals) #f))) +#(defmacro satb-lyrics-if-defined (name voice . optionals) + (let ((above (and (pair? optionals) (car optionals)))) (if (defined? name) `(make-music 'ContextSpeccedMusic - 'create-new #t - 'context-type 'Lyrics - 'property-operations ',(if above `((assign alignAboveContext ,above)) '()) - 'element (make-music 'LyricCombineMusic - 'associated-context ,voice - 'element ,name)) - #{#}))) - -#(defmacro one-voice-staff (name clef) + 'create-new #t + 'context-type 'Lyrics + 'property-operations ',(if above `((assign alignAboveContext ,above)) '()) + 'element (make-music 'LyricCombineMusic + 'associated-context ,voice + 'element ,name)) + *unspecified*))) + +#(defmacro satb-one-voice-staff (name clef) `#{ << - \new Staff = #(identity ,name) \with { + \new Staff = #,name \with { instrumentName = \markup \smallCaps - #(defaulting ,(sym name "InstrumentName") ,name) - shortInstrumentName = \markup \smallCaps #(short-name ,name) + #(satb-defaulting ,(satb-sym name "InstrumentName") ,name) + shortInstrumentName = \markup \smallCaps #(satb-short-name ,name) midiInstrument = "clarinet" } { - #(defaulting Key) - \clef #(identity ,clef) - \new Voice = #(identity ,name) << - #(defaulting Time) - \dynamicUp - #(defaulting ,(sym name "Music")) + #(satb-defaulting Key) + \clef #,clef + \new Voice = #,name << + \satb-spacers + #(satb-defaulting Time) + \dynamicUp + #(satb-defaulting ,(satb-sym name "Music")) >> } - #(lyrics-if-defined ,(sym name "Lyrics") ,name) - #(lyrics-if-defined ,(sym name "LyricsOne") ,name) - #(lyrics-if-defined ,(sym name "LyricsTwo") ,name) - #(lyrics-if-defined ,(sym name "LyricsThree") ,name) + #(satb-lyrics-if-defined ,(satb-sym name "Lyrics") ,name) + #(satb-lyrics-if-defined ,(satb-sym name "LyricsOne") ,name) + #(satb-lyrics-if-defined ,(satb-sym name "LyricsTwo") ,name) + #(satb-lyrics-if-defined ,(satb-sym name "LyricsThree") ,name) >> #}) -#(defmacro two-voice-staff (name clef v1name v2name) +#(defmacro satb-two-voice-staff (name clef v1name v2name) `#{ << - \new Staff = #(identity ,name) \with { + \new Staff = #,name \with { instrumentName = \markup \right-column \smallCaps { - #(defaulting ,(sym v1name "InstrumentName") ,v1name) - #(defaulting ,(sym v2name "InstrumentName") ,v2name) + #(satb-defaulting ,(satb-sym v1name "InstrumentName") ,v1name) + #(satb-defaulting ,(satb-sym v2name "InstrumentName") ,v2name) } shortInstrumentName = \markup \right-column \smallCaps { - #(short-name ,v1name) - #(short-name ,v2name) + #(satb-short-name ,v1name) + #(satb-short-name ,v2name) } midiInstrument = "clarinet" } << - #(defaulting Key) - \clef #(identity ,clef) - \new Voice = #(identity ,v1name) << - #(defaulting Time) - \voiceOne - \dynamicUp - #(defaulting ,(sym v1name "Music")) + #(satb-defaulting Key) + \clef #,clef + \new Voice = #,v1name << + \satb-spacers + #(satb-defaulting Time) + \voiceOne + \dynamicUp + #(satb-defaulting ,(satb-sym v1name "Music")) >> - \new Voice = #(identity ,v2name) << - #(defaulting Time) - \voiceTwo - #(defaulting ,(sym v2name "Music")) + \new Voice = #,v2name << + \satb-spacers + #(satb-defaulting Time) + \voiceTwo + #(satb-defaulting ,(satb-sym v2name "Music")) >> >> - #(lyrics-if-defined ,(sym v1name "Lyrics") ,v1name ,name) - #(lyrics-if-defined ,(sym v1name "LyricsOne") ,v1name ,name) - #(lyrics-if-defined ,(sym v1name "LyricsTwo") ,v1name ,name) - #(lyrics-if-defined ,(sym v1name "LyricsThree") ,v1name ,name) - #(lyrics-if-defined ,(sym v2name "Lyrics") ,v2name) - #(lyrics-if-defined ,(sym v2name "LyricsOne") ,v2name) - #(lyrics-if-defined ,(sym v2name "LyricsTwo") ,v2name) - #(lyrics-if-defined ,(sym v2name "LyricsThree") ,v2name) + #(satb-lyrics-if-defined ,(satb-sym v1name "Lyrics") ,v1name ,name) + #(satb-lyrics-if-defined ,(satb-sym v1name "LyricsOne") ,v1name ,name) + #(satb-lyrics-if-defined ,(satb-sym v1name "LyricsTwo") ,v1name ,name) + #(satb-lyrics-if-defined ,(satb-sym v1name "LyricsThree") ,v1name ,name) + #(satb-lyrics-if-defined ,(satb-sym v2name "Lyrics") ,v2name) + #(satb-lyrics-if-defined ,(satb-sym v2name "LyricsOne") ,v2name) + #(satb-lyrics-if-defined ,(satb-sym v2name "LyricsTwo") ,v2name) + #(satb-lyrics-if-defined ,(satb-sym v2name "LyricsThree") ,v2name) >> #}) +satb-define-if-unused = +#(define-void-function (parser location syms) (symbol-list?) + (for-each + (lambda (sym) + (if (null? (ly:parser-lookup parser sym)) + (ly:parser-define! parser sym *unspecified*))) + syms)) + +\satb-define-if-unused + #'( + DescantMusic + SopranoMusic + AltoMusic + TenorMusic + BassMusic + ) + +satb-AllChoirMusic = << + \DescantMusic + \SopranoMusic + \AltoMusic + \TenorMusic + \BassMusic +>> + +#(define satb-spacers (skip-of-length satb-AllChoirMusic)) + SATB = << \new ChoirStaff \with { @@ -158,67 +191,70 @@ SATB = << \override VerticalAxisGroup.remove-first = ##t } << - #(one-voice-staff "Descant" "treble") - - #(if (defaulting TwoVoicesPerStaff #f) - (two-voice-staff "Women" "treble" "Soprano" "Alto") - (make-simultaneous-music (list (one-voice-staff "Soprano" "treble") - (one-voice-staff "Alto" "treble")))) - - #(lyrics-if-defined VerseOne "Soprano") - #(lyrics-if-defined VerseTwo "Soprano") - #(lyrics-if-defined VerseThree "Soprano") - #(lyrics-if-defined VerseFour "Soprano") - #(lyrics-if-defined VerseFive "Soprano") - #(lyrics-if-defined VerseSix "Soprano") - #(lyrics-if-defined VerseSeven "Soprano") - #(lyrics-if-defined VerseEight "Soprano") - #(lyrics-if-defined VerseNine "Soprano") - - #(if (defaulting TwoVoicesPerStaff #f) - (two-voice-staff "Men" "bass" "Tenor" "Bass") - (make-simultaneous-music (list (one-voice-staff "Tenor" "treble_8") - (one-voice-staff "Bass" "bass")))) + #(satb-one-voice-staff "Descant" "treble") + + #(if (satb-defaulting TwoVoicesPerStaff #f) + (satb-two-voice-staff "Women" "treble" "Soprano" "Alto") + (make-simultaneous-music (list (satb-one-voice-staff "Soprano" "treble") + (satb-one-voice-staff "Alto" "treble")))) + + #(satb-lyrics-if-defined VerseOne "Soprano") + #(satb-lyrics-if-defined VerseTwo "Soprano") + #(satb-lyrics-if-defined VerseThree "Soprano") + #(satb-lyrics-if-defined VerseFour "Soprano") + #(satb-lyrics-if-defined VerseFive "Soprano") + #(satb-lyrics-if-defined VerseSix "Soprano") + #(satb-lyrics-if-defined VerseSeven "Soprano") + #(satb-lyrics-if-defined VerseEight "Soprano") + #(satb-lyrics-if-defined VerseNine "Soprano") + + #(if (satb-defaulting TwoVoicesPerStaff #f) + (satb-two-voice-staff "Men" "bass" "Tenor" "Bass") + (make-simultaneous-music (list (satb-one-voice-staff "Tenor" "treble_8") + (satb-one-voice-staff "Bass" "bass")))) >> % End ChoirStaff \new PianoStaff \with { instrumentName = \markup \smallCaps - #(defaulting PianoInstrumentName "Piano" ) - shortInstrumentName = \markup \smallCaps #(short-name "Piano" ) + #(satb-defaulting PianoInstrumentName "Piano" ) + shortInstrumentName = \markup \smallCaps #(satb-short-name "Piano" ) \override VerticalAxisGroup.remove-empty = ##t \override VerticalAxisGroup.remove-first = ##t } << \new Staff { \clef "treble" - #(defaulting Key) + #(satb-defaulting Key) \new Voice << - #(defaulting Time) - #(defaulting PianoRHMusic) + \satb-spacers + #(satb-defaulting Time) + #(satb-defaulting PianoRHMusic) >> } \new Dynamics { - #(defaulting PianoDynamics) + #(satb-defaulting PianoDynamics) } \new Staff { \clef "bass" - #(defaulting Key) + #(satb-defaulting Key) \new Voice << - #(defaulting Time) - #(defaulting PianoLHMusic) + \satb-spacers + #(satb-defaulting Time) + #(satb-defaulting PianoLHMusic) >> } >> >> +\tagGroup #'(print play) + \score { \keepWithTag #'print \SATB - \layout { #(defaulting Layout) } + \layout { $(satb-defaulting Layout) } } \score { \keepWithTag #'play \SATB \midi { } } -