Non-lossy transposition

• Nov 28, 2009 - 15:36
S4 - Minor

MuseScore transposes to the correct pitches but frequently spells the pitch incorrectly. This becomes critical when switching between concert pitch and written pitch for transposing instruments. For example:

  1. Create a new score for Bb trumpet
  2. Add a B flat to the score
  3. Notes > Concert Pitch (to switch to concert pitch)
  4. Notes > Concert Pitch (to switch back to written pitch

Expected behavior: In step 4 you should see the B flat as written in step 2

Actual behavior: In step 4 the B flat is respelled as A sharp. Although it is obvious and easy to correct when you have only one note, it is less obvious when you are working on a full score and the correct pitch spelling is lost.

Discussion: I am not yet comfortable with C++ and Qt to code this but I wrote up the details necessary to implement non-lossy transposition. See Interval transposition in MuseScore .


The new interval-based transposition works reliably for me (unless the transposed notes get into triple sharps/flats and then MuseScore hangs).

In the key-based section of the transposition dialog I originally proposed a drop-down menu with the letter names only. This works in Sibelius because it distinguishes between major and minor key signatures and can easily detect if the current selection is C major or A minor for example. MuseScore does not distinguish between major and minor keys that share the same number of sharps or flats. Therefore I changed the drop-down menu from single letters to the full key signature names (e.g. "C major / A minor" instead of simply "C") in r. 2599.

The hang on triple sharps/flats (they are reduced to double sharps/flats) is fixed now.
The "add interval" commands now use the same algorithm used for transposition by interval.
Still work in progress...

I'm new here but i noticed that in transposing using key names does not cause the chord names to change at all. Using interval-based transposition does cause the chords to change; however, in going up a major 2nd from Bb Major to C Major, the Bb Major chord is rendered as B# -- ouch. Transposing up a Major 3rd caused the program to freeze.

This is version 0.9.6 beta on Ubuntu.