lilypond-devel
[Top][All Lists]
Advanced

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

Re: Add chord range to make-part-combine-music (issue 144170043 by addre


From: nine . fierce . ballads
Subject: Re: Add chord range to make-part-combine-music (issue 144170043 by address@hidden)
Date: Fri, 31 Oct 2014 03:19:01 +0000

On 2014/10/29 05:06:28, Keith wrote:
This seems to allow the style of partcombine where unisons are
double-stemmed
which would be very nice.

Exactly.  I use it to keep both unisons and seconds apart in vocal
music.

I think that an optional argument to \partcombine music function is
the most
appropriate way to set chord-range.

I'm glad you said that, because I was thinking along those lines too;
however, this is not the only new option in the works.  I thought it
would be wise to keep it internal for now, write some regression tests
that exercise it as an expert might, and then work on the other features
before finally choosing a UI.

On the other hand, if you are willing to discuss it now, maybe you can
ease my mind.  This is the beginning of the function I've actually been
using:

(define-public (dfe-determine-split-list evl1 evl2 chord-range
enable-solo)
  "@var{evl1} and @var{evl2} should be ascending. @var{chord-range} is a
pair (min . max) defining the distance (in steps) between notes that may
share a stem. If @var{enable-solo} is false, skip solo analysis and
display the rests of both voices."
  (let* ((pc-debug #f)
         ; For solo analysis, all silence is equivalent.  Otherwise,
         ; voices that rest together must rest for the same duration
         ; to be considered in unisilence.
         (div-rest-state (if enable-solo 'unisilence 'apart-silence))
         (voice-state-vec1 (make-voice-states evl1))
         (voice-state-vec2 (make-voice-states evl2))
         (result (make-split-state voice-state-vec1 voice-state-vec2)))

Setting enable-solo to #f allows a style in which the partcombiner never
selects the solo state, but it still chooses between other states.  Most
of my work with Lilypond is arrangement or transcription of four-part
hymns in which there isn't much silence in the first place, but when a
voice is silent, rests are printed for that voice rather than marking it
"solo."  (Hopefully I'll have time to attach an image in the tracker
tonight, but I might not.)

When solo analysis is disabled, I've improved (sez me) the analysis of
silence so that rests are combined in roughly the same way as notes.  If
the voices begin and end a rest simultaneously, then that rest is
shared.  I think this works around some issues with rests and solo
analysis, but please forgive me for not going into more detail; it's
been a long time since I wrote this code, and it's in Scheme, so I'm
going to have to write it again to understand it.  :-)

Based on the feedback I've received so far, it seems that reimplementing
this solo control like the forced partcombine states would be the best
approach for that, leaving me free to add the chord-range as an optional
parameter to \partcombine without fear that the options will get out of
hand.  What do you say?

https://codereview.appspot.com/144170043/



reply via email to

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