On Friday 14 May 2010, Niek van den Berg wrote:

> However this construction ignores the event property "accidental".
> ...
> now correct notes are in the MusicXML file.

Nobody has worked on the Music XML export code since long before the Pitch 
class existed.

Rosegarden used to have really stupid problems with notes like B# (it would 
write C# for B#, F# for E# and so on) and it is very likely nobody ever 
adjusted the Music XML code to take advantage of our newer, smarter pitch and 
accidental resolution methods.

> I'm willing to create a patch but I still have another problem. Now at
>  least the notes are correct (B B# A# Cb) but the B# is one octave too high
>  and the Cb is one octave too low. It looks to me
>  Pitch::getOctave(octaveBase) is doing something strange because it ignores
>  the pitch accidental. But this method is called in several places and I'm
>  not sure what will be broken when changing this. Maybe somebody can
>  comment on this?

I can remember at least one other place in the code where I had to have some 
manual if/then logic in there to override edge cases where Pitch::getOctave() 
would come out wrong.  If you make Pitch::getOctave() smarter, you will break 
code in these places, and I don't remember where they are.  It would be safest 
just to do the same kind of if/then logic in here.  It's probably screwing up 
at the B#/Cb divide.  I don't know exactly what the pattern will turn out to 
be off hand, but there should be a pretty simple test to make if this and this 
and this are met, then change the result by this much.

Sorry I'm being so vague.
-- 
D. Michael McIntyre

------------------------------------------------------------------------------

_______________________________________________
Rosegarden-devel mailing list
[email protected] - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel

Reply via email to