GSoC 2019: Improvements to Instrument Changes - Summary

Posted 10 months ago

Over the past 3 months, I have worked to improve how instrument changes are implemented in MuseScore, to make them more user friendly, and more powerful. I have completed a lot of work in this time, and made many improvements. This would not have been possible without the help of my mentor, James Thistlewood, and the other developers of MuseScore, who have been incredibly helpful with their knowledge of the project in keeping me pointed in the right direction.

Evaluation of objectives

In my project proposal I set out a number of objectives I wanted to complete in the project. I have managed to complete all of them to a reasonable standard, although there may be bugs in some of them.

- Show options for the instrument change in the inspector, including a button to select the instrument to change to.

This work had already been completed by Isaac Weiss, although it had not yet been merged, so I included his commit in my pull request.

- Automatically change the instrument change text to the new instrument.

This was a very simple change to make, and works very well, even when changing the instrument again.

Change Text.gif

- Add “to instrument” text at the end of a previous passage, before the instrument change, that would inform the player to change the instrument.

This objective ended up being reversed, so that the instrument change would be placed by the user at the end of the previous passage, and the warning text would appear at the first note of the next passage. Again, this works well, allowing for a variety of edge cases.

Add Warning.gif

- Allow instrument changes to change the keys and clef in the middle of staves.

This proved to be a fairly challenging objective, especially regarding key signatures. There were a lot of edge cases to cover, and it took a lot of testing to make sure the key signature came out correctly, for the variety of different instruments and different keys. The intention for this was to be a seamless as possible, and I hope to have achieved that, by allowing for instrument changes to be deleted, inserted, and moved, and still keep the keys and clefs correct.

Key and Clef.gif

- Allow changes from pitched to unpitched percussion and automatically change the number of lines on the stave, as well as displaying the correct clef and key signature (optional)

Despite this being an optional objective, I managed to implement this feature well, and even extend it to tab instruments too. It is, however, not as extensively tested as other features, and so may contain bugs. Namely, it does not as yet have any integration tests for it, so future commits may break it. It also does not work properly when placed in the middle of a bar, as other features do. However, there are very few real world uses for this, and it shouldn't be too difficult to make a solution for this later on.

Percussion Change.gif

Conclusion

I have completed all of the main objectives of my proposal, and done a significant amount of work on the optional objective. I would love to continue working on this project, and even on this pull request, as I know there is still work that can be done on it to make the experience even better.

My project proposal can be found here

My pull request can be found here

I am very grateful to MuseScore and Google for giving me this opportunity, and I hope to continue this work in the future.

Josh Wood