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 <
[email protected]>:

> 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 <
> [email protected]>:
>
>> 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 <[email protected]>:
>>
>>> 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
>>> [email protected]
>>> https://lists.gnu.org/mailman/listinfo/lilypond-user
>>>
>>
>>
>
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to