lilypond-user
[Top][All Lists]
Advanced

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

Tracking usage of variables


From: Mark Knoop
Subject: Tracking usage of variables
Date: Sun, 03 Mar 2019 12:54:48 +0000
User-agent: mu4e 1.1.0; emacs 26.1

Often in the music I'm engraving a single variable might be used and 
transformed in multiple contexts and repetitions throughout the piece. This can 
become difficult to keep track of, particularly if subsequent changes are made 
which might want to affect only one or some of the instances.

It would be great to be able to display the use of variables throughout a 
score, I imagine by writing a custom engraver for this. Such an engraver would 
create two helpful components:

1. Add markup to every use of a variable in the music. The point-and-click link 
of this markup would be to the use of the variable (rather than its definition).

2. Output a text report listing the musical locations (bar/beat) and contexts 
of each variable.

The example below demonstrates what such an engraver would create. I don't 
really know how to start with this, or if it is even possible - any thoughts or 
pointers from scheme gurus would be extremely helpful.

Thanks,

Mark

%%%%%%%%%%%%%%%%
\version "2.19.82"

motif = { c'4 e' g' c'' }

#(define-markup-command
  (variable layout props varname)
  (string?)
  "Format variable name."
  (interpret-markup layout props
   #{
   \markup
   \with-dimensions #'(0 . 0) #'(0 . 0)
   \with-color #red
   \raise #1
   \column {
     \box \fontsize #-3 \typewriter #varname
     \combine
     \draw-line  #'(0 . 3)
     \arrow-head #Y #DOWN ##f
   }
   #}))

varname =
#(define-event-function (text) (markup?)
  #{
  -\tweak parent-alignment-X #CENTER
  -\tweak layer #-10
  ^\markup \variable #text
  #})

\score {
  <<
    \new Staff = "flute" \with {
      instrumentName = "flute"
    } {
      <>\varname "motif"
      \motif
      R1
      \repeat unfold 3 \transpose c' e' { <>\varname "motif" \motif }
      \bar "|."
    }
    \new Staff = "viola" \with {
      instrumentName = "viola"
    } {
      \clef "alto"
      R1
      \repeat unfold 4 \shiftDurations 2 0 { <>\varname "motif" \motif }
      R1*2
      <>\varname "motif"
      \motif
    }
  >>
}

%{ output to text file:
Variable report
===============

motif:

  1 0/4: flute
  2 0/4: viola
  2 1/4: viola
  2 2/4: viola
  2 3/4: viola
  3 0/4: flute
  4 0/4: flute
  5 0/4: flute
  5 0/4: viola

%}
%%%%%%%%%%%%%%%%

--
Mark Knoop



reply via email to

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