Neil -- thanks ever so much for the detailed explanations.

> Take a look at lily/music.cc to see where the transposition takes place.

The transpose_mutable() function seems to be where it's at ... :-)

I note the following lines which are surely responsible for cleaning up
anything larger than a double flat:

  if (transposed.get_alteration ().abs () > Rational (1,1))
    {
      string delta_str;
      if (delta.get_alteration ().abs () > Rational (1, 1))
        delta_str = (delta.normalized ().to_string ()
                         + " " + _ ("(normalized pitch)"));
      else
        delta_str = delta.to_string ();

      warning (_f ("Transposing %s by %s makes alteration
                   larger than double",
                   p->to_string (), delta_str));
      transposed = transposed.normalized ();
    }

So, thinking about the way to implement the various chromatic
transpositions, what seems natural is that once new_val has been
generated in the transpose_mutable() function, to run through one of the
naturalize-pitch Scheme functions (or perhaps a C++ version of it).

Anyway, first port of call, I'm going to try and implement those toohigh
and toolow options for the naturalize-pitch Scheme function...

_______________________________________________
lilypond-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to