lilypond-user
[Top][All Lists]
Advanced

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

Re: Compressing percent repeats.


From: Hwaen Ch'uqi
Subject: Re: Compressing percent repeats.
Date: Fri, 22 Jan 2016 07:29:48 -0500

Greetings Pierre,

Thank  you so much for your solutions! It took me a while to realize
that I in fact needed to upgrade to 2.19.35 in order to implement
them, but once squared away, they worked magnificently. True, the
latter approach is especially hackish, but I did find it much easier
to comprehend exactly what was going on. Thank you again!

Hwaen Ch'uqi


On 1/21/16, Pierre Perol-Schneider <address@hidden> wrote:
> 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]