Change channel is broken stafftext properties.

• Oct 3, 2013 - 20:44
S4 - Minor

Load the attached file ChannelSetTest (created in 2.0).

Hit play

Expected result the sounds should switch channels from normal to mute at the Stafftext.

Actual result the trumpet is muted all the way through.

By contrast load the file ChannelTest (created in 1.3)

On playback you get the expected result (albeit a beat late).

This points to a possible problem in the signal change code in stafftextproperties.cpp

The Aeolus change messages are working ok

MuseScore 2 revision 6de066c
Windows 8 Professional

Attachment Size
ChannelSetTest.mscz 1.66 KB
ChannelTest.mscz 1.66 KB


Status (old) active patch (code needs review)

It turns out there were two bugs here. The first caused staff text to get applied at the wrong time, the third prevented a channel change to "normal" from having any effect at all. The latter problem stemmed from channels with no explicit name tag being sometimes given the name "normal" and sometimes not. I've fixed it to always given them this name.

A side effect of this change is that any instrument with an explicitly-named "normal" channel will now be written to the score without the name. This shouldn't be a problem in practice. But it causes some of the tests to fail because instruments.xml contains one instrument definition - "Cymbal" - that includes an explicitly-named "normal" channel. So tests that use this instrument fail just on account of the missing tag.

I could fix all the tests, and instruments.xml too, so there are no more explicit "normal" name tags - but that's 70 files to update. Or, I could have my code invent a new internal name to use ("default", say) just to work around this. I've got to go deal with some other things right now, if someone wants to weigh in soon, I'm all ears.

Although it is true that Cymbal could cause a problem, it's actually not true that the failing tests include cymbals. What they actually have in common is that they are all *import* tests. This is good; it gives me a much easier fix, I think.

Would it help if I edited the "normal" tags out of the instrumnets.xml file?

Or conversely should it be edited so each normal channel is defined as such?

Let me know - will not be a long job - my nerd instincts tell me it should be the latter :)

Actually, my patch already removes the only explicit "normal" definition in instruments.xml - in the Cymbal instrument. We don't have to manually edit all the translated versions, do we?

My fix seems good. Unnamed channels previously got assigned "normal" in several places in the code already - just not in the one place it was really needed. So I fixed that.

While we *could* add explicit normal declarations to everything in instruments.xml, this seems unnecessary - especially when you consider most instruments only have one channel. 1.X files will have empty channel names so the code has to handle them anyhow.

So, no action needed - assuming my PR gets merged, it's all a done deal.