[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Repeat bars function
From: |
Mark Knoop |
Subject: |
Re: Repeat bars function |
Date: |
Wed, 5 Feb 2014 10:01:57 +0000 |
At 09:57 on 05 Feb 2014, Mark Knoop wrote:
>I'm making a music function below to automatically create a repeat
>structure. It's useable at the moment, but there are a couple of
>improvements that could be made - any suggestions for these would be
>very helpful.
>
>1. The main problem is where to revert the bar number visibility
>override. This needs to be done *after* the closing barline of the
>repeat - the idea being that the bar following a repeat is always
>numbered. Is there someway to schedule a delayed revert?
Ha - funny how actually writing the email helps solve the problem...
I've fixed this first issue by simply using "\once \override" twice:
repeatBars = #(define-music-function
(parser location times endbar music)
(number? number? ly:music?)
(_i "make a repeat structure")
#{
\tag #'part {
\once \override Score.BarNumber.break-visibility = ##(#t #t #t)
<>^\markup \box \concat { "×" \number #(ly:number->string times) }
\repeat volta #times { $music }
\set Score.currentBarNumber = #endbar
\once \override Score.BarNumber.break-visibility = ##(#t #t #t)
}
\tag #'score {
\repeat unfold #times { $music }
}
#})
Suggestions for these others still appreciated.
>2. Ideally the [x3] markup should be right-aligned to the barline,
>however I can't use "\mark" here since this is likely to coincide with
>a real rehearsal mark in practice.
>
>3. It would be nice not to have to specify the endbar as an argument,
>however this requires access to the starting bar number and calculation
>of the duration of the music. I've tried to incorporate the
>"\applyContext" approach in the docs (Extending 2.6.1) - but I'm not
>sure how to access this within a music-function.
>
>Thanks, Mark
>
>%%%%%%%%%%%%%%%%%
>\version "2.18.0"
>
>repeatBars = #(define-music-function
> (parser location times endbar music)
> (number? number? ly:music?)
> (_i "make a repeat structure")
> #{
> \tag #'part {
> \override Score.BarNumber.break-visibility = ##(#t #t #t)
> <>^\markup \box \concat { "×" \number #(ly:number->string
> times) } \repeat volta #times { $music }
> \set Score.currentBarNumber = #endbar
> % can't revert here as then the closing barnumber won't print
> %\revert Score.BarNumber.break-visibility
> }
> \tag #'score {
> \repeat unfold #times { $music }
> }
> #})
>
>music = \relative c' {
> \repeat unfold 4 { c1 }
> \mark \default
> \repeatBars 3 8 { c4 d e f }
> \repeat unfold 4 { c1 }
>}
>
>\score { \new Staff { \removeWithTag #'score \music } }
>\score { \new Staff { \removeWithTag #'part \music } }
>%%%%%%%%%%%%%%%%%
>
--
Mark Knoop