lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Compressing percent repeats.


From: Pierre Perol-Schneider
Subject: Re: Compressing percent repeats.
Date: Thu, 21 Jan 2016 17:34:38 +0100

E.g.:

\version "2.19.35"

compressPercentRepeat =
#(define-music-function (repeats notes) (integer? ly:music?)
    (let* (
       (mea (ly:music-length notes))
       (num (ly:moment-main-numerator mea))
       (den (ly:moment-main-denominator mea))
       (dur (ly:make-duration 0 0 (* num (1- repeats)) den)))
        #{
            #notes
            \set Score.restNumberThreshold = #1
            \set Score.skipBars = ##t
            \temporary\override MultiMeasureRest.stencil = #ly:multi-measure-rest::percent
            \temporary\override MultiMeasureRestNumber.stencil =
                  #(lambda (grob)
                       (grob-interpret-markup grob
                         (markup #:concat
                         ( ;; Optional:
                           ;#:fontsize -3 "x"
                           #:fontsize -2 (number->string repeats)))))
            \temporary\override MultiMeasureRest.thickness = #0.48
            \temporary\override MultiMeasureRest.Y-offset = #0
            #(make-music 'MultiMeasureRestMusic 'duration dur)
            \revert MultiMeasureRest.Y-offset
            \revert MultiMeasureRest.thickness
            \revert MultiMeasureRestNumber.stencil
            \revert MultiMeasureRest.stencil
            \unset Score.skipBars
            \unset Score.restNumberThreshold
        #}))

%%%% Test:
soloInstrumentOne = \relative {
  \time 4/4
  c'4 c c c
  \compressPercentRepeat #8 { c'4 c c c }
  \break
  c,4 c c c
  \bar "|."
}

soloInstrumentTwo = \relative {
  \repeat unfold 10 { c''4 c c c } 
}

\markup\italic "Orchestral score:"
\score {
  \new StaffGroup <<
    \new Staff
      \with { instrumentName = "Inst 1" }
      \soloInstrumentOne
    \new Staff
      \with { instrumentName = "Inst 2" }  
      \soloInstrumentTwo
  >>
}

\markup\italic "Solo score:"
\score {
  \new Staff
    \with { instrumentName = "Inst 1" }
    \soloInstrumentOne
}

\layout {
  ragged-last = ##t
}



Cheers,
Pierre

2016-01-19 12:44 GMT+01:00 Pierre Perol-Schneider <address@hidden>:
BTW, another hacky solution would be to use \compressFullBarRests and simply change its stencil  with the 'percent' sign.
Not nice though.
~Pierre

2016-01-19 12:27 GMT+01:00 Pierre Perol-Schneider <address@hidden>:
Hi Hwaen Ch'uqi,

Far from being perfect but it's a start:

\version "2.19.35"

compressPercent =
#(define-music-function (repeats notes) (integer? ly:music?)
  #{
    \tag Orch {
    %% Optional:
    %\set countPercentRepeats = ##t
    \repeat percent #repeats \absolute { #notes } 
    }
    \tag Solo {
      \repeat percent 2 {
        \set countPercentRepeats = ##t
        \override PercentRepeatCounter.stencil = #(lambda (grob)
           (grob-interpret-markup grob
             (markup #:concat
               ( ;; Optional:
                 #:fontsize -3 "x"
                 (number->string repeats)))))
        #notes
        \applyContext #(lambda (c)
                          (set! (ly:context-property
                                 (ly:context-find c 'Timing)
                                 'currentBarNumber)
                           (+ (- repeats 2) (ly:context-property c 'currentBarNumber))))
      }
    }
#})

soloInstrumentOne = \relative {
  c' c c c
  \compressPercent 8 \relative { c''4 c c c } 
  \break
  c4 c c c
  \bar "|."
}

soloInstrumentTwo = \relative {
  \repeat unfold 10 { c''4 c c c } 
}

%%% Orchestral score %%%
\score {
  \new StaffGroup <<
    \new Staff
      \with { instrumentName = "Inst 1" }
      \keepWithTag Orch\soloInstrumentOne
    \new Staff
      \with { instrumentName = "Inst 2" }  
      \soloInstrumentTwo
  >>
}

%%% Solo score %%%
\score {
  \new Staff
    \with { instrumentName = "Inst 1" }
    \keepWithTag Solo\soloInstrumentOne
  }


HTH,
Cheers,
Pierre

2016-01-19 3:46 GMT+01:00 Hwaen Ch'uqi <address@hidden>:
Greetings All,

I am generating parts from an orchestral score and am wondering if
there is any way of handling percent repeats in the same manner as
\compressFullBarRests does for multimeasure rests? That is, a number
would be placed above, say, an isolated repeat informing the player
how many times to repeat the measure; meanwhile, currentBarNumber
would be automatically updated. I see from this thread

https://lists.gnu.org/archive/html/lilypond-user/2014-02/msg00050.html

that text could be placed manually (though not optimally) above the
isolated repeat, and so too could I manually reset currentBarNumber,
but that will surely prove to be time-consuming for a piece of this
magnitude. Any help would be greatly appreciated.

Hwaen Ch'uqi

_______________________________________________
lilypond-user mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/lilypond-user




reply via email to

[Prev in Thread] Current Thread [Next in Thread]