James Worlton <[email protected]> writes: > Hello all, > > I'm making my first forays into Scheme by adapting preexisting examples to > do what I need. > > > Question: Why does the following code produce the output as shown in the > attached png image? I expect it to just output a scale with a > double-stemmed g. > > \version "2.17.95" > > doubleStem = > #(define-music-function > (parser location note) > (ly:music?) > #{ > << { \voiceOne #note } \new Voice { \voiceTwo #note } >> \oneVoice > #}) > > melody = \relative c' { > c4 d e f > \doubleStem g a b c > } > > \score { > \new Staff \melody > }
Ok, this one is a puzzler. Its solution is that you wrote #note twice in the same music without making a copy. Either call music-clone on one of the occurences of #note, or write $note (which does a copy anyway). If you don't do that, \relative will work _twice_ on the identical note while working through the music, shifting it up to g' first, and then seeing g', and consequently shifting it to g'' (taking the first occurence along). > I can work around this by adding \absolute before #note in the > function (and remembering to use absolute mode in the input), but it > would be nice if the function would produce the correct output. What > am I doing wrong? \relative is icky in this situation anyway: if you use \doubleStem g', you'll get a similar problem. There is the make-relative macro, but it only works on single pitches rather than whole music. Maybe I need to extend it. -- David Kastrup _______________________________________________ lilypond-user mailing list [email protected] https://lists.gnu.org/mailman/listinfo/lilypond-user
