Ideas 2018

Updated 1 year ago

    Your proposal

    We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come onto the IRC channel #musescore on freenode.net, or contact us on the developer mailing list. Also check ideas from previous years.
    Click the 3 dots button at the top right and "Edit", then copy and paste an idea below and change the text with your new idea for GSoC 2018

    Plugin manager

    MuseScore functionality can be extended by plugins. Discovering the compatible plugins and installing them however is currently a manual job. The goal is to create an App Store-like Plugin Manager from which it is possible to discover, (un-)install, (auto-)update plugins in an easy manner. The Resource Manager currently used to handle language packs could be extended for this purpose, and indeed already has some bare-bones code for plugins.

    Since many (a little of 40%) of the current 2.x plugins are available on GitHub; we should consider using their releases-API for those plugins. At the same time, locally installed plugins must still be listed and integrated as well.
    Another matter to address is how to know if a plugin is compatible with the current MuseScore version.

    • Difficulty: Medium
    • Skills: C++/Qt
    • Possible mentor: Joachim Schmitz (@Jojo-Schmitz)

    Chord symbol style editor

    MuseScore supports the entry of chord symbols like Gm7, C7b9, etc. It has a pretty flexible system for entering the chords, where you can type pretty much a human musician might understand and MuseScore will do its best to understand it as well. However, there are only limited controls for actually displaying the chord symbol. MuseScore provides two preset options - Standard and Jazz - and does not allow you to customize, for instance, how large the "G" should be relative to the "m" or the "7" in Gm7, or how much subscripting should be applied to the "b9" in C7b9. There was some preliminary work done on an editor years ago that could be leveraged in producing a more complete facility. There are also some improvement that could be considered in how chord symbols are handled with respect to transposition, linked parts, fretboard diagrams, capo, Nashville notation, MIDI import, MusicXML, etc.

    • Difficulty: Medium to Hard
    • Skills: C++/Qt
    • Possible mentor: Marc Sabatella (@MarcSabatella)

    Page layout controls

    MuseScore provides a number of global controls over page layout - you can set the page size and margins, staff size, control distance between staves, hide empty staves, etc. There are certain overrides possible like staff spacers to change the distance between two staves. However, sometimes there is still a need to for more control - override global settings for individual pages, or particular systems. You cannot have the overall staff size or default staff distance slightly smaller on one page than another, or designate certain systems to not hide empty staves, not fill to the right margin, etc. Also we provide measure spacing controls per-measure, but no easy way to say "fit the following measures on one system".

    This project would involve an investigation of how we might best expose controls like this to the user and then to design and implement the facility.

    • Difficulty: Medium to Hard
    • Skills: C++/Qt
    • Possible mentor: Marc Sabatella (@MarcSabatella)

    Lyrics editor

    Update: Independently of GSoC, a student has build an improved Lyrics Editor implementation which allows 2 way editing. Therefore, the GSoC project would be to take this student's implementation, fix any bugs, and add the missing features, such as spell-checking and hyphen-checking. One idea would be to build an updatable hyphenation dictionary which can be shared between MuseScore's users, much like MuseScore's translations are shared now.

    Original description: As described here and partially implemented here, the Lyrics Editor would display all lyrics from the score as plaintext in an editable multiline text field. The contents of the text field would be doubly linked with the score, meaning that a change to lyrics in either the score or the Lyrics Editor would be reflected in the other. Users would be able to search for lyrics online and paste them into the lyrics editor, or copy lyrics from the editor to produce lyric booklets for choirs and church services.
    Possible extensions: spell-checking, automatic hyphenation, verse extraction.

    • Difficulty: Easy to Medium
    • Skills: C++/Qt
    • Possible mentor: Peter Jonas (@shoogle)

    Transcribe Assistant / Auto-transcribe / Interface with Sonic Visualizer or Vamp plugins for analysis of audio

    This idea is bit open-ended, but the general desire is to facilitate musical transcription from audio with musescore. Considering that there is already a lot of prior knowledge on Automatic music transcription, it might make sense to focus on integrating with external tools rather than reinvent the wheel. Sonic Visualizer is a particularly powerful open source desktop application which has all sorts of methods to visualize the waveform. In particular it has a Peak Frequency Spectogram view mode, which is useful for visually identiying notes and creating them on the midi layer. Sonic Visualizer also can interface with "Vamp plugins" to do all sorts of analysis, in particlar there are a few which can help convert the audio into midi. It would be useful to interface Vamp plugins or Sonic Visualizer into musescore, so could see notation along with the analyzed midi and spectogram. And there is a standalone command line tool aubio that can detect note onset and interface with jack. But probably would need manual assistance for converting the messy analyzed midi into something that looks nice in musescore...might need to identifying things like time signatures and tempo changes and isolating instruments & voices. In addition to dealing with an entire file of pre-recorded music, it would be nice to be able to sing or play on a non-midi instrument in the middle of score writing and have an easy way to input that analyzed midi into the score, synced to the time sig and beat.

    And rather than complete auto-transcribe, another approach is just an transcribe assistant, similar to the proprietary program Transcribe! but something that can interace or be incorporated maybe as a plugin into MuseScore. Would be useful would be to display the Constant-Q Transform of audio as the background for the piano-roll editor, that way can visually verify if notes in musescore match frequencies in the audio.

    Aside: there is also a proprietary program AnthemScore which converts audio into MusicXML via a Convolutional Neural Networks described here which operates on entire file at a time, but since it is not open source it would be probably be hard to integrate into musescore. It also takes several minutes on a Quad-core machine to analyse, and it doesn't seem to handle tempo and time sig changes well (although pitch detection is almost spot on), and puts all note onto a single grandstaff.

    Anyway maybe another approach is to simply focus on making musescore midi file input be much more smarter to be able to identify time sig changes, tempo changes, breaths/pauses, rubato, etc.

    Sorry this is a bit rambling, but maybe there is a specific project description along any of these lines.

    Additional note for 2018: the ability to interface musescore with other MIDI and audio programs by sharing data somehow in realtime might actually be an entire project in itself. Might require integrating or creating a standard API specfically for that, which other program could easily incorporate. Be aware, such an interface is more involved than what I can describe here, primarily because notation is a separate animal to MIDI and audio, but I'm suggesting this here incase some people have good ideas. If done smartly it could allow things like the ability to record MIDI into an DAW (or even record audio into a SonicVisualizer or a transcribe assitant) and then see a simplified notational representation in MuseScore while preserving the link between MuseScore's notational elements and the other program's MIDI or audio regions such that subsequent edits in either program would be reflected somehow in the linked program.

    • Difficulty: Medium to Hard
    • Skills: C++/Qt
    • Possible mentor: Eric Fontaine (@ericfontainejazz)

    Beginner mode

    MuseScore is very powerful software, but having so many features, the user interface is pretty overwhelming. This is particularly true for younger users - MuseScore is often used in schools with students as young as 5-10 years old.

    We already provide some facilities that could be leveraged to produce more beginner-friendly "skins" on the UI - customizable palettes, icon size settings, etc. This project would involve adding some more UI customization facilities and then implementing one or more presets (akin to the current Basic and Advanced workspaces for palettes) to make the interface more beginner-friendly.

    Other aspects of this project could include adding more on-screen help - remember "Mr Clippy" from earlier versions of Microsoft Word?

    • Difficulty: Medium
    • Skills: C++/Qt
    • Possible mentor: Marc Sabatella (@MarcSabatella)

    Scratch pad

    Often in the forums we hear people express the desire for a "scratch pad" mode, where a section of music could be edited in a way you to change note durations and have some number of subsequent notes automatically move to compensate. This would allow deleting a note to fix a mistake that was not noticed until other notes were entered, also it would allow one to enter notes first as pitches only then go back and figure out the rhythms. It could also be used to set up a meterless score.

    This project would involve designing and implementing such a facility. One idea is to allow the user to select a region (default might be cursor position to end of measure, or end of score), hit a key/button, and have that section loaded into a separate scratch pad (maybe displayed as a dialog) that you could then play around with as desired. When done, you hit another key/button and the music is copied back to the score, replacing what was there originally. Lots of details to work out here, but there does seem to be some good general buy-in on that type of model.

    • Difficulty: Medium to Hard
    • Skills: C++/Qt
    • Possible mentor: Marc Sabatella (@MarcSabatella)

    Machine learning dataset for Optical Music Recognition

    Last year, MuseScore started a collaboration with Audiveris, one of the very few full featured open source OMR software, to create a dataset of musical elements including some "real life" context around them. See https://github.com/Audiveris/omr-dataset-tools for more information about the format required. The work started in a branch based on MuseScore 2.1: https://github.com/musescore/MuseScore/tree/imeta
    Completing this task and porting it to the master will enable the creation of a huge dataset of annotated music symbols in context. It would be used by Audiveris but also by other OMR academical projects.

    • Difficulty: Easy to medium
    • Skills: C++/Qt
    • Possible mentor: Nicolas Froment (@lasconic), Hervé Bitteur (@hbitteur, Audiveris main dev)

    Score comparison/diff tool

    A frequent request is for a way to compare two versions of a score side-by-side, with the differences highlighted to make it easy to see what has changed. Such tools are common for text-based formats, but are difficult to achieve for sheet music due to the visual nature of music notation. However, MuseScore's MSCX files are text-based representations of sheet music, which people can (and do) use with textual diff tools and version control systems like git. Unfortunately, the MSCX format is not optimised for use with these tools, so minor changes to a score (such as deleting a single tie) can result in a large diff being generated. The situation with textual diffs can be improved significantly by making a few simple changes to the MSCX format. The diff information can then be presented in a user-friendly way within MuseScore in the form of a list of elements that have been added, removed, or modified. It is likely improving the situation with textual diffs will make the task of building a visual diff system significantly easier, and the project could begin to explore this area if time allows.

    • Difficulty: Medium to Hard
    • Skills: C++/Qt, git/diff
    • Possible mentor: Peter Jonas (@shoogle)

    Improvements to notation and playback

    Make significant improvements by implementing a few common feature requests and tackling some relatively low-hanging fruit on the issue tracker. A few suggestions:

    • Rubato tempo changes (rit., rall. & accel.)
    • Ability to add accidentals to ornaments
    • Unwinding repeats
      • ties across repeats
      • different playback on repeat

    Implementing these would improve playback, notation, layout, and import/export with other programs. These changes would be highly visible and benefit all of MuseScore's users.

    • Difficulty: Medium to Hard
    • Skills: C++/Qt, musical knowledge
    • Possible mentor: Peter Jonas (@shoogle) and ???