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:
Code changes
Merged code changes
These commits have be merged into MuseScore's main code repository and are available in the Nightly Builds:
- Pull Request #2719 ToolButtonMenu for switching between Note Entry Modes
- Pull Request #2734 Initial implementations of new Note Entry Modes
- 2016-08-08
a24f61d
fix Repitch mode after 1a8cdf1 - 2016-08-08
de9c2b5
ScoreStates for new note entry modes - 2016-08-08
2d11c86
NoteEntryMethod enum class for InputState - 2016-08-08
2011942
Rhythm input mode - 2016-08-08
8371a25
Real-time (manual) note entry mode - 2016-08-08
11cbddb
MidiRemote for Real-time Advance - 2016-08-08
f4c4f84
Option to trigger "Real-time Advance" when MidiRemote key is released - 2016-08-08
205d669
Real-time (automatic) note entry mode - 2016-08-08
9492dea
Metronome BeatTypes from timeSig and play click on Real-time advance - 2016-08-08
0a9f93b
New tests for metronome and update existing ones
- 2016-08-08
- Pull Request #2776 Option to enable PortMidi on Linux
- 2016-08-08
8c74814
Option to enable PortMidi on Linux
- 2016-08-08
- 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.
Evaluation
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.
Future work
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.
Previous | Section | Next | ||
---|---|---|---|---|
GSoC 2016 - Week 13 - Voices and Rhythms | shoogle's blog | GSoC 2016 - Project Demo Videos - Semi-Realtime MIDI |
Comments
Testing these new entry modes in the Nightly Builds and I'm loving them. I just have one issue in manual... musescore isn't detecting my pedal (which is probably a problem on my end of things) but I can't find the settings to change the key that is used to move from one beat to the next (which, I believe, normally would be the pedal). Under note entry in settings I could only find input settings for semi-realtime. Could somebody help me out if there is something I'm not seeing? Thanx!
In reply to Testing these new entry modes by speedmeteor101
The control that moves to the next beat is called "Real-time Advance". By default, this is set to "Enter" on the computer keyboard (part of the numeric keypad, or Fn+Return on Mac's that don't have a numeric keypad). However, I highly recommend you change it to be the MIDI pedal or something else on the MIDI keyboard. You can do this via the MIDI Remote in Preferences > Note Input. The other settings that affect the new input modes are also available from this tab of the Preferences dialog.
In reply to The control that moves to the by shoogle
Oh, thanx a lot! That clears it up for me. Great work this summer, this is a HUGE step for musescore and especially for us users on the end of composing and (for this, most of all) arranging. I'm really glad you chose to do this much for musescore. :D