From 9d0fb230aebc6800cec42a3c84dd5c9a606aa5e7 Mon Sep 17 00:00:00 2001 From: Tucker Johnson Date: Thu, 19 Mar 2026 22:01:59 -0400 Subject: [PATCH 1/1] init --- .gitignore | 7 ++ general/info.ly | 52 ++++++++ general/partLayout.ly | 74 +++++++++++ general/partPaper.ly | 117 ++++++++++++++++++ general/scoreLayout.ly | 67 ++++++++++ general/scorePaper.ly | 130 ++++++++++++++++++++ lib/dynamics.ly | 54 ++++++++ lib/formatting.ly | 91 ++++++++++++++ lib/load.ly | 6 + lib/matter.ly | 224 ++++++++++++++++++++++++++++++++++ lib/notes.ly | 74 +++++++++++ lib/spanners.ly | 71 +++++++++++ lib/text.ly | 17 +++ manuscripts/cello.ly | 60 +++++++++ manuscripts/tempoMap.ly | 27 ++++ manuscripts/viola.ly | 59 +++++++++ manuscripts/violin1.ly | 62 ++++++++++ manuscripts/violin2.ly | 57 +++++++++ parts/parts_string-quartet.ly | 84 +++++++++++++ string-quartet.ly | 65 ++++++++++ 20 files changed, 1398 insertions(+) create mode 100644 .gitignore create mode 100644 general/info.ly create mode 100644 general/partLayout.ly create mode 100644 general/partPaper.ly create mode 100644 general/scoreLayout.ly create mode 100644 general/scorePaper.ly create mode 100644 lib/dynamics.ly create mode 100644 lib/formatting.ly create mode 100644 lib/load.ly create mode 100644 lib/matter.ly create mode 100644 lib/notes.ly create mode 100644 lib/spanners.ly create mode 100644 lib/text.ly create mode 100644 manuscripts/cello.ly create mode 100644 manuscripts/tempoMap.ly create mode 100644 manuscripts/viola.ly create mode 100644 manuscripts/violin1.ly create mode 100644 manuscripts/violin2.ly create mode 100644 parts/parts_string-quartet.ly create mode 100644 string-quartet.ly diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45e83ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.pdf +*.ps +*.midi +*.mid +*.log +*~ +.DS_Store diff --git a/general/info.ly b/general/info.ly new file mode 100644 index 0000000..63ea67a --- /dev/null +++ b/general/info.ly @@ -0,0 +1,52 @@ +xtitle = \markup { Four Bays } +xsub = \markup { "points, islands, and coves of the Avalon Peninsula" } +xcomp = \markup { Tucker Johnson } +xinst = \markup { string quartet } +xdur = \markup { \sans "~7" "minutes" } +xyear = \markup { 2026 } +xcr = \markup \tiny { Copyright Umbel Press \concat { \sans \xyear "." } All Rights Reserved (ASCAP) } + + +programNotes = +\markuplist { \justify { + \italic "String Quartet" +} } + +performanceNotes = +\markuplist { + \left-column { + \override #'(line-width . 100) + \line { \hspace #100 } + \wordwrap { § \hspace #3.5 \sans \bold \italic "interpreting notations" } + } + \left-column { + \override #'(line-width . 90) + \line { \hspace #90 } + \justify { + \sans \italic 1. \hspace #1 Accidentals carry through each + bar – cautionary accidentals added for clarification. + } + \override #'(line-width . 90) + \justify { + \sans \italic 2. \hspace #1 Two fermata notations are used: a + \italic short fermata ( \musicglyph "scripts.ushortfermata" ) and a + \italic long fermata ( \musicglyph "scripts.ufermata" ). + } + \override #'(line-width . 90) + \justify { + \sans \italic 3. \hspace #1 Dotted slurs are used to indicate phrasing that may not be clear through dynamics and other notations. + } + \override #'(line-width . 90) + \justify { + \sans \italic 4. \hspace #1 Clusters should contain all of the + chromatic notes between the upper and lower limit of the + cluster-span. + } + \override #'(line-width . 90) + \justify { + \sans \italic 5. \hspace #1 Cadenza notation should be interpreted + freely, though music should be continuous between breath marks and + rests. Breath marks indicate a short break, while rests are longer. + } + } +} diff --git a/general/partLayout.ly b/general/partLayout.ly new file mode 100644 index 0000000..52bf488 --- /dev/null +++ b/general/partLayout.ly @@ -0,0 +1,74 @@ +\layout { + \context { + \Score + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16) + \override InstrumentName.self-alignment-X = 1 + \override RehearsalMark.break-visibility = #begin-of-line-invisible + \override Hairpin.to-barline = ##f + \overrideTimeSignatureSettings 4/4 1/4 1,1,1,1 #'() + \overrideTimeSignatureSettings 3/4 1/4 1,1,1 #'() + \overrideTimeSignatureSettings 5/8 1/8 2,3 #'() + \override BarNumber.font-name = "classico" + \phrasingSlurDashPattern #0.5 #2.0 + \override PhrasingSlur.thickness = 0.5 + \override StaffSymbol.layer = #4 + \override Stem.layer = #4 + \override Beam.layer = #4 + \override Hairpin.layer = #4 + \override TimeSignature.layer = #2 + \override Tie.layer = #1 + \override TupletBracket.layer = #2 + \override StringNumber.layer = #2 + \override TextSpanner.layer = #3 + \override NoteHead.layer = #4 + \override Accidental.layer = #4 + \override TimeSignature.whiteout = 2 + \override Fermata.outside-staff-priority = 200 + \numericTimeSignature + \romanStringNumbers + \override TupletNumber.layer = 4 + \override TupletNumber.font-shape = #'upright + rehearsalMarkFormatter = #rounded-measure-number-mark + \remove Text_mark_engraver + \remove Mark_engraver + \remove Metronome_mark_engraver + \remove Instrument_name_engraver + \override MultiMeasureRest.expand-limit = 1 + \override RehearsalMark.break-visibility = #(vector #f #t #t) + quotedCueEventTypes = #'(note-event rest-event tie-event beam-event tuplet-span-event) + + %\override PaperColumn.show-horizontal-skylines = ##t + %\override NonMusicalPaperColumn.show-horizontal-skylines = ##t + %\override VerticalAxisGroup.show-vertical-skylines = ##t + %\override System.show-vertical-skylines = ##t + %\override PaperColumn.show-horizontal-skylines = ##t + %\override VerticalAlignment.show-vertical-skylines = ##t + + } + \context { + \Staff + \consists Page_turn_engraver + minimumPageTurnLength = #(ly:make-moment 5/2) + \consists Metronome_mark_engraver + \remove Instrument_name_engraver + \consists Text_mark_engraver + pedalSustainStyle = #'bracket + } + \context { + \OneStaff + \remove Instrument_name_engraver + \consists Time_signature_engraver + \remove Clef_engraver + } + \context { + \GrandStaff + \remove Instrument_name_engraver + \override StaffGrouper.staff-staff-spacing = #'( + (basic-distance . 3) + (padding . 2)) + } + \context { + \Voice + \remove Instrument_name_engraver + } +} diff --git a/general/partPaper.ly b/general/partPaper.ly new file mode 100644 index 0000000..0e6a7ef --- /dev/null +++ b/general/partPaper.ly @@ -0,0 +1,117 @@ +\paper { + line-width = 120 + #(include-special-characters) + footnote-separator-markup = \markup { \left-column { \vspace #0.5 \draw-line #'(6 . 0) } } + print-page-number = ##f + page-breaking = #ly:page-turn-breaking + #(set-paper-size "arch a") + print-all-headers = ##f + top-margin = 0.5\in + bottom-margin = 0.5\in + left-margin = 0.625\in + right-margin = 0.625\in + indent = 0.75\in + short-indent = 0\cm + ragged-last = ##t + #(define fonts (set-global-fonts #:music "scorlatti" #:brace "scorlatti" #:roman "Junicode" #:sans "sans")) + max-systems-per-page = #8 + min-systems-per-page = #2 + markup-system-spacing = #'((basic-distance . 2) (minimum-distance . 1) (padding . 2)) + system-system-spacing = #'((basic-distance . 5) (minimum-distance . 3) (padding . 8)) + score-markup-spacing = #'((basic-distance . 4) (minimum-distance . 3) (padding . 4)) + score-system-spacing = #'((basic-distance . 0) (minimum-distance . 0) (padding . 0)) + last-bottom-spacing = #'((basic-distance . 4) (minimum-distance . 2) (padding . 5)) + tocTitleMarkup = \markup { } + tocItemMarkup = \markup \fill-line { + \fill-with-pattern #1.5 #CENTER . + \line { + \fromproperty #'toc:indent \fromproperty #'toc:text + } + \sans \fromproperty #'toc:page + } + + oddHeaderMarkup = \markup { + \concat { \if \on-page #3 \oddhead } + \concat { \if \on-page #5 \oddhead } + \concat { \if \on-page #7 \oddhead } + \concat { \if \on-page #9 \oddhead } + \concat { \if \on-page #11 \oddhead } + \concat { \if \on-page #13 \oddhead } + \concat { \if \on-page #15 \oddhead } + \concat { \if \on-page #19 \oddhead } + \concat { \if \on-page #21 \oddhead } + \concat { \if \on-page #23 \oddhead } + \concat { \if \on-page #25 \oddhead } + \concat { \if \on-page #27 \oddhead } + \concat { \if \on-page #29 \oddhead } + \concat { \if \on-page #31 \oddhead } + \concat { \if \on-page #33 \oddhead } + \concat { \if \on-page #35 \oddhead } + \concat { \if \on-page #37 \oddhead } + \concat { \if \on-page #39 \oddhead } + + } + evenHeaderMarkup = \markup { + \concat { \if \on-page #2 \evhead } + \concat { \if \on-page #4 \evhead } + \concat { \if \on-page #6 \evhead } + \concat { \if \on-page #8 \evhead } + \concat { \if \on-page #10 \evhead } + \concat { \if \on-page #12 \evhead } + \concat { \if \on-page #14 \evhead } + \concat { \if \on-page #16 \evhead } + \concat { \if \on-page #18 \evhead } + \concat { \if \on-page #20 \evhead } + \concat { \if \on-page #22 \evhead } + \concat { \if \on-page #24 \evhead } + \concat { \if \on-page #26 \evhead } + \concat { \if \on-page #28 \evhead } + \concat { \if \on-page #30 \evhead } + \concat { \if \on-page #32 \evhead } + \concat { \if \on-page #34 \evhead } + \concat { \if \on-page #36 \evhead } + \concat { \if \on-page #38 \evhead } + } + oddFooterMarkup = \markup { + \concat { \if \on-page #1 \fill-line { \null \xcr \null } } + \concat { \if \on-page #3 \oddfoot } + \concat { \if \on-page #5 \oddfoot } + \concat { \if \on-page #7 \oddfoot } + \concat { \if \on-page #9 \oddfoot } + \concat { \if \on-page #11 \oddfoot } + \concat { \if \on-page #13 \oddfoot } + \concat { \if \on-page #15 \oddfoot } + \concat { \if \on-page #19 \oddfoot } + \concat { \if \on-page #21 \oddfoot } + \concat { \if \on-page #23 \oddfoot } + \concat { \if \on-page #25 \oddfoot } + \concat { \if \on-page #27 \fill-line { \null \concat { \char ##x2767 " " \tiny \typewriter \longHash " " \char ##x2619 } \null } } + \concat { \if \on-page #29 \oddfoot } + \concat { \if \on-page #31 \oddfoot } + \concat { \if \on-page #33 \oddfoot } + \concat { \if \on-page #35 \oddfoot } + \concat { \if \on-page #37 \oddfoot } + \concat { \if \on-page #39 \oddfoot } + } + evenFooterMarkup = \markup { + \concat { \if \on-page #2 \evfoot } + \concat { \if \on-page #4 \evfoot } + \concat { \if \on-page #6 \evfoot } + \concat { \if \on-page #8 \evfoot } + \concat { \if \on-page #10 \evfoot } + \concat { \if \on-page #12 \evfoot } + \concat { \if \on-page #14 \evfoot } + \concat { \if \on-page #16 \evfoot } + \concat { \if \on-page #18 \evfoot } + \concat { \if \on-page #20 \evfoot } + \concat { \if \on-page #22 \evfoot } + \concat { \if \on-page #24 \evfoot } + \concat { \if \on-page #26 \evfoot } + \concat { \if \on-page #28 \evfoot } + \concat { \if \on-page #30 \evfoot } + \concat { \if \on-page #32 \evfoot } + \concat { \if \on-page #34 \evfoot } + \concat { \if \on-page #36 \evfoot } + \concat { \if \on-page #38 \evfoot } + } +} diff --git a/general/scoreLayout.ly b/general/scoreLayout.ly new file mode 100644 index 0000000..a7a50b7 --- /dev/null +++ b/general/scoreLayout.ly @@ -0,0 +1,67 @@ +\layout { + \context { + \Score + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/14) + \override InstrumentName.self-alignment-X = 1 + \override RehearsalMark.break-visibility = #begin-of-line-invisible + \override Hairpin.to-barline = ##f + \overrideTimeSignatureSettings 4/4 1/4 1,1,1,1 #'() + \overrideTimeSignatureSettings 3/4 1/4 1,1,1 #'() + \overrideTimeSignatureSettings 5/8 1/8 2,3 #'() + \override CenteredBarNumber.font-name = "classico" + \phrasingSlurDashPattern #0.5 #2.0 + \override PhrasingSlur.thickness = 0.5 + \override StaffSymbol.layer = #4 + \override Stem.layer = #4 + \override Beam.layer = #4 + \override Hairpin.layer = #4 + \override TimeSignature.layer = #2 + \override Tie.layer = #1 + \override TupletBracket.layer = #2 + \override StringNumber.layer = #2 + \override TextSpanner.layer = #3 + \override NoteHead.layer = #4 + \override Accidental.layer = #4 + \override TimeSignature.whiteout = 2 + \override TextScript.padding = 1 + \override TextScript.layer = #4 + \override TextScript.whiteout = 2 + \override Fermata.outside-staff-priority = 200 + \numericTimeSignature + \romanStringNumbers + \override TupletNumber.layer = 4 + \override TupletNumber.font-shape = #'upright + centerBarNumbers = ##t + barNumberVisibility = #all-bar-numbers-visible + rehearsalMarkFormatter = #rounded-measure-number-mark + \override RehearsalMark.break-visibility = #(vector #f #t #t) + \override SectionLabel.break-visibility = #(vector #f #t #t) + \override CenteredBarNumber.stencil = #(make-stencil-boxer 0.1 0.25 ly:text-interface::print) + \override CenteredBarNumberLineSpanner.direction = #DOWN + \remove Text_mark_engraver + \remove Mark_engraver + \remove Metronome_mark_engraver + + %\override PaperColumn.show-horizontal-skylines = ##t + %\override NonMusicalPaperColumn.show-horizontal-skylines = ##t + %\override VerticalAxisGroup.show-vertical-skylines = ##t + %\override System.show-vertical-skylines = ##t + %\override PaperColumn.show-horizontal-skylines = ##t + %\override VerticalAlignment.show-vertical-skylines = ##t + + } + \context { + \Staff + \consists Metronome_mark_engraver + \consists Text_mark_engraver + pedalSustainStyle = #'bracket + } + \context { + \OneStaff + \consists Instrument_name_engraver + \consists Time_signature_engraver + } + \context { + \Voice + } +} diff --git a/general/scorePaper.ly b/general/scorePaper.ly new file mode 100644 index 0000000..b8c5089 --- /dev/null +++ b/general/scorePaper.ly @@ -0,0 +1,130 @@ +\paper { + line-width = 120 + first-page-number = -1 + #(include-special-characters) + footnote-separator-markup = \markup { \left-column { \vspace #0.5 \draw-line #'(6 . 0) } } + print-page-number = ##f + #(set-paper-size "arch a") + print-all-headers = ##f + top-margin = 0.5\in + bottom-margin = 0.5\in + left-margin = 0.9\in + right-margin = 0.9\in + ragged-last = ##t + indent = 0.75\in + short-indent = 0\cm + #(define fonts (set-global-fonts #:music "scorlatti" #:brace "scorlatti" #:roman "Junicode" #:sans "sans")) + max-systems-per-page = #10 + system-system-spacing = #'((basic-distance . 10) (minimum-distance . 8) (padding . 12)) + score-system-spacing = #'((basic-distance . 2) (minimum-distance . 1) (padding . 0)) + last-bottom-spacing = #'((basic-distance . 5) (minimum-distance . 5) (padding . 0)) + tocTitleMarkup = \markup { } + tocItemMarkup = \markup \fill-line { + \fill-with-pattern #1.5 #CENTER . + \line { + \fromproperty #'toc:indent \fromproperty #'toc:text + } + \sans \fromproperty #'toc:page + } + + oddHeaderMarkup = \markup { + \concat { \if \on-page #5 \oddhead } + \concat { \if \on-page #7 \oddhead } + \concat { \if \on-page #9 \oddhead } + \concat { \if \on-page #11 \oddhead } + \concat { \if \on-page #13 \oddhead } + \concat { \if \on-page #15 \oddhead } + \concat { \if \on-page #17 \oddhead } + \concat { \if \on-page #19 \oddhead } + \concat { \if \on-page #21 \oddhead } + \concat { \if \on-page #23 \oddhead } + \concat { \if \on-page #25 \oddhead } + \concat { \if \on-page #27 \oddhead } + \concat { \if \on-page #29 \oddhead } + \concat { \if \on-page #31 \oddhead } + \concat { \if \on-page #33 \oddhead } + \concat { \if \on-page #35 \oddhead } + \concat { \if \on-page #37 \oddhead } + \concat { \if \on-page #39 \oddhead } + \concat { \if \on-page #41 \oddhead } + \concat { \if \on-page #43 \oddhead } + \concat { \if \on-page #45 \oddhead } + \concat { \if \on-page #47 \oddhead } + + } + evenHeaderMarkup = \markup { + \concat { \if \on-page #4 \evhead } + \concat { \if \on-page #6 \evhead } + \concat { \if \on-page #8 \evhead } + \concat { \if \on-page #10 \evhead } + \concat { \if \on-page #12 \evhead } + \concat { \if \on-page #14 \evhead } + \concat { \if \on-page #16 \evhead } + \concat { \if \on-page #18 \evhead } + \concat { \if \on-page #20 \evhead } + \concat { \if \on-page #22 \evhead } + \concat { \if \on-page #24 \evhead } + \concat { \if \on-page #26 \evhead } + \concat { \if \on-page #28 \evhead } + \concat { \if \on-page #30 \evhead } + \concat { \if \on-page #32 \evhead } + \concat { \if \on-page #34 \evhead } + \concat { \if \on-page #36 \evhead } + \concat { \if \on-page #38 \evhead } + \concat { \if \on-page #40 \evhead } + \concat { \if \on-page #42 \evhead } + \concat { \if \on-page #44 \evhead } + \concat { \if \on-page #46 \evhead } + } + oddFooterMarkup = \markup { + \concat { \if \on-page #3 \fill-line { \null \xcr \null } } + \concat { \if \on-page #5 \oddfoot } + \concat { \if \on-page #7 \oddfoot } + \concat { \if \on-page #9 \oddfoot } + \concat { \if \on-page #11 \oddfoot } + \concat { \if \on-page #13 \oddfoot } + \concat { \if \on-page #15 \oddfoot } + \concat { \if \on-page #17 \oddfoot } + \concat { \if \on-page #19 \oddfoot } + \concat { \if \on-page #21 \oddfoot } + \concat { \if \on-page #23 \oddfoot } + \concat { \if \on-page #25 \oddfoot } + \concat { \if \on-page #27 \oddfoot } + \concat { \if \on-page #29 \oddfoot } + \concat { \if \on-page #31 \oddfoot } + \concat { \if \on-page #33 \oddfoot } + \concat { \if \on-page #35 \oddfoot } + \concat { \if \on-page #37 \oddfoot } + \concat { \if \on-page #39 \oddfoot } + \concat { \if \on-page #41 \oddfoot } + \concat { \if \on-page #43 \oddfoot } + \concat { \if \on-page #45 \oddfoot } + \concat { \if \on-page #47 \oddfoot } + } + evenFooterMarkup = \markup { + \concat { \if \on-page #2 \evfoot } + \concat { \if \on-page #4 \evfoot } + \concat { \if \on-page #6 \evfoot } + \concat { \if \on-page #8 \evfoot } + \concat { \if \on-page #10 \evfoot } + \concat { \if \on-page #12 \evfoot } + \concat { \if \on-page #14 \evfoot } + \concat { \if \on-page #16 \evfoot } + \concat { \if \on-page #18 \evfoot } + \concat { \if \on-page #20 \evfoot } + \concat { \if \on-page #22 \evfoot } + \concat { \if \on-page #24 \evfoot } + \concat { \if \on-page #26 \evfoot } + \concat { \if \on-page #28 \evfoot } + \concat { \if \on-page #30 \evfoot } + \concat { \if \on-page #32 \evfoot } + \concat { \if \on-page #34 \evfoot } + \concat { \if \on-page #36 \evfoot } + \concat { \if \on-page #38 \evfoot } + \concat { \if \on-page #40 \evfoot } + \concat { \if \on-page #42 \evfoot } + \concat { \if \on-page #44 \evfoot } + \concat { \if \on-page #46 \evfoot } + \concat { \if \on-page #48 \fill-line { \null \concat { \char ##x2767 " " \tiny \typewriter \longHash " " \char ##x2619 } \null } } + } +} diff --git a/lib/dynamics.ly b/lib/dynamics.ly new file mode 100644 index 0000000..c0b8a5c --- /dev/null +++ b/lib/dynamics.ly @@ -0,0 +1,54 @@ +ffsempre = +#(make-dynamic-script + (markup + #:combine + #:transparent "f" "ff" + #:combine + #:transparent "f" + #:normal-text + #:italic "sempre" )) + +psempre = +#(make-dynamic-script + (markup + "p" + #:normal-text + #:italic "sempre" )) + +ppsempre = +#(make-dynamic-script + (markup + #:combine + #:transparent "f" "pp" + #:combine + #:transparent "f" + #:normal-text #:italic "sempre" )) + +ppsubito = +#(make-dynamic-script + (markup + #:combine + #:transparent "f" "pp" + #:combine #:transparent "f" + #:normal-text + #:italic "subito" )) + +psubito = +#(make-dynamic-script + (markup + #:combine + #:transparent "f" "p" + #:combine + #:transparent "f" + #:normal-text + #:italic "subito" )) + +niente = +#(make-dynamic-script + (markup + (#:normal-text #:abs-fontsize 10 #:bold "n"))) + +%spacing +ds = #2.5 +sods = #3.4 +phds = #3.9 diff --git a/lib/formatting.ly b/lib/formatting.ly new file mode 100644 index 0000000..67afc50 --- /dev/null +++ b/lib/formatting.ly @@ -0,0 +1,91 @@ +pseudoIndents = % inline alternative to a new \score, also with right-indent +#(define-music-function (name-tweaks left-indent right-indent) + ((markup-list? '()) number? number?) + (define (warn-stretched p1 p2) (ly:input-warning (*location*) (G_ + " pseudoIndents ~s ~s is stretching staff; expect distorted layout") p1 p2)) + (let* ( + (narrowing (+ left-indent right-indent)) ; of staff implied by args + + (set-staffsymbol! (lambda (staffsymbol-grob) ; change staff to new width + (let* ( + (left-bound (ly:spanner-bound staffsymbol-grob LEFT)) + (left-moment (ly:grob-property left-bound 'when)) + (capo? (moment<=? left-moment ZERO-MOMENT)) ; in first system of score + (layout (ly:grob-layout staffsymbol-grob)) + (lw (ly:output-def-lookup layout 'line-width)) ; debugging info + (indent (ly:output-def-lookup layout (if capo? 'indent 'short-indent))) + (old-stil (ly:staff-symbol::print staffsymbol-grob)) + (staffsymbol-x-ext (ly:stencil-extent old-stil X)) + ;; >=2.19.16's first system has old-stil already narrowed [2] + ;; compensate for this (ie being not pristine) when calculating + ;; - old leftmost-x (its value is needed when setting so-called 'width) + ;; - the new width and position (via local variable narrowing_) + (ss-t (ly:staff-symbol-line-thickness staffsymbol-grob)) + (pristine? (<= 0 (car staffsymbol-x-ext) ss-t)) ; would expect half + (leftmost-x (+ indent (if pristine? 0 narrowing))) + (narrowing_ (if pristine? narrowing 0)) ; uses 0 if already narrowed + (old-width (+ (interval-length staffsymbol-x-ext) ss-t)) + (new-width (- old-width narrowing_)) + (new-rightmost-x (+ leftmost-x new-width)) ; and set! this immediately + (junk (ly:grob-set-property! staffsymbol-grob 'width new-rightmost-x)) + (in-situ-stil (ly:staff-symbol::print staffsymbol-grob)) + (new-stil (ly:stencil-translate-axis in-situ-stil narrowing_ X)) + ;(new-stil (stencil-with-color new-stil red)) ; for when debugging + (new-x-ext (ly:stencil-extent new-stil X))) + (ly:grob-set-property! staffsymbol-grob 'stencil new-stil) + (ly:grob-set-property! staffsymbol-grob 'X-extent new-x-ext) + ))) + + (set-X-offset! (lambda (margin-grob) ; move grob across to line start + (let* ( + (old (ly:grob-property-data margin-grob 'X-offset)) + (new (lambda (grob) (+ (if (procedure? old) (old grob) old) narrowing)))) + (ly:grob-set-property! margin-grob 'X-offset new)))) + + (tweak-text! (lambda (i-name-grob mkup) ; tweak both instrumentname texts + (if (and (markup? mkup) (not (string=? (markup->string mkup) "*"))) + (begin + (ly:grob-set-property! i-name-grob 'long-text mkup) + (ly:grob-set-property! i-name-grob 'text mkup) + )))) ; else retain existing text + + (install-narrowing (lambda (leftedge-grob) ; on staves, + adapt left margin + (let* ( + (sys (ly:grob-system leftedge-grob)) + (all-grobs (ly:grob-array->list (ly:grob-object sys 'all-elements))) + (grobs-named (lambda (name) + (filter (lambda (x) (eq? name (grob::name x))) all-grobs))) + (first-leftedge-grob (list-ref (grobs-named 'LeftEdge) 0)) + (relsys-x-of (lambda (g) (ly:grob-relative-coordinate g sys X))) + (leftedge-x (relsys-x-of first-leftedge-grob)) + (leftedged? (lambda (g) (= (relsys-x-of g) leftedge-x))) + (leftedged-ss (filter leftedged? (grobs-named 'StaffSymbol)))) + (if (eq? leftedge-grob first-leftedge-grob) ; ignore other leftedges [1] + (begin + (for-each set-staffsymbol! leftedged-ss) + (for-each set-X-offset! (grobs-named 'SystemStartBar)) + (for-each set-X-offset! (grobs-named 'InstrumentName)) + (for-each tweak-text! (grobs-named 'InstrumentName) name-tweaks) + )))))) + + (if (negative? narrowing) (warn-stretched left-indent right-indent)) + #{ % and continue anyway + % ensure that these overrides are applied only at begin-of-line + \break % (but this does not exclude unsupported multiple application) + % give the spacing engine notice regarding the loss of width for music + \once \override Score.LeftEdge.X-extent = #(cons narrowing narrowing) + % discard line start region of staff and reassemble left-margin elements + \once \override Score.LeftEdge.after-line-breaking = #install-narrowing + % shift the system to partition the narrowing between left and right + \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details + .X-offset #(- right-indent) + % prevent a leftmost barnumber entering a stretched staff + \once \override Score.BarNumber.horizon-padding = #(max 1 (- 1 narrowing)) + #})) + +pseudoIndent = % for changing just left-indent +#(define-music-function (name-tweaks left-indent) + ((markup-list? '()) number?) + #{ + \pseudoIndents $name-tweaks $left-indent 0 + #}) diff --git a/lib/load.ly b/lib/load.ly new file mode 100644 index 0000000..338be5c --- /dev/null +++ b/lib/load.ly @@ -0,0 +1,6 @@ +\include "dynamics.ly" +\include "formatting.ly" +\include "notes.ly" +\include "spanners.ly" +\include "text.ly" +\include "matter.ly" diff --git a/lib/matter.ly b/lib/matter.ly new file mode 100644 index 0000000..5f03251 --- /dev/null +++ b/lib/matter.ly @@ -0,0 +1,224 @@ +xumbel = +\markup { + \center-column { + \path #0.1 + #'( + (moveto 0 0) + (curveto 1 0.3 3.6 3 4.2 1.6) + (moveto 0 0) + (curveto -1 0.3 -3.6 3 -4.2 1.6) + (moveto 0 0) + (curveto 0.9 0.3 2.9 3 3.5 1.7) + (moveto 0 0) + (curveto -0.9 0.3 -2.9 3 -3.5 1.7) + (moveto 0 0) + (curveto 0.8 0.3 2.2 3 2.8 1.8) + (moveto 0 0) + (curveto -0.8 0.3 -2.2 3 -2.8 1.8) + (moveto 0 0) + (curveto 0.6 0.3 1.5 3 2.1 1.9) + (moveto 0 0) + (curveto -0.6 0.3 -1.5 3 -2.1 1.9) + (moveto 0 0) + (curveto 0.4 0.3 0.8 3 1.4 2) + (moveto 0 0) + (curveto -0.4 0.3 -0.8 3 -1.4 2) + (moveto 0 0) + (curveto 0.2 0.3 0.5 3 0.7 2.1) + (moveto 0 0) + (curveto -0.2 0.3 -0.5 3 -0.7 2.1) + (moveto 0 0) + (lineto 0 2.2) + ) + \vspace #-0.035 + \override #'(height . 0.25) \draw-squiggle-line #1 #'(0 . 5) ##f + \vspace #-0.275 + } +} + +#(define (outside-cover-markuplist bottom-space) + #{ + \markuplist { + \fill-line { + \line { \null } + \center-column { \line { \with-url #"https://newer.systems" \fontsize #1 \hbracket \sans \bold " https://newer.systems " } } + \line { \null } + \line { \null } + \line { \null } + \line { \null } + } + \fill-line { + \line { \null } + \center-column { \line { \null } } + \right-column { + \vspace #15 + \line { \fontsize #8 \bold \underline \xtitle } + \line { \fontsize #3 \sans \xcomp } + \vspace #3 + \line { \fontsize #2 \sans \concat { \xsub } } + } + } + \vspace #bottom-space + \fill-line { + \line { \null } + \line { \null } + \line { \null } + \line { \null } + \center-column { \xumbel \vspace #0.3 \line { \fontsize #1 \hbracket \sans \bold " umbel press " } } + \line { \null } + } + } + #}) + +#(define (inside-cover-markuplist) + #{ + \markuplist { + \fill-line { + \line { \null } + \center-column { + \vspace #10 + \line { \hbracket \fontsize #10 \number \xyear } + \vspace #4 + \line { \xcomp } + \vspace #1 + \line { \fontsize #5 \bold \xtitle } + \line { \italic \xsub } + \vspace #4 + } + \right-column { \line { \null } + } + } + } + #}) + +#(define (info-matter-markuplist) + #{ + \markuplist { + \left-column { + \line { \bold \xtitle \concat { " [" \sans \xyear "]" } } + \line { \xinst " | " \xdur } + \line { \xcomp } + \vspace #25 + } + } + #}) + +#(define (git-matter-markuplist) + #{ + \markuplist { + \right-column { + \vspace #-0.5 + \right-column \fontsize #-1 { + \line { \fontsize #-2 \typewriter { \shortHash - \subject } } + \vspace #-0.4 + \line { \fontsize #-2 \typewriter { \commitDate } } + \vspace #-0.4 + \line { \fontsize #-2 \typewriter { \branchName } } + } + \vspace #2 + } + } + #}) + +#(define (rear-cover-markuplist top-space) + #{ + \markuplist { + \fill-line { + \center-column { + \vspace #top-space + \xumbel + \vspace #0.3 + \line { \with-url #"https://www.jwpepper.com/myscore/umbel-press" \fontsize #-3 \hbracket \sans \bold " https://www.jwpepper.com/myscore/umbel-press " } + } + } + } + #}) + +#(define (toc-markuplist) + #{ + \markuplist { + \left-column { + \override #'(line-width . 100) + \line { \hspace #100 } + \vspace #-1 + \wordwrap { \char ##x10AF1 \hspace #0.5 \large \bold \sans "contents" } + } + \vspace #0.5 + \left-column { + \override #'(line-width . 90) + \table-of-contents + } + \vspace #2.5 + } + #}) + +#(define (program-notes-markuplist notes-markup) + #{ + \markuplist { + \left-column { + \override #'(line-width . 100) + \line { \hspace #100 } + \vspace #-1 + \wordwrap { \char ##x10AF1 \hspace #0.5 \large \bold \sans "program notes" } + } + \vspace #0.5 + \left-column { + \override #'(line-width . 90) + \justify { #notes-markup } + } + \vspace #2.5 + } + #}) + +#(define (performance-notes-markuplist notes-markup) + #{ + \markuplist { + \left-column { + \override #'(line-width . 100) + \line { \hspace #100 } + \vspace #-1 + \wordwrap { \char ##x10AF1 \hspace #0.5 \large \bold \sans "performance notes" } + } + #notes-markup + } + #}) + + +oddhead = +\markup { + \fill-line { + \null + \center-column { \bold { \xcomp } " " } + \null + } +} +evhead = +\markup { + \fill-line { + \null + \center-column { \bold { \xtitle } " " } + \null + } +} +oddfoot = +\markup { + \fill-line { + \null + \center-column { + " " + \concat { \tiny \char ##x1F661 " " \sans \fromproperty #'page:page-number-string " " \tiny \char ##x1F663 } + } + \null + } +} +evfoot = +\markup { + \fill-line { + \null + \center-column { + " " + \concat { \tiny \char ##x1F661 " " \sans \fromproperty #'page:page-number-string " " \tiny \char ##x1F663 } + } + \null + } +} diff --git a/lib/notes.ly b/lib/notes.ly new file mode 100644 index 0000000..55a9275 --- /dev/null +++ b/lib/notes.ly @@ -0,0 +1,74 @@ +harm = +\once \override Staff.NoteHead.style = #'harmonic-mixed + +glissandoSkipOn = +{ + \override NoteColumn.glissando-skip = ##t + \hide NoteHead + \override NoteHead.no-ledgers = ##t +} + +glissandoSkipOff = +{ + \revert NoteColumn.glissando-skip + \undo \hide NoteHead + \revert NoteHead.no-ledgers +} + +circle = \tweak NoteHead.stencil + #(lambda (grob) + (let* ((note (ly:note-head::print grob)) + (combo-stencil (ly:stencil-add + note + (circle-stencil note 0.1 0.8)))) + (ly:make-stencil (ly:stencil-expr combo-stencil) + (ly:stencil-extent note X) + (ly:stencil-extent note Y)))) + \etc + +#(define (circular-arrow-script grob) + (let* ((circle + (ly:stencil-circle 0.7 0.12 #f)) + (arrow + (ly:stencil-rotate + (ly:make-stencil + '((moveto 0 0) + (lineto 0.35 0.18) + (lineto 0.35 -0.18) + (closepath)) + '(0 . 0) '(0 . 0)) + (* pi 1.25)))) + (ly:stencil-add + circle + (ly:stencil-translate arrow '(0.35 . 0.35))))) + + +#(define (parenthesize-callback callback) + (define (parenthesize-stencil grob) + (let* ((fn (ly:grob-default-font grob)) + (pclose (ly:font-get-glyph fn "accidentals.rightparen")) + (popen (ly:font-get-glyph fn "accidentals.leftparen")) + (subject (callback grob)) + ;; get position of stem + (stem-pos (ly:grob-property grob 'stem-attachment)) + ;; remember old size + (subject-dim-x (ly:stencil-extent subject X)) + (subject-dim-y (ly:stencil-extent subject Y))) + + ;; add parens + (set! subject + (ly:stencil-combine-at-edge + (ly:stencil-combine-at-edge subject X RIGHT pclose 0) + X LEFT popen 0)) + + ;; adjust stem position + (set! (ly:grob-property grob 'stem-attachment) + (cons (- (car stem-pos) 0.43) (cdr stem-pos))) + + ;; adjust size + (ly:make-stencil + (ly:stencil-expr subject) + (interval-widen subject-dim-x 0.5) + subject-dim-y))) + + parenthesize-stencil) diff --git a/lib/spanners.ly b/lib/spanners.ly new file mode 100644 index 0000000..dd1af81 --- /dev/null +++ b/lib/spanners.ly @@ -0,0 +1,71 @@ +timeSpanner = +#(define-music-function (left) (string?) + #{ + \once { + \override TextSpanner.staff-padding = 2 + \override TextSpanner.outside-staff-priority = 1000 + \override TextSpanner.style = #'dashed-line + \override TextSpanner.dash-period = 3 + \override TextSpanner.dash-fraction = 0.25 + \override TextSpanner.font-size = #1 + \override TextSpanner.font-shape = #'upright + \override TextSpanner.bound-details.left.text = \markup { \magnify #1 \bold \roman $left } + \override TextSpanner.bound-details.left-broken.text = ##f + \override TextSpanner.bound-details.right-broken.text = ##f + \override TextSpanner.bound-details.right.padding = #-1 + } + #}) + +markSpanner = +#(define-music-function (left right) (string? string?) + #{ + \once { + \override TextSpanner.style = #'dashed-line + \override TextSpanner.outside-staff-priority = 550 + \override TextSpanner.dash-period = 2 + \override TextSpanner.dash-fraction = 0.5 + \override TextSpanner.font-size = #0.25 + \override TextSpanner.bound-details.left.text = + \markup { \general-align #Y #0 { $left \hspace #0.25 } } + \override TextSpanner.bound-details.right.text = + \markup { \general-align #Y #0 { \arrow-head #X #RIGHT ##f $right } } + \override TextSpanner.bound-details.left-broken.text = ##f + \override TextSpanner.bound-details.right-broken.text = ##f + \override TextSpanner.bound-details.right.padding = #1 + } + #}) + +stringNumberSpanner = +#(define-music-function (StringNumber) (string?) + #{ + \once { + \override TextSpanner.style = #'solid + \override TextSpanner.outside-staff-priority = 150 + \override TextSpanner.font-size = #-3 + \override TextSpanner.bound-details.left.stencil-align-dir-y = #CENTER + \override TextSpanner.bound-details.left.text = \markup { $StringNumber \hspace #0.25 } + \override TextSpanner.bound-details.right.text = \markup { \draw-line #'(0 . -1) } + \override TextSpanner.bound-details.right-broken.text = ##f + \override TextSpanner.avoid-slur = #'ignore + \override TextSpanner.bound-details.right.padding = #-2 + } + #}) + +sustainGradual = +-\tweak edge-height #'(0 . 1) +-\tweak self-alignment-Y #DOWN +-\tweak style #'dashed-line +-\tweak stencil +#(lambda (grob) + (let* ( + (sten (ly:piano-pedal-bracket::print grob)) + (xex (ly:stencil-extent sten X)) + (yex (ly:stencil-extent sten Y)) + (cresc? (eqv? (ly:grob-property grob 'grow-direction) LEFT))) + (ly:line-interface::line grob + (car xex) (if cresc? (car yex) (cdr yex)) + (cdr xex) (if cresc? (cdr yex) (car yex))))) +\etc + +sustainGradualOn = -\sustainGradual \< +sustainGradualOff = -\sustainGradual \> diff --git a/lib/text.ly b/lib/text.ly new file mode 100644 index 0000000..091ba48 --- /dev/null +++ b/lib/text.ly @@ -0,0 +1,17 @@ +pizz = ^\markup { "pizz" } +arco = ^\markup { "arco" } +colLegno = ^\markup { "col legno" } +conSord = ^\markup { "con sord." } +senSord = ^\markup { "senza sord." } +pont = ^\markup { \italic "sul pont." } +tasto = ^\markup { \italic "sul tasto" } +ord = ^\markup { \italic "ord." } +flautando = ^\markup { \italic "flautando" } + +#(define (rounded-measure-number-mark mark context) + (let ((bar (ly:context-property context 'currentBarNumber))) + (markup + #:rounded-box + #:bold + #:sans + (number->string bar)))) diff --git a/manuscripts/cello.ly b/manuscripts/cello.ly new file mode 100644 index 0000000..6ab7a34 --- /dev/null +++ b/manuscripts/cello.ly @@ -0,0 +1,60 @@ +% root = ../string-quartet.ly +celloMusic = +\relative { + \set harmonicDots = ##t + \tag #'part { \compressEmptyMeasures } + \clef bass + r8. 16~\ppsempre^\markup { "detached" } 8 8~ 4~ 8 8~ | + 2~ 8 4.~ | + 4 r4 r2 | + r8. 16~ 2~ 8. + 16~ 8 + 8~ 4 + 2~ | + 2~ 4 r4 r4 | + \clef tenor + r8. + 16~ 4~ 8. + 16~ 4~ 16 + d8.~\flageolet\2 + 2.~\flageolet\1 | + 1 r4 cis4~\mp\> | + cis8.\glissando d16~\p\< d2~ d8. a'16~ | + a8 bes8~ bes4~ bes8 \clef treble f'8->\mf f4~\> | + f2 \clef bass g,,,2~(\open\pp \tuplet 3/2 { g8 fis8 g8 } \tuplet 3/2 { fis8 g8 fis8 } g8 8~ | + 8) r16 \clef tenor + g''16~->\mf g4~ g16 fis8.-> gis4~-> | + gis4 a2.->\laissezVibrer\pizz | + R1*6/4 \clef bass | + r8. gis,16~->\arco gis4~ gis8. a16~-> a4~ | + a4~ a8. e16~-> e8 f8~-> f4~ | + f2.~ f2 | + r8. des'16~-> des4~ des16 c8.-> ees4~-> | + ees2 d2~-> | + d2 r2 | + r8. ees,16~-> ees2~ ees8. d16\laissezVibrer\pizz | + r4 r16 b8.~->\arco b4~ b16 bes8.~-> | + bes2 r4 | + r8. 16~\p 4~ 8. 16~\startTrillSpan^\markup { "trill harmonic" } + 8\stopTrillSpan + 8~ 4 + \after 4. \stopTrillSpan d'4.~\1\harmonic\startTrillSpan d8~\harmonic d4~\harmonic + d2\harmonic | + r8. 16~\mp 8 d'8~\1\harmonic\startTrillSpan d2~\harmonic | + d8\harmonic 4.\stopTrillSpan e'2\1\harmonic r8 e8( + gis,8.) g16~->\mf\< g4~ g16 d'8.~-> d4~ | + d16 ees8.~ ees2~ ees16 bes'8.(->\f | + g,8.) +} +\addQuote "cello" { \removeWithTag #'score \celloMusic } + +celloStaff = +#(define-music-function (music) (ly:music?) + #{ \new Staff = "cello" + \with { + instrumentName = \markup { "cello " } + shortInstrumentName = \markup { "vc " } + \override DynamicLineSpanner.staff-padding = \sods + } + << $music >> + #}) diff --git a/manuscripts/tempoMap.ly b/manuscripts/tempoMap.ly new file mode 100644 index 0000000..a2dab6e --- /dev/null +++ b/manuscripts/tempoMap.ly @@ -0,0 +1,27 @@ +% root = ../string-quartet.ly +tempoMap = +\new Voice \with { + \consists Mark_engraver + \remove Clef_engraver +} +{ + \tempo "Lontano" 4=64 + \time 4/4 s1*5 | + \time 5/4 s1*5/4 | + \time 4/4 s1*2 | + \time 6/4 s1*6/4 | + \time 4/4 s1*2 | + \time 7/4 s1*7/4 | + \time 4/4 s1*2 | + \time 6/4 s1*6/4 | + \time 4/4 s1*2 | + \time 5/4 s1*5/4 | + \time 4/4 s1*5 | + \time 3/4 s1*3/4 | + \time 4/4 s1*2 | + \time 2/4 s1*2/4 | + \time 4/4 s1 | + \time 5/4 s1*5/4 | + \time 4/4 s1*3 | + +} diff --git a/manuscripts/viola.ly b/manuscripts/viola.ly new file mode 100644 index 0000000..f017a81 --- /dev/null +++ b/manuscripts/viola.ly @@ -0,0 +1,59 @@ +% root = ../string-quartet.ly +violaMusic = +\relative { + \set harmonicDots = ##t + \tag #'part { \compressEmptyMeasures } + \clef alto + r8. 16~\ppsempre^\markup { "detached" } 4~ 8. 16~ 4~ | + 4~ 8. 16~ 4~ 16 8.~ | + 2 r2 | + r8. 16~ 8 8~ 4~ 8 8~ + 2~ 8 4.~ | + 2~ 2. | + r8. + 16~ 4~ 16 + 8.~ 4~ 4~ 16 + 8.~ 4~ 16 + d'8.~\harmonic\1 | + d4\harmonic r4 r4 r2. | + r8. + g,16~\harmonic\2 g4~\harmonic g8.\harmonic + a16~\harmonic\2 a4~\harmonic a16\harmonic + 8. + 2. | + R1*7/4 + r8. + g16~\mf g8 fis8\pizz\laissezVibrer r2 | + r8 gis8~\arco gis4 a2~ | + a1. | + r8. gis16~-> gis4~ gis16 a8.-> e4~-> | + e4 f2.\laissezVibrer\pizz | + r2 \tuplet 3/2 { r8 r8 a,8~(\<\arco } \tuplet 3/2 { a8\glissando f4\> } \tuplet 3/2 { f8)\! gis8(\<\glissando e8~\f } | + e8.) des16~-> des2~ des8. c16~-> | + c4~ c8. ees16~-> ees8 d'8~-> d4~ | + d4 r4 r2 | + r8. ees16~->\mf ees4~ ees16 c8.-> b4~-> | + b2 bes2~-> | + bes2. | + r8. 16~\p 4~ 8. 16~ 8 8~\startTrillSpan^\markup { "trill harmonic" } + \after 4. \stopTrillSpan 2 r8 \clef treble a''4.~ | + a4 r4 \clef alto | + r8. 16~\mp 4~ 8. 16~\startTrillSpan + 8 8~\stopTrillSpan + 4 d''2~\harmonic\1 d2\harmonic | + r8. c,16~\harmonic\3 c2~\harmonic c8.\harmonic g'16~\harmonic\2 | + g4~\harmonic g16\harmonic 8.\startTrillSpan 2~\stopTrillSpan | + 8. +} + +violaStaff = +#(define-music-function (music) (ly:music?) + #{ + \new Staff = "viola" + \with { + instrumentName = \markup { "viola " } + shortInstrumentName = \markup { "vla " } + \override DynamicLineSpanner.staff-padding = \sods + } + << $music >> + #}) diff --git a/manuscripts/violin1.ly b/manuscripts/violin1.ly new file mode 100644 index 0000000..737cc15 --- /dev/null +++ b/manuscripts/violin1.ly @@ -0,0 +1,62 @@ +% root = ../string-quartet.ly +violinOneMusic = +\relative { + \set harmonicDots = ##t + \tag #'part { \compressEmptyMeasures } + \clef treble + r8. 16~\pp^\markup { "detached" } 4~ 4~ 8. 16~ | %001-002 + 8 8~ 4 2 | + r2 r16 c'8.~(\tasto\< c8\glissando g'8~\mp\> | + g8.) gis16~\p gis4~ gis16 dis8.~ dis4~ | + dis16 e8. b'2.(~\< | + b2 2.)\mp | + r8. + 16~\ppsempre 2~ 8. + 16~ 8 + 8~ 4~ 8 + d'4.~\harmonic\2 | + d1.\harmonic | + r8. + g,16~\harmonic\3 g8\harmonic + a8~\harmonic\3 a4\harmonic + 4~ 2 + 2 | + R1*7/4 + r8. + g16~\mf g4~ g8. fis16~ fis4~ | + fis4~ fis8. gis16~ gis8 a4.~ | + a2. r2. + r8. gis16~-> gis8 a8~-> a4~ a8 e8~-> | + e4 f2.~-> | + f2 r4 r2 | + r8. des16~-> des2~ des8. c16\laissezVibrer\pizz | + r4 r16 ees8.~->\arco ees4~ ees16 d8.~-> | + d1 | + r8. ees16~-> ees4 ees8. d16~-> d4~ | + d16 b8.~-> b2~ b16 bes8.\laissezVibrer\pizz | + R1*3/4 | + r8. f''16~\p\arco f8 fis8\laissezVibrer\pizz r2 | + r8 cis'4.\arco a2~ | + a2 | + r8. 16~\mp 8 a'8~\harmonic\3 a4\harmonic 4~ | + 4 + 2~\startTrillSpan + 2\stopTrillSpan + r8. 16~\mf 2~ 8. 16~\startTrillSpan | + 4~ 8.\stopTrillSpan 16~ 4~ 16 8.~ | + 8. + +} +\addQuote "violin1" { \removeWithTag #'score \violinOneMusic } + +violinOneStaff = +#(define-music-function (music) (ly:music?) + #{ + \new Staff = "violin1" + \with { + instrumentName = \markup { "violin I " } + shortInstrumentName = \markup { "vl I " } + \override DynamicLineSpanner.staff-padding = \sods + } + << $music >> + #}) diff --git a/manuscripts/violin2.ly b/manuscripts/violin2.ly new file mode 100644 index 0000000..3e4aed4 --- /dev/null +++ b/manuscripts/violin2.ly @@ -0,0 +1,57 @@ +% root = ../string-quartet.ly +violinTwoMusic = +\relative { + \set harmonicDots = ##t + \tag #'part { \compressEmptyMeasures } + \clef treble + r8. 16~\ppsempre^\markup { "detached" } 4~ 16 8.~ 4~ | %001 + 16 8. 2.~ | + 1 | + r8. 16~ 4~ 8. 16~ 4~ | + 4~ 8. 16~ 4~ 16 8.~ | + 4 r4 r2. | + r8. + 16~ 8 + 8~ 4 + 4~ 2 + d'2~\harmonic\2 | + d2.\harmonic r4 r2 | + r8. + g,16~\harmonic\3 g4~\harmonic g16\harmonic + a8.~\harmonic\3 a4~\harmonic a4~\harmonic a16\harmonic + 8.~ 4~ 16 + 8. | + R1*7/4 + r8. + g16~->\mf g8 fis8~-> fis4~ fis8 gis8~-> | + gis4 a2.~-> | + a4 r4 r4 r2. | + r8. gis16~-> gis8 a8\laissezVibrer\pizz r2 | + r8 e8~->\arco e4 f2~-> | + f2. r2 | + r8. des16~-> des4~ des8. c16~-> c4~ | + c16 ees8.~-> ees2~ ees16 d8.\laissezVibrer\pizz + R1 | + r8. ees16~-> ees2~ ees8. d16~-> | + d4~ d8. b16~-> b8 bes8~-> bes4~ | + bes8 r8 \tuplet 3/2 { d4(\glissando\> b'8~ } \tuplet 3/2 { b8) bes4~ } | + bes8.\glissando f16~\mp f8 fis8~ fis4\glissando cis'4~ | + cis4 a2.\harmonic\3 | + R1*2/4 + r8. 16~\mp 4~ 8. a'16~\harmonic\3 a8\harmonic 8~ | + 2 r8 8~ 2 + r8. 16~\mf 4~ 16 8.~\startTrillSpan 4~ | + 4~ 16\stopTrillSpan 8. 2~ | 8. +} + +violinTwoStaff = +#(define-music-function (music) (ly:music?) + #{ + \new Staff = "violin2" + \with { + instrumentName = \markup { "violin II " } + shortInstrumentName = \markup { "vl II " } + \override DynamicLineSpanner.staff-padding = \sods + } + << $music >> + #}) diff --git a/parts/parts_string-quartet.ly b/parts/parts_string-quartet.ly new file mode 100644 index 0000000..e3371f8 --- /dev/null +++ b/parts/parts_string-quartet.ly @@ -0,0 +1,84 @@ +\version "2.24.4" + +\include "../general/info.ly" +\include "../lib/load.ly" +\include "../general/partPaper.ly" +\include "../general/partLayout.ly" + +\include "../manuscripts/tempoMap.ly" +\include "../manuscripts/violin1.ly" +\include "../manuscripts/violin2.ly" +\include "../manuscripts/viola.ly" +\include "../manuscripts/cello.ly" + +#(define output-suffix "violinI") +\book { + \bookpart { + \header { + title = \markup { \fontsize #1 \xtitle } + subtitle = \markup { \medium \italic \xsub } + composer = \xcomp + poet = \markup { "violin I" } + arranger = \markup { \tiny \typewriter { \shortHash - \branchName } } + } + \score { + << + \violinOneStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \violinOneMusic >> + >> + } + } +} + +#(define output-suffix "violinII") +\book { + \bookpart { + \header { + title = \markup { \fontsize #1 \xtitle } + subtitle = \markup { \medium \italic \xsub } + composer = \xcomp + poet = \markup { "violin II" } + arranger = \markup { \tiny \typewriter { \shortHash - \branchName } } + } + \score { + << + \violinTwoStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \violinTwoMusic >> + >> + } + } +} + +#(define output-suffix "viola") +\book { + \bookpart { + \header { + title = \markup { \fontsize #1 \xtitle } + subtitle = \markup { \medium \italic \xsub } + composer = \xcomp + poet = \markup { "viola" } + arranger = \markup { \tiny \typewriter { \shortHash - \branchName } } + } + \score { + << + \violaStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \violaMusic >> + >> + } + } +} + +#(define output-suffix "cello") +\book { + \bookpart { + \header { + title = \markup { \fontsize #1 \xtitle } + subtitle = \markup { \medium \italic \xsub } + composer = \xcomp + poet = \markup { "cello" } + arranger = \markup { \tiny \typewriter { \shortHash - \branchName } } + } + \score { + << + \celloStaff \compressMMRests << \removeWithTag #'score \tempoMap \removeWithTag #'score \celloMusic >> + >> + } + } +} diff --git a/string-quartet.ly b/string-quartet.ly new file mode 100644 index 0000000..fc8c296 --- /dev/null +++ b/string-quartet.ly @@ -0,0 +1,65 @@ +\version "2.24.4" + +\include "general/info.ly" +\include "lib/load.ly" +\include "general/scorePaper.ly" +\include "general/scoreLayout.ly" + +\include "manuscripts/tempoMap.ly" +\include "manuscripts/violin1.ly" +\include "manuscripts/violin2.ly" +\include "manuscripts/viola.ly" +\include "manuscripts/cello.ly" + +\book { + \markuplist #(outside-cover-markuplist 26.25) + \pageBreak + \markup { \vspace #5 } + \pageBreak + \markuplist #(inside-cover-markuplist) + \pageBreak + \markuplist { %Front Matter + \fill-line { + #(info-matter-markuplist) + \center-column { + \vspace #5 + #(program-notes-markuplist #{ \programNotes #}) + #(performance-notes-markuplist #{ \performanceNotes #}) + \line { \char ##x2042 } + } + #(git-matter-markuplist) + } + } + \pageBreak + \bookpart { + \header { + dedication = \markup { + \center-column { + \small "Commissioned by Karen Ronald" + \vspace #-0.4 + \small "for Margo Johnson on the occasion of her 60th birthday" + \vspace #0.4 + } + } + title = \markup { \fontsize #1 \xtitle } + subtitle = \markup { \medium \italic \xsub } + composer = \xcomp + poet = \markup { transposed score } + arranger = \markup { \tiny \typewriter \shortHash } + } + \score { + << + \new StaffGroup + << + \violinOneStaff \removeWithTag #'part { << \tempoMap \killCues \violinOneMusic >> } + \violinTwoStaff \removeWithTag #'part { \killCues \violinTwoMusic } + \violaStaff \removeWithTag #'part { \killCues \violaMusic } + \celloStaff \removeWithTag #'part { \killCues \celloMusic } + >> + >> + %\midi { } + } + } + \pageBreak + \markuplist #(rear-cover-markuplist 33) +} -- 2.39.5