lilypond-devel
[Top][All Lists]
Advanced

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

Re: Cleanup beam scoring code. (issue4001046)


From: address@hidden
Subject: Re: Cleanup beam scoring code. (issue4001046)
Date: Wed, 2 Feb 2011 21:16:22 -0500

On Feb 2, 2011, at 9:54 AM, Han-Wen Nienhuys wrote:

> On Wed, Feb 2, 2011 at 3:49 AM, Werner LEMBERG <address@hidden> wrote:
>>> There is one diff remaining: see the attached file.  I introduced
>>> some streamlining of an inner loop, which affects the way we handle
>>> beams that start/end with invisible stems.
>>> 
>>> The compare image is the new one.  I have no examples of tremolo beams
>>> handy, but the new layout actually looks better to me.
>> 
>> For me, it doesn't.  While the old behaviour is not optimal, the new
>> one looks really worse to me, especially in bar 3 (which is admittedly
>> a quite artificial example).  The most important issue for me: Why is
>> there no slant of the beams?  I currently have not enough time to
> 
> But the old version also had no slant?  I'm inclined to take interpret
> all these answers as "tremolo on whole notes was broken, and it still
> is, just differently," and commit.
> 
> My concern is about breaking something that was working as intended before.

Hey all,

Han-Wen: I know that you had mentioned earlier revisiting the reasonable_score 
problem.  A thought just occurred to me.  In a loop like:

 for (vsize i = configs.size (); i--;)
   if (configs[i]->demerits < reasonable_score)
     {
       score_count ++;
       score_stem_lengths (configs[i]);
     }

If the function score_stem_lengths returned the value of the score, then you 
could do something like:

vector<Beam_configuration*> rejects;
Real high_score = 0.0;
 for (vsize i = configs.size (); i--;)
   if (configs[i]->demerits < reasonable_score)
     {
       score_count ++;
       high_sore = max (high_score, score_stem_lengths (configs[i]));
     }
  else
    rejects.push_back (configs[i]);

 for (vsize i = rejects.size(); i--)
   rejects[i]->add (high_score, "F");

 rejects.clear ();

I don't have a good sense of how much compiling time this would add on, but it 
is a way to pad the unreasonable scores with a value that preserves their 
unreasonableness.

Cheers,
Mike


reply via email to

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