From: Tucker Johnson Date: Tue, 25 Feb 2025 23:23:27 +0000 (-0500) Subject: init X-Git-Url: https://git.newer.systems/?a=commitdiff_plain;h=3d930f732b36d6780f428ade2dca363e8b94e662;p=apples-and-pairs.git init --- 3d930f732b36d6780f428ade2dca363e8b94e662 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/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..fdddb29 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..cbf02a5 --- /dev/null +++ b/README.txt @@ -0,0 +1,10 @@ +Usage + +Required Fonts: + +- haydn (https://github.com/OpenLilyPondFonts/haydn) +- Junicode +- Syne + +The content of this project (music and logos) is protected under copyright, and the underlying source code used to format that content licensed under the Unlicense. +(Copyright © 2023 Tucker Johnson) diff --git a/applesAndPairs.ly b/applesAndPairs.ly new file mode 100644 index 0000000..c57ffb4 --- /dev/null +++ b/applesAndPairs.ly @@ -0,0 +1,279 @@ +\version "2.24.4" + +\include "general/info.ly" +\include "general/aliases.ly" +\include "general/scripts.ly" +\include "general/umbel.ly" + +\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 + indent = 0.75\in + short-indent = 0\cm + #(define fonts (set-global-fonts #:music "scorlatti" #:brace "scorlatti" #:roman "Junicode" #:sans "syne")) + 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 { \hbracket \sans \bold " contents " } + + tocItemMarkup = \markup \fill-line { + \fill-with-pattern #1.5 #CENTER . + \line { + \fromproperty #'toc:indent \fromproperty #'toc:text + } + \tiny \number \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 } + + } + 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 } + } + 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 } + } + 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 \fill-line { \null \tiny \typewriter \longHash \null } } + } + +} + +\book { + + \markuplist { %Outside Cover + \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 \italic \underline \xtitle } + \vspace #-0.1 + \line { \fontsize #3 \sans \xcomp } + \vspace #3 + \line { \fontsize #2 \sans \concat { "for " \xinst } } + } + } + \vspace #26.25 + \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 } + } + } + + \pageBreak + \markup { \vspace #5 } + + \pageBreak + \markuplist { %Inside Cover + \fill-line { + \line { \null } + \center-column { + \vspace #10 + \line { \hbracket \fontsize #10 \number 2025 } + \vspace #4 + \line { \xcomp } + \vspace #1 + \line { \fontsize #5 \bold \xtitle } + \line { \italic \xsub } + \vspace #4 + } + \right-column { + \line { \null } + } + } + } + + \pageBreak + \markuplist { %Front Matter + \fill-line { + \left-column { + \line { \bold \xtitle " [2025]" } + \line { \xinst " | " 4 minutes } + \line { \xcomp } + \vspace #25 + } + \center-column { + \vspace #5 + \vspace #3 + \line { \hbracket \bold \sans " program notes "} + \vspace #0.2 + \center-column { + \override #'(line-width . 100) + \justify { + I was first struck by the idea to write a work for clarinet and + piano after hearing a performance of Reger's first clarinet + sonata by my partner Amber Lucas. The harmonic and contrapuntal + complexities of Reger's music in addition to his unusual phrasal + structures seemed nicely compatible with the contrapuntal + language I had been developing in my own work. At the time of + Amber's performance I was working on \italic Circumnutation, a + cycle of inventions for keyboard that exlpored the structural + potentialities of the diatonic set (equivalent to the major + scale) and its relationship to the aggregate (the collection of + all 12 pitch classes). \italic "Net Clarity" proceeds from the + romantic clarinet sonata as a primary model, but other sounds and + allusions abound: ranging from Bach and Schoenberg to Bebop and + Babbit. + } + } + \vspace #3 + \override #'(thickness . 5) + \draw-squiggle-line #0.5 #'(20 . 0) ##t + } + + \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 + } + } + } + + \pageBreak + \header { + tagline = "test" + } + + \bookpart { + \header { + title = \markup { \fontsize #1 \xtitle } + subtitle = \markup { \medium \italic \xsub } + composer = \xcomp + poet = \markup { \xinst } + } + \score { + << + \new StaffGroup + << + \include "manuscripts/violinI.ly" + \include "manuscripts/violinII.ly" + >> + >> + %\midi { } + \layout { + \context { + \Score + \override RehearsalMark.break-visibility = #begin-of-line-invisible + \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/8) + \override Hairpin.to-barline = ##f + \overrideTimeSignatureSettings 4/4 1/4 1,1,1,1 #'() + \overrideTimeSignatureSettings 3/4 1/4 1,1,1 #'() + \numericTimeSignature + + } + } + } + } + + \pageBreak + \markup { \null } + \pageBreak + \markup { \null } +} diff --git a/general/aliases.ly b/general/aliases.ly new file mode 100644 index 0000000..7bc46ea --- /dev/null +++ b/general/aliases.ly @@ -0,0 +1,127 @@ +U = \change Staff = "u" +D = \change Staff = "d" + +%spacing +ds = #2.5 +sods = #3.4 +phds = #3.9 + +%notation marks +lsp = \override TextSpanner.bound-details.left.text = "sp" +rsp = \override TextSpanner.bound-details.right.text = " sp" +lst = \override TextSpanner.bound-details.left.text = "st" +rst = \override TextSpanner.bound-details.right.text = " st" +lord = \override TextSpanner.bound-details.left.text = "ord" +rord = \override TextSpanner.bound-details.right.text = " ord" +rit = \override TextSpanner.bound-details.left.text = \markup { \upright "rit. " } +ritPoc = \override TextSpanner.bound-details.left.text = \markup { \upright "ritardando poco a poco " } +molRit = \override TextSpanner.bound-details.left.text = \markup { \upright "molto rit. " } +pocRit = \override TextSpanner.bound-details.left.text = \markup { \upright "poco rit. " } +ace = \override TextSpanner.bound-details.left.text = \markup { \upright "accel. " } +pocAce = \override TextSpanner.bound-details.left.text = \markup { \upright "poco accel. " } +acePoc = \override TextSpanner.bound-details.left.text = \markup { \upright "accelerando poco a poco " } +molAce = \override TextSpanner.bound-details.left.text = \markup { \upright "molto accel. " } + +sD = \stemDown +sU = \stemUp +sN = \stemNeutral + +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"))) + + +clusStemA = { + \once \override Stem.length = #11 +} + +clusStemB = { + \once \override NoteHead.X-offset = #4 + \once \override Stem.rotation = #'(-33 0 0) + \once \override Stem.length = #9.7 + \once \override Stem.extra-offset = #'(2.65 . 0.4) + \once \override Flag.style = #'no-flag + \once \override Accidental.extra-offset = #'(4 . -.1) +} + +clusStemC = { + \once \override NoteHead.X-offset = #4.8 + \once \override Stem.rotation = #'(-37 0 0) + \once \override Stem.length = #12.5 + \once \override Stem.extra-offset = #'(3.2 . 0.7) + \once \override Flag.style = #'no-flag + \once \override Accidental.extra-offset = #'(4.9 . -0.1) +} + +doubleSeparator = \markup { + \left-column { + \vcenter \combine + \beam #2.0 #0.3 #0.5 + \raise #0.7 \beam #2.0 #0.3 #0.5 + } + \hspace #98 + \right-column { + \vcenter \combine + \beam #2.0 #0.3 #0.5 + \raise #0.7 \beam #2.0 #0.3 #0.5 + } +} + + +buzzSymbol = \markup \path #0.25 +#(let ((x 3/6) (y 2/5)) + `((moveto ,x ,(- y)) (lineto ,(- x) ,(- y)) + (lineto ,x ,y) (lineto ,(- x) ,y))) + +applyBuzzSymbol = #(grob-transformer 'stencil + (lambda (grob orig) + (let ((dir (ly:grob-property grob 'direction)) + (sten (grob-interpret-markup grob buzzSymbol))) + (ly:stencil-add orig + (ly:stencil-translate-axis sten (* 0.1 dir) Y))))) + +applyBuzzuSymbol = #(grob-transformer 'stencil + (lambda (grob orig) + (let ((dir (ly:grob-property grob 'direction)) + (sten (grob-interpret-markup grob buzzSymbol))) + (ly:stencil-add orig + (ly:stencil-translate-axis sten (* 1.6 dir) Y))))) + +applyBuzzdSymbol = #(grob-transformer 'stencil + (lambda (grob orig) + (let ((dir (ly:grob-property grob 'direction)) + (sten (grob-interpret-markup grob buzzSymbol))) + (ly:stencil-add orig + (ly:stencil-translate-axis sten (* 1.6 dir) Y))))) + +applyBuzzddSymbol = #(grob-transformer 'stencil + (lambda (grob orig) + (let ((dir (ly:grob-property grob 'direction)) + (sten (grob-interpret-markup grob buzzSymbol))) + (ly:stencil-add orig + (ly:stencil-translate-axis sten (* 2.1 dir) Y))))) + + +buzz = \tweak Stem.stencil \applyBuzzSymbol \etc +buzzu = \tweak Stem.stencil \applyBuzzuSymbol \etc +buzzd = \tweak Stem.stencil \applyBuzzdSymbol \etc +buzzdd = \tweak Stem.stencil \applyBuzzddSymbol \etc diff --git a/general/info.ly b/general/info.ly new file mode 100644 index 0000000..d792609 --- /dev/null +++ b/general/info.ly @@ -0,0 +1,10 @@ +xtitle = \markup { Apples & Pairs } +xsub = \markup { for Victoria Zhao and Madison Oh } +xcomp = \markup { Tucker Johnson } +xinst = \markup { violin duo } +xdur = \markup { \null } +xcr = \markup \tiny { Copyright Tucker Johnson 2025. All Rights Reserved (ASCAP) } +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 { " - " \fromproperty #'page:page-number-string " - " } } \null } } +evfoot = \markup { \fill-line { \null \center-column { " " \concat { " - " \fromproperty #'page:page-number-string " - " } } \null } } diff --git a/general/scripts.ly b/general/scripts.ly new file mode 100644 index 0000000..5d9b16e --- /dev/null +++ b/general/scripts.ly @@ -0,0 +1,25 @@ +to-internal-ts = +#(define-scheme-function + (top partial bottom) + (integer? rational? integer?) + (let + ((internal-ts + (+ (/ top bottom) (* partial (/ 1 bottom))))) + (cons (numerator internal-ts) (denominator internal-ts)))) + + +fractionalTime = +#(define-music-function + (top partial bottom) + (integer? rational? integer?) + #{ + \once \override Staff.TimeSignature.stencil = #ly:text-interface::print + \once \override Staff.TimeSignature.text = + \markup \override #'(baseline-skip . 0) \center-column \number { + \concat { #(number->string top) \magnify #0.5 \pad-x #-.2 { + \translate #'(0 . 1) #(number->string (numerator partial)) + \translate #'(-1 . 0) \override #'(thickness . 2) \draw-line #'(1 . 2) + \translate #'(0 . 0) #(number->string (denominator partial)) }} #(number->string bottom) + } + \time #(to-internal-ts top partial bottom) + #}) diff --git a/general/umbel.ly b/general/umbel.ly new file mode 100644 index 0000000..506584b --- /dev/null +++ b/general/umbel.ly @@ -0,0 +1,34 @@ +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 + } + } diff --git a/manuscripts/violinI.ly b/manuscripts/violinI.ly new file mode 100644 index 0000000..1c0d1a3 --- /dev/null +++ b/manuscripts/violinI.ly @@ -0,0 +1,38 @@ +% root = ../applesAndPairs.ly + +\new Staff \with { + instrumentName = \markup { violin I } + shortInstrumentName = \markup { "I " } + \override DynamicLineSpanner.staff-padding = \sods + \consists Text_mark_engraver +} +%\transpose bes c' +\relative { + \numericTimeSignature + \clef treble + \tempo Largo 2=92 + \time 2/2 + f'2--\p f-- | + f-- f-- | + \time 3/2 + f-- \tuplet 3/2 { e4( fis a,~ } 4 d,4~ | + d1) r4 cis''4~ | + \time 3/4 + 8 b'8~ \tuplet 3/2 { b4 b8( } \tuplet 3/2 { c8 g4~ } | + \time 5/8 + g8) aes( ees bes) r8 | + \time 2/2 + f2~ \tuplet 3/2 { f4 e( fis } | + a,1)\fermata | + a1-- | + d1--\fermata | + cis'4( b') bes2 | + \time 3/8 + \tuplet 3/2 { c8( g,4~ } 8~ | + \time 1/4 + \tuplet 3/2 { g8 aes4) } | + \time 2/2 + r2 \tuplet 3/2 { e4( fis a,~ } | + a8) r8 r4 r2 | + R1\fermata | +} diff --git a/manuscripts/violinII.ly b/manuscripts/violinII.ly new file mode 100644 index 0000000..ccc9cc9 --- /dev/null +++ b/manuscripts/violinII.ly @@ -0,0 +1,38 @@ +% root = ../applesAndPairs.ly + +\new Staff \with { + instrumentName = \markup { violin II } + shortInstrumentName = \markup { "II " } + \override DynamicLineSpanner.staff-padding = \sods + \consists Text_mark_engraver +} +%\transpose bes c' +\relative { + \numericTimeSignature + \clef treble + \tempo Largo 2=92 + \time 2/2 + f'2--\p f-- | + f-- f-- | + \time 3/2 + f-- \tuplet 3/2 { e4( fis a,~ } 4 d,4~ | + d1) r4 cis''4~ | + \time 3/4 + 8 b'8~ \tuplet 3/2 { b4 b8( } \tuplet 3/2 { c8 g4~ } | + \time 5/8 + g8) aes( ees bes) r8 | + \time 2/2 + f2~ \tuplet 3/2 { f4 e( fis } | + a,1)\fermata | + a1-- | + d1--\fermata | + cis'4( b') bes2 | + \time 3/8 + \tuplet 3/2 { c8( g,4~ } 8~ | + \time 1/4 + \tuplet 3/2 { g8 aes4) } | + \time 2/2 + r2 \tuplet 3/2 { e4( fis a,~ } | + a8) r8 r4 r2 | + R1\fermata | +}