LSR/1005

< LSR
Zur Navigation springen Zur Suche springen
PD Der Inhalt dieser Seite wurde aus dem LilyPond Snippet Repository übernommen und steht unter folgender Lizenz: CC0.
See Public Domain Help Pages for more info.
PD
Squeeze and split staff

LSR Snippet Nr. 1005

Beschreibung

Draw curved staves as an alternative to arrows when staff's splited.
auto
%% LSR : http://lsr.di.unimi.it/LSR/Snippet?id=1005
%% Credits: PPS on May 2015
%% Copyright: Frog Peak Music, used with permission
%% => http://lilypond.1069038.n5.nabble.com/Re-Message-to-David-Fuqua-td231104.html

%Squeeze & split staff:
#(define-markup-command 
   (split-staff layout props 
     split-staff-length 
     split-staff-height-correction
     split-staff-height-position
     staff-staff-spacing-basic-distance)
   (number? number? number? number?)
   "Draw a curved staff with variable length & height starting from a point-stencil."
     (interpret-markup layout props
       (markup
         (#:path 0.1 
           `((moveto  0  0)  
             (curveto    
               ,split-staff-length    0   
               ,(* split-staff-length 0.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2)   
               ,(* split-staff-length 1.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2))
             (moveto  0  0)  
             (curveto    
               ,split-staff-length    0  
               ,(* split-staff-length 0.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1)   
               ,(* split-staff-length 1.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1))
             (moveto  0  0)  
             (curveto    
               ,split-staff-length    0   
               ,(* split-staff-length 0.5)  ,(+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance))  
               ,(* split-staff-length 1.5)  ,(+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)))
             (moveto  0  0)   
             (curveto    
               ,split-staff-length    0  
               ,(* split-staff-length 0.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1)   
               ,(* split-staff-length 1.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1))
             (moveto  0  0)  
             (curveto    
               ,split-staff-length    0   
               ,(* split-staff-length 0.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2)   
               ,(* split-staff-length 1.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2)))))))

%Flip:
#(define-markup-command (flip layout props arg) (markup?) 
   (interpret-markup layout props
     (markup #:concat ( #:null #:scale (cons -1 1) #:line (arg)))))
%End flip.

#(define-markup-command 
   (squeeze-staff layout props 
     squeeze-staff-length 
     squeeze-staff-height-correction 
     squeeze-staff-height-position 
     staff-staff-spacing-basic-distance)
   (number? number? number? number?)
   "Draw a curved staff with variable length & height ending to a point-stencil."
   (interpret-markup layout props
     #{ 
       \markup\flip\split-staff 
            #squeeze-staff-length 
            #squeeze-staff-height-correction 
            #squeeze-staff-height-position 
            #staff-staff-spacing-basic-distance
     #}))

%End squeeze & split staff.


%%%%%%%%%%%%% Test %%%%%%%%%%%%%%
squezzeSplitStaff = 
\markup
\with-dimensions #'(0 . 0) #'(0 . 0)
\concat {
  \hspace #-.1
  \squeeze-staff #3 #0 #0 #0
  \hspace #-.3
  {
    \combine\split-staff #10 #0 #3 #12.5
    \combine\split-staff #10 #0 #2 #12.5
    \combine\split-staff #10 #0 #1 #12.5
    \combine\split-staff #10 #0 #0 #12.5
    \combine\split-staff #10 #0 #-1 #12.5
    \combine\split-staff #10 #0 #-2 #12.5
    \combine\split-staff #10 #0 #-3 #12.5
    \null
  }
}

squezzeSplitStaffBarLine = {
  \once \override Staff.BarLine.stencil =
    #(lambda (grob)
       (ly:stencil-combine-at-edge
        (ly:bar-line::print grob)
        X LEFT
        (grob-interpret-markup grob squezzeSplitStaff)
        -1.3))
}

\markup\column {
  "David Fuqua: excerpt from \"Slippy Surface\" with friendly permission of Frog Peak Music" 
  \vspace #1
  \fill-line {
    \override #'(thickness . 5)
    \override #'(box-padding . 2)
    \box
    \center-column  {
      "SOLO"
      \vspace #.5
      "continue as on previous page — make all sounds full of intent"
      "and energy — always explore the sounds as much as possible —"
      "try double (triple) stops with lower strings — perhaps with one"
      "string stopped, the other harmonic — make loud scrapes of stopped"
      "notes on the lower strings — explore sounds on the other side of"
      "the bridge momentarily — keep glissando going as a vigorous"
      "“ostinato” behavior — explore all sounds musical and non-musical"
      "this harmonic glissando technique can produce — stop approximately"
      "30 seconds after other players play their last figure — do not “telegraph”"
      "the end — stop without giving any warning"
    }
  }
  \vspace #1
}

\score {
  \new Staff = "main" {
     g'1\pp
      -\tweak script-priority #-100 \fermata 
      -\tweak extra-offset #'(-.5 . 1)^"30''" 
      \bar "" \squezzeSplitStaffBarLine
      \mark\markup
      \with-dimensions #'(0 . 0) #'(0 . 0)
      \translate #'(-12 . 26)
      \fontsize #-2
      \override #'(baseline-skip . 3)
      \center-column {
        "On cue"
        "glissando to next note"
        "over 10 seconds"
        \vspace #.5
        \override #'(thickness . 2)
        \draw-line #'(0 . 18.8)
        \vspace #-1
        \arrow-head #Y #DOWN ##f
      } 
    \override Score.Clef.space-alist.staff-bar = #'(extra-space . 3)
    \override Score.Clef.extra-offset = #'(1 . 0)
    \override Score.Clef.full-size-change = ##t
    \stopStaff s1 s s s \bar ""
    <<
      \new Staff  
        \with { 
          alignAboveContext = #"main" 
        } { 
            \clef G
            \mark\markup\bold "A"
            c''1\pp
            -\tweak script-priority #-100 \fermata 
            -\tweak extra-offset #'(-.5 . 1)^"30''" 
            \bar "" 
            \mark\markup\center-column {
              \fontsize #-2 "Cut off on cue"
              \vspace #.3
              \combine
              \arrow-head #Y #DOWN ##f 
              \override #'(thickness . 2) 
              \draw-line #'(0 . 6.4)
          }
          \stopStaff s1*4 \startStaff 
          \bar ""
          \once\override Staff.Clef.break-visibility = #all-visible
          \clef G
          f''16->[\ff 
          -\tweak X-offset #-3
          ^\markup\center-column {
            \fontsize #0 "On cue"
            \vspace #.3
            \combine
            \arrow-head #Y #DOWN ##f 
            \override #'(thickness . 2) 
            \draw-line #'(0 . 5)
          }
          f''->]
        }
      \new Staff  
        \with { 
          alignAboveContext = #"main" 
        } { 
            \mark\markup\bold "B"
            bes'1\fermata \pp \bar "" 
            \stopStaff s1*4 \startStaff 
            \bar ""
            \once\override Staff.Clef.break-visibility = #all-visible
            \clef G
            bes'16->[\ff bes'->]
        }
      \new Staff  
        \with { 
          alignAboveContext = #"main" 
        } { 
          \mark\markup\bold "C"
          aes'1\fermata \pp \bar "" 
          \stopStaff s1*4 \startStaff 
          \bar ""
          \once\override Staff.Clef.break-visibility = #all-visible
          \clef G
          e'16->[\ff e'->] 
        }
      { 
        \startStaff 
        \once\override Staff.Clef.break-visibility = #all-visible
        \clef G
        \mark\markup\bold "D"
        g'1\fermata \pp \bar "" 
        \stopStaff 
        s1*4 
        \startStaff 
        \bar ""
        \once\override Staff.Clef.break-visibility = #all-visible
        \clef G
        aes16->[\ff 
        -\tweak extra-offset #'(-20 . 0)
        ^\markup  
            \with-dimensions #'(0 . 0) #'(0 . 0)
            \center-column { 
              "30''" 
              \musicglyph #"scripts.ufermata" 
              \italic "tacet"
            }
        aes->]
        \bar ""
        \tweak X-offset #2
        \tweak Y-offset #5
        \mark\markup
        \fontsize #-2
        \override #'(baseline-skip . 3)
        \left-column {
          \bold "Tacet al fine"
          \italic { 
            "hold instruments"
            "as if ready"
            "to play"
            "again"
          }
        }
      }
      \new Staff \with { 
        } { 
            \mark\markup\bold "E"
            f'1\fermata \pp \bar "" 
            \stopStaff s1*4 \startStaff 
            \bar ""
            \once\override Staff.Clef.break-visibility = #all-visible
            \clef F
            cis16->[\ff cis->]
        }
      \new Staff \with { 
        } { 
           \mark\markup\bold "F"
           e'1\fermata \pp  \bar "" 
           \stopStaff s1*4 \startStaff 
           \bar ""
           \once\override Staff.Clef.break-visibility = #all-visible
           \clef F
           g,16->[\ff g,->]
        }
      \new Staff \with { 
        } { 
          \mark\markup\bold "G"
          cis'1\fermata \pp   \bar "" 
          \stopStaff s1*4 \startStaff 
          \bar ""
          \once\override Staff.Clef.break-visibility = #all-visible
          \clef F
          c,16->[\ff c,->]
        }  
    >>
  }
  \layout {
    indent = 5
    \context {
      \Score
      \remove Mark_engraver
      \remove Staff_collecting_engraver
    }
    \context {
      \Staff
      \override VerticalAxisGroup.staff-staff-spacing = 
              #'((basic-distance . 12.5))  
      \consists Mark_engraver
      \consists Staff_collecting_engraver
      \remove Time_signature_engraver
    }
  }
}

\markup\fill-line {
  \override #'(baseline-skip . 7)
  \center-column {
    \italic "all cues are made by one player whom all the other players can see"
    \number \fontsize #8 "4"
  }
}
%% LSR : http://lsr.di.unimi.it/LSR/Snippet?id=1005
%% Credits: PPS on May 2015
%% Copyright: Frog Peak Music, used with permission
%% => http://lilypond.1069038.n5.nabble.com/Re-Message-to-David-Fuqua-td231104.html

%Squeeze & split staff:
#(define-markup-command 
   (split-staff layout props 
     split-staff-length 
     split-staff-height-correction
     split-staff-height-position
     staff-staff-spacing-basic-distance)
   (number? number? number? number?)
   "Draw a curved staff with variable length & height starting from a point-stencil."
     (interpret-markup layout props
       (markup
         (#:path 0.1 
           `((moveto  0  0)  
             (curveto    
               ,split-staff-length    0   
               ,(* split-staff-length 0.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2)   
               ,(* split-staff-length 1.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2))
             (moveto  0  0)  
             (curveto    
               ,split-staff-length    0  
               ,(* split-staff-length 0.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1)   
               ,(* split-staff-length 1.5)  ,(+ (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1))
             (moveto  0  0)  
             (curveto    
               ,split-staff-length    0   
               ,(* split-staff-length 0.5)  ,(+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance))  
               ,(* split-staff-length 1.5)  ,(+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)))
             (moveto  0  0)   
             (curveto    
               ,split-staff-length    0  
               ,(* split-staff-length 0.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1)   
               ,(* split-staff-length 1.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 1))
             (moveto  0  0)  
             (curveto    
               ,split-staff-length    0   
               ,(* split-staff-length 0.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2)   
               ,(* split-staff-length 1.5)  ,(- (+ split-staff-height-correction (* split-staff-height-position staff-staff-spacing-basic-distance)) 2)))))))

%Flip:
#(define-markup-command (flip layout props arg) (markup?) 
   (interpret-markup layout props
     (markup #:concat ( #:null #:scale (cons -1 1) #:line (arg)))))
%End flip.

#(define-markup-command 
   (squeeze-staff layout props 
     squeeze-staff-length 
     squeeze-staff-height-correction 
     squeeze-staff-height-position 
     staff-staff-spacing-basic-distance)
   (number? number? number? number?)
   "Draw a curved staff with variable length & height ending to a point-stencil."
   (interpret-markup layout props
     #{ 
       \markup\flip\split-staff 
            #squeeze-staff-length 
            #squeeze-staff-height-correction 
            #squeeze-staff-height-position 
            #staff-staff-spacing-basic-distance
     #}))

%End squeeze & split staff.


%%%%%%%%%%%%% Test %%%%%%%%%%%%%%
squezzeSplitStaff = 
\markup
\with-dimensions #'(0 . 0) #'(0 . 0)
\concat {
  \hspace #-.1
  \squeeze-staff #3 #0 #0 #0
  \hspace #-.3
  {
    \combine\split-staff #10 #0 #3 #12.5
    \combine\split-staff #10 #0 #2 #12.5
    \combine\split-staff #10 #0 #1 #12.5
    \combine\split-staff #10 #0 #0 #12.5
    \combine\split-staff #10 #0 #-1 #12.5
    \combine\split-staff #10 #0 #-2 #12.5
    \combine\split-staff #10 #0 #-3 #12.5
    \null
  }
}

squezzeSplitStaffBarLine = {
  \once \override Staff.BarLine.stencil =
    #(lambda (grob)
       (ly:stencil-combine-at-edge
        (ly:bar-line::print grob)
        X LEFT
        (grob-interpret-markup grob squezzeSplitStaff)
        -1.3))
}

\markup\column {
  "David Fuqua: excerpt from \"Slippy Surface\" with friendly permission of Frog Peak Music" 
  \vspace #1
  \fill-line {
    \override #'(thickness . 5)
    \override #'(box-padding . 2)
    \box
    \center-column  {
      "SOLO"
      \vspace #.5
      "continue as on previous page — make all sounds full of intent"
      "and energy — always explore the sounds as much as possible —"
      "try double (triple) stops with lower strings — perhaps with one"
      "string stopped, the other harmonic — make loud scrapes of stopped"
      "notes on the lower strings — explore sounds on the other side of"
      "the bridge momentarily — keep glissando going as a vigorous"
      "“ostinato” behavior — explore all sounds musical and non-musical"
      "this harmonic glissando technique can produce — stop approximately"
      "30 seconds after other players play their last figure — do not “telegraph”"
      "the end — stop without giving any warning"
    }
  }
  \vspace #1
}

\score {
  \new Staff = "main" {
     g'1\pp
      -\tweak script-priority #-100 \fermata 
      -\tweak extra-offset #'(-.5 . 1)^"30''" 
      \bar "" \squezzeSplitStaffBarLine
      \mark\markup
      \with-dimensions #'(0 . 0) #'(0 . 0)
      \translate #'(-12 . 26)
      \fontsize #-2
      \override #'(baseline-skip . 3)
      \center-column {
        "On cue"
        "glissando to next note"
        "over 10 seconds"
        \vspace #.5
        \override #'(thickness . 2)
        \draw-line #'(0 . 18.8)
        \vspace #-1
        \arrow-head #Y #DOWN ##f
      } 
    \override Score.Clef.space-alist.staff-bar = #'(extra-space . 3)
    \override Score.Clef.extra-offset = #'(1 . 0)
    \override Score.Clef.full-size-change = ##t
    \stopStaff s1 s s s \bar ""
    <<
      \new Staff  
        \with { 
          alignAboveContext = #"main" 
        } { 
            \clef G
            \mark\markup\bold "A"
            c''1\pp
            -\tweak script-priority #-100 \fermata 
            -\tweak extra-offset #'(-.5 . 1)^"30''" 
            \bar "" 
            \mark\markup\center-column {
              \fontsize #-2 "Cut off on cue"
              \vspace #.3
              \combine
              \arrow-head #Y #DOWN ##f 
              \override #'(thickness . 2) 
              \draw-line #'(0 . 6.4)
          }
          \stopStaff s1*4 \startStaff 
          \bar ""
          \once\override Staff.Clef.break-visibility = #all-visible
          \clef G
          f''16->[\ff 
          -\tweak X-offset #-3
          ^\markup\center-column {
            \fontsize #0 "On cue"
            \vspace #.3
            \combine
            \arrow-head #Y #DOWN ##f 
            \override #'(thickness . 2) 
            \draw-line #'(0 . 5)
          }
          f''->]
        }
      \new Staff  
        \with { 
          alignAboveContext = #"main" 
        } { 
            \mark\markup\bold "B"
            bes'1\fermata \pp \bar "" 
            \stopStaff s1*4 \startStaff 
            \bar ""
            \once\override Staff.Clef.break-visibility = #all-visible
            \clef G
            bes'16->[\ff bes'->]
        }
      \new Staff  
        \with { 
          alignAboveContext = #"main" 
        } { 
          \mark\markup\bold "C"
          aes'1\fermata \pp \bar "" 
          \stopStaff s1*4 \startStaff 
          \bar ""
          \once\override Staff.Clef.break-visibility = #all-visible
          \clef G
          e'16->[\ff e'->] 
        }
      { 
        \startStaff 
        \once\override Staff.Clef.break-visibility = #all-visible
        \clef G
        \mark\markup\bold "D"
        g'1\fermata \pp \bar "" 
        \stopStaff 
        s1*4 
        \startStaff 
        \bar ""
        \once\override Staff.Clef.break-visibility = #all-visible
        \clef G
        aes16->[\ff 
        -\tweak extra-offset #'(-20 . 0)
        ^\markup  
            \with-dimensions #'(0 . 0) #'(0 . 0)
            \center-column { 
              "30''" 
              \musicglyph #"scripts.ufermata" 
              \italic "tacet"
            }
        aes->]
        \bar ""
        \tweak X-offset #2
        \tweak Y-offset #5
        \mark\markup
        \fontsize #-2
        \override #'(baseline-skip . 3)
        \left-column {
          \bold "Tacet al fine"
          \italic { 
            "hold instruments"
            "as if ready"
            "to play"
            "again"
          }
        }
      }
      \new Staff \with { 
        } { 
            \mark\markup\bold "E"
            f'1\fermata \pp \bar "" 
            \stopStaff s1*4 \startStaff 
            \bar ""
            \once\override Staff.Clef.break-visibility = #all-visible
            \clef F
            cis16->[\ff cis->]
        }
      \new Staff \with { 
        } { 
           \mark\markup\bold "F"
           e'1\fermata \pp  \bar "" 
           \stopStaff s1*4 \startStaff 
           \bar ""
           \once\override Staff.Clef.break-visibility = #all-visible
           \clef F
           g,16->[\ff g,->]
        }
      \new Staff \with { 
        } { 
          \mark\markup\bold "G"
          cis'1\fermata \pp   \bar "" 
          \stopStaff s1*4 \startStaff 
          \bar ""
          \once\override Staff.Clef.break-visibility = #all-visible
          \clef F
          c,16->[\ff c,->]
        }  
    >>
  }
  \layout {
    indent = 5
    \context {
      \Score
      \remove Mark_engraver
      \remove Staff_collecting_engraver
    }
    \context {
      \Staff
      \override VerticalAxisGroup.staff-staff-spacing = 
              #'((basic-distance . 12.5))  
      \consists Mark_engraver
      \consists Staff_collecting_engraver
      \remove Time_signature_engraver
    }
  }
}

\markup\fill-line {
  \override #'(baseline-skip . 7)
  \center-column {
    \italic "all cues are made by one player whom all the other players can see"
    \number \fontsize #8 "4"
  }
}

Unterseiten