GSoC 2016 - Work Product - Semi-Realtime MIDI
This page lists all of the changes to MuseScore's code that were completed as part of the Semi-Realtime MIDI project to improve note entry in MuseScore. The project was part of Google Summer of Code 2016.
More information about the project is available at the following locations:
Merged code changes
- Pull Request #2719 ToolButtonMenu for switching between Note Entry Modes
- Pull Request #2734 Initial implementations of new Note Entry Modes
a24f61dfix Repitch mode after 1a8cdf1
de9c2b5ScoreStates for new note entry modes
2d11c86NoteEntryMethod enum class for InputState
2011942Rhythm input mode
8371a25Real-time (manual) note entry mode
11cbddbMidiRemote for Real-time Advance
f4c4f84Option to trigger "Real-time Advance" when MidiRemote key is released
205d669Real-time (automatic) note entry mode
9492deaMetronome BeatTypes from timeSig and play click on Real-time advance
0a9f93bNew tests for metronome and update existing ones
- Pull Request #2776 Option to enable PortMidi on Linux
8c74814Option to enable PortMidi on Linux
- Pull Request #2784 Semi realtime midi - simplify rhythms
Un-merged code changes
There is one active pull request that has not yet been merged into MuseScore's main repository:
- Pull Request #2794 Semi-Realtime MIDI - separation of voices
The pull request adds the ability to enter multiple voices simultaneously in Real-time mode. The voice separation is fully implemented and works very well in most situations, but it can't be merged for the time being because it has exposed a bug in MuseScore's existing functions for handling voices which can sometimes lead to a crash.
The project met all of the goals outlined in the proposal and even went on to implement additional features that were not in the proposal but which are related to note entry. These include the rhythmical grouping of notes and rests according to the time signature, and the new Rhythm Input mode. In terms of the original proposal, the new Automatic Real-time and Manual Real-time modes offer a form of input that is much faster than the old methods, without compromising the accuracy of notation. These modes enable the user to enter notes by performing the piece on a MIDI keyboard. In the automatic variation the user plays along to a metronome beat, while in the manual variation the user provides the beat by tapping a key or pedal. The manual version of Semi-Realtime is particularly effective because it allows the user to play at their own tempo.
The project implemented a method of entry that I decided to call "Semi-Realtime" because it is similar to the real-time input modes offered by other notation programs, but it is not quite the same as those methods. Semi-Realtime method does away with a time-consuming analysis step in favour of a simpler algorithm which adds notes to the score straightaway, giving the user instant feedback about whether they pressed the right button. The simplicity of the Semi-Realtime approach is a great advantage for the majority of cases, but there some forms of non-rhythmic notation, such as tuplets, that cannot be entered using this method and would require a fully real-time implementation. The changes to MuseScore's code made for the Semi-Realtime project have laid much of the groundwork for this already, the remaining steps being to store the actual input times and convert them to ticks using a quantisation algorithm. After quantisation the ticks can just be passed to the Semi-Realtime algorithm to be displayed in the score. Additional features could be added later, such as the ability to change quantisation level after input is complete. If a Real-time mode ever does get implemented, I envision "Semi-Realtime" as becoming a kind-of "preview" to fully Real-time input, with the user having the ability to switch between the output of both algorithms and choose which form of notation to keep.